summaryrefslogtreecommitdiffstats
path: root/src/perlmodgen.cpp
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2002-10-30 20:57:53 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2002-10-30 20:57:53 (GMT)
commitc6d6555a949e86be5c859311eb4db5dcc092c258 (patch)
treedd06bd100b0bd88b6ee40c8464efac800a749c32 /src/perlmodgen.cpp
parent7c34dd2b1594925d0a012e9ba290bf9c80574db5 (diff)
downloadDoxygen-c6d6555a949e86be5c859311eb4db5dcc092c258.zip
Doxygen-c6d6555a949e86be5c859311eb4db5dcc092c258.tar.gz
Doxygen-c6d6555a949e86be5c859311eb4db5dcc092c258.tar.bz2
Release-1.2.18-20021030
Diffstat (limited to 'src/perlmodgen.cpp')
-rw-r--r--src/perlmodgen.cpp928
1 files changed, 796 insertions, 132 deletions
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index 377488b..596aa0b 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -102,9 +102,11 @@ class PerlModOutput
{
public:
- PerlModOutput(PerlModOutputStream *os) : m_stream(os), m_indentation(0) { m_spaces[0] = 0; }
+ PerlModOutput() : m_stream(0), m_indentation(0) { m_spaces[0] = 0; }
virtual ~PerlModOutput() { }
+ inline void setPerlModOutputStream(PerlModOutputStream *os) { m_stream = os; }
+
inline PerlModOutput &openSave() { iopenSave(); return *this; }
inline PerlModOutput &closeSave(QString &s) { icloseSave(s); return *this; }
@@ -479,8 +481,9 @@ void PerlModDocVisitor::visit(DocSymbol *sy)
case DocSymbol::BSlash: s = "\\\\"; break;
case DocSymbol::Copy: s = "(c)"; break;
case DocSymbol::Apos: s = "\\\'"; break;
- default:
+ case DocSymbol::Unknown:
err("Error: unknown symbol found\n");
+ break;
}
enterText();
if (c != 0)
@@ -509,8 +512,6 @@ void PerlModDocVisitor::visit(DocStyleChange *s)
case DocStyleChange::Superscript: break; // superscript
case DocStyleChange::Center: break; // center
case DocStyleChange::Small: break; // small
- default:
- err("Error: unknown style found.\n");
}
}
@@ -618,7 +619,7 @@ void PerlModDocVisitor::visitPre(DocAutoList *l)
openItem(l->isEnumList() ? "ordered_list" : "itemized_list");
openSubBlock("content");
}
-void PerlModDocVisitor::visitPost(DocAutoList *) { closeSubBlock(); }
+void PerlModDocVisitor::visitPost(DocAutoList *) { closeSubBlock(); closeItem(); }
void PerlModDocVisitor::visitPre(DocAutoListItem *) { openSubBlock(); }
void PerlModDocVisitor::visitPost(DocAutoListItem *) { closeSubBlock(); }
@@ -644,7 +645,7 @@ void PerlModDocVisitor::visitPost(DocRoot *)
void PerlModDocVisitor::visitPre(DocSimpleSect *s)
{
leaveText();
- const char *type;
+ const char *type = 0;
switch (s->type())
{
case DocSimpleSect::See: type = "see"; break;
@@ -662,7 +663,9 @@ void PerlModDocVisitor::visitPre(DocSimpleSect *s)
case DocSimpleSect::Remark: type = "remark"; break;
case DocSimpleSect::Attention: type = "attention"; break;
case DocSimpleSect::User: type = "par"; break;
- default: type = "illegal"; break;
+ case DocSimpleSect::Unknown:
+ err("Error: unknown simple section found\n");
+ break;
}
m_output.openSave().openList(type);
}
@@ -995,7 +998,9 @@ void PerlModDocVisitor::visitPre(DocParamSect *s)
case DocParamSect::Param: type = "params"; break;
case DocParamSect::RetVal: type = "retvals"; break;
case DocParamSect::Exception: type = "exceptions"; break;
- default: ASSERT(0);
+ case DocParamSect::Unknown:
+ err("Error: unknown parameter section found\n");
+ break;
}
m_output.openSave().openList(type);
}
@@ -1103,13 +1108,15 @@ static void addTemplateArgumentList(ArgumentList *al,PerlModOutput &output,const
output.closeList();
}
-//static void addMemberTemplateLists(MemberDef *md,PerlModOutput &output)
-//{
-// ClassDef *cd = md->getClassDef();
-// const char *cname = cd ? cd->name().data() : 0;
-// if (md->templateArguments()) // function template prefix
-// addTemplateArgumentList(md->templateArguments(),output,cname);
-//}
+#if 0
+static void addMemberTemplateLists(MemberDef *md,PerlModOutput &output)
+{
+ ClassDef *cd = md->getClassDef();
+ const char *cname = cd ? cd->name().data() : 0;
+ if (md->templateArguments()) // function template prefix
+ addTemplateArgumentList(md->templateArguments(),output,cname);
+}
+#endif
static void addTemplateList(ClassDef *cd,PerlModOutput &output)
{
@@ -1161,7 +1168,59 @@ static const char *getVirtualnessName(Specifier virt)
return 0;
}
-static void generatePerlModForMember(MemberDef *md,PerlModOutput &output,Definition *)
+static QString pathDoxyfile;
+static QString pathDoxyExec;
+
+void setPerlModDoxyfile(const QString &qs)
+{
+ pathDoxyfile = qs;
+ pathDoxyExec = QDir::currentDirPath();
+}
+
+class PerlModGenerator
+{
+public:
+
+ PerlModOutput output;
+
+ QString pathDoxyModelPM;
+ QString pathDoxyDocsTex;
+ QString pathDoxyFormatTex;
+ QString pathDoxyLatexTex;
+ QString pathDoxyLatexDVI;
+ QString pathDoxyLatexPDF;
+ QString pathDoxyTemplateTex;
+ QString pathDoxyDocsPM;
+ QString pathDoxyLatexPL;
+ QString pathDoxyLatexTemplatePL;
+ QString pathDoxyRules;
+ QString pathMakefile;
+
+ void generatePerlModForMember(MemberDef *md,Definition *);
+ void generatePerlModSection(Definition *d,
+ MemberList *ml,const char *name,const char *header=0);
+ void addListOfAllMembers(ClassDef *cd, PerlModOutput &output);
+ void generatePerlModForClass(ClassDef *cd, PerlModOutput &output);
+ void generatePerlModForNamespace(NamespaceDef *nd, PerlModOutput &output);
+ void generatePerlModForFile(FileDef *fd, PerlModOutput &output);
+ void generatePerlModForGroup(GroupDef *gd, PerlModOutput &output);
+ void generatePerlModForPage(PageInfo *pi, PerlModOutput &output);
+
+ bool createOutputFile(QFile &f, const char *s);
+ bool createOutputDir(QDir &perlModDir);
+ bool generateDoxyLatexTex();
+ bool generateDoxyFormatTex();
+ bool generateDoxyModelPM();
+ bool generateDoxyLatexPL();
+ bool generateDoxyLatexTemplatePL();
+ bool generateDoxyRules();
+ bool generateMakefile();
+ bool generatePerlModOutput();
+
+ void generate();
+};
+
+void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
{
// + declaration/definition arg lists
@@ -1184,7 +1243,6 @@ static void generatePerlModForMember(MemberDef *md,PerlModOutput &output,Definit
case MemberDef::Define: memType="define"; break;
case MemberDef::EnumValue: ASSERT(0); break;
case MemberDef::Property: memType="property"; break;
- case MemberDef::Event: memType="event"; break;
case MemberDef::Variable: memType="variable"; break;
case MemberDef::Typedef: memType="typedef"; break;
case MemberDef::Enumeration: memType="enum"; break;
@@ -1194,6 +1252,7 @@ static void generatePerlModForMember(MemberDef *md,PerlModOutput &output,Definit
case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
+ case MemberDef::Event: memType="event"; break;
}
QCString scopeName;
@@ -1324,8 +1383,8 @@ static void generatePerlModForMember(MemberDef *md,PerlModOutput &output,Definit
output.closeHash();
}
-static void generatePerlModSection(Definition *d,PerlModOutput &output,
- MemberList *ml,const char *name,const char *header=0)
+void PerlModGenerator::generatePerlModSection(Definition *d,
+ MemberList *ml,const char *name,const char *header)
{
if (ml->count()==0) return; // empty list
@@ -1339,13 +1398,13 @@ static void generatePerlModSection(Definition *d,PerlModOutput &output,
MemberDef *md;
for (mli.toFirst();(md=mli.current());++mli)
{
- generatePerlModForMember(md,output,d);
+ generatePerlModForMember(md,d);
}
output.closeList()
.closeHash();
}
-static void addListOfAllMembers(ClassDef *cd, PerlModOutput &output)
+void PerlModGenerator::addListOfAllMembers(ClassDef *cd, PerlModOutput &output)
{
output.openList("all_members");
MemberNameInfoSDict::Iterator mnii(*cd->memberNameInfoSDict());
@@ -1376,7 +1435,7 @@ static void addListOfAllMembers(ClassDef *cd, PerlModOutput &output)
output.closeList();
}
-static void generatePerlModForClass(ClassDef *cd, PerlModOutput &output)
+void PerlModGenerator::generatePerlModForClass(ClassDef *cd, PerlModOutput &output)
{
// + brief description
// + detailed description
@@ -1465,31 +1524,31 @@ static void generatePerlModForClass(ClassDef *cd, PerlModOutput &output)
MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
- generatePerlModSection(cd,output,mg->members(),"user_defined",mg->header());
-
- generatePerlModSection(cd,output,&cd->pubTypes,"public_typedefs");
- generatePerlModSection(cd,output,&cd->pubMethods,"public_methods");
- generatePerlModSection(cd,output,&cd->pubAttribs,"public_members");
- generatePerlModSection(cd,output,&cd->pubSlots,"public_slots");
- generatePerlModSection(cd,output,&cd->signals,"signals");
- generatePerlModSection(cd,output,&cd->dcopMethods,"dcop_methods");
- generatePerlModSection(cd,output,&cd->properties,"properties");
- generatePerlModSection(cd,output,&cd->pubStaticMethods,"public_static_methods");
- generatePerlModSection(cd,output,&cd->pubStaticAttribs,"public_static_members");
- generatePerlModSection(cd,output,&cd->proTypes,"protected_typedefs");
- generatePerlModSection(cd,output,&cd->proMethods,"protected_methods");
- generatePerlModSection(cd,output,&cd->proAttribs,"protected_members");
- generatePerlModSection(cd,output,&cd->proSlots,"protected_slots");
- generatePerlModSection(cd,output,&cd->proStaticMethods,"protected_static_methods");
- generatePerlModSection(cd,output,&cd->proStaticAttribs,"protected_static_members");
- generatePerlModSection(cd,output,&cd->priTypes,"private_typedefs");
- generatePerlModSection(cd,output,&cd->priMethods,"private_methods");
- generatePerlModSection(cd,output,&cd->priAttribs,"private_members");
- generatePerlModSection(cd,output,&cd->priSlots,"private_slots");
- generatePerlModSection(cd,output,&cd->priStaticMethods,"private_static_methods");
- generatePerlModSection(cd,output,&cd->priStaticAttribs,"private_static_members");
- generatePerlModSection(cd,output,&cd->friends,"friend_methods");
- generatePerlModSection(cd,output,&cd->related,"related_methods");
+ generatePerlModSection(cd,mg->members(),"user_defined",mg->header());
+
+ generatePerlModSection(cd,&cd->pubTypes,"public_typedefs");
+ generatePerlModSection(cd,&cd->pubMethods,"public_methods");
+ generatePerlModSection(cd,&cd->pubAttribs,"public_members");
+ generatePerlModSection(cd,&cd->pubSlots,"public_slots");
+ generatePerlModSection(cd,&cd->signals,"signals");
+ generatePerlModSection(cd,&cd->dcopMethods,"dcop_methods");
+ generatePerlModSection(cd,&cd->properties,"properties");
+ generatePerlModSection(cd,&cd->pubStaticMethods,"public_static_methods");
+ generatePerlModSection(cd,&cd->pubStaticAttribs,"public_static_members");
+ generatePerlModSection(cd,&cd->proTypes,"protected_typedefs");
+ generatePerlModSection(cd,&cd->proMethods,"protected_methods");
+ generatePerlModSection(cd,&cd->proAttribs,"protected_members");
+ generatePerlModSection(cd,&cd->proSlots,"protected_slots");
+ generatePerlModSection(cd,&cd->proStaticMethods,"protected_static_methods");
+ generatePerlModSection(cd,&cd->proStaticAttribs,"protected_static_members");
+ generatePerlModSection(cd,&cd->priTypes,"private_typedefs");
+ generatePerlModSection(cd,&cd->priMethods,"private_methods");
+ generatePerlModSection(cd,&cd->priAttribs,"private_members");
+ generatePerlModSection(cd,&cd->priSlots,"private_slots");
+ generatePerlModSection(cd,&cd->priStaticMethods,"private_static_methods");
+ generatePerlModSection(cd,&cd->priStaticAttribs,"private_static_members");
+ generatePerlModSection(cd,&cd->friends,"friend_methods");
+ generatePerlModSection(cd,&cd->related,"related_methods");
addPerlModDocBlock(output,"brief",cd->getDefFileName(),cd->getDefLine(),cd->name(),0,cd->briefDescription());
addPerlModDocBlock(output,"detailed",cd->getDefFileName(),cd->getDefLine(),cd->name(),0,cd->documentation());
@@ -1523,7 +1582,7 @@ static void generatePerlModForClass(ClassDef *cd, PerlModOutput &output)
output.closeHash();
}
-static void generatePerlModForNamespace(NamespaceDef *nd, PerlModOutput &output)
+void PerlModGenerator::generatePerlModForNamespace(NamespaceDef *nd, PerlModOutput &output)
{
// + contained class definitions
// + contained namespace definitions
@@ -1568,14 +1627,14 @@ static void generatePerlModForNamespace(NamespaceDef *nd, PerlModOutput &output)
MemberGroupSDict::Iterator mgli(*nd->memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
- generatePerlModSection(nd,output,mg->members(),"user-defined",mg->header());
+ generatePerlModSection(nd,mg->members(),"user-defined",mg->header());
- generatePerlModSection(nd,output,&nd->decDefineMembers,"defines");
- generatePerlModSection(nd,output,&nd->decProtoMembers,"prototypes");
- generatePerlModSection(nd,output,&nd->decTypedefMembers,"typedefs");
- generatePerlModSection(nd,output,&nd->decEnumMembers,"enums");
- generatePerlModSection(nd,output,&nd->decFuncMembers,"functions");
- generatePerlModSection(nd,output,&nd->decVarMembers,"variables");
+ generatePerlModSection(nd,&nd->decDefineMembers,"defines");
+ generatePerlModSection(nd,&nd->decProtoMembers,"prototypes");
+ generatePerlModSection(nd,&nd->decTypedefMembers,"typedefs");
+ generatePerlModSection(nd,&nd->decEnumMembers,"enums");
+ generatePerlModSection(nd,&nd->decFuncMembers,"functions");
+ generatePerlModSection(nd,&nd->decVarMembers,"variables");
addPerlModDocBlock(output,"brief",nd->getDefFileName(),nd->getDefLine(),0,0,nd->briefDescription());
addPerlModDocBlock(output,"detailed",nd->getDefFileName(),nd->getDefLine(),0,0,nd->documentation());
@@ -1583,7 +1642,7 @@ static void generatePerlModForNamespace(NamespaceDef *nd, PerlModOutput &output)
output.closeHash();
}
-static void generatePerlModForFile(FileDef *fd, PerlModOutput &output)
+void PerlModGenerator::generatePerlModForFile(FileDef *fd, PerlModOutput &output)
{
// + includes files
// + includedby files
@@ -1633,12 +1692,12 @@ static void generatePerlModForFile(FileDef *fd, PerlModOutput &output)
}
output.closeList();
- generatePerlModSection(fd,output,&fd->decDefineMembers,"defines");
- generatePerlModSection(fd,output,&fd->decProtoMembers,"prototypes");
- generatePerlModSection(fd,output,&fd->decTypedefMembers,"typedefs");
- generatePerlModSection(fd,output,&fd->decEnumMembers,"enums");
- generatePerlModSection(fd,output,&fd->decFuncMembers,"functions");
- generatePerlModSection(fd,output,&fd->decVarMembers,"variables");
+ generatePerlModSection(fd,&fd->decDefineMembers,"defines");
+ generatePerlModSection(fd,&fd->decProtoMembers,"prototypes");
+ generatePerlModSection(fd,&fd->decTypedefMembers,"typedefs");
+ generatePerlModSection(fd,&fd->decEnumMembers,"enums");
+ generatePerlModSection(fd,&fd->decFuncMembers,"functions");
+ generatePerlModSection(fd,&fd->decVarMembers,"variables");
addPerlModDocBlock(output,"brief",fd->getDefFileName(),fd->getDefLine(),0,0,fd->briefDescription());
addPerlModDocBlock(output,"detailed",fd->getDefFileName(),fd->getDefLine(),0,0,fd->documentation());
@@ -1646,7 +1705,7 @@ static void generatePerlModForFile(FileDef *fd, PerlModOutput &output)
output.closeHash();
}
-static void generatePerlModForGroup(GroupDef *gd, PerlModOutput &output)
+void PerlModGenerator::generatePerlModForGroup(GroupDef *gd, PerlModOutput &output)
{
// + members
// + member groups
@@ -1734,14 +1793,14 @@ static void generatePerlModForGroup(GroupDef *gd, PerlModOutput &output)
MemberGroupSDict::Iterator mgli(*gd->memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
- generatePerlModSection(gd,output,mg->members(),"user-defined",mg->header());
+ generatePerlModSection(gd,mg->members(),"user-defined",mg->header());
- generatePerlModSection(gd,output,&gd->decDefineMembers,"defines");
- generatePerlModSection(gd,output,&gd->decProtoMembers,"prototypes");
- generatePerlModSection(gd,output,&gd->decTypedefMembers,"typedefs");
- generatePerlModSection(gd,output,&gd->decEnumMembers,"enums");
- generatePerlModSection(gd,output,&gd->decFuncMembers,"functions");
- generatePerlModSection(gd,output,&gd->decVarMembers,"variables");
+ generatePerlModSection(gd,&gd->decDefineMembers,"defines");
+ generatePerlModSection(gd,&gd->decProtoMembers,"prototypes");
+ generatePerlModSection(gd,&gd->decTypedefMembers,"typedefs");
+ generatePerlModSection(gd,&gd->decEnumMembers,"enums");
+ generatePerlModSection(gd,&gd->decFuncMembers,"functions");
+ generatePerlModSection(gd,&gd->decVarMembers,"variables");
addPerlModDocBlock(output,"brief",gd->getDefFileName(),gd->getDefLine(),0,0,gd->briefDescription());
addPerlModDocBlock(output,"detailed",gd->getDefFileName(),gd->getDefLine(),0,0,gd->documentation());
@@ -1749,7 +1808,7 @@ static void generatePerlModForGroup(GroupDef *gd, PerlModOutput &output)
output.closeHash();
}
-static void generatePerlModForPage(PageInfo *pi, PerlModOutput &output)
+void PerlModGenerator::generatePerlModForPage(PageInfo *pi, PerlModOutput &output)
{
// + name
// + title
@@ -1767,16 +1826,76 @@ static void generatePerlModForPage(PageInfo *pi, PerlModOutput &output)
addPerlModDocBlock(output,"detailed",pi->defFileName,pi->defLine,0,0,pi->doc);
}
-void generatePerlMod()
+bool PerlModGenerator::generatePerlModOutput()
{
- // + classes
- // + namespaces
- // + files
- // - packages
- // + groups
- // + related pages
- // - examples
+ QFile outputFile;
+ if (!createOutputFile(outputFile, pathDoxyDocsPM))
+ return false;
+
+ QTextStream outputTextStream(&outputFile);
+ PerlModOutputStream outputStream(&outputTextStream);
+ output.setPerlModOutputStream(&outputStream);
+ output.add("$doxydocs =\n").openHash();
+
+ output.openList("classes");
+ ClassSDict::Iterator cli(Doxygen::classSDict);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ generatePerlModForClass(cd,output);
+ output.closeList();
+
+ output.openList("namespaces");
+ NamespaceSDict::Iterator nli(Doxygen::namespaceSDict);
+ NamespaceDef *nd;
+ for (nli.toFirst();(nd=nli.current());++nli)
+ generatePerlModForNamespace(nd,output);
+ output.closeList();
+
+ output.openList("files");
+ FileNameListIterator fnli(Doxygen::inputNameList);
+ FileName *fn;
+ for (;(fn=fnli.current());++fnli)
+ {
+ FileNameIterator fni(*fn);
+ FileDef *fd;
+ for (;(fd=fni.current());++fni)
+ generatePerlModForFile(fd,output);
+ }
+ output.closeList();
+
+ output.openList("groups");
+ GroupSDict::Iterator gli(Doxygen::groupSDict);
+ GroupDef *gd;
+ for (;(gd=gli.current());++gli)
+ generatePerlModForGroup(gd,output);
+ output.closeList();
+
+ output.openList("pages");
+ PageSDict::Iterator pdi(*Doxygen::pageSDict);
+ PageInfo *pi=0;
+ for (pdi.toFirst();(pi=pdi.current());++pdi)
+ generatePerlModForPage(pi,output);
+ if (Doxygen::mainPage)
+ generatePerlModForPage(Doxygen::mainPage,output);
+ output.closeList();
+
+ output.closeHash().add(";\n1;\n");
+ return true;
+}
+
+bool PerlModGenerator::createOutputFile(QFile &f, const char *s)
+{
+ f.setName(s);
+ if (!f.open(IO_WriteOnly))
+ {
+ err("Cannot open file %s for writing!\n", s);
+ return false;
+ }
+ return true;
+}
+bool PerlModGenerator::createOutputDir(QDir &perlModDir)
+{
QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
if (outputDirectory.isEmpty())
{
@@ -1811,75 +1930,620 @@ void generatePerlMod()
if (!dir.mkdir(outputDirectory))
{
err("Cannot create directory %s\n",outputDirectory.data());
- return;
+ return false;
}
}
- QDir perlmodDir(outputDirectory+"/perlmod");
- if (!perlmodDir.exists() && !perlmodDir.mkdir(outputDirectory+"/perlmod"))
+ perlModDir.setPath(outputDirectory+"/perlmod");
+ if (!perlModDir.exists() && !perlModDir.mkdir(outputDirectory+"/perlmod"))
{
err("Could not create perlmod directory in %s\n",outputDirectory.data());
- return;
+ return false;
+ }
+ return true;
+}
+
+bool PerlModGenerator::generateDoxyModelPM()
+{
+ QFile doxyModelPM;
+ if (!createOutputFile(doxyModelPM, pathDoxyModelPM))
+ return false;
+
+ QTextStream doxyModelPMStream(&doxyModelPM);
+ doxyModelPMStream <<
+ "sub memberlist($) {\n"
+ " my $prefix = $_[0];\n"
+ " return\n"
+ "\t[ \"hash\", $prefix . \"s\",\n"
+ "\t {\n"
+ "\t members =>\n"
+ "\t [ \"list\", $prefix . \"List\",\n"
+ "\t\t[ \"hash\", $prefix,\n"
+ "\t\t {\n"
+ "\t\t kind => [ \"string\", $prefix . \"Kind\" ],\n"
+ "\t\t name => [ \"string\", $prefix . \"Name\" ],\n"
+ "\t\t static => [ \"string\", $prefix . \"Static\" ],\n"
+ "\t\t virtualness => [ \"string\", $prefix . \"Virtualness\" ],\n"
+ "\t\t protection => [ \"string\", $prefix . \"Protection\" ],\n"
+ "\t\t type => [ \"string\", $prefix . \"Type\" ],\n"
+ "\t\t parameters =>\n"
+ "\t\t [ \"list\", $prefix . \"Params\",\n"
+ "\t\t\t[ \"hash\", $prefix . \"Param\",\n"
+ "\t\t\t {\n"
+ "\t\t\t declaration_name => [ \"string\", $prefix . \"ParamName\" ],\n"
+ "\t\t\t type => [ \"string\", $prefix . \"ParamType\" ],\n"
+ "\t\t\t },\n"
+ "\t\t\t],\n"
+ "\t\t ],\n"
+ "\t\t detailed =>\n"
+ "\t\t [ \"hash\", $prefix . \"Detailed\",\n"
+ "\t\t\t{\n"
+ "\t\t\t doc => [ \"doc\", $prefix . \"DetailedDoc\" ],\n"
+ "\t\t\t return => [ \"doc\", $prefix . \"Return\" ],\n"
+ "\t\t\t see => [ \"doc\", $prefix . \"See\" ],\n"
+ "\t\t\t params =>\n"
+ "\t\t\t [ \"list\", $prefix . \"PDBlocks\",\n"
+ "\t\t\t [ \"hash\", $prefix . \"PDBlock\",\n"
+ "\t\t\t\t{\n"
+ "\t\t\t\t parameters =>\n"
+ "\t\t\t\t [ \"list\", $prefix . \"PDParams\",\n"
+ "\t\t\t\t [ \"hash\", $prefix . \"PDParam\",\n"
+ "\t\t\t\t\t{\n"
+ "\t\t\t\t\t name => [ \"string\", $prefix . \"PDParamName\" ],\n"
+ "\t\t\t\t\t},\n"
+ "\t\t\t\t ],\n"
+ "\t\t\t\t ],\n"
+ "\t\t\t\t doc => [ \"doc\", $prefix . \"PDDoc\" ],\n"
+ "\t\t\t\t},\n"
+ "\t\t\t ],\n"
+ "\t\t\t ],\n"
+ "\t\t\t},\n"
+ "\t\t ],\n"
+ "\t\t },\n"
+ "\t\t],\n"
+ "\t ],\n"
+ "\t },\n"
+ "\t];\n"
+ "}\n"
+ "\n"
+ "$doxymodel =\n"
+ " [ \"hash\", \"Root\",\n"
+ " {\n"
+ "\tfiles =>\n"
+ "\t [ \"list\", \"Files\",\n"
+ "\t [ \"hash\", \"File\",\n"
+ "\t {\n"
+ "\t\tname => [ \"string\", \"FileName\" ],\n"
+ "\t\ttypedefs => memberlist(\"FileTypedef\"),\n"
+ "\t\tvariables => memberlist(\"FileVariable\"),\n"
+ "\t\tfunctions => memberlist(\"FileFunction\"),\n"
+ "\t\tdetailed =>\n"
+ "\t\t [ \"hash\", \"FileDetailed\",\n"
+ "\t\t {\n"
+ "\t\t doc => [ \"doc\", \"FileDetailedDoc\" ],\n"
+ "\t\t },\n"
+ "\t\t ],\n"
+ "\t },\n"
+ "\t ],\n"
+ "\t ],\n"
+ "\tclasses =>\n"
+ "\t [ \"list\", \"Classes\",\n"
+ "\t [ \"hash\", \"Class\",\n"
+ "\t {\n"
+ "\t\tname => [ \"string\", \"ClassName\" ],\n"
+ "\t\tpublic_typedefs => memberlist(\"ClassPublicTypedef\"),\n"
+ "\t\tpublic_methods => memberlist(\"ClassPublicMethod\"),\n"
+ "\t\tpublic_members => memberlist(\"ClassPublicMember\"),\n"
+ "\t\tprotected_typedefs => memberlist(\"ClassProtectedTypedef\"),\n"
+ "\t\tprotected_methods => memberlist(\"ClassProtectedMethod\"),\n"
+ "\t\tprotected_members => memberlist(\"ClassProtectedMember\"),\n"
+ "\t\tprivate_typedefs => memberlist(\"ClassPrivateTypedef\"),\n"
+ "\t\tprivate_methods => memberlist(\"ClassPrivateMethod\"),\n"
+ "\t\tprivate_members => memberlist(\"ClassPrivateMember\"),\n"
+ "\t\tdetailed =>\n"
+ "\t\t [ \"hash\", \"ClassDetailed\",\n"
+ "\t\t {\n"
+ "\t\t doc => [ \"doc\", \"ClassDetailedDoc\" ],\n"
+ " \t\t },\n"
+ "\t\t ],\n"
+ "\t },\n"
+ "\t ],\n"
+ "\t ],\n"
+ " },\n"
+ " ];\n"
+ "\n"
+ "1;\n";
+
+ return true;
+}
+
+bool PerlModGenerator::generateDoxyRules()
+{
+ QFile doxyRules;
+ if (!createOutputFile(doxyRules, pathDoxyRules))
+ return false;
+
+ bool perlmodLatex = Config_getBool("PERLMOD_LATEX");
+
+ QTextStream doxyRulesStream(&doxyRules);
+ doxyRulesStream <<
+ "DOXYEXECPATH = " << pathDoxyExec << "\n"
+ "DOXYFILE = " << pathDoxyfile << "\n"
+ "DOXYDOCS_PM = " << pathDoxyDocsPM << "\n"
+ "DOXYMODEL_PM = " << pathDoxyModelPM << "\n"
+ "DOXYRULES = " << pathDoxyRules << "\n";
+ if (perlmodLatex)
+ doxyRulesStream <<
+ "DOXYLATEX_PL = " << pathDoxyLatexPL << "\n"
+ "DOXYLATEXTEMPLATE_PL = " << pathDoxyLatexTemplatePL << "\n"
+ "DOXYTEMPLATE_TEX = " << pathDoxyTemplateTex << "\n"
+ "DOXYDOCS_TEX = " << pathDoxyDocsTex << "\n"
+ "DOXYFORMAT_TEX = " << pathDoxyFormatTex << "\n"
+ "DOXYLATEX_TEX = " << pathDoxyLatexTex << "\n"
+ "DOXYLATEX_DVI = " << pathDoxyLatexDVI << "\n"
+ "DOXYLATEX_PDF = " << pathDoxyLatexPDF << "\n";
+
+ doxyRulesStream <<
+ "\n"
+ ".PHONY: clean-perlmod\n"
+ "clean-perlmod:\n"
+ "\trm -f $(DOXYMODEL_PM) $(DOXYDOCS_PM)";
+ if (perlmodLatex)
+ doxyRulesStream <<
+ " \\\n"
+ "\t$(DOXYLATEX_PL) $(DOXYLATEXTEMPLATE_PL) \\\n"
+ "\t$(DOXYDOCS_TEX) $(DOXYTEMPLATE_TEX) \\\n"
+ "\t$(DOXYFORMAT_TEX) $(DOXYLATEX_TEX) \\\n"
+ "\t$(DOXYLATEX_PDF) $(DOXYLATEX_DVI) \\\n"
+ "\t$(addprefix $(DOXYLATEX_TEX:tex=),out aux log)";
+ doxyRulesStream << "\n\n";
+
+ doxyRulesStream <<
+ "$(DOXYRULES) $(DOXYMAKEFILE) $(DOXYMODEL_PM) $(DOXYDOCS_PM)";
+ if (perlmodLatex) {
+ doxyRulesStream <<
+ " \\\n"
+ "$(DOXYLATEX_PL) $(DOXYLATEXTEMPLATE_PL) \\\n"
+ "$(DOXYFORMAT_TEX) $(DOXYLATEX_TEX)";
+ }
+ doxyRulesStream <<
+ ": $(DOXYFILE)\n"
+ "\tcd $(DOXYEXECPATH) ; doxygen \"$<\"\n";
+
+ if (perlmodLatex) {
+ doxyRulesStream <<
+ "\n"
+ "$(DOXYDOCS_TEX): $(DOXYLATEX_PL) $(DOXYDOCS_PM)\n"
+ "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
+ "\n"
+ "$(DOXYTEMPLATE_TEX): $(DOXYLATEXTEMPLATE_PL) $(DOXYMODEL_PM)\n"
+ "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
+ "\n"
+ "$(DOXYLATEX_PDF) $(DOXYLATEX_DVI): $(DOXYLATEX_TEX) $(DOXYFORMAT_TEX) $(DOXYTEMPLATE_TEX) $(DOXYDOCS_TEX)\n"
+ "\n"
+ "$(DOXYLATEX_PDF): $(DOXYLATEX_TEX)\n"
+ "\tpdflatex -interaction=nonstopmode \"$<\"\n"
+ "\n"
+ "$(DOXYLATEX_DVI): $(DOXYLATEX_TEX)\n"
+ "\tlatex -interaction=nonstopmode \"$<\"\n";
}
- QCString fileName=outputDirectory+"/perlmod/DoxyDocs.pm";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
+ return true;
+}
+
+bool PerlModGenerator::generateMakefile()
+{
+ QFile makefile;
+ if (!createOutputFile(makefile, pathMakefile))
+ return false;
+
+ bool perlmodLatex = Config_getBool("PERLMOD_LATEX");
+
+ QTextStream makefileStream(&makefile);
+ makefileStream <<
+ ".PHONY: default clean" << (perlmodLatex ? " pdf" : "") << "\n"
+ "default: " << (perlmodLatex ? "pdf" : "clean") << "\n"
+ "\n"
+ "include " << pathDoxyRules << "\n"
+ "\n"
+ "clean: clean-perlmod\n";
+
+ if (perlmodLatex) {
+ makefileStream <<
+ "pdf: $(DOXYLATEX_PDF)\n"
+ "dvi: $(DOXYLATEX_DVI)\n";
}
-
- QTextStream t(&f);
- PerlModOutputStream os(&t);
- PerlModOutput output(&os);
- output.add("$doxydocs =\n").openHash();
-
- output.openList("classes");
- ClassSDict::Iterator cli(Doxygen::classSDict);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- generatePerlModForClass(cd,output);
- output.closeList();
- output.openList("namespaces");
- NamespaceSDict::Iterator nli(Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- generatePerlModForNamespace(nd,output);
- output.closeList();
+ return true;
+}
+
+bool PerlModGenerator::generateDoxyLatexTemplatePL()
+{
+ QFile doxyLatexTemplatePL;
+ if (!createOutputFile(doxyLatexTemplatePL, pathDoxyLatexTemplatePL))
+ return false;
+
+ QTextStream doxyLatexTemplatePLStream(&doxyLatexTemplatePL);
+ doxyLatexTemplatePLStream <<
+ "use DoxyModel;\n"
+ "\n"
+ "sub template($) {\n"
+ "\tmy $model = $_[0];\n"
+ "\tmy ($type, $name) = @$model[0, 1];\n"
+ "\tif ($type eq \"string\") {\n"
+ "\t\tprint \"\\\\def\\\\\" . $name . \"#1{#1}%\\n\";\n"
+ "\t} elsif ($type eq \"doc\") {\n"
+ "\t\tprint \"\\\\def\\\\\" . $name . \"#1{#1}%\\n\";\n"
+ "\t} elsif ($type eq \"hash\") {\n"
+ "\t\tmy ($key, $value);\n"
+ "\t\twhile (($key, $submodel) = each %{$$model[2]}) {\n"
+ "\t\t\tmy $subname = $$submodel[1];\n"
+ "\t\t\tprint \"\\\\def\\\\\" . $subname . \"Empty{}%\\n\";\n"
+ "\t\t\tprint \"\\\\def\\\\field\" . $subname . \"Empty{\\\\\" . $subname . \"Empty}%\\n\";\n"
+ "\t\t\ttemplate($submodel);\n"
+ "\t\t}\n"
+ "\t\tprint \"\\\\def\\\\\" . $name . \"{}%\\n\";\n"
+ "\t} elsif ($type eq \"list\") {\n"
+ "\t\ttemplate($$model[2]);\n"
+ "\t\tprint \"\\\\def\\\\\" . $name . \"#1{#1}%\\n\";\n"
+ "\t\tprint \"\\\\def\\\\\" . $name . \"Sep{}%\\n\";\n"
+ "\t}\n"
+ "}\n"
+ "\n"
+ "template($doxymodel);\n";
+
+ return true;
+}
+
+bool PerlModGenerator::generateDoxyLatexPL()
+{
+ QFile doxyLatexPL;
+ if (!createOutputFile(doxyLatexPL, pathDoxyLatexPL))
+ return false;
+
+ QTextStream doxyLatexPLStream(&doxyLatexPL);
+ doxyLatexPLStream <<
+ "use DoxyModel;\n"
+ "use DoxyDocs;\n"
+ "\n"
+ "sub latex_quote($) {\n"
+ "\tmy $text = $_[0];\n"
+ "\t$text =~ s/\\\\/\\\\textbackslash /g;\n"
+ "\t$text =~ s/~/\\\\textasciitilde /g;\n"
+ "\t$text =~ s/</\\\\textasciiless /g;\n"
+ "\t$text =~ s/>/\\\\textasciigreater /g;\n"
+ "\t$text =~ s/\\\\^/\\\\textasciicircum /g;\n"
+ "\t$text =~ s/[\\$&%#_{}]/\\\\$&/g;\n"
+ "\tprint $text;\n"
+ "}\n"
+ "\n"
+ "sub generate_doc($) {\n"
+ "\tmy $doc = $_[0];\n"
+ "\tfor my $item (@$doc) {\n"
+ "\t\tmy $type = $$item{type};\n"
+ "\t\tif ($type eq \"text\") {\n"
+ "\t\t\tlatex_quote($$item{content});\n"
+ "\t\t} elsif ($type eq \"para\") {\n"
+ "\t\t\tgenerate_doc($$item{content});\n"
+ "#\t\t\tprint \"\\\\par\\n\";\n"
+ "\t\t} elsif ($type eq \"bold\") {\n"
+ "\t\t\tprint \"\\\\textbf{\";\n"
+ "\t\t\tgenerate_doc($$item{content});\n"
+ "\t\t\tprint \"}\";\n"
+ "\t\t} elsif ($type eq \"emphasis\") {\n"
+ "\t\t\tprint \"\\\\textit{\";\n"
+ "\t\t\tgenerate_doc($$item{content});\n"
+ "\t\t\tprint \"}\";\n"
+ "\t\t} elsif ($type eq \"url\") {\n"
+ "\t\t\tlatex_quote($$item{content});\n"
+ "\t\t}\n"
+ "\t}\n"
+ "}\n"
+ "\n"
+ "sub generate($$) {\n"
+ "\tmy ($item, $model) = @_;\n"
+ "\tmy ($type, $name) = @$model[0, 1];\n"
+ "\tif ($type eq \"string\") {\n"
+ "\t\tprint \"\\\\\" . $name . \"{\";\n"
+ "\t\tlatex_quote($item);\n"
+ "\t\tprint \"}\";\n"
+ "\t} elsif ($type eq \"doc\") {\n"
+ "\t\tif (@$item) {\n"
+ "\t\t\tprint \"\\\\\" . $name . \"{\";\n"
+ "\t\t\tgenerate_doc($item);\n"
+ "\t\t\tprint \"}%\\n\";\n"
+ "\t\t} else {\n"
+ "\t\t\tprint \"\\\\\" . $name . \"Empty%\\n\";\n"
+ "\t\t}\n"
+ "\t} elsif ($type eq \"hash\") {\n"
+ "\t\tmy ($key, $value);\n"
+ "\t\twhile (($key, $submodel) = each %{$$model[2]}) {\n"
+ "\t\t\tmy $subname = $$submodel[1];\n"
+ "\t\t\tprint \"\\\\def\\\\field\" . $subname . \"{\";\n"
+ "\t\t\tif ($$item{$key}) {\n"
+ "\t\t\t\tgenerate($$item{$key}, $submodel);\n"
+ "\t\t\t} else {\n"
+ "\t\t\t\t\tprint \"\\\\\" . $subname . \"Empty%\\n\";\n"
+ "\t\t\t}\n"
+ "\t\t\tprint \"}%\\n\";\n"
+ "\t\t}\n"
+ "\t\tprint \"\\\\\" . $name . \"%\\n\";\n"
+ "\t} elsif ($type eq \"list\") {\n"
+ "\t\tmy $index = 0;\n"
+ "\t\tif (@$item) {\n"
+ "\t\t\tprint \"\\\\\" . $name . \"{%\\n\";\n"
+ "\t\t\tfor my $subitem (@$item) {\n"
+ "\t\t\t\tif ($index) {\n"
+ "\t\t\t\t\tprint \"\\\\\" . $name . \"Sep%\\n\";\n"
+ "\t\t\t\t}\n"
+ "\t\t\t\tgenerate($subitem, $$model[2]);\n"
+ "\t\t\t\t$index++;\n"
+ "\t\t\t}\n"
+ "\t\t\tprint \"}%\\n\";\n"
+ "\t\t} else {\n"
+ "\t\t\tprint \"\\\\\" . $name . \"Empty%\\n\";\n"
+ "\t\t}\n"
+ "\t}\n"
+ "}\n"
+ "\n"
+ "generate($doxydocs, $doxymodel);\n";
+
+ return true;
+}
+
+bool PerlModGenerator::generateDoxyFormatTex()
+{
+ QFile doxyFormatTex;
+ if (!createOutputFile(doxyFormatTex, pathDoxyFormatTex))
+ return false;
+
+ QTextStream doxyFormatTexStream(&doxyFormatTex);
+ doxyFormatTexStream <<
+ "\\input{" << pathDoxyTemplateTex << "}\n"
+ "\n"
+ "\\newbox\\BoxA\n"
+ "\\dimendef\\DimenA=151\\relax\n"
+ "\\dimendef\\DimenB=152\\relax\n"
+ "\\countdef\\ZoneDepth=151\\relax\n"
+ "\n"
+ "\\def\\Ifxcscs#1#2{%\n"
+ "\\expandafter\\let\\expandafter\\Ifxcscsa\\csname#1\\endcsname%\n"
+ "\\expandafter\\let\\expandafter\\Ifxcscsb\\csname#2\\endcsname%\n"
+ "\\ifx\\Ifxcscsa\\Ifxcscsb}%\n"
+ "\n"
+ "\\def\\Cs#1{\\csname#1\\endcsname}%\n"
+ "\\def\\Defcs#1{\\expandafter\\def\\csname#1\\endcsname}%\n"
+ "\\def\\Letcs#1{\\expandafter\\let\\csname#1\\endcsname}%\n"
+ "\\def\\Heading#1{\\vskip 4mm\\relax\\textbf{#1}}%\n"
+ "\\def\\See#1{\\begin{flushleft}\\Heading{See also: }#1\\end{flushleft}}%\n"
+ "\n"
+ "\\def\\Frame#1{\\vskip 3mm\\relax\\fbox{ \\vbox{\\hsize0.95\\hsize\\vskip 1mm\\relax%\n"
+ "\\raggedright#1\\vskip 0.5mm\\relax} }}%\n"
+ "\n"
+ "\\def\\Zone#1#2#3{%\n"
+ "\\Defcs{#1}{\n"
+ "\\advance\\ZoneDepth1\\relax%\n"
+ "\\Letcs{Mode\\number\\ZoneDepth}0%\n"
+ "\\Letcs{Present\\number\\ZoneDepth}0%\n"
+ "#2%\n"
+ "\\expandafter\\if\\Cs{Present\\number\\ZoneDepth}1%\n"
+ "\\advance\\ZoneDepth-1\\relax%\n"
+ "\\Letcs{Present\\number\\ZoneDepth}1%\n"
+ "\\expandafter\\if\\Cs{Mode\\number\\ZoneDepth}1%\n"
+ "\\advance\\ZoneDepth1\\relax%\n"
+ "\\Letcs{Mode\\number\\ZoneDepth}1%\n"
+ "#3%\n"
+ "\\advance\\ZoneDepth-1\\relax\\fi%\n"
+ "\\advance\\ZoneDepth1\\relax\\fi%\n"
+ "\\advance\\ZoneDepth-1\\relax}}%\n"
+ "\n"
+ "\\def\\Member#1#2{%\n"
+ "\\Defcs{Test#1}{\\Cs{field#1Detailed}%\n"
+ "\\Ifxcscs{field#1DetailedDoc}{field#1DetailedDocEmpty}\\else\\Letcs{Present#1}1\\fi}\n"
+ "\\Defcs{#1}{\\Letcs{Present#1}0%\n"
+ "\\Cs{Test#1}\\if1\\Cs{Present#1}\\Letcs{Present\\number\\ZoneDepth}1%\n"
+ "\\if1\\Cs{Mode\\number\\ZoneDepth}#2\\fi\\fi}}%\n"
+ "%\n"
+ "\\def\\TypedefMemberList#1#2{%\n"
+ "\\Defcs{#1DetailedDoc}##1{\\vskip 5.5mm\\relax##1}%\n"
+ "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
+ "\\Defcs{#1See}##1{\\See{##1}}%\n"
+ "%\n"
+ "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
+ "\\Member{#1}{\\Frame{typedef \\Cs{field#1Type} \\Cs{field#1Name}}%\n"
+ "\\Cs{field#1DetailedDoc}\\Cs{field#1See}\\vskip 5mm\\relax}}%\n"
+ "\n"
+ "\\def\\VariableMemberList#1#2{%\n"
+ "\\Defcs{#1DetailedDoc}##1{\\vskip 5.5mm\\relax##1}%\n"
+ "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
+ "\\Defcs{#1See}##1{\\See{##1}}%\n"
+ "%\n"
+ "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
+ "\\Member{#1}{\\Frame{\\Cs{field#1Type}{} \\Cs{field#1Name}}%\n"
+ "\\Cs{field#1DetailedDoc}\\Cs{field#1See}\\vskip 5mm\\relax}}%\n"
+ "\n"
+ "\\def\\FunctionMemberList#1#2{%\n"
+ "\\Defcs{#1PDParamName}##1{\\textit{##1}}%\n"
+ "\\Defcs{#1PDParam}{\\Cs{field#1PDParamName}}%\n"
+ "\\Defcs{#1PDParamsSep}{, }%\n"
+ "\\Defcs{#1PDBlocksSep}{\\vskip 2mm\\relax}%\n"
+ "%\n"
+ "\\Defcs{#1PDBlocks}##1{%\n"
+ "\\Heading{Parameters:}\\vskip 1.5mm\\relax%\n"
+ "\\DimenA0pt\\relax%\n"
+ "\\Defcs{#1PDBlock}{\\setbox\\BoxA\\hbox{\\Cs{field#1PDParams}}%\n"
+ "\\ifdim\\DimenA<\\wd\\BoxA\\DimenA\\wd\\BoxA\\fi}%\n"
+ "##1%\n"
+ "\\advance\\DimenA3mm\\relax\n"
+ "\\DimenB\\hsize\\advance\\DimenB-\\DimenA\\relax%\n"
+ "\\Defcs{#1PDBlock}{\\hbox to\\hsize{\\vtop{\\hsize\\DimenA\\relax%\n"
+ "\\Cs{field#1PDParams}}\\hfill%\n"
+ "\\vtop{\\hsize\\DimenB\\relax\\Cs{field#1PDDoc}}}}%\n"
+ "##1}%\n"
+ "%\n"
+ "\\Defcs{#1ParamName}##1{\\textit{##1}}%\n"
+ "\\Defcs{#1Param}{\\Cs{field#1ParamType}{} \\Cs{field#1ParamName}}%\n"
+ "\\Defcs{#1ParamsSep}{, }%\n"
+ "%\n"
+ "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
+ "\\Defcs{#1See}##1{\\See{##1}}%\n"
+ "\\Defcs{#1Return}##1{\\Heading{Returns: }##1}%\n"
+ "\\Defcs{field#1Title}{\\Frame{\\Cs{field#1Type}{} \\Cs{field#1Name}(\\Cs{field#1Params})}}%\n"
+ "%\n"
+ "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
+ "\\Member{#1}{\n"
+ "\\Cs{field#1Title}\\vskip 6mm\\relax\\Cs{field#1DetailedDoc}%\n"
+ "\\Cs{field#1Return}\\Cs{field#1PDBlocks}\\Cs{field#1See}\\vskip 5mm\\relax}}\n"
+ "\n"
+ "\\TypedefMemberList{FileTypedef}{Typedefs}%\n"
+ "\\VariableMemberList{FileVariable}{Variables}%\n"
+ "\\FunctionMemberList{FileFunction}{Functions}%\n"
+ "\n"
+ "\\def\\FileDetailed{\\fieldFileDetailedDoc\\par}%\n"
+ "\n"
+ "\\def\\TestFile{\\fieldFileTypedefs\\fieldFileVariables\\fieldFileFunctions}%\n"
+ "\\Zone{File}{\\TestFile}{\\subsection{\\fieldFileName}\\fieldFileDetailed\\TestFile}%\n"
+ "\n"
+ "\\TypedefMemberList{ClassPublicTypedef}{Public Typedefs}\n"
+ "\\TypedefMemberList{ClassProtectedTypedef}{Protected Typedefs}\n"
+ "\\TypedefMemberList{ClassPrivateTypedef}{Private Typedefs}\n"
+ "\\VariableMemberList{ClassPublicMember}{Public Members}\n"
+ "\\VariableMemberList{ClassProtectedMember}{Protected Members}\n"
+ "\\VariableMemberList{ClassPrivateMember}{Private Members}\n"
+ "\\FunctionMemberList{ClassPublicMethod}{Public Methods}\n"
+ "\\FunctionMemberList{ClassProtectedMethod}{Protected Methods}\n"
+ "\\FunctionMemberList{ClassPrivateMethod}{Private Methods}\n"
+ "\n"
+ "\\def\\ClassDetailed{\\fieldClassDetailedDoc\\par}%\n"
+ "\n"
+ "\\def\\TestClass{%\n"
+ "\\fieldClassPublicTypedefs\\fieldClassPublicMembers\\fieldClassPublicMethods%\n"
+ "\\fieldClassProtectedTypedefs\\fieldClassProtectedMembers\\fieldClassProtectedMethods%\n"
+ "\\fieldClassPrivateTypedefs\\fieldClassPrivateMembers\\fieldClassPrivateMethods}%\n"
+ "\n"
+ "\\Zone{Class}{\\TestClass}{\\subsection{\\fieldClassName}\\fieldClassDetailed\\TestClass}%\n"
+ "\n"
+ "\\Zone{AllFiles}{\\fieldFiles}{\\section{Files}\\fieldFiles}%\n"
+ "\\Zone{AllClasses}{\\fieldClasses}{\\section{Classes}\\fieldClasses}%\n"
+ "\n"
+ "\\newlength{\\oldparskip}%\n"
+ "\\newlength{\\oldparindent}%\n"
+ "\\newlength{\\oldfboxrule}%\n"
+ "\n"
+ "\\ZoneDepth0%\n"
+ "\\Letcs{Mode0}1%\n"
+ "\n"
+ "\\def\\EmitDoxyDocs{%\n"
+ "\\setlength{\\oldparskip}{\\parskip}%\n"
+ "\\setlength{\\oldparindent}{\\parindent}%\n"
+ "\\setlength{\\oldfboxrule}{\\fboxrule}%\n"
+ "\\setlength{\\parskip}{0cm}%\n"
+ "\\setlength{\\parindent}{0cm}%\n"
+ "\\setlength{\\fboxrule}{1pt}%\n"
+ "\\AllFiles\\AllClasses%\n"
+ "\\setlength{\\parskip}{\\oldparskip}%\n"
+ "\\setlength{\\parindent}{\\oldparindent}%\n"
+ "\\setlength{\\fboxrule}{\\oldfboxrule}}\n";
+
+ return true;
+}
+
+bool PerlModGenerator::generateDoxyLatexTex()
+{
+ QFile doxyLatexTex;
+ if (!createOutputFile(doxyLatexTex, pathDoxyLatexTex))
+ return false;
+
+ QTextStream doxyLatexTexStream(&doxyLatexTex);
+ doxyLatexTexStream <<
+ "\\documentclass[a4paper,12pt]{article}\n"
+ "\\usepackage[latin1]{inputenc}\n"
+ "\\usepackage[none]{hyphenat}\n"
+ "\\usepackage[T1]{fontenc}\n"
+ "\\usepackage{hyperref}\n"
+ "\\usepackage{times}\n"
+ "\n"
+ "\\input{doxyformat}\n"
+ "\n"
+ "\\begin{document}\n"
+ "\\input{" << pathDoxyDocsTex << "}\n"
+ "\\EmitDoxyDocs\n"
+ "\\end{document}\n";
+
+ return true;
+}
+
+void PerlModGenerator::generate()
+{
+ // + classes
+ // + namespaces
+ // + files
+ // - packages
+ // + groups
+ // + related pages
+ // - examples
- output.openList("files");
- FileNameListIterator fnli(Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- generatePerlModForFile(fd,output);
+ QDir perlModDir;
+ if (!createOutputDir(perlModDir))
+ return;
+
+ bool perlmodLatex = Config_getBool("PERLMOD_LATEX");
+
+ pathDoxyDocsPM = perlModDir.absPath() + "/DoxyDocs.pm";
+ pathDoxyModelPM = perlModDir.absPath() + "/DoxyModel.pm";
+ pathMakefile = perlModDir.absPath() + "/Makefile";
+ pathDoxyRules = perlModDir.absPath() + "/doxyrules.make";
+
+ if (perlmodLatex) {
+ pathDoxyTemplateTex = perlModDir.absPath() + "/doxytemplate.tex";
+ pathDoxyFormatTex = perlModDir.absPath() + "/doxyformat.tex";
+ pathDoxyLatexTex = perlModDir.absPath() + "/doxylatex.tex";
+ pathDoxyLatexDVI = perlModDir.absPath() + "/doxylatex.dvi";
+ pathDoxyLatexPDF = perlModDir.absPath() + "/doxylatex.pdf";
+ pathDoxyDocsTex = perlModDir.absPath() + "/doxydocs.tex";
+ pathDoxyLatexPL = perlModDir.absPath() + "/doxylatex.pl";
+ pathDoxyLatexTemplatePL = perlModDir.absPath() + "/doxylatex-template.pl";
}
- output.closeList();
- output.openList("groups");
- GroupSDict::Iterator gli(Doxygen::groupSDict);
- GroupDef *gd;
- for (;(gd=gli.current());++gli)
- generatePerlModForGroup(gd,output);
- output.closeList();
+ if (!(generatePerlModOutput()
+ && generateDoxyModelPM()
+ && generateMakefile()
+ && generateDoxyRules()))
+ return;
- output.openList("pages");
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageInfo *pi=0;
- for (pdi.toFirst();(pi=pdi.current());++pdi)
- generatePerlModForPage(pi,output);
- if (Doxygen::mainPage)
- generatePerlModForPage(Doxygen::mainPage,output);
- output.closeList();
+ if (perlmodLatex) {
+ if (!(generateDoxyLatexTemplatePL()
+ && generateDoxyLatexPL()
+ && generateDoxyLatexTex()
+ && generateDoxyFormatTex()))
+ return;
+ }
+}
- output.closeHash().add(";\n1;\n");
+void generatePerlMod()
+{
+ PerlModGenerator pmg;
+ pmg.generate();
}
// Local Variables:
// c-basic-offset: 2
// End:
+
+/* This elisp function for XEmacs makes Control-Z transform
+ the text in the region into a valid C string.
+
+ (global-set-key '(control z) (lambda () (interactive)
+ (save-excursion
+ (if (< (mark) (point)) (exchange-point-and-mark))
+ (let ((start (point)) (replacers
+ '(("\\\\" "\\\\\\\\")
+ ("\"" "\\\\\"")
+ ("\t" "\\\\t")
+ ("^.*$" "\"\\&\\\\n\""))))
+ (while replacers
+ (while (re-search-forward (caar replacers) (mark) t)
+ (replace-match (cadar replacers) t))
+ (goto-char start)
+ (setq replacers (cdr replacers)))))))
+*/