1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include <precomp.h>
23 #include <s2_dsapi/cx_dsapi.hxx>
24 
25 
26 // NOT FULLY DEFINED SERVICES
27 #include <x_parse2.hxx>
28 #include <tools/tkpchars.hxx>
29 #include <s2_dsapi/tk_atag2.hxx>
30 #include <s2_dsapi/tk_docw2.hxx>
31 #include <s2_dsapi/tk_xml.hxx>
32 #include <s2_dsapi/cx_docu2.hxx>
33 #include <s2_dsapi/tokrecv.hxx>
34 
35 
36 namespace csi
37 {
38 namespace dsapi
39 {
40 
41 
42 const intt C_nStatusSize = 128;
43 const intt C_nCppInitialNrOfStati = 400;
44 
45 
46 const uintt nF_fin_Error = 1;
47 const uintt nF_fin_Ignore = 2;
48 const uintt nF_fin_Eof = 3;
49 const uintt nF_fin_AnyWord = 4;
50 const uintt nF_fin_AtTag = 5;
51 const uintt nF_fin_EndSign = 6;
52 const uintt nF_goto_EoHtml = 7;
53 const uintt nF_goto_EoXmlConst = 8;
54 const uintt nF_goto_EoXmlLink_BeginTag = 9;
55 const uintt nF_goto_EoXmlLink_EndTag = 10;
56 const uintt nF_goto_EoXmlFormat_BeginTag = 11;
57 const uintt nF_goto_EoXmlFormat_EndTag = 12;
58 const uintt nF_goto_CheckStar = 13;
59 const uintt nF_fin_Comma = 14;
60 const uintt nF_fin_White = 15;
61 
62 const UINT16 nTok_at_author = 100 + Tok_AtTag::author;
63 const UINT16 nTok_at_see = 100 + Tok_AtTag::see;
64 const UINT16 nTok_at_param = 100 + Tok_AtTag::param;
65 const UINT16 nTok_at_return = 100 + Tok_AtTag::e_return;
66 const UINT16 nTok_at_throws = 100 + Tok_AtTag::e_throw;
67 const UINT16 nTok_at_example = 100 + Tok_AtTag::example;
68 const UINT16 nTok_at_deprecated = 100 + Tok_AtTag::deprecated;
69 const UINT16 nTok_at_suspicious = 100 + Tok_AtTag::suspicious;
70 const UINT16 nTok_at_missing = 100 + Tok_AtTag::missing;
71 const UINT16 nTok_at_incomplete = 100 + Tok_AtTag::incomplete;
72 const UINT16 nTok_at_version = 100 + Tok_AtTag::version;
73 const UINT16 nTok_at_guarantees = 100 + Tok_AtTag::guarantees;
74 const UINT16 nTok_at_exception = 100 + Tok_AtTag::exception;
75 const UINT16 nTok_at_since = 100 + Tok_AtTag::since;
76 
77 const UINT16 nTok_const_TRUE = 200 + Tok_XmlConst::e_true;
78 const UINT16 nTok_const_FALSE = 200 + Tok_XmlConst::e_false;
79 const UINT16 nTok_const_NULL = 200 + Tok_XmlConst::e_null;
80 const UINT16 nTok_const_void = 200 + Tok_XmlConst::e_void;
81 
82 const UINT16 nTok_link_typeB = 300 + Tok_XmlLink_BeginTag::type;
83 const UINT16 nTok_link_typeE = 325 + Tok_XmlLink_EndTag::type;
84 const UINT16 nTok_link_memberB = 300 + Tok_XmlLink_BeginTag::member;
85 const UINT16 nTok_link_membeE = 325 + Tok_XmlLink_EndTag::member;
86 const UINT16 nTok_link_constB = 300 + Tok_XmlLink_BeginTag::e_const;
87 const UINT16 nTok_link_constE = 325 + Tok_XmlLink_EndTag::e_const;
88 
89 const UINT16 nTok_format_listingB = 350 + Tok_XmlFormat_BeginTag::listing;
90 const UINT16 nTok_format_listingE = 375 + Tok_XmlFormat_EndTag::listing;
91 const UINT16 nTok_format_codeB = 350 + Tok_XmlFormat_BeginTag::code;
92 const UINT16 nTok_format_codeE = 375 + Tok_XmlFormat_EndTag::code;
93 const UINT16 nTok_format_atomB = 350 + Tok_XmlFormat_BeginTag::atom;
94 const UINT16 nTok_format_atomE = 375 + Tok_XmlFormat_EndTag::atom;
95 
96 
97 const UINT16 nTok_html_parastart = 400;
98 
99 const UINT16 nTok_MLDocuEnd = 501;
100 const UINT16 nTok_EOL = 502;
101 
102 
Context_Docu(Token_Receiver & o_rReceiver)103 Context_Docu::Context_Docu( Token_Receiver & o_rReceiver )
104 	:	aStateMachine(C_nStatusSize, C_nCppInitialNrOfStati),
105 		pReceiver(&o_rReceiver),
106 		pParentContext(0),
107 		pCx_EoHtml(0),
108 		pCx_EoXmlConst(0),
109 		pCx_EoXmlLink_BeginTag(0),
110 		pCx_EoXmlLink_EndTag(0),
111 		pCx_EoXmlFormat_BeginTag(0),
112 		pCx_EoXmlFormat_EndTag(0),
113 		pCx_CheckStar(0),
114 		pNewToken(0),
115 		pFollowUpContext(0),
116 		bIsMultiline(false)
117 {
118 	pCx_EoHtml = new Cx_EoHtml(o_rReceiver, *this);
119 	pCx_EoXmlConst = new Cx_EoXmlConst(o_rReceiver, *this);
120 	pCx_EoXmlLink_BeginTag = new Cx_EoXmlLink_BeginTag(o_rReceiver, *this);
121 	pCx_EoXmlLink_EndTag = new Cx_EoXmlLink_EndTag(o_rReceiver, *this);
122 	pCx_EoXmlFormat_BeginTag = new Cx_EoXmlFormat_BeginTag(o_rReceiver, *this);
123 	pCx_EoXmlFormat_EndTag = new Cx_EoXmlFormat_EndTag(o_rReceiver, *this);
124 	pCx_CheckStar = new Cx_CheckStar(*pReceiver,*this);
125 
126 	SetupStateMachine();
127 }
128 
129 void
SetParentContext(TkpContext & io_rParentContext,const char *)130 Context_Docu::SetParentContext( TkpContext & io_rParentContext,
131 								const char * )
132 {
133 	pFollowUpContext = pParentContext = &io_rParentContext;
134 	pCx_CheckStar->Set_End_FolloUpContext(io_rParentContext);
135 }
136 
~Context_Docu()137 Context_Docu::~Context_Docu()
138 {
139 }
140 
141 void
ReadCharChain(CharacterSource & io_rText)142 Context_Docu::ReadCharChain( CharacterSource & io_rText )
143 {
144 	csv_assert(pParentContext != 0);
145 
146 	pNewToken = 0;
147 
148 	UINT16 nTokenId = 0;
149 	StmBoundsStatu2 & rBound = aStateMachine.GetCharChain(nTokenId, io_rText);
150 
151 	// !!!
152 	// 	 The order of the next two lines is essential, because
153 	//   pFollowUpContext may be changed by PerformStatusFunction() also,
154 	//   which then MUST override the previous assignment.
155 	pFollowUpContext = rBound.FollowUpContext();
156 	PerformStatusFunction(rBound.StatusFunctionNr(), nTokenId, io_rText);
157 }
158 
159 bool
PassNewToken()160 Context_Docu::PassNewToken()
161 {
162 	if (pNewToken)
163 	{
164 		pReceiver->Receive(*pNewToken.Release());
165 		return true;
166 	}
167 	return false;
168 }
169 
170 TkpContext &
FollowUpContext()171 Context_Docu::FollowUpContext()
172 {
173 	csv_assert(pFollowUpContext != 0);
174 	return *pFollowUpContext;
175 }
176 
177 void
PerformStatusFunction(uintt i_nStatusSignal,UINT16 i_nTokenId,CharacterSource & io_rText)178 Context_Docu::PerformStatusFunction( uintt				i_nStatusSignal,
179 									 UINT16 	      	i_nTokenId,
180 									 CharacterSource &	io_rText )
181 {
182 	switch (i_nStatusSignal)
183 	{
184 		case nF_fin_White:
185 			io_rText.CutToken();
186 			pNewToken = new Tok_White;
187             break;
188 		case nF_fin_Error:
189 			throw X_AutodocParser(X_AutodocParser::x_InvalidChar);
190             // no break because of throw
191 		case nF_fin_Ignore:
192 			pNewToken = 0;
193 			io_rText.CutToken();
194 			break;
195 		case nF_fin_Eof:
196 			if (bIsMultiline)
197 				throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
198 			else
199 				io_rText.CutToken();
200 				pNewToken = new Tok_EOF;
201 			break;
202 		case nF_fin_AnyWord:
203 			pNewToken = new Tok_Word(io_rText.CutToken());
204 			break;
205 		case nF_fin_AtTag:
206 			io_rText.CutToken();
207 			pNewToken = new Tok_AtTag( i_nTokenId - 100 );
208 			break;
209 		case nF_fin_Comma:
210 			io_rText.CutToken();
211 			pNewToken = new Tok_Comma;
212 			break;
213 		case nF_fin_EndSign:
214 			io_rText.CutToken();
215 			switch (i_nTokenId)
216 			{
217 				case nTok_MLDocuEnd:
218 					if (bIsMultiline)
219 					{
220 						pNewToken = new Tok_DocuEnd;
221 						pFollowUpContext = pParentContext;
222 					}
223 					else
224 					{
225 						pNewToken = new Tok_Word(io_rText.CutToken());
226 						pFollowUpContext = this;
227 					}
228 					break;
229 				case nTok_EOL:
230 					if (bIsMultiline)
231 					{
232 						pNewToken = new Tok_EOL;
233 						pFollowUpContext = this;
234 					}
235 					else
236 					{
237 						pNewToken = new Tok_DocuEnd;
238 						pFollowUpContext = pParentContext;
239 					}
240 					pReceiver->Increment_CurLine();
241 					break;
242 				default:
243 					csv_assert(false);
244 			}
245 			break;
246 		case nF_goto_EoHtml:
247 			pCx_EoHtml->SetIfIsStartOfParagraph(i_nTokenId == nTok_html_parastart);
248 			break;
249 		case nF_goto_EoXmlConst:
250 			pCx_EoXmlConst->SetTokenId(i_nTokenId - 200);
251 			break;
252 		case nF_goto_EoXmlLink_BeginTag:
253 			pCx_EoXmlLink_BeginTag->SetTokenId(i_nTokenId - 300);
254 			break;
255 		case nF_goto_EoXmlLink_EndTag:
256 			pCx_EoXmlLink_EndTag->SetTokenId(i_nTokenId - 325);
257 			break;
258 		case nF_goto_EoXmlFormat_BeginTag:
259 			pCx_EoXmlFormat_BeginTag->SetTokenId(i_nTokenId - 350);
260 			break;
261 		case nF_goto_EoXmlFormat_EndTag:
262 			pCx_EoXmlFormat_EndTag->SetTokenId(i_nTokenId - 375);
263 			break;
264 		case nF_goto_CheckStar:
265 			pCx_CheckStar->SetIsEnd( bIsMultiline );
266 			break;
267 		default:
268 			csv_assert(false);
269 	}	// end switch (i_nStatusSignal)
270 }
271 
272 void
SetupStateMachine()273 Context_Docu::SetupStateMachine()
274 {
275 	// Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel):
276 //	const INT16	bas = 0;		// Base-Status
277 	const INT16	wht = 1;		// Whitespace-overlook-Status
278 	const INT16	awd = 2;        // Any-Word-Read-Status
279 
280 	// Kontextwechsel-Stati:
281 	const INT16	goto_EoHtml = 3;
282 	const INT16	goto_EoXmlConst = 4;
283 	const INT16	goto_EoXmlLink_BeginTag = 5;
284 	const INT16	goto_EoXmlLink_EndTag = 6;
285 	const INT16	goto_EoXmlFormat_BeginTag = 7;
286 	const INT16	goto_EoXmlFormat_EndTag = 8;
287 	const INT16	goto_CheckStar = 9;
288 
289 	// Tokenfinish-Stati:
290 	const INT16 finError = 10;
291 //	const INT16 finIgnore = 11;
292 	const INT16 finEof = 12;
293 	const INT16 finAnyWord = 13;
294 	const INT16 finAtTag = 14;
295 	const INT16 finEndSign = 15;
296 //	const INT16 finComma = 16;
297 	const INT16 finWhite = 17;
298 
299 	// Konstanten zur Benutzung in der Tabelle:
300 	const INT16 ght = goto_EoHtml;
301 /*
302 	const INT16 gxc = goto_EoXmlConst;
303 	const INT16 glb = goto_EoXmlLink_TagBegin;
304 	const INT16 gle = goto_EoXmlLink_TagEnd;
305 	const INT16 gfb = goto_EoXmlFormat_TagBegin;
306 	const INT16 gfe = goto_EoXmlFormat_TagEnd;
307 */
308 	const INT16 err = finError;
309 	const INT16 faw = finAnyWord;
310 //	const INT16 fig = finIgnore;
311 //	const INT16 fes = finEndSign;
312 	const INT16 fof = finEof;
313 //	const INT16 fat = finAtTag;
314     const INT16 fwh = finWhite;
315 
316 	/// The '0's  will be replaced by calls of AddToken().
317 
318 	const INT16 A_nTopStatus[C_nStatusSize] =
319 	//  0	1	2	3	4	5	6	7	8	9  10  11  12  13  14  15
320 	{fof,err,err,err,err,err,err,err,err,wht,  0,wht,wht,  0,err,err,
321 	 err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // ... 31
322 	 wht,awd,awd,awd,awd,awd,awd,awd,awd,awd,  0,awd,awd,awd,awd,awd,
323 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,  0,awd,awd,awd, // ... 63
324 	   0,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
325 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
326 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
327 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd  // ... 127
328 	};
329 
330 	const INT16 A_nWhitespaceStatus[C_nStatusSize] =
331   //   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
332 	{fof,err,err,err,err,err,err,err,err,wht,fwh,wht,wht,fwh,err,err,
333 	 err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // ... 31
334 	 wht,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
335 	 fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh, // ... 63
336 	 fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
337 	 fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh, // ... 95
338 	 fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
339 	 fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh  // ... 127
340 	};
341 
342 	const INT16 A_nWordStatus[C_nStatusSize] =
343 	// 	0	1	2	3	4	5	6	7	8	9  10  11  12  13  14  15
344 	{faw,err,err,err,err,err,err,err,err,faw,faw,faw,faw,faw,err,err,
345 	 err,err,err,err,err,err,err,err,err,err,faw,err,err,err,err,err, // ... 31
346 	 faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd,awd,awd,
347 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd, // ... 63
348 	 faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
349 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
350 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
351 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd  // ... 127
352 	};
353 
354 	const INT16 A_nAtTagDefStatus[C_nStatusSize] =
355 	// 	0	1	2	3	4	5	6	7	8	9  10  11  12  13  14  15
356 	{faw,err,err,err,err,err,err,err,err,faw,faw,faw,faw,faw,err,err,
357 	 err,err,err,err,err,err,err,err,err,err,faw,err,err,err,err,err, // ... 31
358 	 faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd,awd,awd,
359 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,faw,awd,awd,awd, // ... 63
360 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
361 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
362 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
363 	 awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd  // ... 127
364 	};
365 
366 	const INT16 A_nHtmlDefStatus[C_nStatusSize] =
367 	// 	0	1	2	3	4	5	6	7	8	9  10  11  12  13  14  15
368 	{ght,err,err,err,err,err,err,err,err,ght,ght,ght,ght,ght,err,err,
369 	 err,err,err,err,err,err,err,err,err,err,ght,err,err,err,err,err, // ... 31
370 	 ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,
371 	 ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght, // ... 63
372 	 ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,
373 	 ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght, // ... 95
374 	 ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,
375 	 ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght  // ... 127
376 	};
377 
378 	const INT16 A_nPunctDefStatus[C_nStatusSize] =
379 	// 	0	1	2	3	4	5	6	7	8	9  10  11  12  13  14  15
380 	{err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
381 	 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ...
382 	 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
383 	 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ...
384 	 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
385 	 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ...
386 	 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
387 	 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err  // 112 ...
388 	};
389 
390 	DYN StmArrayStatu2 * dpStatusTop
391 			= new StmArrayStatu2( C_nStatusSize, A_nTopStatus, 0, true);
392 	DYN StmArrayStatu2 * dpStatusWhite
393 			= new StmArrayStatu2( C_nStatusSize, A_nWhitespaceStatus, 0, true);
394 	DYN StmArrayStatu2 * dpStatusWord
395 			= new StmArrayStatu2( C_nStatusSize, A_nWordStatus, 0, true);
396 
397 	DYN StmBoundsStatu2 *  	dpBst_goto_EoHtml
398 			= new StmBoundsStatu2( *this, *pCx_EoHtml, nF_goto_EoHtml, true );
399 	DYN StmBoundsStatu2 *  	dpBst_goto_EoXmlConst
400 			= new StmBoundsStatu2( *this, *pCx_EoXmlConst, nF_goto_EoXmlConst, true );
401 	DYN StmBoundsStatu2 *  	dpBst_goto_EoXmlLink_BeginTag
402 			= new StmBoundsStatu2( *this, *pCx_EoXmlLink_BeginTag, nF_goto_EoXmlLink_BeginTag, true );
403 	DYN StmBoundsStatu2 *  	dpBst_goto_EoXmlLink_EndTag
404 			= new StmBoundsStatu2( *this, *pCx_EoXmlLink_EndTag, nF_goto_EoXmlLink_EndTag, true );
405 	DYN StmBoundsStatu2 *  	dpBst_goto_EoXmlFormat_BeginTag
406 			= new StmBoundsStatu2( *this, *pCx_EoXmlFormat_BeginTag, nF_goto_EoXmlFormat_BeginTag, true );
407 	DYN StmBoundsStatu2 *  	dpBst_goto_EoXmlFormat_EndTag
408 			= new StmBoundsStatu2( *this, *pCx_EoXmlFormat_EndTag, nF_goto_EoXmlFormat_EndTag, true );
409 	DYN StmBoundsStatu2 *  	dpBst_goto_CheckStar
410 			= new StmBoundsStatu2( *this, *pCx_CheckStar, nF_goto_CheckStar, true );
411 
412 
413 	DYN StmBoundsStatu2 *  	dpBst_finError
414 			= new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_Error, true );
415 	DYN StmBoundsStatu2 *  	dpBst_finIgnore
416 			= new StmBoundsStatu2( *this, *this, nF_fin_Ignore, true);
417 	DYN StmBoundsStatu2 *  	dpBst_finEof
418 			= new StmBoundsStatu2(  *this, TkpContext_Null2_(), nF_fin_Eof, false);
419 	DYN StmBoundsStatu2 *  	dpBst_finAnyWord
420 			= new StmBoundsStatu2( *this, *this, nF_fin_AnyWord, true);
421 	DYN StmBoundsStatu2 *  	dpBst_finAtTag
422 			= new StmBoundsStatu2( *this, *this, nF_fin_AtTag, false);
423 	DYN StmBoundsStatu2 *  	dpBst_finEndSign
424 			= new StmBoundsStatu2( *this, *pParentContext, nF_fin_EndSign, false);
425 	DYN StmBoundsStatu2 *  	dpBst_fin_Comma
426 			= new StmBoundsStatu2( *this, *this, nF_fin_Comma, false );
427 	DYN StmBoundsStatu2 *  	dpBst_finWhite
428 			= new StmBoundsStatu2( *this, *this, nF_fin_White, false);
429 
430 
431 	// dpMain aufbauen:
432 	aStateMachine.AddStatus(dpStatusTop);
433 	aStateMachine.AddStatus(dpStatusWhite);
434 	aStateMachine.AddStatus(dpStatusWord);
435 
436 	aStateMachine.AddStatus(dpBst_goto_EoHtml);
437 	aStateMachine.AddStatus(dpBst_goto_EoXmlConst);
438 	aStateMachine.AddStatus(dpBst_goto_EoXmlLink_BeginTag);
439 	aStateMachine.AddStatus(dpBst_goto_EoXmlLink_EndTag);
440 	aStateMachine.AddStatus(dpBst_goto_EoXmlFormat_BeginTag);
441 	aStateMachine.AddStatus(dpBst_goto_EoXmlFormat_EndTag);
442 	aStateMachine.AddStatus(dpBst_goto_CheckStar);
443 
444 	aStateMachine.AddStatus(dpBst_finError);
445 	aStateMachine.AddStatus(dpBst_finIgnore);
446 	aStateMachine.AddStatus(dpBst_finEof);
447 	aStateMachine.AddStatus(dpBst_finAnyWord);
448 	aStateMachine.AddStatus(dpBst_finAtTag);
449 	aStateMachine.AddStatus(dpBst_finEndSign);
450 	aStateMachine.AddStatus(dpBst_fin_Comma);
451 	aStateMachine.AddStatus(dpBst_finWhite);
452 
453 
454 	aStateMachine.AddToken( "@author",	nTok_at_author,		 A_nAtTagDefStatus,	finAtTag );
455 	aStateMachine.AddToken( "@param",   nTok_at_param,       A_nAtTagDefStatus, finAtTag );
456 	aStateMachine.AddToken( "@throws",  nTok_at_throws,      A_nAtTagDefStatus, finAtTag );
457 	aStateMachine.AddToken( "@see",     nTok_at_see,         A_nAtTagDefStatus, finAtTag );
458 	aStateMachine.AddToken( "@since",   nTok_at_since,       A_nAtTagDefStatus, finAtTag );
459 	aStateMachine.AddToken( "@example", nTok_at_example,     A_nAtTagDefStatus, finAtTag );
460 	aStateMachine.AddToken( "@return",  nTok_at_return,      A_nAtTagDefStatus, finAtTag );
461 	aStateMachine.AddToken( "@returns", nTok_at_return,      A_nAtTagDefStatus, finAtTag );
462 	aStateMachine.AddToken( "@deprecated",
463 										nTok_at_deprecated,  A_nAtTagDefStatus, finAtTag );
464 	aStateMachine.AddToken( "@suspicious",
465 										nTok_at_suspicious,  A_nAtTagDefStatus, finAtTag );
466 	aStateMachine.AddToken( "@missing", nTok_at_missing,     A_nAtTagDefStatus, finAtTag );
467 	aStateMachine.AddToken( "@incomplete",
468 										nTok_at_incomplete,  A_nAtTagDefStatus, finAtTag );
469 	aStateMachine.AddToken( "@version", nTok_at_version,     A_nAtTagDefStatus, finAtTag );
470 	aStateMachine.AddToken( "@guarantees",
471 										nTok_at_guarantees,  A_nAtTagDefStatus, finAtTag );
472 	aStateMachine.AddToken( "@exception",
473 										nTok_at_exception,   A_nAtTagDefStatus, finAtTag );
474 
475 	aStateMachine.AddToken( "<",        0,                   A_nHtmlDefStatus,  goto_EoHtml );
476 	aStateMachine.AddToken( "*",        0,                   A_nPunctDefStatus, goto_CheckStar );
477 //	aStateMachine.AddToken( ",",        0,                   A_nPunctDefStatus, finComma );
478 
479 	aStateMachine.AddToken( "<type",    nTok_link_typeB,     A_nHtmlDefStatus,  goto_EoXmlLink_BeginTag );
480 	aStateMachine.AddToken( "</type",   nTok_link_typeE,     A_nHtmlDefStatus,  goto_EoXmlLink_EndTag );
481 	aStateMachine.AddToken( "<member",  nTok_link_memberB,   A_nHtmlDefStatus,  goto_EoXmlLink_BeginTag );
482 	aStateMachine.AddToken( "</member", nTok_link_membeE,    A_nHtmlDefStatus,  goto_EoXmlLink_EndTag );
483 	aStateMachine.AddToken( "<const",   nTok_link_constB,    A_nHtmlDefStatus,  goto_EoXmlLink_BeginTag );
484 	aStateMachine.AddToken( "</const",  nTok_link_constE,    A_nHtmlDefStatus,	goto_EoXmlLink_EndTag );
485 
486 	aStateMachine.AddToken( "<listing", nTok_format_listingB,A_nHtmlDefStatus,	goto_EoXmlFormat_BeginTag );
487 	aStateMachine.AddToken( "</listing",nTok_format_listingE,A_nHtmlDefStatus,  goto_EoXmlFormat_EndTag );
488 	aStateMachine.AddToken( "<code",   	nTok_format_codeB,	 A_nHtmlDefStatus,  goto_EoXmlFormat_BeginTag  );
489 	aStateMachine.AddToken( "</code",   nTok_format_codeE,   A_nHtmlDefStatus,  goto_EoXmlFormat_EndTag );
490 	aStateMachine.AddToken( "<atom",   	nTok_format_atomB,	 A_nHtmlDefStatus,  goto_EoXmlFormat_BeginTag  );
491 	aStateMachine.AddToken( "</atom",   nTok_format_atomE,   A_nHtmlDefStatus,  goto_EoXmlFormat_EndTag );
492 
493 	aStateMachine.AddToken( "<TRUE/",   nTok_const_TRUE,	 A_nHtmlDefStatus,	goto_EoXmlConst );
494 	aStateMachine.AddToken( "<true/",   nTok_const_TRUE,	 A_nHtmlDefStatus,	goto_EoXmlConst );
495 	aStateMachine.AddToken( "<FALSE/",  nTok_const_FALSE,    A_nHtmlDefStatus,	goto_EoXmlConst );
496 	aStateMachine.AddToken( "<false/",  nTok_const_FALSE,    A_nHtmlDefStatus,	goto_EoXmlConst );
497 	aStateMachine.AddToken( "<NULL/",   nTok_const_NULL,     A_nHtmlDefStatus,  goto_EoXmlConst );
498 	aStateMachine.AddToken( "<void/",   nTok_const_void,     A_nHtmlDefStatus,  goto_EoXmlConst );
499 
500 	aStateMachine.AddToken( "<p",       nTok_html_parastart, A_nHtmlDefStatus,	goto_EoHtml );
501 	aStateMachine.AddToken( "<pre",     nTok_html_parastart, A_nHtmlDefStatus,	goto_EoHtml );
502 	aStateMachine.AddToken( "<dl",      nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
503 	aStateMachine.AddToken( "<ul",      nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
504 	aStateMachine.AddToken( "<ol",      nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
505 	aStateMachine.AddToken( "<table",   nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
506 	aStateMachine.AddToken( "<P",       nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
507 	aStateMachine.AddToken( "<PRE",     nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
508 	aStateMachine.AddToken( "<DL",      nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
509 	aStateMachine.AddToken( "<UL",      nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
510 	aStateMachine.AddToken( "<OL",      nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
511 	aStateMachine.AddToken( "<TABLE",   nTok_html_parastart, A_nHtmlDefStatus,  goto_EoHtml );
512 
513 	aStateMachine.AddToken( "\r\n",	    nTok_EOL,            A_nPunctDefStatus,	finEndSign );
514 	aStateMachine.AddToken( "\n",       nTok_EOL,            A_nPunctDefStatus,	finEndSign );
515 	aStateMachine.AddToken( "\r",       nTok_EOL,            A_nPunctDefStatus,	finEndSign );
516 };
517 
518 void
SetMode_IsMultiLine(bool i_bTrue)519 Context_Docu::SetMode_IsMultiLine( bool	i_bTrue )
520 {
521 	bIsMultiline = i_bTrue;
522 }
523 
524 
525 }   // namespace dsapi
526 }   // namespace csi
527 
528