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 <ary/info/all_tags.hxx>
24
25
26 // NOT FULLY DEFINED SERVICES
27 #include <limits>
28 #include <ary/info/infodisp.hxx>
29 #include <adc_cl.hxx>
30
31
32 namespace ary
33 {
34 namespace info
35 {
36
37
38
39 //***************************** StdTag ***********************//
40
41
StdTag(E_AtTagId i_eId)42 StdTag::StdTag( E_AtTagId i_eId )
43 : eId(i_eId),
44 // aText,
45 pNext(0)
46 {
47 }
48
49 bool
Add_SpecialMeaningToken(const char *,intt)50 StdTag::Add_SpecialMeaningToken( const char * ,
51 intt )
52 {
53 // Does nothing
54
55 // KORR_FUTURE
56 // Should be a logical exception:
57 // csv_assert(false);
58 return false;
59 }
60
61 UINT8
NrOfSpecialMeaningTokens() const62 StdTag::NrOfSpecialMeaningTokens() const
63 {
64 return 0;
65 }
66
67 AtTag *
GetFollower()68 StdTag::GetFollower()
69 {
70 if (pNext != 0)
71 return pNext->GetFollower();
72 pNext = new StdTag(eId);
73 return pNext;
74 }
75
76 void
do_StoreAt(DocuDisplay & o_rDisplay) const77 StdTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
78 {
79 o_rDisplay.Display_StdTag( *this );
80 }
81
82 DocuText *
Text()83 StdTag::Text()
84 {
85 return &aText;
86 }
87
88
89
90 //***************************** BaseTag ***********************//
91
BaseTag()92 BaseTag::BaseTag()
93 : // sBase
94 // aText
95 pNext(0)
96 {
97 }
98
99 bool
Add_SpecialMeaningToken(const char * i_sText,intt i_nNr)100 BaseTag::Add_SpecialMeaningToken( const char * i_sText,
101 intt i_nNr )
102 {
103 if ( i_nNr == 1 )
104 {
105 sBase.AssignText(i_sText,"::");
106 return true;
107 }
108 return false;
109 }
110
111 const char *
Title() const112 BaseTag::Title() const
113 {
114 return "Base Classes";
115 }
116
117 UINT8
NrOfSpecialMeaningTokens() const118 BaseTag::NrOfSpecialMeaningTokens() const
119 {
120 return 1;
121 }
122
123 AtTag *
GetFollower()124 BaseTag::GetFollower()
125 {
126 if (pNext != 0)
127 return pNext->GetFollower();
128 pNext = new BaseTag;
129 return pNext;
130 }
131
132 DocuText *
Text()133 BaseTag::Text()
134 {
135 return &aText;
136 }
137
138
139
140 //***************************** ExceptionTag ***********************//
141
ExceptionTag()142 ExceptionTag::ExceptionTag()
143 : // sException,
144 // aText
145 pNext(0)
146 {
147 }
148
149 bool
Add_SpecialMeaningToken(const char * i_sText,intt i_nNr)150 ExceptionTag::Add_SpecialMeaningToken( const char * i_sText,
151 intt i_nNr )
152 {
153 if ( i_nNr == 1 )
154 {
155 sException.AssignText(i_sText,"::");
156 return true;
157 }
158 return false;
159 }
160
161 const char *
Title() const162 ExceptionTag::Title() const
163 {
164 return "Thrown Exceptions";
165 }
166
167 UINT8
NrOfSpecialMeaningTokens() const168 ExceptionTag::NrOfSpecialMeaningTokens() const
169 {
170 return 1;
171 }
172
173 AtTag *
GetFollower()174 ExceptionTag::GetFollower()
175 {
176 if (pNext != 0)
177 return pNext->GetFollower();
178 pNext = new ExceptionTag;
179 return pNext;
180 }
181
182 DocuText *
Text()183 ExceptionTag::Text()
184 {
185 return &aText;
186 }
187
188
189 //***************************** ImplementsTag ***********************//
190
ImplementsTag()191 ImplementsTag::ImplementsTag()
192 : // sBase
193 // aText
194 pNext(0)
195 {
196 }
197
198 bool
Add_SpecialMeaningToken(const char * i_sText,intt i_nNr)199 ImplementsTag::Add_SpecialMeaningToken( const char * i_sText,
200 intt i_nNr )
201 {
202 if ( i_nNr == 1 )
203 {
204 sName.AssignText(i_sText,"::");
205 }
206 else
207 {
208 GetFollower()->Add_SpecialMeaningToken(i_sText,1);
209 }
210 return true;
211 }
212
213 const char *
Title() const214 ImplementsTag::Title() const
215 {
216 return "Implements";
217 }
218
219 UINT8
NrOfSpecialMeaningTokens() const220 ImplementsTag::NrOfSpecialMeaningTokens() const
221 {
222 return std::numeric_limits<UINT8>::max();
223 }
224
225 AtTag *
GetFollower()226 ImplementsTag::GetFollower()
227 {
228 if (pNext != 0)
229 return pNext->GetFollower();
230 pNext = new ImplementsTag;
231 return pNext;
232 }
233
234 DocuText *
Text()235 ImplementsTag::Text()
236 {
237 return 0;
238 }
239
240
241 //***************************** KeywordTag ***********************//
242
243
KeywordTag()244 KeywordTag::KeywordTag()
245 // : sKeys
246 {
247 }
248
249 bool
Add_SpecialMeaningToken(const char * i_sText,intt)250 KeywordTag::Add_SpecialMeaningToken( const char * i_sText,
251 intt )
252 {
253 sKeys.push_back(i_sText);
254 return true;
255 }
256
257 const char *
Title() const258 KeywordTag::Title() const
259 {
260 return "Keywords";
261 }
262
263 UINT8
NrOfSpecialMeaningTokens() const264 KeywordTag::NrOfSpecialMeaningTokens() const
265 {
266 return std::numeric_limits<UINT8>::max();
267 }
268
269 AtTag *
GetFollower()270 KeywordTag::GetFollower()
271 {
272 return this;
273 }
274
275 DocuText *
Text()276 KeywordTag::Text()
277 {
278 return 0;
279 }
280
281
282
283 //***************************** ParameterTag ***********************//
284
285
ParameterTag()286 ParameterTag::ParameterTag()
287 : // sName
288 // aText
289 pNext(0)
290 {
291 }
292
293 bool
Add_SpecialMeaningToken(const char * i_sText,intt i_nNr)294 ParameterTag::Add_SpecialMeaningToken( const char * i_sText,
295 intt i_nNr )
296 {
297 if ( i_nNr == 1 )
298 {
299 sName = i_sText;
300 return true;
301 }
302 else if (i_nNr == 2)
303 {
304 uintt nLen = strlen(i_sText);
305 if (*i_sText == '[' AND i_sText[nLen-1] == ']')
306 {
307 sValidRange = String(i_sText+1, nLen-2);
308 return true;
309 }
310 }
311 return false;
312 }
313
314 UINT8
NrOfSpecialMeaningTokens() const315 ParameterTag::NrOfSpecialMeaningTokens() const
316 {
317 return 2;
318 }
319
320 AtTag *
GetFollower()321 ParameterTag::GetFollower()
322 {
323 if (pNext != 0)
324 return pNext->GetFollower();
325 return pNext = new ParameterTag;
326 }
327
328 DocuText *
Text()329 ParameterTag::Text()
330 {
331 return &aText;
332 }
333
334 void
do_StoreAt(DocuDisplay & o_rDisplay) const335 ParameterTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
336 {
337 o_rDisplay.Display_ParameterTag( *this );
338 }
339
340
341
342 //***************************** SeeTag ***********************//
343
344
345
SeeTag()346 SeeTag::SeeTag()
347 // : sReferences
348 {
349 }
350
351 bool
Add_SpecialMeaningToken(const char * i_sText,intt)352 SeeTag::Add_SpecialMeaningToken( const char * i_sText,
353 intt )
354 {
355 static QualifiedName aNull_;
356 sReferences.push_back(aNull_);
357 sReferences.back().AssignText(i_sText,"::");
358
359 return true;
360 }
361
362 const char *
Title() const363 SeeTag::Title() const
364 {
365 return "See Also";
366 }
367
368 UINT8
NrOfSpecialMeaningTokens() const369 SeeTag::NrOfSpecialMeaningTokens() const
370 {
371 return std::numeric_limits<UINT8>::max();
372 }
373
374 AtTag *
GetFollower()375 SeeTag::GetFollower()
376 {
377 return this;
378 }
379
380 void
do_StoreAt(DocuDisplay & o_rDisplay) const381 SeeTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
382 {
383 o_rDisplay.Display_SeeTag( *this );
384 }
385
386 DocuText *
Text()387 SeeTag::Text()
388 {
389 return 0;
390 }
391
392
393
394 //***************************** TemplateTag ***********************//
395
396
TemplateTag()397 TemplateTag::TemplateTag()
398 : // sName
399 // aText
400 pNext(0)
401 {
402 }
403
404 bool
Add_SpecialMeaningToken(const char * i_sText,intt i_nNr)405 TemplateTag::Add_SpecialMeaningToken( const char * i_sText,
406 intt i_nNr )
407 {
408 if ( i_nNr == 1 )
409 {
410 sName = i_sText;
411 return true;
412 }
413 return false;
414 }
415
416 const char *
Title() const417 TemplateTag::Title() const
418 {
419 return "Template Parameters";
420 }
421
422 UINT8
NrOfSpecialMeaningTokens() const423 TemplateTag::NrOfSpecialMeaningTokens() const
424 {
425 return 1;
426 }
427
428 AtTag *
GetFollower()429 TemplateTag::GetFollower()
430 {
431 if (pNext != 0)
432 return pNext->GetFollower();
433 return pNext = new TemplateTag;
434 }
435
436 void
do_StoreAt(DocuDisplay & o_rDisplay) const437 TemplateTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
438 {
439 o_rDisplay.Display_TemplateTag( *this );
440 }
441
442
443 DocuText *
Text()444 TemplateTag::Text()
445 {
446 return &aText;
447 }
448
449
450 //***************************** LabelTag ***********************//
451
452
453
LabelTag()454 LabelTag::LabelTag()
455 : sLabel()
456 {
457 }
458
459 bool
Add_SpecialMeaningToken(const char * i_sText,intt i_nNr)460 LabelTag::Add_SpecialMeaningToken( const char * i_sText,
461 intt i_nNr )
462 {
463 if ( i_nNr == 1 AND sLabel.length() == 0 )
464 {
465 sLabel = i_sText;
466 return true;
467 }
468 // KORR_FUTURE
469 // else // Throw exception because of double label.
470 return false;
471 }
472
473 const char *
Title() const474 LabelTag::Title() const
475 {
476 return "Label";
477 }
478
479 UINT8
NrOfSpecialMeaningTokens() const480 LabelTag::NrOfSpecialMeaningTokens() const
481 {
482 return 1;
483 }
484
485 AtTag *
GetFollower()486 LabelTag::GetFollower()
487 {
488 return this;
489 }
490
491 DocuText *
Text()492 LabelTag::Text()
493 {
494 return 0;
495 }
496
497
498 //***************************** SinceTag ***********************//
499
SinceTag()500 SinceTag::SinceTag()
501 : sVersion()
502 {
503 }
504
505 bool
Add_SpecialMeaningToken(const char * i_sText,intt)506 SinceTag::Add_SpecialMeaningToken( const char * i_sText,
507 intt )
508 {
509 const char cCiphersend = '9' + 1;
510 if ( sVersion.empty()
511 AND NOT csv::in_range('0', *i_sText, cCiphersend)
512 AND autodoc::CommandLine::Get_().DoesTransform_SinceTag() )
513 {
514 return true;
515 }
516
517 if (sVersion.empty())
518 {
519 sVersion = i_sText;
520 }
521 else
522 {
523 StreamLock sHelp(100);
524 sVersion = sHelp() << sVersion << " " << i_sText << c_str;
525 }
526
527 return true;
528 }
529
530 const char *
Title() const531 SinceTag::Title() const
532 {
533 return "Label";
534 }
535
536 UINT8
NrOfSpecialMeaningTokens() const537 SinceTag::NrOfSpecialMeaningTokens() const
538 {
539 return UINT8(-1);
540 }
541
542 AtTag *
GetFollower()543 SinceTag::GetFollower()
544 {
545 return this;
546 }
547
548 void
do_StoreAt(DocuDisplay & o_rDisplay) const549 SinceTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
550 {
551 o_rDisplay.Display_SinceTag( *this );
552 }
553
554 DocuText *
Text()555 SinceTag::Text()
556 {
557 return 0;
558 }
559
560
561 } // namespace info
562 } // namespace ary
563
564