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 CodeParserOptions().setExample(s.isExample(),s.exampleFile())
215 );
216 if (!m_firstCol) m_t << "\n";
217 m_t << ".fi\n";
218 m_t << ".PP\n";
220 break;
222 filter(s.text(),true);
223 break;
225 m_t << "\\fR\n";
226 filter(s.text(),true);
227 m_t << "\\fP\n";
228 break;
230 if (!m_firstCol) m_t << "\n";
231 m_t << ".PP\n";
232 m_t << ".nf\n";
233 filter(s.text(),true);
234 if (!m_firstCol) m_t << "\n";
235 m_t << ".fi\n";
236 m_t << ".PP\n";
238 break;
240 m_t << s.text();
241 break;
247 case DocVerbatim::Dot:
248 case DocVerbatim::Msc:
251 /* nothing */
252 break;
253 }
254}
255
257{
258 /* no support for anchors in man pages */
259}
260
262{
263 if (m_hide) return;
265 switch(inc.type())
266 {
268 {
269 if (!m_firstCol) m_t << "\n";
270 m_t << ".PP\n";
271 m_t << ".nf\n";
272 FileInfo cfi( inc.file().str() );
273 auto fd = createFileDef( cfi.dirPath(), cfi.fileName() );
275 inc.text(),
276 langExt,
277 inc.stripCodeComments(),
279 .setExample(inc.isExample(),inc.exampleFile())
280 .setFileDef(fd.get())
281 .setInlineFragment(true)
282 );
283 m_t << ".fi\n";
284 m_t << ".PP\n";
286 }
287 break;
289 if (!m_firstCol) m_t << "\n";
290 m_t << ".PP\n";
291 m_t << ".nf\n";
293 inc.text(),
294 langExt,
295 inc.stripCodeComments(),
297 .setExample(inc.isExample(),inc.exampleFile())
298 .setInlineFragment(true)
299 .setShowLineNumbers(false)
300 );
301 m_t << ".fi\n";
302 m_t << ".PP\n";
304 break;
312 break;
314 m_t << inc.text();
315 break;
317 if (!m_firstCol) m_t << "\n";
318 m_t << ".PP\n";
319 m_t << ".nf\n";
320 m_t << inc.text();
321 if (!m_firstCol) m_t << "\n";
322 m_t << ".fi\n";
323 m_t << ".PP\n";
325 break;
328 if (!m_firstCol) m_t << "\n";
329 m_t << ".PP\n";
330 m_t << ".nf\n";
332 inc.file(),
333 inc.blockId(),
334 inc.context(),
336 inc.trimLeft(),
338 );
339 m_t << ".fi\n";
340 m_t << ".PP\n";
342 break;
343 }
344}
345
347{
349 if (locLangExt.isEmpty()) locLangExt = m_langExt;
350 SrcLangExt langExt = getLanguageFromFileName(locLangExt);
351 //printf("DocIncOperator: type=%d first=%d, last=%d text='%s'\n",
352 // op.type(),op.isFirst(),op.isLast(),qPrint(op.text()));
353 if (op.isFirst())
354 {
355 if (!m_hide)
356 {
357 if (!m_firstCol) m_t << "\n";
358 m_t << ".PP\n";
359 m_t << ".nf\n";
360 }
362 m_hide = TRUE;
363 }
364 if (op.type()!=DocIncOperator::Skip)
365 {
366 m_hide = popHidden();
367 if (!m_hide)
368 {
369 std::unique_ptr<FileDef> fd;
370 if (!op.includeFileName().isEmpty())
371 {
372 FileInfo cfi( op.includeFileName().str() );
373 fd = createFileDef( cfi.dirPath(), cfi.fileName() );
374 }
375
376 getCodeParser(locLangExt).parseCode(m_ci,op.context(),op.text(),langExt,
379 .setExample(op.isExample(),op.exampleFile())
380 .setFileDef(fd.get())
382 );
383 }
385 m_hide=TRUE;
386 }
387 if (op.isLast())
388 {
389 m_hide = popHidden();
390 if (!m_hide)
391 {
392 if (!m_firstCol) m_t << "\n";
393 m_t << ".fi\n";
394 m_t << ".PP\n";
396 }
397 }
398 else
399 {
400 if (!m_hide) m_t << "\n";
401 }
402}
403
405{
406 if (m_hide) return;
407 m_t << f.text();
408}
409
413
417
419{
420 if (m_hide) return;
421 m_t << "\\fB";
422 auto opt = cite.option();
423 QCString txt;
424 if (!cite.file().isEmpty())
425 {
426 txt = cite.getText();
427 filter(txt, false, true);
428 }
429 else
430 {
431 if (!opt.noPar()) txt += "[";
432 txt += cite.target();
433 if (!opt.noPar()) txt += "]";
434 filter(txt);
435 }
436 m_t << "\\fP";
437}
438
440{
441 if (m_hide) return;
442 m_t << s.chars();
443}
444
445
446//--------------------------------------
447// visitor functions for compound nodes
448//--------------------------------------
449
451{
452 if (m_hide) return;
453 m_indent++;
454 visitChildren(l);
455 m_indent--;
456 m_t << ".PP\n";
457}
458
460{
461 if (m_hide) return;
462 QCString ws;
463 if (m_indent>0) ws.fill(' ',2*(m_indent-1));
464 if (!m_firstCol) m_t << "\n";
465 m_t << ".IP \"" << ws;
466 const DocAutoList *list = std::get_if<DocAutoList>(li.parent());
467 if (list && list->isEnumList())
468 {
469 m_t << li.itemNumber() << ".\" " << (2*(m_indent+1));
470 }
471 else // bullet list
472 {
473 switch (li.itemNumber())
474 {
475 case DocAutoList::Unchecked: // unchecked
476 m_t << "[ ]\" " << (2*m_indent) + 2;
477 break;
478 case DocAutoList::Checked_x: // checked with x
479 m_t << "[x]\" " << (2*m_indent) + 2;
480 break;
481 case DocAutoList::Checked_X: // checked with X
482 m_t << "[X]\" " << (2*m_indent) + 2;
483 break;
484 default:
485 m_t << "\\(bu\" " << (2*m_indent);
486 break;
487 }
488 }
489 m_t << "\n";
491 visitChildren(li);
492 m_t << "\n";
494}
495
497{
498 if (m_hide) return;
499 visitChildren(p);
500 if (!p.isLast() && // omit <p> for last paragraph
501 !(p.parent() && // and for parameter sections
502 std::get_if<DocParamSect>(p.parent())
503 )
504 )
505 {
506 if (!m_firstCol) m_t << "\n";
507 m_t << "\n.PP\n";
509 }
510}
511
513{
514 visitChildren(r);
515}
516
518{
519 if (m_hide) return;
520 if (!m_firstCol)
521 {
522 m_t << "\n";
523 m_t << ".PP\n";
524 }
525 m_t << "\\fB";
526 switch(s.type())
527 {
529 m_t << theTranslator->trSeeAlso(); break;
531 m_t << theTranslator->trReturns(); break;
533 m_t << theTranslator->trAuthor(TRUE,TRUE); break;
535 m_t << theTranslator->trAuthor(TRUE,FALSE); break;
537 m_t << theTranslator->trVersion(); break;
539 m_t << theTranslator->trSince(); break;
541 m_t << theTranslator->trDate(); break;
543 m_t << theTranslator->trNote(); break;
545 m_t << theTranslator->trWarning(); break;
547 m_t << theTranslator->trPrecondition(); break;
549 m_t << theTranslator->trPostcondition(); break;
551 m_t << theTranslator->trCopyright(); break;
553 m_t << theTranslator->trInvariant(); break;
555 m_t << theTranslator->trRemarks(); break;
557 m_t << theTranslator->trAttention(); break;
559 m_t << theTranslator->trImportant(); break;
560 case DocSimpleSect::User: break;
561 case DocSimpleSect::Rcs: break;
562 case DocSimpleSect::Unknown: break;
563 }
564
565 // special case 1: user defined title
566 if (s.title())
567 {
568 std::visit(*this,*s.title());
569 }
570 m_t << "\\fP\n";
571 m_t << ".RS 4\n";
572 visitChildren(s);
573 if (!m_firstCol) m_t << "\n";
574 m_t << ".RE\n";
575 m_t << ".PP\n";
577}
578
580{
581 if (m_hide) return;
582 visitChildren(t);
583}
584
586{
587 if (m_hide) return;
588 m_indent++;
589 if (!m_firstCol) m_t << "\n";
590 m_t << ".PD 0\n";
591 m_firstCol=true;
592 visitChildren(l);
593 m_indent--;
594 m_t << ".PP\n";
595}
596
598{
599 if (m_hide) return;
600 QCString ws;
601 if (m_indent>0) ws.fill(' ',2*(m_indent-1));
602 if (!m_firstCol) m_t << "\n";
603 m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << "\n";
605 if (li.paragraph())
606 {
607 visit(*this,*li.paragraph());
608 }
609 m_t << "\n";
611}
612
614{
615 if (m_hide) return;
616 if (!m_firstCol) m_t << "\n";
617 if (s.level()==1) m_t << ".SH"; else m_t << ".SS";
618 m_t << " \"";
619 if (s.title())
620 {
621 std::visit(*this,*s.title());
622 }
623 m_t << "\"\n";
624 if (s.level()==1) m_t << ".PP\n";
626 visitChildren(s);
627}
628
630{
631 if (m_hide) return;
632 m_indent++;
633 if (!m_firstCol) m_t << "\n";
634 m_t << ".PD 0\n";
635 m_firstCol=true;
636 int indent = std::min(m_indent,maxIndentLevels-1);
637 m_listItemInfo[indent].number = 1;
638 m_listItemInfo[indent].type = '1';
639 for (const auto &opt : l.attribs())
640 {
641 if (opt.name=="type")
642 {
643 m_listItemInfo[indent].type = opt.value[0];
644 }
645 if (opt.name=="start")
646 {
647 bool ok = false;
648 int val = opt.value.toInt(&ok);
649 if (ok) m_listItemInfo[indent].number = val;
650 }
651 }
652 visitChildren(l);
653 m_indent--;
654 if (!m_firstCol) m_t << "\n";
655 m_t << ".PP\n";
656}
657
659{
660 if (m_hide) return;
661 QCString ws;
662 if (m_indent>0) ws.fill(' ',2*(m_indent-1));
663 if (!m_firstCol) m_t << "\n";
664 m_t << ".IP \"" << ws;
665 const DocHtmlList *list = std::get_if<DocHtmlList>(li.parent());
666 if (list && list->type()==DocHtmlList::Ordered)
667 {
668 int indent = std::min(m_indent,maxIndentLevels-1);
669 for (const auto &opt : li.attribs())
670 {
671 if (opt.name=="value")
672 {
673 bool ok = false;
674 int val = opt.value.toInt(&ok);
675 if (ok) m_listItemInfo[indent].number = val;
676 }
677 }
678 switch (m_listItemInfo[indent].type)
679 {
680 case '1':
681 m_t << m_listItemInfo[indent].number;
682 break;
683 case 'a':
684 m_t << integerToAlpha(m_listItemInfo[indent].number,false);
685 break;
686 case 'A':
687 m_t << integerToAlpha(m_listItemInfo[indent].number);
688 break;
689 case 'i':
690 m_t << integerToRoman(m_listItemInfo[indent].number,false);
691 break;
692 case 'I':
693 m_t << integerToRoman(m_listItemInfo[indent].number);
694 break;
695 default:
696 m_t << m_listItemInfo[indent].number;
697 break;
698 }
699 m_t << ".\" " << ((m_indent+1)*2);
700 m_listItemInfo[indent].number++;
701 }
702 else // bullet list
703 {
704 m_t << "\\(bu\" " << (m_indent*2);
705 }
706 m_t << "\n";
708 visitChildren(li);
709 m_t << "\n";
711}
712
714{
715 if (m_hide) return;
716 m_indent+=2;
717 visitChildren(dl);
718 m_indent-=2;
719 if (!m_firstCol) m_t << "\n";
720 m_t << "\n.PP\n";
722}
723
725{
726 if (m_hide) return;
727 if (!m_firstCol) m_t << "\n";
728 m_t << "\n.PP";
729 m_t << "\n.IP \"\\fB";
731 visitChildren(dt);
732}
733
735{
736 if (!m_firstCol) m_t << "\n";
737 m_t << ".IP \"\" 1c\n";
739 visitChildren(dd);
740}
741
743{
744 visitChildren(t);
745}
746
751
753{
754 visitChildren(r);
755}
756
758{
759 visitChildren(c);
760}
761
763{
764 visitChildren(i);
765}
766
768{
769 if (m_hide) return;
770 m_t << "\\fR";
771 visitChildren(href);
772 m_t << "\\fP";
773}
774
776{
777 m_t << "\\fB";
778 visitChildren(s);
779 m_t << "\\fP\n.PP\n";
780}
781
783{
784 if (m_hide) return;
785 if (!m_firstCol)
786 {
787 m_t << "\n";
788 m_t << ".PP\n";
789 }
790 auto summary = d.summary();
791 if (summary)
792 {
793 std::visit(*this,*summary);
794 m_t << ".PP\n";
795 m_t << ".RS 4\n";
796 }
797 visitChildren(d);
798 if (!m_firstCol) m_t << "\n";
799 if (summary)
800 {
801 m_t << ".RE\n";
802 }
803 m_t << ".PP\n";
805}
806
808{
809 if (m_hide) return;
810 if (!m_firstCol) m_t << "\n";
811 if (header.level()==1) m_t << ".SH"; else m_t << ".SS";
812 m_t << " \"";
813 visitChildren(header);
814 m_t << "\"\n";
815 if (header.level()==1) m_t << ".PP\n";
817}
818
820{
821}
822
824{
825}
826
828{
829}
830
832{
833}
834
838
842
844{
845 if (m_hide) return;
846 m_t << "\\fB";
847 visitChildren(dl);
848 m_t << "\\fP";
849}
850
852{
853 if (m_hide) return;
854 m_t << "\\fB";
855 if (!ref.hasLinkText()) filter(ref.targetTitle());
856 visitChildren(ref);
857 m_t << "\\fP";
858}
859
861{
862 if (m_hide) return;
863 QCString ws;
864 if (m_indent>0) ws.fill(' ',2*(m_indent-1));
865 if (!m_firstCol) m_t << "\n";
866 m_t << ".IP \"" << ws << "\\(bu\" " << (2*m_indent) << "\n";
868 visitChildren(ref);
869 m_t << "\n";
871}
872
874{
875 if (m_hide) return;
876 m_indent++;
877 visitChildren(l);
878 m_indent--;
879 if (!m_firstCol) m_t << "\n";
880 m_t << ".PP\n";
881}
882
884{
885 if (m_hide) return;
886 if (!m_firstCol)
887 {
888 m_t << "\n";
889 m_t << ".PP\n";
890 }
891 m_t << "\\fB";
892 switch(s.type())
893 {
895 m_t << theTranslator->trParameters(); break;
897 m_t << theTranslator->trReturnValues(); break;
899 m_t << theTranslator->trExceptions(); break;
901 m_t << theTranslator->trTemplateParameters(); break;
902 default:
903 ASSERT(0);
904 }
905 m_t << "\\fP\n";
906 m_t << ".RS 4\n";
907 visitChildren(s);
908 if (!m_firstCol) m_t << "\n";
909 m_t << ".RE\n";
910 m_t << ".PP\n";
912}
913
915{
916 if (m_hide) return;
917 m_t << "\\fI";
918 bool first=TRUE;
919 for (const auto &param : pl.parameters())
920 {
921 if (!first) m_t << ","; else first=FALSE;
922 std::visit(*this,param);
923 }
924 m_t << "\\fP ";
925 for (const auto &par : pl.paragraphs())
926 {
927 std::visit(*this,par);
928 }
929 if (!pl.isLast())
930 {
931 if (!m_firstCol) m_t << "\n";
932 m_t << ".br\n";
933 }
934}
935
937{
938 if (m_hide) return;
939 if (x.title().isEmpty()) return;
940 if (!m_firstCol)
941 {
942 m_t << "\n";
943 m_t << ".PP\n";
944 }
945 m_t << "\\fB";
946 filter(x.title());
947 m_t << "\\fP\n";
948 m_t << ".RS 4\n";
949 visitChildren(x);
950 if (x.title().isEmpty()) return;
951 if (!m_firstCol) m_t << "\n";
952 m_t << ".RE\n";
953 m_t << ".PP\n";
955}
956
958{
959 if (m_hide) return;
960 m_t << "\\fB";
961 visitChildren(ref);
962 m_t << "\\fP";
963}
964
966{
967 visitChildren(t);
968}
969
971{
972 if (m_hide) return;
973 if (!m_firstCol)
974 {
975 m_t << "\n";
976 m_t << ".PP\n";
977 }
978 m_t << ".RS 4\n"; // TODO: add support for nested block quotes
979 visitChildren(q);
980 if (!m_firstCol) m_t << "\n";
981 m_t << ".RE\n";
982 m_t << ".PP\n";
984}
985
989
991{
992 visitChildren(pb);
993}
994
995void ManDocVisitor::filter(const QCString &str, const bool retainNewline, const bool citeEntry)
996{
997 if (!str.isEmpty())
998 {
999 const char *p=str.data();
1000 char c=0;
1001 bool insideDoubleQuote = false;
1002 while ((c=*p++))
1003 {
1004 switch(c)
1005 {
1006 case '.': m_t << "\\&."; break; // see bug652277
1007 case '\\': m_t << "\\\\"; break;
1008 case '\"': m_t << "\""; insideDoubleQuote = !insideDoubleQuote; break;
1009 case '\n': if (retainNewline || !insideDoubleQuote) m_t << c; break;
1010 case '&': // possibility to have a special symbol
1011 if (!citeEntry) { m_t << c; break;}
1012 p = writeHtmlEntity(m_t, p-1, [](HtmlEntityMapper::SymType symType) { return HtmlEntityMapper::instance().man(symType); }, "&");
1013 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, const CodeParserOptions &options)=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:973
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:832
Node representing a horizontal ruler.
Definition docnode.h:216
Node representing an HTML blockquote.
Definition docnode.h:1296
Node representing a HTML table caption.
Definition docnode.h:1233
Node representing a HTML table cell.
Definition docnode.h:1198
Node representing a HTML description data.
Definition docnode.h:1186
Node representing a Html description list.
Definition docnode.h:910
Node representing a Html description item.
Definition docnode.h:897
Node Html details.
Definition docnode.h:866
const DocNodeVariant * summary() const
Definition docnode.h:873
Node Html heading.
Definition docnode.h:882
int level() const
Definition docnode.h:886
Node representing a Html list.
Definition docnode.h:1009
const HtmlAttribList & attribs() const
Definition docnode.h:1015
Type type() const
Definition docnode.h:1014
Node representing a HTML list item.
Definition docnode.h:1170
const HtmlAttribList & attribs() const
Definition docnode.h:1175
Node representing a HTML table row.
Definition docnode.h:1251
Node Html summary.
Definition docnode.h:853
Node representing a HTML table.
Definition docnode.h:1274
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
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:978
Node representing an internal reference to some item.
Definition docnode.h:816
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 mermaid file.
Definition docnode.h:749
Node representing a msc file.
Definition docnode.h:722
DocNodeVariant * parent()
Definition docnode.h:90
Node representing an block of paragraphs.
Definition docnode.h:988
Node representing a paragraph in the documentation tree.
Definition docnode.h:1089
bool isLast() const
Definition docnode.h:1097
Node representing a parameter list.
Definition docnode.h:1130
const DocNodeList & parameters() const
Definition docnode.h:1134
bool isLast() const
Definition docnode.h:1142
const DocNodeList & paragraphs() const
Definition docnode.h:1136
Node representing a parameter section.
Definition docnode.h:1062
Type type() const
Definition docnode.h:1077
Node representing a uml file.
Definition docnode.h:740
Node representing a reference to some item.
Definition docnode.h:787
QCString targetTitle() const
Definition docnode.h:795
bool hasLinkText() const
Definition docnode.h:797
Root node of documentation tree.
Definition docnode.h:1318
Node representing a reference to a section.
Definition docnode.h:944
Node representing a list of section references.
Definition docnode.h:968
Node representing a normal section.
Definition docnode.h:923
int level() const
Definition docnode.h:927
const DocNodeVariant * title() const
Definition docnode.h:928
Node representing a separator.
Definition docnode.h:365
QCString chars() const
Definition docnode.h:369
Node representing a simple list.
Definition docnode.h:999
Node representing a simple list item.
Definition docnode.h:1158
const DocNodeVariant * paragraph() const
Definition docnode.h:1162
Node representing a simple section.
Definition docnode.h:1026
Type type() const
Definition docnode.h:1035
const DocNodeVariant * title() const
Definition docnode.h:1042
Node representing a separator between two simple sections of the same type.
Definition docnode.h:1053
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:1309
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:758
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.
void filter(const QCString &str, const bool retainNewline=false, const bool citeEntry=false)
std::array< ManListItemInfo, maxIndentLevels > m_listItemInfo
TextStream & m_t
void operator()(const DocWord &)
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:165
This is an alternative implementation of QCString.
Definition qcstring.h:103
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:170
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:597
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:167
QCString fill(char c, int len=-1)
Fills a string with a predefined character.
Definition qcstring.h:197
const std::string & str() const
Definition qcstring.h:556
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:176
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
Options to configure the code parser.
Definition parserintf.h:78
CodeParserOptions & setInlineFragment(bool enable)
Definition parserintf.h:107
CodeParserOptions & setShowLineNumbers(bool enable)
Definition parserintf.h:113
CodeParserOptions & setFileDef(const FileDef *fd)
Definition parserintf.h:98
SrcLangExt
Definition types.h:207
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5235
QCString integerToRoman(int n, bool upper)
Definition util.cpp:6720
SrcLangExt getLanguageFromCodeLang(QCString &fileName)
Routine to handle the language attribute of the \code command.
Definition util.cpp:5253
QCString integerToAlpha(int n, bool upper)
Definition util.cpp:6704
const char * writeHtmlEntity(T &result, const char *s, HtmlEntityMapperFunc &&mapper, const char *fallback)
Definition util.cpp:7034
QCString getFileNameExtension(const QCString &fn)
Definition util.cpp:5277
A bunch of utility functions.