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