summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cite.cpp4
-rw-r--r--src/commentscan.l4
-rw-r--r--src/config.xml10
-rw-r--r--src/context.cpp42
-rw-r--r--src/definition.cpp16
-rw-r--r--src/docbookgen.cpp155
-rw-r--r--src/docbookvisitor.cpp121
-rw-r--r--src/docparser.cpp15
-rw-r--r--src/docparser.h2
-rw-r--r--src/doctokenizer.l4
-rw-r--r--src/dot.cpp211
-rw-r--r--src/dot.h16
-rw-r--r--src/doxygen.cpp24
-rw-r--r--src/entry.h4
-rw-r--r--src/htmldocvisitor.cpp2
-rw-r--r--src/htmlgen.cpp10
-rw-r--r--src/latexdocvisitor.cpp2
-rw-r--r--src/latexgen.cpp10
-rw-r--r--src/memberdef.cpp46
-rw-r--r--src/memberdef.h4
-rw-r--r--src/pre.l5
-rw-r--r--src/printdocvisitor.h7
-rw-r--r--src/rtfdocvisitor.cpp2
-rw-r--r--src/rtfgen.cpp8
-rw-r--r--src/scanner.l4
-rw-r--r--src/tclscanner.l326
-rw-r--r--src/xmldocvisitor.cpp7
-rw-r--r--src/xmlgen.cpp16
28 files changed, 802 insertions, 275 deletions
diff --git a/src/cite.cpp b/src/cite.cpp
index a3056ba..f0580ed 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -58,6 +58,10 @@ static QCString getListOfBibFiles(const QCString &sep,bool namesOnly)
{
bibFile = bibFile.left(bibFile.length()-4);
}
+ else
+ {
+ if (!namesOnly && bibFile.right(4)!=".bib") bibFile += ".bib";
+ }
if ((i=bibFile.findRev('/'))!=-1) // strip path
{
bibFile = bibFile.mid(i+1);
diff --git a/src/commentscan.l b/src/commentscan.l
index bd20bf0..a42f6ce 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -914,7 +914,9 @@ FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+@&#]
FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"")
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
-CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
+CITESCHAR [a-z_A-Z\x80-\xFF]
+CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
+CITEID {CITESCHAR}*{CITEECHAR}+("."{CITESCHAR}*{CITEECHAR}+)*
SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID})
TMPLSPEC "<"{BN}*[^>]+{BN}*">"
diff --git a/src/config.xml b/src/config.xml
index f228ca4..eed486e 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -2763,6 +2763,16 @@ front of it.
]]>
</docs>
</option>
+ <option type='bool' id='DOCBOOK_PROGRAMLISTING' defval='0' depends='GENERATE_DOCBOOK'>
+ <docs>
+<![CDATA[
+ If the \c DOCBOOK_PROGRAMLISTING tag is set to \c YES doxygen will
+ include the program listings (including syntax highlighting
+ and cross-referencing information) to the DOCBOOK output. Note that
+ enabling this will significantly increase the size of the DOCBOOK output.
+]]>
+ </docs>
+ </option>
</group>
<group name='AutoGen' docs='Configuration options for the AutoGen Definitions output'>
<option type='bool' id='GENERATE_AUTOGEN_DEF' defval='0'>
diff --git a/src/context.cpp b/src/context.cpp
index 850f8e8..541cb74 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -1471,7 +1471,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
DotClassGraph *cg = getClassGraph();
FTextStream t(&result);
- cg->writeGraph(t,BITMAP,
+ cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,TRUE,g_globals.dynSectionId
@@ -1516,7 +1516,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
DotClassGraph *cg = getCollaborationGraph();
FTextStream t(&result);
- cg->writeGraph(t,BITMAP,
+ cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,TRUE,g_globals.dynSectionId
@@ -2197,7 +2197,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
DotInclDepGraph *cg = getIncludeGraph();
FTextStream t(&result);
- cg->writeGraph(t,BITMAP,
+ cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
g_globals.outputDir+portable_pathSeparator()+m_fileDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,g_globals.dynSectionId
@@ -2228,7 +2228,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
DotInclDepGraph *cg = getIncludedByGraph();
FTextStream t(&result);
- cg->writeGraph(t,BITMAP,
+ cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
g_globals.outputDir+portable_pathSeparator()+m_fileDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,g_globals.dynSectionId
@@ -2766,7 +2766,11 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
addProperty("isExplicit", this,&Private::isExplicit);
addProperty("isMutable", this,&Private::isMutable);
addProperty("isGettable", this,&Private::isGettable);
+ addProperty("isPrivateGettable", this,&Private::isPrivateGettable);
+ addProperty("isProtectedGettable", this,&Private::isProtectedGettable);
addProperty("isSettable", this,&Private::isSettable);
+ addProperty("isPrivateSettable", this,&Private::isPrivateSettable);
+ addProperty("isProtectedSettable", this,&Private::isProtectedSettable);
addProperty("isReadable", this,&Private::isReadable);
addProperty("isWritable", this,&Private::isWritable);
addProperty("isAddable", this,&Private::isAddable);
@@ -2855,8 +2859,12 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
m_cache.propertyAttrs.reset(TemplateList::alloc());
if (md && md->isProperty())
{
- if (md->isGettable()) m_cache.propertyAttrs->append("get");
- if (md->isSettable()) m_cache.propertyAttrs->append("set");
+ if (md->isGettable()) m_cache.propertyAttrs->append("get");
+ if (md->isPrivateGettable()) m_cache.propertyAttrs->append("private get");
+ if (md->isProtectedGettable()) m_cache.propertyAttrs->append("protected get");
+ if (md->isSettable()) m_cache.propertyAttrs->append("set");
+ if (md->isPrivateSettable()) m_cache.propertyAttrs->append("private set");
+ if (md->isProtectedSettable()) m_cache.propertyAttrs->append("protected set");
}
m_cache.eventAttrs.reset(TemplateList::alloc());
if (md && md->isEvent())
@@ -2948,12 +2956,28 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
}
TemplateVariant isGettable() const
{
- return m_memberDef->isSettable();
+ return m_memberDef->isGettable();
+ }
+ TemplateVariant isPrivateGettable() const
+ {
+ return m_memberDef->isPrivateGettable();
+ }
+ TemplateVariant isProtectedGettable() const
+ {
+ return m_memberDef->isProtectedGettable();
}
TemplateVariant isSettable() const
{
return m_memberDef->isSettable();
}
+ TemplateVariant isPrivateSettable() const
+ {
+ return m_memberDef->isPrivateSettable();
+ }
+ TemplateVariant isProtectedSettable() const
+ {
+ return m_memberDef->isProtectedSettable();
+ }
TemplateVariant isReadable() const
{
return m_memberDef->isReadable();
@@ -3634,7 +3658,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
DotCallGraph *cg = getCallGraph();
QGString result;
FTextStream t(&result);
- cg->writeGraph(t,BITMAP,
+ cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,g_globals.dynSectionId
@@ -3674,7 +3698,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
DotCallGraph *cg = getCallerGraph();
QGString result;
FTextStream t(&result);
- cg->writeGraph(t,BITMAP,
+ cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,g_globals.dynSectionId
diff --git a/src/definition.cpp b/src/definition.cpp
index c4b9f77..8603536 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -1362,13 +1362,21 @@ QCString Definition::qualifiedName() const
return m_impl->qualifiedName;
};
-void Definition::setOuterScope(Definition *d)
+void Definition::setOuterScope(Definition *d)
{
//printf("%s::setOuterScope(%s)\n",name().data(),d?d->name().data():"<none>");
- if (m_impl->outerScope!=d)
- {
+ Definition *p = m_impl->outerScope;
+ bool found=false;
+ // make sure that we are not creating a recursive scope relation.
+ while (p && !found)
+ {
+ found = (p==d);
+ p = p->m_impl->outerScope;
+ }
+ if (!found)
+ {
m_impl->qualifiedName.resize(0); // flush cached scope name
- m_impl->outerScope = d;
+ m_impl->outerScope = d;
}
m_impl->hidden = m_impl->hidden || d->isHidden();
}
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index 2011333..cabb7ad 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -210,7 +210,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
{
m_t << "<link linkend=\"" << m_refId << "\">";
}
- m_t << m_lineNumber;
+ m_t << m_lineNumber << " ";
if (!m_refId.isEmpty())
{
m_t << "</link>";
@@ -228,10 +228,10 @@ class DocbookCodeGenerator : public CodeOutputInterface
m_external.resize(0);
m_insideCodeLine=FALSE;
}
- void startFontClass(const char * /*colorClass*/)
+ void startFontClass(const char *colorClass)
{
Docbook_DB(("(startFontClass)\n"));
- m_t << "<emphasis>"; // non DocBook
+ m_t << "<emphasis class=\"" << colorClass << "\">";
m_insideSpecialHL=TRUE;
}
void endFontClass()
@@ -453,7 +453,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
if (md->memberType()==MemberType_Enumeration)
{
MemberList *enumFields = md->enumFieldList();
- t << " <para>" << memType << " <link linkend=\"";
+ t << " <para><literallayout>" << memType << " <link linkend=\"";
if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup)
{
t << md->getGroupDef()->getOutputFileBase();
@@ -467,25 +467,25 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
{
MemberListIterator emli(*enumFields);
MemberDef *emd;
- t << "{";
+ t << " {" << endl;
int cnt=0;
for (emli.toFirst();(emd=emli.current());++emli)
{
if (cnt!=0)
{
- t << ", ";
+ t << "," << endl;
}
t << "<link linkend=\"" << memberOutputFileBase(emd) << "_1" << emd->anchor() << "\">";
writeDocbookString(t,emd->name());
t << "</link>";
if (!emd->initializer().isEmpty())
{
- t << "=";
writeDocbookString(t,emd->initializer());
}
cnt++;
}
- t << "}";
+ t << endl << "}";
+ t << "</literallayout>" << endl;
}
}
else if (md->memberType()==MemberType_Define)
@@ -608,10 +608,10 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
t << " </listitem>" << endl;
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
- }
- else
+ }
+ else
{
- if (md->memberType()==MemberType_Enumeration)
+ if (md->memberType()==MemberType_Enumeration)
{
MemberList *enumFields = md->enumFieldList();
t << " <section xml:id=\"";
@@ -653,20 +653,19 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
t << " </formalpara>" << endl;
t << " <para>";
t << "Definition at line " << md->getDefLine() << " of file " << stripPath(md->getDefFileName()) << endl;
- t << " <programlisting>" << endl;
+ t << " <computeroutput><literallayout>" << endl;
t << "{" << endl;
for (emli.toFirst();(emd=emli.current());++emli)
{
writeDocbookString(t,emd->name());
if (!emd->initializer().isEmpty())
{
- t << "=";
writeDocbookString(t,emd->initializer());
}
t << ", " << endl;
}
t << "}" << convertToXML(md->name()) << ";" << endl;
- t << " </programlisting>" << endl;
+ t << " </literallayout></computeroutput>" << endl;
t << " </para>" << endl;
t << " </section>" << endl;
}
@@ -1127,6 +1126,7 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti)
QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT");
QCString fileName=outputDirectory+"/"+ classOutputFileBase(cd)+".xml";
+ QCString relPath = relativePathToRoot(fileName);
QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
@@ -1181,6 +1181,20 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti)
}
}
+ if (Config_getBool("HAVE_DOT") && (Config_getBool("CLASS_DIAGRAMS") || Config_getBool("CLASS_GRAPH")))
+ {
+ t << "<para>Inheritance diagram for " << convertToXML(cd->name()) << "</para>" << endl;
+ DotClassGraph inheritanceGraph(cd,DotNode::Inheritance);
+ inheritanceGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,TRUE,FALSE);
+ }
+
+ if (Config_getBool("HAVE_DOT") && Config_getBool("COLLABORATION_GRAPH"))
+ {
+ t << "<para>Collaboration diagram for " << convertToXML(cd->name()) << "</para>" << endl;
+ DotClassGraph collaborationGraph(cd,DotNode::Collaboration);
+ collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,TRUE,FALSE);
+ }
+
writeInnerClasses(cd->getClassSDict(),t);
writeTemplateList(cd,t);
@@ -1369,6 +1383,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti)
QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT");
QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml";
+ QCString relPath = relativePathToRoot(fileName);
QFile f(fileName);
if (!f.open(IO_WriteOnly))
@@ -1413,6 +1428,21 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti)
t << "</programlisting>" << endl;
}
}
+ if (Config_getBool("HAVE_DOT"))
+ {
+ if (Config_getBool("INCLUDE_GRAPH"))
+ {
+ t << "<para>Include dependency diagram for " << convertToXML(fd->name()) << "</para>" << endl;
+ DotInclDepGraph idepGraph(fd, FALSE);
+ idepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,FALSE);
+ }
+ if (Config_getBool("INCLUDED_BY_GRAPH"))
+ {
+ t << "<para>Included by dependency diagram for " << convertToXML(fd->name()) << "</para>" << endl;
+ DotInclDepGraph ibdepGraph(fd, TRUE);
+ ibdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,FALSE);
+ }
+ }
if (fd->getClassSDict())
{
@@ -1448,20 +1478,24 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti)
t << " <title>Detailed Description</title>" << endl;
writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
writeDocbookDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation());
- t << " <para>Definition in file " << fd->getDefFileName() << "</para>" << endl;
+ if (Config_getBool("FULL_PATH_NAMES"))
+ {
+ t << " <para>Definition in file " << fd->getDefFileName() << "</para>" << endl;
+ }
+ else
+ {
+ t << " <para>Definition in file " << stripPath(fd->getDefFileName()) << "</para>" << endl;
+ }
t << " </simplesect>" << endl;
- /*// TODO: Handling of Program listing for Docbook to be implemented
- if (Config_getBool("DOCBOOK_PROGRAMLISTING"))
- {
- t << " <programlisting>" << endl;
+ if (Config_getBool("DOCBOOK_PROGRAMLISTING"))
+ {
+ t << " <literallayout><computeroutput>" << endl;
writeDocbookCodeBlock(t,fd);
- t << " </programlisting>" << endl;
- }
- */
+ t << " </computeroutput></literallayout>" << endl;
+ }
t << "</section>" << endl;
-
}
static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti)
@@ -1489,6 +1523,7 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti)
QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT");
QCString fileName=outputDirectory+"/"+gd->getOutputFileBase()+".xml";
+ QCString relPath = relativePathToRoot(fileName);
QFile f(fileName);
if (!f.open(IO_WriteOnly))
@@ -1503,6 +1538,13 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti)
t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl;
+ if (Config_getBool("GROUP_GRAPHS") && Config_getBool("HAVE_DOT"))
+ {
+ t << "<para>Collaboration diagram for " << convertToXML(gd->groupTitle()) << "</para>" << endl;
+ DotGroupCollaboration collaborationGraph(gd);
+ collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,FALSE);
+ }
+
if (gd->briefDescription())
{
t << " <simplesect>" << endl;
@@ -1570,6 +1612,8 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti)
QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT");
QCString fileName=outputDirectory+"/"+dd->getOutputFileBase()+".xml";
QFile f(fileName);
+ QCString relPath = relativePathToRoot(fileName);
+
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
@@ -1584,6 +1628,12 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti)
writeDocbookString(t, dd->displayName());
t << " Directory Reference";
t << "</title>" << endl;
+ if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT"))
+ {
+ t << "<para>Directory dependency diagram for " << convertToXML(dd->displayName()) << "</para>" << endl;
+ DotDirDeps dirdepGraph(dd);
+ dirdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,FALSE);
+ }
writeInnerDirs(&dd->subDirs(),t);
writeInnerFiles(dd->getFiles(),t);
@@ -1628,7 +1678,13 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample)
FTextStream t(&f);
//t.setEncoding(FTextStream::UnicodeUTF8);
- if (!pd->hasParentPage())
+ if(isExample)
+ {
+ QCString fileDocbook=pageName+".xml";
+ ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl;
+ }
+
+ if (!pd->hasParentPage() && !isExample)
{
QCString fileDocbook=pageName+".xml";
//Add the file Documentation info to index file
@@ -1654,7 +1710,7 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample)
if (isExample)
{
writeDocbookDocBlock(t,pd->docFile(),pd->docLine(),pd,0,
- pd->documentation()+"\n&lt;include "+pd->name()+"&gt;");
+ pd->documentation()+"\n\\include "+pd->name());
}
else
{
@@ -1663,7 +1719,7 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample)
}
writeInnerPages(pd->getSubPages(),t);
- if (!pd->hasParentPage())
+ if (!pd->hasParentPage() && !isExample)
{
t << endl << "</chapter>" << endl;
}
@@ -1744,7 +1800,6 @@ void generateDocbook()
t << " </info>" << endl;
// NAMESPACE DOCUMENTATION
-
NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
NamespaceDef *nd;
@@ -1838,35 +1893,39 @@ void generateDocbook()
// FILE DOCUMENTATION
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
-
- //File Documentation index header
- if (fnli.toFirst())
+ static bool showFiles = Config_getBool("SHOW_FILES");
+ if (showFiles)
{
- t << " <chapter>" << endl;
- t << " <title>File Documentation</title>" << endl;
- }
+ FileNameListIterator fnli(*Doxygen::inputNameList);
+ FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
+ //File Documentation index header
+ if (fnli.toFirst())
{
- msg("Generating Docbook output for file %s\n",fd->name().data());
- generateDocbookForFile(fd,t);
+ t << " <chapter>" << endl;
+ t << " <title>File Documentation</title>" << endl;
}
- }
- //File Documentation index footer
- if (fnli.toFirst())
- {
- t << " </chapter>" << endl;
+ for (;(fn=fnli.current());++fnli)
+ {
+ FileNameIterator fni(*fn);
+ FileDef *fd;
+ for (;(fd=fni.current());++fni)
+ {
+ msg("Generating Docbook output for file %s\n",fd->name().data());
+ generateDocbookForFile(fd,t);
+ }
+ }
+
+ //File Documentation index footer
+ if (fnli.toFirst())
+ {
+ t << " </chapter>" << endl;
+ }
}
// DIRECTORY DOCUMENTATION
-
+ if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT"))
{
DirDef *dir;
DirSDict::Iterator sdi(*Doxygen::directories);
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index 6867dce..5d7aafd 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -160,16 +160,16 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
switch(s->type())
{
case DocVerbatim::Code: // fall though
- m_t << "<programlisting>";
+ m_t << "<literallayout><computeroutput>";
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,s->context(),s->text(),langExt,
s->isExample(),s->exampleFile());
- m_t << "</programlisting>";
+ m_t << "</computeroutput></literallayout>";
break;
case DocVerbatim::Verbatim:
- m_t << "<programlisting><literallayout>";
+ m_t << "<literallayout>";
filter(s->text());
- m_t << "</literallayout></programlisting>";
+ m_t << "</literallayout>";
break;
case DocVerbatim::HtmlOnly:
break;
@@ -189,8 +189,10 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
{
static int dotindex = 1;
QCString baseName(4096);
+ QCString name;
QCString stext = s->text();
m_t << "<para>" << endl;
+ name.sprintf("%s%d", "dot_inline_dotgraph_", dotindex);
baseName.sprintf("%s%d",
(Config_getString("DOCBOOK_OUTPUT")+"/inline_dotgraph_").data(),
dotindex++
@@ -203,7 +205,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
file.writeBlock( stext, stext.length() );
file.close();
m_t << " <figure>" << endl;
- m_t << " <title></title>" << endl;
+ m_t << " <title>" << name << "</title>" << endl;
m_t << " <mediaobject>" << endl;
m_t << " <imageobject>" << endl;
writeDotFile(baseName);
@@ -216,8 +218,10 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
case DocVerbatim::Msc:
static int mscindex = 1;
QCString baseName(4096);
+ QCString name;
QCString stext = s->text();
m_t << "<para>" << endl;
+ name.sprintf("%s%d", "msc_inline_mscgraph_", mscindex);
baseName.sprintf("%s%d",
(Config_getString("DOCBOOK_OUTPUT")+"/inline_mscgraph_").data(),
mscindex++
@@ -233,7 +237,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
file.writeBlock( text, text.length() );
file.close();
m_t << " <figure>" << endl;
- m_t << " <title></title>" << endl;
+ m_t << " <title>" << name << "</title>" << endl;
m_t << " <mediaobject>" << endl;
m_t << " <imageobject>" << endl;
writeMscFile(baseName);
@@ -259,7 +263,7 @@ void DocbookDocVisitor::visit(DocInclude *inc)
{
case DocInclude::IncWithLines:
{
- m_t << "<programlisting>";
+ m_t << "<literallayout><computeroutput>";
QFileInfo cfi( inc->file() );
FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
@@ -268,18 +272,18 @@ void DocbookDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(), &fd);
- m_t << "</programlisting>";
+ m_t << "</computeroutput></literallayout>";
}
break;
case DocInclude::Include:
- m_t << "<programlisting>";
+ m_t << "<literallayout><computeroutput>";
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile());
- m_t << "</programlisting>";
+ m_t << "</computeroutput></literallayout>";
break;
case DocInclude::DontInclude:
break;
@@ -293,7 +297,7 @@ void DocbookDocVisitor::visit(DocInclude *inc)
m_t << "</verbatim>";
break;
case DocInclude::Snippet:
- m_t << "<programlisting>";
+ m_t << "<literallayout><computeroutput>";
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -302,7 +306,7 @@ void DocbookDocVisitor::visit(DocInclude *inc)
inc->isExample(),
inc->exampleFile()
);
- m_t << "</programlisting>";
+ m_t << "</computeroutput></literallayout>";
break;
}
}
@@ -361,7 +365,7 @@ void DocbookDocVisitor::visit(DocIndexEntry *ie)
void DocbookDocVisitor::visit(DocSimpleSectSep *)
{
- m_t << "<simplesectsep/>";
+ m_t << "<simplesect/>";
}
void DocbookDocVisitor::visit(DocCite *cite)
@@ -818,14 +822,14 @@ void DocbookDocVisitor::visitPost(DocHtmlHeader *)
void DocbookDocVisitor::visitPre(DocImage *img)
{
- if (img->type()==DocImage::Latex)
+ if (img->type()==DocImage::DocBook)
{
if (m_hide) return;
m_t << endl;
m_t << " <figure>" << endl;
m_t << " <title>";
- }
- else
+ }
+ else
{
pushEnabled();
m_hide=TRUE;
@@ -834,7 +838,7 @@ void DocbookDocVisitor::visitPre(DocImage *img)
void DocbookDocVisitor::visitPost(DocImage *img)
{
- if (img->type()==DocImage::Latex)
+ if (img->type()==DocImage::DocBook)
{
if (m_hide) return;
QCString typevar;
@@ -854,13 +858,17 @@ void DocbookDocVisitor::visitPost(DocImage *img)
filter(img->width());
m_t << "\"";
}
- else if (!img->height().isEmpty())
+ else
+ {
+ m_t << " width=\"50%\"";
+ }
+ if (!img->height().isEmpty())
{
m_t << " depth=\"";
filter(img->height());
m_t << "\"";
}
- m_t << " align=\"center\" fileref=\"" << baseName << "\">";
+ m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << "\">";
m_t << "</imagedata>" << endl;
m_t << " </imageobject>" << endl;
m_t << " </mediaobject>" << endl;
@@ -980,37 +988,23 @@ void DocbookDocVisitor::visitPost(DocSecRefList *)
void DocbookDocVisitor::visitPre(DocParamSect *s)
{
if (m_hide) return;
+ m_t << endl;
+ m_t << " <formalpara>" << endl;
+ m_t << " <title/>" << endl;
+ m_t << " <table frame=\"all\">" << endl;
+ m_t << " <title>";
switch(s->type())
{
- case DocParamSect::Param:
- {
- m_t << endl;
- m_t << " <formalpara>" << endl;
- m_t << " <title/>" << endl;
- m_t << " <table frame=\"all\">" << endl;
- m_t << " <title>Parameters</title>" << endl;
- m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
- m_t << " <tbody>" << endl;
- break;
- }
- case DocParamSect::RetVal:
- {
- m_t << endl;
- m_t << " <formalpara>" << endl;
- m_t << " <title/>" << endl;
- m_t << " <table frame=\"all\">" << endl;
- m_t << " <title>Parameters</title>" << endl;
- m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
- m_t << " <tbody>" << endl;
- break;
- }
- case DocParamSect::Exception:
- m_t << "exception"; break;
- case DocParamSect::TemplateParam:
- m_t << "templateparam"; break;
+ case DocParamSect::Param: m_t << theTranslator->trParameters(); break;
+ case DocParamSect::RetVal: m_t << theTranslator->trReturnValues(); break;
+ case DocParamSect::Exception: m_t << theTranslator->trExceptions(); break;
+ case DocParamSect::TemplateParam: m_t << theTranslator->trTemplateParameters(); break;
default:
ASSERT(0);
}
+ m_t << " </title>" << endl;
+ m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
+ m_t << " <tbody>" << endl;
}
void DocbookDocVisitor::visitPost(DocParamSect *)
@@ -1029,17 +1023,17 @@ void DocbookDocVisitor::visitPre(DocParamList *pl)
QListIterator<DocNode> li(pl->parameters());
DocNode *param;
m_t << " <row>" << endl;
- if (!li.toFirst())
+ if (!li.toFirst())
{
m_t << " <entry></entry>" << endl;
- }
- else
+ }
+ else
{
m_t << " <entry>";
int cnt = 0;
for (li.toFirst();(param=li.current());++li)
{
- if (cnt)
+ if (cnt)
{
m_t << ", ";
}
@@ -1196,7 +1190,8 @@ void DocbookDocVisitor::writeMscFile(const QCString &baseName)
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_BITMAP);
m_t << " <imagedata";
- m_t << " align=\"center\" fileref=\"" << shortName << ".png" << "\">";
+ m_t << " width=\"50%\"";
+ m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << ".png" << "\">";
m_t << "</imagedata>" << endl;
}
@@ -1231,13 +1226,17 @@ void DocbookDocVisitor::startMscFile(const QCString &fileName,
m_t << width;
m_t << "\"";
}
- else if (!height.isEmpty())
+ else
+ {
+ m_t << " width=\"50%\"";
+ }
+ if (!height.isEmpty())
{
m_t << " depth=\"";
m_t << height;
m_t << "\"";
}
- m_t << " align=\"center\" fileref=\"" << baseName << ".png" << "\">";
+ m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << ".png" << "\">";
m_t << "</imagedata>" << endl;
m_t << " </imageobject>" << endl;
if (hasCaption)
@@ -1342,9 +1341,12 @@ void DocbookDocVisitor::writeDotFile(const QCString &baseName)
shortName=shortName.right(shortName.length()-i-1);
}
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
- writeDotGraphFromFile(baseName+".dot",outDir,shortName,BITMAP);
+ QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
+ writeDotGraphFromFile(baseName+".dot",outDir,shortName,GOF_BITMAP);
m_t << " <imagedata";
- m_t << " align=\"center\" fileref=\"" << shortName << ".png" << "\">";
+ //If no width is specified use default value for PDF rendering
+ m_t << " width=\"50%\"";
+ m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << "." << imgExt << "\">";
m_t << "</imagedata>" << endl;
}
@@ -1366,7 +1368,8 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName,
}
baseName.prepend("dot_");
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
- writeDotGraphFromFile(fileName,outDir,baseName,BITMAP);
+ QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
+ writeDotGraphFromFile(fileName,outDir,baseName,GOF_BITMAP);
m_t << "<para>" << endl;
m_t << " <figure>" << endl;
m_t << " <title></title>" << endl;
@@ -1379,13 +1382,17 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName,
m_t << width;
m_t << "\"";
}
- else if (!height.isEmpty())
+ else
+ {
+ m_t << " width=\"50%\"";
+ }
+ if (!height.isEmpty())
{
m_t << " depth=\"";
m_t << height;
m_t << "\"";
}
- m_t << " align=\"center\" fileref=\"" << baseName << ".png" << "\">";
+ m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << "." << imgExt << "\">";
m_t << "</imagedata>" << endl;
m_t << " </imageobject>" << endl;
if (hasCaption)
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 66a890f..13d333f 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -257,14 +257,18 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
QCString outputDir;
switch(type)
{
- case DocImage::Html:
+ case DocImage::Html:
if (!Config_getBool("GENERATE_HTML")) return result;
outputDir = Config_getString("HTML_OUTPUT");
break;
- case DocImage::Latex:
+ case DocImage::Latex:
if (!Config_getBool("GENERATE_LATEX")) return result;
outputDir = Config_getString("LATEX_OUTPUT");
break;
+ case DocImage::DocBook:
+ if (!Config_getBool("GENERATE_DOCBOOK")) return result;
+ outputDir = Config_getString("DOCBOOK_OUTPUT");
+ break;
case DocImage::Rtf:
if (!Config_getBool("GENERATE_RTF")) return result;
outputDir = Config_getString("RTF_OUTPUT");
@@ -5025,9 +5029,10 @@ void DocPara::handleImage(const QCString &cmdName)
}
DocImage::Type t;
QCString imgType = g_token->name.lower();
- if (imgType=="html") t=DocImage::Html;
- else if (imgType=="latex") t=DocImage::Latex;
- else if (imgType=="rtf") t=DocImage::Rtf;
+ if (imgType=="html") t=DocImage::Html;
+ else if (imgType=="latex") t=DocImage::Latex;
+ else if (imgType=="docbook") t=DocImage::DocBook;
+ else if (imgType=="rtf") t=DocImage::Rtf;
else
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"image type %s specified as the first argument of "
diff --git a/src/docparser.h b/src/docparser.h
index fb4f084..17f296b 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -668,7 +668,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
class DocImage : public CompAccept<DocImage>, public DocNode
{
public:
- enum Type { Html, Latex, Rtf };
+ enum Type { Html, Latex, Rtf, DocBook };
DocImage(DocNode *parent,const HtmlAttribList &attribs,
const QCString &name,Type t,const QCString &url=QCString());
Kind kind() const { return Kind_Image; }
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 7ffbbb3..3bd2058 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -333,7 +333,9 @@ BLANK [ \t\r]
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+
-CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
+CITESCHAR [a-z_A-Z\x80-\xFF]
+CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
+CITEID {CITESCHAR}*{CITEECHAR}+("."{CITESCHAR}*{CITEECHAR}+)*
MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}*
LISTITEM {BLANK}*[-]("#")?{WS}
diff --git a/src/dot.cpp b/src/dot.cpp
index 051a438..c64729a 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -16,11 +16,6 @@
*
*/
-#ifdef _WIN32
-#include <windows.h>
-#define BITMAP W_BITMAP
-#endif
-
#include <stdlib.h>
#include <qdir.h>
@@ -1812,7 +1807,7 @@ void DotNode::writeBox(FTextStream &t,
t << "\",height=0.2,width=0.4";
if (m_isRoot)
{
- t << ",color=\"black\", fillcolor=\"grey75\", style=\"filled\" fontcolor=\"black\"";
+ t << ",color=\"black\", fillcolor=\"grey75\", style=\"filled\", fontcolor=\"black\"";
}
else
{
@@ -1896,7 +1891,7 @@ void DotNode::writeArrow(FTextStream &t,
t << ",arrowhead=\"" << eProps->arrowStyleMap[ei->m_color] << "\"";
}
- if (format==BITMAP) t << ",fontname=\"" << FONTNAME << "\"";
+ if (format==GOF_BITMAP) t << ",fontname=\"" << FONTNAME << "\"";
t << "];" << endl;
}
@@ -2313,7 +2308,7 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
{
if (node->m_subgraphId==n->m_subgraphId)
{
- node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,TRUE,TRUE);
+ node->write(md5stream,DotNode::Hierarchy,GOF_BITMAP,FALSE,TRUE,TRUE,TRUE);
}
}
writeGraphFooter(md5stream);
@@ -3080,7 +3075,8 @@ QCString DotClassGraph::diskName() const
}
QCString DotClassGraph::writeGraph(FTextStream &out,
- GraphOutputFormat format,
+ GraphOutputFormat graphFormat,
+ EmbeddedOutputFormat textFormat,
const char *path,
const char *fileName,
const char *relPath,
@@ -3128,19 +3124,19 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
if (updateDotGraph(m_startNode,
m_graphType,
absBaseName,
- format,
+ graphFormat,
m_lrRank,
m_graphType==DotNode::Inheritance,
TRUE,
m_startNode->label()
) ||
- !checkDeliverables(format==BITMAP ? absImgName :
+ !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP && generateImageMap ? absMapName : QCString())
+ graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
{
regenerate=TRUE;
- if (format==BITMAP) // run dot to create a bitmap image
+ if (graphFormat==GOF_BITMAP) // run dot to create a bitmap image
{
QCString dotArgs(maxCmdLine);
@@ -3151,7 +3147,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
DotManager::instance()->addRun(dotRun);
}
- else if (format==EPS) // run dot to create a .eps image
+ else if (graphFormat==GOF_EPS) // run dot to create a .eps image
{
DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
if (usePDFLatex)
@@ -3167,7 +3163,35 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
}
Doxygen::indexList->addImageFile(baseName+"."+imgExt);
- if (format==BITMAP && generateImageMap) // produce HTML to include the image
+ if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook)
+ {
+ out << "<para>" << endl;
+ out << " <figure>" << endl;
+ out << " <title>";
+ switch (m_graphType)
+ {
+ case DotNode::Collaboration:
+ out << "Collaboration graph";
+ break;
+ case DotNode::Inheritance:
+ out << "Inheritance graph";
+ break;
+ default:
+ ASSERT(0);
+ break;
+ }
+ out << "</title>" << endl;
+ out << " <mediaobject>" << endl;
+ out << " <imageobject>" << endl;
+ out << " <imagedata";
+ out << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">";
+ out << "</imagedata>" << endl;
+ out << " </imageobject>" << endl;
+ out << " </mediaobject>" << endl;
+ out << " </figure>" << endl;
+ out << "</para>" << endl;
+ }
+ else if (graphFormat==GOF_BITMAP && generateImageMap) // produce HTML to include the image
{
QCString mapLabel = escapeCharsInString(m_startNode->m_label,FALSE)+"_"+
escapeCharsInString(mapName,FALSE);
@@ -3189,7 +3213,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
{
out << "<div class=\"center\">";
out << "<img src=\"" << relPath << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
+ << imgExt << "\" border=\"0\" usemap=\"#"
<< mapLabel << "\" alt=\"";
switch (m_graphType)
{
@@ -3202,10 +3226,9 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
default:
ASSERT(0);
break;
- }
+ }
out << "\"/>";
out << "</div>" << endl;
-
if (regenerate || !insertMapFile(out,absMapName,relPath,mapLabel))
{
int mapId = DotManager::instance()->addMap(fileName,absMapName,relPath,
@@ -3214,7 +3237,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
}
}
}
- else if (format==EPS) // produce tex to include the .eps image
+ else if (graphFormat==GOF_EPS) // produce tex to include the .eps image
{
if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName))
{
@@ -3423,7 +3446,8 @@ QCString DotInclDepGraph::diskName() const
}
QCString DotInclDepGraph::writeGraph(FTextStream &out,
- GraphOutputFormat format,
+ GraphOutputFormat graphFormat,
+ EmbeddedOutputFormat textFormat,
const char *path,
const char *fileName,
const char *relPath,
@@ -3458,19 +3482,19 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
if (updateDotGraph(m_startNode,
DotNode::Dependency,
absBaseName,
- format,
+ graphFormat,
FALSE, // lrRank
FALSE, // renderParents
m_inverse, // backArrows
m_startNode->label()
) ||
- !checkDeliverables(format==BITMAP ? absImgName :
+ !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP && generateImageMap ? absMapName : QCString())
+ graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
{
regenerate=TRUE;
- if (format==BITMAP)
+ if (graphFormat==GOF_BITMAP)
{
// run dot to create a bitmap image
QCString dotArgs(maxCmdLine);
@@ -3479,7 +3503,7 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
DotManager::instance()->addRun(dotRun);
}
- else if (format==EPS)
+ else if (graphFormat==GOF_EPS)
{
DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
if (usePDFLatex)
@@ -3491,12 +3515,27 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
dotRun->addJob("ps",absEpsName);
}
DotManager::instance()->addRun(dotRun);
-
- }
+ }
}
Doxygen::indexList->addImageFile(baseName+"."+imgExt);
- if (format==BITMAP && generateImageMap)
+ if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook)
+ {
+ out << "<para>" << endl;
+ out << " <figure>" << endl;
+ out << " <title>Dependency diagram";
+ out << "</title>" << endl;
+ out << " <mediaobject>" << endl;
+ out << " <imageobject>" << endl;
+ out << " <imagedata";
+ out << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">";
+ out << "</imagedata>" << endl;
+ out << " </imageobject>" << endl;
+ out << " </mediaobject>" << endl;
+ out << " </figure>" << endl;
+ out << "</para>" << endl;
+ }
+ else if (graphFormat==GOF_BITMAP && generateImageMap)
{
if (imgExt=="svg") // Scalable vector graphics
{
@@ -3514,9 +3553,7 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
}
else // bitmap graphics
{
- out << "<div class=\"center\"><img src=\"" << relPath << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
- << mapName << "\" alt=\"\"/>";
+ out << "<div class=\"center\"><img src=\"" << relPath << baseName << "." << imgExt << "\" border=\"0\" usemap=\"#" << mapName << "\" alt=\"\"/>";
out << "</div>" << endl;
QCString absMapName = absBaseName+".map";
@@ -3528,7 +3565,7 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
}
}
}
- else if (format==EPS) // encapsulated postscript
+ else if (graphFormat==GOF_EPS) // encapsulated postscript
{
if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName))
{
@@ -3729,7 +3766,8 @@ DotCallGraph::~DotCallGraph()
delete m_usedNodes;
}
-QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
+QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat graphFormat,
+ EmbeddedOutputFormat textFormat,
const char *path,const char *fileName,
const char *relPath,bool generateImageMap,int
graphId) const
@@ -3757,19 +3795,19 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
if (updateDotGraph(m_startNode,
DotNode::CallGraph,
absBaseName,
- format,
+ graphFormat,
TRUE, // lrRank
FALSE, // renderParents
m_inverse, // backArrows
m_startNode->label()
) ||
- !checkDeliverables(format==BITMAP ? absImgName :
+ !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP && generateImageMap ? absMapName : QCString())
+ graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
{
regenerate=TRUE;
- if (format==BITMAP)
+ if (graphFormat==GOF_BITMAP)
{
// run dot to create a bitmap image
QCString dotArgs(maxCmdLine);
@@ -3779,7 +3817,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
DotManager::instance()->addRun(dotRun);
}
- else if (format==EPS)
+ else if (graphFormat==GOF_EPS)
{
// run dot to create a .eps image
DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
@@ -3797,7 +3835,23 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
}
Doxygen::indexList->addImageFile(baseName+"."+imgExt);
- if (format==BITMAP && generateImageMap)
+ if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook)
+ {
+ out << "<para>" << endl;
+ out << " <figure>" << endl;
+ out << " <title>Call diagram";
+ out << "</title>" << endl;
+ out << " <mediaobject>" << endl;
+ out << " <imageobject>" << endl;
+ out << " <imagedata";
+ out << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">";
+ out << "</imagedata>" << endl;
+ out << " </imageobject>" << endl;
+ out << " </mediaobject>" << endl;
+ out << " </figure>" << endl;
+ out << "</para>" << endl;
+ }
+ else if (graphFormat==GOF_BITMAP && generateImageMap)
{
if (imgExt=="svg") // Scalable vector graphics
{
@@ -3815,7 +3869,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
}
else // bitmap graphics
{
- out << "<div class=\"center\"><img src=\"" << relPath << baseName << "."
+ out << "<div class=\"center\"><img src=\"" << relPath << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapName << "\" alt=\"";
out << "\"/>";
@@ -3829,7 +3883,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
}
}
}
- else if (format==EPS) // encapsulated postscript
+ else if (graphFormat==GOF_EPS) // encapsulated postscript
{
if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName))
{
@@ -3865,7 +3919,8 @@ DotDirDeps::~DotDirDeps()
}
QCString DotDirDeps::writeGraph(FTextStream &out,
- GraphOutputFormat format,
+ GraphOutputFormat graphFormat,
+ EmbeddedOutputFormat textFormat,
const char *path,
const char *fileName,
const char *relPath,
@@ -3901,9 +3956,9 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
MD5SigToString(md5_sig,sigStr.data(),33);
bool regenerate=FALSE;
if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
- !checkDeliverables(format==BITMAP ? absImgName :
+ !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP && generateImageMap ? absMapName : QCString())
+ graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
{
regenerate=TRUE;
@@ -3917,7 +3972,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
t << theGraph.data();
f.close();
- if (format==BITMAP)
+ if (graphFormat==GOF_BITMAP)
{
// run dot to create a bitmap image
QCString dotArgs(maxCmdLine);
@@ -3926,7 +3981,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
DotManager::instance()->addRun(dotRun);
}
- else if (format==EPS)
+ else if (graphFormat==GOF_EPS)
{
DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
if (usePDFLatex)
@@ -3942,7 +3997,23 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
}
Doxygen::indexList->addImageFile(baseName+"."+imgExt);
- if (format==BITMAP && generateImageMap)
+ if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook)
+ {
+ out << "<para>" << endl;
+ out << " <figure>" << endl;
+ out << " <title>Directory Dependency diagram";
+ out << "</title>" << endl;
+ out << " <mediaobject>" << endl;
+ out << " <imageobject>" << endl;
+ out << " <imagedata";
+ out << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">";
+ out << "</imagedata>" << endl;
+ out << " </imageobject>" << endl;
+ out << " </mediaobject>" << endl;
+ out << " </figure>" << endl;
+ out << "</para>" << endl;
+ }
+ else if (graphFormat==GOF_BITMAP && generateImageMap)
{
if (imgExt=="svg") // Scalable vector graphics
{
@@ -3960,7 +4031,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
}
else // bitmap graphics
{
- out << "<div class=\"center\"><img src=\"" << relPath << baseName << "."
+ out << "<div class=\"center\"><img src=\"" << relPath << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapName << "\" alt=\"";
out << convertToXML(m_dir->displayName());
@@ -3975,7 +4046,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
}
}
}
- else if (format==EPS)
+ else if (graphFormat==GOF_EPS)
{
if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName))
{
@@ -4085,9 +4156,9 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
QCString absOutFile = d.absPath().utf8()+"/"+outFile;
DotRunner dotRun(inFile,d.absPath().data(),FALSE,absImgName);
- if (format==BITMAP)
+ if (format==GOF_BITMAP)
dotRun.addJob(imgExt,absImgName);
- else // format==EPS
+ else // format==GOF_EPS
{
if (Config_getBool("USE_PDFLATEX"))
{
@@ -4105,7 +4176,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
return;
}
- if (format==BITMAP) checkDotResult(absImgName);
+ if (format==GOF_BITMAP) checkDotResult(absImgName);
Doxygen::indexList->addImageFile(imgName);
@@ -4384,7 +4455,8 @@ void DotGroupCollaboration::addCollaborationMember(
}
-QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat format,
+QCString DotGroupCollaboration::writeGraph( FTextStream &t,
+ GraphOutputFormat graphFormat, EmbeddedOutputFormat textFormat,
const char *path, const char *fileName, const char *relPath,
bool writeImageMap,int graphId) const
{
@@ -4411,7 +4483,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
// write other nodes.
for (dni.toFirst();(pn=dni.current());++dni)
{
- pn->write(md5stream,DotNode::Inheritance,format,TRUE,FALSE,FALSE,FALSE);
+ pn->write(md5stream,DotNode::Inheritance,graphFormat,TRUE,FALSE,FALSE,FALSE);
}
// write edges
@@ -4441,9 +4513,9 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
QCString absEpsName = absBaseName+".eps";
bool regenerate=FALSE;
if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
- !checkDeliverables(format==BITMAP ? absImgName :
+ !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP /*&& generateImageMap*/ ? absMapName : QCString())
+ graphFormat==GOF_BITMAP /*&& generateImageMap*/ ? absMapName : QCString())
)
{
regenerate=TRUE;
@@ -4456,7 +4528,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
dotfile.close();
}
- if (format==BITMAP) // run dot to create a bitmap image
+ if (graphFormat==GOF_BITMAP) // run dot to create a bitmap image
{
QCString dotArgs(maxCmdLine);
@@ -4466,7 +4538,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
DotManager::instance()->addRun(dotRun);
}
- else if (format==EPS)
+ else if (graphFormat==GOF_EPS)
{
DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
if (usePDFLatex)
@@ -4481,7 +4553,23 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
}
}
- if (format==BITMAP && writeImageMap)
+ if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook)
+ {
+ t << "<para>" << endl;
+ t << " <figure>" << endl;
+ t << " <title>Group Collaboration diagram";
+ t << "</title>" << endl;
+ t << " <mediaobject>" << endl;
+ t << " <imageobject>" << endl;
+ t << " <imagedata";
+ t << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">";
+ t << "</imagedata>" << endl;
+ t << " </imageobject>" << endl;
+ t << " </mediaobject>" << endl;
+ t << " </figure>" << endl;
+ t << "</para>" << endl;
+ }
+ else if (graphFormat==GOF_BITMAP && writeImageMap)
{
QCString mapLabel = escapeCharsInString(baseName,FALSE);
t << "<center><table><tr><td>";
@@ -4503,7 +4591,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
else
{
t << "<img src=\"" << relPath << imgName
- << "\" border=\"0\" alt=\"\" usemap=\"#"
+ << "\" border=\"0\" alt=\"\" usemap=\"#"
<< mapLabel << "\"/>" << endl;
if (regenerate || !insertMapFile(t,absMapName,relPath,mapLabel))
{
@@ -4512,10 +4600,9 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
t << "<!-- MAP " << mapId << " -->" << endl;
}
}
-
t << "</td></tr></table></center>" << endl;
}
- else if (format==EPS)
+ else if (graphFormat==GOF_EPS)
{
if (regenerate || !writeVecGfxFigure(t,baseName,absBaseName))
{
diff --git a/src/dot.h b/src/dot.h
index 6ff89be..8906199 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -39,7 +39,8 @@ class GroupDef;
class DotGroupCollaboration;
class DotRunnerQueue;
-enum GraphOutputFormat { BITMAP , EPS };
+enum GraphOutputFormat { GOF_BITMAP, GOF_EPS };
+enum EmbeddedOutputFormat { EOF_Html, EOF_LaTeX, EOF_Rtf, EOF_DocBook };
/** Attributes of an edge of a dot graph */
struct EdgeInfo
@@ -165,8 +166,8 @@ class DotClassGraph
~DotClassGraph();
bool isTrivial() const;
bool isTooBig() const;
- QCString writeGraph(FTextStream &t,GraphOutputFormat f,const char *path,
- const char *fileName, const char *relPath,
+ QCString writeGraph(FTextStream &t,GraphOutputFormat gf,EmbeddedOutputFormat ef,
+ const char *path, const char *fileName, const char *relPath,
bool TBRank=TRUE,bool imageMap=TRUE,int graphId=-1) const;
void writeXML(FTextStream &t);
@@ -196,7 +197,7 @@ class DotInclDepGraph
public:
DotInclDepGraph(FileDef *fd,bool inverse);
~DotInclDepGraph();
- QCString writeGraph(FTextStream &t, GraphOutputFormat f,
+ QCString writeGraph(FTextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef,
const char *path,const char *fileName,const char *relPath,
bool writeImageMap=TRUE,int graphId=-1) const;
bool isTrivial() const;
@@ -222,7 +223,7 @@ class DotCallGraph
public:
DotCallGraph(MemberDef *md,bool inverse);
~DotCallGraph();
- QCString writeGraph(FTextStream &t, GraphOutputFormat f,
+ QCString writeGraph(FTextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef,
const char *path,const char *fileName,
const char *relPath,bool writeImageMap=TRUE,
int graphId=-1) const;
@@ -249,7 +250,8 @@ class DotDirDeps
~DotDirDeps();
bool isTrivial() const;
QCString writeGraph(FTextStream &out,
- GraphOutputFormat format,
+ GraphOutputFormat gf,
+ EmbeddedOutputFormat ef,
const char *path,
const char *fileName,
const char *relPath,
@@ -298,7 +300,7 @@ class DotGroupCollaboration
DotGroupCollaboration(GroupDef* gd);
~DotGroupCollaboration();
- QCString writeGraph(FTextStream &t, GraphOutputFormat format,
+ QCString writeGraph(FTextStream &t, GraphOutputFormat gf,EmbeddedOutputFormat ef,
const char *path,const char *fileName,const char *relPath,
bool writeImageMap=TRUE,int graphId=-1) const;
void buildGraph(GroupDef* gd);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 8aba232..bc080a2 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -551,7 +551,7 @@ static void addSTLClasses(EntryNav *rootNav)
//----------------------------------------------------------------------------
static Definition *findScopeFromQualifiedName(Definition *startScope,const QCString &n,
- FileDef *fileScope=0);
+ FileDef *fileScope,TagInfo *tagInfo);
static void addPageToContext(PageDef *pd,EntryNav *rootNav)
{
@@ -564,7 +564,7 @@ static void addPageToContext(PageDef *pd,EntryNav *rootNav)
}
scope = stripAnonymousNamespaceScope(scope);
scope+="::"+pd->name();
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope);
+ Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,rootNav->tagInfo());
if (d)
{
pd->setPageScope(d);
@@ -708,7 +708,7 @@ static void findGroupScope(EntryNav *rootNav)
}
scope = stripAnonymousNamespaceScope(scope);
scope+="::"+gd->name();
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope);
+ Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,rootNav->tagInfo());
if (d)
{
gd->setGroupScope(d);
@@ -996,7 +996,8 @@ static Definition *findScope(Entry *root,int level=0)
* full qualified name \a name. Creates an artificial scope if the scope is
* not found and set the parent/child scope relation if the scope is found.
*/
-static Definition *buildScopeFromQualifiedName(const QCString name,int level,SrcLangExt lang,TagInfo *tagInfo)
+static Definition *buildScopeFromQualifiedName(const QCString name,
+ int level,SrcLangExt lang,TagInfo *tagInfo)
{
//printf("buildScopeFromQualifiedName(%s) level=%d\n",name.data(),level);
int i=0;
@@ -1018,7 +1019,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,int level,Src
{
innerScope = cd;
}
- else if (nd==0 && cd==0) // scope is not known!
+ else if (nd==0 && cd==0 && fullScope.find('<')==-1) // scope is not known and could be a namespace!
{
// introduce bogus namespace
//printf("++ adding dummy namespace %s to %s tagInfo=%p\n",nsName.data(),prevScope->name().data(),tagInfo);
@@ -1047,7 +1048,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,int level,Src
}
static Definition *findScopeFromQualifiedName(Definition *startScope,const QCString &n,
- FileDef *fileScope)
+ FileDef *fileScope,TagInfo *tagInfo)
{
//printf("<findScopeFromQualifiedName(%s,%s)\n",startScope ? startScope->name().data() : 0, n.data());
Definition *resultScope=startScope;
@@ -1080,7 +1081,7 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr
for (ni.toFirst();((nd=ni.current()) && resultScope==0);++ni)
{
// restart search within the used namespace
- resultScope = findScopeFromQualifiedName(nd,n,fileScope);
+ resultScope = findScopeFromQualifiedName(nd,n,fileScope,tagInfo);
}
if (resultScope)
{
@@ -1112,7 +1113,8 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr
// so use this instead.
QCString fqn = QCString(ui.currentKey())+
scope.right(scope.length()-p);
- resultScope = buildScopeFromQualifiedName(fqn,fqn.contains("::"),startScope->getLanguage(),0);
+ resultScope = buildScopeFromQualifiedName(fqn,fqn.contains("::"),
+ startScope->getLanguage(),0);
//printf("Creating scope from fqn=%s result %p\n",fqn.data(),resultScope);
if (resultScope)
{
@@ -1420,7 +1422,7 @@ static void resolveClassNestingRelations()
//printf("processing=%s, iteration=%d\n",cd->name().data(),iteration);
// also add class to the correct structural context
Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,
- name,cd->getFileDef());
+ name,cd->getFileDef(),0);
if (d)
{
//printf("****** adding %s to scope %s in iteration %d\n",cd->name().data(),d->name().data(),iteration);
@@ -1788,7 +1790,7 @@ static void buildNamespaceList(EntryNav *rootNav)
Doxygen::namespaceSDict->inSort(fullName,nd);
// also add namespace to the correct structural context
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName);
+ Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName,0,tagInfo);
//printf("adding namespace %s to context %s\n",nd->name().data(),d?d->name().data():"<none>");
if (d==0) // we didn't find anything, create the scope artificially
// anyway, so we can at least relate scopes properly.
@@ -4823,7 +4825,7 @@ static bool findClassRelation(
int si = baseClassName.findRev("::");
if (si!=-1) // class is nested
{
- Definition *sd = findScopeFromQualifiedName(Doxygen::globalScope,baseClassName.left(si));
+ Definition *sd = findScopeFromQualifiedName(Doxygen::globalScope,baseClassName.left(si),0,rootNav->tagInfo());
if (sd==0 || sd==Doxygen::globalScope) // outer scope not found
{
baseClass->setArtificial(TRUE); // see bug678139
diff --git a/src/entry.h b/src/entry.h
index a861906..3e5f3d7 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -135,6 +135,10 @@ class Entry
static const uint64 Singleton = (1ULL<<14); // UNO IDL
// member specifiers (add new items to the beginning)
+ static const uint64 PrivateGettable = (1ULL<<20); // C# private getter
+ static const uint64 ProtectedGettable = (1ULL<<21); // C# protected getter
+ static const uint64 PrivateSettable = (1ULL<<22); // C# private setter
+ static const uint64 ProtectedSettable = (1ULL<<23); // C# protected setter
static const uint64 Inline = (1ULL<<24);
static const uint64 Explicit = (1ULL<<25);
static const uint64 Mutable = (1ULL<<26);
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 261f739..372bb93 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -1906,7 +1906,7 @@ void HtmlDocVisitor::writeDotFile(const QCString &fn,const QCString &relPath,
}
baseName.prepend("dot_");
QCString outDir = Config_getString("HTML_OUTPUT");
- writeDotGraphFromFile(fn,outDir,baseName,BITMAP);
+ writeDotGraphFromFile(fn,outDir,baseName,GOF_BITMAP);
writeDotImageMapFromFile(m_t,fn,outDir,relPath,baseName,context);
}
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 0d399d3..27091b4 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -2516,7 +2516,7 @@ void HtmlGenerator::endDotGraph(const DotClassGraph &g)
endSectionSummary(t);
startSectionContent(t,m_sectionCount);
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,TRUE,m_sectionCount);
+ g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,TRUE,m_sectionCount);
if (generateLegend && !umlLook)
{
t << "<center><span class=\"legend\">[";
@@ -2542,7 +2542,7 @@ void HtmlGenerator::endInclDepGraph(const DotInclDepGraph &g)
endSectionSummary(t);
startSectionContent(t,m_sectionCount);
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount);
+ g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount);
endSectionContent(t);
m_sectionCount++;
@@ -2560,7 +2560,7 @@ void HtmlGenerator::endGroupCollaboration(const DotGroupCollaboration &g)
endSectionSummary(t);
startSectionContent(t,m_sectionCount);
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount);
+ g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount);
endSectionContent(t);
m_sectionCount++;
@@ -2578,7 +2578,7 @@ void HtmlGenerator::endCallGraph(const DotCallGraph &g)
endSectionSummary(t);
startSectionContent(t,m_sectionCount);
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount);
+ g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount);
endSectionContent(t);
m_sectionCount++;
@@ -2596,7 +2596,7 @@ void HtmlGenerator::endDirDepGraph(const DotDirDeps &g)
endSectionSummary(t);
startSectionContent(t,m_sectionCount);
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount);
+ g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount);
endSectionContent(t);
m_sectionCount++;
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index eed36bc..0edb459 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -1587,7 +1587,7 @@ void LatexDocVisitor::startDotFile(const QCString &fileName,
baseName.prepend("dot_");
QCString outDir = Config_getString("LATEX_OUTPUT");
QCString name = fileName;
- writeDotGraphFromFile(name,outDir,baseName,EPS);
+ writeDotGraphFromFile(name,outDir,baseName,GOF_EPS);
if (hasCaption)
{
m_t << "\n\\begin{DoxyImage}\n";
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 10e50de..086e012 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -1814,7 +1814,7 @@ void LatexGenerator::startDotGraph()
void LatexGenerator::endDotGraph(const DotClassGraph &g)
{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
+ g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath);
}
void LatexGenerator::startInclDepGraph()
@@ -1823,7 +1823,7 @@ void LatexGenerator::startInclDepGraph()
void LatexGenerator::endInclDepGraph(const DotInclDepGraph &g)
{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
+ g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath);
}
void LatexGenerator::startGroupCollaboration()
@@ -1832,7 +1832,7 @@ void LatexGenerator::startGroupCollaboration()
void LatexGenerator::endGroupCollaboration(const DotGroupCollaboration &g)
{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
+ g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath);
}
void LatexGenerator::startCallGraph()
@@ -1841,7 +1841,7 @@ void LatexGenerator::startCallGraph()
void LatexGenerator::endCallGraph(const DotCallGraph &g)
{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
+ g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath);
}
void LatexGenerator::startDirDepGraph()
@@ -1850,7 +1850,7 @@ void LatexGenerator::startDirDepGraph()
void LatexGenerator::endDirDepGraph(const DotDirDeps &g)
{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
+ g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath);
}
void LatexGenerator::startDescription()
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 9ef3515..1069b3b 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -1729,15 +1729,27 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.docify(" [implementation]");
ol.endTypewriter();
}
+
+ bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
- if (isProperty() && (isSettable() || isGettable()))
+ if (isProperty() && (isSettable() || isGettable() ||
+ isPrivateSettable() || isPrivateGettable() ||
+ isProtectedSettable() || isProtectedGettable()))
{
ol.writeLatexSpacing();
ol.startTypewriter();
ol.docify(" [");
QStrList sl;
- if (isGettable()) sl.append("get");
- if (isSettable()) sl.append("set");
+
+ if (isGettable()) sl.append("get");
+ if (isProtectedGettable()) sl.append("protected get");
+ if (isSettable()) sl.append("set");
+ if (isProtectedSettable()) sl.append("protected set");
+ if (extractPrivate)
+ {
+ if (isPrivateGettable()) sl.append("private get");
+ if (isPrivateSettable()) sl.append("private set");
+ }
const char *s=sl.first();
while (s)
{
@@ -1940,6 +1952,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
//ol.docify(" [");
SrcLangExt lang = getLanguage();
bool optVhdl = lang==SrcLangExt_VHDL;
+ bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
if (optVhdl)
{
sl.append(VhdlDocGen::trTypeString(getMemberSpecifiers()));
@@ -1955,7 +1968,14 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
if (isMutable()) sl.append("mutable");
if (isStatic()) sl.append("static");
if (isGettable()) sl.append("get");
+ if (isProtectedGettable()) sl.append("protected get");
if (isSettable()) sl.append("set");
+ if (isProtectedSettable()) sl.append("protected set");
+ if (extractPrivate)
+ {
+ if (isPrivateGettable()) sl.append("private get");
+ if (isPrivateSettable()) sl.append("private set");
+ }
if (isAddable()) sl.append("add");
if (!isUNOProperty() && isRemovable()) sl.append("remove");
if (isRaisable()) sl.append("raise");
@@ -4193,11 +4213,31 @@ bool MemberDef::isGettable() const
return (m_impl->memSpec&Entry::Gettable)!=0;
}
+bool MemberDef::isPrivateGettable() const
+{
+ return (m_impl->memSpec&Entry::PrivateGettable)!=0;
+}
+
+bool MemberDef::isProtectedGettable() const
+{
+ return (m_impl->memSpec&Entry::ProtectedGettable)!=0;
+}
+
bool MemberDef::isSettable() const
{
return (m_impl->memSpec&Entry::Settable)!=0;
}
+bool MemberDef::isPrivateSettable() const
+{
+ return (m_impl->memSpec&Entry::PrivateSettable)!=0;
+}
+
+bool MemberDef::isProtectedSettable() const
+{
+ return (m_impl->memSpec&Entry::ProtectedSettable)!=0;
+}
+
bool MemberDef::isAddable() const
{
return (m_impl->memSpec&Entry::Addable)!=0;
diff --git a/src/memberdef.h b/src/memberdef.h
index 3259102..b3c671f 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -123,7 +123,11 @@ class MemberDef : public Definition
bool isExplicit() const;
bool isMutable() const;
bool isGettable() const;
+ bool isPrivateGettable() const;
+ bool isProtectedGettable() const;
bool isSettable() const;
+ bool isPrivateSettable() const;
+ bool isProtectedSettable() const;
bool isReadable() const;
bool isWritable() const;
bool isAddable() const;
diff --git a/src/pre.l b/src/pre.l
index 6d818f3..f06cc98 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -886,8 +886,9 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
}
// PHASE 2: apply the macro function
- if (argCount==def->nargs ||
- (argCount>def->nargs && def->varArgs)) // matching parameters lists
+ if (argCount==def->nargs || // same number of arguments
+ (argCount>=def->nargs-1 && def->varArgs)) // variadic macro with at least as many
+ // params as the non-variadic part (see bug731985)
{
uint k=0;
// substitution of all formal arguments
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 0381c93..ee2ae3f 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -476,9 +476,10 @@ class PrintDocVisitor : public DocVisitor
printf("<image src=\"%s\" type=\"",img->name().data());
switch(img->type())
{
- case DocImage::Html: printf("html"); break;
- case DocImage::Latex: printf("latex"); break;
- case DocImage::Rtf: printf("rtf"); break;
+ case DocImage::Html: printf("html"); break;
+ case DocImage::Latex: printf("latex"); break;
+ case DocImage::Rtf: printf("rtf"); break;
+ case DocImage::DocBook: printf("docbook"); break;
}
printf("\" width=%s height=%s>\n",img->width().data(),img->height().data());
}
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index b90b5a8..0d17208 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -1653,7 +1653,7 @@ void RTFDocVisitor::writeDotFile(const QCString &fileName)
baseName=baseName.right(baseName.length()-i-1);
}
QCString outDir = Config_getString("RTF_OUTPUT");
- writeDotGraphFromFile(fileName,outDir,baseName,BITMAP);
+ writeDotGraphFromFile(fileName,outDir,baseName,GOF_BITMAP);
if (!m_lastIsPara) m_t << "\\par" << endl;
m_t << "{" << endl;
m_t << rtf_Style_Reset;
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index 8699c4e..ccdadcf 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -2409,7 +2409,7 @@ void RTFGenerator::endDotGraph(const DotClassGraph &g)
newParagraph();
QCString fn =
- g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),fileName,relPath,TRUE,FALSE);
+ g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"),fileName,relPath,TRUE,FALSE);
// display the file
t << "{" << endl;
@@ -2431,7 +2431,7 @@ void RTFGenerator::endInclDepGraph(const DotInclDepGraph &g)
{
newParagraph();
- QCString fn = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),
+ QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"),
fileName,relPath,FALSE);
// display the file
@@ -2461,7 +2461,7 @@ void RTFGenerator::endCallGraph(const DotCallGraph &g)
{
newParagraph();
- QCString fn = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),
+ QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"),
fileName,relPath,FALSE);
// display the file
@@ -2483,7 +2483,7 @@ void RTFGenerator::endDirDepGraph(const DotDirDeps &g)
{
newParagraph();
- QCString fn = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),
+ QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"),
fileName,relPath,FALSE);
// display the file
diff --git a/src/scanner.l b/src/scanner.l
index a39d02e..50e3b18 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -6129,6 +6129,10 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(FindMembers);
}
}
+<CSAccessorDecl>"private "{BN}*"set" { if (curlyCount==0) current->spec |= Entry::PrivateSettable; }
+<CSAccessorDecl>"protected "{BN}*"set" { if (curlyCount==0) current->spec |= Entry::ProtectedSettable; }
+<CSAccessorDecl>"private "{BN}*"get" { if (curlyCount==0) current->spec |= Entry::PrivateGettable; }
+<CSAccessorDecl>"protected "{BN}*"get" { if (curlyCount==0) current->spec |= Entry::ProtectedGettable; }
<CSAccessorDecl>"set" { if (curlyCount==0) current->spec |= Entry::Settable; }
<CSAccessorDecl>"get" { if (curlyCount==0) current->spec |= Entry::Gettable; }
<CSAccessorDecl>"add" { if (curlyCount==0) current->spec |= Entry::Addable; }
diff --git a/src/tclscanner.l b/src/tclscanner.l
index 48e8214..88e3d1d 100644
--- a/src/tclscanner.l
+++ b/src/tclscanner.l
@@ -534,6 +534,24 @@ static void tcl_name(const QCString &ns0, const QCString &name0, QCString &ns, Q
}
}
+//! Check name. Strip namespace qualifiers from name0 if inside inlined code segment.
+// @return 'ns' and 'name' of given current 'ns0' and 'name0'
+static void tcl_name_SnippetAware(const QCString &ns0, const QCString &name0, QCString &ns, QCString &name)
+{
+ // If we are inside an inlined code snippet then ns0
+ // already containes the complete namespace path.
+ // Any namespace qualifiers in name0 are redundant.
+ int i = name0.findRev("::");
+ if (i>=0 && tcl.memberdef)
+ {
+ tcl_name(ns0, name0.mid(i+2), ns, name);
+ }
+ else
+ {
+ tcl_name(ns0, name0, ns, name);
+ }
+}
+
// Check and return namespace entry.
// @return namespace entry
Entry* tcl_entry_namespace(const QCString ns)
@@ -714,6 +732,40 @@ static void tcl_codify_cmd(const char *s,int i)
{
tcl_codify(s,(*tcl.list_commandwords.at(i)).utf8());
}
+//! codify a string token
+//
+// codifies string according to type.
+// Starts a new scan context if needed (*myScan==0 and type == "script").
+// Returns NULL or the created scan context.
+//
+static tcl_scan *tcl_codify_token(tcl_scan *myScan, const QCString type, const QCString string)
+{
+ if (myScan != NULL)
+ {
+ if (type != NULL)
+ {
+ myScan->after << type << string;
+ }
+ else
+ {
+ myScan->after << "NULL" << string;
+ }
+ }
+ else
+ {
+ if (qstrcmp(type, "script") == 0)
+ {
+ myScan = tcl.scan.at(0);
+ myScan = tcl_scan_start('?', string,
+ myScan->ns, myScan->entry_cl, myScan->entry_fn);
+ }
+ else
+ {
+ tcl_codify((const char*)type, string);
+ }
+ }
+ return myScan;
+}
//-----------------------------------------------------------------------------
#undef YY_INPUT
@@ -1716,14 +1768,7 @@ static tcl_scan *tcl_command_ARG(tcl_scan *myScan, unsigned int i, bool ignoreOu
if (i%2 != 0)
{
// handle white space
- if (myScan!=NULL)
- {
- myScan->after << "NULL" << myName;
- }
- else
- {
- tcl_codify(NULL,myName);
- }
+ myScan = tcl_codify_token(myScan, "NULL", myName);
}
else
{
@@ -1766,29 +1811,13 @@ static tcl_scan *tcl_command_ARG(tcl_scan *myScan, unsigned int i, bool ignoreOu
{
// the first opening bracket, output what we have so far
myStr+=c;
- if (myScan!=NULL)
- {
- myScan->after << "NULL" << myStr;
- }
- else
- {
- tcl_codify(NULL,myStr);
- }
+ myScan = tcl_codify_token(myScan, "NULL", myStr);
myStr="";
}
else if (c==']' && !backslashed && insideBrackets==0 && insideBraces==0)
{
// the last closing bracket, start recursion, switch to deferred
- if (myScan!=NULL)
- {
- myScan->after << "script" << myStr;
- }
- else
- {
- myScan=tcl.scan.at(0);
- myScan = tcl_scan_start('?',myStr,
- myScan->ns,myScan->entry_cl,myScan->entry_fn);
- }
+ myScan = tcl_codify_token(myScan, "script", myStr);
myStr="";
myStr+=c;
}
@@ -1797,23 +1826,174 @@ static tcl_scan *tcl_command_ARG(tcl_scan *myScan, unsigned int i, bool ignoreOu
myStr+=c;
}
}
- if (myScan!=NULL)
+ if (i == 0 && myScan == NULL)
{
- myScan->after << "NULL" << myStr;
+ tcl_codify_link(myStr);
}
else
{
- if (i==0)
+ myScan = tcl_codify_token(myScan, "NULL", myStr);
+ }
+ }
+ return (myScan);
+}
+
+//! Handle internal tcl commands.
+// "eval arg ?arg ...?"
+static void tcl_command_EVAL()
+{
+D
+ tcl_codify_cmd("keyword", 0);
+ tcl_scan *myScan = tcl.scan.at(0);
+ QCString myString = "";
+ // we simply rescan the line without the eval
+ // we include leading whitespace because tcl_scan_start will examine
+ // the first char. If it finds a bracket it will assume one expression in brackets.
+ // Example: eval [list set] [list NotInvoked] [Invoked NotInvoked]
+ for (unsigned int i = 1; i < tcl.list_commandwords.count(); i++)
+ {
+ myString += (*tcl.list_commandwords.at(i)).utf8();
+ }
+ myScan = tcl_scan_start('?', myString,
+ myScan->ns, myScan->entry_cl, myScan->entry_fn);
+}
+
+//! Handle internal tcl commands.
+// switch ?options? string pattern body ?pattern body ...?
+// switch ?options? string {pattern body ?pattern body ...?}
+static void tcl_command_SWITCH()
+{
+D
+ tcl_codify_cmd("keyword",0);
+ tcl_codify_cmd(NULL,1);
+ tcl_scan *myScan=NULL;
+ unsigned int i;
+ QCString token;
+ // first: find the last option token
+ unsigned int lastOptionIndex = 0;
+ for (i = 2; i<tcl.list_commandwords.count(); i += 2)
+ {
+ token = (*tcl.list_commandwords.at(i)).utf8();
+ if (token == "--")
+ {
+ lastOptionIndex = i;
+ break;
+ }
+ if (token[0] == '-' && i - lastOptionIndex == 2)
+ {
+ // options start with dash and should form a continuous chain
+ lastOptionIndex = i;
+ }
+ }
+ // second: eat up options
+ for (i = 2; i <= lastOptionIndex; i++)
+ {
+ myScan = tcl_command_ARG(myScan, i, false);
+ }
+ // third: how many tokens are left?
+ if (tcl.list_commandwords.count() - lastOptionIndex == 5)
+ {
+ //printf("syntax: switch ?options? string {pattern body ?pattern body ...?}\n");
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 1, false);
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 2, false);
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 3, false);
+ // walk trough the list step by step
+ // this way we can preserve whitespace
+ bool inBraces = false;
+ bool nextIsPattern = true;
+ int size;
+ const char *elem;
+ const char *next;
+ token = (*tcl.list_commandwords.at(lastOptionIndex + 4)).utf8();
+ if (token[0] == '{')
+ {
+ inBraces = true;
+ token = token.mid(1, token.length() - 2);
+ myScan = tcl_codify_token(myScan, "NULL", QCString("{"));
+ }
+ // ToDo: check if multibyte chars are handled correctly
+ while (token.length() > 0)
+ {
+ TclFindElement((const char*)token, token.length(), &elem, &next, &size, NULL);
+ //printf("%s\nstart=%d, elem=%d, next=%d, size=%d, brace=%d\n",
+ // (const char*) token, (const char*) token, elem, next, size, brace);
+ //
+ // handle leading whitespace/opening brace/double quotes
+ if (elem - token > 0)
{
- tcl_codify_link(myStr);
+ myScan = tcl_codify_token(myScan, "NULL", token.left(elem - token));
}
- else
+ // handle actual element without braces/double quotes
+ if (nextIsPattern)
+ {
+ myScan = tcl_codify_token(myScan, "NULL", token.mid(elem - token,size));
+ //printf("pattern=%s\n",(const char*) token.mid(elem - token, size));
+ }
+ else {
+ myScan = tcl_codify_token(myScan, "script", token.mid(elem - token, size));
+ //printf("script =%s\n", (const char*) token.mid(elem - token, size));
+ }
+ // handle trailing whitespace/closing brace/double quotes
+ if (next - elem - size > 0)
{
- tcl_codify(NULL,myStr);
+ myScan = tcl_codify_token(myScan, "NULL", token.mid(elem - token + size, next - elem - size));
}
+ nextIsPattern = !nextIsPattern;
+ token = token.mid(next - token);
+ }
+ if (inBraces)
+ {
+ myScan = tcl_codify_token(myScan, "NULL", QCString("}"));
+ }
+ if (!nextIsPattern)
+ {
+ tcl_war("Invalid switch syntax: last token is not a list of even elements.\n");
+ //tcl_war("%s\n", tcl.list_commandwords.join(" ").ascii());
}
}
- return (myScan);
+ else if ((tcl.list_commandwords.count() - lastOptionIndex > 6) &&
+ ((tcl.list_commandwords.count() - lastOptionIndex-3) % 4 == 0))
+ {
+ //printf("detected: switch ?options? string pattern body ?pattern body ...?\n");
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 1, false);
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 2, false);
+ //printf("value=%s\n",(const char*) (*tcl.list_commandwords.at(lastOptionIndex + 2)).utf8());
+ for (i = lastOptionIndex + 3; i < tcl.list_commandwords.count(); i += 4)
+ {
+ myScan = tcl_command_ARG(myScan, i + 0, false); // whitespace
+ myScan = tcl_command_ARG(myScan, i + 1, false); // pattern
+ myScan = tcl_command_ARG(myScan, i + 2, false); // whitespace
+ myScan = tcl_codify_token(myScan, "script", (*tcl.list_commandwords.at(i+3)).utf8()); // script
+ //printf("pattern=%s\n",(const char*) (*tcl.list_commandwords.at(i+1)).utf8());
+ //printf("script=%s\n",(const char*) (*tcl.list_commandwords.at(i+3)).utf8());
+ }
+ }
+ else
+ {
+ // not properly detected syntax
+ tcl_war("Invalid switch syntax: %d options followed by %d tokens.\n",
+ lastOptionIndex / 2, (tcl.list_commandwords.count() - 1) / 2 - lastOptionIndex / 2);
+ for (i = lastOptionIndex + 1; i <= tcl.list_commandwords.count(); i++)
+ {
+ myScan = tcl_command_ARG(myScan, i, false);
+ }
+ }
+}
+
+//! Handle internal tcl commands.
+// "catch script ?resultVarName? ?optionsVarName?"
+static void tcl_command_CATCH()
+{
+D
+ tcl_codify_cmd("keyword", 0);
+ tcl_codify_cmd(NULL, 1);
+ tcl_scan *myScan = tcl.scan.at(0);
+ myScan = tcl_scan_start('?', *tcl.list_commandwords.at(2),
+ myScan->ns, myScan->entry_cl, myScan->entry_fn);
+ for (unsigned int i = 3; i < tcl.list_commandwords.count(); i++)
+ {
+ myScan = tcl_command_ARG(myScan, i, false);
+ }
}
//! Handle internal tcl commands.
@@ -1937,7 +2117,7 @@ D
tcl_codify_cmd(NULL,3);
tcl_codify_cmd(NULL,4);
tcl_codify_cmd(NULL,5);
- tcl_name(myScan->ns,(*tcl.list_commandwords.at(2)).utf8(),myNs,myName);
+ tcl_name_SnippetAware(myScan->ns,(*tcl.list_commandwords.at(2)).utf8(),myNs,myName);
if (myNs.length())
{
myEntryNs = tcl_entry_namespace(myNs);
@@ -2195,15 +2375,62 @@ D
}
myEntryCl = tcl_entry_class(myName);
myStr = (*tcl.list_commandwords.at(4)).utf8();
- if (tcl.list_commandwords.count() > 5)
+ //
+ // special cases first
+ // oo::define classname method methodname args script
+ // oo::define classname constructor argList bodyScript
+ // oo::define classname destructor bodyScript
+ unsigned int n =tcl.list_commandwords.count();
+ if ((myStr == "method" && n == 11) ||
+ (myStr == "constructor" && n == 9) ||
+ (myStr == "destructor" && n == 7))
+ {
+ for (unsigned int i = 4; i < n-1; i++)
+ {
+ tcl_codify_cmd("NULL",i);
+ }
+ Entry *myEntry;
+ QCString myMethod;
+ tcl_name(myScan->ns,(*tcl.list_commandwords.at(n==11?6:4)).utf8(),myNs,myMethod);
+ // code snippet taken from tcl_command_METHOD()/tcl_command_CONSTRUCTOR
+ tcl.fn.remove(myMethod);
+ tcl.entry_current->section = Entry::FUNCTION_SEC;
+ tcl.entry_current->mtype = Method;
+ tcl.entry_current->name = myMethod;
+ tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->bodyLine = tcl.line_body0;
+ tcl.entry_current->endBodyLine = tcl.line_body1;
+ tcl_protection(tcl.entry_current);
+ if (n==11)
+ {
+ tcl_command_ARGLIST(*tcl.list_commandwords.at(8));
+ }
+ else if (n==9)
+ {
+ tcl_command_ARGLIST(*tcl.list_commandwords.at(6));
+ }
+ if (myEntryCl) myEntryCl->addSubEntry(tcl.entry_current);
+ tcl.fn.insert(myMethod,tcl.entry_current);
+ myEntry = tcl.entry_current;
+ myScan = tcl_scan_start('?',*tcl.list_commandwords.at(n-1),
+ myNs, myEntryCl, myEntry);
+ }
+ else
{
- for (uint i=5;i<tcl.list_commandwords.count();i++)
+ // The general case
+ // Simply concat all arguments into a script.
+ // Note: all documentation collected just before the
+ // oo::define command is lost
+ if (tcl.list_commandwords.count() > 5)
{
- myStr.append((*tcl.list_commandwords.at(i)).utf8());
+ for (uint i=5;i<tcl.list_commandwords.count();i++)
+ {
+ myStr.append((*tcl.list_commandwords.at(i)).utf8());
+ }
+ tcl.word_is=' ';
}
- tcl.word_is=' ';
+ myScan = tcl_scan_start(tcl.word_is,myStr,myName,myEntryCl,NULL);
}
- myScan = tcl_scan_start(tcl.word_is,myStr,myName,myEntryCl,NULL);
}
//! Handle \c variable statements.
@@ -2458,9 +2685,26 @@ tcl_inf("->\n");
}
/*
* Start of internal tcl keywords
- * Ready: if, for, foreach, while
- * TODO: switch, eval, ?
+ * Ready: switch, eval, catch, if, for, foreach, while
*/
+ if (myStr=="switch")
+ {
+ if (tcl.list_commandwords.count() < 5) {myLine=__LINE__;goto command_warn;}
+ tcl_command_SWITCH();
+ goto command_end;
+ }
+ if (myStr=="eval")
+ {
+ if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
+ tcl_command_EVAL();
+ goto command_end;
+ }
+ if (myStr=="catch")
+ {
+ if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
+ tcl_command_CATCH();
+ goto command_end;
+ }
if (myStr=="for")
{
if (tcl.list_commandwords.count() != 9) {myLine=__LINE__;goto command_warn;}
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index f74a6a2..c36042b 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -678,9 +678,10 @@ void XmlDocVisitor::visitPre(DocImage *img)
m_t << "<image type=\"";
switch(img->type())
{
- case DocImage::Html: m_t << "html"; break;
- case DocImage::Latex: m_t << "latex"; break;
- case DocImage::Rtf: m_t << "rtf"; break;
+ case DocImage::Html: m_t << "html"; break;
+ case DocImage::Latex: m_t << "latex"; break;
+ case DocImage::Rtf: m_t << "rtf"; break;
+ case DocImage::DocBook: m_t << "docbook"; break;
}
m_t << "\"";
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index efddcd4..2bb5734 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -727,10 +727,26 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (md->isGettable()) t << "yes"; else t << "no";
t << "\"";
+ t << " privategettable=\"";
+ if (md->isPrivateGettable()) t << "yes"; else t << "no";
+ t << "\"";
+
+ t << " protectedgettable=\"";
+ if (md->isProtectedGettable()) t << "yes"; else t << "no";
+ t << "\"";
+
t << " settable=\"";
if (md->isSettable()) t << "yes"; else t << "no";
t << "\"";
+ t << " privatesettable=\"";
+ if (md->isPrivateSettable()) t << "yes"; else t << "no";
+ t << "\"";
+
+ t << " protectedsettable=\"";
+ if (md->isProtectedSettable()) t << "yes"; else t << "no";
+ t << "\"";
+
if (md->isAssign() || md->isCopy() || md->isRetain() || md->isStrong() || md->isWeak())
{
t << " accessor=\"";