From fa7e820834f7e7648a24accbbaa998092034c80f Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Mon, 18 Feb 2002 21:34:02 +0000 Subject: Release-1.2.14 --- Doxyfile | 7 ++- INSTALL | 4 +- README | 4 +- VERSION | 2 +- addon/doxmlparser/Doxyfile | 2 +- addon/doxmlparser/include/doxmlintf.h | 5 ++ addon/doxmlparser/src/dochandler.cpp | 5 ++ addon/doxmlparser/src/dochandler.h | 18 +++++- addon/doxmlparser/src/doxmlintf.h | 5 ++ addon/doxmlparser/test/main.cpp | 20 +++++-- addon/doxywizard/Makefile.in | 11 ++-- addon/doxywizard/doxywizard.cpp | 2 +- doc/config.doc | 8 +++ doc/install.doc | 2 + doc/language.doc | 6 +- doc/starting.doc | 11 +++- packages/rpm/doxygen.spec | 2 +- src/classdef.cpp | 8 +-- src/config.l | 25 +++++++++ src/doc.l | 5 +- src/dot.cpp | 103 ++++++++++++++++------------------ src/dot.h | 2 +- src/doxygen.cpp | 13 +++-- src/htmlgen.cpp | 12 ++-- src/logos.cpp | 4 +- src/memberdef.cpp | 18 ++++-- src/memberdef.h | 2 +- src/memberlist.cpp | 2 +- src/rtfgen.cpp | 10 ++-- src/scanner.l | 5 +- src/translator_de.h | 43 ++++++++++---- src/xmlgen.cpp | 45 +++++++++++++++ 32 files changed, 283 insertions(+), 128 deletions(-) diff --git a/Doxyfile b/Doxyfile index 376d7dd..2ccb03d 100644 --- a/Doxyfile +++ b/Doxyfile @@ -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 diff --git a/INSTALL b/INSTALL index 6c438c0..665e47b 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ -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) diff --git a/README b/README index cc5d917..f18c518 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -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) diff --git a/VERSION b/VERSION index f5f6eed..fd9d1a5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.13-20020210 +1.2.14 diff --git a/addon/doxmlparser/Doxyfile b/addon/doxmlparser/Doxyfile index 50d205a..faf4bee 100644 --- a/addon/doxmlparser/Doxyfile +++ b/addon/doxmlparser/Doxyfile @@ -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 diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h index 0ca2cc8..03a8b3a 100644 --- a/addon/doxmlparser/include/doxmlintf.h +++ b/addon/doxmlparser/include/doxmlintf.h @@ -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 diff --git a/addon/doxmlparser/src/dochandler.cpp b/addon/doxmlparser/src/dochandler.cpp index 344e457..12a3a24 100644 --- a/addon/doxmlparser/src/dochandler.cpp +++ b/addon/doxmlparser/src/dochandler.cpp @@ -805,6 +805,11 @@ void VariableListHandler::startListItem(const QXmlAttributes& attrib) m_curEntry->startListItem(attrib); } +IDocIterator *VariableListHandler::entries() const +{ + return new VariableListIterator(*this); +} + //---------------------------------------------------------------------- // HighlightHandler //---------------------------------------------------------------------- diff --git a/addon/doxmlparser/src/dochandler.h b/addon/doxmlparser/src/dochandler.h index 3aaef72..0161576 100644 --- a/addon/doxmlparser/src/dochandler.h +++ b/addon/doxmlparser/src/dochandler.h @@ -533,7 +533,8 @@ class SimpleSectHandler : public IDocSimpleSect, /* \brief Node representing an named item of a VariableList. * */ -class VariableListEntryHandler : public IDocVariableListEntry, public BaseHandler +class VariableListEntryHandler : public IDocVariableListEntry, + public BaseHandler { 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 +class VariableListHandler : public IDocVariableList, + public BaseHandler { + friend class VariableListIterator; + public: virtual void startVariableList(const QXmlAttributes& attrib); virtual void endVariableList(); @@ -575,6 +581,7 @@ class VariableListHandler : public IDocVariableList, public BaseHandler +{ + public: + VariableListIterator(const VariableListHandler &handler) : + BaseIterator(handler.m_entries) {} +}; + //----------------------------------------------------------------------------- /*! \brief Node representing a highlighted text fragment. diff --git a/addon/doxmlparser/src/doxmlintf.h b/addon/doxmlparser/src/doxmlintf.h index 0ca2cc8..03a8b3a 100644 --- a/addon/doxmlparser/src/doxmlintf.h +++ b/addon/doxmlparser/src/doxmlintf.h @@ -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 diff --git a/addon/doxmlparser/test/main.cpp b/addon/doxmlparser/test/main.cpp index 092c025..c90883e 100644 --- a/addon/doxmlparser/test/main.cpp +++ b/addon/doxmlparser/test/main.cpp @@ -116,9 +116,7 @@ void DumpDoc(IDoc *doc) { IDocParameterList *list = dynamic_cast(doc); printf(" --- parameter list type=%d --- \n",list->listType()); - IDocListItem *li = dynamic_cast(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(vl); + printf(" --- start variablelist --- \n"); + IDocVariableList *vl = dynamic_cast(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(vle); + IDocVariableListEntry *vle = dynamic_cast(doc); ASSERT(vle!=0); + printf(" --- start variablelistentry term=%s --- \n",vle->term().data()); + DumpDoc(vle->description()); + printf(" --- end variablelistentry --- \n"); } break; case IDoc::HRuler: diff --git a/addon/doxywizard/Makefile.in b/addon/doxywizard/Makefile.in index c382681..3dc316f 100644 --- a/addon/doxywizard/Makefile.in +++ b/addon/doxywizard/Makefile.in @@ -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 diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp index 5fbd5e4..58580b2 100644 --- a/addon/doxywizard/doxywizard.cpp +++ b/addon/doxywizard/doxywizard.cpp @@ -313,7 +313,7 @@ void Wizard::about() "
A tool to create and edit configuration files " "that can be read by doxygen.

" "

Written by Dimitri van Heesch

" - "

(c) 2000-2001
" + "
(c) 2000-2002
" ); } diff --git a/doc/config.doc b/doc/config.doc index b2f5ebf..8300a84 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -83,6 +83,7 @@ followed by the descriptions of the tags grouped by category.
  • \refitem cfg_distribute_group_doc DISTRIBUTE_GROUP_DOC
  • \refitem cfg_doc_abspath DOC_ABSPATH
  • \refitem cfg_doc_url DOC_URL +
  • \refitem cfg_dot_image_format DOT_IMAGE_FORMAT
  • \refitem cfg_dot_path DOT_PATH
  • \refitem cfg_dotfile_dirs DOTFILE_DIRS
  • \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING @@ -1273,6 +1274,13 @@ TAGFILES = file1=loc1 "file2 = loc2" ... 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 +
    \c DOT_IMAGE_FORMAT
    + \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
    \c DOT_PATH
    \addindex DOT_PATH diff --git a/doc/install.doc b/doc/install.doc index 0f32e75..78a61cf 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -533,9 +533,11 @@ To install doxygen, just copy the binaries from the bin directory to a location somewhere in the path. Alternatively, you can include the bin directory of the distribution to the path. + \subsection build_tools Tools used to develop doxygen diff --git a/doc/language.doc b/doc/language.doc index 369bba0..966fc6a 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -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. German Jens Seidel
    Jens Breitenstein jensseidel@NOSPAM.users.sf.net
    Jens.Breitenstein@NOSPAM.tlc.de - 1.2.13 + up-to-date Greek @@ -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 \\ diff --git a/doc/starting.doc b/doc/starting.doc index dd68d55..f7578c9 100644 --- a/doc/starting.doc +++ b/doc/starting.doc @@ -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 diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index e2ed7f0..02ed11e 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,6 +1,6 @@ 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 diff --git a/src/classdef.cpp b/src/classdef.cpp index 396d979..d37ac01 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -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]!='@') { diff --git a/src/config.l b/src/config.l index 702f652..14db2c1 100644 --- a/src/config.l +++ b/src/config.l @@ -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" diff --git a/src/doc.l b/src/doc.l index bcef896..24b3b5f 100644 --- a/src/doc.l +++ b/src/doc.l @@ -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(), diff --git a/src/dot.cpp b/src/dot.cpp index af77df0..3c8360d 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -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 << "" << endl; out << "" << 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 << "

    \"";
    \"";
    \"";"; out << "
    " << 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 { diff --git a/src/dot.h b/src/dot.h index 59d5caa..9096584 100644 --- a/src/dot.h +++ b/src/dot.h @@ -27,7 +27,7 @@ class QTextStream; class DotNodeList; class ClassSDict; -enum GraphOutputFormat { GIF , EPS }; +enum GraphOutputFormat { BITMAP , EPS }; struct EdgeInfo { diff --git a/src/doxygen.cpp b/src/doxygen.cpp index dd39762..1168e25 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * $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); diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 35002c5..747902d 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -755,8 +755,6 @@ void HtmlGenerator::startMemberDescription() DBG_HTML(t << "" << endl) if (Config_getBool("HTML_ALIGN_MEMBERS")) { - //t << "" - // ""; t << " "; } else @@ -922,9 +920,11 @@ void HtmlGenerator::startDotFile(const char *name,bool hasCaption) "/" #endif +baseName; - writeDotGraphFromFile(name,outName,GIF); + writeDotGraphFromFile(name,outName,BITMAP); t << "
    " << endl; - t << "\""" << endl; + t << "\""" << endl; if (hasCaption) { t << "

    "; @@ -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) diff --git a/src/logos.cpp b/src/logos.cpp index 293f1bd..56ae8bd 100644 --- a/src/logos.cpp +++ b/src/logos.cpp @@ -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"); } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 303d8f3..69bcf9f 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -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; +} + diff --git a/src/memberdef.h b/src/memberdef.h index acbcb8c..78818b9 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -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 diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 228232e..ffc5631 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -449,7 +449,7 @@ void MemberList::writeDeclarations(OutputList &ol, { //printf("Member group has docs!\n"); ol.startMemberGroupDocs(); - parseDoc(ol,"",1,0,0,mg->documentation()); + parseDoc(ol,"",1,0,0,mg->documentation()+"\n"); ol.endMemberGroupDocs(); } ol.startMemberGroup(); diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index bd09fc6..d83711a 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -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; } diff --git a/src/scanner.l b/src/scanner.l index b644c96..e3ca3da 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -2090,6 +2090,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) BEGIN( CopyArgComment ); } } +^{B}*"*"+/{BN}+ [^\n\*]+ { fullArgString+=yytext; } "*/" { fullArgString+=yytext; if (lastCopyArgChar!=0) @@ -3445,7 +3446,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) "//" { *pSkipDoc+=yytext; } -"/*" { +"/*"|"*/" { *pSkipDoc+=yytext; } [^ \<\*\t\/\\\n]+ { @@ -3571,7 +3572,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) BEGIN(lastFormulaContext); } . { formulaText+=*yytext; } -{B}*"*/" { +{B}*"*/" { checkDocs(); //printf("current->section=%x\n",current->section); if (YY_START==SkipCode) // premature end of code block diff --git a/src/translator_de.h b/src/translator_de.h index 082ac9d..7eaf6c0 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -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 diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 5a4a9d3..9273f63 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1309,6 +1309,50 @@ static void writeTemplateLists(Definition *d,QTextStream &t) } } +static void writeListOfAllMember(ClassDef *cd,QTextStream &t) +{ + t << " " << 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 << " 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 << ">" << cd->name() << "" << + md->name() << "" << endl; + } + } + t << " " << 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) -- cgit v0.12