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