Doxygen
Loading...
Searching...
No Matches
PerlModGenerator Class Reference
Collaboration diagram for PerlModGenerator:

Public Member Functions

 PerlModGenerator (bool pretty)
void generatePerlModForMember (const MemberDef *md, const Definition *)
void generatePerlUserDefinedSection (const Definition *d, const MemberGroupList &mgl)
void generatePerlModSection (const Definition *d, MemberList *ml, const QCString &name, const QCString &header=QCString())
void addListOfAllMembers (const ClassDef *cd)
void addIncludeInfo (const IncludeInfo *ii)
void generatePerlModForClass (const ClassDef *cd)
void generatePerlModForConcept (const ConceptDef *cd)
void generatePerlModForModule (const ModuleDef *mod)
void generatePerlModForNamespace (const NamespaceDef *nd)
void generatePerlModForFile (const FileDef *fd)
void generatePerlModForGroup (const GroupDef *gd)
void generatePerlModForPage (PageDef *pi)
bool createOutputFile (std::ofstream &f, const QCString &s)
bool createOutputDir (Dir &perlModDir)
bool generateDoxyLatexTex ()
bool generateDoxyFormatTex ()
bool generateDoxyStructurePM ()
bool generateDoxyLatexPL ()
bool generateDoxyLatexStructurePL ()
bool generateDoxyRules ()
bool generateMakefile ()
bool generatePerlModOutput ()
void generate ()

Public Attributes

PerlModOutput m_output
QCString pathDoxyStructurePM
QCString pathDoxyDocsTex
QCString pathDoxyFormatTex
QCString pathDoxyLatexTex
QCString pathDoxyLatexDVI
QCString pathDoxyLatexPDF
QCString pathDoxyStructureTex
QCString pathDoxyDocsPM
QCString pathDoxyLatexPL
QCString pathDoxyLatexStructurePL
QCString pathDoxyRules
QCString pathMakefile

Detailed Description

Definition at line 1437 of file perlmodgen.cpp.

Constructor & Destructor Documentation

◆ PerlModGenerator()

PerlModGenerator::PerlModGenerator ( bool pretty)
inline

Definition at line 1456 of file perlmodgen.cpp.

1456: m_output(pretty) { }
PerlModOutput m_output

References m_output.

Member Function Documentation

◆ addIncludeInfo()

void PerlModGenerator::addIncludeInfo ( const IncludeInfo * ii)

Definition at line 1715 of file perlmodgen.cpp.

1716{
1717 if (ii)
1718 {
1719 QCString nm = ii->includeName;
1720 if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
1721 if (!nm.isEmpty())
1722 {
1723 m_output.openHash("includes");
1724 m_output.addFieldBoolean("local", ii->kind==IncludeKind::IncludeLocal || ii->kind==IncludeKind::ImportLocal)
1725 .addFieldQuotedString("name", nm)
1726 .closeHash();
1727 }
1728 }
1729}
virtual const QCString & docName() const =0
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:167
@ ImportLocal
Definition filedef.h:54
@ IncludeLocal
Definition filedef.h:50
QCString includeName
Definition filedef.h:80
IncludeKind kind
Definition filedef.h:81
const FileDef * fileDef
Definition filedef.h:79

References FileDef::docName(), IncludeInfo::fileDef, ImportLocal, IncludeLocal, IncludeInfo::includeName, QCString::isEmpty(), IncludeInfo::kind, and m_output.

Referenced by generatePerlModForClass(), and generatePerlModForConcept().

◆ addListOfAllMembers()

void PerlModGenerator::addListOfAllMembers ( const ClassDef * cd)

Definition at line 1662 of file perlmodgen.cpp.

1663{
1664 m_output.openList("all_members");
1665 for (auto &mni : cd->memberNameInfoLinkedMap())
1666 {
1667 for (auto &mi : *mni)
1668 {
1669 const MemberDef *md=mi->memberDef();
1670 const ClassDef *mcd=md->getClassDef();
1671
1672 m_output.openHash()
1673 .addFieldQuotedString("name", md->name())
1674 .addFieldQuotedString("virtualness", getVirtualnessName(md->virtualness()))
1675 .addFieldQuotedString("protection", getProtectionName(mi->prot()));
1676
1677 if (!mi->ambiguityResolutionScope().isEmpty())
1678 m_output.addFieldQuotedString("ambiguity_scope", mi->ambiguityResolutionScope());
1679
1680 m_output.addFieldQuotedString("scope", mcd->name())
1681 .closeHash();
1682 }
1683 }
1684 m_output.closeList();
1685}
virtual const MemberNameInfoLinkedMap & memberNameInfoLinkedMap() const =0
Returns a dictionary of all members.
virtual const QCString & name() const =0
virtual const ClassDef * getClassDef() const =0
virtual Specifier virtualness(int count=0) const =0
static const char * getVirtualnessName(Specifier virt)
static const char * getProtectionName(Protection prot)

References MemberDef::getClassDef(), getProtectionName(), getVirtualnessName(), m_output, ClassDef::memberNameInfoLinkedMap(), Definition::name(), and MemberDef::virtualness().

Referenced by generatePerlModForClass().

◆ createOutputDir()

bool PerlModGenerator::createOutputDir ( Dir & perlModDir)

Definition at line 2244 of file perlmodgen.cpp.

2245{
2246 std::string outputDirectory = Config_getString(OUTPUT_DIRECTORY).str();
2247 perlModDir.setPath(outputDirectory+"/perlmod");
2248 if (!perlModDir.exists() && !perlModDir.mkdir(outputDirectory+"/perlmod"))
2249 {
2250 err("Could not create perlmod directory in {}\n",outputDirectory);
2251 return false;
2252 }
2253 return true;
2254}
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
Definition dir.cpp:295
void setPath(const std::string &path)
Definition dir.cpp:229
bool exists() const
Definition dir.cpp:257
#define Config_getString(name)
Definition config.h:32
#define err(fmt,...)
Definition message.h:127

References Config_getString, err, Dir::exists(), Dir::mkdir(), and Dir::setPath().

Referenced by generate().

◆ createOutputFile()

bool PerlModGenerator::createOutputFile ( std::ofstream & f,
const QCString & s )

Definition at line 2233 of file perlmodgen.cpp.

2234{
2236 if (!f.is_open())
2237 {
2238 err("Cannot open file {} for writing!\n", s);
2239 return false;
2240 }
2241 return true;
2242}
std::ofstream openOutputStream(const QCString &name, bool append=false)
Definition portable.cpp:648

References err, and Portable::openOutputStream().

Referenced by generateDoxyFormatTex(), generateDoxyLatexPL(), generateDoxyLatexStructurePL(), generateDoxyLatexTex(), generateDoxyRules(), generateDoxyStructurePM(), generateMakefile(), and generatePerlModOutput().

◆ generate()

void PerlModGenerator::generate ( )

Definition at line 2903 of file perlmodgen.cpp.

2904{
2905 // + classes
2906 // + namespaces
2907 // + files
2908 // - packages
2909 // + groups
2910 // + related pages
2911 // - examples
2912
2913 Dir perlModDir;
2914 if (!createOutputDir(perlModDir))
2915 return;
2916
2917 bool perlmodLatex = Config_getBool(PERLMOD_LATEX);
2918
2919 QCString perlModAbsPath = perlModDir.absPath();
2920 pathDoxyDocsPM = perlModAbsPath + "/DoxyDocs.pm";
2921 pathDoxyStructurePM = perlModAbsPath + "/DoxyStructure.pm";
2922 pathMakefile = perlModAbsPath + "/Makefile";
2923 pathDoxyRules = perlModAbsPath + "/doxyrules.make";
2924
2925 if (perlmodLatex) {
2926 pathDoxyStructureTex = perlModAbsPath + "/doxystructure.tex";
2927 pathDoxyFormatTex = perlModAbsPath + "/doxyformat.tex";
2928 pathDoxyLatexTex = perlModAbsPath + "/doxylatex.tex";
2929 pathDoxyLatexDVI = perlModAbsPath + "/doxylatex.dvi";
2930 pathDoxyLatexPDF = perlModAbsPath + "/doxylatex.pdf";
2931 pathDoxyDocsTex = perlModAbsPath + "/doxydocs.tex";
2932 pathDoxyLatexPL = perlModAbsPath + "/doxylatex.pl";
2933 pathDoxyLatexStructurePL = perlModAbsPath + "/doxylatex-structure.pl";
2934 }
2935
2936 if (!(generatePerlModOutput()
2938 && generateMakefile()
2939 && generateDoxyRules()))
2940 return;
2941
2942 if (perlmodLatex) {
2947 return;
2948 }
2949}
std::string absPath() const
Definition dir.cpp:364
bool generateDoxyFormatTex()
QCString pathDoxyLatexPL
QCString pathDoxyStructureTex
bool generateDoxyLatexTex()
bool createOutputDir(Dir &perlModDir)
QCString pathDoxyDocsPM
QCString pathDoxyStructurePM
QCString pathDoxyLatexDVI
bool generatePerlModOutput()
QCString pathDoxyDocsTex
QCString pathDoxyLatexStructurePL
bool generateDoxyStructurePM()
QCString pathDoxyFormatTex
QCString pathDoxyLatexPDF
bool generateDoxyLatexStructurePL()
QCString pathDoxyLatexTex
#define Config_getBool(name)
Definition config.h:33

References Dir::absPath(), Config_getBool, createOutputDir(), generateDoxyFormatTex(), generateDoxyLatexPL(), generateDoxyLatexStructurePL(), generateDoxyLatexTex(), generateDoxyRules(), generateDoxyStructurePM(), generateMakefile(), generatePerlModOutput(), pathDoxyDocsPM, pathDoxyDocsTex, pathDoxyFormatTex, pathDoxyLatexDVI, pathDoxyLatexPDF, pathDoxyLatexPL, pathDoxyLatexStructurePL, pathDoxyLatexTex, pathDoxyRules, pathDoxyStructurePM, pathDoxyStructureTex, and pathMakefile.

Referenced by generatePerlMod().

◆ generateDoxyFormatTex()

bool PerlModGenerator::generateDoxyFormatTex ( )

Definition at line 2716 of file perlmodgen.cpp.

2717{
2718 std::ofstream doxyFormatTexStream;
2719 if (!createOutputFile(doxyFormatTexStream, pathDoxyFormatTex))
2720 return false;
2721
2722 doxyFormatTexStream <<
2723 "\\def\\Defcs#1{\\long\\expandafter\\def\\csname#1\\endcsname}\n"
2724 "\\Defcs{Empty}{}\n"
2725 "\\def\\IfEmpty#1{\\expandafter\\ifx\\csname#1\\endcsname\\Empty}\n"
2726 "\n"
2727 "\\def\\StringNode#1{\\Defcs{#1}##1{##1}}\n"
2728 "\\def\\DocNode#1{\\Defcs{#1}##1{##1}}\n"
2729 "\\def\\ListNode#1{\\Defcs{#1}##1{##1}\\Defcs{#1Sep}{}}\n"
2730 "\\def\\HashNode#1{\\Defcs{#1}{}}\n"
2731 "\n"
2732 "\\input{" << pathDoxyStructureTex << "}\n"
2733 "\n"
2734 "\\newbox\\BoxA\n"
2735 "\\dimendef\\DimenA=151\\relax\n"
2736 "\\dimendef\\DimenB=152\\relax\n"
2737 "\\countdef\\ZoneDepth=151\\relax\n"
2738 "\n"
2739 "\\def\\Cs#1{\\csname#1\\endcsname}\n"
2740 "\\def\\Letcs#1{\\expandafter\\let\\csname#1\\endcsname}\n"
2741 "\\def\\Heading#1{\\vskip 4mm\\relax\\textbf{#1}}\n"
2742 "\\def\\See#1{\\begin{flushleft}\\Heading{See also: }#1\\end{flushleft}}\n"
2743 "\n"
2744 "\\def\\Frame#1{\\vskip 3mm\\relax\\fbox{ \\vbox{\\hsize0.95\\hsize\\vskip 1mm\\relax\n"
2745 "\\raggedright#1\\vskip 0.5mm\\relax} }}\n"
2746 "\n"
2747 "\\def\\Zone#1#2#3{%\n"
2748 "\\Defcs{Test#1}{#2}%\n"
2749 "\\Defcs{Emit#1}{#3}%\n"
2750 "\\Defcs{#1}{%\n"
2751 "\\advance\\ZoneDepth1\\relax\n"
2752 "\\Letcs{Mode\\number\\ZoneDepth}0\\relax\n"
2753 "\\Letcs{Present\\number\\ZoneDepth}0\\relax\n"
2754 "\\Cs{Test#1}\n"
2755 "\\expandafter\\if\\Cs{Present\\number\\ZoneDepth}1%\n"
2756 "\\advance\\ZoneDepth-1\\relax\n"
2757 "\\Letcs{Present\\number\\ZoneDepth}1\\relax\n"
2758 "\\expandafter\\if\\Cs{Mode\\number\\ZoneDepth}1%\n"
2759 "\\advance\\ZoneDepth1\\relax\n"
2760 "\\Letcs{Mode\\number\\ZoneDepth}1\\relax\n"
2761 "\\Cs{Emit#1}\n"
2762 "\\advance\\ZoneDepth-1\\relax\\fi\n"
2763 "\\advance\\ZoneDepth1\\relax\\fi\n"
2764 "\\advance\\ZoneDepth-1\\relax}}\n"
2765 "\n"
2766 "\\def\\Member#1#2{%\n"
2767 "\\Defcs{Test#1}{\\Cs{field#1Detailed}\n"
2768 "\\IfEmpty{field#1DetailedDoc}\\else\\Letcs{Present#1}1\\fi}\n"
2769 "\\Defcs{#1}{\\Letcs{Present#1}0\\relax\n"
2770 "\\Cs{Test#1}\\if1\\Cs{Present#1}\\Letcs{Present\\number\\ZoneDepth}1\\relax\n"
2771 "\\if1\\Cs{Mode\\number\\ZoneDepth}#2\\fi\\fi}}\n"
2772 "\n"
2773 "\\def\\TypedefMemberList#1#2{%\n"
2774 "\\Defcs{#1DetailedDoc}##1{\\vskip 5.5mm\\relax##1}%\n"
2775 "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
2776 "\\Defcs{#1See}##1{\\See{##1}}%\n"
2777 "%\n"
2778 "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
2779 "\\Member{#1}{\\Frame{typedef \\Cs{field#1Type} \\Cs{field#1Name}}%\n"
2780 "\\Cs{field#1DetailedDoc}\\Cs{field#1See}\\vskip 5mm\\relax}}%\n"
2781 "\n"
2782 "\\def\\VariableMemberList#1#2{%\n"
2783 "\\Defcs{#1DetailedDoc}##1{\\vskip 5.5mm\\relax##1}%\n"
2784 "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
2785 "\\Defcs{#1See}##1{\\See{##1}}%\n"
2786 "%\n"
2787 "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
2788 "\\Member{#1}{\\Frame{\\Cs{field#1Type}{} \\Cs{field#1Name}}%\n"
2789 "\\Cs{field#1DetailedDoc}\\Cs{field#1See}\\vskip 5mm\\relax}}%\n"
2790 "\n"
2791 "\\def\\FunctionMemberList#1#2{%\n"
2792 "\\Defcs{#1PDParamName}##1{\\textit{##1}}%\n"
2793 "\\Defcs{#1PDParam}{\\Cs{field#1PDParamName}}%\n"
2794 "\\Defcs{#1PDParamsSep}{, }%\n"
2795 "\\Defcs{#1PDBlocksSep}{\\vskip 2mm\\relax}%\n"
2796 "%\n"
2797 "\\Defcs{#1PDBlocks}##1{%\n"
2798 "\\Heading{Parameters:}\\vskip 1.5mm\\relax\n"
2799 "\\DimenA0pt\\relax\n"
2800 "\\Defcs{#1PDBlock}{\\setbox\\BoxA\\hbox{\\Cs{field#1PDParams}}%\n"
2801 "\\ifdim\\DimenA<\\wd\\BoxA\\DimenA\\wd\\BoxA\\fi}%\n"
2802 "##1%\n"
2803 "\\advance\\DimenA3mm\\relax\n"
2804 "\\DimenB\\hsize\\advance\\DimenB-\\DimenA\\relax\n"
2805 "\\Defcs{#1PDBlock}{\\hbox to\\hsize{\\vtop{\\hsize\\DimenA\\relax\n"
2806 "\\Cs{field#1PDParams}}\\hfill\n"
2807 "\\vtop{\\hsize\\DimenB\\relax\\Cs{field#1PDDoc}}}}%\n"
2808 "##1}\n"
2809 "\n"
2810 "\\Defcs{#1ParamName}##1{\\textit{##1}}\n"
2811 "\\Defcs{#1Param}{\\Cs{field#1ParamType}{} \\Cs{field#1ParamName}}\n"
2812 "\\Defcs{#1ParamsSep}{, }\n"
2813 "\n"
2814 "\\Defcs{#1Name}##1{\\textbf{##1}}\n"
2815 "\\Defcs{#1See}##1{\\See{##1}}\n"
2816 "\\Defcs{#1Return}##1{\\Heading{Returns: }##1}\n"
2817 "\\Defcs{field#1Title}{\\Frame{\\Cs{field#1Type}{} \\Cs{field#1Name}(\\Cs{field#1Params})}}%\n"
2818 "%\n"
2819 "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
2820 "\\Member{#1}{%\n"
2821 "\\Cs{field#1Title}\\vskip 6mm\\relax\\Cs{field#1DetailedDoc}\n"
2822 "\\Cs{field#1Return}\\Cs{field#1PDBlocks}\\Cs{field#1See}\\vskip 5mm\\relax}}\n"
2823 "\n"
2824 "\\def\\FileDetailed{\\fieldFileDetailedDoc\\par}\n"
2825 "\\def\\ClassDetailed{\\fieldClassDetailedDoc\\par}\n"
2826 "\n"
2827 "\\def\\FileSubzones{\\fieldFileTypedefs\\fieldFileVariables\\fieldFileFunctions}\n"
2828 "\n"
2829 "\\def\\ClassSubzones{%\n"
2830 "\\fieldClassPublicTypedefs\\fieldClassPublicMembers\\fieldClassPublicMethods\n"
2831 "\\fieldClassProtectedTypedefs\\fieldClassProtectedMembers\\fieldClassProtectedMethods\n"
2832 "\\fieldClassPrivateTypedefs\\fieldClassPrivateMembers\\fieldClassPrivateMethods}\n"
2833 "\n"
2834 "\\Member{Page}{\\subsection{\\fieldPageName}\\fieldPageDetailedDoc}\n"
2835 "\n"
2836 "\\TypedefMemberList{FileTypedef}{Typedefs}\n"
2837 "\\VariableMemberList{FileVariable}{Variables}\n"
2838 "\\FunctionMemberList{FileFunction}{Functions}\n"
2839 "\\Zone{File}{\\FileSubzones}{\\subsection{\\fieldFileName}\\fieldFileDetailed\\FileSubzones}\n"
2840 "\n"
2841 "\\TypedefMemberList{ClassPublicTypedef}{Public Typedefs}\n"
2842 "\\TypedefMemberList{ClassProtectedTypedef}{Protected Typedefs}\n"
2843 "\\TypedefMemberList{ClassPrivateTypedef}{Private Typedefs}\n"
2844 "\\VariableMemberList{ClassPublicMember}{Public Members}\n"
2845 "\\VariableMemberList{ClassProtectedMember}{Protected Members}\n"
2846 "\\VariableMemberList{ClassPrivateMember}{Private Members}\n"
2847 "\\FunctionMemberList{ClassPublicMethod}{Public Methods}\n"
2848 "\\FunctionMemberList{ClassProtectedMethod}{Protected Methods}\n"
2849 "\\FunctionMemberList{ClassPrivateMethod}{Private Methods}\n"
2850 "\\Zone{Class}{\\ClassSubzones}{\\subsection{\\fieldClassName}\\fieldClassDetailed\\ClassSubzones}\n"
2851 "\n"
2852 "\\Zone{AllPages}{\\fieldPages}{\\section{Pages}\\fieldPages}\n"
2853 "\\Zone{AllFiles}{\\fieldFiles}{\\section{Files}\\fieldFiles}\n"
2854 "\\Zone{AllClasses}{\\fieldClasses}{\\section{Classes}\\fieldClasses}\n"
2855 "\n"
2856 "\\newlength{\\oldparskip}\n"
2857 "\\newlength{\\oldparindent}\n"
2858 "\\newlength{\\oldfboxrule}\n"
2859 "\n"
2860 "\\ZoneDepth0\\relax\n"
2861 "\\Letcs{Mode0}1\\relax\n"
2862 "\n"
2863 "\\def\\EmitDoxyDocs{%\n"
2864 "\\setlength{\\oldparskip}{\\parskip}\n"
2865 "\\setlength{\\oldparindent}{\\parindent}\n"
2866 "\\setlength{\\oldfboxrule}{\\fboxrule}\n"
2867 "\\setlength{\\parskip}{0cm}\n"
2868 "\\setlength{\\parindent}{0cm}\n"
2869 "\\setlength{\\fboxrule}{1pt}\n"
2870 "\\AllPages\\AllFiles\\AllClasses\n"
2871 "\\setlength{\\parskip}{\\oldparskip}\n"
2872 "\\setlength{\\parindent}{\\oldparindent}\n"
2873 "\\setlength{\\fboxrule}{\\oldfboxrule}}\n";
2874
2875 return true;
2876}
bool createOutputFile(std::ofstream &f, const QCString &s)

References createOutputFile(), pathDoxyFormatTex, and pathDoxyStructureTex.

Referenced by generate().

◆ generateDoxyLatexPL()

bool PerlModGenerator::generateDoxyLatexPL ( )

Definition at line 2594 of file perlmodgen.cpp.

2595{
2596 std::ofstream doxyLatexPLStream;
2597 if (!createOutputFile(doxyLatexPLStream, pathDoxyLatexPL))
2598 return false;
2599
2600 doxyLatexPLStream <<
2601 "use DoxyStructure;\n"
2602 "use DoxyDocs;\n"
2603 "\n"
2604 "sub latex_quote($) {\n"
2605 "\tmy $text = $_[0];\n"
2606 "\t$text =~ s/\\\\/\\\\textbackslash /g;\n"
2607 "\t$text =~ s/\\|/\\\\textbar /g;\n"
2608 "\t$text =~ s/</\\\\textless /g;\n"
2609 "\t$text =~ s/>/\\\\textgreater /g;\n"
2610 "\t$text =~ s/~/\\\\textasciitilde /g;\n"
2611 "\t$text =~ s/\\^/\\\\textasciicircum /g;\n"
2612 "\t$text =~ s/[\\$&%#_{}]/\\\\$&/g;\n"
2613 "\tprint $text;\n"
2614 "}\n"
2615 "\n"
2616 "sub generate_doc($) {\n"
2617 "\tmy $doc = $_[0];\n"
2618 "\tfor my $item (@$doc) {\n"
2619 "\t\tmy $type = $$item{type};\n"
2620 "\t\tif ($type eq \"text\") {\n"
2621 "\t\t\tlatex_quote($$item{content});\n"
2622 "\t\t} elsif ($type eq \"parbreak\") {\n"
2623 "\t\t\tprint \"\\n\\n\";\n"
2624 "\t\t} elsif ($type eq \"style\") {\n"
2625 "\t\t\tmy $style = $$item{style};\n"
2626 "\t\t\tif ($$item{enable} eq \"yes\") {\n"
2627 "\t\t\t\tif ($style eq \"bold\") { print '\\bfseries'; }\n"
2628 "\t\t\t\tif ($style eq \"italic\") { print '\\itshape'; }\n"
2629 "\t\t\t\tif ($style eq \"code\") { print '\\ttfamily'; }\n"
2630 "\t\t\t} else {\n"
2631 "\t\t\t\tif ($style eq \"bold\") { print '\\mdseries'; }\n"
2632 "\t\t\t\tif ($style eq \"italic\") { print '\\upshape'; }\n"
2633 "\t\t\t\tif ($style eq \"code\") { print '\\rmfamily'; }\n"
2634 "\t\t\t}\n"
2635 "\t\t\tprint '{}';\n"
2636 "\t\t} elsif ($type eq \"symbol\") {\n"
2637 "\t\t\tmy $symbol = $$item{symbol};\n"
2638 "\t\t\tif ($symbol eq \"copyright\") { print '\\copyright'; }\n"
2639 "\t\t\telsif ($symbol eq \"szlig\") { print '\\ss'; }\n"
2640 "\t\t\tprint '{}';\n"
2641 "\t\t} elsif ($type eq \"accent\") {\n"
2642 "\t\t\tmy ($accent) = $$item{accent};\n"
2643 "\t\t\tif ($accent eq \"umlaut\") { print '\\\"'; }\n"
2644 "\t\t\telsif ($accent eq \"acute\") { print '\\\\\\''; }\n"
2645 "\t\t\telsif ($accent eq \"grave\") { print '\\`'; }\n"
2646 "\t\t\telsif ($accent eq \"circ\") { print '\\^'; }\n"
2647 "\t\t\telsif ($accent eq \"tilde\") { print '\\~'; }\n"
2648 "\t\t\telsif ($accent eq \"cedilla\") { print '\\c'; }\n"
2649 "\t\t\telsif ($accent eq \"ring\") { print '\\r'; }\n"
2650 "\t\t\tprint \"{\" . $$item{letter} . \"}\"; \n"
2651 "\t\t} elsif ($type eq \"list\") {\n"
2652 "\t\t\tmy $env = ($$item{style} eq \"ordered\") ? \"enumerate\" : \"itemize\";\n"
2653 "\t\t\tprint \"\\n\\\\begin{\" . $env .\"}\";\n"
2654 "\t\t \tfor my $subitem (@{$$item{content}}) {\n"
2655 "\t\t\t\tprint \"\\n\\\\item \";\n"
2656 "\t\t\t\tgenerate_doc($subitem);\n"
2657 "\t\t \t}\n"
2658 "\t\t\tprint \"\\n\\\\end{\" . $env .\"}\";\n"
2659 "\t\t} elsif ($type eq \"url\") {\n"
2660 "\t\t\tlatex_quote($$item{content});\n"
2661 "\t\t}\n"
2662 "\t}\n"
2663 "}\n"
2664 "\n"
2665 "sub generate($$) {\n"
2666 "\tmy ($item, $node) = @_;\n"
2667 "\tmy ($type, $name) = @$node[0, 1];\n"
2668 "\tif ($type eq \"string\") {\n"
2669 "\t\tprint \"\\\\\" . $name . \"{\";\n"
2670 "\t\tlatex_quote($item);\n"
2671 "\t\tprint \"}\";\n"
2672 "\t} elsif ($type eq \"doc\") {\n"
2673 "\t\tif (@$item) {\n"
2674 "\t\t\tprint \"\\\\\" . $name . \"{\";\n"
2675 "\t\t\tgenerate_doc($item);\n"
2676 "\t\t\tprint \"}%\\n\";\n"
2677 "\t\t} else {\n"
2678 "#\t\t\tprint \"\\\\\" . $name . \"Empty%\\n\";\n"
2679 "\t\t}\n"
2680 "\t} elsif ($type eq \"hash\") {\n"
2681 "\t\tmy ($key, $value);\n"
2682 "\t\twhile (($key, $subnode) = each %{$$node[2]}) {\n"
2683 "\t\t\tmy $subname = $$subnode[1];\n"
2684 "\t\t\tprint \"\\\\Defcs{field\" . $subname . \"}{\";\n"
2685 "\t\t\tif ($$item{$key}) {\n"
2686 "\t\t\t\tgenerate($$item{$key}, $subnode);\n"
2687 "\t\t\t} else {\n"
2688 "#\t\t\t\t\tprint \"\\\\\" . $subname . \"Empty%\\n\";\n"
2689 "\t\t\t}\n"
2690 "\t\t\tprint \"}%\\n\";\n"
2691 "\t\t}\n"
2692 "\t\tprint \"\\\\\" . $name . \"%\\n\";\n"
2693 "\t} elsif ($type eq \"list\") {\n"
2694 "\t\tmy $index = 0;\n"
2695 "\t\tif (@$item) {\n"
2696 "\t\t\tprint \"\\\\\" . $name . \"{%\\n\";\n"
2697 "\t\t\tfor my $subitem (@$item) {\n"
2698 "\t\t\t\tif ($index) {\n"
2699 "\t\t\t\t\tprint \"\\\\\" . $name . \"Sep%\\n\";\n"
2700 "\t\t\t\t}\n"
2701 "\t\t\t\tgenerate($subitem, $$node[2]);\n"
2702 "\t\t\t\t$index++;\n"
2703 "\t\t\t}\n"
2704 "\t\t\tprint \"}%\\n\";\n"
2705 "\t\t} else {\n"
2706 "#\t\t\tprint \"\\\\\" . $name . \"Empty%\\n\";\n"
2707 "\t\t}\n"
2708 "\t}\n"
2709 "}\n"
2710 "\n"
2711 "generate($doxydocs, $doxystructure);\n";
2712
2713 return true;
2714}

References createOutputFile(), and pathDoxyLatexPL.

Referenced by generate().

◆ generateDoxyLatexStructurePL()

bool PerlModGenerator::generateDoxyLatexStructurePL ( )

Definition at line 2561 of file perlmodgen.cpp.

2562{
2563 std::ofstream doxyLatexStructurePLStream;
2564 if (!createOutputFile(doxyLatexStructurePLStream, pathDoxyLatexStructurePL))
2565 return false;
2566
2567 doxyLatexStructurePLStream <<
2568 "use DoxyStructure;\n"
2569 "\n"
2570 "sub process($) {\n"
2571 "\tmy $node = $_[0];\n"
2572 "\tmy ($type, $name) = @$node[0, 1];\n"
2573 "\tmy $command;\n"
2574 "\tif ($type eq \"string\") { $command = \"String\" }\n"
2575 "\telsif ($type eq \"doc\") { $command = \"Doc\" }\n"
2576 "\telsif ($type eq \"hash\") {\n"
2577 "\t\t$command = \"Hash\";\n"
2578 "\t\tfor my $subnode (values %{$$node[2]}) {\n"
2579 "\t\t\tprocess($subnode);\n"
2580 "\t\t}\n"
2581 "\t}\n"
2582 "\telsif ($type eq \"list\") {\n"
2583 "\t\t$command = \"List\";\n"
2584 "\t\tprocess($$node[2]);\n"
2585 "\t}\n"
2586 "\tprint \"\\\\\" . $command . \"Node{\" . $name . \"}%\\n\";\n"
2587 "}\n"
2588 "\n"
2589 "process($doxystructure);\n";
2590
2591 return true;
2592}

References createOutputFile(), and pathDoxyLatexStructurePL.

Referenced by generate().

◆ generateDoxyLatexTex()

bool PerlModGenerator::generateDoxyLatexTex ( )

Definition at line 2878 of file perlmodgen.cpp.

2879{
2880 std::ofstream doxyLatexTexStream;
2881 if (!createOutputFile(doxyLatexTexStream, pathDoxyLatexTex))
2882 return false;
2883
2884 doxyLatexTexStream <<
2885 "\\documentclass[a4paper,12pt]{article}\n"
2886 "\\usepackage[latin1]{inputenc}\n"
2887 "\\usepackage[none]{hyphenat}\n"
2888 "\\usepackage[T1]{fontenc}\n"
2889 "\\usepackage{hyperref}\n"
2890 "\\usepackage{times}\n"
2891 "\n"
2892 "\\input{doxyformat}\n"
2893 "\n"
2894 "\\begin{document}\n"
2895 "\\input{" << pathDoxyDocsTex << "}\n"
2896 "\\sloppy\n"
2897 "\\EmitDoxyDocs\n"
2898 "\\end{document}\n";
2899
2900 return true;
2901}

References createOutputFile(), pathDoxyDocsTex, and pathDoxyLatexTex.

Referenced by generate().

◆ generateDoxyRules()

bool PerlModGenerator::generateDoxyRules ( )

Definition at line 2439 of file perlmodgen.cpp.

2440{
2441 std::ofstream doxyRulesStream;
2442 if (!createOutputFile(doxyRulesStream, pathDoxyRules))
2443 return false;
2444
2445 bool perlmodLatex = Config_getBool(PERLMOD_LATEX);
2446 QCString prefix = Config_getString(PERLMOD_MAKEVAR_PREFIX);
2447
2448 doxyRulesStream <<
2449 prefix << "DOXY_EXEC_PATH = " << pathDoxyExec << "\n" <<
2450 prefix << "DOXYFILE = " << pathDoxyfile << "\n" <<
2451 prefix << "DOXYDOCS_PM = " << pathDoxyDocsPM << "\n" <<
2452 prefix << "DOXYSTRUCTURE_PM = " << pathDoxyStructurePM << "\n" <<
2453 prefix << "DOXYRULES = " << pathDoxyRules << "\n";
2454 if (perlmodLatex)
2455 doxyRulesStream <<
2456 prefix << "DOXYLATEX_PL = " << pathDoxyLatexPL << "\n" <<
2457 prefix << "DOXYLATEXSTRUCTURE_PL = " << pathDoxyLatexStructurePL << "\n" <<
2458 prefix << "DOXYSTRUCTURE_TEX = " << pathDoxyStructureTex << "\n" <<
2459 prefix << "DOXYDOCS_TEX = " << pathDoxyDocsTex << "\n" <<
2460 prefix << "DOXYFORMAT_TEX = " << pathDoxyFormatTex << "\n" <<
2461 prefix << "DOXYLATEX_TEX = " << pathDoxyLatexTex << "\n" <<
2462 prefix << "DOXYLATEX_DVI = " << pathDoxyLatexDVI << "\n" <<
2463 prefix << "DOXYLATEX_PDF = " << pathDoxyLatexPDF << "\n";
2464
2465 doxyRulesStream <<
2466 "\n"
2467 ".PHONY: clean-perlmod\n"
2468 "clean-perlmod::\n"
2469 "\trm -f $(" << prefix << "DOXYSTRUCTURE_PM) \\\n"
2470 "\t$(" << prefix << "DOXYDOCS_PM)";
2471 if (perlmodLatex)
2472 doxyRulesStream <<
2473 " \\\n"
2474 "\t$(" << prefix << "DOXYLATEX_PL) \\\n"
2475 "\t$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
2476 "\t$(" << prefix << "DOXYDOCS_TEX) \\\n"
2477 "\t$(" << prefix << "DOXYSTRUCTURE_TEX) \\\n"
2478 "\t$(" << prefix << "DOXYFORMAT_TEX) \\\n"
2479 "\t$(" << prefix << "DOXYLATEX_TEX) \\\n"
2480 "\t$(" << prefix << "DOXYLATEX_PDF) \\\n"
2481 "\t$(" << prefix << "DOXYLATEX_DVI) \\\n"
2482 "\t$(addprefix $(" << prefix << "DOXYLATEX_TEX:tex=),out aux log)";
2483 doxyRulesStream << "\n\n";
2484
2485 doxyRulesStream <<
2486 "$(" << prefix << "DOXYRULES) \\\n"
2487 "$(" << prefix << "DOXYMAKEFILE) \\\n"
2488 "$(" << prefix << "DOXYSTRUCTURE_PM) \\\n"
2489 "$(" << prefix << "DOXYDOCS_PM)";
2490 if (perlmodLatex) {
2491 doxyRulesStream <<
2492 " \\\n"
2493 "$(" << prefix << "DOXYLATEX_PL) \\\n"
2494 "$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
2495 "$(" << prefix << "DOXYFORMAT_TEX) \\\n"
2496 "$(" << prefix << "DOXYLATEX_TEX)";
2497 }
2498 doxyRulesStream <<
2499 ": \\\n"
2500 "\t$(" << prefix << "DOXYFILE)\n"
2501 "\tcd $(" << prefix << "DOXY_EXEC_PATH) ; doxygen \"$<\"\n";
2502
2503 if (perlmodLatex) {
2504 doxyRulesStream <<
2505 "\n"
2506 "$(" << prefix << "DOXYDOCS_TEX): \\\n"
2507 "$(" << prefix << "DOXYLATEX_PL) \\\n"
2508 "$(" << prefix << "DOXYDOCS_PM)\n"
2509 "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
2510 "\n"
2511 "$(" << prefix << "DOXYSTRUCTURE_TEX): \\\n"
2512 "$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
2513 "$(" << prefix << "DOXYSTRUCTURE_PM)\n"
2514 "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
2515 "\n"
2516 "$(" << prefix << "DOXYLATEX_PDF) \\\n"
2517 "$(" << prefix << "DOXYLATEX_DVI): \\\n"
2518 "$(" << prefix << "DOXYLATEX_TEX) \\\n"
2519 "$(" << prefix << "DOXYFORMAT_TEX) \\\n"
2520 "$(" << prefix << "DOXYSTRUCTURE_TEX) \\\n"
2521 "$(" << prefix << "DOXYDOCS_TEX)\n"
2522 "\n"
2523 "$(" << prefix << "DOXYLATEX_PDF): \\\n"
2524 "$(" << prefix << "DOXYLATEX_TEX)\n"
2525 "\tpdflatex -interaction=nonstopmode \"$<\"\n"
2526 "\n"
2527 "$(" << prefix << "DOXYLATEX_DVI): \\\n"
2528 "$(" << prefix << "DOXYLATEX_TEX)\n"
2529 "\tlatex -interaction=nonstopmode \"$<\"\n";
2530 }
2531
2532 return true;
2533}
constexpr auto prefix
Definition anchor.cpp:44
static QCString pathDoxyExec
static QCString pathDoxyfile

References Config_getBool, Config_getString, createOutputFile(), pathDoxyDocsPM, pathDoxyDocsTex, pathDoxyExec, pathDoxyfile, pathDoxyFormatTex, pathDoxyLatexDVI, pathDoxyLatexPDF, pathDoxyLatexPL, pathDoxyLatexStructurePL, pathDoxyLatexTex, pathDoxyRules, pathDoxyStructurePM, pathDoxyStructureTex, and prefix.

Referenced by generate().

◆ generateDoxyStructurePM()

bool PerlModGenerator::generateDoxyStructurePM ( )

Definition at line 2256 of file perlmodgen.cpp.

2257{
2258 std::ofstream doxyModelPMStream;
2259 if (!createOutputFile(doxyModelPMStream, pathDoxyStructurePM))
2260 return false;
2261
2262 doxyModelPMStream <<
2263 "sub memberlist($) {\n"
2264 " my $prefix = $_[0];\n"
2265 " return\n"
2266 "\t[ \"hash\", $prefix . \"s\",\n"
2267 "\t {\n"
2268 "\t members =>\n"
2269 "\t [ \"list\", $prefix . \"List\",\n"
2270 "\t\t[ \"hash\", $prefix,\n"
2271 "\t\t {\n"
2272 "\t\t kind => [ \"string\", $prefix . \"Kind\" ],\n"
2273 "\t\t name => [ \"string\", $prefix . \"Name\" ],\n"
2274 "\t\t static => [ \"string\", $prefix . \"Static\" ],\n"
2275 "\t\t virtualness => [ \"string\", $prefix . \"Virtualness\" ],\n"
2276 "\t\t protection => [ \"string\", $prefix . \"Protection\" ],\n"
2277 "\t\t type => [ \"string\", $prefix . \"Type\" ],\n"
2278 "\t\t parameters =>\n"
2279 "\t\t [ \"list\", $prefix . \"Params\",\n"
2280 "\t\t\t[ \"hash\", $prefix . \"Param\",\n"
2281 "\t\t\t {\n"
2282 "\t\t\t declaration_name => [ \"string\", $prefix . \"ParamName\" ],\n"
2283 "\t\t\t type => [ \"string\", $prefix . \"ParamType\" ],\n"
2284 "\t\t\t },\n"
2285 "\t\t\t],\n"
2286 "\t\t ],\n"
2287 "\t\t detailed =>\n"
2288 "\t\t [ \"hash\", $prefix . \"Detailed\",\n"
2289 "\t\t\t{\n"
2290 "\t\t\t doc => [ \"doc\", $prefix . \"DetailedDoc\" ],\n"
2291 "\t\t\t return => [ \"doc\", $prefix . \"Return\" ],\n"
2292 "\t\t\t see => [ \"doc\", $prefix . \"See\" ],\n"
2293 "\t\t\t params =>\n"
2294 "\t\t\t [ \"list\", $prefix . \"PDBlocks\",\n"
2295 "\t\t\t [ \"hash\", $prefix . \"PDBlock\",\n"
2296 "\t\t\t\t{\n"
2297 "\t\t\t\t parameters =>\n"
2298 "\t\t\t\t [ \"list\", $prefix . \"PDParams\",\n"
2299 "\t\t\t\t [ \"hash\", $prefix . \"PDParam\",\n"
2300 "\t\t\t\t\t{\n"
2301 "\t\t\t\t\t name => [ \"string\", $prefix . \"PDParamName\" ],\n"
2302 "\t\t\t\t\t},\n"
2303 "\t\t\t\t ],\n"
2304 "\t\t\t\t ],\n"
2305 "\t\t\t\t doc => [ \"doc\", $prefix . \"PDDoc\" ],\n"
2306 "\t\t\t\t},\n"
2307 "\t\t\t ],\n"
2308 "\t\t\t ],\n"
2309 "\t\t\t},\n"
2310 "\t\t ],\n"
2311 "\t\t },\n"
2312 "\t\t],\n"
2313 "\t ],\n"
2314 "\t },\n"
2315 "\t];\n"
2316 "}\n"
2317 "\n"
2318 "$doxystructure =\n"
2319 " [ \"hash\", \"Root\",\n"
2320 " {\n"
2321 "\tfiles =>\n"
2322 "\t [ \"list\", \"Files\",\n"
2323 "\t [ \"hash\", \"File\",\n"
2324 "\t {\n"
2325 "\t\tname => [ \"string\", \"FileName\" ],\n"
2326 "\t\ttypedefs => memberlist(\"FileTypedef\"),\n"
2327 "\t\tvariables => memberlist(\"FileVariable\"),\n"
2328 "\t\tfunctions => memberlist(\"FileFunction\"),\n"
2329 "\t\tdetailed =>\n"
2330 "\t\t [ \"hash\", \"FileDetailed\",\n"
2331 "\t\t {\n"
2332 "\t\t doc => [ \"doc\", \"FileDetailedDoc\" ],\n"
2333 "\t\t },\n"
2334 "\t\t ],\n"
2335 "\t },\n"
2336 "\t ],\n"
2337 "\t ],\n"
2338 "\tpages =>\n"
2339 "\t [ \"list\", \"Pages\",\n"
2340 "\t [ \"hash\", \"Page\",\n"
2341 "\t {\n"
2342 "\t\tname => [ \"string\", \"PageName\" ],\n"
2343 "\t\tdetailed =>\n"
2344 "\t\t [ \"hash\", \"PageDetailed\",\n"
2345 "\t\t {\n"
2346 "\t\t doc => [ \"doc\", \"PageDetailedDoc\" ],\n"
2347 "\t\t },\n"
2348 "\t\t ],\n"
2349 "\t },\n"
2350 "\t ],\n"
2351 "\t ],\n"
2352 "\tclasses =>\n"
2353 "\t [ \"list\", \"Classes\",\n"
2354 "\t [ \"hash\", \"Class\",\n"
2355 "\t {\n"
2356 "\t\tname => [ \"string\", \"ClassName\" ],\n"
2357 "\t\tpublic_typedefs => memberlist(\"ClassPublicTypedef\"),\n"
2358 "\t\tpublic_methods => memberlist(\"ClassPublicMethod\"),\n"
2359 "\t\tpublic_members => memberlist(\"ClassPublicMember\"),\n"
2360 "\t\tprotected_typedefs => memberlist(\"ClassProtectedTypedef\"),\n"
2361 "\t\tprotected_methods => memberlist(\"ClassProtectedMethod\"),\n"
2362 "\t\tprotected_members => memberlist(\"ClassProtectedMember\"),\n"
2363 "\t\tprivate_typedefs => memberlist(\"ClassPrivateTypedef\"),\n"
2364 "\t\tprivate_methods => memberlist(\"ClassPrivateMethod\"),\n"
2365 "\t\tprivate_members => memberlist(\"ClassPrivateMember\"),\n"
2366 "\t\tdetailed =>\n"
2367 "\t\t [ \"hash\", \"ClassDetailed\",\n"
2368 "\t\t {\n"
2369 "\t\t doc => [ \"doc\", \"ClassDetailedDoc\" ],\n"
2370 "\t\t },\n"
2371 "\t\t ],\n"
2372 "\t },\n"
2373 "\t ],\n"
2374 "\t ],\n"
2375 "\tgroups =>\n"
2376 "\t [ \"list\", \"Groups\",\n"
2377 "\t [ \"hash\", \"Group\",\n"
2378 "\t {\n"
2379 "\t\tname => [ \"string\", \"GroupName\" ],\n"
2380 "\t\ttitle => [ \"string\", \"GroupTitle\" ],\n"
2381 "\t\tfiles =>\n"
2382 "\t\t [ \"list\", \"Files\",\n"
2383 "\t\t [ \"hash\", \"File\",\n"
2384 "\t\t {\n"
2385 "\t\t name => [ \"string\", \"Filename\" ]\n"
2386 "\t\t }\n"
2387 "\t\t ],\n"
2388 "\t\t ],\n"
2389 "\t\tclasses =>\n"
2390 "\t\t [ \"list\", \"Classes\",\n"
2391 "\t\t [ \"hash\", \"Class\",\n"
2392 "\t\t {\n"
2393 "\t\t name => [ \"string\", \"Classname\" ]\n"
2394 "\t\t }\n"
2395 "\t\t ],\n"
2396 "\t\t ],\n"
2397 "\t\tnamespaces =>\n"
2398 "\t\t [ \"list\", \"Namespaces\",\n"
2399 "\t\t [ \"hash\", \"Namespace\",\n"
2400 "\t\t {\n"
2401 "\t\t name => [ \"string\", \"NamespaceName\" ]\n"
2402 "\t\t }\n"
2403 "\t\t ],\n"
2404 "\t\t ],\n"
2405 "\t\tpages =>\n"
2406 "\t\t [ \"list\", \"Pages\",\n"
2407 "\t\t [ \"hash\", \"Page\","
2408 "\t\t {\n"
2409 "\t\t title => [ \"string\", \"PageName\" ]\n"
2410 "\t\t }\n"
2411 "\t\t ],\n"
2412 "\t\t ],\n"
2413 "\t\tgroups =>\n"
2414 "\t\t [ \"list\", \"Groups\",\n"
2415 "\t\t [ \"hash\", \"Group\",\n"
2416 "\t\t {\n"
2417 "\t\t title => [ \"string\", \"GroupName\" ]\n"
2418 "\t\t }\n"
2419 "\t\t ],\n"
2420 "\t\t ],\n"
2421 "\t\tfunctions => memberlist(\"GroupFunction\"),\n"
2422 "\t\tdetailed =>\n"
2423 "\t\t [ \"hash\", \"GroupDetailed\",\n"
2424 "\t\t {\n"
2425 "\t\t doc => [ \"doc\", \"GroupDetailedDoc\" ],\n"
2426 "\t\t },\n"
2427 "\t\t ],\n"
2428 "\t }\n"
2429 "\t ],\n"
2430 "\t ],\n"
2431 " },\n"
2432 " ];\n"
2433 "\n"
2434 "1;\n";
2435
2436 return true;
2437}

References createOutputFile(), and pathDoxyStructurePM.

Referenced by generate().

◆ generateMakefile()

bool PerlModGenerator::generateMakefile ( )

Definition at line 2535 of file perlmodgen.cpp.

2536{
2537 std::ofstream makefileStream;
2538 if (!createOutputFile(makefileStream, pathMakefile))
2539 return false;
2540
2541 bool perlmodLatex = Config_getBool(PERLMOD_LATEX);
2542 QCString prefix = Config_getString(PERLMOD_MAKEVAR_PREFIX);
2543
2544 makefileStream <<
2545 ".PHONY: default clean" << (perlmodLatex ? " pdf" : "") << "\n"
2546 "default: " << (perlmodLatex ? "pdf" : "clean") << "\n"
2547 "\n"
2548 "include " << pathDoxyRules << "\n"
2549 "\n"
2550 "clean: clean-perlmod\n";
2551
2552 if (perlmodLatex) {
2553 makefileStream <<
2554 "pdf: $(" << prefix << "DOXYLATEX_PDF)\n"
2555 "dvi: $(" << prefix << "DOXYLATEX_DVI)\n";
2556 }
2557
2558 return true;
2559}

References Config_getBool, Config_getString, createOutputFile(), pathDoxyRules, pathMakefile, and prefix.

Referenced by generate().

◆ generatePerlModForClass()

void PerlModGenerator::generatePerlModForClass ( const ClassDef * cd)

Definition at line 1731 of file perlmodgen.cpp.

1732{
1733 // + brief description
1734 // + detailed description
1735 // + template argument list(s)
1736 // - include file
1737 // + member groups
1738 // + inheritance diagram
1739 // + list of direct super classes
1740 // + list of direct sub classes
1741 // + list of inner classes
1742 // + collaboration diagram
1743 // + list of all members
1744 // + user defined member sections
1745 // + standard member sections
1746 // + detailed member documentation
1747 // - examples using the class
1748
1749 if (cd->isReference()) return; // skip external references.
1750 if (cd->isAnonymous()) return; // skip anonymous compounds.
1751 if (cd->isImplicitTemplateInstance()) return; // skip generated template instances.
1752
1753 m_output.openHash()
1754 .addFieldQuotedString("name", cd->name());
1755 /* DGA: fix # #7547 Perlmod does not generate "kind" information to discriminate struct/union */
1756 m_output.addFieldQuotedString("kind", cd->compoundTypeString());
1757
1758 if (!cd->baseClasses().empty())
1759 {
1760 m_output.openList("base");
1761 for (const auto &bcd : cd->baseClasses())
1762 {
1763 m_output.openHash()
1764 .addFieldQuotedString("name", bcd.classDef->displayName())
1765 .addFieldQuotedString("virtualness", getVirtualnessName(bcd.virt))
1766 .addFieldQuotedString("protection", getProtectionName(bcd.prot))
1767 .closeHash();
1768 }
1769 m_output.closeList();
1770 }
1771
1772 if (!cd->subClasses().empty())
1773 {
1774 m_output.openList("derived");
1775 for (const auto &bcd : cd->subClasses())
1776 {
1777 m_output.openHash()
1778 .addFieldQuotedString("name", bcd.classDef->displayName())
1779 .addFieldQuotedString("virtualness", getVirtualnessName(bcd.virt))
1780 .addFieldQuotedString("protection", getProtectionName(bcd.prot))
1781 .closeHash();
1782 }
1783 m_output.closeList();
1784 }
1785
1786 {
1787 m_output.openList("inner");
1788 for (const auto &icd : cd->getClasses())
1789 m_output.openHash()
1790 .addFieldQuotedString("name", icd->name())
1791 .closeHash();
1792 m_output.closeList();
1793 }
1794
1796
1800
1801 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubTypes()),"public_typedefs");
1802 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubMethods()),"public_methods");
1803 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubAttribs()),"public_members");
1804 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubSlots()),"public_slots");
1805 generatePerlModSection(cd,cd->getMemberList(MemberListType::Signals()),"signals");
1806 generatePerlModSection(cd,cd->getMemberList(MemberListType::DcopMethods()),"dcop_methods");
1807 generatePerlModSection(cd,cd->getMemberList(MemberListType::Properties()),"properties");
1808 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubStaticMethods()),"public_static_methods");
1809 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubStaticAttribs()),"public_static_members");
1810 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProTypes()),"protected_typedefs");
1811 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProMethods()),"protected_methods");
1812 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProAttribs()),"protected_members");
1813 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProSlots()),"protected_slots");
1814 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProStaticMethods()),"protected_static_methods");
1815 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProStaticAttribs()),"protected_static_members");
1816 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriTypes()),"private_typedefs");
1817 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriMethods()),"private_methods");
1818 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriAttribs()),"private_members");
1819 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriSlots()),"private_slots");
1820 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriStaticMethods()),"private_static_methods");
1821 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriStaticAttribs()),"private_static_members");
1822 generatePerlModSection(cd,cd->getMemberList(MemberListType::Friends()),"friend_methods");
1823 generatePerlModSection(cd,cd->getMemberList(MemberListType::Related()),"related_methods");
1824
1825 addPerlModDocBlock(m_output,"brief",cd->briefFile(),cd->briefLine(),cd,nullptr,cd->briefDescription());
1826 addPerlModDocBlock(m_output,"detailed",cd->docFile(),cd->docLine(),cd,nullptr,cd->documentation());
1827
1828#if 0
1829 DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance);
1830 if (!inheritanceGraph.isTrivial())
1831 {
1832 t << " <inheritancegraph>" << endl;
1833 inheritanceGraph.writePerlMod(t);
1834 t << " </inheritancegraph>" << endl;
1835 }
1836 DotClassGraph collaborationGraph(cd,DotClassGraph::Implementation);
1837 if (!collaborationGraph.isTrivial())
1838 {
1839 t << " <collaborationgraph>" << endl;
1840 collaborationGraph.writePerlMod(t);
1841 t << " </collaborationgraph>" << endl;
1842 }
1843 t << " <location file=\""
1844 << cd->getDefFileName() << "\" line=\""
1845 << cd->getDefLine() << "\"";
1846 if (cd->getStartBodyLine()!=-1)
1847 {
1848 t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
1849 << cd->getEndBodyLine() << "\"";
1850 }
1851 t << "/>" << endl;
1852#endif
1853
1854 m_output.closeHash();
1855}
virtual QCString compoundTypeString() const =0
Returns the type of compound as a string.
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual MemberList * getMemberList(MemberListType lt) const =0
Returns the members in the list identified by lt.
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 QCString docFile() const =0
virtual int getEndBodyLine() const =0
virtual int docLine() const =0
virtual QCString getDefFileName() const =0
virtual int getDefLine() const =0
virtual int briefLine() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual bool isAnonymous() const =0
virtual QCString documentation() const =0
virtual QCString briefFile() const =0
virtual int getStartBodyLine() const =0
virtual bool isReference() const =0
void generatePerlModSection(const Definition *d, MemberList *ml, const QCString &name, const QCString &header=QCString())
void addIncludeInfo(const IncludeInfo *ii)
void addListOfAllMembers(const ClassDef *cd)
void generatePerlUserDefinedSection(const Definition *d, const MemberGroupList &mgl)
static void addTemplateList(const ClassDef *cd, PerlModOutput &output)
static void addPerlModDocBlock(PerlModOutput &output, const QCString &name, const QCString &fileName, int lineNr, const Definition *scope, const MemberDef *md, const QCString &text)

References addIncludeInfo(), addListOfAllMembers(), addPerlModDocBlock(), addTemplateList(), ClassDef::baseClasses(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), ClassDef::compoundTypeString(), Definition::docFile(), Definition::docLine(), Definition::documentation(), generatePerlModSection(), generatePerlUserDefinedSection(), ClassDef::getClasses(), Definition::getDefFileName(), Definition::getDefLine(), Definition::getEndBodyLine(), ClassDef::getMemberGroups(), ClassDef::getMemberList(), getProtectionName(), Definition::getStartBodyLine(), getVirtualnessName(), ClassDef::includeInfo(), Definition::isAnonymous(), ClassDef::isImplicitTemplateInstance(), Definition::isReference(), DotClassGraph::isTrivial(), m_output, Definition::name(), and ClassDef::subClasses().

Referenced by generatePerlModOutput().

◆ generatePerlModForConcept()

void PerlModGenerator::generatePerlModForConcept ( const ConceptDef * cd)

Definition at line 1857 of file perlmodgen.cpp.

1858{
1859 if (cd->isReference()) return; // skip external references
1860
1861 m_output.openHash()
1862 .addFieldQuotedString("name", cd->name());
1863
1866 m_output.addFieldQuotedString("initializer", cd->initializer());
1867 addPerlModDocBlock(m_output,"brief",cd->briefFile(),cd->briefLine(),nullptr,nullptr,cd->briefDescription());
1868 addPerlModDocBlock(m_output,"detailed",cd->docFile(),cd->docLine(),nullptr,nullptr,cd->documentation());
1869
1870 m_output.closeHash();
1871}
virtual QCString initializer() const =0
virtual const IncludeInfo * includeInfo() const =0

References addIncludeInfo(), addPerlModDocBlock(), addTemplateList(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Definition::docFile(), Definition::docLine(), Definition::documentation(), ConceptDef::includeInfo(), ConceptDef::initializer(), Definition::isReference(), m_output, and Definition::name().

Referenced by generatePerlModOutput().

◆ generatePerlModForFile()

void PerlModGenerator::generatePerlModForFile ( const FileDef * fd)

Definition at line 1984 of file perlmodgen.cpp.

1985{
1986 // + includes files
1987 // + includedby files
1988 // - include graph
1989 // - included by graph
1990 // - contained class definitions
1991 // - contained namespace definitions
1992 // - member groups
1993 // + normal members
1994 // + brief desc
1995 // + detailed desc
1996 // - source code
1997 // - location
1998 // - number of lines
1999
2000 if (fd->isReference()) return;
2001
2002 m_output.openHash()
2003 .addFieldQuotedString("name", fd->name());
2004
2005 m_output.openList("includes");
2006 for (const auto &inc: fd->includeFileList())
2007 {
2008 m_output.openHash()
2009 .addFieldQuotedString("name", inc.includeName);
2010 if (inc.fileDef && !inc.fileDef->isReference())
2011 {
2012 m_output.addFieldQuotedString("ref", inc.fileDef->getOutputFileBase());
2013 }
2014 m_output.closeHash();
2015 }
2016 m_output.closeList();
2017
2018 m_output.openList("included_by");
2019 for (const auto &inc : fd->includedByFileList())
2020 {
2021 m_output.openHash()
2022 .addFieldQuotedString("name", inc.includeName);
2023 if (inc.fileDef && !inc.fileDef->isReference())
2024 {
2025 m_output.addFieldQuotedString("ref", inc.fileDef->getOutputFileBase());
2026 }
2027 m_output.closeHash();
2028 }
2029 m_output.closeList();
2030
2032
2033 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecDefineMembers()),"defines");
2034 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecProtoMembers()),"prototypes");
2035 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecTypedefMembers()),"typedefs");
2036 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecEnumMembers()),"enums");
2037 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecFuncMembers()),"functions");
2038 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecVarMembers()),"variables");
2039
2040 addPerlModDocBlock(m_output,"brief",fd->briefFile(),fd->briefLine(),nullptr,nullptr,fd->briefDescription());
2041 addPerlModDocBlock(m_output,"detailed",fd->docFile(),fd->docLine(),nullptr,nullptr,fd->documentation());
2042
2043 m_output.closeHash();
2044}
virtual const MemberGroupList & getMemberGroups() const =0
virtual const IncludeInfoList & includeFileList() const =0
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual const IncludeInfoList & includedByFileList() const =0

References addPerlModDocBlock(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Definition::docFile(), Definition::docLine(), Definition::documentation(), generatePerlModSection(), generatePerlUserDefinedSection(), FileDef::getMemberGroups(), FileDef::getMemberList(), FileDef::includedByFileList(), FileDef::includeFileList(), Definition::isReference(), m_output, and Definition::name().

Referenced by generatePerlModOutput().

◆ generatePerlModForGroup()

void PerlModGenerator::generatePerlModForGroup ( const GroupDef * gd)

Definition at line 2046 of file perlmodgen.cpp.

2047{
2048 // + members
2049 // + member groups
2050 // + files
2051 // + classes
2052 // + namespaces
2053 // - packages
2054 // + pages
2055 // + child groups
2056 // - examples
2057 // + brief description
2058 // + detailed description
2059
2060 if (gd->isReference()) return; // skip external references
2061
2062 m_output.openHash()
2063 .addFieldQuotedString("name", gd->name())
2064 .addFieldQuotedString("title", gd->groupTitle());
2065
2066 if (!gd->getFiles().empty())
2067 {
2068 m_output.openList("files");
2069 for (const auto &fd : gd->getFiles())
2070 m_output.openHash()
2071 .addFieldQuotedString("name", fd->name())
2072 .closeHash();
2073 m_output.closeList();
2074 }
2075
2076 if (!gd->getClasses().empty())
2077 {
2078 m_output.openList("classes");
2079 for (const auto &cd : gd->getClasses())
2080 m_output.openHash()
2081 .addFieldQuotedString("name", cd->name())
2082 .closeHash();
2083 m_output.closeList();
2084 }
2085
2086 if (!gd->getConcepts().empty())
2087 {
2088 m_output.openList("concepts");
2089 for (const auto &cd : gd->getConcepts())
2090 m_output.openHash()
2091 .addFieldQuotedString("name", cd->name())
2092 .closeHash();
2093 m_output.closeList();
2094 }
2095
2096 if (!gd->getModules().empty())
2097 {
2098 m_output.openList("modules");
2099 for (const auto &mod : gd->getModules())
2100 m_output.openHash()
2101 .addFieldQuotedString("name", mod->name())
2102 .closeHash();
2103 m_output.closeList();
2104 }
2105
2106 if (!gd->getNamespaces().empty())
2107 {
2108 m_output.openList("namespaces");
2109 for (const auto &nd : gd->getNamespaces())
2110 m_output.openHash()
2111 .addFieldQuotedString("name", nd->name())
2112 .closeHash();
2113 m_output.closeList();
2114 }
2115
2116 if (!gd->getPages().empty())
2117 {
2118 m_output.openList("pages");
2119 for (const auto &pd : gd->getPages())
2120 m_output.openHash()
2121 .addFieldQuotedString("title", pd->title())
2122 .closeHash();
2123 m_output.closeList();
2124 }
2125
2126 if (!gd->getSubGroups().empty())
2127 {
2128 m_output.openList("groups");
2129 for (const auto &sgd : gd->getSubGroups())
2130 m_output.openHash()
2131 .addFieldQuotedString("title", sgd->groupTitle())
2132 .closeHash();
2133 m_output.closeList();
2134 }
2135
2137
2138 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecDefineMembers()),"defines");
2139 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecProtoMembers()),"prototypes");
2140 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecTypedefMembers()),"typedefs");
2141 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecEnumMembers()),"enums");
2142 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecFuncMembers()),"functions");
2143 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecVarMembers()),"variables");
2144
2145 addPerlModDocBlock(m_output,"brief",gd->briefFile(),gd->briefLine(),nullptr,nullptr,gd->briefDescription());
2146 addPerlModDocBlock(m_output,"detailed",gd->docFile(),gd->docLine(),nullptr,nullptr,gd->documentation());
2147
2148 m_output.closeHash();
2149}
virtual const GroupList & getSubGroups() const =0
virtual QCString groupTitle() 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
bool empty() const
Definition linkedmap.h:374

References addPerlModDocBlock(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Definition::docFile(), Definition::docLine(), Definition::documentation(), LinkedRefMap< T, Hash, KeyEqual, Map >::empty(), generatePerlModSection(), generatePerlUserDefinedSection(), GroupDef::getClasses(), GroupDef::getConcepts(), GroupDef::getFiles(), GroupDef::getMemberGroups(), GroupDef::getMemberList(), GroupDef::getModules(), GroupDef::getNamespaces(), GroupDef::getPages(), GroupDef::getSubGroups(), GroupDef::groupTitle(), Definition::isReference(), m_output, and Definition::name().

Referenced by generatePerlModOutput().

◆ generatePerlModForMember()

void PerlModGenerator::generatePerlModForMember ( const MemberDef * md,
const Definition *  )

Definition at line 1486 of file perlmodgen.cpp.

1487{
1488 // + declaration/definition arg lists
1489 // + reimplements
1490 // + reimplementedBy
1491 // + exceptions
1492 // + const/volatile specifiers
1493 // - examples
1494 // - source definition
1495 // - source references
1496 // - source referenced by
1497 // - body code
1498 // - template arguments
1499 // (templateArguments(), definitionTemplateParameterLists())
1500
1501 QCString memType = to_string_lower(md->memberType());
1502 QCString name;
1503 bool isFunc=to_isFunction(md->memberType());
1504
1505 bool isFortran = md->getLanguage()==SrcLangExt::Fortran;
1506 name = md->name();
1507 if (md->isAnonymous()) name = "__unnamed" + name.right(name.length() - 1)+"__";
1508
1509 m_output.openHash()
1510 .addFieldQuotedString("kind", memType)
1511 .addFieldQuotedString("name", name)
1512 .addFieldQuotedString("virtualness", getVirtualnessName(md->virtualness()))
1513 .addFieldQuotedString("protection", getProtectionName(md->protection()))
1514 .addFieldBoolean("static", md->isStatic());
1515
1517 addPerlModDocBlock(m_output,"detailed",md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
1518 if (md->memberType()!=MemberType::Define &&
1519 md->memberType()!=MemberType::Enumeration)
1520 m_output.addFieldQuotedString("type", md->typeString());
1521
1522 const ArgumentList &al = md->argumentList();
1523 if (isFunc) //function
1524 {
1525 m_output.addFieldBoolean("const", al.constSpecifier())
1526 .addFieldBoolean("volatile", al.volatileSpecifier());
1527
1528 m_output.openList("parameters");
1529 const ArgumentList &declAl = md->declArgumentList();
1530 if (!declAl.empty())
1531 {
1532 auto defIt = al.begin();
1533 for (const Argument &a : declAl)
1534 {
1535 const Argument *defArg = nullptr;
1536 if (defIt!=al.end())
1537 {
1538 defArg = &(*defIt);
1539 ++defIt;
1540 }
1541 m_output.openHash();
1542
1543 if (!a.name.isEmpty())
1544 m_output.addFieldQuotedString("declaration_name", a.name);
1545
1546 if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
1547 m_output.addFieldQuotedString("definition_name", defArg->name);
1548
1549 if (isFortran && defArg && !defArg->type.isEmpty())
1550 m_output.addFieldQuotedString("type", defArg->type);
1551 else if (!a.type.isEmpty())
1552 m_output.addFieldQuotedString("type", a.type);
1553
1554 if (!a.array.isEmpty())
1555 m_output.addFieldQuotedString("array", a.array);
1556
1557 if (!a.defval.isEmpty())
1558 m_output.addFieldQuotedString("default_value", a.defval);
1559
1560 if (!a.attrib.isEmpty())
1561 m_output.addFieldQuotedString("attributes", a.attrib);
1562
1563 m_output.closeHash();
1564 }
1565 }
1566 m_output.closeList();
1567 }
1568 else if (md->memberType()==MemberType::Define &&
1569 md->argsString()!=nullptr) // define
1570 {
1571 m_output.openList("parameters");
1572 for (const Argument &a : al)
1573 {
1574 m_output.openHash()
1575 .addFieldQuotedString("name", a.type)
1576 .closeHash();
1577 }
1578 m_output.closeList();
1579 }
1580 else if (md->argsString()!=nullptr)
1581 {
1582 m_output.addFieldQuotedString("arguments", md->argsString());
1583 }
1584
1585 if (!md->initializer().isEmpty())
1586 m_output.addFieldQuotedString("initializer", md->initializer());
1587
1588 if (!md->excpString().isEmpty())
1589 m_output.addFieldQuotedString("exceptions", md->excpString());
1590
1591 if (md->memberType()==MemberType::Enumeration) // enum
1592 {
1593 const MemberVector &enumFields = md->enumFieldList();
1594 m_output.addFieldQuotedString("type", md->enumBaseType());
1595 if (!enumFields.empty())
1596 {
1597 m_output.openList("values");
1598 for (const auto &emd : enumFields)
1599 {
1600 m_output.openHash()
1601 .addFieldQuotedString("name", emd->name());
1602
1603 if (!emd->initializer().isEmpty())
1604 m_output.addFieldQuotedString("initializer", emd->initializer());
1605
1606 addPerlModDocBlock(m_output,"brief",emd->briefFile(),emd->briefLine(),emd->getOuterScope(),emd,emd->briefDescription());
1607
1608 addPerlModDocBlock(m_output,"detailed",emd->docFile(),emd->docLine(),emd->getOuterScope(),emd,emd->documentation());
1609
1610 m_output.closeHash();
1611 }
1612 m_output.closeList();
1613 }
1614 }
1615
1616 if (md->memberType() == MemberType::Variable && !md->bitfieldString().isEmpty())
1617 {
1618 QCString bitfield = md->bitfieldString();
1619 if (bitfield.at(0) == ':') bitfield = bitfield.mid(1);
1620 m_output.addFieldQuotedString("bitfield", bitfield);
1621 }
1622
1623 const MemberDef *rmd = md->reimplements();
1624 if (rmd)
1625 m_output.openHash("reimplements")
1626 .addFieldQuotedString("name", rmd->name())
1627 .closeHash();
1628
1629 const MemberVector &rbml = md->reimplementedBy();
1630 if (!rbml.empty())
1631 {
1632 m_output.openList("reimplemented_by");
1633 for (const auto &rbmd : rbml)
1634 m_output.openHash()
1635 .addFieldQuotedString("name", rbmd->name())
1636 .closeHash();
1637 m_output.closeList();
1638 }
1639
1640 m_output.closeHash();
1641}
iterator end()
Definition arguments.h:94
bool constSpecifier() const
Definition arguments.h:111
bool empty() const
Definition arguments.h:99
iterator begin()
Definition arguments.h:93
bool volatileSpecifier() const
Definition arguments.h:112
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual Definition * getOuterScope() const =0
virtual QCString typeString() const =0
virtual QCString enumBaseType() const =0
virtual QCString excpString() const =0
virtual const MemberVector & enumFieldList() const =0
virtual const ArgumentList & argumentList() const =0
virtual const MemberVector & reimplementedBy() const =0
virtual bool isStatic() const =0
virtual const MemberDef * reimplements() const =0
virtual QCString bitfieldString() const =0
virtual Protection protection() const =0
virtual MemberType memberType() const =0
virtual QCString argsString() const =0
virtual const ArgumentList & declArgumentList() const =0
virtual const QCString & initializer() const =0
bool empty() const noexcept
Definition memberlist.h:60
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:170
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:245
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:597
QCString right(size_t len) const
Definition qcstring.h:238
QCString type
Definition arguments.h:42
QCString name
Definition arguments.h:44
static constexpr bool to_isFunction(MemberType mt) noexcept
Definition types.h:599
static constexpr const char * to_string_lower(Protection prot) noexcept
Definition types.h:50

References addPerlModDocBlock(), MemberDef::argsString(), MemberDef::argumentList(), QCString::at(), ArgumentList::begin(), MemberDef::bitfieldString(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), ArgumentList::constSpecifier(), MemberDef::declArgumentList(), Definition::docFile(), Definition::docLine(), Definition::documentation(), ArgumentList::empty(), MemberVector::empty(), ArgumentList::end(), MemberDef::enumBaseType(), MemberDef::enumFieldList(), MemberDef::excpString(), Definition::getLanguage(), Definition::getOuterScope(), getProtectionName(), getVirtualnessName(), MemberDef::initializer(), Definition::isAnonymous(), QCString::isEmpty(), MemberDef::isStatic(), QCString::length(), m_output, MemberDef::memberType(), QCString::mid(), Argument::name, Definition::name(), MemberDef::protection(), MemberDef::reimplementedBy(), MemberDef::reimplements(), QCString::right(), to_isFunction(), to_string_lower(), Argument::type, MemberDef::typeString(), MemberDef::virtualness(), and ArgumentList::volatileSpecifier().

Referenced by generatePerlModSection(), and generatePerlUserDefinedSection().

◆ generatePerlModForModule()

void PerlModGenerator::generatePerlModForModule ( const ModuleDef * mod)

Definition at line 1873 of file perlmodgen.cpp.

1874{
1875 // + contained class definitions
1876 // + contained concept definitions
1877 // + member groups
1878 // + normal members
1879 // + brief desc
1880 // + detailed desc
1881 // + location (file_id, line, column)
1882 // - exports
1883 // + used files
1884
1885 if (mod->isReference()) return; // skip external references
1886
1887 m_output.openHash()
1888 .addFieldQuotedString("name", mod->name());
1889
1891
1892 if (!mod->getClasses().empty())
1893 {
1894 m_output.openList("classes");
1895 for (const auto &cd : mod->getClasses())
1896 m_output.openHash()
1897 .addFieldQuotedString("name", cd->name())
1898 .closeHash();
1899 m_output.closeList();
1900 }
1901
1902 if (!mod->getConcepts().empty())
1903 {
1904 m_output.openList("concepts");
1905 for (const auto &cd : mod->getConcepts())
1906 m_output.openHash()
1907 .addFieldQuotedString("name", cd->name())
1908 .closeHash();
1909 m_output.closeList();
1910 }
1911
1912 generatePerlModSection(mod,mod->getMemberList(MemberListType::DecTypedefMembers()),"typedefs");
1913 generatePerlModSection(mod,mod->getMemberList(MemberListType::DecEnumMembers()),"enums");
1914 generatePerlModSection(mod,mod->getMemberList(MemberListType::DecFuncMembers()),"functions");
1915 generatePerlModSection(mod,mod->getMemberList(MemberListType::DecVarMembers()),"variables");
1916
1917 addPerlModDocBlock(m_output,"brief",mod->briefFile(),mod->briefLine(),nullptr,nullptr,mod->briefDescription());
1918 addPerlModDocBlock(m_output,"detailed",mod->docFile(),mod->docLine(),nullptr,nullptr,mod->documentation());
1919
1920 if (!mod->getUsedFiles().empty())
1921 {
1922 m_output.openList("files");
1923 for (const auto &fd : mod->getUsedFiles())
1924 m_output.openHash()
1925 .addFieldQuotedString("name", fd->name())
1926 .closeHash();
1927 m_output.closeList();
1928 }
1929
1930 m_output.closeHash();
1931}
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

References addPerlModDocBlock(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Definition::docFile(), Definition::docLine(), Definition::documentation(), LinkedRefMap< T, Hash, KeyEqual, Map >::empty(), generatePerlModSection(), generatePerlUserDefinedSection(), ModuleDef::getClasses(), ModuleDef::getConcepts(), ModuleDef::getMemberGroups(), ModuleDef::getMemberList(), ModuleDef::getUsedFiles(), Definition::isReference(), m_output, and Definition::name().

Referenced by generatePerlModOutput().

◆ generatePerlModForNamespace()

void PerlModGenerator::generatePerlModForNamespace ( const NamespaceDef * nd)

Definition at line 1933 of file perlmodgen.cpp.

1934{
1935 // + contained class definitions
1936 // + contained namespace definitions
1937 // + member groups
1938 // + normal members
1939 // + brief desc
1940 // + detailed desc
1941 // + location
1942 // - files containing (parts of) the namespace definition
1943
1944 if (nd->isReference()) return; // skip external references
1945
1946 m_output.openHash()
1947 .addFieldQuotedString("name", nd->name());
1948
1949 if (!nd->getClasses().empty())
1950 {
1951 m_output.openList("classes");
1952 for (const auto &cd : nd->getClasses())
1953 m_output.openHash()
1954 .addFieldQuotedString("name", cd->name())
1955 .closeHash();
1956 m_output.closeList();
1957 }
1958
1959 if (!nd->getNamespaces().empty())
1960 {
1961 m_output.openList("namespaces");
1962 for (const auto &ind : nd->getNamespaces())
1963 m_output.openHash()
1964 .addFieldQuotedString("name", ind->name())
1965 .closeHash();
1966 m_output.closeList();
1967 }
1968
1970
1971 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecDefineMembers()),"defines");
1972 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecProtoMembers()),"prototypes");
1973 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecTypedefMembers()),"typedefs");
1974 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecEnumMembers()),"enums");
1975 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecFuncMembers()),"functions");
1976 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecVarMembers()),"variables");
1977
1978 addPerlModDocBlock(m_output,"brief",nd->briefFile(),nd->briefLine(),nullptr,nullptr,nd->briefDescription());
1979 addPerlModDocBlock(m_output,"detailed",nd->docFile(),nd->docLine(),nullptr,nullptr,nd->documentation());
1980
1981 m_output.closeHash();
1982}
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual const MemberGroupList & getMemberGroups() const =0

References addPerlModDocBlock(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Definition::docFile(), Definition::docLine(), Definition::documentation(), LinkedRefMap< T, Hash, KeyEqual, Map >::empty(), generatePerlModSection(), generatePerlUserDefinedSection(), NamespaceDef::getClasses(), NamespaceDef::getMemberGroups(), NamespaceDef::getMemberList(), NamespaceDef::getNamespaces(), Definition::isReference(), m_output, and Definition::name().

Referenced by generatePerlModOutput().

◆ generatePerlModForPage()

void PerlModGenerator::generatePerlModForPage ( PageDef * pi)

Definition at line 2151 of file perlmodgen.cpp.

2152{
2153 // + name
2154 // + title
2155 // + documentation
2156
2157 if (pd->isReference()) return;
2158
2159 m_output.openHash()
2160 .addFieldQuotedString("name", pd->name());
2161
2162 const SectionInfo *si = SectionManager::instance().find(pd->name());
2163 if (si)
2164 m_output.addFieldQuotedString("title4", filterTitle(si->title()));
2165
2166 addPerlModDocBlock(m_output,"detailed",pd->docFile(),pd->docLine(),nullptr,nullptr,pd->documentation());
2167 m_output.closeHash();
2168}
const T * find(const std::string &key) const
Definition linkedmap.h:47
QCString title() const
Definition section.h:70
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:179
QCString filterTitle(const QCString &title)
Definition util.cpp:5650

References addPerlModDocBlock(), Definition::docFile(), Definition::docLine(), Definition::documentation(), filterTitle(), LinkedMap< T, Hash, KeyEqual, Map >::find(), SectionManager::instance(), Definition::isReference(), m_output, Definition::name(), and SectionInfo::title().

Referenced by generatePerlModOutput().

◆ generatePerlModOutput()

bool PerlModGenerator::generatePerlModOutput ( )

Definition at line 2170 of file perlmodgen.cpp.

2171{
2172 std::ofstream outputFileStream;
2173 if (!createOutputFile(outputFileStream, pathDoxyDocsPM))
2174 return false;
2175
2176 PerlModOutputStream outputStream(outputFileStream);
2177 m_output.setPerlModOutputStream(&outputStream);
2178 m_output.add("$doxydocs=").openHash();
2179
2180 m_output.openList("classes");
2181 for (const auto &cd : *Doxygen::classLinkedMap)
2182 generatePerlModForClass(cd.get());
2183 m_output.closeList();
2184
2185 m_output.openList("concepts");
2186 for (const auto &cd : *Doxygen::conceptLinkedMap)
2187 generatePerlModForConcept(cd.get());
2188 m_output.closeList();
2189
2190 m_output.openList("modules");
2191 for (const auto &mod : ModuleManager::instance().modules())
2192 generatePerlModForModule(mod.get());
2193 m_output.closeList();
2194
2195 m_output.openList("namespaces");
2196 for (const auto &nd : *Doxygen::namespaceLinkedMap)
2198 m_output.closeList();
2199
2200 m_output.openList("files");
2201 for (const auto &fn : *Doxygen::inputNameLinkedMap)
2202 {
2203 for (const auto &fd : *fn)
2204 {
2205 generatePerlModForFile(fd.get());
2206 }
2207 }
2208 m_output.closeList();
2209
2210 m_output.openList("groups");
2211 for (const auto &gd : *Doxygen::groupLinkedMap)
2212 {
2213 generatePerlModForGroup(gd.get());
2214 }
2215 m_output.closeList();
2216
2217 m_output.openList("pages");
2218 for (const auto &pd : *Doxygen::pageLinkedMap)
2219 {
2220 generatePerlModForPage(pd.get());
2221 }
2223 {
2225 }
2226 m_output.closeList();
2227
2228 m_output.closeHash().add(";\n1;\n");
2229 m_output.reset();
2230 return true;
2231}
static NamespaceLinkedMap * namespaceLinkedMap
Definition doxygen.h:115
static ConceptLinkedMap * conceptLinkedMap
Definition doxygen.h:97
static std::unique_ptr< PageDef > mainPage
Definition doxygen.h:100
static FileNameLinkedMap * inputNameLinkedMap
Definition doxygen.h:104
static ClassLinkedMap * classLinkedMap
Definition doxygen.h:95
static PageLinkedMap * pageLinkedMap
Definition doxygen.h:99
static GroupLinkedMap * groupLinkedMap
Definition doxygen.h:114
static ModuleManager & instance()
void generatePerlModForPage(PageDef *pi)
void generatePerlModForClass(const ClassDef *cd)
void generatePerlModForModule(const ModuleDef *mod)
void generatePerlModForNamespace(const NamespaceDef *nd)
void generatePerlModForGroup(const GroupDef *gd)
void generatePerlModForFile(const FileDef *fd)
void generatePerlModForConcept(const ConceptDef *cd)

References Doxygen::classLinkedMap, Doxygen::conceptLinkedMap, createOutputFile(), generatePerlModForClass(), generatePerlModForConcept(), generatePerlModForFile(), generatePerlModForGroup(), generatePerlModForModule(), generatePerlModForNamespace(), generatePerlModForPage(), Doxygen::groupLinkedMap, Doxygen::inputNameLinkedMap, ModuleManager::instance(), m_output, Doxygen::mainPage, Doxygen::namespaceLinkedMap, Doxygen::pageLinkedMap, and pathDoxyDocsPM.

Referenced by generate().

◆ generatePerlModSection()

void PerlModGenerator::generatePerlModSection ( const Definition * d,
MemberList * ml,
const QCString & name,
const QCString & header = QCString() )

Definition at line 1643 of file perlmodgen.cpp.

1645{
1646 if (ml==nullptr) return; // empty list
1647
1648 m_output.openHash(name);
1649
1650 if (!header.isEmpty())
1651 m_output.addFieldQuotedString("header", header);
1652
1653 m_output.openList("members");
1654 for (const auto &md : *ml)
1655 {
1657 }
1658 m_output.closeList()
1659 .closeHash();
1660}
void generatePerlModForMember(const MemberDef *md, const Definition *)

References generatePerlModForMember(), QCString::isEmpty(), and m_output.

Referenced by generatePerlModForClass(), generatePerlModForFile(), generatePerlModForGroup(), generatePerlModForModule(), and generatePerlModForNamespace().

◆ generatePerlUserDefinedSection()

void PerlModGenerator::generatePerlUserDefinedSection ( const Definition * d,
const MemberGroupList & mgl )

Definition at line 1687 of file perlmodgen.cpp.

1688{
1689 if (!mgl.empty())
1690 {
1691 m_output.openList("user_defined");
1692 for (const auto &mg : mgl)
1693 {
1694 m_output.openHash();
1695 if (!mg->header().isEmpty())
1696 {
1697 m_output.addFieldQuotedString("header", mg->header());
1698 }
1699
1700 if (!mg->members().empty())
1701 {
1702 m_output.openList("members");
1703 for (const auto &md : mg->members())
1704 {
1706 }
1707 m_output.closeList();
1708 }
1709 m_output.closeHash();
1710 }
1711 m_output.closeList();
1712 }
1713}

References generatePerlModForMember(), and m_output.

Referenced by generatePerlModForClass(), generatePerlModForFile(), generatePerlModForGroup(), generatePerlModForModule(), and generatePerlModForNamespace().

Member Data Documentation

◆ m_output

◆ pathDoxyDocsPM

QCString PerlModGenerator::pathDoxyDocsPM

Definition at line 1450 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyRules(), and generatePerlModOutput().

◆ pathDoxyDocsTex

QCString PerlModGenerator::pathDoxyDocsTex

Definition at line 1444 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyLatexTex(), and generateDoxyRules().

◆ pathDoxyFormatTex

QCString PerlModGenerator::pathDoxyFormatTex

Definition at line 1445 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyFormatTex(), and generateDoxyRules().

◆ pathDoxyLatexDVI

QCString PerlModGenerator::pathDoxyLatexDVI

Definition at line 1447 of file perlmodgen.cpp.

Referenced by generate(), and generateDoxyRules().

◆ pathDoxyLatexPDF

QCString PerlModGenerator::pathDoxyLatexPDF

Definition at line 1448 of file perlmodgen.cpp.

Referenced by generate(), and generateDoxyRules().

◆ pathDoxyLatexPL

QCString PerlModGenerator::pathDoxyLatexPL

Definition at line 1451 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyLatexPL(), and generateDoxyRules().

◆ pathDoxyLatexStructurePL

QCString PerlModGenerator::pathDoxyLatexStructurePL

Definition at line 1452 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyLatexStructurePL(), and generateDoxyRules().

◆ pathDoxyLatexTex

QCString PerlModGenerator::pathDoxyLatexTex

Definition at line 1446 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyLatexTex(), and generateDoxyRules().

◆ pathDoxyRules

QCString PerlModGenerator::pathDoxyRules

Definition at line 1453 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyRules(), and generateMakefile().

◆ pathDoxyStructurePM

QCString PerlModGenerator::pathDoxyStructurePM

Definition at line 1443 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyRules(), and generateDoxyStructurePM().

◆ pathDoxyStructureTex

QCString PerlModGenerator::pathDoxyStructureTex

Definition at line 1449 of file perlmodgen.cpp.

Referenced by generate(), generateDoxyFormatTex(), and generateDoxyRules().

◆ pathMakefile

QCString PerlModGenerator::pathMakefile

Definition at line 1454 of file perlmodgen.cpp.

Referenced by generate(), and generateMakefile().


The documentation for this class was generated from the following file: