Commit fa7e8208 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.14

parent 37dc8d46
......@@ -95,7 +95,7 @@ IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = NO
GENERATE_HTML = YES
HTML_OUTPUT =
HTML_HEADER =
HTML_FOOTER =
......@@ -140,7 +140,7 @@ MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = YES
GENERATE_XML = NO
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
......@@ -168,7 +168,7 @@ PERL_PATH = /usr/bin/perl
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
HAVE_DOT = NO
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
TEMPLATE_RELATIONS = YES
......@@ -176,6 +176,7 @@ HIDE_UNDOC_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 1024
......
DOXYGEN Version 1.2.13-20020210
DOXYGEN Version 1.2.14
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (10 February 2002)
Dimitri van Heesch (17 February 2002)
DOXYGEN Version 1.2.13_20020210
DOXYGEN Version 1.2.14
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (10 February 2002)
Dimitri van Heesch (dimitri@stack.nl) (17 February 2002)
1.2.13-20020210
1.2.14
......@@ -151,7 +151,7 @@ PERL_PATH =
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
HAVE_DOT = YES
HAVE_DOT = NO
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
TEMPLATE_RELATIONS = YES
......
......@@ -249,10 +249,15 @@ class IDocRef : public IDoc
class IDocVariableList : public IDoc
{
public:
virtual IDocIterator *entries() const = 0;
};
class IDocVariableListEntry : public IDoc
{
public:
virtual QString term() const = 0;
virtual IDocPara *description() const = 0;
};
class IDocHRuler : public IDoc
......
......@@ -805,6 +805,11 @@ void VariableListHandler::startListItem(const QXmlAttributes& attrib)
m_curEntry->startListItem(attrib);
}
IDocIterator *VariableListHandler::entries() const
{
return new VariableListIterator(*this);
}
//----------------------------------------------------------------------
// HighlightHandler
//----------------------------------------------------------------------
......
......@@ -533,7 +533,8 @@ class SimpleSectHandler : public IDocSimpleSect,
/* \brief Node representing an named item of a VariableList.
*
*/
class VariableListEntryHandler : public IDocVariableListEntry, public BaseHandler<VariableListEntryHandler>
class VariableListEntryHandler : public IDocVariableListEntry,
public BaseHandler<VariableListEntryHandler>
{
public:
virtual void startVarListEntry(const QXmlAttributes& attrib);
......@@ -549,6 +550,8 @@ class VariableListEntryHandler : public IDocVariableListEntry, public BaseHandle
// IDocVariableListEntry
virtual Kind kind() const { return VariableListEntry; }
virtual QString term() const { return m_term; }
virtual IDocPara *description() const { return m_description; }
private:
IBaseHandler *m_parent;
......@@ -562,8 +565,11 @@ class VariableListEntryHandler : public IDocVariableListEntry, public BaseHandle
*
*/
// children: varlistentry, listitem
class VariableListHandler : public IDocVariableList, public BaseHandler<VariableListHandler>
class VariableListHandler : public IDocVariableList,
public BaseHandler<VariableListHandler>
{
friend class VariableListIterator;
public:
virtual void startVariableList(const QXmlAttributes& attrib);
virtual void endVariableList();
......@@ -575,6 +581,7 @@ class VariableListHandler : public IDocVariableList, public BaseHandler<Variable
// IDocVariableList
virtual Kind kind() const { return VariableList; }
virtual IDocIterator *entries() const;
private:
IBaseHandler *m_parent;
......@@ -582,6 +589,13 @@ class VariableListHandler : public IDocVariableList, public BaseHandler<Variable
VariableListEntryHandler *m_curEntry;
};
class VariableListIterator : public BaseIterator<IDocIterator,IDoc,VariableListEntryHandler>
{
public:
VariableListIterator(const VariableListHandler &handler) :
BaseIterator<IDocIterator,IDoc,VariableListEntryHandler>(handler.m_entries) {}
};
//-----------------------------------------------------------------------------
/*! \brief Node representing a highlighted text fragment.
......
......@@ -249,10 +249,15 @@ class IDocRef : public IDoc
class IDocVariableList : public IDoc
{
public:
virtual IDocIterator *entries() const = 0;
};
class IDocVariableListEntry : public IDoc
{
public:
virtual QString term() const = 0;
virtual IDocPara *description() const = 0;
};
class IDocHRuler : public IDoc
......
......@@ -116,9 +116,7 @@ void DumpDoc(IDoc *doc)
{
IDocParameterList *list = dynamic_cast<IDocParameterList*>(doc);
printf(" --- parameter list type=%d --- \n",list->listType());
IDocListItem *li = dynamic_cast<IDocListItem*>(doc);
ASSERT(li!=0);
IDocIterator *di = li->contents();
IDocIterator *di = list->params();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
......@@ -166,14 +164,26 @@ void DumpDoc(IDoc *doc)
break;
case IDoc::VariableList:
{
IDocVariableList *vl = dynamic_cast<IDocVariableList*>(vl);
printf(" --- start variablelist --- \n");
IDocVariableList *vl = dynamic_cast<IDocVariableList*>(doc);
ASSERT(vl!=0);
IDocIterator *di = vl->entries();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc);
}
di->release();
printf(" --- end variablelist --- \n");
}
break;
case IDoc::VariableListEntry:
{
IDocVariableListEntry *vle = dynamic_cast<IDocVariableListEntry*>(vle);
IDocVariableListEntry *vle = dynamic_cast<IDocVariableListEntry*>(doc);
ASSERT(vle!=0);
printf(" --- start variablelistentry term=%s --- \n",vle->term().data());
DumpDoc(vle->description());
printf(" --- end variablelistentry --- \n");
}
break;
case IDoc::HRuler:
......
......@@ -10,15 +10,18 @@
# See the GNU General Public License for more details.
#
all: config.h config.l Makefile.doxywizard
all: config.h config.l version.cpp Makefile.doxywizard
$(MAKE) -f Makefile.doxywizard $@
config.h:
config.h: ../../src/config.h
$(CP) ../../src/config.h config.h
config.l:
config.l: ../../src/config.l
$(CP) ../../src/config.l config.l
version.cpp:
$(CP) ../../src/version.cpp version.cpp
Makefile.doxywizard: doxywizard.pro
$(ENV) $(PERL) $(TMAKE) doxywizard.pro >Makefile.doxywizard
......@@ -30,7 +33,7 @@ clean: Makefile.doxywizard
$(RM) config.cpp
distclean: clean
$(RM) Makefile.doxywizard config.l config.h
$(RM) Makefile.doxywizard config.l config.h version.cpp
install:
$(INSTTOOL) -d $(INSTALL)/bin
......
......@@ -313,7 +313,7 @@ void Wizard::about()
"<qt><center>A tool to create and edit configuration files "
"that can be read by doxygen.</center><p>"
"<center>Written by Dimitri van Heesch</center><p>"
"<center>(c) 2000-2001</center></qt>"
"<center>(c) 2000-2002</center></qt>"
);
}
......
......@@ -83,6 +83,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_distribute_group_doc DISTRIBUTE_GROUP_DOC
<li> \refitem cfg_doc_abspath DOC_ABSPATH
<li> \refitem cfg_doc_url DOC_URL
<li> \refitem cfg_dot_image_format DOT_IMAGE_FORMAT
<li> \refitem cfg_dot_path DOT_PATH
<li> \refitem cfg_dotfile_dirs DOTFILE_DIRS
<li> \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING
......@@ -1273,6 +1274,13 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
If the \c GRAPHICAL_HIERARCHY and \c HAVE_DOT tags are set to \c YES then
doxygen will graphical hierarchy of all classes instead of a textual one.
\anchor cfg_dot_image_format
<dt>\c DOT_IMAGE_FORMAT <dd>
\addindex DOT_IMAGE_FORMAT
The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
generated by dot. Possible values are gif, jpg, and png.
If left blank gif will be used.
\anchor cfg_dot_path
<dt>\c DOT_PATH <dd>
\addindex DOT_PATH
......
......@@ -533,9 +533,11 @@ To install doxygen, just copy the binaries from the <code>bin</code> directory
to a location somewhere in the path. Alternatively, you can include
the <code>bin</code> directory of the distribution to the path.
<!--
For running doxywizard you need to install the non-commercial version of
the Qt library first. This library can be downloaded from
http://www.trolltech.com/products/download/qt-win-noncomm.html
-->
\subsection build_tools Tools used to develop doxygen
......
......@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
Currently (version 1.2.13-20020203), 25 languages
Currently (version 1.2.13-20020210), 25 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German,
......@@ -108,7 +108,7 @@ when the translator was updated.
<TD>German</TD>
<TD>Jens Seidel<br>Jens Breitenstein</TD>
<TD>jensseidel@NOSPAM.users.sf.net<br>Jens.Breitenstein@NOSPAM.tlc.de</TD>
<TD>1.2.13</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Greek</TD>
......@@ -230,7 +230,7 @@ when the translator was updated.
\hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\
\hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & 1.2.13 \\
German & Jens Seidel & {\tt jensseidel@users.sf.net} & up-to-date \\
& Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} & \\
\hline
Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
......
......@@ -63,6 +63,12 @@ Makefile. It contains of a number of assignments (tags) of the form:
You can probably leave the values of most tags in a generated template
configuration file to their default value. See section \ref config for
more details about the configuration file.
If you do not like to edit the config file with a text editor, you should
have a look at \ref doxywizard_usage "doxywizard", which is a GUI
front-end that can create, read and write doxygen configuration files,
and allows setting configuration options by entering them via dialogs.
For a small project consisting of a few C and/or C++ source
and header files, you can leave
\ref cfg_input "INPUT" tag empty and doxygen will search for sources in
......@@ -79,6 +85,9 @@ For recursive parsing of a source tree you must set
the \ref cfg_recursive "RECURSIVE" tag to \c YES. To further fine-tune the
list of files that is parsed the \ref cfg_exclude "EXCLUDE" and
\ref cfg_exclude_patterns "EXCLUDE_PATTERNS" tags can be used.
To omit all \c test directories from a source tree for instance, one could use:
\verbatim EXCLUDE_PATTERNS = */test/*
\endverbatim
If you start using doxygen for an existing project (thus without any
documentation that doxygen is aware of), you can still get an idea of
......@@ -94,7 +103,7 @@ a (documented) entity with its definition in the source files. Doxygen will
generate such cross-references if you set
the \ref cfg_source_browser "SOURCE_BROWSER" tag to \c YES.
It can also include the sources directly into the documentation by setting
\ref cfg_inline_sources "INLINE_SOURCES" to \c YES (this can be handly for
\ref cfg_inline_sources "INLINE_SOURCES" to \c YES (this can be handy for
code reviews for instance).
\subsection step2 Step 2: Running doxygen
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.2.13_20020210
Version: 1.2.14
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -1271,17 +1271,11 @@ void ClassDef::writeMemberList(OutputList &ol)
MemberDef *md=mi->memberDef;
ClassDef *cd=md->getClassDef();
Protection prot = mi->prot;
Specifier virt=md->virtualness();
//printf("%s: Member %s of class %s md->protection()=%d mi->prot=%d prot=%d inherited=%d\n",
// name().data(),md->name().data(),cd->name().data(),md->protection(),mi->prot,prot,mi->inherited);
Specifier virt=md->virtualness();
MemberDef *rmd=md->reimplements();
while (rmd && virt==Normal)
{
virt = rmd->virtualness()==Normal ? Normal : Virtual;
rmd = rmd->reimplements();
}
if (cd && !md->name().isEmpty() && md->name()[0]!='@')
{
......
......@@ -963,6 +963,20 @@ void Config::check()
}
s=aliasList.next();
}
// check dot image format
QCString &dotImageFormat=Config_getEnum("DOT_IMAGE_FORMAT");
dotImageFormat=dotImageFormat.stripWhiteSpace();
if (dotImageFormat.isEmpty())
{
dotImageFormat = "gif";
}
else if (dotImageFormat!="gif" && dotImageFormat!="png" && dotImageFormat!="jpg")
{
config_err("Invalid value for DOT_IMAGE_FORMAT: `%s'. Using the default.\n",dotImageFormat.data());
dotImageFormat = "gif";
}
// check dot path
QCString &dotPath = Config_getString("DOT_PATH");
......@@ -2248,6 +2262,17 @@ void Config::create()
TRUE
);
cb->addDependency("HAVE_DOT");
ce = addEnum(
"DOT_IMAGE_FORMAT",
"The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \n"
"generated by dot. Possible values are gif, jpg, and png\n"
"If left blank gif will be used. \n",
"gif"
);
ce->addValue("gif");
ce->addValue("jpg");
ce->addValue("png");
ce->addDependency("HAVE_DOT");
cs = addString(
"DOT_PATH",
"The tag DOT_PATH can be used to specify the path where the dot tool can be \n"
......
......@@ -727,12 +727,15 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
switch(type)
{
case IT_Html:
if (!Config_getBool("GENERATE_HTML")) return result;
outputDir = Config_getString("HTML_OUTPUT");
break;
case IT_Latex:
if (!Config_getBool("GENERATE_LATEX")) return result;
outputDir = Config_getString("LATEX_OUTPUT");
break;
case IT_RTF:
if (!Config_getBool("GENERATE_RTF")) return result;
outputDir = Config_getString("RTF_OUTPUT");
break;
}
......@@ -884,7 +887,7 @@ static void checkArgName(const QCString &name)
return;
}
}
printf("member type=%d\n",memberDef->memberType());
//printf("member type=%d\n",memberDef->memberType());
QCString scope=memberDef->getScopeString();
if (!scope.isEmpty()) scope+="::"; else scope="";
warn(memberDef->docFile(),memberDef->docLine(),
......
......@@ -336,7 +336,7 @@ void DotNode::writeBox(QTextStream &t,
t << " Node" << m_number << " [shape=\"box\",label=\""
<< convertLabel(m_label)
<< "\",fontsize=10,height=0.2,width=0.4";
if (format==GIF) t << ",fontname=\"doxfont\"";
if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << ",color=\"" << labCol << "\"";
if (m_isRoot)
{
......@@ -369,7 +369,7 @@ void DotNode::writeArrow(QTextStream &t,
{
t << ",label=\"" << ei->m_label << "\"";
}
if (format==GIF) t << ",fontname=\"doxfont\"";
if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << "];" << endl;
}
......@@ -687,10 +687,11 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
for (dnli.toFirst();(n=dnli.current());++dnli)
{
QCString baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
baseName.sprintf("inherit_graph_%d",count++);
baseName = convertNameToFile(baseName);
QCString dotName=baseName+".dot";
QCString gifName=baseName+".gif";
QCString imgName=baseName+"."+ imgExt;
QCString mapName=baseName+".map";
QFile f(dotName);
......@@ -703,14 +704,15 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
DotNode *node;
for (;(node=dnli2.current());++dnli2)
{
if (node->m_subgraphId==n->m_subgraphId) node->write(t,GIF,FALSE,TRUE);
if (node->m_subgraphId==n->m_subgraphId) node->write(t,BITMAP,FALSE,TRUE);
}
t << "}" << endl;
f.close();
QCString dotArgs(4096);
dotArgs.sprintf("-Tgif \"%s\" -o \"%s\"",dotName.data(),gifName.data());
//printf("Running: dot -Tgif %s -o %s\n",dotName.data(),gifName.data());
dotArgs.sprintf("-T%s \"%s\" -o \"%s\"",
imgExt.data(), dotName.data(),imgName.data());
//printf("Running: dot -T%s %s -o %s\n",imgExt.data(),dotName.data(),imgName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
......@@ -726,7 +728,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
return;
}
QCString mapLabel = convertNameToFile(n->m_label);
out << "<tr><td><img src=\"" << gifName << "\" border=\"0\" usemap=\"#"
out << "<tr><td><img src=\"" << imgName << "\" border=\"0\" usemap=\"#"
<< mapLabel << "_map\"></td></tr>" << endl;
out << "<map name=\"" << mapLabel << "_map\">" << endl;
convertMapFile(out,mapName);
......@@ -1294,11 +1296,12 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
findMaximalDotGraph(m_startNode,m_maxDistance,baseName,
thisDir,format,!isTBRank,m_graphType==Inheritance);
if (format==GIF) // run dot to create a .gif image
if (format==BITMAP) // run dot to create a bitmap image
{
QCString dotArgs(4096);
dotArgs.sprintf("-Tgif \"%s.dot\" -o \"%s.gif\"",
baseName.data(),baseName.data());
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s.%s\"",
imgExt.data(),baseName.data(),baseName.data(),imgExt.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Error: Problems running dot. Check your installation!\n");
......@@ -1316,7 +1319,8 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
return baseName;
}
QCString mapLabel = convertNameToFile(m_startNode->m_label+"_"+mapName);
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapLabel << "\" alt=\"";
switch (m_graphType)
{
......@@ -1520,12 +1524,13 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
findMaximalDotGraph(m_startNode,m_maxDistance,baseName,thisDir,format,
FALSE,FALSE,!m_inverse);
if (format==GIF)
if (format==BITMAP)
{
// run dot to create a .gif image
// run dot to create a bitmap image
QCString dotArgs(4096);
dotArgs.sprintf("-Tgif \"%s.dot\" -o \"%s.gif\"",
baseName.data(),baseName.data());
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s.%s\"",
imgExt.data(),baseName.data(),baseName.data(),imgExt.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
......@@ -1545,8 +1550,9 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
return baseName;
}
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
<< mapName << "_map\" alt=\"";
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapName << "_map\" alt=\"";
if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph";
out << "\">";
out << "</center>" << endl;
......@@ -1633,43 +1639,25 @@ void generateGraphLegend(const char *path)
return;
}
QTextStream dotText(&dotFile);
#if 0
dotText << "digraph inheritance\n";
dotText << "{\n";
dotText << " Node7 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node8 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node8 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_publicbase" << htmlFileExtension << "\"];\n";
dotText << " Node9 -> Node8 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node9 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"red\",URL=\"$class_truncated" << htmlFileExtension << "\"];\n";
dotText << " Node11 -> Node7 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node11 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_protectedbase" << htmlFileExtension << "\"];\n";
dotText << " Node12 -> Node7 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node12 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_privatebase" << htmlFileExtension << "\"];\n";
dotText << " Node13 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node13 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey75\"];\n";
dotText << " Node14 -> Node7 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n";
dotText << " Node14 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_used" << htmlFileExtension << "\"];\n";
dotText << "}\n";
#endif
dotText << "digraph inheritance\n";
dotText << "{\n";
dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classPublicBase" << htmlFileExtension << "\"];\n";
dotText << " Node11 -> Node10 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node11 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"red\",URL=\"$classTruncated" << htmlFileExtension << "\"];\n";
dotText << " Node13 -> Node9 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classProtectedBase" << htmlFileExtension << "\"];\n";
dotText << " Node14 -> Node9 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classPrivateBase" << htmlFileExtension << "\"];\n";
dotText << " Node15 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node15 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey75\"];\n";
dotText << " Node16 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classTempl" << htmlFileExtension << "\"];\n";
dotText << " Node17 -> Node16 [dir=back,color=\"orange\",fontsize=10,style=\"dashed\",label=\"< int >\",fontname=\"doxfont\"];\n";
dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classTempl" << htmlFileExtension << "\"];\n";
dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n";
dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classUsed" << htmlFileExtension << "\"];\n";
dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n";
dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classPublicBase" << htmlFileExtension << "\"];\n";
dotText << " Node11 -> Node10 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n";
dotText << " Node11 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"red\",URL=\"$classTruncated" << htmlFileExtension << "\"];\n";
dotText << " Node13 -> Node9 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n";
dotText << " Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classProtectedBase" << htmlFileExtension << "\"];\n";
dotText << " Node14 -> Node9 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n";
dotText << " Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classPrivateBase" << htmlFileExtension << "\"];\n";
dotText << " Node15 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n";
dotText << " Node15 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"grey75\"];\n";
dotText << " Node16 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n";
dotText << " Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classTempl" << htmlFileExtension << "\"];\n";
dotText << " Node17 -> Node16 [dir=back,color=\"orange\",fontsize=10,style=\"dashed\",label=\"< int >\",fontname=\"Helvetica\"];\n";
dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classTempl" << htmlFileExtension << "\"];\n";
dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"Helvetica\"];\n";
dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classUsed" << htmlFileExtension << "\"];\n";
dotText << "}\n";
dotFile.close();
......@@ -1683,9 +1671,10 @@ void generateGraphLegend(const char *path)
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
// run dot to generate the a .gif image from the graph
// run dot to generate the a bitmap image from the graph
QCString dotArgs(4096);
dotArgs.sprintf("-Tgif graph_legend.dot -o graph_legend.gif");
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
dotArgs.sprintf("-T%s graph_legend.dot -o graph_legend.%s",imgExt.data(),imgExt.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
......@@ -1700,9 +1689,11 @@ void writeDotGraphFromFile(const char *inFile,const char *outFile,
GraphOutputFormat format)
{
QCString dotArgs(4096);
if (format==GIF)
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (format==BITMAP)
{
dotArgs.sprintf("-Tgif \"%s\" -o \"%s.gif\"",inFile,outFile);
dotArgs.sprintf("-T%s \"%s\" -o \"%s.%s\"",imgExt.data(),
inFile,outFile,imgExt.data());
}
else // format==EPS
{
......
......@@ -27,7 +27,7 @@ class QTextStream;
class DotNodeList;
class ClassSDict;
enum GraphOutputFormat { GIF , EPS };
enum GraphOutputFormat { BITMAP , EPS };
struct EdgeInfo
{
......
/******************************************************************************
*
* $Id$
*
*
*
* Copyright (C) 1997-2002 by Dimitri van Heesch.
......@@ -1294,9 +1294,14 @@ static MemberDef *addVariableToFile(
MemberDef *md;
for (mni.toFirst();(md=mni.current());++mni)
{
if ((nd==0 && md->getFileDef() &&
root->fileName==md->getFileDef()->absFilePath())
|| (nd!=0 && md->getNamespaceDef()==nd))
if (
((nd==0 && md->getFileDef() &&
root->fileName==md->getFileDef()->absFilePath()
)
|| (nd!=0 && md->getNamespaceDef()==nd)
)
&& !md->isDefine() // function style #define's can be "overloaded" by typedefs or variables
)
// variable already in the scope
{
addMemberDocs(root,md,def,0,FALSE);
......
......@@ -755,8 +755,6 @@ void HtmlGenerator::startMemberDescription()
DBG_HTML(t << "<!-- startMemberDescription -->" << endl)
if (Config_getBool("HTML_ALIGN_MEMBERS"))
{
//t << "<tr><td><img src=null.gif></td><td><img src=null.gif></td>"
// "<td></td><td><font size=-1><em>";
t << "<tr><td>&nbsp;</td><td><font size=-1><em>";
}
else
......@@ -922,9 +920,11 @@ void HtmlGenerator::startDotFile(const char *name,bool hasCaption)
"/"
#endif
+baseName;
writeDotGraphFromFile(name,outName,GIF);
writeDotGraphFromFile(name,outName,BITMAP);
t << "<div align=\"center\">" << endl;
t << "<img src=\"" << baseName << ".gif\" alt=\"" << baseName << "\">" << endl;
t << "<img src=\"" << baseName << "."
<< Config_getEnum("DOT_IMAGE_FORMAT") << "\" alt=\""
<< baseName << "\">" << endl;
if (hasCaption)
{
t << "<p><strong>";
......@@ -1068,7 +1068,7 @@ void HtmlGenerator::startDotGraph()
void HtmlGenerator::endDotGraph(DotClassGraph &g)
{
g.writeGraph(t,GIF,Config_getString("HTML_OUTPUT"));
g.writeGraph(t,BITMAP,Config_getString("HTML_OUTPUT"));
}
void HtmlGenerator::startInclDepGraph()
......@@ -1077,7 +1077,7 @@ void HtmlGenerator::startInclDepGraph()
void HtmlGenerator::endInclDepGraph(DotInclDepGraph &g)
{
g.writeGraph(t,GIF,Config_getString("HTML_OUTPUT"));
g.writeGraph(t,BITMAP,Config_getString("HTML_OUTPUT"));
}
void HtmlGenerator::writeGraphicalHierarchy(DotGfxHierarchyTable &g)
......
......@@ -3180,7 +3180,7 @@ void writeSearchButton(const char *dir)
void writeDoxFont(const char *dir)
{
QCString fileName=(QCString)dir+"/doxfont.ttf";
QCString fileName=(QCString)dir+"/Helvetica.ttf";
QFile f(fileName);
if (f.open(IO_WriteOnly))
f.writeBlock((char *)doxfont_data,doxfont_len);
......@@ -3194,5 +3194,5 @@ void writeDoxFont(const char *dir)
void removeDoxFont(const char *dir)
{
QDir d(dir);
d.remove("doxfont.ttf");
d.remove("Helvetica.ttf");
}
......@@ -1114,12 +1114,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
Specifier lvirt=virtualness();
MemberDef *rmd=reimplements();
while (rmd && lvirt==Normal)
{
lvirt = rmd->virtualness()==Normal ? Normal : Virtual;
rmd = rmd->reimplements();
}
if (protection()!=Public || lvirt!=Normal ||
isFriend() || isRelated() || isExplicit() ||
......@@ -1725,3 +1719,15 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl)
classSectionSDict->append((int)d,sl);
}
Specifier MemberDef::virtualness() const
{
Specifier v = virt;
MemberDef *rmd = reimplements();
while (rmd && v==Normal)
{
v = rmd->virtualness()==Normal ? Normal : Virtual;
rmd = rmd->reimplements();
}
return v;
}
......@@ -99,7 +99,7 @@ class MemberDef : public Definition
// direct kind info
Protection protection() const { return prot; }
Specifier virtualness() const { return virt; }
Specifier virtualness() const;
MemberType memberType() const { return mtype; }
// convenience methods
......
......@@ -449,7 +449,7 @@ void MemberList::writeDeclarations(OutputList &ol,
{
//printf("Member group has docs!\n");
ol.startMemberGroupDocs();
parseDoc(ol,"<generated>",1,0,0,mg->documentation());
parseDoc(ol,"<generated>",1,0,0,mg->documentation()+"\n");
ol.endMemberGroupDocs();
}
ol.startMemberGroup();
......
......@@ -2275,7 +2275,7 @@ void RTFGenerator::startDotFile(const char *name,bool)
"/"
#endif
+baseName;
writeDotGraphFromFile(name,outName,GIF);
writeDotGraphFromFile(name,outName,BITMAP);
newParagraph();
t << "{" << endl;
t << Rtf_Style_Reset << endl;
......@@ -2631,13 +2631,13 @@ void RTFGenerator::endDotGraph(DotClassGraph &g)
newParagraph();
QCString fileName =
g.writeGraph(t,GIF,Config_getString("RTF_OUTPUT"),TRUE,FALSE);
g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),TRUE,FALSE);
// display the file
t << "{" << endl;
t << Rtf_Style_Reset << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << fileName << ".gif";
t << fileName << "." << Config_getEnum("DOT_IMAGE_FORMAT");
t << " \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
t << "}" << endl;
}
......@@ -2650,13 +2650,13 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
{
newParagraph();
QCString fileName = g.writeGraph(t,GIF,Config_getString("RTF_OUTPUT"),FALSE);
QCString fileName = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),FALSE);
// display the file
t << "{" << endl;
t << Rtf_Style_Reset << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << fileName << ".gif";
t << fileName << "." << Config_getEnum("DOT_IMAGE_FORMAT");
t << " \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
t << "}" << endl;
}
......
......@@ -2090,6 +2090,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN( CopyArgComment );
}
}
<CopyArgComment>^{B}*"*"+/{BN}+
<CopyArgComment>[^\n\*]+ { fullArgString+=yytext; }
<CopyArgComment>"*/" { fullArgString+=yytext;
if (lastCopyArgChar!=0)
......@@ -3445,7 +3446,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCode>"//" {
*pSkipDoc+=yytext;
}
<SkipCode>"/*" {
<SkipCode>"/*"|"*/" {
*pSkipDoc+=yytext;
}
<SkipCode>[^ \<\*\t\/\\\n]+ {
......@@ -3571,7 +3572,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(lastFormulaContext);
}
<ReadFormulaLong,ReadFormulaShort>. { formulaText+=*yytext; }
<ExampleDoc,PageDoc,ClassDocBrief,SkipCode,ClassDoc,ReadFormulaShort,ReadFormulaLong>{B}*"*/" {
<ExampleDoc,PageDoc,ClassDocBrief,ClassDoc,ReadFormulaShort,ReadFormulaLong>{B}*"*/" {
checkDocs();
//printf("current->section=%x\n",current->section);
if (YY_START==SkipCode) // premature end of code block
......
......@@ -58,15 +58,17 @@
// - trCompoundReference(), trLegendDocs() updated
// - Removed some TODO's
//
// 2002/02/13 Oliver Brandt (o.brandt@tu-bs.de)
// - Updated for "new since 1.2.13" version
// - Removed some TODO's
//
// Todo:
// - translation of all Config_getBool("OPTIMIZE_OUTPUT_FOR_C")
// strings (see translator_en.h)
// - see FIXME
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
class TranslatorGerman : public TranslatorAdapter_1_2_13
class TranslatorGerman : public Translator
{
public:
......@@ -123,7 +125,9 @@ class TranslatorGerman : public TranslatorAdapter_1_2_13
/* header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
{ return "Dokumentation der Datenelemente"; }
{ /* No difference if "OPTIMIZE_OUTPUT_FOR_C" is set! */
return "Dokumentation der Datenelemente";
}
/* this is the text of a link put after brief descriptions. */
virtual QCString trMore()
......@@ -215,6 +219,7 @@ class TranslatorGerman : public TranslatorAdapter_1_2_13
/* This is put above each page as a link to all members of files. */
virtual QCString trFileMembers()
/* No difference if "OPTIMIZE_OUTPUT_FOR_C" is set! */
{ return "Datei-Elemente"; }
/* This is put above each page as a link to all related pages. */
......@@ -340,11 +345,9 @@ class TranslatorGerman : public TranslatorAdapter_1_2_13
* annotated compound index.
*/
virtual QCString trCompoundIndex()
/* No difference if "OPTIMIZE_OUTPUT_FOR_C" is set! */
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
return "Datenstruktur-Verzeichnis";
else
return "Datenstruktur-Verzeichnis";
return "Datenstruktur-Verzeichnis";
}
/* This is used in LaTeX as the title of the chapter with the
......@@ -1341,7 +1344,7 @@ class TranslatorGerman : public TranslatorAdapter_1_2_13
virtual QCString trGlobal(bool first_capital, bool singular)
{
QCString result((first_capital ? "Global" : "global")); // FIXME
if (!singular) result+="s";
if (!singular) result+="";
return result;
}
......@@ -1368,7 +1371,27 @@ class TranslatorGerman : public TranslatorAdapter_1_2_13
virtual QCString trReferences()
{
return "Benutzt";
}
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/* used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return "Implementiert " + trWriteList(numEntries) + ".";
}
/* used in member documentation blocks to produce a list of
* all members that implement this abstract member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return "Implementiert in " + trWriteList(numEntries) + ".";
}
};
#endif
......
......@@ -1309,6 +1309,50 @@ static void writeTemplateLists(Definition *d,QTextStream &t)
}
}
static void writeListOfAllMember(ClassDef *cd,QTextStream &t)
{
t << " <listofallmembers>" << endl;
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;
Protection prot = mi->prot;
Specifier virt=md->virtualness();
t << " <member refid=\"" << d->getOutputFileBase() << "_" <<
md->anchor() << "\" prot=\"";
switch (prot)
{
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
}
t << "\" virt=\"";
switch(virt)
{
case Normal: t << "non-virtual"; break;
case Virtual: t << "virtual"; break;
case Pure: t << "pure-virtual"; break;
}
t << "\"";
if (!mi->ambiguityResolutionScope.isEmpty())
{
t << " ambiguityscope=\"" << mi->ambiguityResolutionScope << "\"";
}
t << "><scope>" << cd->name() << "</scope><name>" <<
md->name() << "</name></member>" << endl;
}
}
t << " </listofallmembers>" << endl;
}
static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
{
// + brief description
......@@ -1415,6 +1459,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
}
}
writeTemplateLists(cd,t);
writeListOfAllMember(cd,t);
MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment