xref: /AOO41X/main/autodoc/source/parser/adoc/cx_a_std.cxx (revision 78bc99aafea97f4987aed12e674c2d2f1166dd91)
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 <adoc/cx_a_std.hxx>
24 
25 
26 // NOT FULLY DEFINED SERVICES
27 #include <adoc/cx_a_sub.hxx>
28 #include <x_parse.hxx>
29 #include <tools/tkpchars.hxx>
30 #include <adoc/tk_attag.hxx>
31 #include <adoc/tk_docw.hxx>
32 #include <tokens/tokdeal.hxx>
33 
34 
35 
36 namespace adoc {
37 
38 
39 const intt C_nStatusSize = 128;
40 const intt C_nCppInitialNrOfStati = 400;
41 
42 
43 const uintt nF_fin_Error = 1;
44 const uintt nF_fin_Ignore = 2;
45 const uintt nF_fin_LineStart = 3;
46 const uintt nF_fin_Eol = 4;
47 const uintt nF_fin_Eof = 5;
48 const uintt nF_fin_AnyWord = 6;
49 const uintt nF_fin_Whitespace = 7;
50 
51 const uintt nF_goto_AtTag = 20;
52 const uintt nF_goto_CheckStar = 21;
53 
TCF_DocWord(const char * text)54 DYN TextToken * TCF_DocWord(const char * text) { return new Tok_DocWord(text); }
55 
TCF_atstd_ATT(const char *)56 DYN TextToken * TCF_atstd_ATT(const char * ) { return new Tok_at_std(ary::info::atid_ATT); }
TCF_atstd_author(const char *)57 DYN TextToken * TCF_atstd_author(const char * ) { return new Tok_at_std(ary::info::atid_author); }
TCF_atstd_change(const char *)58 DYN TextToken * TCF_atstd_change(const char * ) { return new Tok_at_std(ary::info::atid_change); }
TCF_atstd_collab(const char *)59 DYN TextToken * TCF_atstd_collab(const char * ) { return new Tok_at_std(ary::info::atid_collab); }
TCF_atstd_contact(const char *)60 DYN TextToken * TCF_atstd_contact(const char * ) { return new Tok_at_std(ary::info::atid_contact); }
TCF_atstd_copyright(const char *)61 DYN TextToken * TCF_atstd_copyright(const char * ) { return new Tok_at_std(ary::info::atid_copyright); }
TCF_atstd_descr(const char *)62 DYN TextToken * TCF_atstd_descr(const char * ) { return new Tok_at_std(ary::info::atid_descr); }
TCF_atstd_docdate(const char *)63 DYN TextToken * TCF_atstd_docdate(const char * ) { return new Tok_at_std(ary::info::atid_docdate); }
TCF_atstd_derive(const char *)64 DYN TextToken * TCF_atstd_derive(const char * ) { return new Tok_at_std(ary::info::atid_derive); }
TCF_atstd_instance(const char *)65 DYN TextToken * TCF_atstd_instance(const char * ) { return new Tok_at_std(ary::info::atid_instance); }
TCF_atstd_life(const char *)66 DYN TextToken * TCF_atstd_life(const char * ) { return new Tok_at_std(ary::info::atid_life); }
TCF_atstd_multi(const char *)67 DYN TextToken * TCF_atstd_multi(const char * ) { return new Tok_at_std(ary::info::atid_multi); }
TCF_atstd_onerror(const char *)68 DYN TextToken * TCF_atstd_onerror(const char * ) { return new Tok_at_std(ary::info::atid_onerror); }
TCF_atstd_persist(const char *)69 DYN TextToken * TCF_atstd_persist(const char * ) { return new Tok_at_std(ary::info::atid_persist); }
TCF_atstd_postcond(const char *)70 DYN TextToken * TCF_atstd_postcond(const char * ) { return new Tok_at_std(ary::info::atid_postcond); }
TCF_atstd_precond(const char *)71 DYN TextToken * TCF_atstd_precond(const char * ) { return new Tok_at_std(ary::info::atid_precond); }
TCF_atstd_responsibility(const char *)72 DYN TextToken * TCF_atstd_responsibility(const char * ) { return new Tok_at_std(ary::info::atid_resp); }
TCF_atstd_return(const char *)73 DYN TextToken * TCF_atstd_return(const char * ) { return new Tok_at_std(ary::info::atid_return); }
TCF_atstd_short(const char *)74 DYN TextToken * TCF_atstd_short(const char * ) { return new Tok_at_std(ary::info::atid_short); }
TCF_atstd_todo(const char *)75 DYN TextToken * TCF_atstd_todo(const char * ) { return new Tok_at_std(ary::info::atid_todo); }
TCF_atstd_version(const char *)76 DYN TextToken * TCF_atstd_version(const char * ) { return new Tok_at_std(ary::info::atid_version); }
77 
TCF_at_base(const char *)78 DYN TextToken * TCF_at_base(const char *) { return new Tok_at_base; }
TCF_at_exception(const char *)79 DYN TextToken * TCF_at_exception(const char *) { return new Tok_at_exception; }
TCF_at_impl(const char *)80 DYN TextToken * TCF_at_impl(const char *) { return new Tok_at_impl; }
TCF_at_interface(const char *)81 DYN TextToken * TCF_at_interface(const char *) { return new Tok_at_interface; }
TCF_at_key(const char *)82 DYN TextToken * TCF_at_key(const char *) { return new Tok_at_key; }
TCF_at_param(const char *)83 DYN TextToken * TCF_at_param(const char *) { return new Tok_at_param; }
TCF_at_see(const char *)84 DYN TextToken * TCF_at_see(const char *) { return new Tok_at_see; }
TCF_at_template(const char *)85 DYN TextToken * TCF_at_template(const char *) { return new Tok_at_template; }
TCF_at_internal(const char *)86 DYN TextToken * TCF_at_internal(const char *) { return new Tok_at_internal; }
TCF_at_obsolete(const char *)87 DYN TextToken * TCF_at_obsolete(const char *) { return new Tok_at_obsolete; }
TCF_at_module(const char *)88 DYN TextToken * TCF_at_module(const char *) { return new Tok_at_module; }
TCF_at_file(const char *)89 DYN TextToken * TCF_at_file(const char *) { return new Tok_at_file; }
TCF_at_gloss(const char *)90 DYN TextToken * TCF_at_gloss(const char *) { return new Tok_at_gloss; }
TCF_at_global(const char *)91 DYN TextToken * TCF_at_global(const char *) { return new Tok_at_global; }
TCF_at_include(const char *)92 DYN TextToken * TCF_at_include(const char *) { return new Tok_at_include; }
TCF_at_label(const char *)93 DYN TextToken * TCF_at_label(const char *) { return new Tok_at_label; }
TCF_at_since(const char *)94 DYN TextToken * TCF_at_since(const char *) { return new Tok_at_since; }
TCF_at_HTML(const char *)95 DYN TextToken * TCF_at_HTML(const char *) { return new Tok_at_HTML; }
TCF_at_NOHTML(const char *)96 DYN TextToken * TCF_at_NOHTML(const char *) { return new Tok_at_NOHTML; }
97 DYN TextToken * TCF_Whitespace(const char * i_sText);
TCF_EoDocu(const char *)98 DYN TextToken * TCF_EoDocu(const char *) { return new Tok_EoDocu; }
TCF_EoLine(const char *)99 DYN TextToken * TCF_EoLine(const char *) { return new Tok_Eol; }
TCF_Eof(const char *)100 DYN TextToken * TCF_Eof(const char *) { return new Tok_Eof; }
101 
102 
103 
104 
Context_AdocStd()105 Context_AdocStd::Context_AdocStd()
106     :   aStateMachine(C_nStatusSize, C_nCppInitialNrOfStati),
107         pDealer(0),
108         pParentContext(0),
109         pFollowUpContext(0),
110         pCx_LineStart(0),
111         pCx_CheckStar(0),
112         pCx_AtTagCompletion(0),
113         pNewToken(0),
114         bIsMultiline(false)
115 {
116     pCx_LineStart = new Cx_LineStart(*this);
117     pCx_CheckStar = new Cx_CheckStar(*this);
118     pCx_AtTagCompletion = new Cx_AtTagCompletion(*this);
119 
120     SetupStateMachine();
121 }
122 
123 void
SetParentContext(TkpContext & io_rParentContext,const char *)124 Context_AdocStd::SetParentContext( TkpContext & io_rParentContext,
125                                    const char * )
126 {
127     pFollowUpContext = pParentContext = &io_rParentContext;
128     pCx_CheckStar->Set_End_FollowUpContext(io_rParentContext);
129 }
130 
~Context_AdocStd()131 Context_AdocStd::~Context_AdocStd()
132 {
133 }
134 
135 void
AssignDealer(TokenDealer & o_rDealer)136 Context_AdocStd::AssignDealer( TokenDealer & o_rDealer )
137 {
138     pDealer = &o_rDealer;
139     pCx_LineStart->AssignDealer(o_rDealer);
140     pCx_CheckStar->AssignDealer(o_rDealer);
141     pCx_AtTagCompletion->AssignDealer(o_rDealer);
142 }
143 
144 void
ReadCharChain(CharacterSource & io_rText)145 Context_AdocStd::ReadCharChain( CharacterSource & io_rText )
146 {
147     csv_assert(pParentContext != 0);
148     pNewToken = 0;
149 
150     TextToken::F_CRTOK  fTokenCreateFunction = 0;
151     StmBoundsStatus & rBound = aStateMachine.GetCharChain(fTokenCreateFunction, io_rText);
152 
153     // !!!
154     //   The order of the next two lines is essential, because
155     //   pFollowUpContext may be changed by PerformStatusFunction() also,
156     //   which then MUST override the previous assignment.
157     pFollowUpContext = rBound.FollowUpContext();
158     PerformStatusFunction(rBound.StatusFunctionNr(), fTokenCreateFunction, io_rText);
159 }
160 
161 bool
PassNewToken()162 Context_AdocStd::PassNewToken()
163 {
164     if (pNewToken)
165     {
166         pNewToken.Release()->DealOut(*pDealer);
167         return true;
168     }
169     return false;
170 }
171 
172 TkpContext &
FollowUpContext()173 Context_AdocStd::FollowUpContext()
174 {
175     csv_assert(pFollowUpContext != 0);
176     return *pFollowUpContext;
177 }
178 
179 void
PerformStatusFunction(uintt i_nStatusSignal,F_CRTOK i_fTokenCreateFunction,CharacterSource & io_rText)180 Context_AdocStd::PerformStatusFunction( uintt               i_nStatusSignal,
181                                         F_CRTOK             i_fTokenCreateFunction,
182                                         CharacterSource &   io_rText )
183 {
184     switch (i_nStatusSignal)
185     {
186         case nF_fin_Error:
187         {
188             char cCC = io_rText.CurChar();
189             String sChar( &cCC, 1 );
190             throw X_Parser(X_Parser::x_InvalidChar, sChar, String ::Null_(), 0);
191         }   // no break, because of throw
192         case nF_fin_Ignore:
193             io_rText.CutToken();
194             pNewToken = 0;
195             break;
196         case nF_fin_LineStart:
197             csv_assert(i_fTokenCreateFunction != 0);
198             pNewToken = (*i_fTokenCreateFunction)(io_rText.CutToken());
199             break;
200         case nF_fin_Eol:
201             io_rText.CutToken();
202             pDealer->Deal_Eol();
203             if ( bIsMultiline )
204             {
205                 pNewToken = TCF_EoLine(0);
206                 pFollowUpContext = pCx_LineStart.Ptr();
207             }
208             else
209             {
210                 pNewToken = TCF_EoDocu(0);
211                 pFollowUpContext = pParentContext;
212             }
213             break;
214         case nF_fin_Eof:
215             pNewToken = TCF_Eof(0);
216             break;
217         case nF_fin_AnyWord:
218             if (i_fTokenCreateFunction != 0)
219                 pNewToken = (*i_fTokenCreateFunction)(io_rText.CutToken());
220             else
221                 pNewToken = TCF_DocWord(io_rText.CutToken());
222             break;
223         case nF_fin_Whitespace:
224             pNewToken = TCF_Whitespace(io_rText.CutToken());
225             break;
226         case nF_goto_AtTag:
227             pNewToken = 0;
228             pCx_AtTagCompletion->SetCurToken(i_fTokenCreateFunction);
229             break;
230         case nF_goto_CheckStar:
231             pNewToken = 0;
232             pCx_CheckStar->SetCanBeEnd( bIsMultiline );
233             break;
234         default:
235         {
236             char cCC = io_rText.CurChar();
237             String  sChar( &cCC, 1 );
238             throw X_Parser(X_Parser::x_InvalidChar, sChar, String::Null_(), 0);
239         }
240     }   // end switch (i_nStatusSignal)
241 }
242 
243 void
SetupStateMachine()244 Context_AdocStd::SetupStateMachine()
245 {
246     // Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel):
247 //  const INT16 bas = 0;        // Base-Status
248     const INT16 wht = 1;        // Whitespace-Status
249     const INT16 awd = 2;        // Any-Word-Read-Status
250 
251     // Kontextwechsel-Stati:
252     const INT16 goto_CheckStar = 3;
253     const INT16 goto_AtTag = 4;
254 
255     // Tokenfinish-Stati:
256     const INT16 finError = 5;
257 //  const INT16 finIgnore = 6;
258     const INT16 finEol = 7;
259     const INT16 finEof = 8;
260     const INT16 finAnyWord = 9;
261     const INT16 finWhitespace = 10;
262 
263     // Konstanten zur Benutzung in der Tabelle:
264     const INT16 fof = finEof;
265     const INT16 err = finError;
266     const INT16 faw = finAnyWord;
267 //  const INT16 fig = finIgnore;
268     const INT16 fwh = finWhitespace;
269 
270     /// The '0's  will be replaced by calls of AddToken().
271 
272     const INT16 A_nTopStatus[C_nStatusSize] =
273     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
274     {fof,err,err,err,err,err,err,err,err,wht,  0,wht,wht,  0,err,err,
275      err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // ... 31
276      wht,awd,awd,awd,awd,awd,awd,awd,awd,awd,  0,awd,awd,awd,awd,awd,
277      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 63
278        0,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
279      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
280      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
281      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd  // ... 127
282     };
283 
284     const INT16 A_nWhitespaceStatus[C_nStatusSize] =
285     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
286     {fof,err,err,err,err,err,err,err,err,wht,fwh,wht,wht,fwh,err,err,
287      err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // ... 31
288      wht,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
289      fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh, // ... 63
290      fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
291      fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh, // ... 95
292      fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
293      fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh  // ... 127
294     };
295 
296     const INT16 A_nWordStatus[C_nStatusSize] =
297     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
298     {faw,err,err,err,err,err,err,err,err,faw,faw,faw,faw,faw,err,err,
299      err,err,err,err,err,err,err,err,err,err,faw,err,err,err,err,err, // ... 31
300      faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd,awd,awd,
301      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 63
302      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
303      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
304      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
305      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd  // ... 127
306     };
307 
308     const INT16 A_nAtTagDefStatus[C_nStatusSize] =
309     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
310     {faw,err,err,err,err,err,err,err,err,faw,faw,faw,faw,faw,err,err,
311      err,err,err,err,err,err,err,err,err,err,faw,err,err,err,err,err, // ... 31
312      faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd,awd,awd,
313      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 63
314      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
315      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
316      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
317      awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd  // ... 127
318     };
319 
320     const INT16 A_nPunctDefStatus[C_nStatusSize] =
321     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
322     {err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
323      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ...
324      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
325      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ...
326      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
327      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ...
328      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
329      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err  // 112 ...
330     };
331 
332     DYN StmArrayStatus * dpStatusTop
333             = new StmArrayStatus( C_nStatusSize, A_nTopStatus, 0, true);
334     DYN StmArrayStatus * dpStatusWhite
335             = new StmArrayStatus( C_nStatusSize, A_nWhitespaceStatus, 0, true);
336     DYN StmArrayStatus * dpStatusWord
337             = new StmArrayStatus( C_nStatusSize, A_nWordStatus, TCF_DocWord, true);
338 
339     DYN StmBoundsStatus *   dpBst_goto_CheckStar
340             = new StmBoundsStatus( *this, *pCx_CheckStar, nF_goto_CheckStar, true );
341     DYN StmBoundsStatus *   dpBst_goto_AtTag
342             = new StmBoundsStatus( *this, *pCx_AtTagCompletion, nF_goto_AtTag, true );
343 
344     DYN StmBoundsStatus *   dpBst_finError
345             = new StmBoundsStatus( *this, TkpContext::Null_(), nF_fin_Error, true );
346     DYN StmBoundsStatus *   dpBst_finIgnore
347             = new StmBoundsStatus( *this, *this, nF_fin_Ignore, true);
348     DYN StmBoundsStatus *   dpBst_finEol
349             = new StmBoundsStatus( *this, *pCx_LineStart, nF_fin_Eol, false);
350     DYN StmBoundsStatus *   dpBst_finEof
351             = new StmBoundsStatus(  *this, TkpContext::Null_(), nF_fin_Eof, false);
352     DYN StmBoundsStatus *   dpBst_finAnyWord
353             = new StmBoundsStatus( *this, *this, nF_fin_AnyWord, true);
354     DYN StmBoundsStatus *   dpBst_finWhitespace
355             = new StmBoundsStatus( *this, *this, nF_fin_Whitespace, true);
356 
357     // dpMain aufbauen:
358     aStateMachine.AddStatus(dpStatusTop);
359     aStateMachine.AddStatus(dpStatusWhite);
360     aStateMachine.AddStatus(dpStatusWord);
361 
362     aStateMachine.AddStatus(dpBst_goto_CheckStar);
363     aStateMachine.AddStatus(dpBst_goto_AtTag);
364 
365     aStateMachine.AddStatus(dpBst_finError);
366     aStateMachine.AddStatus(dpBst_finIgnore);
367     aStateMachine.AddStatus(dpBst_finEol);
368     aStateMachine.AddStatus(dpBst_finEof);
369     aStateMachine.AddStatus(dpBst_finAnyWord);
370     aStateMachine.AddStatus(dpBst_finWhitespace);
371 
372     aStateMachine.AddToken( "*",        0,                  A_nPunctDefStatus, goto_CheckStar );
373     aStateMachine.AddToken( "@ATT",     TCF_atstd_ATT,      A_nAtTagDefStatus, goto_AtTag );
374     aStateMachine.AddToken( "@att",     TCF_atstd_ATT,      A_nAtTagDefStatus, goto_AtTag );
375     aStateMachine.AddToken( "@ATTENTION",
376                                         TCF_atstd_ATT,      A_nAtTagDefStatus, goto_AtTag );
377     aStateMachine.AddToken( "@attention",
378                                         TCF_atstd_ATT,      A_nAtTagDefStatus, goto_AtTag );
379     aStateMachine.AddToken( "@author",  TCF_atstd_author,   A_nAtTagDefStatus, goto_AtTag );
380     aStateMachine.AddToken( "@change",  TCF_atstd_change,   A_nAtTagDefStatus, goto_AtTag );
381     aStateMachine.AddToken( "@collab",  TCF_atstd_collab,   A_nAtTagDefStatus, goto_AtTag );
382     aStateMachine.AddToken( "@collaborator",
383                                         TCF_atstd_collab,   A_nAtTagDefStatus, goto_AtTag );
384     aStateMachine.AddToken( "@contact", TCF_atstd_contact,  A_nAtTagDefStatus, goto_AtTag );
385     aStateMachine.AddToken( "@copyright",TCF_atstd_copyright, A_nAtTagDefStatus, goto_AtTag );
386     aStateMachine.AddToken( "@descr",   TCF_atstd_descr,    A_nAtTagDefStatus, goto_AtTag );
387     aStateMachine.AddToken( "@docdate", TCF_atstd_docdate,  A_nAtTagDefStatus, goto_AtTag );
388     aStateMachine.AddToken( "@derive",  TCF_atstd_derive,   A_nAtTagDefStatus, goto_AtTag );
389     aStateMachine.AddToken( "@instance",TCF_atstd_instance, A_nAtTagDefStatus, goto_AtTag );
390     aStateMachine.AddToken( "@life",    TCF_atstd_life,     A_nAtTagDefStatus, goto_AtTag );
391     aStateMachine.AddToken( "@lifecycle",
392                                         TCF_atstd_life,     A_nAtTagDefStatus, goto_AtTag );
393     aStateMachine.AddToken( "@multi",   TCF_atstd_multi,    A_nAtTagDefStatus, goto_AtTag );
394     aStateMachine.AddToken( "@multiplicity",
395                                         TCF_atstd_multi,    A_nAtTagDefStatus, goto_AtTag );
396     aStateMachine.AddToken( "@onerror", TCF_atstd_onerror,  A_nAtTagDefStatus, goto_AtTag );
397     aStateMachine.AddToken( "@persist", TCF_atstd_persist,  A_nAtTagDefStatus, goto_AtTag );
398     aStateMachine.AddToken( "@postcond",TCF_atstd_postcond,A_nAtTagDefStatus, goto_AtTag );
399     aStateMachine.AddToken( "@precond", TCF_atstd_precond,  A_nAtTagDefStatus, goto_AtTag );
400     aStateMachine.AddToken( "@resp",    TCF_atstd_responsibility,
401                                                             A_nAtTagDefStatus, goto_AtTag );
402     aStateMachine.AddToken( "@responsibility",
403                                         TCF_atstd_return,   A_nAtTagDefStatus, goto_AtTag );
404     aStateMachine.AddToken( "@return",  TCF_atstd_return,   A_nAtTagDefStatus, goto_AtTag );
405     aStateMachine.AddToken( "@short",   TCF_atstd_short,    A_nAtTagDefStatus, goto_AtTag );
406     aStateMachine.AddToken( "@todo",    TCF_atstd_todo,     A_nAtTagDefStatus, goto_AtTag );
407     aStateMachine.AddToken( "@version", TCF_atstd_version,  A_nAtTagDefStatus, goto_AtTag );
408 
409     aStateMachine.AddToken( "@base",    TCF_at_base,        A_nAtTagDefStatus, goto_AtTag );
410     aStateMachine.AddToken( "@exception",TCF_at_exception,  A_nAtTagDefStatus, goto_AtTag );
411     aStateMachine.AddToken( "@impl",    TCF_at_impl,        A_nAtTagDefStatus, goto_AtTag );
412     aStateMachine.AddToken( "@key",     TCF_at_key,         A_nAtTagDefStatus, goto_AtTag );
413     aStateMachine.AddToken( "@param",   TCF_at_param,       A_nAtTagDefStatus, goto_AtTag );
414     aStateMachine.AddToken( "@see",     TCF_at_see,         A_nAtTagDefStatus, goto_AtTag );
415     aStateMachine.AddToken( "@seealso", TCF_at_see,         A_nAtTagDefStatus, goto_AtTag );
416     aStateMachine.AddToken( "@since",   TCF_at_since,       A_nAtTagDefStatus, goto_AtTag );
417     aStateMachine.AddToken( "@tpl",     TCF_at_template,    A_nAtTagDefStatus, goto_AtTag );
418     aStateMachine.AddToken( "@tplparam",
419                                         TCF_at_template,    A_nAtTagDefStatus, goto_AtTag );
420 
421     aStateMachine.AddToken( "@interface",TCF_at_interface,  A_nAtTagDefStatus, goto_AtTag );
422     aStateMachine.AddToken( "@internal",TCF_at_internal,    A_nAtTagDefStatus, goto_AtTag );
423     aStateMachine.AddToken( "@obsolete",TCF_at_obsolete,    A_nAtTagDefStatus, goto_AtTag );
424     aStateMachine.AddToken( "@deprecated",TCF_at_obsolete,  A_nAtTagDefStatus, goto_AtTag );
425 
426     aStateMachine.AddToken( "@module",  TCF_at_module,      A_nAtTagDefStatus, goto_AtTag );
427     aStateMachine.AddToken( "@file",    TCF_at_file,        A_nAtTagDefStatus, goto_AtTag );
428     aStateMachine.AddToken( "@gloss",   TCF_at_gloss,       A_nAtTagDefStatus, goto_AtTag );
429     aStateMachine.AddToken( "@global#", TCF_at_global,      A_nAtTagDefStatus, goto_AtTag );
430     aStateMachine.AddToken( "@include#",TCF_at_include,     A_nAtTagDefStatus, goto_AtTag );
431     aStateMachine.AddToken( "@#",       TCF_at_label,       A_nAtTagDefStatus, goto_AtTag );
432 
433     aStateMachine.AddToken( "@HTML",    TCF_at_HTML,        A_nAtTagDefStatus, goto_AtTag );
434     aStateMachine.AddToken( "@NOHTML",  TCF_at_NOHTML,      A_nAtTagDefStatus, goto_AtTag );
435 
436     aStateMachine.AddToken( "\r\n",     0,                  A_nPunctDefStatus, finEol );
437     aStateMachine.AddToken( "\n",       0,                  A_nPunctDefStatus, finEol );
438     aStateMachine.AddToken( "\r",       0,                  A_nPunctDefStatus, finEol );
439 };
440 
441 void
SetMode_IsMultiLine(bool i_bTrue)442 Context_AdocStd::SetMode_IsMultiLine( bool  i_bTrue )
443 {
444     bIsMultiline = i_bTrue;
445 }
446 
447 DYN TextToken *
TCF_Whitespace(const char * i_sText)448 TCF_Whitespace(const char * i_sText)
449 {
450     UINT8 nSize = static_cast<UINT8>(strlen(i_sText));
451     for ( const char * pTab = strchr(i_sText,'\t');
452           pTab != 0;
453           pTab = strchr(pTab+1,'\t') )
454     {
455         nSize += 3;
456     }
457 
458     return new Tok_Whitespace(nSize);
459 }
460 
461 
462 }   // namespace adoc
463 
464 
465 /*
466 @ATT[ENTION]
467 @author
468 @change[s]
469 @collab[orators]
470 @contact
471 @copyright
472 @descr
473 @devstat[e]
474 @docdate
475 @derive
476 @instance
477 @life[cycle]
478 @multi[plicity]
479 @onerror
480 @persist[ence]
481 @postcond
482 @precond
483 @return
484 @short
485 @todo
486 
487 @module
488 @file
489 @gloss[ary]
490 
491 
492 @base <BasisklassenName>
493 @exception <ExceptionName>
494 @impl[ements] <IDL-Construct>
495 @key[words]|[s]
496 @param <FunctionParameterName> [<Range of valid values>]
497 @see[also]
498 @templ[ate] <FormalTemplateParameterName>
499 
500 @internal
501 @obsolete
502 
503 @#<Label>
504 
505 @global#<Label> Global comment.
506 @include#<Label>
507 
508 
509 */
510 
511