50#define PERLOUTPUT_MAX_INDENTATION 40
55 std::ostream *
m_t =
nullptr;
62 void add(
unsigned int n);
199 *s++ =
' '; *s++ =
' '; *s = 0;
213 if (str.
empty())
return;
214 const char *s = str.
data();
216 while ((c = *s++) != 0)
218 if ((c ==
'\'') || (c ==
'\\'))
237 if ((content ==
'\'') || (content ==
'\\'))
245 if (content ==
nullptr)
354 for (
const auto &child : t.children())
356 std::visit(*
this, child);
403 (link +=
"_1") += anchor;
502 const char *accent=
nullptr;
602 const char *style =
nullptr;
632 const char *type =
nullptr;
677 const char *type =
nullptr;
712 parseCode(m_ci,op.context(),op.text(),
false,0);
741 "<secondaryie></secondaryie>"
761 if (!opt.noPar()) txt +=
"[";
763 if (!opt.noPar()) txt +=
"]";
827 const char *type =
nullptr;
849 err(
"unknown simple section found\n");
858 std::visit(*
this,*s.
title());
902 std::visit(*
this,*s.
title());
914 for (
const auto &opt : l.
attribs())
916 if (opt.name==
"type")
920 if (opt.name==
"start")
933 for (
const auto &opt : l.
attribs())
935 if (opt.name==
"value")
986 std::visit(*
this,*t.
caption());
1061 auto summary =
details.summary();
1064 std::visit(*
this,*summary);
1097 if ((i=baseName.findRev(
'/'))!=-1 || (i=baseName.findRev(
'\\'))!=-1)
1099 baseName=baseName.
mid(i+1);
1220 const char *type =
nullptr;
1228 err(
"unknown parameter section found\n");
1251 const DocWord *word = std::get_if<DocWord>(¶m);
1252 const DocLinkedWord *linkedWord = std::get_if<DocLinkedWord>(¶m);
1255 name = word->
word();
1257 else if (linkedWord)
1259 name = linkedWord->
word();
1291 std::visit(*
this,par);
1359 output.
openList(
"template_parameters");
1363 if (!a.type.empty())
1365 if (!a.name.empty())
1368 if (!a.defval.empty())
1410 auto astImpl =
dynamic_cast<const DocNodeAST*
>(ast.get());
1414 std::visit(visitor,astImpl->root);
1423 return to_string_lower(prot);
1428 return to_string_lower(virt);
1508 bool isFortran = md->
getLanguage()==SrcLangExt::Fortran;
1533 if (!declAl.
empty())
1535 auto defIt = al.
begin();
1539 if (defIt!=al.
end())
1546 if (!a.name.empty())
1549 if (defArg && !defArg->
name.
empty() && defArg->
name!=a.name)
1552 if (isFortran && defArg && !defArg->
type.
empty())
1554 else if (!a.type.empty())
1557 if (!a.array.empty())
1560 if (!a.defval.empty())
1563 if (!a.attrib.empty())
1571 else if (md->
memberType()==MemberType::Define &&
1594 if (md->
memberType()==MemberType::Enumeration)
1598 if (!enumFields.
empty())
1601 for (
const auto &emd : enumFields)
1606 if (!emd->initializer().empty())
1622 if (bitfield.
at(0) ==
':') bitfield = bitfield.
mid(1);
1636 for (
const auto &rbmd : rbml)
1649 if (ml==
nullptr)
return;
1653 if (!header.
empty())
1657 for (
const auto &md : *ml)
1670 for (
auto &mi : *mni)
1680 if (!mi->ambiguityResolutionScope().empty())
1695 for (
const auto &mg : mgl)
1698 if (!mg->header().empty())
1703 if (!mg->members().empty())
1706 for (
const auto &md : mg->members())
1832 DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance);
1835 t <<
" <inheritancegraph>" << endl;
1836 inheritanceGraph.writePerlMod(t);
1837 t <<
" </inheritancegraph>" << endl;
1839 DotClassGraph collaborationGraph(cd,DotClassGraph::Implementation);
1842 t <<
" <collaborationgraph>" << endl;
1843 collaborationGraph.writePerlMod(t);
1844 t <<
" </collaborationgraph>" << endl;
1846 t <<
" <location file=\""
2013 if (inc.fileDef && !inc.fileDef->isReference())
2026 if (inc.fileDef && !inc.fileDef->isReference())
2072 for (
const auto &fd : gd->
getFiles())
2122 for (
const auto &pd : gd->
getPages())
2175 std::ofstream outputFileStream;
2206 for (
const auto &fd : *fn)
2241 err(
"Cannot open file {} for writing!\n", s);
2250 perlModDir.
setPath(outputDirectory+
"/perlmod");
2251 if (!perlModDir.
exists() && !perlModDir.
mkdir(outputDirectory+
"/perlmod"))
2253 err(
"Could not create perlmod directory in {}\n",outputDirectory);
2261 std::ofstream doxyModelPMStream;
2265 doxyModelPMStream <<
2266 "sub memberlist($) {\n"
2267 " my $prefix = $_[0];\n"
2269 "\t[ \"hash\", $prefix . \"s\",\n"
2272 "\t [ \"list\", $prefix . \"List\",\n"
2273 "\t\t[ \"hash\", $prefix,\n"
2275 "\t\t kind => [ \"string\", $prefix . \"Kind\" ],\n"
2276 "\t\t name => [ \"string\", $prefix . \"Name\" ],\n"
2277 "\t\t static => [ \"string\", $prefix . \"Static\" ],\n"
2278 "\t\t virtualness => [ \"string\", $prefix . \"Virtualness\" ],\n"
2279 "\t\t protection => [ \"string\", $prefix . \"Protection\" ],\n"
2280 "\t\t type => [ \"string\", $prefix . \"Type\" ],\n"
2281 "\t\t parameters =>\n"
2282 "\t\t [ \"list\", $prefix . \"Params\",\n"
2283 "\t\t\t[ \"hash\", $prefix . \"Param\",\n"
2285 "\t\t\t declaration_name => [ \"string\", $prefix . \"ParamName\" ],\n"
2286 "\t\t\t type => [ \"string\", $prefix . \"ParamType\" ],\n"
2290 "\t\t detailed =>\n"
2291 "\t\t [ \"hash\", $prefix . \"Detailed\",\n"
2293 "\t\t\t doc => [ \"doc\", $prefix . \"DetailedDoc\" ],\n"
2294 "\t\t\t return => [ \"doc\", $prefix . \"Return\" ],\n"
2295 "\t\t\t see => [ \"doc\", $prefix . \"See\" ],\n"
2296 "\t\t\t params =>\n"
2297 "\t\t\t [ \"list\", $prefix . \"PDBlocks\",\n"
2298 "\t\t\t [ \"hash\", $prefix . \"PDBlock\",\n"
2300 "\t\t\t\t parameters =>\n"
2301 "\t\t\t\t [ \"list\", $prefix . \"PDParams\",\n"
2302 "\t\t\t\t [ \"hash\", $prefix . \"PDParam\",\n"
2304 "\t\t\t\t\t name => [ \"string\", $prefix . \"PDParamName\" ],\n"
2308 "\t\t\t\t doc => [ \"doc\", $prefix . \"PDDoc\" ],\n"
2321 "$doxystructure =\n"
2322 " [ \"hash\", \"Root\",\n"
2325 "\t [ \"list\", \"Files\",\n"
2326 "\t [ \"hash\", \"File\",\n"
2328 "\t\tname => [ \"string\", \"FileName\" ],\n"
2329 "\t\ttypedefs => memberlist(\"FileTypedef\"),\n"
2330 "\t\tvariables => memberlist(\"FileVariable\"),\n"
2331 "\t\tfunctions => memberlist(\"FileFunction\"),\n"
2333 "\t\t [ \"hash\", \"FileDetailed\",\n"
2335 "\t\t doc => [ \"doc\", \"FileDetailedDoc\" ],\n"
2342 "\t [ \"list\", \"Pages\",\n"
2343 "\t [ \"hash\", \"Page\",\n"
2345 "\t\tname => [ \"string\", \"PageName\" ],\n"
2347 "\t\t [ \"hash\", \"PageDetailed\",\n"
2349 "\t\t doc => [ \"doc\", \"PageDetailedDoc\" ],\n"
2356 "\t [ \"list\", \"Classes\",\n"
2357 "\t [ \"hash\", \"Class\",\n"
2359 "\t\tname => [ \"string\", \"ClassName\" ],\n"
2360 "\t\tpublic_typedefs => memberlist(\"ClassPublicTypedef\"),\n"
2361 "\t\tpublic_methods => memberlist(\"ClassPublicMethod\"),\n"
2362 "\t\tpublic_members => memberlist(\"ClassPublicMember\"),\n"
2363 "\t\tprotected_typedefs => memberlist(\"ClassProtectedTypedef\"),\n"
2364 "\t\tprotected_methods => memberlist(\"ClassProtectedMethod\"),\n"
2365 "\t\tprotected_members => memberlist(\"ClassProtectedMember\"),\n"
2366 "\t\tprivate_typedefs => memberlist(\"ClassPrivateTypedef\"),\n"
2367 "\t\tprivate_methods => memberlist(\"ClassPrivateMethod\"),\n"
2368 "\t\tprivate_members => memberlist(\"ClassPrivateMember\"),\n"
2370 "\t\t [ \"hash\", \"ClassDetailed\",\n"
2372 "\t\t doc => [ \"doc\", \"ClassDetailedDoc\" ],\n"
2379 "\t [ \"list\", \"Groups\",\n"
2380 "\t [ \"hash\", \"Group\",\n"
2382 "\t\tname => [ \"string\", \"GroupName\" ],\n"
2383 "\t\ttitle => [ \"string\", \"GroupTitle\" ],\n"
2385 "\t\t [ \"list\", \"Files\",\n"
2386 "\t\t [ \"hash\", \"File\",\n"
2388 "\t\t name => [ \"string\", \"Filename\" ]\n"
2393 "\t\t [ \"list\", \"Classes\",\n"
2394 "\t\t [ \"hash\", \"Class\",\n"
2396 "\t\t name => [ \"string\", \"Classname\" ]\n"
2400 "\t\tnamespaces =>\n"
2401 "\t\t [ \"list\", \"Namespaces\",\n"
2402 "\t\t [ \"hash\", \"Namespace\",\n"
2404 "\t\t name => [ \"string\", \"NamespaceName\" ]\n"
2409 "\t\t [ \"list\", \"Pages\",\n"
2410 "\t\t [ \"hash\", \"Page\","
2412 "\t\t title => [ \"string\", \"PageName\" ]\n"
2417 "\t\t [ \"list\", \"Groups\",\n"
2418 "\t\t [ \"hash\", \"Group\",\n"
2420 "\t\t title => [ \"string\", \"GroupName\" ]\n"
2424 "\t\tfunctions => memberlist(\"GroupFunction\"),\n"
2426 "\t\t [ \"hash\", \"GroupDetailed\",\n"
2428 "\t\t doc => [ \"doc\", \"GroupDetailedDoc\" ],\n"
2444 std::ofstream doxyRulesStream;
2470 ".PHONY: clean-perlmod\n"
2472 "\trm -f $(" <<
prefix <<
"DOXYSTRUCTURE_PM) \\\n"
2473 "\t$(" <<
prefix <<
"DOXYDOCS_PM)";
2477 "\t$(" <<
prefix <<
"DOXYLATEX_PL) \\\n"
2478 "\t$(" <<
prefix <<
"DOXYLATEXSTRUCTURE_PL) \\\n"
2479 "\t$(" <<
prefix <<
"DOXYDOCS_TEX) \\\n"
2480 "\t$(" <<
prefix <<
"DOXYSTRUCTURE_TEX) \\\n"
2481 "\t$(" <<
prefix <<
"DOXYFORMAT_TEX) \\\n"
2482 "\t$(" <<
prefix <<
"DOXYLATEX_TEX) \\\n"
2483 "\t$(" <<
prefix <<
"DOXYLATEX_PDF) \\\n"
2484 "\t$(" <<
prefix <<
"DOXYLATEX_DVI) \\\n"
2485 "\t$(addprefix $(" <<
prefix <<
"DOXYLATEX_TEX:tex=),out aux log)";
2486 doxyRulesStream <<
"\n\n";
2489 "$(" <<
prefix <<
"DOXYRULES) \\\n"
2490 "$(" <<
prefix <<
"DOXYMAKEFILE) \\\n"
2491 "$(" <<
prefix <<
"DOXYSTRUCTURE_PM) \\\n"
2492 "$(" <<
prefix <<
"DOXYDOCS_PM)";
2496 "$(" <<
prefix <<
"DOXYLATEX_PL) \\\n"
2497 "$(" <<
prefix <<
"DOXYLATEXSTRUCTURE_PL) \\\n"
2498 "$(" <<
prefix <<
"DOXYFORMAT_TEX) \\\n"
2499 "$(" <<
prefix <<
"DOXYLATEX_TEX)";
2503 "\t$(" <<
prefix <<
"DOXYFILE)\n"
2504 "\tcd $(" <<
prefix <<
"DOXY_EXEC_PATH) ; doxygen \"$<\"\n";
2509 "$(" <<
prefix <<
"DOXYDOCS_TEX): \\\n"
2510 "$(" <<
prefix <<
"DOXYLATEX_PL) \\\n"
2511 "$(" <<
prefix <<
"DOXYDOCS_PM)\n"
2512 "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
2514 "$(" <<
prefix <<
"DOXYSTRUCTURE_TEX): \\\n"
2515 "$(" <<
prefix <<
"DOXYLATEXSTRUCTURE_PL) \\\n"
2516 "$(" <<
prefix <<
"DOXYSTRUCTURE_PM)\n"
2517 "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
2519 "$(" <<
prefix <<
"DOXYLATEX_PDF) \\\n"
2520 "$(" <<
prefix <<
"DOXYLATEX_DVI): \\\n"
2521 "$(" <<
prefix <<
"DOXYLATEX_TEX) \\\n"
2522 "$(" <<
prefix <<
"DOXYFORMAT_TEX) \\\n"
2523 "$(" <<
prefix <<
"DOXYSTRUCTURE_TEX) \\\n"
2524 "$(" <<
prefix <<
"DOXYDOCS_TEX)\n"
2526 "$(" <<
prefix <<
"DOXYLATEX_PDF): \\\n"
2527 "$(" <<
prefix <<
"DOXYLATEX_TEX)\n"
2528 "\tpdflatex -interaction=nonstopmode \"$<\"\n"
2530 "$(" <<
prefix <<
"DOXYLATEX_DVI): \\\n"
2531 "$(" <<
prefix <<
"DOXYLATEX_TEX)\n"
2532 "\tlatex -interaction=nonstopmode \"$<\"\n";
2540 std::ofstream makefileStream;
2548 ".PHONY: default clean" << (perlmodLatex ?
" pdf" :
"") <<
"\n"
2549 "default: " << (perlmodLatex ?
"pdf" :
"clean") <<
"\n"
2553 "clean: clean-perlmod\n";
2557 "pdf: $(" <<
prefix <<
"DOXYLATEX_PDF)\n"
2558 "dvi: $(" <<
prefix <<
"DOXYLATEX_DVI)\n";
2566 std::ofstream doxyLatexStructurePLStream;
2570 doxyLatexStructurePLStream <<
2571 "use DoxyStructure;\n"
2573 "sub process($) {\n"
2574 "\tmy $node = $_[0];\n"
2575 "\tmy ($type, $name) = @$node[0, 1];\n"
2577 "\tif ($type eq \"string\") { $command = \"String\" }\n"
2578 "\telsif ($type eq \"doc\") { $command = \"Doc\" }\n"
2579 "\telsif ($type eq \"hash\") {\n"
2580 "\t\t$command = \"Hash\";\n"
2581 "\t\tfor my $subnode (values %{$$node[2]}) {\n"
2582 "\t\t\tprocess($subnode);\n"
2585 "\telsif ($type eq \"list\") {\n"
2586 "\t\t$command = \"List\";\n"
2587 "\t\tprocess($$node[2]);\n"
2589 "\tprint \"\\\\\" . $command . \"Node{\" . $name . \"}%\\n\";\n"
2592 "process($doxystructure);\n";
2599 std::ofstream doxyLatexPLStream;
2603 doxyLatexPLStream <<
2604 "use DoxyStructure;\n"
2607 "sub latex_quote($) {\n"
2608 "\tmy $text = $_[0];\n"
2609 "\t$text =~ s/\\\\/\\\\textbackslash /g;\n"
2610 "\t$text =~ s/\\|/\\\\textbar /g;\n"
2611 "\t$text =~ s/</\\\\textless /g;\n"
2612 "\t$text =~ s/>/\\\\textgreater /g;\n"
2613 "\t$text =~ s/~/\\\\textasciitilde /g;\n"
2614 "\t$text =~ s/\\^/\\\\textasciicircum /g;\n"
2615 "\t$text =~ s/[\\$&%#_{}]/\\\\$&/g;\n"
2619 "sub generate_doc($) {\n"
2620 "\tmy $doc = $_[0];\n"
2621 "\tfor my $item (@$doc) {\n"
2622 "\t\tmy $type = $$item{type};\n"
2623 "\t\tif ($type eq \"text\") {\n"
2624 "\t\t\tlatex_quote($$item{content});\n"
2625 "\t\t} elsif ($type eq \"parbreak\") {\n"
2626 "\t\t\tprint \"\\n\\n\";\n"
2627 "\t\t} elsif ($type eq \"style\") {\n"
2628 "\t\t\tmy $style = $$item{style};\n"
2629 "\t\t\tif ($$item{enable} eq \"yes\") {\n"
2630 "\t\t\t\tif ($style eq \"bold\") { print '\\bfseries'; }\n"
2631 "\t\t\t\tif ($style eq \"italic\") { print '\\itshape'; }\n"
2632 "\t\t\t\tif ($style eq \"code\") { print '\\ttfamily'; }\n"
2634 "\t\t\t\tif ($style eq \"bold\") { print '\\mdseries'; }\n"
2635 "\t\t\t\tif ($style eq \"italic\") { print '\\upshape'; }\n"
2636 "\t\t\t\tif ($style eq \"code\") { print '\\rmfamily'; }\n"
2638 "\t\t\tprint '{}';\n"
2639 "\t\t} elsif ($type eq \"symbol\") {\n"
2640 "\t\t\tmy $symbol = $$item{symbol};\n"
2641 "\t\t\tif ($symbol eq \"copyright\") { print '\\copyright'; }\n"
2642 "\t\t\telsif ($symbol eq \"szlig\") { print '\\ss'; }\n"
2643 "\t\t\tprint '{}';\n"
2644 "\t\t} elsif ($type eq \"accent\") {\n"
2645 "\t\t\tmy ($accent) = $$item{accent};\n"
2646 "\t\t\tif ($accent eq \"umlaut\") { print '\\\"'; }\n"
2647 "\t\t\telsif ($accent eq \"acute\") { print '\\\\\\''; }\n"
2648 "\t\t\telsif ($accent eq \"grave\") { print '\\`'; }\n"
2649 "\t\t\telsif ($accent eq \"circ\") { print '\\^'; }\n"
2650 "\t\t\telsif ($accent eq \"tilde\") { print '\\~'; }\n"
2651 "\t\t\telsif ($accent eq \"cedilla\") { print '\\c'; }\n"
2652 "\t\t\telsif ($accent eq \"ring\") { print '\\r'; }\n"
2653 "\t\t\tprint \"{\" . $$item{letter} . \"}\"; \n"
2654 "\t\t} elsif ($type eq \"list\") {\n"
2655 "\t\t\tmy $env = ($$item{style} eq \"ordered\") ? \"enumerate\" : \"itemize\";\n"
2656 "\t\t\tprint \"\\n\\\\begin{\" . $env .\"}\";\n"
2657 "\t\t \tfor my $subitem (@{$$item{content}}) {\n"
2658 "\t\t\t\tprint \"\\n\\\\item \";\n"
2659 "\t\t\t\tgenerate_doc($subitem);\n"
2661 "\t\t\tprint \"\\n\\\\end{\" . $env .\"}\";\n"
2662 "\t\t} elsif ($type eq \"url\") {\n"
2663 "\t\t\tlatex_quote($$item{content});\n"
2668 "sub generate($$) {\n"
2669 "\tmy ($item, $node) = @_;\n"
2670 "\tmy ($type, $name) = @$node[0, 1];\n"
2671 "\tif ($type eq \"string\") {\n"
2672 "\t\tprint \"\\\\\" . $name . \"{\";\n"
2673 "\t\tlatex_quote($item);\n"
2674 "\t\tprint \"}\";\n"
2675 "\t} elsif ($type eq \"doc\") {\n"
2676 "\t\tif (@$item) {\n"
2677 "\t\t\tprint \"\\\\\" . $name . \"{\";\n"
2678 "\t\t\tgenerate_doc($item);\n"
2679 "\t\t\tprint \"}%\\n\";\n"
2681 "#\t\t\tprint \"\\\\\" . $name . \"Empty%\\n\";\n"
2683 "\t} elsif ($type eq \"hash\") {\n"
2684 "\t\tmy ($key, $value);\n"
2685 "\t\twhile (($key, $subnode) = each %{$$node[2]}) {\n"
2686 "\t\t\tmy $subname = $$subnode[1];\n"
2687 "\t\t\tprint \"\\\\Defcs{field\" . $subname . \"}{\";\n"
2688 "\t\t\tif ($$item{$key}) {\n"
2689 "\t\t\t\tgenerate($$item{$key}, $subnode);\n"
2691 "#\t\t\t\t\tprint \"\\\\\" . $subname . \"Empty%\\n\";\n"
2693 "\t\t\tprint \"}%\\n\";\n"
2695 "\t\tprint \"\\\\\" . $name . \"%\\n\";\n"
2696 "\t} elsif ($type eq \"list\") {\n"
2697 "\t\tmy $index = 0;\n"
2698 "\t\tif (@$item) {\n"
2699 "\t\t\tprint \"\\\\\" . $name . \"{%\\n\";\n"
2700 "\t\t\tfor my $subitem (@$item) {\n"
2701 "\t\t\t\tif ($index) {\n"
2702 "\t\t\t\t\tprint \"\\\\\" . $name . \"Sep%\\n\";\n"
2704 "\t\t\t\tgenerate($subitem, $$node[2]);\n"
2705 "\t\t\t\t$index++;\n"
2707 "\t\t\tprint \"}%\\n\";\n"
2709 "#\t\t\tprint \"\\\\\" . $name . \"Empty%\\n\";\n"
2714 "generate($doxydocs, $doxystructure);\n";
2721 std::ofstream doxyFormatTexStream;
2725 doxyFormatTexStream <<
2726 "\\def\\Defcs#1{\\long\\expandafter\\def\\csname#1\\endcsname}\n"
2727 "\\Defcs{Empty}{}\n"
2728 "\\def\\IfEmpty#1{\\expandafter\\ifx\\csname#1\\endcsname\\Empty}\n"
2730 "\\def\\StringNode#1{\\Defcs{#1}##1{##1}}\n"
2731 "\\def\\DocNode#1{\\Defcs{#1}##1{##1}}\n"
2732 "\\def\\ListNode#1{\\Defcs{#1}##1{##1}\\Defcs{#1Sep}{}}\n"
2733 "\\def\\HashNode#1{\\Defcs{#1}{}}\n"
2738 "\\dimendef\\DimenA=151\\relax\n"
2739 "\\dimendef\\DimenB=152\\relax\n"
2740 "\\countdef\\ZoneDepth=151\\relax\n"
2742 "\\def\\Cs#1{\\csname#1\\endcsname}\n"
2743 "\\def\\Letcs#1{\\expandafter\\let\\csname#1\\endcsname}\n"
2744 "\\def\\Heading#1{\\vskip 4mm\\relax\\textbf{#1}}\n"
2745 "\\def\\See#1{\\begin{flushleft}\\Heading{See also: }#1\\end{flushleft}}\n"
2747 "\\def\\Frame#1{\\vskip 3mm\\relax\\fbox{ \\vbox{\\hsize0.95\\hsize\\vskip 1mm\\relax\n"
2748 "\\raggedright#1\\vskip 0.5mm\\relax} }}\n"
2750 "\\def\\Zone#1#2#3{%\n"
2751 "\\Defcs{Test#1}{#2}%\n"
2752 "\\Defcs{Emit#1}{#3}%\n"
2754 "\\advance\\ZoneDepth1\\relax\n"
2755 "\\Letcs{Mode\\number\\ZoneDepth}0\\relax\n"
2756 "\\Letcs{Present\\number\\ZoneDepth}0\\relax\n"
2758 "\\expandafter\\if\\Cs{Present\\number\\ZoneDepth}1%\n"
2759 "\\advance\\ZoneDepth-1\\relax\n"
2760 "\\Letcs{Present\\number\\ZoneDepth}1\\relax\n"
2761 "\\expandafter\\if\\Cs{Mode\\number\\ZoneDepth}1%\n"
2762 "\\advance\\ZoneDepth1\\relax\n"
2763 "\\Letcs{Mode\\number\\ZoneDepth}1\\relax\n"
2765 "\\advance\\ZoneDepth-1\\relax\\fi\n"
2766 "\\advance\\ZoneDepth1\\relax\\fi\n"
2767 "\\advance\\ZoneDepth-1\\relax}}\n"
2769 "\\def\\Member#1#2{%\n"
2770 "\\Defcs{Test#1}{\\Cs{field#1Detailed}\n"
2771 "\\IfEmpty{field#1DetailedDoc}\\else\\Letcs{Present#1}1\\fi}\n"
2772 "\\Defcs{#1}{\\Letcs{Present#1}0\\relax\n"
2773 "\\Cs{Test#1}\\if1\\Cs{Present#1}\\Letcs{Present\\number\\ZoneDepth}1\\relax\n"
2774 "\\if1\\Cs{Mode\\number\\ZoneDepth}#2\\fi\\fi}}\n"
2776 "\\def\\TypedefMemberList#1#2{%\n"
2777 "\\Defcs{#1DetailedDoc}##1{\\vskip 5.5mm\\relax##1}%\n"
2778 "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
2779 "\\Defcs{#1See}##1{\\See{##1}}%\n"
2781 "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
2782 "\\Member{#1}{\\Frame{typedef \\Cs{field#1Type} \\Cs{field#1Name}}%\n"
2783 "\\Cs{field#1DetailedDoc}\\Cs{field#1See}\\vskip 5mm\\relax}}%\n"
2785 "\\def\\VariableMemberList#1#2{%\n"
2786 "\\Defcs{#1DetailedDoc}##1{\\vskip 5.5mm\\relax##1}%\n"
2787 "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
2788 "\\Defcs{#1See}##1{\\See{##1}}%\n"
2790 "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
2791 "\\Member{#1}{\\Frame{\\Cs{field#1Type}{} \\Cs{field#1Name}}%\n"
2792 "\\Cs{field#1DetailedDoc}\\Cs{field#1See}\\vskip 5mm\\relax}}%\n"
2794 "\\def\\FunctionMemberList#1#2{%\n"
2795 "\\Defcs{#1PDParamName}##1{\\textit{##1}}%\n"
2796 "\\Defcs{#1PDParam}{\\Cs{field#1PDParamName}}%\n"
2797 "\\Defcs{#1PDParamsSep}{, }%\n"
2798 "\\Defcs{#1PDBlocksSep}{\\vskip 2mm\\relax}%\n"
2800 "\\Defcs{#1PDBlocks}##1{%\n"
2801 "\\Heading{Parameters:}\\vskip 1.5mm\\relax\n"
2802 "\\DimenA0pt\\relax\n"
2803 "\\Defcs{#1PDBlock}{\\setbox\\BoxA\\hbox{\\Cs{field#1PDParams}}%\n"
2804 "\\ifdim\\DimenA<\\wd\\BoxA\\DimenA\\wd\\BoxA\\fi}%\n"
2806 "\\advance\\DimenA3mm\\relax\n"
2807 "\\DimenB\\hsize\\advance\\DimenB-\\DimenA\\relax\n"
2808 "\\Defcs{#1PDBlock}{\\hbox to\\hsize{\\vtop{\\hsize\\DimenA\\relax\n"
2809 "\\Cs{field#1PDParams}}\\hfill\n"
2810 "\\vtop{\\hsize\\DimenB\\relax\\Cs{field#1PDDoc}}}}%\n"
2813 "\\Defcs{#1ParamName}##1{\\textit{##1}}\n"
2814 "\\Defcs{#1Param}{\\Cs{field#1ParamType}{} \\Cs{field#1ParamName}}\n"
2815 "\\Defcs{#1ParamsSep}{, }\n"
2817 "\\Defcs{#1Name}##1{\\textbf{##1}}\n"
2818 "\\Defcs{#1See}##1{\\See{##1}}\n"
2819 "\\Defcs{#1Return}##1{\\Heading{Returns: }##1}\n"
2820 "\\Defcs{field#1Title}{\\Frame{\\Cs{field#1Type}{} \\Cs{field#1Name}(\\Cs{field#1Params})}}%\n"
2822 "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
2824 "\\Cs{field#1Title}\\vskip 6mm\\relax\\Cs{field#1DetailedDoc}\n"
2825 "\\Cs{field#1Return}\\Cs{field#1PDBlocks}\\Cs{field#1See}\\vskip 5mm\\relax}}\n"
2827 "\\def\\FileDetailed{\\fieldFileDetailedDoc\\par}\n"
2828 "\\def\\ClassDetailed{\\fieldClassDetailedDoc\\par}\n"
2830 "\\def\\FileSubzones{\\fieldFileTypedefs\\fieldFileVariables\\fieldFileFunctions}\n"
2832 "\\def\\ClassSubzones{%\n"
2833 "\\fieldClassPublicTypedefs\\fieldClassPublicMembers\\fieldClassPublicMethods\n"
2834 "\\fieldClassProtectedTypedefs\\fieldClassProtectedMembers\\fieldClassProtectedMethods\n"
2835 "\\fieldClassPrivateTypedefs\\fieldClassPrivateMembers\\fieldClassPrivateMethods}\n"
2837 "\\Member{Page}{\\subsection{\\fieldPageName}\\fieldPageDetailedDoc}\n"
2839 "\\TypedefMemberList{FileTypedef}{Typedefs}\n"
2840 "\\VariableMemberList{FileVariable}{Variables}\n"
2841 "\\FunctionMemberList{FileFunction}{Functions}\n"
2842 "\\Zone{File}{\\FileSubzones}{\\subsection{\\fieldFileName}\\fieldFileDetailed\\FileSubzones}\n"
2844 "\\TypedefMemberList{ClassPublicTypedef}{Public Typedefs}\n"
2845 "\\TypedefMemberList{ClassProtectedTypedef}{Protected Typedefs}\n"
2846 "\\TypedefMemberList{ClassPrivateTypedef}{Private Typedefs}\n"
2847 "\\VariableMemberList{ClassPublicMember}{Public Members}\n"
2848 "\\VariableMemberList{ClassProtectedMember}{Protected Members}\n"
2849 "\\VariableMemberList{ClassPrivateMember}{Private Members}\n"
2850 "\\FunctionMemberList{ClassPublicMethod}{Public Methods}\n"
2851 "\\FunctionMemberList{ClassProtectedMethod}{Protected Methods}\n"
2852 "\\FunctionMemberList{ClassPrivateMethod}{Private Methods}\n"
2853 "\\Zone{Class}{\\ClassSubzones}{\\subsection{\\fieldClassName}\\fieldClassDetailed\\ClassSubzones}\n"
2855 "\\Zone{AllPages}{\\fieldPages}{\\section{Pages}\\fieldPages}\n"
2856 "\\Zone{AllFiles}{\\fieldFiles}{\\section{Files}\\fieldFiles}\n"
2857 "\\Zone{AllClasses}{\\fieldClasses}{\\section{Classes}\\fieldClasses}\n"
2859 "\\newlength{\\oldparskip}\n"
2860 "\\newlength{\\oldparindent}\n"
2861 "\\newlength{\\oldfboxrule}\n"
2863 "\\ZoneDepth0\\relax\n"
2864 "\\Letcs{Mode0}1\\relax\n"
2866 "\\def\\EmitDoxyDocs{%\n"
2867 "\\setlength{\\oldparskip}{\\parskip}\n"
2868 "\\setlength{\\oldparindent}{\\parindent}\n"
2869 "\\setlength{\\oldfboxrule}{\\fboxrule}\n"
2870 "\\setlength{\\parskip}{0cm}\n"
2871 "\\setlength{\\parindent}{0cm}\n"
2872 "\\setlength{\\fboxrule}{1pt}\n"
2873 "\\AllPages\\AllFiles\\AllClasses\n"
2874 "\\setlength{\\parskip}{\\oldparskip}\n"
2875 "\\setlength{\\parindent}{\\oldparindent}\n"
2876 "\\setlength{\\fboxrule}{\\oldfboxrule}}\n";
2883 std::ofstream doxyLatexTexStream;
2887 doxyLatexTexStream <<
2888 "\\documentclass[a4paper,12pt]{article}\n"
2889 "\\usepackage[latin1]{inputenc}\n"
2890 "\\usepackage[none]{hyphenat}\n"
2891 "\\usepackage[T1]{fontenc}\n"
2892 "\\usepackage{hyperref}\n"
2893 "\\usepackage{times}\n"
2895 "\\input{doxyformat}\n"
2897 "\\begin{document}\n"
2901 "\\end{document}\n";
This class contains the information about the argument of a function or template.
This class represents an function or template argument list.
bool hasParameters() const
bool constSpecifier() const
bool volatileSpecifier() const
A abstract class representing of a compound symbol.
virtual const ArgumentList & templateArguments() const =0
Returns the template arguments of this class.
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual DString compoundTypeString() const =0
Returns the type of compound as a string.
virtual MemberList * getMemberList(MemberListType lt) const =0
Returns the members in the list identified by lt.
virtual const MemberNameInfoLinkedMap & memberNameInfoLinkedMap() const =0
Returns a dictionary of all members.
virtual bool isImplicitTemplateInstance() const =0
virtual const MemberGroupList & getMemberGroups() const =0
Returns the member groups defined for this class.
virtual ClassLinkedRefMap getClasses() const =0
returns the classes nested into this class
virtual const IncludeInfo * includeInfo() const =0
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
virtual DString initializer() const =0
virtual ArgumentList getTemplateParameterList() const =0
virtual const IncludeInfo * includeInfo() const =0
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
DString & setNum(short n)
DString mid(size_t index, size_t len=npos) const
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
char & at(size_t i)
Returns a reference to the character at index i.
DString & sprintf(const char *format,...)
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
The common base class of all entity definitions found in the sources.
virtual DString briefDescription(bool abbreviate=false) const =0
virtual int getEndBodyLine() const =0
virtual DString briefFile() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual int docLine() const =0
virtual DString getDefFileName() const =0
virtual DString documentation() const =0
virtual int getDefLine() const =0
virtual const DString & name() const =0
virtual int briefLine() const =0
virtual bool isAnonymous() const =0
virtual Definition * getOuterScope() const =0
virtual DString docFile() const =0
virtual int getStartBodyLine() const =0
virtual bool isReference() const =0
Class representing a directory in the file system.
static std::string currentDirPath()
std::string absPath() const
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
void setPath(const std::string &path)
Node representing an anchor.
Node representing an auto List.
bool isCheckedList() const
Node representing an item of a auto list.
Node representing a citation of some bibliographic reference.
CiteInfoOption option() const
Node representing a dia file.
Node representing a dot file.
Node representing an emoji.
Node representing a Hypertext reference.
Node representing a horizontal ruler.
Node representing an HTML blockquote.
Node representing a HTML table caption.
Node representing a HTML table cell.
Node representing a HTML description data.
Node representing a Html description list.
Node representing a Html description item.
Node representing a Html list.
const HtmlAttribList & attribs() const
Node representing a HTML list item.
const HtmlAttribList & attribs() const
Node representing a HTML table row.
Node representing a HTML table.
const DocNodeVariant * caption() const
Node representing an image.
Node representing a include/dontinclude operator block.
Node representing an included text block from file.
Node representing an entry in the index.
Node representing an internal section of documentation.
Node representing an internal reference to some item.
Node representing a line break.
Node representing a link to some item.
Node representing a word that can be linked to something.
Node representing a mermaid file.
Node representing a msc file.
Class representing the abstract syntax tree of a documentation block.
DocNodeVariant * parent()
Node representing an block of paragraphs.
Node representing a paragraph in the documentation tree.
Node representing a parameter list.
const DocNodeList & parameters() const
DocParamSect::Direction direction() const
const DocNodeList & paragraphs() const
Node representing a parameter section.
bool hasInOutSpecifier() const
Node representing a uml file.
Node representing a reference to some item.
DString targetTitle() const
Root node of documentation tree.
Node representing a reference to a section.
Node representing a list of section references.
Node representing a normal section.
const DocNodeVariant * title() const
Node representing a separator.
Node representing a simple list.
Node representing a simple list item.
const DocNodeVariant * paragraph() const
Node representing a simple section.
const DocNodeVariant * title() const
Node representing a separator between two simple sections of the same type.
Node representing a style change.
Node representing a special symbol.
HtmlEntityMapper::SymType symbol() const
Root node of a text fragment.
Node representing a simple section title.
Node representing a URL (or email address).
Node representing a verbatim, unparsed text fragment.
Node representing a VHDL flow chart.
Node representing some amount of white space.
Node representing a word.
Node representing an item of a cross-referenced list.
Representation of a class inheritance or dependency graph.
static NamespaceLinkedMap * namespaceLinkedMap
static ConceptLinkedMap * conceptLinkedMap
static std::unique_ptr< PageDef > mainPage
static FileNameLinkedMap * inputNameLinkedMap
static ClassLinkedMap * classLinkedMap
static PageLinkedMap * pageLinkedMap
static GroupLinkedMap * groupLinkedMap
const char * name(int index) const
Access routine to the name of the Emoji entity.
static EmojiEntityMapper & instance()
Returns the one and only instance of the Emoji entity mapper.
A model of a file symbol.
virtual const MemberGroupList & getMemberGroups() const =0
virtual const DString & docName() const =0
virtual const IncludeInfoList & includeFileList() const =0
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual const IncludeInfoList & includedByFileList() const =0
A model of a group of symbols.
virtual DString groupTitle() const =0
virtual const GroupList & getSubGroups() const =0
virtual const FileList & getFiles() const =0
virtual const MemberGroupList & getMemberGroups() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const PageLinkedRefMap & getPages() const =0
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual const ModuleLinkedRefMap & getModules() const =0
const PerlSymb * perl(SymType symb) const
Access routine to the perl struct with the perl code of the HTML entity.
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
Class representing the data associated with a #include statement.
const T * find(const std::string &key) const
A model of a class/file/namespace member symbol.
virtual DString argsString() const =0
virtual const ClassDef * getClassDef() const =0
virtual DString excpString() const =0
virtual const DString & initializer() const =0
virtual const MemberVector & enumFieldList() const =0
virtual const ArgumentList & argumentList() const =0
virtual const MemberVector & reimplementedBy() const =0
virtual DString bitfieldString() const =0
virtual bool isStatic() const =0
virtual const MemberDef * reimplements() const =0
virtual Protection protection() const =0
virtual MemberType memberType() const =0
virtual DString enumBaseType() const =0
virtual DString typeString() const =0
virtual Specifier virtualness(int count=0) const =0
virtual const ArgumentList & declArgumentList() const =0
A list of MemberDef objects as shown in documentation sections.
A vector of MemberDef object.
bool empty() const noexcept
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual const MemberGroupList & getMemberGroups() const =0
virtual FileList getUsedFiles() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
static ModuleManager & instance()
An abstract interface of a namespace symbol.
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual const MemberGroupList & getMemberGroups() const =0
A model of a page symbol.
Concrete visitor implementation for PerlMod output.
void openItem(const DString &)
PerlModDocVisitor(PerlModOutput &)
void visitChildren(const T &t)
void openSubBlock(const DString &=DString())
void addLink(const DString &ref, const DString &file, const DString &anchor)
void singleItem(const DString &)
void operator()(const DocWord &)
void generatePerlModForPage(PageDef *pi)
DString pathDoxyLatexStructurePL
DString pathDoxyStructureTex
void generatePerlModForMember(const MemberDef *md, const Definition *)
bool generateDoxyFormatTex()
bool generateDoxyLatexTex()
bool createOutputDir(Dir &perlModDir)
void generatePerlModForClass(const ClassDef *cd)
bool generatePerlModOutput()
void generatePerlModForModule(const ModuleDef *mod)
DString pathDoxyFormatTex
DString pathDoxyStructurePM
void generatePerlModForNamespace(const NamespaceDef *nd)
void generatePerlModSection(const Definition *d, MemberList *ml, const DString &name, const DString &header=DString())
PerlModGenerator(bool pretty)
void addIncludeInfo(const IncludeInfo *ii)
void addListOfAllMembers(const ClassDef *cd)
bool generateDoxyStructurePM()
bool generateDoxyLatexPL()
void generatePerlModForGroup(const GroupDef *gd)
void generatePerlModForFile(const FileDef *fd)
void generatePerlModForConcept(const ConceptDef *cd)
bool generateDoxyLatexStructurePL()
void generatePerlUserDefinedSection(const Definition *d, const MemberGroupList &mgl)
bool createOutputFile(std::ofstream &f, const DString &s)
PerlModOutput & closeList()
PerlModOutput & add(char c)
char m_spaces[PERLOUTPUT_MAX_INDENTATION *2+2]
PerlModOutput & addQuoted(const DString &s)
PerlModOutput(bool pretty)
PerlModOutput & addFieldQuotedString(const DString &field, const DString &content)
void iaddQuoted(const DString &)
PerlModOutputStream * m_stream
PerlModOutput & open(char c, const DString &s=DString())
PerlModOutput & add(DString &s)
PerlModOutput & continueBlock()
PerlModOutput & add(int n)
PerlModOutput & openList(const DString &s=DString())
void iaddField(const DString &)
PerlModOutput & addFieldBoolean(const DString &field, bool content)
void iaddFieldQuotedString(const DString &, const DString &)
void iaddFieldQuotedChar(const DString &, char)
PerlModOutput & openHash(const DString &s=DString())
PerlModOutput & add(const DString &s)
void iopen(char, const DString &)
void setPerlModOutputStream(PerlModOutputStream *os)
PerlModOutput & close(char c=0)
PerlModOutput & closeHash()
PerlModOutput & addFieldQuotedChar(const DString &field, char content)
PerlModOutput & addField(const DString &s)
PerlModOutput & add(unsigned int n)
PerlModOutputStream(std::ostream &t)
class that provide information about a section.
static SectionManager & instance()
returns a reference to the singleton
#define Config_getBool(name)
#define Config_getString(name)
#define NON_COPYABLE(cls)
Macro to help implementing the rule of 5 for a non-copyable & movable class.
IDocParserPtr createDocParser()
factory function to create a parser
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &input, const DocOptions &options)
const char * qPrint(const char *s)
std::ofstream openOutputStream(const DString &name, bool append=false)
static const char * getVirtualnessName(Specifier virt)
static void addTemplateList(const ClassDef *cd, PerlModOutput &output)
static DString pathDoxyExec
void setPerlModDoxyfile(const DString &qs)
static const char * getProtectionName(Protection prot)
static void addTemplateArgumentList(const ArgumentList &al, PerlModOutput &output, const DString &)
static DString pathDoxyfile
static void addPerlModDocBlock(PerlModOutput &output, const DString &name, const DString &fileName, int lineNr, const Definition *scope, const MemberDef *md, const DString &text)
#define PERLOUTPUT_MAX_INDENTATION
Portable versions of functions that are platform dependent.
Helper class to pass options when calling OutputList::generateDoc().
DString filterTitle(const DString &title)
A bunch of utility functions.