/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include #include // NOT FULLY DEFINED SERVICES #include #include #include namespace adoc { //************************ Cx_LineStart ************************// Cx_LineStart::Cx_LineStart( TkpContext & i_rFollowUpContext ) : pDealer(0), pFollowUpContext(&i_rFollowUpContext) { } void Cx_LineStart::ReadCharChain( CharacterSource & io_rText ) { uintt nCount = 0; for ( char cNext = io_rText.CurChar(); cNext == 32 OR cNext == 9; cNext = io_rText.MoveOn() ) { if (cNext == 32) nCount++; else if (cNext == 9) nCount += 4; } io_rText.CutToken(); if (nCount < 50) pNewToken = new Tok_LineStart(UINT8(nCount)); else pNewToken = new Tok_LineStart(0); } bool Cx_LineStart::PassNewToken() { if (pNewToken) { pNewToken.Release()->DealOut(*pDealer); return true; } return false; } TkpContext & Cx_LineStart::FollowUpContext() { return *pFollowUpContext; } //************************ Cx_CheckStar ************************// Cx_CheckStar::Cx_CheckStar( TkpContext & i_rFollowUpContext ) : pDealer(0), pFollowUpContext(&i_rFollowUpContext), pEnd_FollowUpContext(0), bCanBeEnd(false), bEndTokenFound(false) { } void Cx_CheckStar::ReadCharChain( CharacterSource & io_rText ) { bEndTokenFound = false; if (bCanBeEnd) { char cNext = jumpOver(io_rText,'*'); if ( NULCH == cNext ) throw X_Parser(X_Parser::x_UnexpectedEOF, "", String::Null_(), 0); if (cNext == '/') { io_rText.MoveOn(); pNewToken = new Tok_EoDocu; bEndTokenFound = true; } else { pNewToken = new Tok_DocWord(io_rText.CutToken()); } } else { jumpToWhite(io_rText); pNewToken = new Tok_DocWord(io_rText.CutToken()); } } bool Cx_CheckStar::PassNewToken() { if (pNewToken) { pNewToken.Release()->DealOut(*pDealer); return true; } return false; } TkpContext & Cx_CheckStar::FollowUpContext() { if (bEndTokenFound) return *pEnd_FollowUpContext; else return *pFollowUpContext; } //************************ Cx_AtTagCompletion ************************// Cx_AtTagCompletion::Cx_AtTagCompletion( TkpContext & i_rFollowUpContext ) : pDealer(0), pFollowUpContext(&i_rFollowUpContext) { } void Cx_AtTagCompletion::ReadCharChain( CharacterSource & io_rText ) { jumpToWhite(io_rText); csv_assert(fCur_TokenCreateFunction != 0); pNewToken = (*fCur_TokenCreateFunction)(io_rText.CutToken()); } bool Cx_AtTagCompletion::PassNewToken() { if (pNewToken) { pNewToken.Release()->DealOut(*pDealer); return true; } return false; } TkpContext & Cx_AtTagCompletion::FollowUpContext() { return *pFollowUpContext; } } // namespace adoc