Doxygen
Loading...
Searching...
No Matches
mandocvisitor.cpp
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2020 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#include "mandocvisitor.h"
17#include "docparser.h"
18#include "language.h"
19#include "doxygen.h"
20#include "outputgen.h"
21#include "code.h"
22#include "dot.h"
23#include "util.h"
24#include "message.h"
25#include "parserintf.h"
26#include "filedef.h"
27#include "htmlentity.h"
28#include "emoji.h"
29#include "fileinfo.h"
30#include "codefragment.h"
31#include "cite.h"
32
39
40 //--------------------------------------
41 // visitor functions for leaf nodes
42 //--------------------------------------
43
45{
46 if (m_hide) return;
47 filter(w.word());
49}
50
52{
53 if (m_hide) return;
54 m_t << "\\fB";
55 filter(w.word());
56 m_t << "\\fP";
58}
59
61{
62 if (m_hide) return;
63 if (m_insidePre)
64 {
65 m_t << w.chars();
66 m_firstCol=w.chars().at(w.chars().length()-1)=='\n';
67 }
68 else
69 {
70 m_t << " ";
72 }
73}
74
76{
77 if (m_hide) return;
78 const char *res = HtmlEntityMapper::instance().man(s.symbol());
79 if (res)
80 {
81 m_t << res;
82 }
83 else
84 {
85 // no error or warning to be supplied
86 // err("man: non supported HTML-entity found: &{};\n",get_symbol_item(s->symbol()));
87 }
89}
90
92{
93 if (m_hide) return;
94 const char *res = EmojiEntityMapper::instance().name(s.index());
95 if (res)
96 {
97 m_t << res;
98 }
99 else
100 {
101 m_t << s.name();
102 }
104}
105
107{
108 if (m_hide) return;
109 m_t << u.url();
111}
112
114{
115 if (m_hide) return;
116 m_t << "\n.br\n";
118}
119
121{
122 if (m_hide) return;
123 if (!m_firstCol) m_t << "\n";
124 m_t << ".PP\n";
126}
127
129{
130 if (m_hide) return;
131 switch (s.style())
132 {
134 if (s.enable()) m_t << "\\fB"; else m_t << "\\fP";
136 break;
140 /* not supported */
141 break;
142 case DocStyleChange::Underline: //underline is shown as emphasis
144 if (s.enable()) m_t << "\\fI"; else m_t << "\\fP";
146 break;
148 if (s.enable()) m_t << "\\fI"; else m_t << "\\fP";
150 break;
154 if (s.enable()) m_t << "\\fR"; else m_t << "\\fP";
156 break;
158 if (s.enable()) m_t << "\\*<"; else m_t << "\\*> ";
160 break;
162 if (s.enable()) m_t << "\\*{"; else m_t << "\\*} ";
164 break;
166 /* not supported */
167 break;
169 /* not supported */
170 break;
172 /* not supported */
173 break;
175 if (s.enable())
176 {
177 if (!m_firstCol) m_t << "\n";
178 m_t << ".PP\n";
179 m_t << ".nf\n";
181 }
182 else
183 {
185 if (!m_firstCol) m_t << "\n";
186 m_t << ".fi\n";
187 m_t << ".PP\n";
189 }
190 break;
191 case DocStyleChange::Div: /* HTML only */ break;
192 case DocStyleChange::Span: /* HTML only */ break;
193 }
194}
195
197{
198 if (m_hide) return;
199 QCString lang = m_langExt;
200 if (!s.language().isEmpty()) // explicit language setting
201 {
202 lang = s.language();
203 }
204 SrcLangExt langExt = getLanguageFromCodeLang(lang);
205 switch (s.type())
206 {
208 if (!m_firstCol) m_t << "\n";
209 m_t << ".PP\n";
210 m_t << ".nf\n";
212 langExt,
213 Config_getBool(STRIP_CODE_COMMENTS),
214 s.isExample(),s.exampleFile());
215 if (!m_firstCol) m_t << "\n";
216 m_t << ".fi\n";
217 m_t << ".PP\n";
219 break;
221 filter(s.text(),true);
222 break;
224 m_t << "\\fR\n";
225 filter(s.text(),true);
226 m_t << "\\fP\n";
227 break;
229 if (!m_firstCol) m_t << "\n";
230 m_t << ".PP\n";
231 m_t << ".nf\n";
232 filter(s.text(),true);
233 if (!m_firstCol) m_t << "\n";
234 m_t << ".fi\n";
235 m_t << ".PP\n";
237 break;
239 m_t << s.text();
240 break;
246 case DocVerbatim::Dot:
247 case DocVerbatim::Msc:
249 /* nothing */
250 break;
251 }
252}
253
255{
256 /* no support for anchors in man pages */
257}
258
260{
261 if (m_hide) return;
263 switch(inc.type())
264 {
266 {
267 if (!m_firstCol) m_t << "\n";
268 m_t << ".PP\n";
269 m_t << ".nf\n";
270 FileInfo cfi( inc.file().str() );
271 auto fd = createFileDef( cfi.dirPath(), cfi.fileName() );
273 inc.text(),
274 langExt,
275 inc.stripCodeComments(),
276 inc.isExample(),
277 inc.exampleFile(),
278 fd.get(), // fileDef,
279 -1, // start line
280 -1, // end line
281 FALSE, // inline fragment
282 nullptr, // memberDef
283 TRUE
284 );
285 m_t << ".fi\n";
286 m_t << ".PP\n";
288 }
289 break;
291 if (!m_firstCol) m_t << "\n";
292 m_t << ".PP\n";
293 m_t << ".nf\n";
295 inc.text(),
296 langExt,
297 inc.stripCodeComments(),
298 inc.isExample(),
299 inc.exampleFile(),
300 nullptr, // fileDef
301 -1, // startLine
302 -1, // endLine
303 TRUE, // inlineFragment
304 nullptr, // memberDef
305 FALSE
306 );
307 m_t << ".fi\n";
308 m_t << ".PP\n";
310 break;
318 break;
320 m_t << inc.text();
321 break;
323 if (!m_firstCol) m_t << "\n";
324 m_t << ".PP\n";
325 m_t << ".nf\n";
326 m_t << inc.text();
327 if (!m_firstCol) m_t << "\n";
328 m_t << ".fi\n";
329 m_t << ".PP\n";
331 break;
334 if (!m_firstCol) m_t << "\n";
335 m_t << ".PP\n";
336 m_t << ".nf\n";
338 inc.file(),
339 inc.blockId(),
340 inc.context(),
342 inc.trimLeft(),
344 );
345 m_t << ".fi\n";
346 m_t << ".PP\n";
348 break;
349 }
350}
351
353{
355 if (locLangExt.isEmpty()) locLangExt = m_langExt;
356 SrcLangExt langExt = getLanguageFromFileName(locLangExt);
357 //printf("DocIncOperator: type=%d first=%d, last=%d text='%s'\n",
358 // op.type(),op.isFirst(),op.isLast(),qPrint(op.text()));
359 if (op.isFirst())
360 {
361 if (!m_hide)
362 {
363 if (!m_firstCol) m_t << "\n";
364 m_t << ".PP\n";
365 m_t << ".nf\n";
366 }
368 m_hide = TRUE;
369 }
370 if (op.type()!=DocIncOperator::Skip)
371 {
372 m_hide = popHidden();
373 if (!m_hide)
374 {
375 std::unique_ptr<FileDef> fd;
376 if (!op.includeFileName().isEmpty())
377 {
378 FileInfo cfi( op.includeFileName().str() );
379 fd = createFileDef( cfi.dirPath(), cfi.fileName() );
380 }
381
382 getCodeParser(locLangExt).parseCode(m_ci,op.context(),op.text(),langExt,
384 op.isExample(),op.exampleFile(),
385 fd.get(), // fileDef
386 op.line(), // startLine
387 -1, // endLine
388 FALSE, // inline fragment
389 nullptr, // memberDef
390 op.showLineNo() // show line numbers
391 );
392 }
394 m_hide=TRUE;
395 }
396 if (op.isLast())
397 {
398 m_hide = popHidden();
399 if (!m_hide)
400 {
401 if (!m_firstCol) m_t << "\n";
402 m_t << ".fi\n";
403 m_t << ".PP\n";
405 }
406 }
407 else
408 {
409 if (!m_hide) m_t << "\n";
410 }
411}
412
414{
415 if (m_hide) return;
416 m_t << f.text();
417}
418
422
426
428{
429 if (m_hide) return;
430 m_t << "\\fB";
431 auto opt = cite.option();
432 QCString txt;
433 if (!cite.file().isEmpty())
434 {
435 txt = cite.getText();
436 }
437 else
438 {
439 if (!opt.noPar()) txt += "[";
440 txt += cite.target();
441 if (!opt.noPar()) txt += "]";
442 }
443 filter(txt);
444 m_t << "\\fP";
445}
446
448{
449 if (m_hide) return;
450 m_t << s.chars();
451}
452
453
454//--------------------------------------
455// visitor functions for compound nodes
456//--------------------------------------
457
459{
460 if (m_hide) return;
461 m_indent++;
462 visitChildren(l);
463 m_indent--;
464 m_t << ".PP\n";
465}
466
468{
469 if (m_hide) return;
470 QCString ws;
471 if (m_indent>0) ws.fill(' ',2*(m_indent-1));
472 if (!m_firstCol) m_t << "\n";
473 m_t << ".IP \"" << ws;
474 const DocAutoList *list = std::get_if<DocAutoList>(li.parent());
475 if (list && list->isEnumList())
476 {
477 m_t << li.itemNumber() << ".\" " << (2*(m_indent+1));
478 }
479 else // bullet list
480 {
481 switch (li.itemNumber())
482 {
483 case DocAutoList::Unchecked: // unchecked
484 m_t << "[ ]\" " << (2*m_indent) + 2;
485 break;
486 case DocAutoList::Checked_x: // checked with x
487 m_t << "[x]\" " << (2*m_indent) + 2;
488 break;
489 case DocAutoList::Checked_X: // checked with X
490 m_t << "[X]\" " << (2*m_indent) + 2;
491 break;
492 default:
493 m_t << "\\(bu\" " << (2*m_indent);
494 break;
495 }
496 }
497 m_t << "\n";
499 visitChildren(li);
500 m_t << "\n";
502}
503
505{
506 if (m_hide) return;
507 visitChildren(p);
508 if (!p.isLast() && // omit <p> for last paragraph
509 !(p.parent() && // and for parameter sections
510 std::get_if<DocParamSect>(p.parent())
511 )
512 )
513 {
514 if (!m_firstCol) m_t << "\n";
515 m_t << "\n.PP\n";
517 }
518}
519
521{
522 visitChildren(r);
523}
524
526{
527 if (m_hide) return;
528 if (!m_firstCol)
529 {
530 m_t << "\n";
531 m_t << ".PP\n";
532 }
533 m_t << "\\fB";
534 switch(s.type())
535 {
537 m_t << theTranslator->trSeeAlso(); break;
539 m_t << theTranslator->trReturns(); break;
541 m_t << theTranslator->trAuthor(TRUE,TRUE); break;
543 m_t << theTranslator->trAuthor(TRUE,FALSE); break;
545 m_t << theTranslator->trVersion(); break;
547 m_t << theTranslator->trSince(); break;
549 m_t << theTranslator->trDate(); break;
551 m_t << theTranslator->trNote(); break;
553 m_t << theTranslator->trWarning(); break;
555 m_t << theTranslator->trPrecondition(); break;
557 m_t << theTranslator->trPostcondition(); break;
559 m_t << theTranslator->trCopyright(); break;
561 m_t << theTranslator->trInvariant(); break;
563 m_t << theTranslator->trRemarks(); break;
565 m_t << theTranslator->trAttention(); break;
567 m_t << theTranslator->trImportant(); break;
568 case DocSimpleSect::User: break;
569 case DocSimpleSect::Rcs: break;
570 case DocSimpleSect::Unknown: break;
571 }
572
573 // special case 1: user defined title
574 if (s.title())
575 {
576 std::visit(*this,*s.title());
577 }
578 m_t << "\\fP\n";
579 m_t << ".RS 4\n";
580 visitChildren(s);
581 if (!m_firstCol) m_t << "\n";
582 m_t << ".RE\n";
583 m_t << ".PP\n";
585}
586
588{
589 if (m_hide) return;
590 visitChildren(t);
591}
592
594{
595 if (m_hide) return;
596 m_indent++;
597 if (!m_firstCol) m_t << "\n";
598 m_t << ".PD 0\n";
599 m_firstCol=true;
600 visitChildren(l);
601 m_indent--;
602 m_t << ".PP\n";
603}
604
606{
607 if (m_hide) return;
608 QCString ws;
609 if (m_indent>0) ws.fill(' ',2*(m_indent-1));
610 if (!m_firstCol) m_t << "\n";
611 m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << "\n";
613 if (li.paragraph())
614 {
615 visit(*this,*li.paragraph());
616 }
617 m_t << "\n";
619}
620
622{
623 if (m_hide) return;
624 if (!m_firstCol) m_t << "\n";
625 if (s.level()==1) m_t << ".SH"; else m_t << ".SS";
626 m_t << " \"";
627 if (s.title())
628 {
629 std::visit(*this,*s.title());
630 }
631 m_t << "\"\n";
632 if (s.level()==1) m_t << ".PP\n";
634 visitChildren(s);
635}
636
638{
639 if (m_hide) return;
640 m_indent++;
641 if (!m_firstCol) m_t << "\n";
642 m_t << ".PD 0\n";
643 m_firstCol=true;
644 int indent = std::min(m_indent,maxIndentLevels-1);
645 m_listItemInfo[indent].number = 1;
646 m_listItemInfo[indent].type = '1';
647 for (const auto &opt : l.attribs())
648 {
649 if (opt.name=="type")
650 {
651 m_listItemInfo[indent].type = opt.value[0];
652 }
653 if (opt.name=="start")
654 {
655 bool ok = false;
656 int val = opt.value.toInt(&ok);
657 if (ok) m_listItemInfo[indent].number = val;
658 }
659 }
660 visitChildren(l);
661 m_indent--;
662 if (!m_firstCol) m_t << "\n";
663 m_t << ".PP\n";
664}
665
667{
668 if (m_hide) return;
669 QCString ws;
670 if (m_indent>0) ws.fill(' ',2*(m_indent-1));
671 if (!m_firstCol) m_t << "\n";
672 m_t << ".IP \"" << ws;
673 const DocHtmlList *list = std::get_if<DocHtmlList>(li.parent());
674 if (list && list->type()==DocHtmlList::Ordered)
675 {
676 int indent = std::min(m_indent,maxIndentLevels-1);
677 for (const auto &opt : li.attribs())
678 {
679 if (opt.name=="value")
680 {
681 bool ok = false;
682 int val = opt.value.toInt(&ok);
683 if (ok) m_listItemInfo[indent].number = val;
684 }
685 }
686 switch (m_listItemInfo[indent].type)
687 {
688 case '1':
689 m_t << m_listItemInfo[indent].number;
690 break;
691 case 'a':
692 m_t << integerToAlpha(m_listItemInfo[indent].number,false);
693 break;
694 case 'A':
695 m_t << integerToAlpha(m_listItemInfo[indent].number);
696 break;
697 case 'i':
698 m_t << integerToRoman(m_listItemInfo[indent].number,false);
699 break;
700 case 'I':
701 m_t << integerToRoman(m_listItemInfo[indent].number);
702 break;
703 default:
704 m_t << m_listItemInfo[indent].number;
705 break;
706 }
707 m_t << ".\" " << ((m_indent+1)*2);
708 m_listItemInfo[indent].number++;
709 }
710 else // bullet list
711 {
712 m_t << "\\(bu\" " << (m_indent*2);
713 }
714 m_t << "\n";
716 visitChildren(li);
717 m_t << "\n";
719}
720
722{
723 if (m_hide) return;
724 m_indent+=2;
725 visitChildren(dl);
726 m_indent-=2;
727 if (!m_firstCol) m_t << "\n";
728 m_t << "\n.PP\n";
730}
731
733{
734 if (m_hide) return;
735 if (!m_firstCol) m_t << "\n";
736 m_t << "\n.PP";
737 m_t << "\n.IP \"\\fB";
739 visitChildren(dt);
740}
741
743{
744 if (!m_firstCol) m_t << "\n";
745 m_t << ".IP \"\" 1c\n";
747 visitChildren(dd);
748}
749
751{
752 visitChildren(t);
753}
754
759
761{
762 visitChildren(r);
763}
764
766{
767 visitChildren(c);
768}
769
771{
772 visitChildren(i);
773}
774
776{
777 if (m_hide) return;
778 m_t << "\\fR";
779 visitChildren(href);
780 m_t << "\\fP";
781}
782
784{
785 m_t << "\\fB";
786 visitChildren(s);
787 m_t << "\\fP\n.PP\n";
788}
789
791{
792 if (m_hide) return;
793 if (!m_firstCol)
794 {
795 m_t << "\n";
796 m_t << ".PP\n";
797 }
798 auto summary = d.summary();
799 if (summary)
800 {
801 std::visit(*this,*summary);
802 m_t << ".PP\n";
803 m_t << ".RS 4\n";
804 }
805 visitChildren(d);
806 if (!m_firstCol) m_t << "\n";
807 if (summary)
808 {
809 m_t << ".RE\n";
810 }
811 m_t << ".PP\n";
813}
814
816{
817 if (m_hide) return;
818 if (!m_firstCol) m_t << "\n";
819 if (header.level()==1) m_t << ".SH"; else m_t << ".SS";
820 m_t << " \"";
821 visitChildren(header);
822 m_t << "\"\n";
823 if (header.level()==1) m_t << ".PP\n";
825}
826
828{
829}
830
832{
833}
834
836{
837}
838
840{
841}
842
846
848{
849 if (m_hide) return;
850 m_t << "\\fB";
851 visitChildren(dl);
852 m_t << "\\fP";
853}
854
856{
857 if (m_hide) return;
858 m_t << "\\fB";
859 if (!ref.hasLinkText()) filter(ref.targetTitle());
860 visitChildren(ref);
861 m_t << "\\fP";
862}
863
865{
866 if (m_hide) return;
867 QCString ws;
868 if (m_indent>0) ws.fill(' ',2*(m_indent-1));
869 if (!m_firstCol) m_t << "\n";
870 m_t << ".IP \"" << ws << "\\(bu\" " << (2*m_indent) << "\n";
872 visitChildren(ref);
873 m_t << "\n";
875}
876
878{
879 if (m_hide) return;
880 m_indent++;
881 visitChildren(l);
882 m_indent--;
883 if (!m_firstCol) m_t << "\n";
884 m_t << ".PP\n";
885}
886
888{
889 if (m_hide) return;
890 if (!m_firstCol)
891 {
892 m_t << "\n";
893 m_t << ".PP\n";
894 }
895 m_t << "\\fB";
896 switch(s.type())
897 {
899 m_t << theTranslator->trParameters(); break;
901 m_t << theTranslator->trReturnValues(); break;
903 m_t << theTranslator->trExceptions(); break;
905 m_t << theTranslator->trTemplateParameters(); break;
906 default:
907 ASSERT(0);
908 }
909 m_t << "\\fP\n";
910 m_t << ".RS 4\n";
911 visitChildren(s);
912 if (!m_firstCol) m_t << "\n";
913 m_t << ".RE\n";
914 m_t << ".PP\n";
916}
917
919{
920 if (m_hide) return;
921 m_t << "\\fI";
922 bool first=TRUE;
923 for (const auto &param : pl.parameters())
924 {
925 if (!first) m_t << ","; else first=FALSE;
926 std::visit(*this,param);
927 }
928 m_t << "\\fP ";
929 for (const auto &par : pl.paragraphs())
930 {
931 std::visit(*this,par);
932 }
933 if (!pl.isLast())
934 {
935 if (!m_firstCol) m_t << "\n";
936 m_t << ".br\n";
937 }
938}
939
941{
942 if (m_hide) return;
943 if (x.title().isEmpty()) return;
944 if (!m_firstCol)
945 {
946 m_t << "\n";
947 m_t << ".PP\n";
948 }
949 m_t << "\\fB";
950 filter(x.title());
951 m_t << "\\fP\n";
952 m_t << ".RS 4\n";
953 visitChildren(x);
954 if (x.title().isEmpty()) return;
955 if (!m_firstCol) m_t << "\n";
956 m_t << ".RE\n";
957 m_t << ".PP\n";
959}
960
962{
963 if (m_hide) return;
964 m_t << "\\fB";
965 visitChildren(ref);
966 m_t << "\\fP";
967}
968
970{
971 visitChildren(t);
972}
973
975{
976 if (m_hide) return;
977 if (!m_firstCol)
978 {
979 m_t << "\n";
980 m_t << ".PP\n";
981 }
982 m_t << ".RS 4\n"; // TODO: add support for nested block quotes
983 visitChildren(q);
984 if (!m_firstCol) m_t << "\n";
985 m_t << ".RE\n";
986 m_t << ".PP\n";
988}
989
993
995{
996 visitChildren(pb);
997}
998
999void ManDocVisitor::filter(const QCString &str, const bool retainNewline)
1000{
1001 if (!str.isEmpty())
1002 {
1003 const char *p=str.data();
1004 char c=0;
1005 bool insideDoubleQuote = false;
1006 while ((c=*p++))
1007 {
1008 switch(c)
1009 {
1010 case '.': m_t << "\\&."; break; // see bug652277
1011 case '\\': m_t << "\\\\"; break;
1012 case '\"': m_t << "\""; insideDoubleQuote = !insideDoubleQuote; break;
1013 case '\n': if (retainNewline || !insideDoubleQuote) m_t << c; break;
1014 default: m_t << c; break;
1015 }
1016 }
1017 }
1018}
1019
void parseCodeFragment(OutputCodeList &codeOutList, const QCString &fileName, const QCString &blockId, const QCString &scopeName, bool showLineNumbers, bool trimLeft, bool stripCodeComments)
static CodeFragmentManager & instance()
virtual void parseCode(OutputCodeList &codeOutList, const QCString &scopeName, const QCString &input, SrcLangExt lang, bool stripCodeComments, bool isExampleBlock, const QCString &exampleName=QCString(), const FileDef *fileDef=nullptr, int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, const MemberDef *memberDef=nullptr, bool showLineNumbers=TRUE, const Definition *searchCtx=nullptr, bool collectXRefs=TRUE)=0
Parses a source file or fragment with the goal to produce highlighted and cross-referenced output.
Node representing an anchor.
Definition docnode.h:229
Node representing an auto List.
Definition docnode.h:571
bool isEnumList() const
Definition docnode.h:580
Node representing an item of a auto list.
Definition docnode.h:595
int itemNumber() const
Definition docnode.h:598
Node representing a citation of some bibliographic reference.
Definition docnode.h:245
QCString getText() const
Definition docnode.cpp:939
CiteInfoOption option() const
Definition docnode.h:253
QCString target() const
Definition docnode.h:252
QCString file() const
Definition docnode.h:248
Node representing a dia file.
Definition docnode.h:731
Node representing a dot file.
Definition docnode.h:713
Node representing an emoji.
Definition docnode.h:341
int index() const
Definition docnode.h:345
QCString name() const
Definition docnode.h:344
Node representing an item of a cross-referenced list.
Definition docnode.h:529
QCString text() const
Definition docnode.h:533
Node representing a Hypertext reference.
Definition docnode.h:823
Node representing a horizontal ruler.
Definition docnode.h:216
Node representing an HTML blockquote.
Definition docnode.h:1291
Node representing a HTML table caption.
Definition docnode.h:1228
Node representing a HTML table cell.
Definition docnode.h:1193
Node representing a HTML description data.
Definition docnode.h:1181
Node representing a Html description list.
Definition docnode.h:901
Node representing a Html description item.
Definition docnode.h:888
Node Html details.
Definition docnode.h:857
const DocNodeVariant * summary() const
Definition docnode.h:864
Node Html heading.
Definition docnode.h:873
int level() const
Definition docnode.h:877
Node representing a Html list.
Definition docnode.h:1000
const HtmlAttribList & attribs() const
Definition docnode.h:1006
Type type() const
Definition docnode.h:1005
Node representing a HTML list item.
Definition docnode.h:1165
const HtmlAttribList & attribs() const
Definition docnode.h:1170
Node representing a HTML table row.
Definition docnode.h:1246
Node Html summary.
Definition docnode.h:844
Node representing a HTML table.
Definition docnode.h:1269
Node representing an image.
Definition docnode.h:642
Node representing a include/dontinclude operator block.
Definition docnode.h:477
bool stripCodeComments() const
Definition docnode.h:506
bool isLast() const
Definition docnode.h:503
QCString includeFileName() const
Definition docnode.h:509
QCString text() const
Definition docnode.h:499
QCString context() const
Definition docnode.h:501
QCString exampleFile() const
Definition docnode.h:508
int line() const
Definition docnode.h:497
Type type() const
Definition docnode.h:485
bool isFirst() const
Definition docnode.h:502
bool showLineNo() const
Definition docnode.h:498
bool isExample() const
Definition docnode.h:507
Node representing an included text block from file.
Definition docnode.h:435
QCString blockId() const
Definition docnode.h:454
QCString extension() const
Definition docnode.h:450
bool stripCodeComments() const
Definition docnode.h:455
@ LatexInclude
Definition docnode.h:437
@ SnippetWithLines
Definition docnode.h:438
@ DontIncWithLines
Definition docnode.h:439
@ IncWithLines
Definition docnode.h:438
@ HtmlInclude
Definition docnode.h:437
@ VerbInclude
Definition docnode.h:437
@ DontInclude
Definition docnode.h:437
@ DocbookInclude
Definition docnode.h:439
Type type() const
Definition docnode.h:451
QCString exampleFile() const
Definition docnode.h:457
QCString text() const
Definition docnode.h:452
QCString file() const
Definition docnode.h:449
bool trimLeft() const
Definition docnode.h:459
bool isExample() const
Definition docnode.h:456
QCString context() const
Definition docnode.h:453
Node representing an entry in the index.
Definition docnode.h:552
Node representing an internal section of documentation.
Definition docnode.h:969
Node representing an internal reference to some item.
Definition docnode.h:807
Node representing a line break.
Definition docnode.h:202
Node representing a word that can be linked to something.
Definition docnode.h:165
QCString word() const
Definition docnode.h:170
Node representing a msc file.
Definition docnode.h:722
DocNodeVariant * parent()
Definition docnode.h:90
Node representing an block of paragraphs.
Definition docnode.h:979
Node representing a paragraph in the documentation tree.
Definition docnode.h:1080
bool isLast() const
Definition docnode.h:1088
Node representing a parameter list.
Definition docnode.h:1125
const DocNodeList & parameters() const
Definition docnode.h:1129
bool isLast() const
Definition docnode.h:1137
const DocNodeList & paragraphs() const
Definition docnode.h:1131
Node representing a parameter section.
Definition docnode.h:1053
Type type() const
Definition docnode.h:1068
Node representing a uml file.
Definition docnode.h:740
Node representing a reference to some item.
Definition docnode.h:778
QCString targetTitle() const
Definition docnode.h:786
bool hasLinkText() const
Definition docnode.h:788
Root node of documentation tree.
Definition docnode.h:1313
Node representing a reference to a section.
Definition docnode.h:935
Node representing a list of section references.
Definition docnode.h:959
Node representing a normal section.
Definition docnode.h:914
int level() const
Definition docnode.h:918
const DocNodeVariant * title() const
Definition docnode.h:919
Node representing a separator.
Definition docnode.h:365
QCString chars() const
Definition docnode.h:369
Node representing a simple list.
Definition docnode.h:990
Node representing a simple list item.
Definition docnode.h:1153
const DocNodeVariant * paragraph() const
Definition docnode.h:1157
Node representing a simple section.
Definition docnode.h:1017
Type type() const
Definition docnode.h:1026
const DocNodeVariant * title() const
Definition docnode.h:1033
Node representing a separator between two simple sections of the same type.
Definition docnode.h:1044
Node representing a style change.
Definition docnode.h:268
Style style() const
Definition docnode.h:307
bool enable() const
Definition docnode.h:309
Node representing a special symbol.
Definition docnode.h:328
HtmlEntityMapper::SymType symbol() const
Definition docnode.h:332
Root node of a text fragment.
Definition docnode.h:1304
Node representing a simple section title.
Definition docnode.h:608
Node representing a URL (or email address)
Definition docnode.h:188
QCString url() const
Definition docnode.h:192
Node representing a verbatim, unparsed text fragment.
Definition docnode.h:376
QCString language() const
Definition docnode.h:388
bool isExample() const
Definition docnode.h:385
QCString context() const
Definition docnode.h:384
Type type() const
Definition docnode.h:382
QCString text() const
Definition docnode.h:383
QCString exampleFile() const
Definition docnode.h:386
@ JavaDocLiteral
Definition docnode.h:378
Node representing a VHDL flow chart.
Definition docnode.h:749
CodeParserInterface & getCodeParser(const QCString &langExt)
void pushHidden(bool hide)
bool popHidden()
Node representing some amount of white space.
Definition docnode.h:354
QCString chars() const
Definition docnode.h:358
Node representing a word.
Definition docnode.h:153
QCString word() const
Definition docnode.h:156
Node representing an item of a cross-referenced list.
Definition docnode.h:621
QCString title() const
Definition docnode.h:626
const char * name(int index) const
Access routine to the name of the Emoji entity.
Definition emoji.cpp:2026
static EmojiEntityMapper & instance()
Returns the one and only instance of the Emoji entity mapper.
Definition emoji.cpp:1978
Minimal replacement for QFileInfo.
Definition fileinfo.h:23
std::string fileName() const
Definition fileinfo.cpp:118
std::string dirPath(bool absPath=true) const
Definition fileinfo.cpp:137
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
const char * man(SymType symb) const
Access routine to the man code of the HTML entity.
std::array< ManListItemInfo, maxIndentLevels > m_listItemInfo
TextStream & m_t
void operator()(const DocWord &)
void filter(const QCString &str, const bool retainNewline=false)
OutputCodeList & m_ci
QCString m_langExt
static const int maxIndentLevels
void visitChildren(const T &t)
ManDocVisitor(TextStream &t, OutputCodeList &ci, const QCString &langExt)
Class representing a list of different code generators.
Definition outputlist.h:164
This is an alternative implementation of QCString.
Definition qcstring.h:101
void fill(char c, int len=-1)
Fills a string with a predefined character.
Definition qcstring.h:180
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:153
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:578
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:150
const std::string & str() const
Definition qcstring.h:537
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:159
Text streaming class that buffers data.
Definition textstream.h:36
#define Config_getBool(name)
Definition config.h:33
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
Definition filedef.cpp:268
Translator * theTranslator
Definition language.cpp:71
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
#define ASSERT(x)
Definition qcstring.h:39
SrcLangExt
Definition types.h:207
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5718
QCString integerToRoman(int n, bool upper)
Definition util.cpp:7209
SrcLangExt getLanguageFromCodeLang(QCString &fileName)
Routine to handle the language attribute of the \code command.
Definition util.cpp:5736
QCString integerToAlpha(int n, bool upper)
Definition util.cpp:7193
QCString getFileNameExtension(const QCString &fn)
Definition util.cpp:5760
A bunch of utility functions.