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 1734 of file perlmodgen.cpp.

1735{
1736 if (ii)
1737 {
1738 QCString nm = ii->includeName;
1739 if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
1740 if (!nm.isEmpty())
1741 {
1742 m_output.openHash("includes");
1743 m_output.addFieldBoolean("local", ii->kind==IncludeKind::IncludeLocal || ii->kind==IncludeKind::ImportLocal)
1744 .addFieldQuotedString("name", nm)
1745 .closeHash();
1746 }
1747 }
1748}
virtual const QCString & docName() const =0
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
@ 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 1681 of file perlmodgen.cpp.

1682{
1683 m_output.openList("all_members");
1684 for (auto &mni : cd->memberNameInfoLinkedMap())
1685 {
1686 for (auto &mi : *mni)
1687 {
1688 const MemberDef *md=mi->memberDef();
1689 const ClassDef *mcd=md->getClassDef();
1690
1691 m_output.openHash()
1692 .addFieldQuotedString("name", md->name())
1693 .addFieldQuotedString("virtualness", getVirtualnessName(md->virtualness()))
1694 .addFieldQuotedString("protection", getProtectionName(mi->prot()));
1695
1696 if (!mi->ambiguityResolutionScope().isEmpty())
1697 m_output.addFieldQuotedString("ambiguity_scope", mi->ambiguityResolutionScope());
1698
1699 m_output.addFieldQuotedString("scope", mcd->name())
1700 .closeHash();
1701 }
1702 }
1703 m_output.closeList();
1704}
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 2263 of file perlmodgen.cpp.

2264{
2265 std::string outputDirectory = Config_getString(OUTPUT_DIRECTORY).str();
2266 perlModDir.setPath(outputDirectory+"/perlmod");
2267 if (!perlModDir.exists() && !perlModDir.mkdir(outputDirectory+"/perlmod"))
2268 {
2269 err("Could not create perlmod directory in {}\n",outputDirectory);
2270 return false;
2271 }
2272 return true;
2273}
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 2252 of file perlmodgen.cpp.

2253{
2255 if (!f.is_open())
2256 {
2257 err("Cannot open file {} for writing!\n", s);
2258 return false;
2259 }
2260 return true;
2261}
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 2922 of file perlmodgen.cpp.

2923{
2924 // + classes
2925 // + namespaces
2926 // + files
2927 // - packages
2928 // + groups
2929 // + related pages
2930 // - examples
2931
2932 Dir perlModDir;
2933 if (!createOutputDir(perlModDir))
2934 return;
2935
2936 bool perlmodLatex = Config_getBool(PERLMOD_LATEX);
2937
2938 QCString perlModAbsPath = perlModDir.absPath();
2939 pathDoxyDocsPM = perlModAbsPath + "/DoxyDocs.pm";
2940 pathDoxyStructurePM = perlModAbsPath + "/DoxyStructure.pm";
2941 pathMakefile = perlModAbsPath + "/Makefile";
2942 pathDoxyRules = perlModAbsPath + "/doxyrules.make";
2943
2944 if (perlmodLatex) {
2945 pathDoxyStructureTex = perlModAbsPath + "/doxystructure.tex";
2946 pathDoxyFormatTex = perlModAbsPath + "/doxyformat.tex";
2947 pathDoxyLatexTex = perlModAbsPath + "/doxylatex.tex";
2948 pathDoxyLatexDVI = perlModAbsPath + "/doxylatex.dvi";
2949 pathDoxyLatexPDF = perlModAbsPath + "/doxylatex.pdf";
2950 pathDoxyDocsTex = perlModAbsPath + "/doxydocs.tex";
2951 pathDoxyLatexPL = perlModAbsPath + "/doxylatex.pl";
2952 pathDoxyLatexStructurePL = perlModAbsPath + "/doxylatex-structure.pl";
2953 }
2954
2955 if (!(generatePerlModOutput()
2957 && generateMakefile()
2958 && generateDoxyRules()))
2959 return;
2960
2961 if (perlmodLatex) {
2966 return;
2967 }
2968}
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 2735 of file perlmodgen.cpp.

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

References createOutputFile(), pathDoxyFormatTex, and pathDoxyStructureTex.

Referenced by generate().

◆ generateDoxyLatexPL()

bool PerlModGenerator::generateDoxyLatexPL ( )

Definition at line 2613 of file perlmodgen.cpp.

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

References createOutputFile(), and pathDoxyLatexPL.

Referenced by generate().

◆ generateDoxyLatexStructurePL()

bool PerlModGenerator::generateDoxyLatexStructurePL ( )

Definition at line 2580 of file perlmodgen.cpp.

2581{
2582 std::ofstream doxyLatexStructurePLStream;
2583 if (!createOutputFile(doxyLatexStructurePLStream, pathDoxyLatexStructurePL))
2584 return false;
2585
2586 doxyLatexStructurePLStream <<
2587 "use DoxyStructure;\n"
2588 "\n"
2589 "sub process($) {\n"
2590 "\tmy $node = $_[0];\n"
2591 "\tmy ($type, $name) = @$node[0, 1];\n"
2592 "\tmy $command;\n"
2593 "\tif ($type eq \"string\") { $command = \"String\" }\n"
2594 "\telsif ($type eq \"doc\") { $command = \"Doc\" }\n"
2595 "\telsif ($type eq \"hash\") {\n"
2596 "\t\t$command = \"Hash\";\n"
2597 "\t\tfor my $subnode (values %{$$node[2]}) {\n"
2598 "\t\t\tprocess($subnode);\n"
2599 "\t\t}\n"
2600 "\t}\n"
2601 "\telsif ($type eq \"list\") {\n"
2602 "\t\t$command = \"List\";\n"
2603 "\t\tprocess($$node[2]);\n"
2604 "\t}\n"
2605 "\tprint \"\\\\\" . $command . \"Node{\" . $name . \"}%\\n\";\n"
2606 "}\n"
2607 "\n"
2608 "process($doxystructure);\n";
2609
2610 return true;
2611}

References createOutputFile(), and pathDoxyLatexStructurePL.

Referenced by generate().

◆ generateDoxyLatexTex()

bool PerlModGenerator::generateDoxyLatexTex ( )

Definition at line 2897 of file perlmodgen.cpp.

2898{
2899 std::ofstream doxyLatexTexStream;
2900 if (!createOutputFile(doxyLatexTexStream, pathDoxyLatexTex))
2901 return false;
2902
2903 doxyLatexTexStream <<
2904 "\\documentclass[a4paper,12pt]{article}\n"
2905 "\\usepackage[latin1]{inputenc}\n"
2906 "\\usepackage[none]{hyphenat}\n"
2907 "\\usepackage[T1]{fontenc}\n"
2908 "\\usepackage{hyperref}\n"
2909 "\\usepackage{times}\n"
2910 "\n"
2911 "\\input{doxyformat}\n"
2912 "\n"
2913 "\\begin{document}\n"
2914 "\\input{" << pathDoxyDocsTex << "}\n"
2915 "\\sloppy\n"
2916 "\\EmitDoxyDocs\n"
2917 "\\end{document}\n";
2918
2919 return true;
2920}

References createOutputFile(), pathDoxyDocsTex, and pathDoxyLatexTex.

Referenced by generate().

◆ generateDoxyRules()

bool PerlModGenerator::generateDoxyRules ( )

Definition at line 2458 of file perlmodgen.cpp.

2459{
2460 std::ofstream doxyRulesStream;
2461 if (!createOutputFile(doxyRulesStream, pathDoxyRules))
2462 return false;
2463
2464 bool perlmodLatex = Config_getBool(PERLMOD_LATEX);
2465 QCString prefix = Config_getString(PERLMOD_MAKEVAR_PREFIX);
2466
2467 doxyRulesStream <<
2468 prefix << "DOXY_EXEC_PATH = " << pathDoxyExec << "\n" <<
2469 prefix << "DOXYFILE = " << pathDoxyfile << "\n" <<
2470 prefix << "DOXYDOCS_PM = " << pathDoxyDocsPM << "\n" <<
2471 prefix << "DOXYSTRUCTURE_PM = " << pathDoxyStructurePM << "\n" <<
2472 prefix << "DOXYRULES = " << pathDoxyRules << "\n";
2473 if (perlmodLatex)
2474 doxyRulesStream <<
2475 prefix << "DOXYLATEX_PL = " << pathDoxyLatexPL << "\n" <<
2476 prefix << "DOXYLATEXSTRUCTURE_PL = " << pathDoxyLatexStructurePL << "\n" <<
2477 prefix << "DOXYSTRUCTURE_TEX = " << pathDoxyStructureTex << "\n" <<
2478 prefix << "DOXYDOCS_TEX = " << pathDoxyDocsTex << "\n" <<
2479 prefix << "DOXYFORMAT_TEX = " << pathDoxyFormatTex << "\n" <<
2480 prefix << "DOXYLATEX_TEX = " << pathDoxyLatexTex << "\n" <<
2481 prefix << "DOXYLATEX_DVI = " << pathDoxyLatexDVI << "\n" <<
2482 prefix << "DOXYLATEX_PDF = " << pathDoxyLatexPDF << "\n";
2483
2484 doxyRulesStream <<
2485 "\n"
2486 ".PHONY: clean-perlmod\n"
2487 "clean-perlmod::\n"
2488 "\trm -f $(" << prefix << "DOXYSTRUCTURE_PM) \\\n"
2489 "\t$(" << prefix << "DOXYDOCS_PM)";
2490 if (perlmodLatex)
2491 doxyRulesStream <<
2492 " \\\n"
2493 "\t$(" << prefix << "DOXYLATEX_PL) \\\n"
2494 "\t$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
2495 "\t$(" << prefix << "DOXYDOCS_TEX) \\\n"
2496 "\t$(" << prefix << "DOXYSTRUCTURE_TEX) \\\n"
2497 "\t$(" << prefix << "DOXYFORMAT_TEX) \\\n"
2498 "\t$(" << prefix << "DOXYLATEX_TEX) \\\n"
2499 "\t$(" << prefix << "DOXYLATEX_PDF) \\\n"
2500 "\t$(" << prefix << "DOXYLATEX_DVI) \\\n"
2501 "\t$(addprefix $(" << prefix << "DOXYLATEX_TEX:tex=),out aux log)";
2502 doxyRulesStream << "\n\n";
2503
2504 doxyRulesStream <<
2505 "$(" << prefix << "DOXYRULES) \\\n"
2506 "$(" << prefix << "DOXYMAKEFILE) \\\n"
2507 "$(" << prefix << "DOXYSTRUCTURE_PM) \\\n"
2508 "$(" << prefix << "DOXYDOCS_PM)";
2509 if (perlmodLatex) {
2510 doxyRulesStream <<
2511 " \\\n"
2512 "$(" << prefix << "DOXYLATEX_PL) \\\n"
2513 "$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
2514 "$(" << prefix << "DOXYFORMAT_TEX) \\\n"
2515 "$(" << prefix << "DOXYLATEX_TEX)";
2516 }
2517 doxyRulesStream <<
2518 ": \\\n"
2519 "\t$(" << prefix << "DOXYFILE)\n"
2520 "\tcd $(" << prefix << "DOXY_EXEC_PATH) ; doxygen \"$<\"\n";
2521
2522 if (perlmodLatex) {
2523 doxyRulesStream <<
2524 "\n"
2525 "$(" << prefix << "DOXYDOCS_TEX): \\\n"
2526 "$(" << prefix << "DOXYLATEX_PL) \\\n"
2527 "$(" << prefix << "DOXYDOCS_PM)\n"
2528 "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
2529 "\n"
2530 "$(" << prefix << "DOXYSTRUCTURE_TEX): \\\n"
2531 "$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
2532 "$(" << prefix << "DOXYSTRUCTURE_PM)\n"
2533 "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
2534 "\n"
2535 "$(" << prefix << "DOXYLATEX_PDF) \\\n"
2536 "$(" << prefix << "DOXYLATEX_DVI): \\\n"
2537 "$(" << prefix << "DOXYLATEX_TEX) \\\n"
2538 "$(" << prefix << "DOXYFORMAT_TEX) \\\n"
2539 "$(" << prefix << "DOXYSTRUCTURE_TEX) \\\n"
2540 "$(" << prefix << "DOXYDOCS_TEX)\n"
2541 "\n"
2542 "$(" << prefix << "DOXYLATEX_PDF): \\\n"
2543 "$(" << prefix << "DOXYLATEX_TEX)\n"
2544 "\tpdflatex -interaction=nonstopmode \"$<\"\n"
2545 "\n"
2546 "$(" << prefix << "DOXYLATEX_DVI): \\\n"
2547 "$(" << prefix << "DOXYLATEX_TEX)\n"
2548 "\tlatex -interaction=nonstopmode \"$<\"\n";
2549 }
2550
2551 return true;
2552}
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 2275 of file perlmodgen.cpp.

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

References createOutputFile(), and pathDoxyStructurePM.

Referenced by generate().

◆ generateMakefile()

bool PerlModGenerator::generateMakefile ( )

Definition at line 2554 of file perlmodgen.cpp.

2555{
2556 std::ofstream makefileStream;
2557 if (!createOutputFile(makefileStream, pathMakefile))
2558 return false;
2559
2560 bool perlmodLatex = Config_getBool(PERLMOD_LATEX);
2561 QCString prefix = Config_getString(PERLMOD_MAKEVAR_PREFIX);
2562
2563 makefileStream <<
2564 ".PHONY: default clean" << (perlmodLatex ? " pdf" : "") << "\n"
2565 "default: " << (perlmodLatex ? "pdf" : "clean") << "\n"
2566 "\n"
2567 "include " << pathDoxyRules << "\n"
2568 "\n"
2569 "clean: clean-perlmod\n";
2570
2571 if (perlmodLatex) {
2572 makefileStream <<
2573 "pdf: $(" << prefix << "DOXYLATEX_PDF)\n"
2574 "dvi: $(" << prefix << "DOXYLATEX_DVI)\n";
2575 }
2576
2577 return true;
2578}

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

Referenced by generate().

◆ generatePerlModForClass()

void PerlModGenerator::generatePerlModForClass ( const ClassDef * cd)

Definition at line 1750 of file perlmodgen.cpp.

1751{
1752 // + brief description
1753 // + detailed description
1754 // + template argument list(s)
1755 // - include file
1756 // + member groups
1757 // + inheritance diagram
1758 // + list of direct super classes
1759 // + list of direct sub classes
1760 // + list of inner classes
1761 // + collaboration diagram
1762 // + list of all members
1763 // + user defined member sections
1764 // + standard member sections
1765 // + detailed member documentation
1766 // - examples using the class
1767
1768 if (cd->isReference()) return; // skip external references.
1769 if (cd->isAnonymous()) return; // skip anonymous compounds.
1770 if (cd->isImplicitTemplateInstance()) return; // skip generated template instances.
1771
1772 m_output.openHash()
1773 .addFieldQuotedString("name", cd->name());
1774 /* DGA: fix # #7547 Perlmod does not generate "kind" information to discriminate struct/union */
1775 m_output.addFieldQuotedString("kind", cd->compoundTypeString());
1776
1777 if (!cd->baseClasses().empty())
1778 {
1779 m_output.openList("base");
1780 for (const auto &bcd : cd->baseClasses())
1781 {
1782 m_output.openHash()
1783 .addFieldQuotedString("name", bcd.classDef->displayName())
1784 .addFieldQuotedString("virtualness", getVirtualnessName(bcd.virt))
1785 .addFieldQuotedString("protection", getProtectionName(bcd.prot))
1786 .closeHash();
1787 }
1788 m_output.closeList();
1789 }
1790
1791 if (!cd->subClasses().empty())
1792 {
1793 m_output.openList("derived");
1794 for (const auto &bcd : cd->subClasses())
1795 {
1796 m_output.openHash()
1797 .addFieldQuotedString("name", bcd.classDef->displayName())
1798 .addFieldQuotedString("virtualness", getVirtualnessName(bcd.virt))
1799 .addFieldQuotedString("protection", getProtectionName(bcd.prot))
1800 .closeHash();
1801 }
1802 m_output.closeList();
1803 }
1804
1805 {
1806 m_output.openList("inner");
1807 for (const auto &icd : cd->getClasses())
1808 m_output.openHash()
1809 .addFieldQuotedString("name", icd->name())
1810 .closeHash();
1811 m_output.closeList();
1812 }
1813
1815
1819
1820 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubTypes()),"public_typedefs");
1821 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubMethods()),"public_methods");
1822 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubAttribs()),"public_members");
1823 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubSlots()),"public_slots");
1824 generatePerlModSection(cd,cd->getMemberList(MemberListType::Signals()),"signals");
1825 generatePerlModSection(cd,cd->getMemberList(MemberListType::DcopMethods()),"dcop_methods");
1826 generatePerlModSection(cd,cd->getMemberList(MemberListType::Properties()),"properties");
1827 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubStaticMethods()),"public_static_methods");
1828 generatePerlModSection(cd,cd->getMemberList(MemberListType::PubStaticAttribs()),"public_static_members");
1829 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProTypes()),"protected_typedefs");
1830 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProMethods()),"protected_methods");
1831 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProAttribs()),"protected_members");
1832 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProSlots()),"protected_slots");
1833 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProStaticMethods()),"protected_static_methods");
1834 generatePerlModSection(cd,cd->getMemberList(MemberListType::ProStaticAttribs()),"protected_static_members");
1835 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriTypes()),"private_typedefs");
1836 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriMethods()),"private_methods");
1837 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriAttribs()),"private_members");
1838 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriSlots()),"private_slots");
1839 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriStaticMethods()),"private_static_methods");
1840 generatePerlModSection(cd,cd->getMemberList(MemberListType::PriStaticAttribs()),"private_static_members");
1841 generatePerlModSection(cd,cd->getMemberList(MemberListType::Friends()),"friend_methods");
1842 generatePerlModSection(cd,cd->getMemberList(MemberListType::Related()),"related_methods");
1843
1844 addPerlModDocBlock(m_output,"brief",cd->briefFile(),cd->briefLine(),cd,nullptr,cd->briefDescription());
1845 addPerlModDocBlock(m_output,"detailed",cd->docFile(),cd->docLine(),cd,nullptr,cd->documentation());
1846
1847#if 0
1848 DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance);
1849 if (!inheritanceGraph.isTrivial())
1850 {
1851 t << " <inheritancegraph>" << endl;
1852 inheritanceGraph.writePerlMod(t);
1853 t << " </inheritancegraph>" << endl;
1854 }
1855 DotClassGraph collaborationGraph(cd,DotClassGraph::Implementation);
1856 if (!collaborationGraph.isTrivial())
1857 {
1858 t << " <collaborationgraph>" << endl;
1859 collaborationGraph.writePerlMod(t);
1860 t << " </collaborationgraph>" << endl;
1861 }
1862 t << " <location file=\""
1863 << cd->getDefFileName() << "\" line=\""
1864 << cd->getDefLine() << "\"";
1865 if (cd->getStartBodyLine()!=-1)
1866 {
1867 t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
1868 << cd->getEndBodyLine() << "\"";
1869 }
1870 t << "/>" << endl;
1871#endif
1872
1873 m_output.closeHash();
1874}
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 1876 of file perlmodgen.cpp.

1877{
1878 if (cd->isReference()) return; // skip external references
1879
1880 m_output.openHash()
1881 .addFieldQuotedString("name", cd->name());
1882
1885 m_output.addFieldQuotedString("initializer", cd->initializer());
1886 addPerlModDocBlock(m_output,"brief",cd->briefFile(),cd->briefLine(),nullptr,nullptr,cd->briefDescription());
1887 addPerlModDocBlock(m_output,"detailed",cd->docFile(),cd->docLine(),nullptr,nullptr,cd->documentation());
1888
1889 m_output.closeHash();
1890}
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 2003 of file perlmodgen.cpp.

2004{
2005 // + includes files
2006 // + includedby files
2007 // - include graph
2008 // - included by graph
2009 // - contained class definitions
2010 // - contained namespace definitions
2011 // - member groups
2012 // + normal members
2013 // + brief desc
2014 // + detailed desc
2015 // - source code
2016 // - location
2017 // - number of lines
2018
2019 if (fd->isReference()) return;
2020
2021 m_output.openHash()
2022 .addFieldQuotedString("name", fd->name());
2023
2024 m_output.openList("includes");
2025 for (const auto &inc: fd->includeFileList())
2026 {
2027 m_output.openHash()
2028 .addFieldQuotedString("name", inc.includeName);
2029 if (inc.fileDef && !inc.fileDef->isReference())
2030 {
2031 m_output.addFieldQuotedString("ref", inc.fileDef->getOutputFileBase());
2032 }
2033 m_output.closeHash();
2034 }
2035 m_output.closeList();
2036
2037 m_output.openList("included_by");
2038 for (const auto &inc : fd->includedByFileList())
2039 {
2040 m_output.openHash()
2041 .addFieldQuotedString("name", inc.includeName);
2042 if (inc.fileDef && !inc.fileDef->isReference())
2043 {
2044 m_output.addFieldQuotedString("ref", inc.fileDef->getOutputFileBase());
2045 }
2046 m_output.closeHash();
2047 }
2048 m_output.closeList();
2049
2051
2052 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecDefineMembers()),"defines");
2053 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecProtoMembers()),"prototypes");
2054 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecTypedefMembers()),"typedefs");
2055 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecEnumMembers()),"enums");
2056 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecFuncMembers()),"functions");
2057 generatePerlModSection(fd,fd->getMemberList(MemberListType::DecVarMembers()),"variables");
2058
2059 addPerlModDocBlock(m_output,"brief",fd->briefFile(),fd->briefLine(),nullptr,nullptr,fd->briefDescription());
2060 addPerlModDocBlock(m_output,"detailed",fd->docFile(),fd->docLine(),nullptr,nullptr,fd->documentation());
2061
2062 m_output.closeHash();
2063}
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 2065 of file perlmodgen.cpp.

2066{
2067 // + members
2068 // + member groups
2069 // + files
2070 // + classes
2071 // + namespaces
2072 // - packages
2073 // + pages
2074 // + child groups
2075 // - examples
2076 // + brief description
2077 // + detailed description
2078
2079 if (gd->isReference()) return; // skip external references
2080
2081 m_output.openHash()
2082 .addFieldQuotedString("name", gd->name())
2083 .addFieldQuotedString("title", gd->groupTitle());
2084
2085 if (!gd->getFiles().empty())
2086 {
2087 m_output.openList("files");
2088 for (const auto &fd : gd->getFiles())
2089 m_output.openHash()
2090 .addFieldQuotedString("name", fd->name())
2091 .closeHash();
2092 m_output.closeList();
2093 }
2094
2095 if (!gd->getClasses().empty())
2096 {
2097 m_output.openList("classes");
2098 for (const auto &cd : gd->getClasses())
2099 m_output.openHash()
2100 .addFieldQuotedString("name", cd->name())
2101 .closeHash();
2102 m_output.closeList();
2103 }
2104
2105 if (!gd->getConcepts().empty())
2106 {
2107 m_output.openList("concepts");
2108 for (const auto &cd : gd->getConcepts())
2109 m_output.openHash()
2110 .addFieldQuotedString("name", cd->name())
2111 .closeHash();
2112 m_output.closeList();
2113 }
2114
2115 if (!gd->getModules().empty())
2116 {
2117 m_output.openList("modules");
2118 for (const auto &mod : gd->getModules())
2119 m_output.openHash()
2120 .addFieldQuotedString("name", mod->name())
2121 .closeHash();
2122 m_output.closeList();
2123 }
2124
2125 if (!gd->getNamespaces().empty())
2126 {
2127 m_output.openList("namespaces");
2128 for (const auto &nd : gd->getNamespaces())
2129 m_output.openHash()
2130 .addFieldQuotedString("name", nd->name())
2131 .closeHash();
2132 m_output.closeList();
2133 }
2134
2135 if (!gd->getPages().empty())
2136 {
2137 m_output.openList("pages");
2138 for (const auto &pd : gd->getPages())
2139 m_output.openHash()
2140 .addFieldQuotedString("title", pd->title())
2141 .closeHash();
2142 m_output.closeList();
2143 }
2144
2145 if (!gd->getSubGroups().empty())
2146 {
2147 m_output.openList("groups");
2148 for (const auto &sgd : gd->getSubGroups())
2149 m_output.openHash()
2150 .addFieldQuotedString("title", sgd->groupTitle())
2151 .closeHash();
2152 m_output.closeList();
2153 }
2154
2156
2157 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecDefineMembers()),"defines");
2158 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecProtoMembers()),"prototypes");
2159 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecTypedefMembers()),"typedefs");
2160 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecEnumMembers()),"enums");
2161 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecFuncMembers()),"functions");
2162 generatePerlModSection(gd,gd->getMemberList(MemberListType::DecVarMembers()),"variables");
2163
2164 addPerlModDocBlock(m_output,"brief",gd->briefFile(),gd->briefLine(),nullptr,nullptr,gd->briefDescription());
2165 addPerlModDocBlock(m_output,"detailed",gd->docFile(),gd->docLine(),nullptr,nullptr,gd->documentation());
2166
2167 m_output.closeHash();
2168}
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;
1502 QCString name;
1503 bool isFunc=FALSE;
1504 switch (md->memberType())
1505 {
1506 case MemberType::Define: memType="define"; break;
1507 case MemberType::EnumValue: memType="enumvalue"; break;
1508 case MemberType::Property: memType="property"; break;
1509 case MemberType::Variable: memType="variable"; break;
1510 case MemberType::Typedef: memType="typedef"; break;
1511 case MemberType::Enumeration: memType="enum"; break;
1512 case MemberType::Function: memType="function"; isFunc=TRUE; break;
1513 case MemberType::Signal: memType="signal"; isFunc=TRUE; break;
1514 case MemberType::Friend: memType="friend"; isFunc=TRUE; break;
1515 case MemberType::DCOP: memType="dcop"; isFunc=TRUE; break;
1516 case MemberType::Slot: memType="slot"; isFunc=TRUE; break;
1517 case MemberType::Event: memType="event"; break;
1518 case MemberType::Interface: memType="interface"; break;
1519 case MemberType::Service: memType="service"; break;
1520 case MemberType::Sequence: memType="sequence"; break;
1521 case MemberType::Dictionary: memType="dictionary"; break;
1522 }
1523
1524 bool isFortran = md->getLanguage()==SrcLangExt::Fortran;
1525 name = md->name();
1526 if (md->isAnonymous()) name = "__unnamed" + name.right(name.length() - 1)+"__";
1527
1528 m_output.openHash()
1529 .addFieldQuotedString("kind", memType)
1530 .addFieldQuotedString("name", name)
1531 .addFieldQuotedString("virtualness", getVirtualnessName(md->virtualness()))
1532 .addFieldQuotedString("protection", getProtectionName(md->protection()))
1533 .addFieldBoolean("static", md->isStatic());
1534
1536 addPerlModDocBlock(m_output,"detailed",md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
1537 if (md->memberType()!=MemberType::Define &&
1539 m_output.addFieldQuotedString("type", md->typeString());
1540
1541 const ArgumentList &al = md->argumentList();
1542 if (isFunc) //function
1543 {
1544 m_output.addFieldBoolean("const", al.constSpecifier())
1545 .addFieldBoolean("volatile", al.volatileSpecifier());
1546
1547 m_output.openList("parameters");
1548 const ArgumentList &declAl = md->declArgumentList();
1549 if (!declAl.empty())
1550 {
1551 auto defIt = al.begin();
1552 for (const Argument &a : declAl)
1553 {
1554 const Argument *defArg = nullptr;
1555 if (defIt!=al.end())
1556 {
1557 defArg = &(*defIt);
1558 ++defIt;
1559 }
1560 m_output.openHash();
1561
1562 if (!a.name.isEmpty())
1563 m_output.addFieldQuotedString("declaration_name", a.name);
1564
1565 if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
1566 m_output.addFieldQuotedString("definition_name", defArg->name);
1567
1568 if (isFortran && defArg && !defArg->type.isEmpty())
1569 m_output.addFieldQuotedString("type", defArg->type);
1570 else if (!a.type.isEmpty())
1571 m_output.addFieldQuotedString("type", a.type);
1572
1573 if (!a.array.isEmpty())
1574 m_output.addFieldQuotedString("array", a.array);
1575
1576 if (!a.defval.isEmpty())
1577 m_output.addFieldQuotedString("default_value", a.defval);
1578
1579 if (!a.attrib.isEmpty())
1580 m_output.addFieldQuotedString("attributes", a.attrib);
1581
1582 m_output.closeHash();
1583 }
1584 }
1585 m_output.closeList();
1586 }
1587 else if (md->memberType()==MemberType::Define &&
1588 md->argsString()!=nullptr) // define
1589 {
1590 m_output.openList("parameters");
1591 for (const Argument &a : al)
1592 {
1593 m_output.openHash()
1594 .addFieldQuotedString("name", a.type)
1595 .closeHash();
1596 }
1597 m_output.closeList();
1598 }
1599 else if (md->argsString()!=nullptr)
1600 {
1601 m_output.addFieldQuotedString("arguments", md->argsString());
1602 }
1603
1604 if (!md->initializer().isEmpty())
1605 m_output.addFieldQuotedString("initializer", md->initializer());
1606
1607 if (!md->excpString().isEmpty())
1608 m_output.addFieldQuotedString("exceptions", md->excpString());
1609
1610 if (md->memberType()==MemberType::Enumeration) // enum
1611 {
1612 const MemberVector &enumFields = md->enumFieldList();
1613 m_output.addFieldQuotedString("type", md->enumBaseType());
1614 if (!enumFields.empty())
1615 {
1616 m_output.openList("values");
1617 for (const auto &emd : enumFields)
1618 {
1619 m_output.openHash()
1620 .addFieldQuotedString("name", emd->name());
1621
1622 if (!emd->initializer().isEmpty())
1623 m_output.addFieldQuotedString("initializer", emd->initializer());
1624
1625 addPerlModDocBlock(m_output,"brief",emd->briefFile(),emd->briefLine(),emd->getOuterScope(),emd,emd->briefDescription());
1626
1627 addPerlModDocBlock(m_output,"detailed",emd->docFile(),emd->docLine(),emd->getOuterScope(),emd,emd->documentation());
1628
1629 m_output.closeHash();
1630 }
1631 m_output.closeList();
1632 }
1633 }
1634
1635 if (md->memberType() == MemberType::Variable && !md->bitfieldString().isEmpty())
1636 {
1637 QCString bitfield = md->bitfieldString();
1638 if (bitfield.at(0) == ':') bitfield = bitfield.mid(1);
1639 m_output.addFieldQuotedString("bitfield", bitfield);
1640 }
1641
1642 const MemberDef *rmd = md->reimplements();
1643 if (rmd)
1644 m_output.openHash("reimplements")
1645 .addFieldQuotedString("name", rmd->name())
1646 .closeHash();
1647
1648 const MemberVector &rbml = md->reimplementedBy();
1649 if (!rbml.empty())
1650 {
1651 m_output.openList("reimplemented_by");
1652 for (const auto &rbmd : rbml)
1653 m_output.openHash()
1654 .addFieldQuotedString("name", rbmd->name())
1655 .closeHash();
1656 m_output.closeList();
1657 }
1658
1659 m_output.closeHash();
1660}
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:166
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
QCString right(size_t len) const
Definition qcstring.h:234
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
QCString type
Definition arguments.h:42
QCString name
Definition arguments.h:44
@ Enumeration
Definition types.h:557
@ EnumValue
Definition types.h:558
@ Dictionary
Definition types.h:568
@ Interface
Definition types.h:565
@ Sequence
Definition types.h:567
@ Variable
Definition types.h:555
@ Property
Definition types.h:563
@ Typedef
Definition types.h:556
@ Function
Definition types.h:554
@ Service
Definition types.h:566

References addPerlModDocBlock(), MemberDef::argsString(), MemberDef::argumentList(), QCString::at(), ArgumentList::begin(), MemberDef::bitfieldString(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), ArgumentList::constSpecifier(), DCOP, MemberDef::declArgumentList(), Define, Dictionary, Definition::docFile(), Definition::docLine(), Definition::documentation(), ArgumentList::empty(), MemberVector::empty(), ArgumentList::end(), MemberDef::enumBaseType(), Enumeration, MemberDef::enumFieldList(), EnumValue, Event, MemberDef::excpString(), FALSE, Friend, Function, Definition::getLanguage(), Definition::getOuterScope(), getProtectionName(), getVirtualnessName(), MemberDef::initializer(), Interface, Definition::isAnonymous(), QCString::isEmpty(), MemberDef::isStatic(), QCString::length(), m_output, MemberDef::memberType(), QCString::mid(), Argument::name, Definition::name(), Property, MemberDef::protection(), MemberDef::reimplementedBy(), MemberDef::reimplements(), QCString::right(), Sequence, Service, Signal, Slot, TRUE, Argument::type, Typedef, MemberDef::typeString(), Variable, MemberDef::virtualness(), and ArgumentList::volatileSpecifier().

Referenced by generatePerlModSection(), and generatePerlUserDefinedSection().

◆ generatePerlModForModule()

void PerlModGenerator::generatePerlModForModule ( const ModuleDef * mod)

Definition at line 1892 of file perlmodgen.cpp.

1893{
1894 // + contained class definitions
1895 // + contained concept definitions
1896 // + member groups
1897 // + normal members
1898 // + brief desc
1899 // + detailed desc
1900 // + location (file_id, line, column)
1901 // - exports
1902 // + used files
1903
1904 if (mod->isReference()) return; // skip external references
1905
1906 m_output.openHash()
1907 .addFieldQuotedString("name", mod->name());
1908
1910
1911 if (!mod->getClasses().empty())
1912 {
1913 m_output.openList("classes");
1914 for (const auto &cd : mod->getClasses())
1915 m_output.openHash()
1916 .addFieldQuotedString("name", cd->name())
1917 .closeHash();
1918 m_output.closeList();
1919 }
1920
1921 if (!mod->getConcepts().empty())
1922 {
1923 m_output.openList("concepts");
1924 for (const auto &cd : mod->getConcepts())
1925 m_output.openHash()
1926 .addFieldQuotedString("name", cd->name())
1927 .closeHash();
1928 m_output.closeList();
1929 }
1930
1931 generatePerlModSection(mod,mod->getMemberList(MemberListType::DecTypedefMembers()),"typedefs");
1932 generatePerlModSection(mod,mod->getMemberList(MemberListType::DecEnumMembers()),"enums");
1933 generatePerlModSection(mod,mod->getMemberList(MemberListType::DecFuncMembers()),"functions");
1934 generatePerlModSection(mod,mod->getMemberList(MemberListType::DecVarMembers()),"variables");
1935
1936 addPerlModDocBlock(m_output,"brief",mod->briefFile(),mod->briefLine(),nullptr,nullptr,mod->briefDescription());
1937 addPerlModDocBlock(m_output,"detailed",mod->docFile(),mod->docLine(),nullptr,nullptr,mod->documentation());
1938
1939 if (!mod->getUsedFiles().empty())
1940 {
1941 m_output.openList("files");
1942 for (const auto &fd : mod->getUsedFiles())
1943 m_output.openHash()
1944 .addFieldQuotedString("name", fd->name())
1945 .closeHash();
1946 m_output.closeList();
1947 }
1948
1949 m_output.closeHash();
1950}
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 1952 of file perlmodgen.cpp.

1953{
1954 // + contained class definitions
1955 // + contained namespace definitions
1956 // + member groups
1957 // + normal members
1958 // + brief desc
1959 // + detailed desc
1960 // + location
1961 // - files containing (parts of) the namespace definition
1962
1963 if (nd->isReference()) return; // skip external references
1964
1965 m_output.openHash()
1966 .addFieldQuotedString("name", nd->name());
1967
1968 if (!nd->getClasses().empty())
1969 {
1970 m_output.openList("classes");
1971 for (const auto &cd : nd->getClasses())
1972 m_output.openHash()
1973 .addFieldQuotedString("name", cd->name())
1974 .closeHash();
1975 m_output.closeList();
1976 }
1977
1978 if (!nd->getNamespaces().empty())
1979 {
1980 m_output.openList("namespaces");
1981 for (const auto &ind : nd->getNamespaces())
1982 m_output.openHash()
1983 .addFieldQuotedString("name", ind->name())
1984 .closeHash();
1985 m_output.closeList();
1986 }
1987
1989
1990 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecDefineMembers()),"defines");
1991 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecProtoMembers()),"prototypes");
1992 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecTypedefMembers()),"typedefs");
1993 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecEnumMembers()),"enums");
1994 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecFuncMembers()),"functions");
1995 generatePerlModSection(nd,nd->getMemberList(MemberListType::DecVarMembers()),"variables");
1996
1997 addPerlModDocBlock(m_output,"brief",nd->briefFile(),nd->briefLine(),nullptr,nullptr,nd->briefDescription());
1998 addPerlModDocBlock(m_output,"detailed",nd->docFile(),nd->docLine(),nullptr,nullptr,nd->documentation());
1999
2000 m_output.closeHash();
2001}
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 2170 of file perlmodgen.cpp.

2171{
2172 // + name
2173 // + title
2174 // + documentation
2175
2176 if (pd->isReference()) return;
2177
2178 m_output.openHash()
2179 .addFieldQuotedString("name", pd->name());
2180
2181 const SectionInfo *si = SectionManager::instance().find(pd->name());
2182 if (si)
2183 m_output.addFieldQuotedString("title4", filterTitle(si->title()));
2184
2185 addPerlModDocBlock(m_output,"detailed",pd->docFile(),pd->docLine(),nullptr,nullptr,pd->documentation());
2186 m_output.closeHash();
2187}
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:5640

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 2189 of file perlmodgen.cpp.

2190{
2191 std::ofstream outputFileStream;
2192 if (!createOutputFile(outputFileStream, pathDoxyDocsPM))
2193 return false;
2194
2195 PerlModOutputStream outputStream(outputFileStream);
2196 m_output.setPerlModOutputStream(&outputStream);
2197 m_output.add("$doxydocs=").openHash();
2198
2199 m_output.openList("classes");
2200 for (const auto &cd : *Doxygen::classLinkedMap)
2201 generatePerlModForClass(cd.get());
2202 m_output.closeList();
2203
2204 m_output.openList("concepts");
2205 for (const auto &cd : *Doxygen::conceptLinkedMap)
2206 generatePerlModForConcept(cd.get());
2207 m_output.closeList();
2208
2209 m_output.openList("modules");
2210 for (const auto &mod : ModuleManager::instance().modules())
2211 generatePerlModForModule(mod.get());
2212 m_output.closeList();
2213
2214 m_output.openList("namespaces");
2215 for (const auto &nd : *Doxygen::namespaceLinkedMap)
2217 m_output.closeList();
2218
2219 m_output.openList("files");
2220 for (const auto &fn : *Doxygen::inputNameLinkedMap)
2221 {
2222 for (const auto &fd : *fn)
2223 {
2224 generatePerlModForFile(fd.get());
2225 }
2226 }
2227 m_output.closeList();
2228
2229 m_output.openList("groups");
2230 for (const auto &gd : *Doxygen::groupLinkedMap)
2231 {
2232 generatePerlModForGroup(gd.get());
2233 }
2234 m_output.closeList();
2235
2236 m_output.openList("pages");
2237 for (const auto &pd : *Doxygen::pageLinkedMap)
2238 {
2239 generatePerlModForPage(pd.get());
2240 }
2242 {
2244 }
2245 m_output.closeList();
2246
2247 m_output.closeHash().add(";\n1;\n");
2248 m_output.reset();
2249 return true;
2250}
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 1662 of file perlmodgen.cpp.

1664{
1665 if (ml==nullptr) return; // empty list
1666
1667 m_output.openHash(name);
1668
1669 if (!header.isEmpty())
1670 m_output.addFieldQuotedString("header", header);
1671
1672 m_output.openList("members");
1673 for (const auto &md : *ml)
1674 {
1676 }
1677 m_output.closeList()
1678 .closeHash();
1679}
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 1706 of file perlmodgen.cpp.

1707{
1708 if (!mgl.empty())
1709 {
1710 m_output.openList("user_defined");
1711 for (const auto &mg : mgl)
1712 {
1713 m_output.openHash();
1714 if (!mg->header().isEmpty())
1715 {
1716 m_output.addFieldQuotedString("header", mg->header());
1717 }
1718
1719 if (!mg->members().empty())
1720 {
1721 m_output.openList("members");
1722 for (const auto &md : mg->members())
1723 {
1725 }
1726 m_output.closeList();
1727 }
1728 m_output.closeHash();
1729 }
1730 m_output.closeList();
1731 }
1732}

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: