1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski #include <precomp.h>
23*b1cdbd2cSJim Jagielski #include <adoc/cx_a_sub.hxx>
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski // NOT FULLY DEFINED SERVICES
27*b1cdbd2cSJim Jagielski #include <tokens/parseinc.hxx>
28*b1cdbd2cSJim Jagielski #include <x_parse.hxx>
29*b1cdbd2cSJim Jagielski #include <adoc/tk_docw.hxx>
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski
32*b1cdbd2cSJim Jagielski namespace adoc {
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski //************************ Cx_LineStart ************************//
35*b1cdbd2cSJim Jagielski
Cx_LineStart(TkpContext & i_rFollowUpContext)36*b1cdbd2cSJim Jagielski Cx_LineStart::Cx_LineStart( TkpContext & i_rFollowUpContext )
37*b1cdbd2cSJim Jagielski : pDealer(0),
38*b1cdbd2cSJim Jagielski pFollowUpContext(&i_rFollowUpContext)
39*b1cdbd2cSJim Jagielski {
40*b1cdbd2cSJim Jagielski }
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski void
ReadCharChain(CharacterSource & io_rText)43*b1cdbd2cSJim Jagielski Cx_LineStart::ReadCharChain( CharacterSource & io_rText )
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski uintt nCount = 0;
46*b1cdbd2cSJim Jagielski for ( char cNext = io_rText.CurChar(); cNext == 32 OR cNext == 9; cNext = io_rText.MoveOn() )
47*b1cdbd2cSJim Jagielski {
48*b1cdbd2cSJim Jagielski if (cNext == 32)
49*b1cdbd2cSJim Jagielski nCount++;
50*b1cdbd2cSJim Jagielski else if (cNext == 9)
51*b1cdbd2cSJim Jagielski nCount += 4;
52*b1cdbd2cSJim Jagielski }
53*b1cdbd2cSJim Jagielski io_rText.CutToken();
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski if (nCount < 50)
56*b1cdbd2cSJim Jagielski pNewToken = new Tok_LineStart(UINT8(nCount));
57*b1cdbd2cSJim Jagielski else
58*b1cdbd2cSJim Jagielski pNewToken = new Tok_LineStart(0);
59*b1cdbd2cSJim Jagielski }
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski bool
PassNewToken()62*b1cdbd2cSJim Jagielski Cx_LineStart::PassNewToken()
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski if (pNewToken)
65*b1cdbd2cSJim Jagielski {
66*b1cdbd2cSJim Jagielski pNewToken.Release()->DealOut(*pDealer);
67*b1cdbd2cSJim Jagielski return true;
68*b1cdbd2cSJim Jagielski }
69*b1cdbd2cSJim Jagielski return false;
70*b1cdbd2cSJim Jagielski }
71*b1cdbd2cSJim Jagielski
72*b1cdbd2cSJim Jagielski TkpContext &
FollowUpContext()73*b1cdbd2cSJim Jagielski Cx_LineStart::FollowUpContext()
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski return *pFollowUpContext;
76*b1cdbd2cSJim Jagielski }
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski //************************ Cx_CheckStar ************************//
80*b1cdbd2cSJim Jagielski
Cx_CheckStar(TkpContext & i_rFollowUpContext)81*b1cdbd2cSJim Jagielski Cx_CheckStar::Cx_CheckStar( TkpContext & i_rFollowUpContext )
82*b1cdbd2cSJim Jagielski : pDealer(0),
83*b1cdbd2cSJim Jagielski pFollowUpContext(&i_rFollowUpContext),
84*b1cdbd2cSJim Jagielski pEnd_FollowUpContext(0),
85*b1cdbd2cSJim Jagielski bCanBeEnd(false),
86*b1cdbd2cSJim Jagielski bEndTokenFound(false)
87*b1cdbd2cSJim Jagielski {
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski void
ReadCharChain(CharacterSource & io_rText)92*b1cdbd2cSJim Jagielski Cx_CheckStar::ReadCharChain( CharacterSource & io_rText )
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski bEndTokenFound = false;
95*b1cdbd2cSJim Jagielski if (bCanBeEnd)
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski char cNext = jumpOver(io_rText,'*');
98*b1cdbd2cSJim Jagielski if ( NULCH == cNext )
99*b1cdbd2cSJim Jagielski throw X_Parser(X_Parser::x_UnexpectedEOF, "", String::Null_(), 0);
100*b1cdbd2cSJim Jagielski if (cNext == '/')
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski io_rText.MoveOn();
103*b1cdbd2cSJim Jagielski pNewToken = new Tok_EoDocu;
104*b1cdbd2cSJim Jagielski bEndTokenFound = true;
105*b1cdbd2cSJim Jagielski }
106*b1cdbd2cSJim Jagielski else
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski pNewToken = new Tok_DocWord(io_rText.CutToken());
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski else
112*b1cdbd2cSJim Jagielski {
113*b1cdbd2cSJim Jagielski jumpToWhite(io_rText);
114*b1cdbd2cSJim Jagielski pNewToken = new Tok_DocWord(io_rText.CutToken());
115*b1cdbd2cSJim Jagielski }
116*b1cdbd2cSJim Jagielski }
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski bool
PassNewToken()119*b1cdbd2cSJim Jagielski Cx_CheckStar::PassNewToken()
120*b1cdbd2cSJim Jagielski {
121*b1cdbd2cSJim Jagielski if (pNewToken)
122*b1cdbd2cSJim Jagielski {
123*b1cdbd2cSJim Jagielski pNewToken.Release()->DealOut(*pDealer);
124*b1cdbd2cSJim Jagielski return true;
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski return false;
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski TkpContext &
FollowUpContext()130*b1cdbd2cSJim Jagielski Cx_CheckStar::FollowUpContext()
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski if (bEndTokenFound)
133*b1cdbd2cSJim Jagielski return *pEnd_FollowUpContext;
134*b1cdbd2cSJim Jagielski else
135*b1cdbd2cSJim Jagielski return *pFollowUpContext;
136*b1cdbd2cSJim Jagielski }
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski //************************ Cx_AtTagCompletion ************************//
140*b1cdbd2cSJim Jagielski
Cx_AtTagCompletion(TkpContext & i_rFollowUpContext)141*b1cdbd2cSJim Jagielski Cx_AtTagCompletion::Cx_AtTagCompletion( TkpContext & i_rFollowUpContext )
142*b1cdbd2cSJim Jagielski : pDealer(0),
143*b1cdbd2cSJim Jagielski pFollowUpContext(&i_rFollowUpContext)
144*b1cdbd2cSJim Jagielski {
145*b1cdbd2cSJim Jagielski }
146*b1cdbd2cSJim Jagielski
147*b1cdbd2cSJim Jagielski void
ReadCharChain(CharacterSource & io_rText)148*b1cdbd2cSJim Jagielski Cx_AtTagCompletion::ReadCharChain( CharacterSource & io_rText )
149*b1cdbd2cSJim Jagielski {
150*b1cdbd2cSJim Jagielski jumpToWhite(io_rText);
151*b1cdbd2cSJim Jagielski csv_assert(fCur_TokenCreateFunction != 0);
152*b1cdbd2cSJim Jagielski pNewToken = (*fCur_TokenCreateFunction)(io_rText.CutToken());
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski
155*b1cdbd2cSJim Jagielski bool
PassNewToken()156*b1cdbd2cSJim Jagielski Cx_AtTagCompletion::PassNewToken()
157*b1cdbd2cSJim Jagielski {
158*b1cdbd2cSJim Jagielski if (pNewToken)
159*b1cdbd2cSJim Jagielski {
160*b1cdbd2cSJim Jagielski pNewToken.Release()->DealOut(*pDealer);
161*b1cdbd2cSJim Jagielski return true;
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski return false;
164*b1cdbd2cSJim Jagielski }
165*b1cdbd2cSJim Jagielski
166*b1cdbd2cSJim Jagielski TkpContext &
FollowUpContext()167*b1cdbd2cSJim Jagielski Cx_AtTagCompletion::FollowUpContext()
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski return *pFollowUpContext;
170*b1cdbd2cSJim Jagielski }
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski } // namespace adoc
176*b1cdbd2cSJim Jagielski
177