summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2002-10-06 19:08:54 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2002-10-06 19:08:54 (GMT)
commiteb9911da9adbb91449d7fcad9bbc33a8152e1727 (patch)
treec1062a06b0267bdf027f00efb00f1fb2b70db5c5 /src
parent5ed55684b0226c2371f1d39cd7f984da44c9ccb1 (diff)
downloadDoxygen-eb9911da9adbb91449d7fcad9bbc33a8152e1727.zip
Doxygen-eb9911da9adbb91449d7fcad9bbc33a8152e1727.tar.gz
Doxygen-eb9911da9adbb91449d7fcad9bbc33a8152e1727.tar.bz2
Release-1.2.18-20021006
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp143
-rw-r--r--src/classdef.h14
-rw-r--r--src/classlist.cpp10
-rw-r--r--src/config.l12
-rw-r--r--src/defgen.cpp25
-rw-r--r--src/definition.cpp29
-rw-r--r--src/doc.l50
-rw-r--r--src/docparser.cpp242
-rw-r--r--src/docparser.h109
-rw-r--r--src/doctokenizer.h1
-rw-r--r--src/doctokenizer.l27
-rw-r--r--src/docvisitor.h3
-rw-r--r--src/doxygen.cpp22
-rw-r--r--src/filedef.cpp33
-rw-r--r--src/formula.cpp2
-rw-r--r--src/groupdef.cpp25
-rw-r--r--src/htmldocvisitor.cpp16
-rw-r--r--src/htmldocvisitor.h2
-rw-r--r--src/index.cpp151
-rw-r--r--src/latexdocvisitor.cpp14
-rw-r--r--src/latexdocvisitor.h2
-rw-r--r--src/libdoxygen.pro.in6
-rw-r--r--src/mandocvisitor.cpp580
-rw-r--r--src/mandocvisitor.h4
-rw-r--r--src/mangen.cpp1
-rw-r--r--src/memberdef.cpp25
-rw-r--r--src/memberlist.cpp20
-rw-r--r--src/namespacedef.cpp19
-rw-r--r--src/outputgen.h6
-rw-r--r--src/outputlist.cpp28
-rw-r--r--src/outputlist.h4
-rw-r--r--src/packagedef.cpp13
-rw-r--r--src/page.h5
-rw-r--r--src/perlmodgen.cpp1876
-rw-r--r--src/perlmodgen.h20
-rw-r--r--src/printdocvisitor.h10
-rw-r--r--src/rtfdocvisitor.cpp14
-rw-r--r--src/rtfdocvisitor.h2
-rw-r--r--src/scanner.l15
-rw-r--r--src/util.cpp13
-rw-r--r--src/xmldocvisitor.cpp16
-rw-r--r--src/xmldocvisitor.h2
-rw-r--r--src/xmlgen.cpp15
43 files changed, 2893 insertions, 733 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 0a9ae3e..86e4ba3 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -21,7 +21,6 @@
#include "classdef.h"
#include "classlist.h"
#include "entry.h"
-#include "doc.h"
#include "doxygen.h"
#include "membername.h"
#include "message.h"
@@ -160,24 +159,24 @@ void ClassDef::insertSubClass(ClassDef *cd,Protection p,
void ClassDef::addMembersToMemberGroup()
{
::addMembersToMemberGroup(&pubTypes,memberGroupSDict,this);
- ::addMembersToMemberGroup(&pubMembers,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&pubMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&pubSlots,memberGroupSDict,this);
::addMembersToMemberGroup(&signals,memberGroupSDict,this);
::addMembersToMemberGroup(&dcopMethods,memberGroupSDict,this);
- ::addMembersToMemberGroup(&pubStaticMembers,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&pubStaticMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&proTypes,memberGroupSDict,this);
- ::addMembersToMemberGroup(&proMembers,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&proMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&proAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&proSlots,memberGroupSDict,this);
- ::addMembersToMemberGroup(&proStaticMembers,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&proStaticMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&proStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&priTypes,memberGroupSDict,this);
- ::addMembersToMemberGroup(&priMembers,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&priMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&priAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&priSlots,memberGroupSDict,this);
- ::addMembersToMemberGroup(&priStaticMembers,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&priStaticMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&priStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&friends,memberGroupSDict,this);
::addMembersToMemberGroup(&related,memberGroupSDict,this);
@@ -278,16 +277,16 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
- proStaticMembers.append(md);
- md->setSectionList(this,&proStaticMembers);
+ proStaticMethods.append(md);
+ md->setSectionList(this,&proStaticMethods);
break;
case Public:
- pubStaticMembers.append(md);
- md->setSectionList(this,&pubStaticMembers);
+ pubStaticMethods.append(md);
+ md->setSectionList(this,&pubStaticMethods);
break;
case Private:
- priStaticMembers.append(md);
- md->setSectionList(this,&priStaticMembers);
+ priStaticMethods.append(md);
+ md->setSectionList(this,&priStaticMethods);
break;
}
}
@@ -335,16 +334,16 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
- proMembers.append(md);
- md->setSectionList(this,&proMembers);
+ proMethods.append(md);
+ md->setSectionList(this,&proMethods);
break;
case Public:
- pubMembers.append(md);
- md->setSectionList(this,&pubMembers);
+ pubMethods.append(md);
+ md->setSectionList(this,&pubMethods);
break;
case Private:
- priMembers.append(md);
- md->setSectionList(this,&priMembers);
+ priMethods.append(md);
+ md->setSectionList(this,&priMethods);
break;
}
}
@@ -500,12 +499,12 @@ void ClassDef::insertMember(MemberDef *md)
void ClassDef::computeAnchors()
{
ClassDef *context = Config_getBool("INLINE_INHERITED_MEMB") ? this : 0;
- setAnchors(context,'a',&pubMembers);
- setAnchors(context,'b',&proMembers);
- setAnchors(context,'c',&priMembers);
- setAnchors(context,'d',&pubStaticMembers);
- setAnchors(context,'e',&proStaticMembers);
- setAnchors(context,'f',&priStaticMembers);
+ setAnchors(context,'a',&pubMethods);
+ setAnchors(context,'b',&proMethods);
+ setAnchors(context,'c',&priMethods);
+ setAnchors(context,'d',&pubStaticMethods);
+ setAnchors(context,'e',&proStaticMethods);
+ setAnchors(context,'f',&priStaticMethods);
setAnchors(context,'g',&pubSlots);
setAnchors(context,'h',&proSlots);
setAnchors(context,'i',&priSlots);
@@ -687,7 +686,7 @@ static void writeTemplateSpec(OutputList &ol,Definition *d,
}
// write the detailed description for this class
-void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput, const QCString &pageType, bool exampleFlag)
+void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType, bool exampleFlag)
{
if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!documentation().isEmpty() ||
@@ -701,7 +700,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput,
ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
- parseText(ol,theTranslator->trDetailedDescription());
+ ol.parseText(theTranslator->trDetailedDescription());
ol.endGroupHeader();
ol.startTextBlock();
@@ -710,7 +709,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput,
// repeat brief description
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- ol+=briefOutput;
+ ol.parseDoc(briefFile(),briefLine(),name(),0,briefDescription(),FALSE);
}
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
@@ -724,7 +723,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput,
ol.disableAllBut(OutputGenerator::RTF);
ol.newParagraph();
ol.popGeneratorState();
- parseDoc(ol,docFile(),docLine(),name(),0,documentation()+"\n");
+ ol.parseDoc(docFile(),docLine(),name(),0,documentation()+"\n",FALSE);
}
// write examples
if (exampleFlag)
@@ -759,7 +758,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (m_tempArgs) pageTitle.prepend(" Template");
startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase());
- parseText(ol,theTranslator->trCompoundReference(displayName(),m_compType,m_tempArgs!=0));
+ ol.parseText(theTranslator->trCompoundReference(displayName(),m_compType,m_tempArgs!=0));
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),name());
@@ -769,13 +768,11 @@ void ClassDef::writeDocumentation(OutputList &ol)
bool exampleFlag=hasExamples();
// write brief description
- OutputList briefOutput(&ol);
if (!briefDescription().isEmpty())
{
- parseDoc(briefOutput,briefFile(),briefLine(),name(),0,briefDescription());
if (!Config_getBool("DETAILS_AT_TOP"))
{
- ol+=briefOutput;
+ ol.parseDoc(briefFile(),briefLine(),name(),0,briefDescription(),FALSE);
ol.writeString(" \n");
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -786,7 +783,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
exampleFlag
)
{
- parseText(ol,theTranslator->trMore());
+ ol.parseText(theTranslator->trMore());
}
ol.endTextLink();
ol.popGeneratorState();
@@ -878,7 +875,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
// now replace all markers in inheritLine with links to the classes
while ((newIndex=marker.match(inheritLine,index,&matchLen))!=-1)
{
- parseText(ol,inheritLine.mid(index,newIndex-index));
+ ol.parseText(inheritLine.mid(index,newIndex-index));
bool ok;
uint entryIndex = inheritLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
BaseClassDef *bcd=m_inherits->at(entryIndex);
@@ -917,7 +914,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
index=newIndex+matchLen;
}
- parseText(ol,inheritLine.right(inheritLine.length()-index));
+ ol.parseText(inheritLine.right(inheritLine.length()-index));
ol.newParagraph();
}
@@ -930,7 +927,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
// now replace all markers in inheritLine with links to the classes
while ((newIndex=marker.match(inheritLine,index,&matchLen))!=-1)
{
- parseText(ol,inheritLine.mid(index,newIndex-index));
+ ol.parseText(inheritLine.mid(index,newIndex-index));
bool ok;
uint entryIndex = inheritLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
BaseClassDef *bcd=m_inheritedBy->at(entryIndex);
@@ -949,7 +946,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
index=newIndex+matchLen;
}
- parseText(ol,inheritLine.right(inheritLine.length()-index));
+ ol.parseText(inheritLine.right(inheritLine.length()-index));
ol.newParagraph();
}
@@ -983,7 +980,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.startDotGraph();
- parseText(ol,theTranslator->trClassDiagram(displayName()));
+ ol.parseText(theTranslator->trClassDiagram(displayName()));
ol.endDotGraph(inheritanceGraph);
if (Config_getBool("GENERATE_LEGEND"))
{
@@ -1005,7 +1002,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ClassDiagram diagram(this); // create a diagram of this class.
ol.startClassDiagram();
ol.disable(OutputGenerator::Man);
- parseText(ol,theTranslator->trClassDiagram(displayName()));
+ ol.parseText(theTranslator->trClassDiagram(displayName()));
ol.enable(OutputGenerator::Man);
ol.endClassDiagram(diagram,getOutputFileBase(),displayName());
}
@@ -1018,7 +1015,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.startDotGraph();
- parseText(ol,theTranslator->trCollaborationDiagram(displayName()));
+ ol.parseText(theTranslator->trCollaborationDiagram(displayName()));
ol.endDotGraph(usageImplGraph);
if (Config_getBool("GENERATE_LEGEND"))
{
@@ -1043,7 +1040,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{
ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(m_memListFileName,0);
- parseText(ol,theTranslator->trListOfAllMembers());
+ ol.parseText(theTranslator->trListOfAllMembers());
ol.endTextLink();
ol.enableAll();
}
@@ -1052,7 +1049,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write detailed description if the user wants it near the top
if (Config_getBool("DETAILS_AT_TOP")) {
- writeDetailedDescription(ol,briefOutput,pageType,exampleFlag);
+ writeDetailedDescription(ol,pageType,exampleFlag);
}
// write member groups
@@ -1082,8 +1079,8 @@ void ClassDef::writeDocumentation(OutputList &ol)
signals.writeDeclarations(ol,this,0,0,0,theTranslator->trSignals(),0);
dcopMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trDCOPMethods(),0);
properties.writeDeclarations(ol,this,0,0,0,theTranslator->trProperties(),0);
- pubMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicMembers(),0);
- pubStaticMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPublicMembers(),0);
+ pubMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicMembers(),0);
+ pubStaticMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPublicMembers(),0);
// public attribs
pubAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicAttribs(),0);
@@ -1094,8 +1091,8 @@ void ClassDef::writeDocumentation(OutputList &ol)
// protected methods
proSlots.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedSlots(),0);
- proMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedMembers(),0);
- proStaticMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticProtectedMembers(),0);
+ proMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedMembers(),0);
+ proStaticMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticProtectedMembers(),0);
// protected attribs
proAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedAttribs(),0);
@@ -1108,8 +1105,8 @@ void ClassDef::writeDocumentation(OutputList &ol)
// private members
priSlots.writeDeclarations(ol,this,0,0,0,theTranslator->trPrivateSlots(),0);
- priMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trPrivateMembers(),0);
- priStaticMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPrivateMembers(),0);
+ priMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trPrivateMembers(),0);
+ priStaticMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPrivateMembers(),0);
// private attribs
priAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trPrivateAttribs(),0);
@@ -1128,7 +1125,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write detailed description
if (!Config_getBool("DETAILS_AT_TOP")) {
- writeDetailedDescription(ol,briefOutput,pageType,exampleFlag);
+ writeDetailedDescription(ol,pageType,exampleFlag);
}
@@ -1162,7 +1159,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{
ol.disable(OutputGenerator::Man);
ol.writeRuler();
- parseText(ol,theTranslator->trGeneratedFromFiles(m_compType,m_files.count()==1));
+ ol.parseText(theTranslator->trGeneratedFromFiles(m_compType,m_files.count()==1));
bool first=TRUE;
const char *file = m_files.first();
@@ -1230,9 +1227,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.disableAllBut(OutputGenerator::Man);
ol.writeString("\n");
ol.startGroupHeader();
- parseText(ol,theTranslator->trAuthor(TRUE,TRUE));
+ ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
ol.endGroupHeader();
- parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
+ ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
ol.popGeneratorState();
ol.endTextBlock();
@@ -1282,11 +1279,11 @@ void ClassDef::writeMemberList(OutputList &ol)
startFile(ol,m_memListFileName,m_memListFileName,
theTranslator->trMemberList());
startTitle(ol,0);
- parseText(ol,displayName()+" "+theTranslator->trMemberList());
+ ol.parseText(displayName()+" "+theTranslator->trMemberList());
endTitle(ol,0,0);
- parseText(ol,theTranslator->trThisIsTheListOfAllMembers());
+ ol.parseText(theTranslator->trThisIsTheListOfAllMembers());
ol.writeObjectLink(getReference(),getOutputFileBase(),0,displayName());
- parseText(ol,theTranslator->trIncludingInheritedMembers());
+ ol.parseText(theTranslator->trIncludingInheritedMembers());
//ol.startItemList();
ol.writeString("<table>\n");
@@ -1326,9 +1323,9 @@ void ClassDef::writeMemberList(OutputList &ol)
(md->isFriend() && md->argsString()))
ol.docify(md->argsString());
else if (md->isEnumerate())
- parseText(ol," "+theTranslator->trEnumName());
+ ol.parseText(" "+theTranslator->trEnumName());
else if (md->isEnumValue())
- parseText(ol," "+theTranslator->trEnumValue());
+ ol.parseText(" "+theTranslator->trEnumValue());
else if (md->isTypedef())
ol.docify(" typedef");
else if (md->isFriend() && !strcmp(md->typeString(),"friend class"))
@@ -1350,13 +1347,13 @@ void ClassDef::writeMemberList(OutputList &ol)
if ( md->isFunction() || md->isSignal() || md->isSlot() )
ol.docify(md->argsString());
else if (md->isEnumerate())
- parseText(ol," "+theTranslator->trEnumName());
+ ol.parseText(" "+theTranslator->trEnumName());
else if (md->isEnumValue())
- parseText(ol," "+theTranslator->trEnumValue());
+ ol.parseText(" "+theTranslator->trEnumValue());
else if (md->isTypedef())
ol.docify(" typedef");
ol.writeString(" (");
- parseText(ol,theTranslator->trDefinedIn()+" ");
+ ol.parseText(theTranslator->trDefinedIn()+" ");
if (cd->isLinkable())
{
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->displayName());
@@ -1547,8 +1544,8 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
pubTypes.setInGroup(inGroup);
pubTypes.writePlainDeclarations(ol,this,0,0,0);
- pubMembers.setInGroup(inGroup);
- pubMembers.writePlainDeclarations(ol,this,0,0,0);
+ pubMethods.setInGroup(inGroup);
+ pubMethods.writePlainDeclarations(ol,this,0,0,0);
pubAttribs.setInGroup(inGroup);
pubAttribs.writePlainDeclarations(ol,this,0,0,0);
pubSlots.setInGroup(inGroup);
@@ -1559,34 +1556,34 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
dcopMethods.writePlainDeclarations(ol,this,0,0,0);
properties.setInGroup(inGroup);
properties.writePlainDeclarations(ol,this,0,0,0);
- pubStaticMembers.setInGroup(inGroup);
- pubStaticMembers.writePlainDeclarations(ol,this,0,0,0);
+ pubStaticMethods.setInGroup(inGroup);
+ pubStaticMethods.writePlainDeclarations(ol,this,0,0,0);
pubStaticAttribs.setInGroup(inGroup);
pubStaticAttribs.writePlainDeclarations(ol,this,0,0,0);
proTypes.setInGroup(inGroup);
proTypes.writePlainDeclarations(ol,this,0,0,0);
- proMembers.setInGroup(inGroup);
- proMembers.writePlainDeclarations(ol,this,0,0,0);
+ proMethods.setInGroup(inGroup);
+ proMethods.writePlainDeclarations(ol,this,0,0,0);
proAttribs.setInGroup(inGroup);
proAttribs.writePlainDeclarations(ol,this,0,0,0);
proSlots.setInGroup(inGroup);
proSlots.writePlainDeclarations(ol,this,0,0,0);
- proStaticMembers.setInGroup(inGroup);
- proStaticMembers.writePlainDeclarations(ol,this,0,0,0);
+ proStaticMethods.setInGroup(inGroup);
+ proStaticMethods.writePlainDeclarations(ol,this,0,0,0);
proStaticAttribs.setInGroup(inGroup);
proStaticAttribs.writePlainDeclarations(ol,this,0,0,0);
if (Config_getBool("EXTRACT_PRIVATE"))
{
priTypes.setInGroup(inGroup);
priTypes.writePlainDeclarations(ol,this,0,0,0);
- priMembers.setInGroup(inGroup);
- priMembers.writePlainDeclarations(ol,this,0,0,0);
+ priMethods.setInGroup(inGroup);
+ priMethods.writePlainDeclarations(ol,this,0,0,0);
priAttribs.setInGroup(inGroup);
priAttribs.writePlainDeclarations(ol,this,0,0,0);
priSlots.setInGroup(inGroup);
priSlots.writePlainDeclarations(ol,this,0,0,0);
- priStaticMembers.setInGroup(inGroup);
- priStaticMembers.writePlainDeclarations(ol,this,0,0,0);
+ priStaticMethods.setInGroup(inGroup);
+ priStaticMethods.writePlainDeclarations(ol,this,0,0,0);
priStaticAttribs.setInGroup(inGroup);
priStaticAttribs.writePlainDeclarations(ol,this,0,0,0);
}
diff --git a/src/classdef.h b/src/classdef.h
index 1c5ce25..8250b18 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -102,7 +102,7 @@ class ClassDef : public Definition
void writeDocumentationForInnerClasses(OutputList &ol);
void writeMemberList(OutputList &ol);
void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup);
- void writeDetailedDescription(OutputList &ol,OutputList &briefOutput,const QCString &pageType,bool exampleFlag);
+ void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag);
/*! Return the protection level (Public,Protected,Private) in which
* this compound was found.
@@ -203,12 +203,12 @@ class ClassDef : public Definition
QCString className() const;
/* member lists by protection */
- MemberList pubMembers;
- MemberList proMembers;
- MemberList priMembers;
- MemberList pubStaticMembers;
- MemberList proStaticMembers;
- MemberList priStaticMembers;
+ MemberList pubMethods;
+ MemberList proMethods;
+ MemberList priMethods;
+ MemberList pubStaticMethods;
+ MemberList proStaticMethods;
+ MemberList priStaticMethods;
MemberList pubSlots;
MemberList proSlots;
MemberList priSlots;
diff --git a/src/classlist.cpp b/src/classlist.cpp
index fcda558..7adacd8 100644
--- a/src/classlist.cpp
+++ b/src/classlist.cpp
@@ -20,7 +20,6 @@
#include "util.h"
#include "outputlist.h"
#include "language.h"
-#include "doc.h"
#include "doxygen.h"
ClassList::ClassList() : QList<ClassDef>()
@@ -79,11 +78,11 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
ol.startMemberHeader();
if (header)
{
- parseText(ol,header);
+ ol.parseText(header);
}
else
{
- parseText(ol,theTranslator->trCompounds());
+ ol.parseText(theTranslator->trCompounds());
}
ol.endMemberHeader();
ol.startMemberList();
@@ -117,7 +116,8 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
if (!cd->briefDescription().isEmpty())
{
ol.startMemberDescription();
- parseDoc(ol,cd->briefFile(),cd->briefLine(),cd->name(),0,cd->briefDescription());
+ ol.parseDoc(cd->briefFile(),cd->briefLine(),cd->name(),0,
+ cd->briefDescription(),FALSE);
if ((!cd->briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!cd->documentation().isEmpty())
{
@@ -126,7 +126,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
ol.endEmphasis();
ol.docify(" ");
ol.startTextLink(cd->getOutputFileBase(),"_details");
- parseText(ol,theTranslator->trMore());
+ ol.parseText(theTranslator->trMore());
ol.endTextLink();
ol.startEmphasis();
ol.popGeneratorState();
diff --git a/src/config.l b/src/config.l
index 68515a6..30b674c 100644
--- a/src/config.l
+++ b/src/config.l
@@ -2191,6 +2191,18 @@ void Config::create()
FALSE );
//-----------------------------------------------------------------------------------------------
+ addInfo( "Perl","configuration options related to the Perl output");
+ //-----------------------------------------------------------------------------------------------
+ cb = addBool(
+ "GENERATE_PERLMOD",
+ "If the GENERATE_PERLMOD tag is set to YES Doxygen will \n"
+ "generate a Perl module file that captures the structure of \n"
+ "the code including all documentation. Note that this \n"
+ "feature is still experimental and incomplete at the \n"
+ "moment. \n",
+ FALSE
+ );
+ //-----------------------------------------------------------------------------------------------
addInfo( "Preprocessor","Configuration options related to the preprocessor ");
//-----------------------------------------------------------------------------------------------
cb = addBool(
diff --git a/src/defgen.cpp b/src/defgen.cpp
index c0cfa23..5ca16ce 100644
--- a/src/defgen.cpp
+++ b/src/defgen.cpp
@@ -27,7 +27,6 @@
#include "util.h"
#include "defargs.h"
#include "outputgen.h"
-#include "doc.h"
#include "dot.h"
#include "code.h"
@@ -407,36 +406,36 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
}
int numMembers =
- cd->pubTypes.count()+cd->pubMembers.count()+cd->pubAttribs.count()+
+ cd->pubTypes.count()+cd->pubMethods.count()+cd->pubAttribs.count()+
cd->pubSlots.count()+cd->signals.count()+cd->dcopMethods.count()+
- cd->pubStaticMembers.count()+
- cd->pubStaticAttribs.count()+cd->proTypes.count()+cd->proMembers.count()+
- cd->proAttribs.count()+cd->proSlots.count()+cd->proStaticMembers.count()+
- cd->proStaticAttribs.count()+cd->priTypes.count()+cd->priMembers.count()+
- cd->priAttribs.count()+cd->priSlots.count()+cd->priStaticMembers.count()+
+ cd->pubStaticMethods.count()+
+ cd->pubStaticAttribs.count()+cd->proTypes.count()+cd->proMethods.count()+
+ cd->proAttribs.count()+cd->proSlots.count()+cd->proStaticMethods.count()+
+ cd->proStaticAttribs.count()+cd->priTypes.count()+cd->priMethods.count()+
+ cd->priAttribs.count()+cd->priSlots.count()+cd->priStaticMethods.count()+
cd->priStaticAttribs.count()+cd->friends.count()+cd->related.count();
if (numMembers>0)
{
generateDEFClassSection(cd,t,&cd->pubTypes,"public-type");
- generateDEFClassSection(cd,t,&cd->pubMembers,"public-func");
+ generateDEFClassSection(cd,t,&cd->pubMethods,"public-func");
generateDEFClassSection(cd,t,&cd->pubAttribs,"public-attrib");
generateDEFClassSection(cd,t,&cd->pubSlots,"public-slot");
generateDEFClassSection(cd,t,&cd->signals,"signal");
generateDEFClassSection(cd,t,&cd->dcopMethods,"dcop-func");
generateDEFClassSection(cd,t,&cd->properties,"property");
- generateDEFClassSection(cd,t,&cd->pubStaticMembers,"public-static-func");
+ generateDEFClassSection(cd,t,&cd->pubStaticMethods,"public-static-func");
generateDEFClassSection(cd,t,&cd->pubStaticAttribs,"public-static-attrib");
generateDEFClassSection(cd,t,&cd->proTypes,"protected-type");
- generateDEFClassSection(cd,t,&cd->proMembers,"protected-func");
+ generateDEFClassSection(cd,t,&cd->proMethods,"protected-func");
generateDEFClassSection(cd,t,&cd->proAttribs,"protected-attrib");
generateDEFClassSection(cd,t,&cd->proSlots,"protected-slot");
- generateDEFClassSection(cd,t,&cd->proStaticMembers,"protected-static-func");
+ generateDEFClassSection(cd,t,&cd->proStaticMethods,"protected-static-func");
generateDEFClassSection(cd,t,&cd->proStaticAttribs,"protected-static-attrib");
generateDEFClassSection(cd,t,&cd->priTypes,"private-type");
- generateDEFClassSection(cd,t,&cd->priMembers,"private-func");
+ generateDEFClassSection(cd,t,&cd->priMethods,"private-func");
generateDEFClassSection(cd,t,&cd->priAttribs,"private-attrib");
generateDEFClassSection(cd,t,&cd->priSlots,"private-slot");
- generateDEFClassSection(cd,t,&cd->priStaticMembers,"private-static-func");
+ generateDEFClassSection(cd,t,&cd->priStaticMethods,"private-static-func");
generateDEFClassSection(cd,t,&cd->priStaticAttribs,"private-static-attrib");
generateDEFClassSection(cd,t,&cd->friends,"signal");
generateDEFClassSection(cd,t,&cd->related,"related");
diff --git a/src/definition.cpp b/src/definition.cpp
index 75de348..6fa80dd 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -24,7 +24,6 @@
#include "language.h"
#include "message.h"
#include "outputlist.h"
-#include "doc.h"
#include "code.h"
#include "util.h"
#include "groupdef.h"
@@ -55,6 +54,9 @@ Definition::Definition(const char *df,int dl,
m_partOfGroups=0;
m_specialListItems=0;
m_briefLine=1;
+ m_briefFile=(QCString)"<"+name+">";
+ m_docLine=1;
+ m_docFile=(QCString)"<"+name+">";
}
Definition::~Definition()
@@ -69,6 +71,7 @@ Definition::~Definition()
void Definition::addSectionsToDefinition(QList<QCString> *anchorList)
{
if (!anchorList) return;
+ //printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
QCString *s=anchorList->first();
while (s)
{
@@ -87,6 +90,10 @@ void Definition::addSectionsToDefinition(QList<QCString> *anchorList)
}
si->definition = this;
}
+ else
+ {
+ //printf("Section `%s' not found!\n",s->data());
+ }
s=anchorList->next();
}
}
@@ -95,12 +102,14 @@ void Definition::writeDocAnchorsToTagFile()
{
if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_sectionDict)
{
+ //printf("%s: writeDocAnchors(%d)\n",name().data(),m_sectionDict->count());
QDictIterator<SectionInfo> sdi(*m_sectionDict);
SectionInfo *si;
for (;(si=sdi.current());++sdi)
{
if (!si->generated)
{
+ //printf("write an entry!\n");
if (definitionType()==TypeMember) Doxygen::tagFile << " ";
Doxygen::tagFile << " <docanchor>" << si->label << "</docanchor>" << endl;
}
@@ -265,7 +274,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
if (lineMarkerPos<fileMarkerPos) // line marker before file marker
{
// write text left from linePos marker
- parseText(ol,refText.left(lineMarkerPos));
+ ol.parseText(refText.left(lineMarkerPos));
ol.disableAllBut(OutputGenerator::Html);
// write line link (HTML only)
ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
@@ -277,7 +286,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.enableAll();
// write text between markers
- parseText(ol,refText.mid(lineMarkerPos+2,
+ ol.parseText(refText.mid(lineMarkerPos+2,
fileMarkerPos-lineMarkerPos-2));
ol.disableAllBut(OutputGenerator::Html);
@@ -291,13 +300,13 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.enableAll();
// write text right from file marker
- parseText(ol,refText.right(
+ ol.parseText(refText.right(
refText.length()-fileMarkerPos-2));
}
else // file marker before line marker
{
// write text left from file marker
- parseText(ol,refText.left(fileMarkerPos));
+ ol.parseText(refText.left(fileMarkerPos));
ol.disableAllBut(OutputGenerator::Html);
// write file link (HTML only)
ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
@@ -309,7 +318,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.enableAll();
// write text between markers
- parseText(ol,refText.mid(fileMarkerPos+2,
+ ol.parseText(refText.mid(fileMarkerPos+2,
lineMarkerPos-fileMarkerPos-2));
ol.disableAllBut(OutputGenerator::Html);
@@ -323,7 +332,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.enableAll();
// write text right from linePos marker
- parseText(ol,refText.right(
+ ol.parseText(refText.right(
refText.length()-lineMarkerPos-2));
}
}
@@ -377,7 +386,7 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName,
if (Config_getBool("SOURCE_BROWSER") && members)
{
ol.newParagraph();
- parseText(ol,text);
+ ol.parseText(text);
ol.docify(" ");
QCString ldefLine=theTranslator->trWriteList(members->count());
@@ -388,7 +397,7 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName,
while ((newIndex=marker.match(ldefLine,index,&matchLen))!=-1)
{
bool ok;
- parseText(ol,ldefLine.mid(index,newIndex-index));
+ ol.parseText(ldefLine.mid(index,newIndex-index));
uint entryIndex = ldefLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
MemberDef *md=members->at(entryIndex);
if (ok && md)
@@ -452,7 +461,7 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName,
}
index=newIndex+matchLen;
}
- parseText(ol,ldefLine.right(ldefLine.length()-index));
+ ol.parseText(ldefLine.right(ldefLine.length()-index));
ol.writeString(".");
}
ol.popGeneratorState();
diff --git a/src/doc.l b/src/doc.l
index 2ce0a96..2fe980f 100644
--- a/src/doc.l
+++ b/src/doc.l
@@ -347,7 +347,7 @@ static void includeFile(OutputDocInterface &od,const char *fileName,bool quiet)
FileDef *fd;
if ((fd=findFileDef(Doxygen::exampleNameDict,fileName,ambig)))
{
- currentIncludeFile=fileToString(fd->absFilePath());
+ currentIncludeFile=fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES"));
includeFileOffset=0;
includeFileLength=currentIncludeFile.length();
OutputDocInterface *codeFrag = od.clone();
@@ -384,7 +384,7 @@ static void verbIncludeFile(OutputDocInterface &od,const char *name)
if ((fd=findFileDef(Doxygen::exampleNameDict,name,ambig)))
{
od.startCodeFragment();
- od.codify(fileToString(fd->absFilePath())+"\n");
+ od.codify(fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES"))+"\n");
od.endCodeFragment();
}
else if (ambig)
@@ -2959,7 +2959,7 @@ void parseDoc(OutputDocInterface &od,const char *fileName,int startLine,
if (Debug::isFlagSet(Debug::Validate))
{
- od.parseDoc(fileName,startLine,clName,md,docStr);
+ od.parseDoc(fileName,startLine,clName,md,docStr,FALSE);
}
else
{
@@ -3029,15 +3029,22 @@ void parseDoc(OutputDocInterface &od,const char *fileName,int startLine,
void parseText(OutputDocInterface &od,const QCString &txtString)
{
if (txtString.isEmpty()) return;
- inputString = txtString;
- outDoc = od.clone();
- inputPosition = 0;
- docYYrestart( docYYin );
- BEGIN( Text );
- docYYlex();
- od.append(outDoc);
- delete outDoc; outDoc=0;
- return;
+ if (Debug::isFlagSet(Debug::Validate))
+ {
+ od.parseText(txtString);
+ }
+ else
+ {
+ inputString = txtString;
+ outDoc = od.clone();
+ inputPosition = 0;
+ docYYrestart( docYYin );
+ BEGIN( Text );
+ docYYlex();
+ od.append(outDoc);
+ delete outDoc; outDoc=0;
+ return;
+ }
}
//----------------------------------------------------------------------------
@@ -3045,12 +3052,19 @@ void parseText(OutputDocInterface &od,const QCString &txtString)
void parseExample(OutputDocInterface &od,const QCString &docString,
const char *fileName)
{
- initParser();
- initParseCodeContext();
- exampleDoc=TRUE; // cross reference with member docs
- exampleName=fileName;
- strcpy(yyFileName,fileName);
- parseDocument(od,docString);
+ if (Debug::isFlagSet(Debug::Validate))
+ {
+ od.parseDoc(fileName,/*startLine*/1,/*clName*/0,/*md*/0,docString,TRUE);
+ }
+ else
+ {
+ initParser();
+ initParseCodeContext();
+ exampleDoc=TRUE; // cross reference with member docs
+ exampleName=fileName;
+ strcpy(yyFileName,fileName);
+ parseDocument(od,docString);
+ }
}
//----------------------------------------------------------------------------
diff --git a/src/docparser.cpp b/src/docparser.cpp
index f8c0e19..6ee62e4 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -41,11 +41,16 @@
#define DBG(x) do {} while(0)
//#define DBG(x) printf x
+#define INTERNAL_ASSERT(x) do {} while(0)
+//#define INTERNAL_ASSERT(x) if (!(x)) DBG(("INTERNAL_ASSERT(%s) failed retval=0x%x: file=%s line=%d\n",#x,retval,__FILE__,__LINE__));
+
//---------------------------------------------------------------------------
+// global variables during a call to validatingParseDoc
static bool g_hasParamCommand;
static MemberDef * g_memberDef;
static QDict<void> g_paramsFound;
+static bool g_isExample;
// include file state
static QString g_includeFileText;
@@ -426,7 +431,7 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- tokenName.data());
+ tokToString(tok));
break;
}
}
@@ -601,7 +606,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
{
doctokenizerYYsetStateHtmlOnly();
int retval = doctokenizerYYlex();
- children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly));
+ children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_fileName));
if (retval==0) warn(g_fileName,doctokenizerYYlineno,"Error: htmlonly section ended without end marker");
doctokenizerYYsetStatePara();
}
@@ -610,7 +615,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
{
doctokenizerYYsetStateLatexOnly();
int retval = doctokenizerYYlex();
- children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::LatexOnly));
+ children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_fileName));
if (retval==0) warn(g_fileName,doctokenizerYYlineno,"Error: latexonly section ended without end marker",doctokenizerYYlineno);
doctokenizerYYsetStatePara();
}
@@ -896,7 +901,7 @@ static void readTextFileByName(const QString &file,QString &text)
FileDef *fd;
if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig)))
{
- text = fileToString(fd->absFilePath());
+ text = fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES"));
}
else if (ambig)
{
@@ -1209,7 +1214,7 @@ void DocSecRefItem::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -1251,7 +1256,7 @@ void DocSecRefList::parse()
int tok=doctokenizerYYlex();
// skip white space
- while (tok==TK_WHITESPACE) tok=doctokenizerYYlex();
+ while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
// handle items
while (tok)
{
@@ -1346,7 +1351,7 @@ void DocInternalRef::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -1431,7 +1436,7 @@ void DocRef::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -1531,7 +1536,7 @@ QString DocLink::parse(bool isJavaLink)
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -1576,7 +1581,7 @@ void DocDotFile::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -1653,7 +1658,7 @@ void DocImage::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -1748,7 +1753,7 @@ int DocHtmlHeader::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -1805,7 +1810,7 @@ int DocHRef::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data(),doctokenizerYYlineno);
+ tokToString(tok),doctokenizerYYlineno);
break;
}
}
@@ -1947,7 +1952,7 @@ int DocIndexEntry::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -1998,7 +2003,7 @@ int DocHtmlCaption::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -2058,7 +2063,7 @@ int DocHtmlRow::parse()
// get next token
int tok=doctokenizerYYlex();
// skip whitespace
- while (tok==TK_WHITESPACE) tok=doctokenizerYYlex();
+ while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
// should find a html tag now
if (tok==TK_HTMLTAG)
{
@@ -2122,7 +2127,7 @@ getrow:
// get next token
int tok=doctokenizerYYlex();
// skip whitespace
- while (tok==TK_WHITESPACE) tok=doctokenizerYYlex();
+ while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
// should find a html tag now
if (tok==TK_HTMLTAG)
{
@@ -2224,7 +2229,7 @@ int DocHtmlDescTitle::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -2397,12 +2402,13 @@ int DocHtmlList::parse()
{
DBG(("DocHtmlList::parse() start\n"));
int retval=RetVal_OK;
+ int num=1;
g_nodeStack.push(this);
// get next token
int tok=doctokenizerYYlex();
- // skip whitespace
- while (tok==TK_WHITESPACE) tok=doctokenizerYYlex();
+ // skip whitespace and paragraph breaks
+ while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
// should find a html tag now
if (tok==TK_HTMLTAG)
{
@@ -2433,7 +2439,7 @@ int DocHtmlList::parse()
do
{
- DocHtmlListItem *li=new DocHtmlListItem(this,g_token->attribs);
+ DocHtmlListItem *li=new DocHtmlListItem(this,g_token->attribs,num++);
m_children.append(li);
retval=li->parse();
} while (retval==RetVal_ListItem);
@@ -2500,11 +2506,12 @@ int DocAutoListItem::parse()
int DocAutoList::parse()
{
int retval = RetVal_OK;
+ int num=1;
g_nodeStack.push(this);
// first item or sub list => create new list
do
{
- DocAutoListItem *li = new DocAutoListItem(this);
+ DocAutoListItem *li = new DocAutoListItem(this,num++);
m_children.append(li);
retval=li->parse();
}
@@ -2542,7 +2549,7 @@ void DocTitle::parse()
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
- g_token->name.data());
+ tokToString(tok));
break;
}
}
@@ -2671,6 +2678,17 @@ int DocParamSect::parse(const QString &cmdName)
g_nodeStack.push(this);
DocParamList *pl = new DocParamList(this,m_type);
+ if (m_children.isEmpty())
+ {
+ pl->markFirst();
+ pl->markLast();
+ }
+ else
+ {
+ ASSERT(m_children.last()->kind()==DocNode::Kind_ParamList);
+ ((DocParamList *)m_children.last())->markLast(FALSE);
+ pl->markLast();
+ }
m_children.append(pl);
retval = pl->parse(cmdName);
@@ -2705,7 +2723,6 @@ int DocPara::handleSimpleSection(DocSimpleSect::Type t)
int DocPara::handleParamSection(const QString &cmdName,DocParamSect::Type t)
{
DocParamSect *ps=0;
-
if (!m_children.isEmpty() && // previous element
m_children.last()->kind()==Kind_ParamSect && // was a param sect
((DocParamSect *)m_children.last())->type()==t) // of same type
@@ -2762,7 +2779,7 @@ void DocPara::handleIncludeOperator(const QString &cmdName,DocIncOperator::Type
tokToString(tok),cmdName.data());
return;
}
- DocIncOperator *op = new DocIncOperator(this,t,g_token->name,g_context);
+ DocIncOperator *op = new DocIncOperator(this,t,g_token->name,g_context,g_isExample,g_fileName);
DocNode *n1 = m_children.last();
DocNode *n2 = n1!=0 ? m_children.prev() : 0;
bool isFirst = n1==0 || // no last node
@@ -2981,7 +2998,7 @@ void DocPara::handleInclude(const QString &cmdName,DocInclude::Type t)
tokToString(tok),cmdName.data());
return;
}
- DocInclude *inc = new DocInclude(this,g_token->name,g_context,t);
+ DocInclude *inc = new DocInclude(this,g_token->name,g_context,t,g_isExample,g_fileName);
m_children.append(inc);
inc->parse();
}
@@ -3119,7 +3136,7 @@ int DocPara::handleCommand(const QString &cmdName)
{
doctokenizerYYsetStateCode();
retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Code));
+ m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Code,g_isExample,g_fileName));
if (retval==0) warn(g_fileName,doctokenizerYYlineno,"Error: code section ended without end marker");
doctokenizerYYsetStatePara();
}
@@ -3128,7 +3145,7 @@ int DocPara::handleCommand(const QString &cmdName)
{
doctokenizerYYsetStateHtmlOnly();
retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly));
+ m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_fileName));
if (retval==0) warn(g_fileName,doctokenizerYYlineno,"Error: htmlonly section ended without end marker");
doctokenizerYYsetStatePara();
}
@@ -3137,7 +3154,7 @@ int DocPara::handleCommand(const QString &cmdName)
{
doctokenizerYYsetStateLatexOnly();
retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::LatexOnly));
+ m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_fileName));
if (retval==0) warn(g_fileName,doctokenizerYYlineno,"Error: latexonly section ended without end marker");
doctokenizerYYsetStatePara();
}
@@ -3146,7 +3163,7 @@ int DocPara::handleCommand(const QString &cmdName)
{
doctokenizerYYsetStateVerbatim();
retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Verbatim));
+ m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Verbatim,g_isExample,g_fileName));
if (retval==0) warn(g_fileName,doctokenizerYYlineno,"Error: verbatim section ended without end marker");
doctokenizerYYsetStatePara();
}
@@ -3317,7 +3334,7 @@ int DocPara::handleCommand(const QString &cmdName)
ASSERT(0);
break;
}
- ASSERT(retval==0 || retval==RetVal_OK || retval==RetVal_SimpleSec ||
+ INTERNAL_ASSERT(retval==0 || retval==RetVal_OK || retval==RetVal_SimpleSec ||
retval==TK_LISTITEM || retval==TK_ENDLIST || retval==TK_NEWPARA ||
retval==RetVal_Section || retval==RetVal_EndList ||
retval==RetVal_Internal || retval==RetVal_SwitchLang
@@ -3670,20 +3687,30 @@ reparsetoken:
m_children.append(new DocURL(this,g_token->name));
break;
case TK_WHITESPACE:
- // prevent leading whitespace and collapse multiple whitespace areas
- if (insidePRE(this) || // all whitespace is relavant
- ( // keep only whitespace after words, URL or symbols
- !m_children.isEmpty() /* &&
- (
- m_children.last()->kind()==DocNode::Kind_Word ||
- m_children.last()->kind()==DocNode::Kind_URL ||
- m_children.last()->kind()==DocNode::Kind_Symbol
- )*/
- )
- )
- {
- m_children.append(new DocWhiteSpace(this,g_token->chars));
- }
+ {
+ // prevent leading whitespace and collapse multiple whitespace areas
+ DocNode::Kind k;
+ if (insidePRE(this) || // all whitespace is relavant
+ (
+ // remove leading whitespace
+ !m_children.isEmpty() &&
+ // and whitespace after certain constructs
+ (k=m_children.last()->kind())!=DocNode::Kind_HtmlDescList &&
+ k!=DocNode::Kind_HtmlTable &&
+ k!=DocNode::Kind_HtmlList &&
+ k!=DocNode::Kind_SimpleSect &&
+ k!=DocNode::Kind_AutoList &&
+ k!=DocNode::Kind_SimpleList &&
+ k!=DocNode::Kind_Verbatim &&
+ k!=DocNode::Kind_HtmlHeader &&
+ k!=DocNode::Kind_ParamSect &&
+ k!=DocNode::Kind_XRefItem
+ )
+ )
+ {
+ m_children.append(new DocWhiteSpace(this,g_token->chars));
+ }
+ }
break;
case TK_LISTITEM:
{
@@ -3875,13 +3902,10 @@ endparagraph:
DocNode *n = g_nodeStack.pop();
ASSERT(n==this);
DBG(("DocPara::parse() end retval=%x\n",retval));
- ASSERT(retval==0 || retval==TK_NEWPARA || retval==TK_LISTITEM ||
+ INTERNAL_ASSERT(retval==0 || retval==TK_NEWPARA || retval==TK_LISTITEM ||
retval==TK_ENDLIST || retval>RetVal_OK
);
- if (!(retval==0 || retval==TK_NEWPARA || retval==TK_LISTITEM ||
- retval==TK_ENDLIST || retval>RetVal_OK
- )) warn(g_fileName,doctokenizerYYlineno,"DocPara::parse: Error retval=%x unexpected",retval);
return retval;
}
@@ -3962,7 +3986,7 @@ int DocSection::parse()
retval = s->parse();
}
}
- ASSERT(retval==0 || retval==RetVal_Section || retval==RetVal_Internal);
+ INTERNAL_ASSERT(retval==0 || retval==RetVal_Section || retval==RetVal_Internal);
DBG(("DocSection::parse() end\n"));
DocNode *n = g_nodeStack.pop();
@@ -3972,6 +3996,84 @@ int DocSection::parse()
//--------------------------------------------------------------------------
+void DocText::parse()
+{
+ g_nodeStack.push(this);
+ doctokenizerYYsetStateText();
+
+ int tok;
+ while ((tok=doctokenizerYYlex())) // get the next token
+ {
+ switch(tok)
+ {
+ case TK_WORD:
+ m_children.append(new DocWord(this,g_token->name));
+ break;
+ case TK_WHITESPACE:
+ m_children.append(new DocWhiteSpace(this,g_token->chars));
+ break;
+ case TK_SYMBOL:
+ {
+ char letter='\0';
+ DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name,&letter);
+ if (s!=DocSymbol::Unknown)
+ {
+ m_children.append(new DocSymbol(this,s,letter));
+ }
+ else
+ {
+ warn(g_fileName,doctokenizerYYlineno,"Error: Unsupported symbol %s found",
+ g_token->name.data());
+ }
+ }
+ break;
+ case TK_COMMAND:
+ switch (CmdMapper::map(g_token->name))
+ {
+ case CMD_BSLASH:
+ m_children.append(new DocSymbol(this,DocSymbol::BSlash));
+ break;
+ case CMD_AT:
+ m_children.append(new DocSymbol(this,DocSymbol::At));
+ break;
+ case CMD_LESS:
+ m_children.append(new DocSymbol(this,DocSymbol::Less));
+ break;
+ case CMD_GREATER:
+ m_children.append(new DocSymbol(this,DocSymbol::Greater));
+ break;
+ case CMD_AMP:
+ m_children.append(new DocSymbol(this,DocSymbol::Amp));
+ break;
+ case CMD_DOLLAR:
+ m_children.append(new DocSymbol(this,DocSymbol::Dollar));
+ break;
+ case CMD_HASH:
+ m_children.append(new DocSymbol(this,DocSymbol::Hash));
+ break;
+ case CMD_PERCENT:
+ m_children.append(new DocSymbol(this,DocSymbol::Percent));
+ break;
+ default:
+ warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected command `%s' found",
+ g_token->name.data());
+ break;
+ }
+ break;
+ default:
+ warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
+ tokToString(tok));
+ break;
+ }
+ }
+
+ DocNode *n = g_nodeStack.pop();
+ ASSERT(n==this);
+}
+
+
+//--------------------------------------------------------------------------
+
void DocRoot::parse()
{
g_nodeStack.push(this);
@@ -4037,11 +4139,11 @@ void DocRoot::parse()
DocNode *validatingParseDoc(const char *fileName,int startLine,
const char *context,MemberDef *md,
- const char *input)
+ const char *input,bool isExample)
{
- printf("========== validating %s at line %d\n",fileName,startLine);
- printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
+ //printf("========== validating %s at line %d\n",fileName,startLine);
+ //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
g_token = new TokenInfo;
g_context = context;
@@ -4054,6 +4156,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_includeFileText = "";
g_includeFileOffset = 0;
g_includeFileLength = 0;
+ g_isExample = isExample;
g_hasParamCommand = FALSE;
g_paramsFound.setAutoDelete(FALSE);
g_paramsFound.clear();
@@ -4084,3 +4187,36 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
return root;
}
+DocNode *validatingParseText(const char *input)
+{
+ //printf("------------ input ---------\n%s\n"
+ // "------------ end input -----\n",input);
+
+ g_token = new TokenInfo;
+ g_context = "";
+ g_fileName = "<parseText>";
+ g_memberDef = 0;
+ g_nodeStack.clear();
+ g_styleStack.clear();
+ g_inSeeBlock = FALSE;
+ g_insideHtmlLink = FALSE;
+ g_includeFileText = "";
+ g_includeFileOffset = 0;
+ g_includeFileLength = 0;
+ g_isExample = FALSE;
+ g_hasParamCommand = FALSE;
+ g_paramsFound.setAutoDelete(FALSE);
+ g_paramsFound.clear();
+
+ doctokenizerYYlineno=1;
+ doctokenizerYYinit(input,g_fileName);
+
+ // build abstract syntax tree
+ DocText *txt = new DocText;
+ txt->parse();
+
+ delete g_token;
+
+ return txt;
+}
+
diff --git a/src/docparser.h b/src/docparser.h
index 493e9e3..ba3e3fe 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -34,17 +34,26 @@ class MemberDef;
//---------------------------------------------------------------------------
/*! Main entry point for the documentation parser.
- * @param fileName File in which the documentation block is found.
+ * @param fileName File in which the documentation block is found (or the
+ * name of the example file in case isExample is TRUE).
* @param startLine Line at which the documentation block is found.
* @param context Class or namespace in which of the item to which this
* block belongs.
+ * @param md Member definition to which the documentation belongs.
+ * Can be 0.
* @param input String representation of the documentation block.
+ * @param isExample TRUE if the documentation belongs to an example.
* @returns Root node of the abstract syntax tree. Ownership of the
* pointer is handed over to the caller.
*/
DocNode *validatingParseDoc(const char *fileName,int startLine,
const char *context, MemberDef *md,
- const char *input);
+ const char *input,bool isExample);
+
+/*! Main entry point for parsing simple text fragments. These
+ * fragments are limited to words, whitespace and symbols.
+ */
+DocNode *validatingParseText(const char *input);
//---------------------------------------------------------------------------
@@ -100,7 +109,8 @@ class DocNode
Kind_ParamSect = 44,
Kind_ParamList = 45,
Kind_InternalRef = 46,
- Kind_Copy = 47
+ Kind_Copy = 47,
+ Kind_Text = 48
};
/*! Destructor. */
virtual ~DocNode() {}
@@ -306,20 +316,26 @@ class DocVerbatim : public DocNode
public:
enum Type { Code, HtmlOnly, LatexOnly, Verbatim };
DocVerbatim(DocNode *parent,const QString &context,
- const QString &text, Type t) :
- m_parent(parent), m_context(context), m_text(text), m_type(t) {}
+ const QString &text, Type t,bool isExample,
+ const QString &exampleFile) :
+ m_parent(parent), m_context(context), m_text(text), m_type(t),
+ m_isExample(isExample), m_exampleFile(exampleFile) {}
Kind kind() const { return Kind_Verbatim; }
Type type() const { return m_type; }
QString text() const { return m_text; }
QString context() const { return m_context; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
+ bool isExample() const { return m_isExample; }
+ QString exampleFile() const { return m_exampleFile; }
private:
DocNode *m_parent;
QString m_context;
QString m_text;
Type m_type;
+ bool m_isExample;
+ QString m_exampleFile;
};
/*! @brief Node representing an included text block from file */
@@ -328,15 +344,19 @@ class DocInclude : public DocNode
public:
enum Type { Include, DontInclude, VerbInclude, HtmlInclude };
DocInclude(DocNode *parent,const QString &file,
- const QString context, Type t) :
- m_parent(parent), m_file(file), m_context(context), m_type(t) {}
- Kind kind() const { return Kind_Include; }
- QString file() const { return m_file; }
- Type type() const { return m_type; }
- QString text() const { return m_text; }
- QString context() const { return m_context; }
- DocNode *parent() const { return m_parent; }
- void accept(DocVisitor *v) { v->visit(this); }
+ const QString context, Type t,
+ bool isExample,const QString exampleFile) :
+ m_parent(parent), m_file(file), m_context(context), m_type(t),
+ m_isExample(isExample), m_exampleFile(exampleFile) {}
+ Kind kind() const { return Kind_Include; }
+ QString file() const { return m_file; }
+ Type type() const { return m_type; }
+ QString text() const { return m_text; }
+ QString context() const { return m_context; }
+ DocNode *parent() const { return m_parent; }
+ bool isExample() const { return m_isExample; }
+ QString exampleFile() const { return m_exampleFile; }
+ void accept(DocVisitor *v) { v->visit(this); }
void parse();
private:
@@ -345,6 +365,8 @@ class DocInclude : public DocNode
QString m_context;
QString m_text;
Type m_type;
+ bool m_isExample;
+ QString m_exampleFile;
};
/*! @brief Node representing a include/dontinclude operator block */
@@ -353,21 +375,24 @@ class DocIncOperator : public DocNode
public:
enum Type { Line, SkipLine, Skip, Until };
DocIncOperator(DocNode *parent,Type t,const QString &pat,
- const QString &context) :
+ const QString &context,bool isExample,const QString &exampleFile) :
m_parent(parent), m_type(t), m_pattern(pat), m_context(context),
- m_isFirst(FALSE), m_isLast(FALSE) {}
- Kind kind() const { return Kind_IncOperator; }
- Type type() const { return m_type; }
- QString text() const { return m_text; }
- QString pattern() const { return m_pattern; }
- QString context() const { return m_context; }
- DocNode *parent() const { return m_parent; }
- void accept(DocVisitor *v) { v->visit(this); }
- void parse();
- bool isFirst() const { return m_isFirst; }
- bool isLast() const { return m_isLast; }
+ m_isFirst(FALSE), m_isLast(FALSE),
+ m_isExample(isExample), m_exampleFile(exampleFile) {}
+ Kind kind() const { return Kind_IncOperator; }
+ Type type() const { return m_type; }
+ QString text() const { return m_text; }
+ QString pattern() const { return m_pattern; }
+ QString context() const { return m_context; }
+ DocNode *parent() const { return m_parent; }
+ void accept(DocVisitor *v) { v->visit(this); }
+ bool isFirst() const { return m_isFirst; }
+ bool isLast() const { return m_isLast; }
void markFirst(bool v=TRUE) { m_isFirst = v; }
void markLast(bool v=TRUE) { m_isLast = v; }
+ bool isExample() const { return m_isExample; }
+ QString exampleFile() const { return m_exampleFile; }
+ void parse();
private:
DocNode *m_parent;
@@ -377,6 +402,8 @@ class DocIncOperator : public DocNode
QString m_context;
bool m_isFirst;
bool m_isLast;
+ bool m_isExample;
+ QString m_exampleFile;
};
/*! @brief Node representing an item of a cross-referenced list */
@@ -886,7 +913,7 @@ class DocParamList : public DocNode
{
public:
DocParamList(DocNode *parent,DocParamSect::Type t)
- : m_parent(parent) , m_type(t)
+ : m_parent(parent) , m_type(t), m_isFirst(TRUE), m_isLast(TRUE)
{ m_paragraph=new DocPara(this); }
virtual ~DocParamList()
{ delete m_paragraph; }
@@ -895,6 +922,10 @@ class DocParamList : public DocNode
DocNode *parent() const { return m_parent; }
const QStrList &parameters() { return m_params; }
DocParamSect::Type type() const { return m_type; }
+ void markFirst(bool b=TRUE) { m_isFirst=b; }
+ void markLast(bool b=TRUE) { m_isLast=b; }
+ bool isFirst() const { return m_isFirst; }
+ bool isLast() const { return m_isLast; }
void accept(DocVisitor *v)
{
v->visitPre(this);
@@ -907,18 +938,21 @@ class DocParamList : public DocNode
DocPara * m_paragraph;
QStrList m_params;
DocParamSect::Type m_type;
+ bool m_isFirst;
+ bool m_isLast;
};
/*! @brief Node representing an item of a auto list */
class DocAutoListItem : public DocNode
{
public:
- DocAutoListItem(DocNode *parent) : m_parent(parent)
+ DocAutoListItem(DocNode *parent,int num) : m_parent(parent), m_itemNum(num)
{ m_paragraph=new DocPara(this); }
virtual ~DocAutoListItem() { delete m_paragraph; }
int parse();
Kind kind() const { return Kind_AutoListItem; }
DocNode *parent() const { return m_parent; }
+ int itemNumber() const { return m_itemNum; }
void accept(DocVisitor *v)
{
v->visitPre(this);
@@ -928,6 +962,7 @@ class DocAutoListItem : public DocNode
private:
DocNode *m_parent;
DocPara *m_paragraph;
+ int m_itemNum;
};
/*! @brief Node representing a simple list item */
@@ -956,17 +991,19 @@ class DocSimpleListItem : public DocNode
class DocHtmlListItem : public CompAccept<DocHtmlListItem>, public DocNode
{
public:
- DocHtmlListItem(DocNode *parent,const HtmlAttribList &attribs) :
- m_parent(parent), m_attribs(attribs) {}
+ DocHtmlListItem(DocNode *parent,const HtmlAttribList &attribs,int num) :
+ m_parent(parent), m_attribs(attribs), m_itemNum(num) {}
int parse();
Kind kind() const { return Kind_HtmlListItem; }
+ int itemNumber() const { return m_itemNum; }
const HtmlAttribList &attribs() const { return m_attribs; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHtmlListItem>::accept(this,v); }
private:
- DocNode * m_parent;
+ DocNode * m_parent;
HtmlAttribList m_attribs;
+ int m_itemNum;
};
/*! @brief Node representing a Html description data */
@@ -1107,6 +1144,16 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
HtmlAttribList m_attribs;
};
+/*! @brief Root node of a text fragment */
+class DocText : public CompAccept<DocText>, public DocNode
+{
+ public:
+ DocText() {}
+ void parse();
+ Kind kind() const { return Kind_Text; }
+ DocNode *parent() const { return 0; }
+ void accept(DocVisitor *v) { CompAccept<DocText>::accept(this,v); }
+};
/*! @brief Root node of documentation tree */
class DocRoot : public CompAccept<DocRoot>, public DocNode
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index b4cea48..cb0a823 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -118,5 +118,6 @@ void doctokenizerYYsetStatePattern();
void doctokenizerYYsetStateLink();
void doctokenizerYYsetStateRef();
void doctokenizerYYsetStateInternalRef();
+void doctokenizerYYsetStateText();
#endif
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index f26f979..4ab99b0 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -264,6 +264,7 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*">"
%x St_Ref
%x St_Ref2
%x St_IntRef
+%x St_Text
%%
<St_Para>\r /* skip carriage return */
@@ -349,17 +350,17 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*">"
g_token->endTag = startNamePos==2;
return TK_HTMLTAG;
}
-<St_Para>"&"{ID}";" { /* special symbol */
+<St_Para,St_Text>"&"{ID}";" { /* special symbol */
g_token->name = yytext;
return TK_SYMBOL;
}
-<St_Para>{LNKWORD1} |
+<St_Para>{LNKWORD1}/[^a-z_A-Z0-9] |
<St_Para>{LNKWORD2} {
g_token->name = yytext;
return TK_LNKWORD;
}
-<St_Para>{WORD1} |
-<St_Para>{WORD2} { /* function call */
+<St_Para,St_Text>{WORD1} |
+<St_Para,St_Text>{WORD2} { /* function call */
g_token->name = yytext;
return TK_WORD;
@@ -369,11 +370,15 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*">"
*/
goto find_rule;
}
-<St_Para>{BLANK}+ |
-<St_Para>{BLANK}*\n{BLANK}* { /* white space */
+<St_Para,St_Text>{BLANK}+ |
+<St_Para,St_Text>{BLANK}*\n{BLANK}* { /* white space */
g_token->chars=yytext;
return TK_WHITESPACE;
}
+<St_Text>[\\@<>&$#%~] {
+ g_token->name = yytext;
+ return TK_COMMAND;
+ }
<St_Para>({BLANK}*\n)+{BLANK}*\n {
/* start of a new paragraph */
return TK_NEWPARA;
@@ -588,6 +593,11 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*">"
<*>\n {
warn(g_fileName,yylineno,"Error: Unexpected new line character");
}
+<*>[\\@<>&$#%~] { /* unescaped special character */
+ warn(g_fileName,yylineno,"Warning: Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext);
+ g_token->name = yytext;
+ return TK_COMMAND;
+ }
<*>. {
warn(g_fileName,yylineno,"Error: Unexpected character `%s'",yytext);
}
@@ -672,6 +682,11 @@ void doctokenizerYYsetStateInternalRef()
BEGIN(St_IntRef);
}
+void doctokenizerYYsetStateText()
+{
+ BEGIN(St_Text);
+}
+
void doctokenizerYYcleanup()
{
yy_delete_buffer( YY_CURRENT_BUFFER );
diff --git a/src/docvisitor.h b/src/docvisitor.h
index 3373f16..e9cc03a 100644
--- a/src/docvisitor.h
+++ b/src/docvisitor.h
@@ -68,6 +68,7 @@ class DocParamSect;
class DocParamList;
class DocInternalRef;
class DocCopy;
+class DocText;
/*! @brief Abstract visitor that participates in the visitor pattern.
*/
@@ -164,6 +165,8 @@ class DocVisitor
virtual void visitPost(DocInternalRef *) = 0;
virtual void visitPre(DocCopy *) = 0;
virtual void visitPost(DocCopy *) = 0;
+ virtual void visitPre(DocText *) = 0;
+ virtual void visitPost(DocText *) = 0;
/*! @} */
};
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 9164ed6..14ff70f 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -30,7 +30,6 @@
#include "version.h"
#include "doxygen.h"
#include "scanner.h"
-#include "doc.h"
#include "entry.h"
#include "index.h"
#include "logos.h"
@@ -56,6 +55,7 @@
#include "rtfgen.h"
#include "xmlgen.h"
#include "defgen.h"
+#include "perlmodgen.h"
#include "reflist.h"
#include "page.h"
//#include "packagedef.h"
@@ -1112,6 +1112,7 @@ static void findUsingDeclarations(Entry *root)
"<generated>",1,
root->name,ClassDef::Class);
Doxygen::hiddenClasses.append(root->name,usingCd);
+ usingCd->setClassIsArtificial();
}
// add the namespace the correct scope
@@ -6020,7 +6021,7 @@ static void generatePageDocs()
{
scName=pi->context->name();
}
- parseDoc(*outputList,pi->defFileName,pi->defLine,scName,0,pi->doc);
+ outputList->parseDoc(pi->defFileName,pi->defLine,scName,0,pi->doc,FALSE);
outputList->endTextBlock();
endFile(*outputList);
//outputList->enable(OutputGenerator::Man);
@@ -6091,7 +6092,13 @@ static void generateExampleDocs()
startTitle(*outputList,n);
outputList->docify(pi->name);
endTitle(*outputList,n,0);
- parseExample(*outputList,pi->doc+"\n\\include "+pi->name,pi->name);
+ outputList->parseDoc(pi->name, // file
+ pi->defLine, // startLine
+ pi->context?pi->context->name().data():0, // context
+ 0, // memberDef
+ pi->doc+"\n\\include "+pi->name, // docs
+ TRUE // is example
+ );
endFile(*outputList);
}
outputList->enable(OutputGenerator::Man);
@@ -7809,13 +7816,13 @@ void generateOutput()
msg("Generating style sheet...\n");
outputList->writeStyleInfo(0); // write first part
outputList->disableAllBut(OutputGenerator::Latex);
- parseText(*outputList,
+ outputList->parseText(
theTranslator->trGeneratedAt(dateToString(TRUE),Config_getString("PROJECT_NAME"))
);
outputList->writeStyleInfo(1); // write second part
//parseText(*outputList,theTranslator->trWrittenBy());
outputList->writeStyleInfo(2); // write third part
- parseText(*outputList,
+ outputList->parseText(
theTranslator->trGeneratedAt(dateToString(TRUE),Config_getString("PROJECT_NAME"))
);
outputList->writeStyleInfo(3); // write fourth part
@@ -7879,6 +7886,11 @@ void generateOutput()
msg("Generating AutoGen DEF output...\n");
generateDEF();
}
+ if (Config_getBool("GENERATE_PERLMOD"))
+ {
+ msg("Generating PerlMod output...\n");
+ generatePerlMod();
+ }
if (Config_getBool("GENERATE_HTMLHELP") && !Config_getString("HHC_LOCATION").isEmpty())
{
msg("Running html help compiler...\n");
diff --git a/src/filedef.cpp b/src/filedef.cpp
index a2e5e7c..02716ee 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -19,7 +19,6 @@
#include "memberlist.h"
#include "classlist.h"
#include "filedef.h"
-#include "doc.h"
#include "doxygen.h"
#include "memberdef.h"
#include "classdef.h"
@@ -114,11 +113,11 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
//if (latexOn) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState();
ol.startGroupHeader();
- parseText(ol,theTranslator->trDetailedDescription());
+ ol.parseText(theTranslator->trDetailedDescription());
ol.endGroupHeader();
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- parseDoc(ol,briefFile(),briefLine(),0,0,briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),0,0,briefDescription(),FALSE);
}
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
@@ -129,7 +128,7 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
{
//if (doc.at(dl-1)!='.' && doc.at(dl-1)!='!' && doc.at(dl-1)!='?')
// doc+='.';
- parseDoc(ol,docFile(),docLine(),0,0,documentation()+"\n");
+ ol.parseDoc(docFile(),docLine(),0,0,documentation()+"\n",FALSE);
}
//printf("Writing source ref for file %s\n",name().data());
if (Config_getBool("SOURCE_BROWSER"))
@@ -139,10 +138,10 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
int fileMarkerPos = refText.find("@0");
if (fileMarkerPos!=-1) // should always pass this.
{
- parseText(ol,refText.left(fileMarkerPos)); //text left from marker 1
+ ol.parseText(refText.left(fileMarkerPos)); //text left from marker 1
ol.writeObjectLink(0,getSourceFileBase(),
0,name());
- parseText(ol,refText.right(
+ ol.parseText(refText.right(
refText.length()-fileMarkerPos-2)); // text right from marker 2
}
}
@@ -167,7 +166,7 @@ void FileDef::writeDocumentation(OutputList &ol)
QCString pageTitle=name()+" File Reference";
startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase());
- parseText(ol,theTranslator->trFileReference(docname));
+ ol.parseText(theTranslator->trFileReference(docname));
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),docName());
//ol.newParagraph();
@@ -190,11 +189,11 @@ void FileDef::writeDocumentation(OutputList &ol)
}
else if (briefDescription())
{
- parseDoc(ol,briefFile(),briefLine(),0,0,briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),0,0,briefDescription(),FALSE);
ol.writeString(" \n");
ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(0,"_details");
- parseText(ol,theTranslator->trMore());
+ ol.parseText(theTranslator->trMore());
ol.endTextLink();
ol.enableAll();
ol.disable(OutputGenerator::Man);
@@ -288,7 +287,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.disable(OutputGenerator::Man);
ol.newParagraph();
ol.startInclDepGraph();
- parseText(ol,theTranslator->trInclDepGraph(name()));
+ ol.parseText(theTranslator->trInclDepGraph(name()));
ol.endInclDepGraph(incDepGraph);
ol.enableAll();
}
@@ -304,7 +303,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.disable(OutputGenerator::Man);
ol.newParagraph();
ol.startInclDepGraph();
- parseText(ol,theTranslator->trInclByDepGraph());
+ ol.parseText(theTranslator->trInclByDepGraph());
ol.endInclDepGraph(incDepGraph);
ol.enableAll();
}
@@ -317,7 +316,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.disableAllBut(OutputGenerator::Html);
ol.newParagraph();
ol.startTextLink(includeName(),0);
- parseText(ol,theTranslator->trGotoSourceCode());
+ ol.parseText(theTranslator->trGotoSourceCode());
ol.endTextLink();
ol.enableAll();
}
@@ -338,7 +337,7 @@ void FileDef::writeDocumentation(OutputList &ol)
if (!found)
{
ol.startMemberHeader();
- parseText(ol,theTranslator->trNamespaces());
+ ol.parseText(theTranslator->trNamespaces());
ol.endMemberHeader();
ol.startMemberList();
found=TRUE;
@@ -418,9 +417,9 @@ void FileDef::writeDocumentation(OutputList &ol)
// write Author section (Man only)
ol.disableAllBut(OutputGenerator::Man);
ol.startGroupHeader();
- parseText(ol,theTranslator->trAuthor(TRUE,TRUE));
+ ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
ol.endGroupHeader();
- parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
+ ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
ol.enableAll();
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
@@ -438,13 +437,13 @@ void FileDef::writeSource(OutputList &ol)
ol.disableAllBut(OutputGenerator::Html);
startFile(ol,getSourceFileBase(),0,docname+" Source File");
startTitle(ol,0);
- parseText(ol,docname);
+ ol.parseText(docname);
endTitle(ol,0,0);
if (isLinkable())
{
ol.startTextLink(getOutputFileBase(),0);
- parseText(ol,theTranslator->trGotoDocumentation());
+ ol.parseText(theTranslator->trGotoDocumentation());
ol.endTextLink();
}
diff --git a/src/formula.cpp b/src/formula.cpp
index a9541c8..3965bdf 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -171,7 +171,7 @@ void FormulaList::generateBitmaps(const char *path)
// Then we run ghostscript to convert the postscript to a pixmap
// The pixmap is a truecolor image, where only black and white are
// used.
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__CYGWIN__)
char gsArgs[256];
sprintf(gsArgs,"-q -g%dx%d -r%dx%dx -sDEVICE=ppmraw "
"-sOutputFile=%s.pnm -dNOPAUSE -dBATCH -- %s.ps",
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index ff2e09c..804d948 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -22,7 +22,6 @@
#include "filedef.h"
#include "classlist.h"
#include "outputlist.h"
-#include "doc.h"
#include "namespacedef.h"
#include "language.h"
#include "util.h"
@@ -359,13 +358,13 @@ void GroupDef::writeDetailedDocumentation(OutputList &ol)
ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
- parseText(ol,theTranslator->trDetailedDescription());
+ ol.parseText(theTranslator->trDetailedDescription());
ol.endGroupHeader();
// repeat brief description
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- parseDoc(ol,briefFile(),briefLine(),name(),0,briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),name(),0,briefDescription(),FALSE);
ol.newParagraph();
}
}
@@ -373,7 +372,7 @@ void GroupDef::writeDetailedDocumentation(OutputList &ol)
// write documentation
if (!documentation().isEmpty())
{
- parseDoc(ol,docFile(),docLine(),name(),0,documentation()+"\n");
+ ol.parseDoc(docFile(),docLine(),name(),0,documentation()+"\n",FALSE);
}
}
}
@@ -396,13 +395,13 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
else if (!briefDescription().isEmpty())
{
- parseDoc(ol,briefFile(),briefLine(),name(),0,briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),name(),0,briefDescription(),FALSE);
ol.writeString(" \n");
ol.pushGeneratorState();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startTextLink(0,"_details");
- parseText(ol,theTranslator->trMore());
+ ol.parseText(theTranslator->trMore());
ol.endTextLink();
//ol.enable(OutputGenerator::Latex);
ol.popGeneratorState();
@@ -422,7 +421,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (fileList->count()>0)
{
ol.startMemberHeader();
- parseText(ol,theTranslator->trFile(TRUE,FALSE));
+ ol.parseText(theTranslator->trFile(TRUE,FALSE));
ol.endMemberHeader();
ol.startMemberList();
FileDef *fd=fileList->first();
@@ -440,7 +439,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription();
- parseDoc(ol,briefFile(),briefLine(),0,0,fd->briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),0,0,fd->briefDescription(),FALSE);
ol.endMemberDescription();
ol.newParagraph();
}
@@ -453,7 +452,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (namespaceList->count()>0)
{
ol.startMemberHeader();
- parseText(ol,theTranslator->trNamespaces());
+ ol.parseText(theTranslator->trNamespaces());
ol.endMemberHeader();
ol.startMemberList();
NamespaceDef *nd=namespaceList->first();
@@ -471,7 +470,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription();
- parseDoc(ol,briefFile(),briefLine(),0,0,nd->briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),0,0,nd->briefDescription(),FALSE);
ol.endMemberDescription();
ol.newParagraph();
}
@@ -484,7 +483,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (groupList->count()>0)
{
ol.startMemberHeader();
- parseText(ol,theTranslator->trModules());
+ ol.parseText(theTranslator->trModules());
ol.endMemberHeader();
ol.startMemberList();
GroupDef *gd=groupList->first();
@@ -501,7 +500,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription();
- parseDoc(ol,briefFile(),briefLine(),0,0,gd->briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),0,0,gd->briefDescription(),FALSE);
ol.endMemberDescription();
ol.newParagraph();
}
@@ -561,7 +560,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.endSection(si->label,SectionInfo::Subsection);
}
ol.startTextBlock();
- parseDoc(ol,pi->defFileName,pi->defLine,0,0,pi->doc);
+ ol.parseDoc(pi->defFileName,pi->defLine,0,0,pi->doc,FALSE);
ol.endTextBlock();
}
}
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 0d31529..43cabdb 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -32,8 +32,6 @@ static QString htmlAttribsToString(const HtmlAttribList &attribs)
HtmlAttrib *att;
for (li.toFirst();(att=li.current());++li)
{
- printf("Found attion name=`%s' value=`%s'\n",
- att->name.data(),att->value.data());
result+=" ";
result+=att->name;
if (!att->value.isEmpty()) result+="=\""+att->value+"\"";
@@ -165,7 +163,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
{
case DocVerbatim::Code: // fall though
m_t << "<div class=\"fragment\"><pre>";
- parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
+ parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile());
m_t << "</pre></div>";
break;
case DocVerbatim::Verbatim:
@@ -195,7 +193,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
{
case DocInclude::Include:
m_t << "<div class=\"fragment\"><pre>";
- parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
+ parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile());
m_t << "</pre></div>";
break;
case DocInclude::DontInclude:
@@ -222,7 +220,7 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
}
if (op->type()!=DocIncOperator::Skip)
{
- parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
+ parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile());
}
if (op->isLast())
{
@@ -786,6 +784,14 @@ void HtmlDocVisitor::visitPost(DocCopy *)
{
}
+void HtmlDocVisitor::visitPre(DocText *)
+{
+}
+
+void HtmlDocVisitor::visitPost(DocText *)
+{
+}
+
void HtmlDocVisitor::filter(const char *str)
{
if (str==0) return;
diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h
index 9c944b9..0c49685 100644
--- a/src/htmldocvisitor.h
+++ b/src/htmldocvisitor.h
@@ -122,6 +122,8 @@ class HtmlDocVisitor : public DocVisitor
void visitPost(DocInternalRef *);
void visitPre(DocCopy *);
void visitPost(DocCopy *);
+ void visitPre(DocText *);
+ void visitPost(DocText *);
private:
diff --git a/src/index.cpp b/src/index.cpp
index 69a19ae..bc75138 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -24,7 +24,6 @@
#include "message.h"
#include "index.h"
#include "doxygen.h"
-#include "doc.h"
#include "code.h"
#include "config.h"
#include "filedef.h"
@@ -187,7 +186,7 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
{
ol.startQuickIndexItem(extLink,"index"+Doxygen::htmlFileExtension);
}
- parseText(ol,theTranslator->trMainPage());
+ ol.parseText(theTranslator->trMainPage());
ol.endQuickIndexItem();
//if (documentedPackages>0)
@@ -201,7 +200,7 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"modules"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trModules());
+ ol.parseText(theTranslator->trModules());
ol.endQuickIndexItem();
}
if (documentedNamespaces>0)
@@ -210,11 +209,11 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
ol.startQuickIndexItem(extLink,"namespaces"+Doxygen::htmlFileExtension);
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
- parseText(ol,theTranslator->trPackages());
+ ol.parseText(theTranslator->trPackages());
}
else
{
- parseText(ol,theTranslator->trNamespaceList());
+ ol.parseText(theTranslator->trNamespaceList());
}
ol.endQuickIndexItem();
}
@@ -222,7 +221,7 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"hierarchy"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trClassHierarchy());
+ ol.parseText(theTranslator->trClassHierarchy());
ol.endQuickIndexItem();
}
if (annotatedClasses>0)
@@ -231,19 +230,19 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"classes"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trAlphabeticalList());
+ ol.parseText(theTranslator->trAlphabeticalList());
ol.endQuickIndexItem();
}
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"annotated"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trCompoundList());
+ ol.parseText(theTranslator->trCompoundList());
ol.endQuickIndexItem();
}
if (documentedHtmlFiles>0)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"files"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trFileList());
+ ol.parseText(theTranslator->trFileList());
ol.endQuickIndexItem();
}
//if (documentedIncludeFiles>0 && Config_getBool("VERBATIM_HEADERS"))
@@ -264,42 +263,42 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"namespacemembers"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trNamespaceMembers());
+ ol.parseText(theTranslator->trNamespaceMembers());
ol.endQuickIndexItem();
}
if (documentedMembers>0)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"functions"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trCompoundMembers());
+ ol.parseText(theTranslator->trCompoundMembers());
ol.endQuickIndexItem();
}
if (documentedFunctions>0)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"globals"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trFileMembers());
+ ol.parseText(theTranslator->trFileMembers());
ol.endQuickIndexItem();
}
if (indexedPages>0)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"pages"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trRelatedPages());
+ ol.parseText(theTranslator->trRelatedPages());
ol.endQuickIndexItem();
}
if (Doxygen::exampleSDict->count()>0)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"examples"+Doxygen::htmlFileExtension);
- parseText(ol,theTranslator->trExamples());
+ ol.parseText(theTranslator->trExamples());
ol.endQuickIndexItem();
}
if (Config_getBool("SEARCHENGINE"))
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem("_cgi","");
- parseText(ol,theTranslator->trSearch());
+ ol.parseText(theTranslator->trSearch());
ol.endQuickIndexItem();
}
if (compact)
@@ -341,7 +340,7 @@ void endFile(OutputList &ol,bool external)
ol.writeFooter(0,external); // write the footer
if (Config_getString("HTML_FOOTER").isEmpty())
{
- parseText(ol,theTranslator->trGeneratedAt(
+ ol.parseText(theTranslator->trGeneratedAt(
dateToString(TRUE),
Config_getString("PROJECT_NAME")
));
@@ -714,7 +713,7 @@ void writeHierarchicalIndex(OutputList &ol)
{
title.prepend(Config_getString("PROJECT_NAME")+" ");
}
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startTextBlock();
HtmlHelp *htmlHelp = 0;
@@ -737,13 +736,13 @@ void writeHierarchicalIndex(OutputList &ol)
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startTextLink("inherits",0);
- parseText(ol,theTranslator->trGotoGraphicalHierarchy());
+ ol.parseText(theTranslator->trGotoGraphicalHierarchy());
ol.endTextLink();
ol.newParagraph();
ol.enable(OutputGenerator::Latex);
ol.enable(OutputGenerator::RTF);
}
- parseText(ol,theTranslator->trClassHierarchyDescription());
+ ol.parseText(theTranslator->trClassHierarchyDescription());
ol.endTextBlock();
writeClassHierarchy(ol);
endFile(ol);
@@ -762,7 +761,7 @@ void writeGraphicalClassHierarchy(OutputList &ol)
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startTextBlock();
HtmlHelp *htmlHelp = 0;
@@ -781,7 +780,7 @@ void writeGraphicalClassHierarchy(OutputList &ol)
ftvHelp->addContentsItem(FALSE,0,"inherits",0,ftvHelpTitle);
}
ol.startTextLink("hierarchy",0);
- parseText(ol,theTranslator->trGotoTextualHierarchy());
+ ol.parseText(theTranslator->trGotoTextualHierarchy());
ol.endTextLink();
ol.newParagraph();
//parseText(ol,theTranslator->trClassHierarchyDescription());
@@ -841,7 +840,7 @@ void writeFileIndex(OutputList &ol)
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startTextBlock();
HtmlHelp *htmlHelp = 0;
@@ -862,7 +861,7 @@ void writeFileIndex(OutputList &ol)
ftvHelp->incContentsDepth();
}
//ol.newParagraph();
- parseText(ol,theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL")));
+ ol.parseText(theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL")));
//ol.newParagraph();
ol.endTextBlock();
@@ -1000,7 +999,7 @@ void writeFileIndex(OutputList &ol)
ol.docify(" ");
ol.startTextLink(fd->includeName(),0);
ol.docify("[");
- parseText(ol,theTranslator->trCode());
+ ol.parseText(theTranslator->trCode());
ol.docify("]");
ol.endTextLink();
ol.popGeneratorState();
@@ -1011,10 +1010,12 @@ void writeFileIndex(OutputList &ol)
if (hasBrief)
{
//ol.docify(" (");
- parseDoc(ol,
+ ol.parseDoc(
fd->briefFile(),fd->briefLine(),
0,0,
- abbreviate(fd->briefDescription(),fd->name()));
+ abbreviate(fd->briefDescription(),fd->name()),
+ FALSE
+ );
//ol.docify(")");
}
ol.endIndexValue(fd->getOutputFileBase(),hasBrief);
@@ -1080,7 +1081,7 @@ void writeNamespaceIndex(OutputList &ol)
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startTextBlock();
HtmlHelp *htmlHelp = 0;
@@ -1103,11 +1104,11 @@ void writeNamespaceIndex(OutputList &ol)
//ol.newParagraph();
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
- parseText(ol,theTranslator->trPackageListDescription());
+ ol.parseText(theTranslator->trPackageListDescription());
}
else
{
- parseText(ol,theTranslator->trNamespaceListDescription(Config_getBool("EXTRACT_ALL")));
+ ol.parseText(theTranslator->trNamespaceListDescription(Config_getBool("EXTRACT_ALL")));
}
//ol.newParagraph();
ol.endTextBlock();
@@ -1134,10 +1135,12 @@ void writeNamespaceIndex(OutputList &ol)
if (hasBrief)
{
//ol.docify(" (");
- parseDoc(ol,
+ ol.parseDoc(
nd->briefFile(),nd->briefLine(),
nd->name(),0,
- abbreviate(nd->briefDescription(),nd->displayName()));
+ abbreviate(nd->briefDescription(),nd->displayName()),
+ FALSE
+ );
//ol.docify(")");
}
ol.endIndexValue(nd->getOutputFileBase(),hasBrief);
@@ -1209,12 +1212,12 @@ void writeAnnotatedClassList(OutputList &ol)
ol.startIndexValue(hasBrief);
if (hasBrief)
{
- //ol.docify(" (");
- parseDoc(ol,
+ ol.parseDoc(
cd->briefFile(),cd->briefLine(),
cd->name(),0,
- abbreviate(cd->briefDescription(),cd->name()));
- //ol.docify(")");
+ abbreviate(cd->briefDescription(),cd->name()),
+ FALSE
+ );
}
ol.endIndexValue(cd->getOutputFileBase(),hasBrief);
//ol.writeEndAnnoItem(cd->getOutputFileBase());
@@ -1432,7 +1435,7 @@ void writeAlphabeticalIndex(OutputList &ol)
ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"classes"+Doxygen::htmlFileExtension,0,"Alphabetical index");
startTitle(ol,0);
- parseText(ol,Config_getString("PROJECT_NAME")+" "+theTranslator->trCompoundIndex());
+ ol.parseText(Config_getString("PROJECT_NAME")+" "+theTranslator->trCompoundIndex());
endTitle(ol,0,0);
writeAlphabeticalClassList(ol);
endFile(ol);
@@ -1457,7 +1460,7 @@ void writeAnnotatedIndex(OutputList &ol)
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startTextBlock();
HtmlHelp *htmlHelp = 0;
@@ -1474,7 +1477,7 @@ void writeAnnotatedIndex(OutputList &ol)
ftvHelp->addContentsItem(TRUE,0,"annotated",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
- parseText(ol,theTranslator->trCompoundListDescription());
+ ol.parseText(theTranslator->trCompoundListDescription());
ol.endTextBlock();
writeAnnotatedClassList(ol);
if (hasHtmlHelp)
@@ -1701,7 +1704,7 @@ void writeMemberIndex(OutputList &ol)
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
startTitle(ol,0);
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
bool quickIndex = documentedMembers>maxItemsBeforeQuickIndex;
if (quickIndex)
@@ -1721,7 +1724,7 @@ void writeMemberIndex(OutputList &ol)
FTVHelp *ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(FALSE,0,"functions",0,ftvHelpTitle);
}
- parseText(ol,theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL")));
+ ol.parseText(theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL")));
writeMemberList(ol,quickIndex);
endFile(ol);
ol.popGeneratorState();
@@ -1958,7 +1961,7 @@ void writeFileMemberIndex(OutputList &ol)
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
startTitle(ol,0);
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
bool quickIndex = documentedMembers>maxItemsBeforeQuickIndex;
if (quickIndex)
@@ -1978,7 +1981,7 @@ void writeFileMemberIndex(OutputList &ol)
FTVHelp *ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(FALSE,0,"globals",0,ftvHelpTitle);
}
- parseText(ol,theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL")));
+ ol.parseText(theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL")));
writeFileMemberList(ol,quickIndex);
endFile(ol);
ol.popGeneratorState();
@@ -1997,7 +2000,7 @@ void writeNamespaceMemberIndex(OutputList &ol)
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
startTitle(ol,0);
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
bool quickIndex = documentedMembers>maxItemsBeforeQuickIndex;
if (quickIndex)
@@ -2017,7 +2020,7 @@ void writeNamespaceMemberIndex(OutputList &ol)
FTVHelp *ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(FALSE,0,"namespacemembers",0,ftvHelpTitle);
}
- parseText(ol,theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL")));
+ ol.parseText(theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL")));
writeNamespaceMemberList(ol,quickIndex);
endFile(ol);
ol.popGeneratorState();
@@ -2036,7 +2039,7 @@ void writeExampleIndex(OutputList &ol)
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startTextBlock();
HtmlHelp *htmlHelp = 0;
@@ -2056,7 +2059,7 @@ void writeExampleIndex(OutputList &ol)
ftvHelp->addContentsItem(TRUE,0,"examples",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
- parseText(ol,theTranslator->trExamplesDescription());
+ ol.parseText(theTranslator->trExamplesDescription());
//ol.newParagraph();
ol.endTextBlock();
ol.startItemList();
@@ -2140,7 +2143,7 @@ void writePageIndex(OutputList &ol)
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startTextBlock();
HtmlHelp *htmlHelp = 0;
@@ -2160,7 +2163,7 @@ void writePageIndex(OutputList &ol)
ftvHelp->addContentsItem(TRUE,0,"pages",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
- parseText(ol,theTranslator->trRelatedPagesDescription());
+ ol.parseText(theTranslator->trRelatedPagesDescription());
ol.endTextBlock();
startIndexHierarchy(ol,0);
PageSDict::Iterator pdi(*Doxygen::pageSDict);
@@ -2235,12 +2238,12 @@ void writeGraphInfo(OutputList &ol)
generateGraphLegend(Config_getString("HTML_OUTPUT"));
startFile(ol,"graph_legend",0,"Graph Legend");
startTitle(ol,0);
- parseText(ol,theTranslator->trLegendTitle());
+ ol.parseText(theTranslator->trLegendTitle());
endTitle(ol,0,0);
bool oldStripCommentsState = Config_getBool("STRIP_CODE_COMMENTS");
// temporarily disable the stripping of comments for our own code example!
Config_getBool("STRIP_CODE_COMMENTS") = FALSE;
- parseDoc(ol,"graph_legend",1,0,0,theTranslator->trLegendDocs());
+ ol.parseDoc("graph_legend",1,0,0,theTranslator->trLegendDocs(),FALSE);
Config_getBool("STRIP_CODE_COMMENTS") = oldStripCommentsState;
endFile(ol);
ol.popGeneratorState();
@@ -2631,7 +2634,7 @@ void writeGroupIndex(OutputList &ol)
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
- parseText(ol,title);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startTextBlock();
HtmlHelp *htmlHelp = 0;
@@ -2651,7 +2654,7 @@ void writeGroupIndex(OutputList &ol)
ftvHelp->addContentsItem(TRUE,0,"modules",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
- parseText(ol,theTranslator->trModulesDescription());
+ ol.parseText(theTranslator->trModulesDescription());
ol.endTextBlock();
writeGroupHierarchy(ol);
if (hasHtmlHelp)
@@ -2719,25 +2722,25 @@ void writeIndex(OutputList &ol)
ol.startTitleHead(0);
if (Doxygen::mainPage && !Doxygen::mainPage->title.isEmpty())
{
- parseDoc(ol,defFileName,defLine,0,0,Doxygen::mainPage->title);
+ ol.parseDoc(defFileName,defLine,0,0,Doxygen::mainPage->title,FALSE);
}
else
{
- parseText(ol,projPrefix+theTranslator->trDocumentation());
+ ol.parseText(projPrefix+theTranslator->trDocumentation());
}
ol.endTitleHead(0,0);
ol.newParagraph();
if (!Config_getString("PROJECT_NUMBER").isEmpty())
{
ol.startProjectNumber();
- parseDoc(ol,defFileName,defLine,0,0,Config_getString("PROJECT_NUMBER"));
+ ol.parseDoc(defFileName,defLine,0,0,Config_getString("PROJECT_NUMBER"),FALSE);
ol.endProjectNumber();
}
if (Config_getBool("DISABLE_INDEX") && Doxygen::mainPage==0) writeQuickLinks(ol,FALSE);
if (Doxygen::mainPage)
{
- parseDoc(ol,defFileName,defLine,0,0,Doxygen::mainPage->doc);
+ ol.parseDoc(defFileName,defLine,0,0,Doxygen::mainPage->doc,FALSE);
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
@@ -2776,16 +2779,16 @@ void writeIndex(OutputList &ol)
ol.disable(OutputGenerator::Latex);
}
- parseText(ol,projPrefix+theTranslator->trReferenceManual());
+ ol.parseText(projPrefix+theTranslator->trReferenceManual());
if (!Config_getString("PROJECT_NUMBER").isEmpty())
{
ol.startProjectNumber();
- parseDoc(ol,defFileName,defLine,0,0,Config_getString("PROJECT_NUMBER"));
+ ol.parseDoc(defFileName,defLine,0,0,Config_getString("PROJECT_NUMBER"),FALSE);
ol.endProjectNumber();
}
ol.endIndexSection(isTitlePageStart);
ol.startIndexSection(isTitlePageAuthor);
- parseText(ol,theTranslator->trGeneratedBy());
+ ol.parseText(theTranslator->trGeneratedBy());
ol.endIndexSection(isTitlePageAuthor);
ol.enable(OutputGenerator::Latex);
@@ -2794,11 +2797,11 @@ void writeIndex(OutputList &ol)
ol.startIndexSection(isMainPage);
if (!Doxygen::mainPage->title.isEmpty())
{
- parseDoc(ol,defFileName,defLine,0,0,Doxygen::mainPage->title);
+ ol.parseDoc(defFileName,defLine,0,0,Doxygen::mainPage->title,FALSE);
}
else
{
- parseText(ol,projPrefix+theTranslator->trMainPage());
+ ol.parseText(projPrefix+theTranslator->trMainPage());
}
ol.endIndexSection(isMainPage);
}
@@ -2813,37 +2816,37 @@ void writeIndex(OutputList &ol)
if (documentedGroups>0)
{
ol.startIndexSection(isModuleIndex);
- parseText(ol,projPrefix+theTranslator->trModuleIndex());
+ ol.parseText(projPrefix+theTranslator->trModuleIndex());
ol.endIndexSection(isModuleIndex);
}
if (documentedNamespaces>0)
{
ol.startIndexSection(isNamespaceIndex);
- parseText(ol,projPrefix+theTranslator->trNamespaceIndex());
+ ol.parseText(projPrefix+theTranslator->trNamespaceIndex());
ol.endIndexSection(isNamespaceIndex);
}
if (hierarchyClasses>0)
{
ol.startIndexSection(isClassHierarchyIndex);
- parseText(ol,projPrefix+theTranslator->trHierarchicalIndex());
+ ol.parseText(projPrefix+theTranslator->trHierarchicalIndex());
ol.endIndexSection(isClassHierarchyIndex);
}
if (annotatedClasses>0)
{
ol.startIndexSection(isCompoundIndex);
- parseText(ol,projPrefix+theTranslator->trCompoundIndex());
+ ol.parseText(projPrefix+theTranslator->trCompoundIndex());
ol.endIndexSection(isCompoundIndex);
}
if (documentedFiles>0)
{
ol.startIndexSection(isFileIndex);
- parseText(ol,projPrefix+theTranslator->trFileIndex());
+ ol.parseText(projPrefix+theTranslator->trFileIndex());
ol.endIndexSection(isFileIndex);
}
if (indexedPages>0)
{
ol.startIndexSection(isPageIndex);
- parseText(ol,projPrefix+theTranslator->trPageIndex());
+ ol.parseText(projPrefix+theTranslator->trPageIndex());
ol.endIndexSection(isPageIndex);
}
ol.lastIndexPage();
@@ -2856,37 +2859,37 @@ void writeIndex(OutputList &ol)
if (documentedGroups>0)
{
ol.startIndexSection(isModuleDocumentation);
- parseText(ol,projPrefix+theTranslator->trModuleDocumentation());
+ ol.parseText(projPrefix+theTranslator->trModuleDocumentation());
ol.endIndexSection(isModuleDocumentation);
}
if (documentedNamespaces>0)
{
ol.startIndexSection(isNamespaceDocumentation);
- parseText(ol,projPrefix+theTranslator->trNamespaceDocumentation());
+ ol.parseText(projPrefix+theTranslator->trNamespaceDocumentation());
ol.endIndexSection(isNamespaceDocumentation);
}
if (annotatedClasses>0)
{
ol.startIndexSection(isClassDocumentation);
- parseText(ol,projPrefix+theTranslator->trClassDocumentation());
+ ol.parseText(projPrefix+theTranslator->trClassDocumentation());
ol.endIndexSection(isClassDocumentation);
}
if (documentedFiles>0)
{
ol.startIndexSection(isFileDocumentation);
- parseText(ol,projPrefix+theTranslator->trFileDocumentation());
+ ol.parseText(projPrefix+theTranslator->trFileDocumentation());
ol.endIndexSection(isFileDocumentation);
}
if (Doxygen::exampleSDict->count()>0)
{
ol.startIndexSection(isExampleDocumentation);
- parseText(ol,projPrefix+theTranslator->trExampleDocumentation());
+ ol.parseText(projPrefix+theTranslator->trExampleDocumentation());
ol.endIndexSection(isExampleDocumentation);
}
if (documentedPages>0)
{
ol.startIndexSection(isPageDocumentation);
- parseText(ol,projPrefix+theTranslator->trPageDocumentation());
+ ol.parseText(projPrefix+theTranslator->trPageDocumentation());
ol.endIndexSection(isPageDocumentation);
}
ol.endIndexSection(isEndIndex);
@@ -2905,7 +2908,7 @@ void writeIndex(OutputList &ol)
// ol.endSection(si->label,FALSE);
//}
ol.startTextBlock();
- parseDoc(ol,defFileName,defLine,0,0,Doxygen::mainPage->doc);
+ ol.parseDoc(defFileName,defLine,0,0,Doxygen::mainPage->doc,FALSE);
ol.endTextBlock();
endFile(ol);
ol.enable(OutputGenerator::Man);
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index fd66059..57f21ef 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -211,7 +211,7 @@ void LatexDocVisitor::visit(DocVerbatim *s)
{
case DocVerbatim::Code: // fall though
m_t << "\n\n\\footnotesize\\begin{verbatim}";
- parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
+ parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile());
m_t << "\\end{verbatim}\\normalsize" << endl;
break;
case DocVerbatim::Verbatim:
@@ -246,7 +246,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
{
case DocInclude::Include:
m_t << "\n\n\\footnotesize\\begin{verbatim}";
- parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
+ parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile());
m_t << "\\end{verbatim}\\normalsize" << endl;
break;
case DocInclude::DontInclude:
@@ -272,7 +272,7 @@ void LatexDocVisitor::visit(DocIncOperator *op)
}
if (op->type()!=DocIncOperator::Skip)
{
- parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
+ parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile());
}
if (op->isLast())
{
@@ -878,6 +878,14 @@ void LatexDocVisitor::visitPost(DocCopy *)
{
}
+void LatexDocVisitor::visitPre(DocText *)
+{
+}
+
+void LatexDocVisitor::visitPost(DocText *)
+{
+}
+
void LatexDocVisitor::filter(const char *str)
{
filterLatexString(m_t,str,FALSE,m_insidePre);
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 70a6b27..3ca3bfc 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -122,6 +122,8 @@ class LatexDocVisitor : public DocVisitor
void visitPost(DocInternalRef *);
void visitPre(DocCopy *);
void visitPost(DocCopy *);
+ void visitPre(DocText *);
+ void visitPost(DocText *);
private:
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index aac6366..b323aa7 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -32,7 +32,6 @@ HEADERS = bufstr.h \
define.h \
definition.h \
diagram.h \
- doc.h \
docparser.h \
doctokenizer.h \
docvisitor.h \
@@ -66,8 +65,8 @@ HEADERS = bufstr.h \
namespacedef.h \
outputgen.h \
outputlist.h \
- packagedef.h \
page.h \
+ perlmodgen.h \
pngenc.h \
pre.h \
printdocvisitor.h \
@@ -133,7 +132,6 @@ SOURCES = ce_lex.cpp \
define.cpp \
definition.cpp \
diagram.cpp \
- doc.cpp \
docparser.cpp \
doctokenizer.cpp \
dot.cpp \
@@ -164,7 +162,7 @@ SOURCES = ce_lex.cpp \
namespacedef.cpp \
outputgen.cpp \
outputlist.cpp \
- packagedef.cpp \
+ perlmodgen.cpp \
pngenc.cpp \
pre.cpp \
reflist.cpp \
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index e29765e..edc7ede 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -27,7 +27,8 @@
#include "message.h"
ManDocVisitor::ManDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
- : m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
+ : m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE),
+ m_indent(0)
{
}
@@ -39,6 +40,7 @@ void ManDocVisitor::visit(DocWord *w)
{
if (m_hide) return;
filter(w->word());
+ m_firstCol=FALSE;
}
void ManDocVisitor::visit(DocLinkedWord *w)
@@ -47,6 +49,7 @@ void ManDocVisitor::visit(DocLinkedWord *w)
m_t << "\\fB";
filter(w->word());
m_t << "\\fP";
+ m_firstCol=FALSE;
}
void ManDocVisitor::visit(DocWhiteSpace *w)
@@ -55,10 +58,12 @@ void ManDocVisitor::visit(DocWhiteSpace *w)
if (m_insidePre)
{
m_t << w->chars();
+ m_firstCol=w->chars().at(w->chars().length()-1)=='\n';
}
else
{
m_t << " ";
+ m_firstCol=FALSE;
}
}
@@ -67,71 +72,52 @@ void ManDocVisitor::visit(DocSymbol *s)
if (m_hide) return;
switch(s->symbol())
{
- case DocSymbol::BSlash: m_t << "$\\backslash$"; break;
+ case DocSymbol::BSlash: m_t << "\\\\"; break;
case DocSymbol::At: m_t << "@"; break;
- case DocSymbol::Less: m_t << "$<$"; break;
- case DocSymbol::Greater: m_t << "$>$"; break;
- case DocSymbol::Amp: m_t << "\\&"; break;
- case DocSymbol::Dollar: m_t << "\\$"; break;
- case DocSymbol::Hash: m_t << "\\#"; break;
- case DocSymbol::Percent: m_t << "\\%"; break;
- case DocSymbol::Copy: m_t << "\\copyright"; break;
+ case DocSymbol::Less: m_t << "<"; break;
+ case DocSymbol::Greater: m_t << ">"; break;
+ case DocSymbol::Amp: m_t << "&"; break;
+ case DocSymbol::Dollar: m_t << "$"; break;
+ case DocSymbol::Hash: m_t << "#"; break;
+ case DocSymbol::Percent: m_t << "%"; break;
+ case DocSymbol::Copy: m_t << "(c)"; break;
case DocSymbol::Apos: m_t << "'"; break;
case DocSymbol::Quot: m_t << "''"; break;
- case DocSymbol::Uml:
- if (s->letter()=='i')
- m_t << "\\\"{\\i}";
- else
- m_t << "\\\"{" << s->letter() << "}";
- break;
- case DocSymbol::Acute:
- if (s->letter()=='i')
- m_t << "\\'{\\i}";
- else
- m_t << "\\'{" << s->letter() << "}";
- break;
- case DocSymbol::Grave:
- if (s->letter()=='i')
- m_t << "\\`{\\i}";
- else
- m_t << "\\`{" << s->letter() << "}";
- break;
- case DocSymbol::Circ:
- if (s->letter()=='i')
- m_t << "\\^{\\i}";
- else
- m_t << "\\^{" << s->letter() << "}";
- break;
- case DocSymbol::Tilde: m_t << "\\~{" << s->letter() << "}"; break;
- case DocSymbol::Szlig: m_t << "\"s"; break;
- case DocSymbol::Cedil: m_t << "\\c{" << s->letter() << "}"; break;
- case DocSymbol::Ring: m_t << "\\" << s->letter() << s->letter(); break;
- case DocSymbol::Nbsp: m_t << "\\ "; break;
+ case DocSymbol::Uml: m_t << s->letter() << "\\*(4"; break;
+ case DocSymbol::Acute: m_t << s->letter() << "\\*(`"; break;
+ case DocSymbol::Grave: m_t << s->letter() << "\\*:"; break;
+ case DocSymbol::Circ: m_t << s->letter() << "\\*^"; break;
+ case DocSymbol::Tilde: m_t << s->letter() << "\\*~"; break;
+ case DocSymbol::Szlig: m_t << "s\\*:"; break;
+ case DocSymbol::Cedil: m_t << s->letter() << "\\*,"; break;
+ case DocSymbol::Ring: m_t << s->letter() << "\\*o"; break;
+ case DocSymbol::Nbsp: m_t << " "; break;
default:
err("Error: unknown symbol found\n");
}
+ m_firstCol=FALSE;
}
void ManDocVisitor::visit(DocURL *u)
{
if (m_hide) return;
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\href{" << u->url() << "}";
- }
- m_t << "{\\tt " << u->url() << "}";
+ m_t << u->url();
+ m_firstCol=FALSE;
}
void ManDocVisitor::visit(DocLineBreak *)
{
if (m_hide) return;
- m_t << "\\par\n";
+ m_t << endl << ".br" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visit(DocHorRuler *)
{
if (m_hide) return;
- m_t << "\n\n";
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visit(DocStyleChange *s)
@@ -140,25 +126,30 @@ void ManDocVisitor::visit(DocStyleChange *s)
switch (s->style())
{
case DocStyleChange::Bold:
- if (s->enable()) m_t << "{\\bf "; else m_t << "} ";
+ if (s->enable()) m_t << "\\fB"; else m_t << "\\fP";
+ m_firstCol=FALSE;
break;
case DocStyleChange::Italic:
- if (s->enable()) m_t << "{\\em "; else m_t << "} ";
+ if (s->enable()) m_t << "\\fI"; else m_t << "\\fP";
+ m_firstCol=FALSE;
break;
case DocStyleChange::Code:
- if (s->enable()) m_t << "{\\tt "; else m_t << "} ";
+ if (s->enable()) m_t << "\\fC"; else m_t << "\\fP";
+ m_firstCol=FALSE;
break;
case DocStyleChange::Subscript:
- if (s->enable()) m_t << "$_{\\mbox{"; else m_t << "}}$ ";
+ if (s->enable()) m_t << "\\*<"; else m_t << "\\*> ";
+ m_firstCol=FALSE;
break;
case DocStyleChange::Superscript:
- if (s->enable()) m_t << "$^{\\mbox{"; else m_t << "}}$ ";
+ if (s->enable()) m_t << "\\*{"; else m_t << "\\*} ";
+ m_firstCol=FALSE;
break;
case DocStyleChange::Center:
- if (s->enable()) m_t << "\\begin{center}"; else m_t << "\\end{center} ";
+ /* not supported */
break;
case DocStyleChange::Small:
- if (s->enable()) m_t << "\\footnotesize "; else m_t << "\\normalsize ";
+ /* not supported */
break;
}
}
@@ -169,14 +160,22 @@ void ManDocVisitor::visit(DocVerbatim *s)
switch(s->type())
{
case DocVerbatim::Code: // fall though
- m_t << "\n\n\\footnotesize\\begin{verbatim}";
- parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
- m_t << "\\end{verbatim}\\normalsize" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_t << ".nf" << endl;
+ parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile());
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
break;
case DocVerbatim::Verbatim:
- m_t << "\n\n\\footnotesize\\begin{verbatim}";
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_t << ".nf" << endl;
m_t << s->text();
- m_t << "\\end{verbatim}\\normalsize" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
break;
case DocVerbatim::HtmlOnly:
/* nothing */
@@ -187,15 +186,9 @@ void ManDocVisitor::visit(DocVerbatim *s)
}
}
-void ManDocVisitor::visit(DocAnchor *anc)
+void ManDocVisitor::visit(DocAnchor *)
{
- if (m_hide) return;
- m_t << "\\label{" << anc->anchor() << "}" << endl;
- if (!anc->file().isEmpty() && Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\hypertarget{" << anc->file() << "_" << anc->anchor()
- << "}{}" << endl;
- }
+ /* no support for anchors in man pages */
}
void ManDocVisitor::visit(DocInclude *inc)
@@ -204,18 +197,26 @@ void ManDocVisitor::visit(DocInclude *inc)
switch(inc->type())
{
case DocInclude::Include:
- m_t << "\n\n\\footnotesize\\begin{verbatim}";
- parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
- m_t << "\\end{verbatim}\\normalsize" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_t << ".nf" << endl;
+ parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile());
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
break;
case DocInclude::DontInclude:
break;
case DocInclude::HtmlInclude:
break;
case DocInclude::VerbInclude:
- m_t << "\n\n\\footnotesize\\begin{verbatim}";
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_t << ".nf" << endl;
m_t << inc->text();
- m_t << "\\end{verbatim}\\normalsize" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
break;
}
}
@@ -226,17 +227,21 @@ void ManDocVisitor::visit(DocIncOperator *op)
// op->type(),op->isFirst(),op->isLast(),op->text().data());
if (op->isFirst())
{
- m_t << "\n\n\\footnotesize\\begin{verbatim}";
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_t << ".nf" << endl;
m_hide = TRUE;
}
if (op->type()!=DocIncOperator::Skip)
{
- parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
+ parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile());
}
if (op->isLast())
{
m_hide = FALSE;
- m_t << "\\end{verbatim}\\normalsize" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
else
{
@@ -250,47 +255,47 @@ void ManDocVisitor::visit(DocFormula *f)
m_t << f->text();
}
-void ManDocVisitor::visit(DocIndexEntry *i)
+void ManDocVisitor::visit(DocIndexEntry *)
{
- m_t << "\\index{" << i->entry() << "@{";
- m_t << "}}";
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
-void ManDocVisitor::visitPre(DocAutoList *l)
+void ManDocVisitor::visitPre(DocAutoList *)
{
- if (l->isEnumList())
- {
- m_t << "\\begin{enumerate}" << endl;
- }
- else
- {
- m_t << "\\begin{itemize}" << endl;
- }
+ m_indent+=2;
+}
+
+void ManDocVisitor::visitPost(DocAutoList *)
+{
+ m_indent-=2;
+ m_t << ".PP" << endl;
}
-void ManDocVisitor::visitPost(DocAutoList *l)
+void ManDocVisitor::visitPre(DocAutoListItem *li)
{
- if (l->isEnumList())
+ QCString ws;
+ ws.fill(' ',m_indent-2);
+ if (!m_firstCol) m_t << endl;
+ m_t << ".IP \"" << ws;
+ if (((DocAutoList *)li->parent())->isEnumList())
{
- m_t << "\\end{enumerate}" << endl;
+ m_t << li->itemNumber() << ".\" " << m_indent+2;
}
- else
+ else // bullet list
{
- m_t << "\\end{itemize}" << endl;
+ m_t << "\\(bu\" " << m_indent;
}
-}
-
-void ManDocVisitor::visitPre(DocAutoListItem *)
-{
- m_t << "\\item ";
+ m_t << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPost(DocAutoListItem *)
{
+ m_t << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocPara *)
@@ -303,7 +308,12 @@ void ManDocVisitor::visitPost(DocPara *p)
!(p->parent() && // and for parameter sections
p->parent()->kind()==DocNode::Kind_ParamSect
)
- ) m_t << endl << endl;
+ )
+ {
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
+ }
}
void ManDocVisitor::visitPre(DocRoot *)
@@ -316,7 +326,12 @@ void ManDocVisitor::visitPost(DocRoot *)
void ManDocVisitor::visitPre(DocSimpleSect *s)
{
- m_t << "\\begin{Desc}\n\\item[";
+ if (!m_firstCol)
+ {
+ m_t << endl;
+ m_t << ".PP" << endl;
+ }
+ m_t << "\\fB";
switch(s->type())
{
case DocSimpleSect::See:
@@ -354,13 +369,17 @@ void ManDocVisitor::visitPre(DocSimpleSect *s)
// special case 1: user defined title
if (s->type()!=DocSimpleSect::User)
{
- m_t << ":]";
+ m_t << ":\\fP" << endl;
+ m_t << ".RS 4" << endl;
}
}
void ManDocVisitor::visitPost(DocSimpleSect *)
{
- m_t << "\\end{Desc}" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".RE" << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocTitle *)
@@ -369,117 +388,124 @@ void ManDocVisitor::visitPre(DocTitle *)
void ManDocVisitor::visitPost(DocTitle *)
{
- m_t << "]";
+ m_t << "\\fP";
+ m_t << ".RS 4" << endl;
}
void ManDocVisitor::visitPre(DocSimpleList *)
{
- m_t << "\\begin{itemize}" << endl;
+ m_indent+=2;
}
void ManDocVisitor::visitPost(DocSimpleList *)
{
- m_t << "\\end{itemize}" << endl;
+ m_indent-=2;
+ m_t << ".PP" << endl;
}
void ManDocVisitor::visitPre(DocSimpleListItem *)
{
- m_t << "\\item ";
+ QCString ws;
+ ws.fill(' ',m_indent-2);
+ if (!m_firstCol) m_t << endl;
+ m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPost(DocSimpleListItem *)
{
+ m_t << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocSection *s)
{
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\hypertarget{" << s->file() << "_" << s->anchor() << "}{}";
- }
- if (Config_getBool("COMPACT_LATEX"))
- {
- switch(s->level())
- {
- case 1: m_t << "\\subsubsection{"; break;
- case 2: m_t << "\\paragraph{"; break;
- case 3: m_t << "\\subparagraph{"; break;
- case 4: m_t << "\\subparagraph{"; break;
- }
- }
- else
- {
- switch(s->level())
- {
- case 1: m_t << "\\subsection{"; break;
- case 2: m_t << "\\subsubsection{"; break;
- case 3: m_t << "\\paragraph{"; break;
- case 4: m_t << "\\subparagraph{"; break;
- }
- }
+ if (!m_firstCol) m_t << endl;
+ if (s->level()==1) m_t << ".SH"; else m_t << ".SS";
+ m_t << " \"";
filter(s->title());
- m_t << "}\\label{" << s->anchor() << "}" << endl;
+ m_t << "\"" << endl;
+ if (s->level()==1) m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPost(DocSection *)
{
}
-void ManDocVisitor::visitPre(DocHtmlList *s)
+void ManDocVisitor::visitPre(DocHtmlList *)
{
- if (s->type()==DocHtmlList::Ordered)
- m_t << "\\begin{enumerate}" << endl;
- else
- m_t << "\\begin{itemize}" << endl;
+ m_indent+=2;
}
-void ManDocVisitor::visitPost(DocHtmlList *s)
+void ManDocVisitor::visitPost(DocHtmlList *)
{
- if (s->type()==DocHtmlList::Ordered)
- m_t << "\\end{enumerate}" << endl;
- else
- m_t << "\\end{itemize}" << endl;
+ m_indent-=2;
+ m_t << ".PP" << endl;
}
-void ManDocVisitor::visitPre(DocHtmlListItem *)
+void ManDocVisitor::visitPre(DocHtmlListItem *li)
{
- m_t << "\\item ";
+ QCString ws;
+ ws.fill(' ',m_indent-2);
+ if (!m_firstCol) m_t << endl;
+ m_t << ".IP \"" << ws;
+ if (((DocHtmlList *)li->parent())->type()==DocHtmlList::Ordered)
+ {
+ m_t << li->itemNumber() << ".\" " << m_indent+2;
+ }
+ else // bullet list
+ {
+ m_t << "\\(bu\" " << m_indent;
+ }
+ m_t << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPost(DocHtmlListItem *)
{
+ m_t << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocHtmlPre *)
{
- m_t << "\\small\\begin{alltt}";
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_t << ".nf" << endl;
m_insidePre=TRUE;
}
void ManDocVisitor::visitPost(DocHtmlPre *)
{
m_insidePre=FALSE;
- m_t << "\\end{alltt}\\normalsize " << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocHtmlDescList *)
{
- m_t << "\\begin{description}" << endl;
}
void ManDocVisitor::visitPost(DocHtmlDescList *)
{
- m_t << "\\end{description}" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocHtmlDescTitle *)
{
- m_t << "\\item[";
+ if (!m_firstCol) m_t << endl;
+ m_t << ".IP \"\\fB";
+ m_firstCol=FALSE;
}
void ManDocVisitor::visitPost(DocHtmlDescTitle *)
{
- m_t << "]";
+ m_t << "\\fP\" 1c" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocHtmlDescData *)
@@ -490,35 +516,20 @@ void ManDocVisitor::visitPost(DocHtmlDescData *)
{
}
-void ManDocVisitor::visitPre(DocHtmlTable *t)
+void ManDocVisitor::visitPre(DocHtmlTable *)
{
- if (t->hasCaption())
- {
- m_t << "\\begin{table}[h]";
- }
- m_t << "\\begin{TabularC}{" << t->numCols() << "}\n\\hline\n";
}
-void ManDocVisitor::visitPost(DocHtmlTable *t)
+void ManDocVisitor::visitPost(DocHtmlTable *)
{
- if (t->hasCaption())
- {
- m_t << "\\end{table}\n";
- }
- else
- {
- m_t << "\\\\\\hline\n\\end{TabularC}\n";
- }
}
void ManDocVisitor::visitPre(DocHtmlCaption *)
{
- m_t << "\\\\\\hline\n\\end{TabularC}\n\\centering\n\\caption{";
}
void ManDocVisitor::visitPost(DocHtmlCaption *)
{
- m_t << "}\n";
}
void ManDocVisitor::visitPre(DocHtmlRow *)
@@ -527,221 +538,117 @@ void ManDocVisitor::visitPre(DocHtmlRow *)
void ManDocVisitor::visitPost(DocHtmlRow *)
{
- m_t << "\\\\\\hline\n";
}
void ManDocVisitor::visitPre(DocHtmlCell *)
{
}
-void ManDocVisitor::visitPost(DocHtmlCell *c)
+void ManDocVisitor::visitPost(DocHtmlCell *)
{
- if (!c->isLast()) m_t << "&";
}
void ManDocVisitor::visitPre(DocInternal *)
{
- m_t << "\\begin{Desc}" << endl
- << "\\item[" << theTranslator->trForInternalUseOnly() << "]" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_t << "\\fB" << theTranslator->trForInternalUseOnly() << "\\fP" << endl;
+ m_t << ".RS 4" << endl;
}
void ManDocVisitor::visitPost(DocInternal *)
{
- m_t << "\\end{Desc}" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".RE" << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
-void ManDocVisitor::visitPre(DocHRef *href)
+void ManDocVisitor::visitPre(DocHRef *)
{
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\href{";
- m_t << href->url();
- m_t << "}";
- }
- m_t << "{\\tt ";
+ m_t << "\\fC";
}
void ManDocVisitor::visitPost(DocHRef *)
{
- m_t << "}";
+ m_t << "\\fP";
}
void ManDocVisitor::visitPre(DocHtmlHeader *header)
{
- if (Config_getBool("COMPACT_LATEX"))
- {
- switch(header->level())
- {
- case 1: m_t << "\\subsection*{"; break;
- case 2: m_t << "\\subsubsection*{"; break;
- case 3: m_t << "\\paragraph*{"; break;
- }
- }
- else
- {
- switch(header->level())
- {
- case 1: m_t << "\\section*{"; break;
- case 2: m_t << "\\subsection*{"; break;
- case 3: m_t << "\\subsubsection*{"; break;
- }
- }
+ if (!m_firstCol) m_t << endl;
+ if (header->level()==1) m_t << ".SH"; else m_t << ".SS";
+ m_t << " \"";
}
-void ManDocVisitor::visitPost(DocHtmlHeader *)
+void ManDocVisitor::visitPost(DocHtmlHeader *header)
{
- m_t << "}";
+ m_t << "\"" << endl;
+ if (header->level()==1) m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
-void ManDocVisitor::visitPre(DocImage *img)
+void ManDocVisitor::visitPre(DocImage *)
{
- if (img->type()==DocImage::Latex)
- {
- if (img->hasCaption())
- {
- m_t << "\\begin{figure}[H]" << endl;
- m_t << "\\begin{center}" << endl;
- }
- else
- {
- m_t << "\\mbox{";
- }
- QString gfxName = img->name();
- if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf")
- {
- gfxName=gfxName.left(gfxName.length()-4);
- }
- m_t << "\\includegraphics";
- if (!img->width().isEmpty())
- {
- m_t << "[width=" << img->width() << "]";
- }
- else if (!img->height().isEmpty())
- {
- m_t << "[height=" << img->height() << "]";
- }
- m_t << "{" << gfxName << "}";
- if (img->hasCaption())
- {
- m_t << "\\caption{";
- }
- }
- else // other format -> skip
- {
- m_hide=TRUE;
- }
}
-void ManDocVisitor::visitPost(DocImage *img)
+void ManDocVisitor::visitPost(DocImage *)
{
- if (img->type()==DocImage::Latex)
- {
- m_t << "}" << endl; // end mbox or caption
- if (img->hasCaption())
- {
- m_t << "\\end{center}" << endl;
- m_t << "\\end{figure}" << endl;
- }
- }
- else // other format
- {
- m_hide=FALSE;
- }
}
-void ManDocVisitor::visitPre(DocDotFile *df)
+void ManDocVisitor::visitPre(DocDotFile *)
{
- QString baseName=df->file();
- int i;
- if ((i=baseName.findRev('/'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- if (baseName.right(4)==".eps" || baseName.right(4)==".pdf")
- {
- baseName=baseName.left(baseName.length()-4);
- }
- QString outDir = Config_getString("LATEX_OUTPUT");
- writeDotGraphFromFile(df->file(),outDir,baseName,EPS);
- if (df->hasCaption())
- {
- m_t << "\\begin{figure}[H]" << endl;
- m_t << "\\begin{center}" << endl;
- }
- else
- {
- m_t << "\\mbox{";
- }
- m_t << "\\includegraphics";
- if (!df->width().isEmpty())
- {
- m_t << "[width=" << df->width() << "]";
- }
- else if (!df->height().isEmpty())
- {
- m_t << "[height=" << df->height() << "]";
- }
- m_t << "{" << baseName << "}";
-
- if (df->hasCaption())
- {
- m_t << "\\caption{";
- }
}
-void ManDocVisitor::visitPost(DocDotFile *df)
+void ManDocVisitor::visitPost(DocDotFile *)
{
- m_t << "}" << endl; // end mbox or caption
- if (df->hasCaption())
- {
- m_t << "\\end{center}" << endl;
- m_t << "\\end{figure}" << endl;
- }
}
void ManDocVisitor::visitPre(DocLink *)
{
- m_t << "\\fB ";
+ m_t << "\\fB";
}
void ManDocVisitor::visitPost(DocLink *)
{
- m_t << "\\fP ";
+ m_t << "\\fP";
}
void ManDocVisitor::visitPre(DocRef *ref)
{
- m_t << "\\fB ";
+ m_t << "\\fB";
if (!ref->hasLinkText()) filter(ref->targetTitle());
}
void ManDocVisitor::visitPost(DocRef *)
{
- m_t << "\\fP ";
+ m_t << "\\fP";
}
void ManDocVisitor::visitPre(DocSecRefItem *)
{
- m_t << "\\item \\contentsline{section}{";
+ QCString ws;
+ ws.fill(' ',m_indent-2);
+ if (!m_firstCol) m_t << endl;
+ m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << endl;
+ m_firstCol=TRUE;
}
-void ManDocVisitor::visitPost(DocSecRefItem *ref)
+void ManDocVisitor::visitPost(DocSecRefItem *)
{
- m_t << "}{\\ref{" << ref->anchor() << "}}{}" << endl;
+ m_t << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocSecRefList *)
{
- m_t << "\\footnotesize" << endl;
- m_t << "\\begin{multicols}{2}" << endl;
- m_t << "\\begin{CompactList}" << endl;
+ m_indent+=2;
}
void ManDocVisitor::visitPost(DocSecRefList *)
{
- m_t << "\\end{CompactList}" << endl;
- m_t << "\\end{multicols}" << endl;
- m_t << "\\normalsize" << endl;
+ m_indent-=2;
+ m_t << ".PP" << endl;
}
void ManDocVisitor::visitPre(DocLanguage *)
@@ -754,8 +661,12 @@ void ManDocVisitor::visitPost(DocLanguage *)
void ManDocVisitor::visitPre(DocParamSect *s)
{
- m_t << "\\begin{Desc}" << endl;
- m_t << "\\item[";
+ if (!m_firstCol)
+ {
+ m_t << endl;
+ m_t << ".PP" << endl;
+ }
+ m_t << "\\fB";
switch(s->type())
{
case DocParamSect::Param:
@@ -767,19 +678,21 @@ void ManDocVisitor::visitPre(DocParamSect *s)
default:
ASSERT(0);
}
- m_t << ":]" << endl;
- m_t << "\\begin{description}" << endl;
+ m_t << ":\\fP" << endl;
+ m_t << ".RS 4" << endl;
}
void ManDocVisitor::visitPost(DocParamSect *)
{
- m_t << "\\end{description}" << endl;
- m_t << "\\end{Desc}" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".RE" << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocParamList *pl)
{
- m_t << "\\item[{\\em ";
+ m_t << "\\fI";
QStrListIterator li(pl->parameters());
const char *s;
bool first=TRUE;
@@ -788,42 +701,47 @@ void ManDocVisitor::visitPre(DocParamList *pl)
if (!first) m_t << ","; else first=FALSE;
m_t << s;
}
- m_t << "}]";
+ m_t << "\\fP ";
}
-void ManDocVisitor::visitPost(DocParamList *)
+void ManDocVisitor::visitPost(DocParamList *pl)
{
+ if (!pl->isLast())
+ {
+ if (!m_firstCol) m_t << endl;
+ m_t << ".br" << endl;
+ }
}
void ManDocVisitor::visitPre(DocXRefItem *x)
{
- m_t << "\\begin{Desc}" << endl;
- m_t << "\\item[";
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\hyperlink{" << x->file() << "_" << x->anchor() << "}{";
- }
- else
- {
- m_t << "{\\bf ";
+ if (!m_firstCol)
+ {
+ m_t << endl;
+ m_t << ".PP" << endl;
}
+ m_t << "\\fB";
filter(x->title());
- m_t << "}]";
+ m_t << "\\fP" << endl;
+ m_t << ".RS 4" << endl;
}
void ManDocVisitor::visitPost(DocXRefItem *)
{
- m_t << "\\end{Desc}" << endl;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".RE" << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
}
void ManDocVisitor::visitPre(DocInternalRef *)
{
- m_t << "\\fB ";
+ m_t << "\\fB";
}
void ManDocVisitor::visitPost(DocInternalRef *)
{
- m_t << "\\fP ";
+ m_t << "\\fP";
}
void ManDocVisitor::visitPre(DocCopy *)
@@ -834,6 +752,14 @@ void ManDocVisitor::visitPost(DocCopy *)
{
}
+void ManDocVisitor::visitPre(DocText *)
+{
+}
+
+void ManDocVisitor::visitPost(DocText *)
+{
+}
+
void ManDocVisitor::filter(const char *str)
{
if (str)
diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h
index 8dd75f6..2b61abf 100644
--- a/src/mandocvisitor.h
+++ b/src/mandocvisitor.h
@@ -122,6 +122,8 @@ class ManDocVisitor : public DocVisitor
void visitPost(DocInternalRef *);
void visitPre(DocCopy *);
void visitPost(DocCopy *);
+ void visitPre(DocText *);
+ void visitPost(DocText *);
private:
@@ -139,6 +141,8 @@ class ManDocVisitor : public DocVisitor
BaseCodeDocInterface &m_ci;
bool m_insidePre;
bool m_hide;
+ bool m_firstCol;
+ int m_indent;
};
#endif
diff --git a/src/mangen.cpp b/src/mangen.cpp
index bf99072..a048b5e 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -619,5 +619,6 @@ void ManGenerator::printDoc(DocNode *n)
ManDocVisitor *visitor = new ManDocVisitor(t,*this);
n->accept(visitor);
delete visitor;
+ t << endl;
}
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 659cde8..d829fd8 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -28,7 +28,6 @@
#include "outputlist.h"
#include "example.h"
#include "membergroup.h"
-#include "doc.h"
#include "groupdef.h"
#include "defargs.h"
//#include "xml.h"
@@ -904,7 +903,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
!annMemb)
{
ol.startMemberDescription();
- parseDoc(ol,briefFile(),briefLine(),cname,this,briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),cname,this,briefDescription(),FALSE);
if (detailsVisible)
{
ol.pushGeneratorState();
@@ -1225,9 +1224,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//printf("md=%s initLines=%d init=`%s'\n",name().data(),initLines,init.data());
ol.startBold();
if (mtype==Define)
- parseText(ol,theTranslator->trDefineValue());
+ ol.parseText(theTranslator->trDefineValue());
else
- parseText(ol,theTranslator->trInitialValue());
+ ol.parseText(theTranslator->trInitialValue());
ol.endBold();
initParseCodeContext();
ol.startCodeFragment();
@@ -1249,14 +1248,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
)
)
{
- parseDoc(ol,briefFile(),briefLine(),scopeName,this,brief);
+ ol.parseDoc(briefFile(),briefLine(),scopeName,this,brief,FALSE);
ol.newParagraph();
}
/* write detailed description */
if (!detailed.isEmpty())
{
- parseDoc(ol,docFile(),docLine(),scopeName,this,detailed+"\n");
+ ol.parseDoc(docFile(),docLine(),scopeName,this,detailed+"\n",FALSE);
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::RTF);
ol.newParagraph();
@@ -1282,7 +1281,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.docify(a->name);
ol.endDescTableTitle();
ol.startDescTableData();
- parseDoc(ol,docFile(),docLine(),scopeName,this,a->docs+"\n");
+ ol.parseDoc(docFile(),docLine(),scopeName,this,a->docs+"\n",FALSE);
ol.endDescTableData();
}
}
@@ -1333,7 +1332,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (!fmd->briefDescription().isEmpty())
{
- parseDoc(ol,fmd->briefFile(),fmd->briefLine(),scopeName,fmd,fmd->briefDescription());
+ ol.parseDoc(fmd->briefFile(),fmd->briefLine(),scopeName,fmd,fmd->briefDescription(),FALSE);
//ol.newParagraph();
}
if (!fmd->briefDescription().isEmpty() &&
@@ -1343,7 +1342,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
if (!fmd->documentation().isEmpty())
{
- parseDoc(ol,fmd->docFile(),fmd->docLine(),scopeName,fmd,fmd->documentation()+"\n");
+ ol.parseDoc(fmd->docFile(),fmd->docLine(),scopeName,fmd,fmd->documentation()+"\n",FALSE);
}
ol.endDescTableData();
}
@@ -1380,7 +1379,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
int markerPos = reimplFromLine.find("@0");
if (markerPos!=-1) // should always pass this.
{
- parseText(ol,reimplFromLine.left(markerPos)); //text left from marker
+ ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
if (bmd->isLinkable()) // replace marker with link
{
Definition *bd=bmd->group;
@@ -1404,7 +1403,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
writePageRef(ol,bcd->getOutputFileBase(),0);
}
}
- parseText(ol,reimplFromLine.right(
+ ol.parseText(reimplFromLine.right(
reimplFromLine.length()-markerPos-2)); // text right from marker
ol.disableAllBut(OutputGenerator::RTF);
@@ -1456,7 +1455,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// now replace all markers in reimplInLine with links to the classes
while ((newIndex=marker.match(reimplInLine,index,&matchLen))!=-1)
{
- parseText(ol,reimplInLine.mid(index,newIndex-index));
+ ol.parseText(reimplInLine.mid(index,newIndex-index));
bool ok;
uint entryIndex = reimplInLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
//bmd=bml->at(entryIndex);
@@ -1490,7 +1489,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
++mli;
index=newIndex+matchLen;
}
- parseText(ol,reimplInLine.right(reimplInLine.length()-index));
+ ol.parseText(reimplInLine.right(reimplInLine.length()-index));
ol.disableAllBut(OutputGenerator::RTF);
ol.newParagraph();
ol.enableAll();
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 71c5feb..6c718e7 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -24,7 +24,6 @@
#include "language.h"
#include "doxygen.h"
#include "outputlist.h"
-#include "doc.h"
#include "groupdef.h"
MemberList::MemberList() : QList<MemberDef>()
@@ -285,7 +284,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if (fmd->hasOneLineInitializer()) // enum value has initializer
{
typeDecl.writeString(" = ");
- parseText(typeDecl,fmd->initializer());
+ typeDecl.parseText(fmd->initializer());
}
}
@@ -341,10 +340,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if (!md->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription();
- parseDoc(ol,
+ ol.parseDoc(
md->briefFile(),md->briefLine(),
cd?cd->name().data():0,md,
- md->briefDescription()
+ md->briefDescription(),
+ FALSE
);
if (md->isDetailedSectionLinkable())
{
@@ -360,7 +360,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{
ol.startTextLink(0,md->anchor());
}
- parseText(ol,theTranslator->trMore());
+ ol.parseText(theTranslator->trMore());
ol.endTextLink();
ol.startEmphasis();
ol.enableAll();
@@ -418,14 +418,14 @@ void MemberList::writeDeclarations(OutputList &ol,
if (title)
{
ol.startMemberHeader();
- parseText(ol,title);
+ ol.parseText(title);
ol.endMemberHeader();
}
if (subtitle && subtitle[0]!=0)
{
//printf("subtitle=`%s'\n",subtitle);
ol.startMemberSubtitle();
- parseDoc(ol,"<generated>",1,0,0,subtitle);
+ ol.parseDoc("<generated>",1,0,0,subtitle,FALSE);
ol.endMemberSubtitle();
}
@@ -442,14 +442,14 @@ void MemberList::writeDeclarations(OutputList &ol,
ol.startMemberGroupHeader(hasHeader);
if (hasHeader)
{
- parseText(ol,mg->header());
+ ol.parseText(mg->header());
}
ol.endMemberGroupHeader();
if (!mg->documentation().isEmpty())
{
//printf("Member group has docs!\n");
ol.startMemberGroupDocs();
- parseDoc(ol,"<generated>",1,0,0,mg->documentation()+"\n");
+ ol.parseDoc("<generated>",1,0,0,mg->documentation()+"\n",FALSE);
ol.endMemberGroupDocs();
}
ol.startMemberGroup();
@@ -476,7 +476,7 @@ void MemberList::writeDocumentation(OutputList &ol,
{
ol.writeRuler();
ol.startGroupHeader();
- parseText(ol,title);
+ ol.parseText(title);
ol.endGroupHeader();
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 893ff96..0f32a94 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -19,7 +19,6 @@
#include "namespacedef.h"
#include "outputlist.h"
#include "util.h"
-#include "doc.h"
#include "language.h"
#include "classdef.h"
#include "classlist.h"
@@ -198,12 +197,12 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
//if (latexOn) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState();
ol.startGroupHeader();
- parseText(ol,theTranslator->trDetailedDescription());
+ ol.parseText(theTranslator->trDetailedDescription());
ol.endGroupHeader();
ol.startTextBlock();
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- parseDoc(ol,briefFile(),briefLine(),name(),0,briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),name(),0,briefDescription(),FALSE);
}
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
@@ -212,7 +211,7 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
}
if (!documentation().isEmpty())
{
- parseDoc(ol,docFile(),docLine(),name(),0,documentation()+"\n");
+ ol.parseDoc(docFile(),docLine(),name(),0,documentation()+"\n",FALSE);
ol.newParagraph();
}
ol.endTextBlock();
@@ -227,11 +226,11 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
//ol.docify(pageTitle);
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
- parseText(ol,theTranslator->trPackage(displayName()));
+ ol.parseText(theTranslator->trPackage(displayName()));
}
else
{
- parseText(ol,theTranslator->trNamespaceReference(displayName()));
+ ol.parseText(theTranslator->trNamespaceReference(displayName()));
}
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),displayName());
@@ -252,12 +251,12 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
}
else if (!briefDescription().isEmpty())
{
- parseDoc(ol,briefFile(),briefLine(),name(),0,briefDescription());
+ ol.parseDoc(briefFile(),briefLine(),name(),0,briefDescription(),FALSE);
ol.writeString(" \n");
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(0,"_details");
- parseText(ol,theTranslator->trMore());
+ ol.parseText(theTranslator->trMore());
ol.endTextLink();
ol.popGeneratorState();
}
@@ -315,9 +314,9 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Man);
ol.startGroupHeader();
- parseText(ol,theTranslator->trAuthor(TRUE,TRUE));
+ ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
ol.endGroupHeader();
- parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
+ ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
diff --git a/src/outputgen.h b/src/outputgen.h
index 5613bc1..bd432ca 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -86,8 +86,8 @@ class BaseOutputDocInterface : public BaseCodeDocInterface
};
virtual void parseDoc(const char *,int, const char *,MemberDef *,
- const QCString &)
- {}
+ const QCString &,bool) {}
+ virtual void parseText(const QCString &) {}
/*! Start of a bullet list: e.g. \c <ul> in html. writeListItem() is
* Used for the bullet items.
@@ -297,7 +297,7 @@ class BaseOutputDocInterface : public BaseCodeDocInterface
class OutputGenerator : public BaseOutputDocInterface
{
public:
- enum OutputType { Html, Latex, Man, RTF, XML, DEF };
+ enum OutputType { Html, Latex, Man, RTF, XML, DEF, Perl };
OutputGenerator();
virtual ~OutputGenerator();
diff --git a/src/outputlist.cpp b/src/outputlist.cpp
index f9aadd5..8b9781b 100644
--- a/src/outputlist.cpp
+++ b/src/outputlist.cpp
@@ -193,7 +193,7 @@ void OutputList::popGeneratorState()
void OutputList::parseDoc(const char *fileName,int startLine,
const char * clName,MemberDef * md,
- const QCString &docStr)
+ const QCString &docStr,bool isExample)
{
int count=0;
OutputGenerator *og=outputs->first();
@@ -204,7 +204,31 @@ void OutputList::parseDoc(const char *fileName,int startLine,
}
if (count==0) return; // no output formats enabled.
- DocNode *root = validatingParseDoc(fileName,startLine,clName,md,docStr);
+ DocNode *root = validatingParseDoc(fileName,startLine,
+ clName,md,docStr,isExample);
+
+ og=outputs->first();
+ while (og)
+ {
+ if (og->isEnabled()) og->printDoc(root);
+ og=outputs->next();
+ }
+
+ delete root;
+}
+
+void OutputList::parseText(const QCString &textStr)
+{
+ int count=0;
+ OutputGenerator *og=outputs->first();
+ while (og)
+ {
+ if (og->isEnabled()) count++;
+ og=outputs->next();
+ }
+ if (count==0) return; // no output formats enabled.
+
+ DocNode *root = validatingParseText(textStr);
og=outputs->first();
while (og)
diff --git a/src/outputlist.h b/src/outputlist.h
index 918d373..ced3fb4 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -64,7 +64,9 @@ class OutputList : public OutputDocInterface
//////////////////////////////////////////////////
void parseDoc(const char *fileName,int startLine,
- const char *clName,MemberDef *md,const QCString &docStr);
+ const char *clName,MemberDef *md,const QCString &docStr,
+ bool isExample);
+ void parseText(const QCString &textStr);
OutputDocInterface *clone()
{
diff --git a/src/packagedef.cpp b/src/packagedef.cpp
index 8e1c3ae..5f87030 100644
--- a/src/packagedef.cpp
+++ b/src/packagedef.cpp
@@ -23,7 +23,6 @@
#include "outputlist.h"
#include "util.h"
#include "config.h"
-#include "doc.h"
#include "language.h"
#include "doxygen.h"
@@ -58,17 +57,15 @@ void PackageDef::writeDocumentation(OutputList &ol)
ol.docify(title);
endTitle(ol,getOutputFileBase(),title);
- OutputList briefOutput(&ol);
if (!briefDescription().isEmpty())
{
- parseDoc(briefOutput,briefFile(),briefLine(),name(),0,briefDescription());
- ol+=briefOutput;
+ ol.parseDoc(briefFile(),briefLine(),name(),0,briefDescription(),FALSE);
ol.writeString(" \n");
ol.pushGeneratorState();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startTextLink(0,"_details");
- parseText(ol,theTranslator->trMore());
+ ol.parseText(theTranslator->trMore());
ol.endTextLink();
ol.popGeneratorState();
}
@@ -101,20 +98,20 @@ void PackageDef::writeDocumentation(OutputList &ol)
ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
- parseText(ol,theTranslator->trDetailedDescription());
+ ol.parseText(theTranslator->trDetailedDescription());
ol.endGroupHeader();
// repeat brief description
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- ol+=briefOutput;
+ ol.parseDoc(briefFile(),briefLine(),name(),0,briefDescription(),FALSE);
ol.newParagraph();
}
// write documentation
if (!documentation().isEmpty())
{
- parseDoc(ol,docFile(),docLine(),name(),0,documentation()+"\n");
+ ol.parseDoc(docFile(),docLine(),name(),0,documentation()+"\n",FALSE);
}
}
diff --git a/src/page.h b/src/page.h
index d2101c5..331fbc7 100644
--- a/src/page.h
+++ b/src/page.h
@@ -85,7 +85,10 @@ class PageInfo
SectionInfo *si;
for (;(si=sdi.current());++sdi)
{
- Doxygen::tagFile << " <docanchor>" << si->label << "</docanchor>" << endl;
+ if (!si->generated)
+ {
+ Doxygen::tagFile << " <docanchor>" << si->label << "</docanchor>" << endl;
+ }
}
}
}
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
new file mode 100644
index 0000000..e322595
--- /dev/null
+++ b/src/perlmodgen.cpp
@@ -0,0 +1,1876 @@
+/******************************************************************************
+ *
+ *
+ *
+ *
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
+ * Authors: Dimitri van Heesch, Miguel Lobo.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#include <stdlib.h>
+
+#include "perlmodgen.h"
+#include "docparser.h"
+#include "message.h"
+#include "doxygen.h"
+#include "page.h"
+
+#include <qdir.h>
+#include <qstack.h>
+#include <qdict.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+#define PERLOUTPUT_MAX_INDENTATION 40
+
+class PerlModOutputStream
+{
+public:
+
+ QString m_s;
+ QTextStream *m_t;
+
+ PerlModOutputStream(QTextStream *t = 0) : m_t(t) { }
+
+ void add(char c);
+ void add(const char *s);
+ void add(QCString &s);
+ void add(QString &s);
+ void add(int n);
+ void add(unsigned int n);
+};
+
+void PerlModOutputStream::add(char c)
+{
+ if (m_t != 0)
+ (*m_t) << c;
+ else
+ m_s += c;
+}
+
+void PerlModOutputStream::add(const char *s)
+{
+ if (m_t != 0)
+ (*m_t) << s;
+ else
+ m_s += s;
+}
+
+void PerlModOutputStream::add(QCString &s)
+{
+ if (m_t != 0)
+ (*m_t) << s;
+ else
+ m_s += s;
+}
+
+void PerlModOutputStream::add(QString &s)
+{
+ if (m_t != 0)
+ (*m_t) << s;
+ else
+ m_s += s;
+}
+
+void PerlModOutputStream::add(int n)
+{
+ if (m_t != 0)
+ (*m_t) << n;
+ else
+ m_s += n;
+}
+
+void PerlModOutputStream::add(unsigned int n)
+{
+ if (m_t != 0)
+ (*m_t) << n;
+ else
+ m_s += n;
+}
+
+class PerlModOutput
+{
+public:
+
+ PerlModOutput(PerlModOutputStream *os) : m_stream(os), m_indentation(0) { m_spaces[0] = 0; }
+ virtual ~PerlModOutput() { }
+
+ inline PerlModOutput &openSave() { iopenSave(); return *this; }
+ inline PerlModOutput &closeSave(QString &s) { icloseSave(s); return *this; }
+
+ inline PerlModOutput &add(char c) { m_stream->add(c); return *this; }
+ inline PerlModOutput &add(const char *s) { m_stream->add(s); return *this; }
+ inline PerlModOutput &add(QCString &s) { m_stream->add(s); return *this; }
+ inline PerlModOutput &add(QString &s) { m_stream->add(s); return *this; }
+ inline PerlModOutput &add(int n) { m_stream->add(n); return *this; }
+ inline PerlModOutput &add(unsigned int n) { m_stream->add(n); return *this; }
+
+ PerlModOutput &addQuoted(const char *s) { iaddQuoted(s); return *this; }
+ inline PerlModOutput &indent() { m_stream->add(m_spaces); return *this; }
+
+ inline PerlModOutput &open(char c, const char *s = 0) { iopen(c, s); return *this; }
+ inline PerlModOutput &close(char c = 0) { iclose(c); return *this; }
+
+ inline PerlModOutput &addField(const char *s) { iaddField(s); return *this; }
+ inline PerlModOutput &addFieldQuoted(const char *field, const char *content)
+ {
+ iaddFieldQuoted(field, content); return *this;
+ }
+ inline PerlModOutput &openList(const char *s = 0) { open('[', s); return *this; }
+ inline PerlModOutput &closeList() { close(']'); return *this; }
+ inline PerlModOutput &openHash(const char *s = 0 ) { open('{', s); return *this; }
+ inline PerlModOutput &closeHash() { close('}'); return *this; }
+
+protected:
+
+ void iopenSave();
+ void icloseSave(QString &);
+
+ void incIndent();
+ void decIndent();
+
+ void iaddQuoted(const char *);
+ void iaddFieldQuoted(const char *, const char *);
+ void iaddField(const char *);
+
+ void iopen(char, const char *);
+ void iclose(char);
+
+private:
+
+ PerlModOutputStream *m_stream;
+ int m_indentation;
+
+ QStack<PerlModOutputStream> m_saved;
+ char m_spaces[PERLOUTPUT_MAX_INDENTATION * 2 + 2];
+};
+
+void PerlModOutput::iopenSave()
+{
+ m_saved.push(m_stream);
+ m_stream = new PerlModOutputStream();
+}
+
+void PerlModOutput::icloseSave(QString &s)
+{
+ s = m_stream->m_s;
+ delete m_stream;
+ m_stream = m_saved.pop();
+}
+
+void PerlModOutput::incIndent()
+{
+ if (m_indentation < PERLOUTPUT_MAX_INDENTATION)
+ {
+ char *s = &m_spaces[m_indentation * 2];
+ *s++ = ' '; *s++ = ' '; *s = 0;
+ }
+ m_indentation++;
+}
+
+void PerlModOutput::decIndent()
+{
+ m_indentation--;
+ if (m_indentation < PERLOUTPUT_MAX_INDENTATION)
+ m_spaces[m_indentation * 2] = 0;
+}
+
+void PerlModOutput::iaddQuoted(const char *s)
+{
+ char c;
+ while ((c = *s++) != 0) {
+ if (c == '\'')
+ m_stream->add('\\');
+ m_stream->add(c);
+ }
+}
+
+inline void PerlModOutput::iaddField(const char *s)
+{
+ indent();
+ m_stream->add(s);
+ m_stream->add(" => ");
+}
+
+void PerlModOutput::iaddFieldQuoted(const char *field, const char *content)
+{
+ iaddField(field);
+ m_stream->add('\'');
+ iaddQuoted(content);
+ m_stream->add("',\n");
+}
+
+void PerlModOutput::iopen(char c, const char *s)
+{
+ if (s != 0)
+ iaddField(s);
+ else
+ indent();
+ m_stream->add(c);
+ m_stream->add('\n');
+ incIndent();
+}
+
+void PerlModOutput::iclose(char c)
+{
+ decIndent();
+ indent();
+ if (c != 0)
+ m_stream->add(c);
+ m_stream->add(",\n");
+}
+
+/*! @brief Concrete visitor implementation for Perl output. */
+class PerlModDocVisitor : public DocVisitor
+{
+public:
+ PerlModDocVisitor(PerlModOutput &);
+ virtual ~PerlModDocVisitor() {}
+
+ void finish();
+
+ //--------------------------------------
+ // visitor functions for leaf nodes
+ //--------------------------------------
+
+ void visit(DocWord *);
+ void visit(DocLinkedWord *);
+ void visit(DocWhiteSpace *);
+ void visit(DocSymbol *);
+ void visit(DocURL *);
+ void visit(DocLineBreak *);
+ void visit(DocHorRuler *);
+ void visit(DocStyleChange *);
+ void visit(DocVerbatim *);
+ void visit(DocAnchor *);
+ void visit(DocInclude *);
+ void visit(DocIncOperator *);
+ void visit(DocFormula *);
+ void visit(DocIndexEntry *);
+
+ //--------------------------------------
+ // visitor functions for compound nodes
+ //--------------------------------------
+
+ void visitPre(DocAutoList *);
+ void visitPost(DocAutoList *);
+ void visitPre(DocAutoListItem *);
+ void visitPost(DocAutoListItem *);
+ void visitPre(DocPara *) ;
+ void visitPost(DocPara *);
+ void visitPre(DocRoot *);
+ void visitPost(DocRoot *);
+ void visitPre(DocSimpleSect *);
+ void visitPost(DocSimpleSect *);
+ void visitPre(DocTitle *);
+ void visitPost(DocTitle *);
+ void visitPre(DocSimpleList *);
+ void visitPost(DocSimpleList *);
+ void visitPre(DocSimpleListItem *);
+ void visitPost(DocSimpleListItem *);
+ void visitPre(DocSection *);
+ void visitPost(DocSection *);
+ void visitPre(DocHtmlList *);
+ void visitPost(DocHtmlList *) ;
+ void visitPre(DocHtmlListItem *);
+ void visitPost(DocHtmlListItem *);
+ void visitPre(DocHtmlPre *);
+ void visitPost(DocHtmlPre *);
+ void visitPre(DocHtmlDescList *);
+ void visitPost(DocHtmlDescList *);
+ void visitPre(DocHtmlDescTitle *);
+ void visitPost(DocHtmlDescTitle *);
+ void visitPre(DocHtmlDescData *);
+ void visitPost(DocHtmlDescData *);
+ void visitPre(DocHtmlTable *);
+ void visitPost(DocHtmlTable *);
+ void visitPre(DocHtmlRow *);
+ void visitPost(DocHtmlRow *) ;
+ void visitPre(DocHtmlCell *);
+ void visitPost(DocHtmlCell *);
+ void visitPre(DocHtmlCaption *);
+ void visitPost(DocHtmlCaption *);
+ void visitPre(DocInternal *);
+ void visitPost(DocInternal *);
+ void visitPre(DocHRef *);
+ void visitPost(DocHRef *);
+ void visitPre(DocHtmlHeader *);
+ void visitPost(DocHtmlHeader *);
+ void visitPre(DocImage *);
+ void visitPost(DocImage *);
+ void visitPre(DocDotFile *);
+ void visitPost(DocDotFile *);
+ void visitPre(DocLink *);
+ void visitPost(DocLink *);
+ void visitPre(DocRef *);
+ void visitPost(DocRef *);
+ void visitPre(DocSecRefItem *);
+ void visitPost(DocSecRefItem *);
+ void visitPre(DocSecRefList *);
+ void visitPost(DocSecRefList *);
+ void visitPre(DocLanguage *);
+ void visitPost(DocLanguage *);
+ void visitPre(DocParamSect *);
+ void visitPost(DocParamSect *);
+ void visitPre(DocParamList *);
+ void visitPost(DocParamList *);
+ void visitPre(DocXRefItem *);
+ void visitPost(DocXRefItem *);
+ void visitPre(DocInternalRef *);
+ void visitPost(DocInternalRef *);
+ void visitPre(DocCopy *);
+ void visitPost(DocCopy *);
+ void visitPre(DocText *);
+ void visitPost(DocText *);
+
+private:
+
+ //--------------------------------------
+ // helper functions
+ //--------------------------------------
+
+ void addLink(const QString &ref,const QString &file,
+ const QString &anchor);
+
+ void enterText();
+ void leaveText();
+
+ void openItem(const char *);
+ void closeItem();
+ void singleItem(const char *);
+ void openSubBlock(const char * = 0);
+ void closeSubBlock();
+
+ //--------------------------------------
+ // state variables
+ //--------------------------------------
+
+ PerlModOutput &m_output;
+ bool m_textmode;
+ QString m_other;
+};
+
+PerlModDocVisitor::PerlModDocVisitor(PerlModOutput &output)
+ : m_output(output), m_textmode(false)
+{
+ m_output.openList("doc");
+}
+
+void PerlModDocVisitor::finish()
+{
+ leaveText();
+ m_output.closeList()
+ .add(m_other);
+}
+
+void PerlModDocVisitor::addLink(const QString &,const QString &file,const QString &anchor)
+{
+ QString link = file;
+ if (!anchor.isEmpty())
+ (link += "_1") += anchor;
+ m_output.addFieldQuoted("link", link);
+}
+
+void PerlModDocVisitor::openItem(const char *name)
+{
+ leaveText();
+ m_output.openHash().addFieldQuoted("type", name);
+}
+
+void PerlModDocVisitor::closeItem()
+{
+ m_output.closeHash();
+}
+
+void PerlModDocVisitor::enterText()
+{
+ if (m_textmode)
+ return;
+ openItem("text");
+ m_output.addField("content").add('\'');
+ m_textmode = true;
+}
+
+void PerlModDocVisitor::leaveText()
+{
+ if (!m_textmode)
+ return;
+ m_output.add("\'\n");
+ closeItem();
+ m_textmode = false;
+}
+
+void PerlModDocVisitor::singleItem(const char *name)
+{
+ openItem(name);
+ closeItem();
+}
+
+void PerlModDocVisitor::openSubBlock(const char *s)
+{
+ m_output.openList(s);
+}
+
+void PerlModDocVisitor::closeSubBlock()
+{
+ leaveText();
+ m_output.closeList();
+}
+
+void PerlModDocVisitor::visit(DocWord *w)
+{
+ enterText();
+ m_output.addQuoted(w->word());
+}
+
+void PerlModDocVisitor::visit(DocLinkedWord *w)
+{
+ openItem("url");
+ addLink(w->ref(), w->file(), w->anchor());
+ m_output.addFieldQuoted("content", w->word());
+ closeItem();
+}
+
+void PerlModDocVisitor::visit(DocWhiteSpace *)
+{
+ enterText();
+ m_output.add(' ');
+}
+
+void PerlModDocVisitor::visit(DocSymbol *sy)
+{
+ char c = 0;
+ const char *s = 0;
+ switch(sy->symbol())
+ {
+ case DocSymbol::At: c = '@'; break;
+ case DocSymbol::Less: c = '<'; break;
+ case DocSymbol::Greater: c = '>'; break;
+ case DocSymbol::Amp: c = '&'; break;
+ case DocSymbol::Dollar: c = '$'; break;
+ case DocSymbol::Hash: c = '#'; break;
+ case DocSymbol::Percent: c = '%'; break;
+ case DocSymbol::Quot: c = '"'; break;
+ case DocSymbol::Szlig: c = 'ß'; break;
+ case DocSymbol::Nbsp: c = ' '; break;
+ case DocSymbol::Uml: c = sy->letter(); break;
+ case DocSymbol::Acute: c = sy->letter(); break;
+ case DocSymbol::Grave: c = sy->letter(); break;
+ case DocSymbol::Circ: c = sy->letter(); break;
+ case DocSymbol::Tilde: c = sy->letter(); break;
+ case DocSymbol::Cedil: c = sy->letter(); break;
+ case DocSymbol::Ring: c = sy->letter(); break;
+ case DocSymbol::BSlash: s = "\\\\"; break;
+ case DocSymbol::Copy: s = "(c)"; break;
+ case DocSymbol::Apos: s = "\\\'"; break;
+ default:
+ err("Error: unknown symbol found\n");
+ }
+ enterText();
+ if (c != 0)
+ m_output.add(c);
+ else
+ m_output.add(s);
+}
+
+void PerlModDocVisitor::visit(DocURL *u)
+{
+ openItem("url");
+ m_output.addQuoted(u->url());
+ closeItem();
+}
+
+void PerlModDocVisitor::visit(DocLineBreak *) { singleItem("linebreak"); }
+void PerlModDocVisitor::visit(DocHorRuler *) { singleItem("hruler"); }
+void PerlModDocVisitor::visit(DocStyleChange *s)
+{
+ switch (s->style())
+ {
+ case DocStyleChange::Bold: break; // bold
+ case DocStyleChange::Italic: break; // italic
+ case DocStyleChange::Code: break; // code
+ case DocStyleChange::Subscript: break; // subscript
+ case DocStyleChange::Superscript: break; // superscript
+ case DocStyleChange::Center: break; // center
+ case DocStyleChange::Small: break; // small
+ default:
+ err("Error: unknown style found.\n");
+ }
+}
+
+void PerlModDocVisitor::visit(DocVerbatim *s)
+{
+ const char *type = 0;
+ switch(s->type())
+ {
+ case DocVerbatim::Code:
+#if 0
+ m_output.add("<programlisting>");
+ parseCode(m_ci,s->context(),s->text(),FALSE,0);
+ m_output.add("</programlisting>");
+#endif
+ return;
+ case DocVerbatim::Verbatim: type = "preformatted"; break;
+ case DocVerbatim::HtmlOnly: type = "htmlonly"; break;
+ case DocVerbatim::LatexOnly: type = "latexonly"; break;
+ }
+ openItem(type);
+ m_output.addFieldQuoted("content", s->text());
+ closeItem();
+}
+
+void PerlModDocVisitor::visit(DocAnchor *anc)
+{
+ QString anchor = anc->file() + "_1" + anc->anchor();
+ openItem("anchor");
+ m_output.addFieldQuoted("id", anchor);
+ closeItem();
+}
+
+void PerlModDocVisitor::visit(DocInclude *inc)
+{
+ const char *type = 0;
+ switch(inc->type())
+ {
+ case DocInclude::Include:
+#if 0
+ m_output.add("<programlisting>");
+ parseCode(m_ci,inc->context(),inc->text(),FALSE,0);
+ m_output.add("</programlisting>");
+#endif
+ return;
+ case DocInclude::DontInclude: return;
+ case DocInclude::HtmlInclude: type = "htmlonly"; break;
+ case DocInclude::VerbInclude: type = "preformatted"; break;
+ }
+ openItem(type);
+ m_output.addFieldQuoted("content", inc->text());
+ closeItem();
+}
+
+void PerlModDocVisitor::visit(DocIncOperator *)
+{
+#if 0
+ //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
+ // op->type(),op->isFirst(),op->isLast(),op->text().data());
+ if (op->isFirst())
+ {
+ m_output.add("<programlisting>");
+ }
+ if (op->type()!=DocIncOperator::Skip)
+ {
+ parseCode(m_ci,op->context(),op->text(),FALSE,0);
+ }
+ if (op->isLast())
+ {
+ m_output.add("</programlisting>");
+ }
+ else
+ {
+ m_output.add('\n');
+ }
+#endif
+}
+
+void PerlModDocVisitor::visit(DocFormula *f)
+{
+ openItem("formula");
+ QString id;
+ id += f->id();
+ m_output.addFieldQuoted("id", id).addFieldQuoted("content", f->text());
+ closeItem();
+}
+
+void PerlModDocVisitor::visit(DocIndexEntry *)
+{
+#if 0
+ m_output.add("<indexentry>"
+ "<primaryie>");
+ m_output.addQuoted(ie->entry());
+ m_output.add("</primaryie>"
+ "<secondaryie></secondaryie>"
+ "</indexentry>");
+#endif
+}
+
+//--------------------------------------
+// visitor functions for compound nodes
+//--------------------------------------
+
+void PerlModDocVisitor::visitPre(DocAutoList *l)
+{
+ openItem(l->isEnumList() ? "ordered_list" : "itemized_list");
+ openSubBlock("content");
+}
+void PerlModDocVisitor::visitPost(DocAutoList *) { closeSubBlock(); }
+
+void PerlModDocVisitor::visitPre(DocAutoListItem *) { openSubBlock(); }
+void PerlModDocVisitor::visitPost(DocAutoListItem *) { closeSubBlock(); }
+void PerlModDocVisitor::visitPre(DocPara *)
+{
+ openItem("para");
+ openSubBlock("content");
+}
+void PerlModDocVisitor::visitPost(DocPara *)
+{
+ closeSubBlock();
+ closeItem();
+}
+
+void PerlModDocVisitor::visitPre(DocRoot *)
+{
+}
+
+void PerlModDocVisitor::visitPost(DocRoot *)
+{
+}
+
+void PerlModDocVisitor::visitPre(DocSimpleSect *s)
+{
+ leaveText();
+ const char *type;
+ switch (s->type())
+ {
+ case DocSimpleSect::See: type = "see"; break;
+ case DocSimpleSect::Return: type = "return"; break;
+ case DocSimpleSect::Author: type = "author"; break;
+ case DocSimpleSect::Authors: type = "authors"; break;
+ case DocSimpleSect::Version: type = "version"; break;
+ case DocSimpleSect::Since: type = "since"; break;
+ case DocSimpleSect::Date: type = "date"; break;
+ case DocSimpleSect::Note: type = "bug"; break;
+ case DocSimpleSect::Warning: type = "warning"; break;
+ case DocSimpleSect::Pre: type = "pre"; break;
+ case DocSimpleSect::Post: type = "post"; break;
+ case DocSimpleSect::Invar: type = "invariant"; break;
+ case DocSimpleSect::Remark: type = "remark"; break;
+ case DocSimpleSect::Attention: type = "attention"; break;
+ case DocSimpleSect::User: type = "par"; break;
+ default: type = "illegal"; break;
+ }
+ m_output.openSave().openList(type);
+}
+
+void PerlModDocVisitor::visitPost(DocSimpleSect *)
+{
+ QString content;
+ leaveText();
+ m_output.closeList().closeSave(content);
+ m_other += content;
+}
+
+void PerlModDocVisitor::visitPre(DocTitle *)
+{
+ openItem("title");
+ openSubBlock("content");
+}
+
+void PerlModDocVisitor::visitPost(DocTitle *)
+{
+ closeSubBlock();
+ closeItem();
+}
+
+void PerlModDocVisitor::visitPre(DocSimpleList *)
+{
+ openItem("itemized_list");
+ openSubBlock("content");
+}
+void PerlModDocVisitor::visitPost(DocSimpleList *) { closeSubBlock(); }
+void PerlModDocVisitor::visitPre(DocSimpleListItem *) { openSubBlock(); }
+void PerlModDocVisitor::visitPost(DocSimpleListItem *) { closeSubBlock(); }
+
+void PerlModDocVisitor::visitPre(DocSection *s)
+{
+ QString sect = "sect" + (s->level() + 1);
+ openItem(sect);
+ openSubBlock("content");
+}
+void PerlModDocVisitor::visitPost(DocSection *) { closeSubBlock(); }
+
+void PerlModDocVisitor::visitPre(DocHtmlList *l)
+{
+ openItem((l->type() == DocHtmlList::Ordered) ? "ordered_list" : "itemized_list");
+ openSubBlock("content");
+}
+void PerlModDocVisitor::visitPost(DocHtmlList *) { closeSubBlock(); }
+void PerlModDocVisitor::visitPre(DocHtmlListItem *) { openSubBlock(); }
+void PerlModDocVisitor::visitPost(DocHtmlListItem *) { closeSubBlock(); }
+
+void PerlModDocVisitor::visitPre(DocHtmlPre *)
+{
+ openItem("preformatted");
+ openSubBlock("content");
+ //m_insidePre=TRUE;
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlPre *)
+{
+ //m_insidePre=FALSE;
+ closeSubBlock();
+ closeItem();
+}
+
+void PerlModDocVisitor::visitPre(DocHtmlDescList *)
+{
+#if 0
+ m_output.add("<variablelist>\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlDescList *)
+{
+#if 0
+ m_output.add("</variablelist>\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocHtmlDescTitle *)
+{
+#if 0
+ m_output.add("<varlistentry><term>");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlDescTitle *)
+{
+#if 0
+ m_output.add("</term></varlistentry>\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocHtmlDescData *)
+{
+#if 0
+ m_output.add("<listitem>");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlDescData *)
+{
+#if 0
+ m_output.add("</listitem>\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocHtmlTable *)
+{
+#if 0
+ m_output.add("<table rows=\""); m_output.add(t->numRows());
+ m_output.add("\" cols=\""); m_output.add(t->numCols()); m_output.add("\">");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlTable *)
+{
+#if 0
+ m_output.add("</table>\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocHtmlRow *)
+{
+#if 0
+ m_output.add("<row>\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlRow *)
+{
+#if 0
+ m_output.add("</row>\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocHtmlCell *)
+{
+#if 0
+ if (c->isHeading()) m_output.add("<entry thead=\"yes\">"); else m_output.add("<entry thead=\"no\">");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlCell *)
+{
+#if 0
+ m_output.add("</entry>");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocHtmlCaption *)
+{
+#if 0
+ m_output.add("<caption>");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlCaption *)
+{
+#if 0
+ m_output.add("</caption>\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocInternal *)
+{
+#if 0
+ m_output.add("<internal>");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocInternal *)
+{
+#if 0
+ m_output.add("</internal>");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocHRef *)
+{
+#if 0
+ m_output.add("<ulink url=\""); m_output.add(href->url()); m_output.add("\">");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHRef *)
+{
+#if 0
+ m_output.add("</ulink>");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocHtmlHeader *)
+{
+#if 0
+ m_output.add("<sect"); m_output.add(header->level()); m_output.add(">");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlHeader *)
+{
+#if 0
+ m_output.add("</sect"); m_output.add(header->level()); m_output.add(">\n");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocImage *)
+{
+#if 0
+ m_output.add("<image type=\"");
+ switch(img->type())
+ {
+ case DocImage::Html: m_output.add("html"); break;
+ case DocImage::Latex: m_output.add("latex"); break;
+ case DocImage::Rtf: m_output.add("rtf"); break;
+ }
+ m_output.add("\"");
+
+ QCString baseName=img->name();
+ int i;
+ if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
+ {
+ baseName=baseName.right(baseName.length()-i-1);
+ }
+ m_output.add(" name=\""); m_output.add(baseName); m_output.add("\"");
+ if (!img->width().isEmpty())
+ {
+ m_output.add(" width=\"");
+ m_output.addQuoted(img->width());
+ m_output.add("\"");
+ }
+ else if (!img->height().isEmpty())
+ {
+ m_output.add(" height=\"");
+ m_output.addQuoted(img->height());
+ m_output.add("\"");
+ }
+ m_output.add(">");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocImage *)
+{
+#if 0
+ m_output.add("</image>");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocDotFile *)
+{
+#if 0
+ m_output.add("<dotfile name=\""); m_output.add(df->file()); m_output.add("\">");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocDotFile *)
+{
+#if 0
+ m_output.add("</dotfile>");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocLink *lnk)
+{
+ openItem("link");
+ addLink(lnk->ref(), lnk->file(), lnk->anchor());
+}
+
+void PerlModDocVisitor::visitPost(DocLink *)
+{
+ closeItem();
+}
+
+void PerlModDocVisitor::visitPre(DocRef *ref)
+{
+ openItem("ref");
+ if (!ref->hasLinkText())
+ m_output.addFieldQuoted("text", ref->targetTitle());
+}
+
+void PerlModDocVisitor::visitPost(DocRef *)
+{
+ closeItem();
+}
+
+void PerlModDocVisitor::visitPre(DocSecRefItem *)
+{
+#if 0
+ m_output.add("<tocitem id=\""); m_output.add(ref->file()); m_output.add("_1"); m_output.add(ref->anchor()); m_output.add("\">");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocSecRefItem *)
+{
+#if 0
+ m_output.add("</tocitem>");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocSecRefList *)
+{
+#if 0
+ m_output.add("<toclist>");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocSecRefList *)
+{
+#if 0
+ m_output.add("</toclist>");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocLanguage *l)
+{
+ openItem("language");
+ m_output.addFieldQuoted("id", l->id());
+}
+
+void PerlModDocVisitor::visitPost(DocLanguage *)
+{
+ closeItem();
+}
+
+void PerlModDocVisitor::visitPre(DocParamSect *s)
+{
+ leaveText();
+ const char *type = 0;
+ switch(s->type())
+ {
+ case DocParamSect::Param: type = "params"; break;
+ case DocParamSect::RetVal: type = "retvals"; break;
+ case DocParamSect::Exception: type = "exceptions"; break;
+ default: ASSERT(0);
+ }
+ m_output.openSave().openList(type);
+}
+
+void PerlModDocVisitor::visitPost(DocParamSect *)
+{
+ leaveText();
+ QString content;
+ m_output.closeList().closeSave(content);
+ m_other += content;
+}
+
+void PerlModDocVisitor::visitPre(DocParamList *pl)
+{
+ leaveText();
+ m_output.openHash()
+ .openList("parameters");
+ QStrListIterator li(pl->parameters());
+ const char *s;
+ for (li.toFirst();(s=li.current());++li)
+ {
+ m_output.openHash()
+ .addFieldQuoted("name", s)
+ .closeHash();
+ }
+ m_output.closeList()
+ .openList("doc");
+}
+
+void PerlModDocVisitor::visitPost(DocParamList *)
+{
+ leaveText();
+ m_output.closeList()
+ .closeHash();
+}
+
+void PerlModDocVisitor::visitPre(DocXRefItem *)
+{
+#if 0
+ m_output.add("<xrefsect id=\"");
+ m_output.add(x->file()); m_output.add("_1"); m_output.add(x->anchor());
+ m_output.add("\">");
+ m_output.add("<xreftitle>");
+ m_output.addQuoted(x->title());
+ m_output.add("</xreftitle>");
+ m_output.add("<xrefdescription>");
+#endif
+}
+
+void PerlModDocVisitor::visitPost(DocXRefItem *)
+{
+#if 0
+ m_output.add("</xrefdescription>");
+ m_output.add("</xrefsect>");
+#endif
+}
+
+void PerlModDocVisitor::visitPre(DocInternalRef *ref)
+{
+ openItem("ref");
+ addLink(0,ref->file(),ref->anchor());
+}
+
+void PerlModDocVisitor::visitPost(DocInternalRef *)
+{
+ closeItem();
+}
+
+void PerlModDocVisitor::visitPre(DocCopy *)
+{
+}
+
+void PerlModDocVisitor::visitPost(DocCopy *)
+{
+}
+
+void PerlModDocVisitor::visitPre(DocText *)
+{
+}
+
+void PerlModDocVisitor::visitPost(DocText *)
+{
+}
+
+static void addTemplateArgumentList(ArgumentList *al,
+ PerlModOutput &output,const char * /*name*/)
+{
+ QCString indentStr;
+ if (!al)
+ return;
+ output.openList("template_parameters");
+ ArgumentListIterator ali(*al);
+ Argument *a;
+ for (ali.toFirst();(a=ali.current());++ali)
+ {
+ output.openHash();
+ if (!a->type.isEmpty())
+ output.addFieldQuoted("type", a->type);
+ if (!a->name.isEmpty())
+ output.addFieldQuoted("declaration_name", a->name)
+ .addFieldQuoted("definition_name", a->name);
+ if (!a->defval.isEmpty())
+ output.addFieldQuoted("default", a->defval);
+ output.closeHash();
+ }
+ 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);
+}
+*/
+
+static void addTemplateList(ClassDef *cd,PerlModOutput &output)
+{
+ addTemplateArgumentList(cd->templateArguments(),output,cd->name());
+}
+
+static void addPerlModDocBlock(PerlModOutput &output,
+ const char *name,
+ const QCString &fileName,
+ int lineNr,
+ const QCString &scope,
+ MemberDef *md,
+ const QCString &text)
+{
+ QCString stext = text.stripWhiteSpace();
+ if (stext.isEmpty())
+ {
+ output.addField(name).add("{},\n");
+ }
+ else
+ {
+ DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,stext,FALSE);
+ output.openHash(name);
+ PerlModDocVisitor *visitor = new PerlModDocVisitor(output);
+ root->accept(visitor);
+ visitor->finish();
+ output.closeHash();
+ delete visitor;
+ delete root;
+ }
+}
+
+static const char *getProtectionName(Protection prot)
+{
+ switch (prot)
+ {
+ case Public: return "public";
+ case Protected: return "protected";
+ case Private: return "private";
+ }
+ return 0;
+}
+
+static const char *getVirtualnessName(Specifier virt)
+{
+ switch(virt)
+ {
+ case Normal: return "non_virtual";
+ case Virtual: return "virtual";
+ case Pure: return "pure_virtual";
+ }
+ return 0;
+}
+
+static void generatePerlForMember(MemberDef *md,PerlModOutput &output,Definition *)
+{
+
+ // + declaration/definition arg lists
+ // + reimplements
+ // + reimplementedBy
+ // + exceptions
+ // + const/volatile specifiers
+ // - examples
+ // - source definition
+ // - source references
+ // - source referenced by
+ // - body code
+ // - template arguments
+ // (templateArguments(), definitionTemplateParameterLists())
+
+ QCString memType;
+ bool isFunc=FALSE;
+ switch (md->memberType())
+ {
+ case MemberDef::Define: memType="define"; break;
+ case MemberDef::EnumValue: ASSERT(0); break;
+ case MemberDef::Property: memType="property"; break;
+ case MemberDef::Variable: memType="variable"; break;
+ case MemberDef::Typedef: memType="typedef"; break;
+ case MemberDef::Enumeration: memType="enum"; break;
+ case MemberDef::Function: memType="function"; isFunc=TRUE; break;
+ case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
+ case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
+ case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
+ case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
+ case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
+ }
+
+ QCString scopeName;
+ if (md->getClassDef())
+ scopeName=md->getClassDef()->name();
+ else if (md->getNamespaceDef())
+ scopeName=md->getNamespaceDef()->name();
+
+ output.openHash()
+ .addFieldQuoted("kind", memType)
+ .addFieldQuoted("name", md->name())
+ .addFieldQuoted("virtualness", getVirtualnessName(md->virtualness()))
+ .addFieldQuoted("protection", getProtectionName(md->protection()));
+
+ addPerlModDocBlock(output,"brief",md->getDefFileName(),md->getDefLine(),scopeName,md,md->briefDescription());
+ addPerlModDocBlock(output,"detailed",md->getDefFileName(),md->getDefLine(),scopeName,md,md->documentation());
+ if (md->memberType()!=MemberDef::Define &&
+ md->memberType()!=MemberDef::Enumeration)
+ output.addFieldQuoted("type", md->typeString());
+
+ if (isFunc) //function
+ {
+ ArgumentList *al = md->argumentList();
+ output.addFieldQuoted("const", (al && al->constSpecifier) ? "yes" : "no")
+ .addFieldQuoted("volatile", (al && al->volatileSpecifier) ? "yes" : "no");
+
+ output.openList("parameters");
+ ArgumentList *declAl = md->declArgumentList();
+ ArgumentList *defAl = md->argumentList();
+ if (declAl && declAl->count()>0)
+ {
+ ArgumentListIterator declAli(*declAl);
+ ArgumentListIterator defAli(*defAl);
+ Argument *a;
+ for (declAli.toFirst();(a=declAli.current());++declAli)
+ {
+ Argument *defArg = defAli.current();
+ output.openHash();
+
+ if (!a->name.isEmpty())
+ output.addFieldQuoted("declaration_name", a->name);
+
+ if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
+ output.addFieldQuoted("definition_name", defArg->name);
+
+ if (!a->type.isEmpty())
+ output.addFieldQuoted("type", a->type);
+
+ if (!a->array.isEmpty())
+ output.addFieldQuoted("array", a->array);
+
+ if (!a->defval.isEmpty())
+ output.addFieldQuoted("default_value", a->defval);
+
+ if (!a->attrib.isEmpty())
+ output.addFieldQuoted("attributes", a->attrib);
+
+ output.closeHash();
+ if (defArg) ++defAli;
+ }
+ }
+ output.closeList();
+ }
+ else if (md->memberType()==MemberDef::Define &&
+ md->argsString()!=0) // define
+ {
+ output.openList("parameters");
+ ArgumentListIterator ali(*md->argumentList());
+ Argument *a;
+ for (ali.toFirst();(a=ali.current());++ali)
+ {
+ output.openHash()
+ .addFieldQuoted("name", a->type)
+ .closeHash();
+ }
+ output.closeList();
+ }
+ if (!md->initializer().isEmpty())
+ output.addFieldQuoted("initializer", md->initializer());
+
+ if (md->excpString())
+ output.addFieldQuoted("exceptions", md->excpString());
+
+ if (md->memberType()==MemberDef::Enumeration) // enum
+ {
+ if (md->enumFieldList())
+ {
+ output.openList("values");
+ MemberListIterator emli(*md->enumFieldList());
+ MemberDef *emd;
+ for (emli.toFirst();(emd=emli.current());++emli)
+ {
+ output.openHash()
+ .addFieldQuoted("name", emd->name());
+
+ if (!emd->initializer().isEmpty())
+ output.addFieldQuoted("initializer", emd->initializer());
+
+ addPerlModDocBlock(output,"brief",emd->getDefFileName(),emd->getDefLine(),scopeName,emd,emd->briefDescription());
+
+ addPerlModDocBlock(output,"detailed",emd->getDefFileName(),emd->getDefLine(),scopeName,emd,emd->documentation());
+
+ output.closeHash();
+ }
+ output.closeList();
+ }
+ }
+
+ MemberDef *rmd = md->reimplements();
+ if (rmd)
+ output.openHash("reimplements")
+ .addFieldQuoted("name", rmd->name())
+ .closeHash();
+
+ MemberList *rbml = md->reimplementedBy();
+ if (rbml)
+ {
+ MemberListIterator mli(*rbml);
+ output.openList("reimplemented_by");
+ for (mli.toFirst();(rmd=mli.current());++mli)
+ output.openHash()
+ .addFieldQuoted("name", rmd->name())
+ .closeHash();
+ output.closeList();
+ }
+
+ output.closeHash();
+}
+
+static void generatePerlSection(Definition *d,PerlModOutput &output,
+ MemberList *ml,const char *name,const char *header=0)
+{
+ if (ml->count()==0) return; // empty list
+
+ output.openHash(name);
+
+ if (header)
+ output.addFieldQuoted("header", header);
+
+ output.openList("members");
+ MemberListIterator mli(*ml);
+ MemberDef *md;
+ for (mli.toFirst();(md=mli.current());++mli)
+ {
+ generatePerlForMember(md,output,d);
+ }
+ output.closeList()
+ .closeHash();
+}
+
+static void addListOfAllMembers(ClassDef *cd, PerlModOutput &output)
+{
+ output.openList("all_members");
+ MemberNameInfoSDict::Iterator mnii(*cd->memberNameInfoSDict());
+ MemberNameInfo *mni;
+ for (mnii.toFirst();(mni=mnii.current());++mnii)
+ {
+ MemberNameInfoIterator mii(*mni);
+ MemberInfo *mi;
+ for (mii.toFirst();(mi=mii.current());++mii)
+ {
+ MemberDef *md=mi->memberDef;
+ ClassDef *cd=md->getClassDef();
+ Definition *d=md->getGroupDef();
+ if (d==0) d = cd;
+
+ output.openHash()
+ .addFieldQuoted("name", md->name())
+ .addFieldQuoted("virtualness", getVirtualnessName(md->virtualness()))
+ .addFieldQuoted("protection", getProtectionName(mi->prot));
+
+ if (!mi->ambiguityResolutionScope.isEmpty())
+ output.addFieldQuoted("ambiguity_scope", mi->ambiguityResolutionScope);
+
+ output.addFieldQuoted("scope", cd->name())
+ .closeHash();
+ }
+ }
+ output.closeList();
+}
+
+static void generatePerlForClass(ClassDef *cd, PerlModOutput &output)
+{
+ // + brief description
+ // + detailed description
+ // + template argument list(s)
+ // - include file
+ // + member groups
+ // + inheritance diagram
+ // + list of direct super classes
+ // + list of direct sub classes
+ // + list of inner classes
+ // + collaboration diagram
+ // + list of all members
+ // + user defined member sections
+ // + standard member sections
+ // + detailed member documentation
+ // - examples using the class
+
+ if (cd->isReference()) return; // skip external references.
+ if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
+ if (cd->templateMaster()!=0) return; // skip generated template instances.
+
+ output.openHash()
+ .addFieldQuoted("name", cd->name());
+
+ if (cd->baseClasses()->count()>0)
+ {
+ output.openList("base");
+ BaseClassListIterator bcli(*cd->baseClasses());
+ BaseClassDef *bcd;
+ for (bcli.toFirst();(bcd=bcli.current());++bcli)
+ output.openHash()
+ .addFieldQuoted("name", bcd->classDef->displayName())
+ .addFieldQuoted("virtualness", getVirtualnessName(bcd->virt))
+ .addFieldQuoted("protection", getProtectionName(bcd->prot))
+ .closeHash();
+ output.closeList();
+ }
+
+ if (cd->subClasses()->count()>0)
+ {
+ output.openList("derived");
+ BaseClassListIterator bcli(*cd->baseClasses());
+ BaseClassDef *bcd;
+ for (bcli.toFirst();(bcd=bcli.current());++bcli)
+ output.openHash()
+ .addFieldQuoted("name", bcd->classDef->displayName())
+ .addFieldQuoted("virtualness", getVirtualnessName(bcd->virt))
+ .addFieldQuoted("protection", getProtectionName(bcd->prot))
+ .closeHash();
+ output.closeList();
+ }
+
+ ClassSDict *cl = cd->getInnerClasses();
+ if (cl)
+ {
+ output.openList("inner");
+ ClassSDict::Iterator cli(*cl);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ output.openHash()
+ .addFieldQuoted("name", cd->name())
+ .closeHash();
+ output.closeList();
+ }
+
+ IncludeInfo *ii=cd->includeInfo();
+ if (ii)
+ {
+ QCString nm = ii->includeName;
+ if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
+ if (!nm.isEmpty())
+ {
+ output.openHash("includes");
+#if 0
+ if (ii->fileDef && !ii->fileDef->isReference()) // TODO: support external references
+ t << " id=\"" << ii->fileDef->getOutputFileBase() << "\"";
+#endif
+ output.addFieldQuoted("local", ii->local ? "yes" : "no")
+ .addFieldQuoted("name", nm)
+ .closeHash();
+ }
+ }
+
+ addTemplateList(cd,output);
+ addListOfAllMembers(cd,output);
+ MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
+ generatePerlSection(cd,output,mg->members(),"user_defined",mg->header());
+
+ generatePerlSection(cd,output,&cd->pubTypes,"public_typedefs");
+ generatePerlSection(cd,output,&cd->pubMethods,"public_methods");
+ generatePerlSection(cd,output,&cd->pubAttribs,"public_members");
+ generatePerlSection(cd,output,&cd->pubSlots,"public_slots");
+ generatePerlSection(cd,output,&cd->signals,"signals");
+ generatePerlSection(cd,output,&cd->dcopMethods,"dcop_methods");
+ generatePerlSection(cd,output,&cd->properties,"properties");
+ generatePerlSection(cd,output,&cd->pubStaticMethods,"public_static_methods");
+ generatePerlSection(cd,output,&cd->pubStaticAttribs,"public_static_members");
+ generatePerlSection(cd,output,&cd->proTypes,"protected_typedefs");
+ generatePerlSection(cd,output,&cd->proMethods,"protected_methods");
+ generatePerlSection(cd,output,&cd->proAttribs,"protected_members");
+ generatePerlSection(cd,output,&cd->proSlots,"protected_slots");
+ generatePerlSection(cd,output,&cd->proStaticMethods,"protected_static_methods");
+ generatePerlSection(cd,output,&cd->proStaticAttribs,"protected_static_members");
+ generatePerlSection(cd,output,&cd->priTypes,"private_typedefs");
+ generatePerlSection(cd,output,&cd->priMethods,"private_methods");
+ generatePerlSection(cd,output,&cd->priAttribs,"private_members");
+ generatePerlSection(cd,output,&cd->priSlots,"private_slots");
+ generatePerlSection(cd,output,&cd->priStaticMethods,"private_static_methods");
+ generatePerlSection(cd,output,&cd->priStaticAttribs,"private_static_members");
+ generatePerlSection(cd,output,&cd->friends,"friend_methods");
+ generatePerlSection(cd,output,&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());
+
+#if 0
+ DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance);
+ if (!inheritanceGraph.isTrivial())
+ {
+ t << " <inheritancegraph>" << endl;
+ inheritanceGraph.writePerl(t);
+ t << " </inheritancegraph>" << endl;
+ }
+ DotClassGraph collaborationGraph(cd,DotClassGraph::Implementation);
+ if (!collaborationGraph.isTrivial())
+ {
+ t << " <collaborationgraph>" << endl;
+ collaborationGraph.writePerl(t);
+ t << " </collaborationgraph>" << endl;
+ }
+ t << " <location file=\""
+ << cd->getDefFileName() << "\" line=\""
+ << cd->getDefLine() << "\"";
+ if (cd->getStartBodyLine()!=-1)
+ {
+ t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
+ << cd->getEndBodyLine() << "\"";
+ }
+ t << "/>" << endl;
+#endif
+
+ output.closeHash();
+}
+
+static void generatePerlForNamespace(NamespaceDef *nd, PerlModOutput &output)
+{
+ // + contained class definitions
+ // + contained namespace definitions
+ // + member groups
+ // + normal members
+ // + brief desc
+ // + detailed desc
+ // + location
+ // - files containing (parts of) the namespace definition
+
+ if (nd->isReference()) return; // skip external references
+
+ output.openHash()
+ .addFieldQuoted("name", nd->name());
+
+ ClassSDict *cl = nd->classSDict;
+ if (cl)
+ {
+ output.openList("classes");
+ ClassSDict::Iterator cli(*cl);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ output.openHash()
+ .addFieldQuoted("name", cd->name())
+ .closeHash();
+ output.closeList();
+ }
+
+ NamespaceSDict *nl = nd->namespaceSDict;
+ if (nl)
+ {
+ output.openList("namespaces");
+ NamespaceSDict::Iterator nli(*nl);
+ NamespaceDef *nd;
+ for (nli.toFirst();(nd=nli.current());++nli)
+ output.openHash()
+ .addFieldQuoted("name", nd->name())
+ .closeHash();
+ output.closeList();
+ }
+
+ MemberGroupSDict::Iterator mgli(*nd->memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
+ generatePerlSection(nd,output,mg->members(),"user-defined",mg->header());
+
+ generatePerlSection(nd,output,&nd->decDefineMembers,"defines");
+ generatePerlSection(nd,output,&nd->decProtoMembers,"prototypes");
+ generatePerlSection(nd,output,&nd->decTypedefMembers,"typedefs");
+ generatePerlSection(nd,output,&nd->decEnumMembers,"enums");
+ generatePerlSection(nd,output,&nd->decFuncMembers,"functions");
+ generatePerlSection(nd,output,&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());
+
+ output.closeHash();
+}
+
+static void generatePerlForFile(FileDef *fd, PerlModOutput &output)
+{
+ // + includes files
+ // + includedby files
+ // - include graph
+ // - included by graph
+ // - contained class definitions
+ // - contained namespace definitions
+ // - member groups
+ // + normal members
+ // + brief desc
+ // + detailed desc
+ // - source code
+ // - location
+ // - number of lines
+
+ if (fd->isReference()) return;
+
+ output.openHash()
+ .addFieldQuoted("name", fd->name());
+
+ QListIterator<IncludeInfo> ili1(*fd->includeFileList());
+ IncludeInfo *inc;
+ output.openList("includes");
+ for (ili1.toFirst();(inc=ili1.current());++ili1)
+ {
+ output.openHash()
+ .addFieldQuoted("name", inc->includeName);
+ if (inc->fileDef && !inc->fileDef->isReference())
+ {
+ output.addFieldQuoted("ref", inc->fileDef->getOutputFileBase());
+ }
+ output.closeHash();
+ }
+ output.closeList();
+
+ QListIterator<IncludeInfo> ili2(*fd->includedByFileList());
+ output.openList("included_by");
+ for (ili2.toFirst();(inc=ili2.current());++ili2)
+ {
+ output.openHash()
+ .addFieldQuoted("name => ", inc->includeName);
+ if (inc->fileDef && !inc->fileDef->isReference())
+ {
+ output.addFieldQuoted("ref", inc->fileDef->getOutputFileBase());
+ }
+ output.closeHash();
+ }
+ output.closeList();
+
+ generatePerlSection(fd,output,&fd->decDefineMembers,"defines");
+ generatePerlSection(fd,output,&fd->decProtoMembers,"prototypes");
+ generatePerlSection(fd,output,&fd->decTypedefMembers,"typedefs");
+ generatePerlSection(fd,output,&fd->decEnumMembers,"enums");
+ generatePerlSection(fd,output,&fd->decFuncMembers,"functions");
+ generatePerlSection(fd,output,&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());
+
+ output.closeHash();
+}
+
+static void generatePerlForGroup(GroupDef *gd, PerlModOutput &output)
+{
+ // + members
+ // + member groups
+ // + files
+ // + classes
+ // + namespaces
+ // - packages
+ // + pages
+ // + child groups
+ // - examples
+ // + brief description
+ // + detailed description
+
+ if (gd->isReference()) return; // skip external references
+
+ output.openHash()
+ .addFieldQuoted("name", gd->name())
+ .addFieldQuoted("title", gd->groupTitle());
+
+ FileList *fl = gd->getFiles();
+ if (fl)
+ {
+ output.openList("files");
+ QListIterator<FileDef> fli(*fl);
+ FileDef *fd = fl->first();
+ for (fli.toFirst();(fd=fli.current());++fli)
+ output.openHash()
+ .addFieldQuoted("name", fd->name())
+ .closeHash();
+ output.closeList();
+ }
+
+ ClassSDict *cl = gd->getClasses();
+ if (cl)
+ {
+ output.openList("classes");
+ ClassSDict::Iterator cli(*cl);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ output.openHash()
+ .addFieldQuoted("name", cd->name())
+ .closeHash();
+ output.closeList();
+ }
+
+ NamespaceList *nl = gd->getNamespaces();
+ if (nl)
+ {
+ output.openList("namespaces");
+ NamespaceListIterator nli(*nl);
+ NamespaceDef *nd;
+ for (nli.toFirst();(nd=nli.current());++nli)
+ output.openHash()
+ .addFieldQuoted("name", nd->name())
+ .closeHash();
+ output.closeList();
+ }
+
+ PageSDict *pl = gd->getPages();
+ if (pl)
+ {
+ output.openList("pages");
+ PageSDict::Iterator pli(*pl);
+ PageInfo *pi;
+ for (pli.toFirst();(pi=pli.current());++pli)
+ output.openHash()
+ .addFieldQuoted("title", pi->title)
+ .closeHash();
+ output.closeList();
+ }
+
+ GroupList *gl = gd->getSubGroups();
+ if (gl)
+ {
+ output.openList("groups");
+ GroupListIterator gli(*gl);
+ GroupDef *sgd;
+ for (gli.toFirst();(sgd=gli.current());++gli)
+ output.openHash()
+ .addFieldQuoted("title", gd->groupTitle())
+ .closeHash();
+ output.closeList();
+ }
+
+ MemberGroupSDict::Iterator mgli(*gd->memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
+ generatePerlSection(gd,output,mg->members(),"user-defined",mg->header());
+
+ generatePerlSection(gd,output,&gd->decDefineMembers,"defines");
+ generatePerlSection(gd,output,&gd->decProtoMembers,"prototypes");
+ generatePerlSection(gd,output,&gd->decTypedefMembers,"typedefs");
+ generatePerlSection(gd,output,&gd->decEnumMembers,"enums");
+ generatePerlSection(gd,output,&gd->decFuncMembers,"functions");
+ generatePerlSection(gd,output,&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());
+
+ output.closeHash();
+}
+
+static void generatePerlForPage(PageInfo *pi, PerlModOutput &output)
+{
+ // + name
+ // + title
+ // + documentation
+
+ if (pi->isReference()) return;
+
+ output.openHash()
+ .addFieldQuoted("name", pi->name);
+
+ SectionInfo *si = Doxygen::sectionDict.find(pi->name);
+ if (si)
+ output.addFieldQuoted("title", si->title);
+
+ addPerlModDocBlock(output,"detailed",pi->defFileName,pi->defLine,0,0,pi->doc);
+}
+
+void generatePerlMod()
+{
+ // + classes
+ // + namespaces
+ // + files
+ // - packages
+ // + groups
+ // + related pages
+ // - examples
+
+ QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
+ if (outputDirectory.isEmpty())
+ {
+ outputDirectory=QDir::currentDirPath();
+ }
+ else
+ {
+ QDir dir(outputDirectory);
+ if (!dir.exists())
+ {
+ dir.setPath(QDir::currentDirPath());
+ if (!dir.mkdir(outputDirectory))
+ {
+ err("Error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+ "exist and cannot be created\n",outputDirectory.data());
+ exit(1);
+ }
+ else if (!Config_getBool("QUIET"))
+ {
+ err("Notice: Output directory `%s' does not exist. "
+ "I have created it for you.\n", outputDirectory.data());
+ }
+ dir.cd(outputDirectory);
+ }
+ outputDirectory=dir.absPath();
+ }
+
+ QDir dir(outputDirectory);
+ if (!dir.exists())
+ {
+ dir.setPath(QDir::currentDirPath());
+ if (!dir.mkdir(outputDirectory))
+ {
+ err("Cannot create directory %s\n",outputDirectory.data());
+ return;
+ }
+ }
+
+ QCString fileName=outputDirectory+"/DoxyDocs.pm";
+ QFile f(fileName);
+ if (!f.open(IO_WriteOnly))
+ {
+ err("Cannot open file %s for writing!\n",fileName.data());
+ return;
+ }
+
+ 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)
+ generatePerlForClass(cd,output);
+ output.closeList();
+
+ output.openList("namespaces");
+ NamespaceSDict::Iterator nli(Doxygen::namespaceSDict);
+ NamespaceDef *nd;
+ for (nli.toFirst();(nd=nli.current());++nli)
+ generatePerlForNamespace(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)
+ generatePerlForFile(fd,output);
+ }
+ output.closeList();
+
+ output.openList("groups");
+ GroupSDict::Iterator gli(Doxygen::groupSDict);
+ GroupDef *gd;
+ for (;(gd=gli.current());++gli)
+ generatePerlForGroup(gd,output);
+ output.closeList();
+
+ output.openList("pages");
+ PageSDict::Iterator pdi(*Doxygen::pageSDict);
+ PageInfo *pi=0;
+ for (pdi.toFirst();(pi=pdi.current());++pdi)
+ generatePerlForPage(pi,output);
+ if (Doxygen::mainPage)
+ generatePerlForPage(Doxygen::mainPage,output);
+ output.closeList();
+
+ output.closeHash().add(";\n1;\n");
+}
+
+// Local Variables:
+// c-basic-offset: 2
+// End:
diff --git a/src/perlmodgen.h b/src/perlmodgen.h
new file mode 100644
index 0000000..a60042b
--- /dev/null
+++ b/src/perlmodgen.h
@@ -0,0 +1,20 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ */
+
+#ifndef PERLMODGEN_H
+#define PERLMODGEN_H
+
+void generatePerlMod();
+
+#endif
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 55a55ad..7d7c102 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -592,6 +592,16 @@ class PrintDocVisitor : public DocVisitor
indent_post();
printf("</copy>\n");
}
+ void visitPre(DocText *)
+ {
+ indent_pre();
+ printf("<text>\n");
+ }
+ void visitPost(DocText *)
+ {
+ indent_post();
+ printf("</text>\n");
+ }
private:
// helper functions
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index d9b16a4..a072318 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -271,7 +271,7 @@ void RTFDocVisitor::visit(DocVerbatim *s)
m_t << "{" << endl;
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
- parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
+ parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile());
m_t << "\\par" << endl;
m_t << "}" << endl;
break;
@@ -321,7 +321,7 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "{" << endl;
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
- parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
+ parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile());
m_t << "\\par" << endl;
m_t << "}" << endl;
break;
@@ -353,7 +353,7 @@ void RTFDocVisitor::visit(DocIncOperator *op)
}
if (op->type()!=DocIncOperator::Skip)
{
- parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
+ parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile());
}
if (op->isLast())
{
@@ -989,6 +989,14 @@ void RTFDocVisitor::visitPost(DocCopy *)
{
}
+void RTFDocVisitor::visitPre(DocText *)
+{
+}
+
+void RTFDocVisitor::visitPost(DocText *)
+{
+}
+
static char* getMultiByte(int c)
{
static char s[10];
diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h
index f0b2b20..119eff9 100644
--- a/src/rtfdocvisitor.h
+++ b/src/rtfdocvisitor.h
@@ -122,6 +122,8 @@ class RTFDocVisitor : public DocVisitor
void visitPost(DocInternalRef *);
void visitPre(DocCopy *);
void visitPost(DocCopy *);
+ void visitPre(DocText *);
+ void visitPost(DocText *);
private:
diff --git a/src/scanner.l b/src/scanner.l
index 5a5d9c0..59c656c 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -2298,6 +2298,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN( ReadFuncArgType );
}
<CopyArgCommentLine>[^\\\@\n]+ { fullArgString+=yytext; }
+<CopyArgCommentLine>. { fullArgString+=*yytext; }
<CopyArgComment>\n { fullArgString+=*yytext; yyLineNr++; }
<CopyArgComment>. { fullArgString+=*yytext; }
<ReadTempArgs>"<" {
@@ -3969,6 +3970,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<ClassDoc,Doc>{B}*{CMD}("brief"|"short") {
lastBriefContext=YY_START;
+ current->briefFile = yyFileName;
+ current->briefLine = yyLineNr;
BEGIN( ClassDocBrief );
}
<ClassDoc>{B}*"\\inherit"{B}+ { BEGIN( DocBaseClass ); }
@@ -4306,6 +4309,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
}
}
+<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc,CopyArgComment>{CMD}{CMD}[a-z_A-Z][a-z_A-Z0-9]* { /* escaped command */
+ if (YY_START==CopyArgComment)
+ fullArgString+=yytext;
+ else
+ current->doc+=yytext;
+ }
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc,CopyArgComment>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
bool handled=FALSE;
if ( useOverrideCommands)
@@ -4370,6 +4379,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->brief+=yytext;
}
<LineDoc,AfterDocLine,CopyArgCommentLine>{CMD}("brief"|"short") {}
+<JavaDoc,LineDoc,ClassDocBrief,AfterDocBrief,AfterDocLine,CopyArgCommentLine>{CMD}{CMD}[a-z_A-Z][a-z_A-Z0-9]* { /* escaped command */
+ if (YY_START==CopyArgCommentLine)
+ fullArgString+=yytext;
+ else
+ current->brief+=yytext;
+ }
<JavaDoc,LineDoc,ClassDocBrief,AfterDocBrief,AfterDocLine,CopyArgCommentLine>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
QCString *pValue=Doxygen::aliasDict[yytext+1];
if (pValue)
diff --git a/src/util.cpp b/src/util.cpp
index 979911a..242b566 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -31,7 +31,6 @@
#include "classdef.h"
#include "filedef.h"
#include "doxygen.h"
-#include "doc.h"
#include "outputlist.h"
#include "defargs.h"
#include "language.h"
@@ -853,7 +852,7 @@ void writeExample(OutputList &ol,ExampleSDict *ed)
while ((newIndex=marker.match(exampleLine,index,&matchLen))!=-1)
{
bool ok;
- parseText(ol,exampleLine.mid(index,newIndex-index));
+ ol.parseText(exampleLine.mid(index,newIndex-index));
uint entryIndex = exampleLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
Example *e=ed->at(entryIndex);
if (ok && e)
@@ -879,7 +878,7 @@ void writeExample(OutputList &ol,ExampleSDict *ed)
}
index=newIndex+matchLen;
}
- parseText(ol,exampleLine.right(exampleLine.length()-index));
+ ol.parseText(exampleLine.right(exampleLine.length()-index));
ol.writeString(".");
}
@@ -2292,6 +2291,8 @@ bool resolveRef(/* in */ const char *scName,
QCString tsName = name;
bool memberScopeFirst = tsName.find('#')!=-1;
QCString fullName = substitute(tsName,"#","::");
+ fullName = substitute(fullName,".","::");
+
int scopePos=fullName.findRev("::");
int bracePos=fullName.findRev('('); // reverse is needed for operator()(...)
@@ -2309,10 +2310,10 @@ bool resolveRef(/* in */ const char *scName,
return FALSE;
}
- //printf("scName=%s tmpName=%s\n",scName,tmpName.data());
+ //printf("scName=%s name=%s\n",scName,fullName.data());
// check if this is a class or namespace reference
- if (scName!=fullName && getScopeDefs(scName,name,cd,nd))
+ if (scName!=fullName && getScopeDefs(scName,fullName,cd,nd))
{
if (cd) // scope matches that of a class
{
@@ -2425,6 +2426,7 @@ bool generateRef(OutputDocInterface &od,const char *scName,
if (linkText.isEmpty())
{
linkText=substitute(name,"#","::");
+ linkText=substitute(linkText,".","::");
// strip :: prefix if present
if (linkText.at(0)==':' && linkText.at(1)==':')
{
@@ -2550,6 +2552,7 @@ bool generateLink(OutputDocInterface &od,const char *clName,
if (linkText.isEmpty())
{
linkText=substitute(lr,"#","::");
+ linkText=substitute(linkText,".","::");
// strip :: prefix if present
if (linkText.at(0)==':' && linkText.at(1)==':')
{
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 43fda0b..e6cbd64 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -148,7 +148,7 @@ void XmlDocVisitor::visit(DocVerbatim *s)
{
case DocVerbatim::Code: // fall though
m_t << "<programlisting>";
- parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
+ parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile());
m_t << "</programlisting>";
break;
case DocVerbatim::Verbatim:
@@ -182,7 +182,7 @@ void XmlDocVisitor::visit(DocInclude *inc)
{
case DocInclude::Include:
m_t << "<programlisting>";
- parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
+ parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile());
m_t << "</programlisting>";
break;
case DocInclude::DontInclude:
@@ -211,7 +211,7 @@ void XmlDocVisitor::visit(DocIncOperator *op)
}
if (op->type()!=DocIncOperator::Skip)
{
- parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
+ parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile());
}
if (op->isLast())
{
@@ -302,7 +302,7 @@ void XmlDocVisitor::visitPost(DocRoot *)
void XmlDocVisitor::visitPre(DocSimpleSect *s)
{
- m_t << "<simplesect kind=\">";
+ m_t << "<simplesect kind=\"";
switch(s->type())
{
case DocSimpleSect::See:
@@ -701,6 +701,14 @@ void XmlDocVisitor::visitPost(DocCopy *)
{
}
+void XmlDocVisitor::visitPre(DocText *)
+{
+}
+
+void XmlDocVisitor::visitPost(DocText *)
+{
+}
+
void XmlDocVisitor::filter(const char *str)
{
if (str==0) return;
diff --git a/src/xmldocvisitor.h b/src/xmldocvisitor.h
index 83db6c3..045f868 100644
--- a/src/xmldocvisitor.h
+++ b/src/xmldocvisitor.h
@@ -122,6 +122,8 @@ class XmlDocVisitor : public DocVisitor
void visitPost(DocInternalRef *);
void visitPre(DocCopy *);
void visitPost(DocCopy *);
+ void visitPre(DocText *);
+ void visitPost(DocText *);
private:
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index cabc130..081e671 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -27,7 +27,6 @@
#include "util.h"
#include "defargs.h"
#include "outputgen.h"
-#include "doc.h"
#include "dot.h"
#include "code.h"
#include "page.h"
@@ -1201,7 +1200,7 @@ static void writeXMLDocBlock(QTextStream &t,
QCString stext = text.stripWhiteSpace();
if (stext.isEmpty()) return;
// convert the documentation string into an abstract syntax tree
- DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,stext);
+ DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,stext,FALSE);
// create a code generator
XMLCodeGenerator *xmlCodeGen = new XMLCodeGenerator(t);
// create a parse tree visitor for XML
@@ -1739,25 +1738,25 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
}
generateXMLSection(cd,ti,t,&cd->pubTypes,"public-type");
- generateXMLSection(cd,ti,t,&cd->pubMembers,"public-func");
+ generateXMLSection(cd,ti,t,&cd->pubMethods,"public-func");
generateXMLSection(cd,ti,t,&cd->pubAttribs,"public-attrib");
generateXMLSection(cd,ti,t,&cd->pubSlots,"public-slot");
generateXMLSection(cd,ti,t,&cd->signals,"signal");
generateXMLSection(cd,ti,t,&cd->dcopMethods,"dcop-func");
generateXMLSection(cd,ti,t,&cd->properties,"property");
- generateXMLSection(cd,ti,t,&cd->pubStaticMembers,"public-static-func");
+ generateXMLSection(cd,ti,t,&cd->pubStaticMethods,"public-static-func");
generateXMLSection(cd,ti,t,&cd->pubStaticAttribs,"public-static-attrib");
generateXMLSection(cd,ti,t,&cd->proTypes,"protected-type");
- generateXMLSection(cd,ti,t,&cd->proMembers,"protected-func");
+ generateXMLSection(cd,ti,t,&cd->proMethods,"protected-func");
generateXMLSection(cd,ti,t,&cd->proAttribs,"protected-attrib");
generateXMLSection(cd,ti,t,&cd->proSlots,"protected-slot");
- generateXMLSection(cd,ti,t,&cd->proStaticMembers,"protected-static-func");
+ generateXMLSection(cd,ti,t,&cd->proStaticMethods,"protected-static-func");
generateXMLSection(cd,ti,t,&cd->proStaticAttribs,"protected-static-attrib");
generateXMLSection(cd,ti,t,&cd->priTypes,"private-type");
- generateXMLSection(cd,ti,t,&cd->priMembers,"private-func");
+ generateXMLSection(cd,ti,t,&cd->priMethods,"private-func");
generateXMLSection(cd,ti,t,&cd->priAttribs,"private-attrib");
generateXMLSection(cd,ti,t,&cd->priSlots,"private-slot");
- generateXMLSection(cd,ti,t,&cd->priStaticMembers,"private-static-func");
+ generateXMLSection(cd,ti,t,&cd->priStaticMethods,"private-static-func");
generateXMLSection(cd,ti,t,&cd->priStaticAttribs,"private-static-attrib");
generateXMLSection(cd,ti,t,&cd->friends,"friend");
generateXMLSection(cd,ti,t,&cd->related,"related");