From b8ff687873e37d7cf0f4e7df0fd7da3660f1999c Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 10 Feb 2008 12:31:40 +0000 Subject: Release-1.5.5 --- INSTALL | 4 +- README | 4 +- addon/doxywizard/doxywizard.cpp | 43 +---- addon/doxywizard/doxywizard.h | 4 - configure | 4 +- doc/config.doc | 28 ++- doc/maintainers.txt | 4 +- doc/xmlcmds.doc | 5 + src/classdef.cpp | 5 + src/classdef.h | 1 + src/cmdmapper.cpp | 43 ++--- src/cmdmapper.h | 46 ++--- src/code.l | 8 +- src/commentscan.l | 97 +++++----- src/compound.xsd | 1 + src/compound_xsd.h | 1 + src/config.l | 34 ++-- src/defargs.l | 14 ++ src/definition.cpp | 29 ++- src/definition.h | 2 +- src/dirdef.cpp | 140 +-------------- src/dirdef.h | 1 + src/docparser.cpp | 31 +++- src/docparser.h | 2 +- src/dot.cpp | 197 ++++++++++++++++++--- src/dot.h | 1 + src/doxygen.cpp | 54 +++++- src/entry.h | 2 +- src/filedef.cpp | 2 +- src/fortrancode.l | 2 +- src/groupdef.h | 9 + src/htmldocvisitor.cpp | 5 + src/index.cpp | 6 +- src/language.cpp | 2 +- src/latexdocvisitor.cpp | 5 + src/mandocvisitor.cpp | 5 + src/perlmodgen.cpp | 1 + src/printdocvisitor.h | 1 + src/rtfdocvisitor.cpp | 5 + src/scanner.l | 3 +- src/search.php | 2 +- src/search_php.h | 2 +- src/sortdict.h | 12 ++ src/translator_br.h | 8 +- src/translator_cn.h | 253 +++++++++++++++++++++++++- src/translator_de.h | 205 ++++++++++++++++++++- src/translator_es.h | 382 ++++++++++++++++++++++++++++++++++------ src/translator_fa.h | 358 ++++++++++++++++++++++++------------- src/translator_fr.h | 2 +- src/translator_kr.h | 13 +- src/translator_tw.h | 263 +++++++++++++++++++++------ src/translatordecoder.h | 16 +- src/vhdlscanner.l | 2 +- src/xmldocvisitor.cpp | 2 + 54 files changed, 1772 insertions(+), 599 deletions(-) diff --git a/INSTALL b/INSTALL index ddcac48..4ee04e9 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ -DOXYGEN Version 1.5.4-20080123 +DOXYGEN Version 1.5.5 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (23 January 2008) +Dimitri van Heesch (10 February 2008) diff --git a/README b/README index f3dbb49..5f443e0 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.5.4_20080123 +DOXYGEN Version 1.5.5 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) (23 January 2008) +Dimitri van Heesch (dimitri@stack.nl) (10 February 2008) diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp index 35755ce..3ef67bf 100644 --- a/addon/doxywizard/doxywizard.cpp +++ b/addon/doxywizard/doxywizard.cpp @@ -221,9 +221,6 @@ Step2::Step2(QWidget *parent) : QWidget(parent,"Step2") layout->addWidget(m_optimizeLang); layout->addStretch(1); - - connect(m_crossRef,SIGNAL(stateChanged(int)), - parent,SLOT(changeCrossRefState(int))); } bool Step2::crossReferencingEnabled() const @@ -621,44 +618,6 @@ Wizard::Wizard(QWidget *parent=0) : QTabDialog(parent) setCancelButton(); } -void Wizard::changeCallGraphState(int state) -{ - if (state==QButton::On && !m_step2->crossReferencingEnabled()) - { - if (QMessageBox::question(this,"This option depends on another option", - "The call graph option requires that cross-referencing " - "of source code is enabled.\nDo you want to enable this " - "option?",QMessageBox::Yes,QMessageBox::No)==QMessageBox::Yes) - { - m_step2->enableCrossReferencing(); - } - else - { - m_step4->disableCallGraphs(); - } - } -} - -void Wizard::changeCrossRefState(int state) -{ - if (state==QButton::Off && m_step4->callGraphEnabled()) - { - if (QMessageBox::question(this,"Another option depends on this one", - "The call graph option requires that cross-referencing " - "of source code is enabled.\nDo you want to disable the call " - "graph option?",QMessageBox::Yes,QMessageBox::No - )==QMessageBox::Yes - ) - { - m_step4->disableCallGraphs(); - } - else - { - m_step2->enableCrossReferencing(); - } - } -} - //========================================================================== MainWidget::MainWidget(QWidget *parent) @@ -1339,7 +1298,7 @@ void MainWidget::about() QTextStream t(&msg,IO_WriteOnly); t << QString("
A tool to configure and run doxygen version ")+versionString+ " on your source files.


" - "

Written by
Dimitri van Heesch
© 2000-2006

" + "

Written by
Dimitri van Heesch
© 2000-2008

" ""; QMessageBox::about(this,"Doxygen GUI",msg); } diff --git a/addon/doxywizard/doxywizard.h b/addon/doxywizard/doxywizard.h index 115a70b..0e46a53 100644 --- a/addon/doxywizard/doxywizard.h +++ b/addon/doxywizard/doxywizard.h @@ -225,10 +225,6 @@ class Wizard : public QTabDialog void setInheritanceGraph(bool enable) { m_step4->setInheritanceGraph(enable); } void setCallGraph(bool enable) { m_step4->setCallGraph(enable); } - public slots: - void changeCallGraphState(int state); - void changeCrossRefState(int state); - private: Step1 *m_step1; Step2 *m_step2; diff --git a/configure b/configure index bcbd4a8..baac773 100755 --- a/configure +++ b/configure @@ -17,10 +17,10 @@ doxygen_version_major=1 doxygen_version_minor=5 -doxygen_version_revision=4 +doxygen_version_revision=5 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. -doxygen_version_mmn=20080123 +doxygen_version_mmn=NO bin_dirs=`echo $PATH | sed -e "s/:/ /g"` diff --git a/doc/config.doc b/doc/config.doc index 3c8a6b2..6a89490 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -208,6 +208,8 @@ followed by the descriptions of the tags grouped by category. \refitem cfg_sip_support SIP_SUPPORT \refitem cfg_skip_function_macros SKIP_FUNCTION_MACROS \refitem cfg_sort_brief_docs SORT_BRIEF_DOCS +\refitem cfg_sort_by_scope_name SORT_BY_SCOPE_NAME +\refitem cfg_sort_group_names SORT_GROUP_NAMES \refitem cfg_sort_member_docs SORT_MEMBER_DOCS \refitem cfg_source_browser SOURCE_BROWSER \refitem cfg_strip_code_comments STRIP_CODE_COMMENTS @@ -682,6 +684,26 @@ function's detailed documentation block. by member name. If set to \c NO (the default) the members will appear in declaration order. + +\anchor cfg_sort_group_names +

\c SORT_GROUP_NAMES
+ \addindex SORT_GROUP_NAMES + If the \c SORT_GROUP_NAMES tag is set to \c YES then doxygen will sort the + hierarchy of group names into alphabetical order. If set to \c NO (the default) + the group names will appear in their defined order. + +\anchor cfg_sort_by_scope_name +
\c SORT_BY_SCOPE_NAME
+ \addindex SORT_BY_SCOPE_NAME + If the \c SORT_BY_SCOPE_NAME tag is set to \c YES, the class list will be + sorted by fully-qualified names, including namespaces. If set to + NO (the default), the class list will be sorted only by class name, + not including the namespace part. + @note This option is not very useful if \c HIDE_SCOPE_NAMES is set to \c YES. + @note This option applies only to the class list, not to the + alphabetical list. + + \anchor cfg_generate_deprecatedlist
\c GENERATE_DEPRECATEDLIST
\addindex GENERATE_DEPRECATEDLIST @@ -977,8 +999,10 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
\c SOURCE_BROWSER
\addindex SOURCE_BROWSER - If the \c SOURCE_BROWSER tag is set to \c YES then a list of source files will - be generated. Documented entities will be cross-referenced with these sources. + If the \c SOURCE_BROWSER tag is set to \c YES then a list of source files will \n" + be generated. Documented entities will be cross-referenced with these sources. \n" + Note: To get rid of all source code in the generated output, make sure also \n" + \c VERBATIM_HEADERS is set to NO. \n" \anchor cfg_inline_sources
\c INLINE_SOURCES
diff --git a/doc/maintainers.txt b/doc/maintainers.txt index 4f622e6..379b9d9 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -27,7 +27,7 @@ Li Daobing: lidaobing@gmail.com Wei Liu: liuwei@asiainfo.com TranslatorChinesetraditional -Daniel YC Lin: dlin@taifex.com.tw +Daniel YC Lin: dlin.tw@gmail.com Gary Lee: garywlee@gmail.com TranslatorCroatian @@ -90,7 +90,7 @@ TranslatorMacedonian Slave Jovanovski: slavejovanovski@yahoo.com TranslatorPersian -Ali Nadalizadeh: nadalisoft@yahoo.com +Ali Nadalizadeh: nadalizadeh@gmail.com TranslatorPolish Piotr Kaminski: Piotr.Kaminski@ctm.gdynia.pl diff --git a/doc/xmlcmds.doc b/doc/xmlcmds.doc index 5399ff8..7fdf034 100644 --- a/doc/xmlcmds.doc +++ b/doc/xmlcmds.doc @@ -61,6 +61,11 @@ Here is the list of tags supported by doxygen:
  • \ Identifies the brief description. Similar to using \ref cmdbrief "\\brief".
  • \ Part of a \ command. +
  • \ Marks a piece of text as the documentation + for type parameter "paramName". Similar to + using \ref cmdparam "\\param". +
  • \ Refers to a parameter with name + "paramName". Similar to using \ref cmda "\\a".
  • \ Identifies a property. Ignored by doxygen. diff --git a/src/classdef.cpp b/src/classdef.cpp index f52b083..f2edcda 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -3058,6 +3058,11 @@ QCString ClassDef::className() const return m_impl->className; }; +void ClassDef::setClassName(const char *name) +{ + m_impl->className = name; +} + void ClassDef::addListReferences() { bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); diff --git a/src/classdef.h b/src/classdef.h index 20d4df7..fbac227 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -284,6 +284,7 @@ class ClassDef : public Definition void setIsStatic(bool b); void setIsObjectiveC(bool b); void setCompoundType(CompoundType t); + void setClassName(const char *name); void setTemplateArguments(ArgumentList *al); void setTemplateBaseClassNames(QDict *templateNames); diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp index bca36df..4ad3b38 100644 --- a/src/cmdmapper.cpp +++ b/src/cmdmapper.cpp @@ -91,6 +91,7 @@ CommandMap cmdMap[] = { "version", CMD_VERSION }, { "warning", CMD_WARNING }, { "throws", CMD_EXCEPTION }, + { "tparam", CMD_TPARAM }, { "\\", CMD_BSLASH }, { "@", CMD_AT }, { "<", CMD_LESS }, @@ -154,27 +155,29 @@ CommandMap htmlTagMap[] = { "span", HTML_SPAN }, { "div", HTML_DIV }, - { "c", XML_C }, + { "c", XML_C }, // { "code", XML_CODE }, <= ambigious is also a HTML tag - { "description",XML_DESCRIPTION }, - { "example", XML_EXAMPLE }, - { "exception", XML_EXCEPTION }, - { "include", XML_INCLUDE }, - { "item", XML_ITEM }, - { "list", XML_LIST }, // type="table|bullet|number" - { "listheader", XML_LISTHEADER }, - { "para", XML_PARA }, - { "param", XML_PARAM }, - { "paramref", XML_PARAMREF }, - { "permission", XML_PERMISSION }, - { "remarks", XML_REMARKS }, - { "returns", XML_RETURNS }, - { "see", XML_SEE }, - { "seealso", XML_SEEALSO }, - { "summary", XML_SUMMARY }, - { "term", XML_TERM }, - { "value", XML_VALUE }, - { 0, 0 } + { "description", XML_DESCRIPTION }, + { "example", XML_EXAMPLE }, + { "exception", XML_EXCEPTION }, + { "include", XML_INCLUDE }, + { "item", XML_ITEM }, + { "list", XML_LIST }, // type="table|bullet|number" + { "listheader", XML_LISTHEADER }, + { "para", XML_PARA }, + { "param", XML_PARAM }, + { "paramref", XML_PARAMREF }, + { "typeparam", XML_TYPEPARAM }, + { "typeparamref", XML_TYPEPARAMREF }, + { "permission", XML_PERMISSION }, + { "remarks", XML_REMARKS }, + { "returns", XML_RETURNS }, + { "see", XML_SEE }, + { "seealso", XML_SEEALSO }, + { "summary", XML_SUMMARY }, + { "term", XML_TERM }, + { "value", XML_VALUE }, + { 0, 0 } }; //---------------------------------------------------------------------------- diff --git a/src/cmdmapper.h b/src/cmdmapper.h index 796284f..95ba3e1 100644 --- a/src/cmdmapper.h +++ b/src/cmdmapper.h @@ -109,7 +109,8 @@ enum CommandType CMD_MANONLY = 75, CMD_ENDMANONLY = 76, CMD_INCWITHLINES = 77, - CMD_INHERITDOC = 78 + CMD_INHERITDOC = 78, + CMD_TPARAM = 79 | SIMPLESECT_BIT }; enum HtmlTagType @@ -150,27 +151,28 @@ enum HtmlTagType XML_CmdMask = 0x100, - XML_C = XML_CmdMask + 0, - XML_CODE = XML_CmdMask + 1, - XML_DESCRIPTION= XML_CmdMask + 2, - XML_EXAMPLE = XML_CmdMask + 3, - XML_EXCEPTION = XML_CmdMask + 4, - XML_INCLUDE = XML_CmdMask + 5, - XML_ITEM = XML_CmdMask + 6, - XML_LIST = XML_CmdMask + 7, - XML_LISTHEADER = XML_CmdMask + 8, - XML_PARA = XML_CmdMask + 9, - XML_PARAM = XML_CmdMask + 10, - XML_PARAMREF = XML_CmdMask + 11, - XML_PERMISSION = XML_CmdMask + 12, - XML_REMARKS = XML_CmdMask + 13, - XML_RETURNS = XML_CmdMask + 14, - XML_SEE = XML_CmdMask + 15, - XML_SEEALSO = XML_CmdMask + 16, - XML_SUMMARY = XML_CmdMask + 17, - XML_TERM = XML_CmdMask + 18, - XML_VALUE = XML_CmdMask + 19 - + XML_C = XML_CmdMask + 0, + XML_CODE = XML_CmdMask + 1, + XML_DESCRIPTION = XML_CmdMask + 2, + XML_EXAMPLE = XML_CmdMask + 3, + XML_EXCEPTION = XML_CmdMask + 4, + XML_INCLUDE = XML_CmdMask + 5, + XML_ITEM = XML_CmdMask + 6, + XML_LIST = XML_CmdMask + 7, + XML_LISTHEADER = XML_CmdMask + 8, + XML_PARA = XML_CmdMask + 9, + XML_PARAM = XML_CmdMask + 10, + XML_PARAMREF = XML_CmdMask + 11, + XML_PERMISSION = XML_CmdMask + 12, + XML_REMARKS = XML_CmdMask + 13, + XML_RETURNS = XML_CmdMask + 14, + XML_SEE = XML_CmdMask + 15, + XML_SEEALSO = XML_CmdMask + 16, + XML_SUMMARY = XML_CmdMask + 17, + XML_TERM = XML_CmdMask + 18, + XML_TYPEPARAM = XML_CmdMask + 19, + XML_TYPEPARAMREF = XML_CmdMask + 20, + XML_VALUE = XML_CmdMask + 21 }; class Mapper diff --git a/src/code.l b/src/code.l index aa1b9c7..20a5fa4 100644 --- a/src/code.l +++ b/src/code.l @@ -766,9 +766,9 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst) static bool callerGraph = Config_getBool("CALLER_GRAPH"); static bool callGraph = Config_getBool("CALL_GRAPH"); + //printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data()); if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types - //printf("addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data()); - if ((referencedByRelation || callerGraph) && + if ((referencedByRelation || callerGraph || dst->hasCallerGraph()) && (src->isFunction() || src->isSlot()) ) { @@ -784,7 +784,7 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst) mdDecl->addSourceReferencedBy(src); } } - if ((referencesRelation || callGraph) && + if ((referencesRelation || callGraph || src->hasCallGraph()) && (src->isFunction() || src->isSlot()) ) { @@ -2407,7 +2407,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} g_code->codify(yytext); endFontClass(); } -"$"?"this->" { g_code->codify(yytext); } +"$"?"this->" { g_code->codify(yytext); } "."|"->" { g_code->codify(yytext); g_memCallContext = YY_START; diff --git a/src/commentscan.l b/src/commentscan.l index 115aac4..18bb9a5 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -122,33 +122,33 @@ static DocCmdMap docCmdMap[] = // command name handler function ends brief description { "brief", &handleBrief, FALSE }, { "short", &handleBrief, FALSE }, - { "fn", &handleFn, TRUE }, - { "var", &handleFn, TRUE }, - { "typedef", &handleFn, TRUE }, - { "property", &handleFn, TRUE }, - { "def", &handleDef, TRUE }, - { "overload", &handleOverload, TRUE }, - { "enum", &handleEnum, TRUE }, - { "defgroup", &handleDefGroup, TRUE }, - { "addtogroup", &handleAddToGroup, TRUE }, - { "weakgroup", &handleWeakGroup, TRUE }, - { "namespace", &handleNamespace, TRUE }, - { "package", &handlePackage, TRUE }, - { "class", &handleClass, TRUE }, - { "headerfile", &handleHeaderFile, TRUE }, - { "protocol", &handleProtocol, TRUE }, - { "category", &handleCategory, TRUE }, - { "union", &handleUnion, TRUE }, - { "struct", &handleStruct, TRUE }, - { "interface", &handleInterface, TRUE }, - { "idlexcept", &handleIdlException, TRUE }, - { "page", &handlePage, TRUE }, - { "mainpage", &handleMainpage, TRUE }, - { "file", &handleFile, TRUE }, - { "dir", &handleDir, TRUE }, - { "example", &handleExample, TRUE }, + { "fn", &handleFn, FALSE }, + { "var", &handleFn, FALSE }, + { "typedef", &handleFn, FALSE }, + { "property", &handleFn, FALSE }, + { "def", &handleDef, FALSE }, + { "overload", &handleOverload, FALSE }, + { "enum", &handleEnum, FALSE }, + { "defgroup", &handleDefGroup, FALSE }, + { "addtogroup", &handleAddToGroup, FALSE }, + { "weakgroup", &handleWeakGroup, FALSE }, + { "namespace", &handleNamespace, FALSE }, + { "package", &handlePackage, FALSE }, + { "class", &handleClass, FALSE }, + { "headerfile", &handleHeaderFile, FALSE }, + { "protocol", &handleProtocol, FALSE }, + { "category", &handleCategory, FALSE }, + { "union", &handleUnion, FALSE }, + { "struct", &handleStruct, FALSE }, + { "interface", &handleInterface, FALSE }, + { "idlexcept", &handleIdlException, FALSE }, + { "page", &handlePage, FALSE }, + { "mainpage", &handleMainpage, FALSE }, + { "file", &handleFile, FALSE }, + { "dir", &handleDir, FALSE }, + { "example", &handleExample, FALSE }, { "details", &handleDetails, TRUE }, - { "name", &handleName, TRUE }, + { "name", &handleName, FALSE }, { "todo", &handleTodo, TRUE }, { "test", &handleTest, TRUE }, { "bug", &handleBug, TRUE }, @@ -174,28 +174,28 @@ static DocCmdMap docCmdMap[] = { "dot", &handleFormatBlock, TRUE }, { "msc", &handleFormatBlock, TRUE }, { "code", &handleFormatBlock, TRUE }, - { "addindex", &handleAddIndex, TRUE }, + { "addindex", &handleAddIndex, FALSE }, { "if", &handleIf, FALSE }, { "ifnot", &handleIfNot, FALSE }, { "elseif", &handleElseIf, FALSE }, { "else", &handleElse, FALSE }, { "endif", &handleEndIf, FALSE }, - { "ingroup", &handleIngroup, TRUE }, - { "nosubgrouping", &handleNoSubGrouping, TRUE }, - { "showinitializer", &handleShowInitializer, TRUE }, - { "hideinitializer", &handleHideInitializer, TRUE }, - { "callgraph", &handleCallgraph, TRUE }, - { "callergraph", &handleCallergraph, TRUE }, + { "ingroup", &handleIngroup, FALSE }, + { "nosubgrouping", &handleNoSubGrouping, FALSE }, + { "showinitializer", &handleShowInitializer, FALSE }, + { "hideinitializer", &handleHideInitializer, FALSE }, + { "callgraph", &handleCallgraph, FALSE }, + { "callergraph", &handleCallergraph, FALSE }, { "internal", &handleInternal, TRUE }, { "_linebr", &handleLineBr, FALSE }, - { "static", &handleStatic, TRUE }, - { "pure", &handlePure, TRUE }, - { "private", &handlePrivate, TRUE }, - { "privatesection", &handlePrivateSection, TRUE }, - { "protected", &handleProtected, TRUE }, - { "protectedsection",&handleProtectedSection, TRUE }, - { "public", &handlePublic, TRUE }, - { "publicsection", &handlePublicSection, TRUE }, + { "static", &handleStatic, FALSE }, + { "pure", &handlePure, FALSE }, + { "private", &handlePrivate, FALSE }, + { "privatesection", &handlePrivateSection, FALSE }, + { "protected", &handleProtected, FALSE }, + { "protectedsection",&handleProtectedSection, FALSE }, + { "public", &handlePublic, FALSE }, + { "publicsection", &handlePublicSection, FALSE }, { "inherit", &handleInherit, TRUE }, { "arg", 0, TRUE }, { "attention", 0, TRUE }, @@ -213,6 +213,7 @@ static DocCmdMap docCmdMap[] = { "note", 0, TRUE }, { "par", 0, TRUE }, { "param", 0, TRUE }, + { "tparam", 0, TRUE }, { "post", 0, TRUE }, { "pre", 0, TRUE }, { "remark", 0, TRUE }, @@ -728,14 +729,14 @@ static inline void addOutput(char c) *pOutputString+=c; } -static void endBrief() +static void endBrief(bool addToOutput=TRUE) { if (!current->brief.stripWhiteSpace().isEmpty()) { // only go to the detailed description if we have // found some brief description and not just whitespace briefEndsAtDot=FALSE; setOutput(OutputDoc); - addOutput(yytext); + if (addToOutput) addOutput(yytext); } } @@ -1009,13 +1010,13 @@ RCSTAG "$"{ID}":"[^\n$]+"$" (\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command) if (inContext!=OutputBrief) { - addOutput(yytext); + addOutput("\n\n"); setOutput(OutputDoc); } else { // only go to the detailed description if we have // found some brief description and not just whitespace - endBrief(); + endBrief(FALSE); } lineCount(); } @@ -2216,6 +2217,12 @@ static bool handleInternal(const QCString &) { if (!Config_getBool("INTERNAL_DOCS")) { + // make sure some whitespace before a \internal command + // is not treated as "documentation" + if (current->doc.stripWhiteSpace().isEmpty()) + { + current->doc.resize(0); + } BEGIN( SkipInternal ); } else diff --git a/src/compound.xsd b/src/compound.xsd index a407210..a200f8b 100644 --- a/src/compound.xsd +++ b/src/compound.xsd @@ -775,6 +775,7 @@ + diff --git a/src/compound_xsd.h b/src/compound_xsd.h index ded516c..47de4d3 100644 --- a/src/compound_xsd.h +++ b/src/compound_xsd.h @@ -775,6 +775,7 @@ " \n" " \n" " \n" +" \n" " \n" " \n" "\n" diff --git a/src/config.l b/src/config.l index b328d50..c12426a 100644 --- a/src/config.l +++ b/src/config.l @@ -1291,6 +1291,7 @@ void Config::check() annotationFromBrief.append("the"); } +#if 0 if (Config_getBool("CALL_GRAPH") && (!Config_getBool("SOURCE_BROWSER") || !Config_getBool("REFERENCES_RELATION")) ) @@ -1311,6 +1312,7 @@ void Config::check() Config_getBool("SOURCE_BROWSER")=TRUE; Config_getBool("REFERENCED_BY_RELATION")=TRUE; } +#endif // some default settings for vhdl if (Config_getBool("OPTIMIZE_OUTPUT_VHDL") && (Config_getBool("INLINE_INHERITED_MEMB") || @@ -1413,10 +1415,11 @@ void Config::create() "information to generate all constant output in the proper language. \n" "The default language is English, other supported languages are: \n" "Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n" - "Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, \n" - "Italian, Japanese, Japanese-en (Japanese with English messages), Korean, \n" - "Korean-en, Lithuanian, Norwegian, Macedonian, Polish, Portuguese, Romanian, \n" - "Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.\n", + "Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n" + "Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n" + "Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n" + "Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, \n" + "and Ukrainian.\n", "English" ); #ifdef LANG_ZA @@ -1486,6 +1489,7 @@ void Config::create() ce->addValue("Macedonian"); #endif #ifdef LANG_FA + ce->addValue("Farsi"); ce->addValue("Persian"); #endif #ifdef LANG_PL @@ -1892,6 +1896,13 @@ void Config::create() FALSE ); cb = addBool( + "SORT_GROUP_NAMES", + "If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \n" + "hierarchy of group names into alphabetical order. If set to NO (the default) \n" + "the group names will appear in their defined order. \n", + FALSE + ); + cb = addBool( "SORT_BY_SCOPE_NAME", "If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \n" "sorted by fully-qualified names, including namespaces. If set to \n" @@ -2159,9 +2170,7 @@ void Config::create() "If the SOURCE_BROWSER tag is set to YES then a list of source files will \n" "be generated. Documented entities will be cross-referenced with these sources. \n" "Note: To get rid of all source code in the generated output, make sure also \n" - "VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH \n" - "then you must also enable this option. If you don't then doxygen will produce \n" - "a warning and turn it on anyway \n", + "VERBATIM_HEADERS is set to NO. \n", FALSE ); cb = addBool( @@ -2181,16 +2190,14 @@ void Config::create() "If the REFERENCED_BY_RELATION tag is set to YES (the default) \n" "then for each documented function all documented \n" "functions referencing it will be listed. \n", - TRUE + FALSE ); - cb->addDependency("SOURCE_BROWSER"); cb = addBool( "REFERENCES_RELATION", "If the REFERENCES_RELATION tag is set to YES (the default) \n" "then for each documented function all documented entities \n" "called/used by that function will be listed. \n", - TRUE + FALSE ); - cb->addDependency("SOURCE_BROWSER"); cb = addBool( "REFERENCES_LINK_SOURCE", "If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\n" "and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\n" @@ -2198,7 +2205,6 @@ void Config::create() "link to the source code. Otherwise they will link to the documentstion.\n", TRUE ); - cb->addDependency("SOURCE_BROWSER"); cb = addBool( "USE_HTAGS", "If the USE_HTAGS tag is set to YES then the references to source code \n" @@ -2961,7 +2967,7 @@ void Config::create() cb->addDependency("HAVE_DOT"); cb = addBool( "CALL_GRAPH", - "If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then \n" + "If the CALL_GRAPH and HAVE_DOT options are set to YES then \n" "doxygen will generate a call dependency graph for every global function \n" "or class method. Note that enabling this option will significantly increase \n" "the time of a run. So in most cases it will be better to enable call graphs \n" @@ -2971,7 +2977,7 @@ void Config::create() cb->addDependency("HAVE_DOT"); cb = addBool( "CALLER_GRAPH", - "If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then \n" + "If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \n" "doxygen will generate a caller dependency graph for every global function \n" "or class method. Note that enabling this option will significantly increase \n" "the time of a run. So in most cases it will be better to enable caller \n" diff --git a/src/defargs.l b/src/defargs.l index ea37c45..81832a9 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -159,6 +159,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* } ")"/{B}*"[" { // pointer to fixed size array g_curArgTypeName+=yytext; + g_curArgTypeName+=g_curArgName; //g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace(); BEGIN( ReadFuncArgType ); } @@ -307,6 +308,19 @@ ID [a-z_A-Z][a-z_A-Z0-9]* a->type = removeRedundantWhiteSpace(g_curArgTypeName); } a->array += removeRedundantWhiteSpace(g_curArgArray); + //printf("array=%s\n",a->array.data()); + int alen = a->array.length(); + if (alen>2 && a->array.at(0)=='(' && + a->array.at(alen-1)==')') // fix-up for int *(a[10]) + { + int i=a->array.find('[')-1; + a->array = a->array.mid(1,alen-2); + if (i>0 && a->name.isEmpty()) + { + a->name = a->array.left(i); + a->array = a->array.mid(i); + } + } a->defval = g_curArgDefValue.copy(); //printf("a->type=%s a->name=%s a->defval=\"%s\"\n",a->type.data(),a->name.data(),a->defval.data()); a->docs = g_curArgDocs.stripWhiteSpace(); diff --git a/src/definition.cpp b/src/definition.cpp index 3d742ef..2eab6a9 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -301,6 +301,32 @@ Definition::~Definition() } } +void Definition::setName(const char *name) +{ + if (name==0) return; + m_name = name; +#if 0 + makeResident(); + if (m_isSymbol) + { + removeFromMap(this); + } + if (m_name!="") + { + //extractNamespaceName(m_name,m_localName,ns); + m_impl->localName=stripScope(m_name); + } + else + { + m_impl->localName=m_name; + } + if (m_isSymbol) + { + addToMap(m_name,this); + } +#endif +} + void Definition::addSectionsToDefinition(QList *anchorList) { if (!anchorList) return; @@ -765,7 +791,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, const QCString &text,MemberSDict *members,bool /*funcOnly*/) { ol.pushGeneratorState(); - if (Config_getBool("SOURCE_BROWSER") && members) + if (/*Config_getBool("SOURCE_BROWSER") &&*/ members) { ol.startParagraph(); ol.parseText(text); @@ -938,7 +964,6 @@ void Definition::addSourceReferences(MemberDef *md) } if (m_impl->sourceRefsDict->find(name)==0) { - //printf("Adding reference %s->%s\n",md->name().data(),name.data()); m_impl->sourceRefsDict->inSort(name,md); } } diff --git a/src/definition.h b/src/definition.h index afaf34f..765118d 100644 --- a/src/definition.h +++ b/src/definition.h @@ -245,7 +245,7 @@ class Definition : public DefinitionIntf, public LockableObj //----------------------------------------------------------------------------------- /*! Sets a new \a name for the definition */ - void setName(const char *name) { m_name = name; } + void setName(const char *name); /*! Sets the documentation of this definition to \a d. */ void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE); diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 415a2fa..9107627 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -558,145 +558,7 @@ DirDef *DirDef::mergeDirectoryInTree(const QCString &path) void DirDef::writeDepGraph(QTextStream &t) { - t << "digraph G {\n"; - if (Config_getBool("DOT_TRANSPARENT")) - { - t << " bgcolor=transparent;\n"; - } - t << " compound=true\n"; - t << " node [ fontsize=10, fontname=\"FreeSans.ttf\"];\n"; - t << " edge [ labelfontsize=9, labelfontname=\"FreeSans.ttf\"];\n"; - - QDict dirsInGraph(257); - - dirsInGraph.insert(getOutputFileBase(),this); - if (parent()) - { - t << " subgraph cluster" << parent()->getOutputFileBase() << " {\n"; - t << " graph [ bgcolor=\"#ddddee\", pencolor=\"black\", label=\"" - << parent()->shortName() - << "\" fontname=\"FreeSans.ttf\", fontsize=10, URL=\""; - t << parent()->getOutputFileBase() << Doxygen::htmlFileExtension; - t << "\"]\n"; - } - if (isCluster()) - { - t << " subgraph cluster" << getOutputFileBase() << " {\n"; - t << " graph [ bgcolor=\"#eeeeff\", pencolor=\"black\", label=\"\"" - << " URL=\"" << getOutputFileBase() << Doxygen::htmlFileExtension - << "\"];\n"; - t << " " << getOutputFileBase() << " [shape=plaintext label=\"" - << shortName() << "\"];\n"; - - // add nodes for sub directories - QListIterator sdi(m_subdirs); - DirDef *sdir; - for (sdi.toFirst();(sdir=sdi.current());++sdi) - { - t << " " << sdir->getOutputFileBase() << " [shape=box label=\"" - << sdir->shortName() << "\""; - if (sdir->isCluster()) - { - t << " color=\"red\""; - } - else - { - t << " color=\"black\""; - } - t << " fillcolor=\"white\" style=\"filled\""; - t << " URL=\"" << sdir->getOutputFileBase() - << Doxygen::htmlFileExtension << "\""; - t << "];\n"; - dirsInGraph.insert(sdir->getOutputFileBase(),sdir); - } - t << " }\n"; - } - else - { - t << " " << getOutputFileBase() << " [shape=box, label=\"" - << shortName() << "\", style=\"filled\", fillcolor=\"#eeeeff\"," - << " pencolor=\"black\", URL=\"" << getOutputFileBase() - << Doxygen::htmlFileExtension << "\"];\n"; - } - if (parent()) - { - t << " }\n"; - } - - // add nodes for other used directories - QDictIterator udi(*m_usedDirs); - UsedDir *udir; - //printf("*** For dir %s\n",shortName().data()); - for (udi.toFirst();(udir=udi.current());++udi) - // for each used dir (=directly used or a parent of a directly used dir) - { - const DirDef *usedDir=udir->dir(); - DirDef *dir=this; - while (dir) - { - //printf("*** check relation %s->%s same_parent=%d !%s->isParentOf(%s)=%d\n", - // dir->shortName().data(),usedDir->shortName().data(), - // dir->parent()==usedDir->parent(), - // usedDir->shortName().data(), - // shortName().data(), - // !usedDir->isParentOf(this) - // ); - if (dir!=usedDir && dir->parent()==usedDir->parent() && !usedDir->isParentOf(this)) - // include if both have the same parent (or no parent) - { - t << " " << usedDir->getOutputFileBase() << " [shape=box label=\"" - << usedDir->shortName() << "\""; - if (usedDir->isCluster()) - { - if (!Config_getBool("DOT_TRANSPARENT")) - { - t << " fillcolor=\"white\" style=\"filled\""; - } - t << " color=\"red\""; - } - t << " URL=\"" << usedDir->getOutputFileBase() - << Doxygen::htmlFileExtension << "\"];\n"; - dirsInGraph.insert(usedDir->getOutputFileBase(),usedDir); - break; - } - dir=dir->parent(); - } - } - - // add relations between all selected directories - DirDef *dir; - QDictIterator di(dirsInGraph); - for (di.toFirst();(dir=di.current());++di) // foreach dir in the graph - { - QDictIterator udi(*dir->usedDirs()); - UsedDir *udir; - for (udi.toFirst();(udir=udi.current());++udi) // foreach used dir - { - const DirDef *usedDir=udir->dir(); - if ((dir!=this || !udir->inherited()) && // only show direct dependendies for this dir - (usedDir!=this || !udir->inherited()) && // only show direct dependendies for this dir - !usedDir->isParentOf(dir) && // don't point to own parent - dirsInGraph.find(usedDir->getOutputFileBase())) // only point to nodes that are in the graph - { - QCString relationName; - relationName.sprintf("dir_%06d_%06d",dir->m_dirCount,usedDir->m_dirCount); - if (Doxygen::dirRelations.find(relationName)==0) - { - // new relation - Doxygen::dirRelations.append(relationName, - new DirRelation(relationName,dir,udir)); - } - int nrefs = udir->filePairs().count(); - t << " " << dir->getOutputFileBase() << "->" - << usedDir->getOutputFileBase(); - t << " [headlabel=\"" << nrefs << "\", labeldistance=1.5"; - t << " headhref=\"" << relationName << Doxygen::htmlFileExtension - << "\"];\n"; - } - } - } - - t << "}\n"; + writeDotDirDepGraph(t,this); } //---------------------------------------------------------------------- diff --git a/src/dirdef.h b/src/dirdef.h index c88ffa9..49dca57 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -62,6 +62,7 @@ class DirDef : public Definition bool isCluster() const { return m_subdirs.count()>0; } int level() const { return m_level; } DirDef *parent() const { return m_parent; } + int dirCount() const { return m_dirCount; } const QDict *usedDirs() const { return m_usedDirs; } bool isParentOf(DirDef *dir) const; bool depGraphIsTrivial() const; diff --git a/src/docparser.cpp b/src/docparser.cpp index 529d0e7..63ff330 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -162,7 +162,7 @@ static void docParserPushContext() g_parserStack.push(ctx); } -static void docParserPopContext() +static void docParserPopContext(bool keepParamInfo=FALSE) { DocParserContext *ctx = g_parserStack.pop(); g_context = ctx->context; @@ -175,10 +175,13 @@ static void docParserPopContext() g_fileName = ctx->fileName; g_relPath = ctx->relPath; - g_hasParamCommand = ctx->hasParamCommand; - g_hasReturnCommand = ctx->hasReturnCommand; + if (!keepParamInfo) + { + g_hasParamCommand = ctx->hasParamCommand; + g_hasReturnCommand = ctx->hasReturnCommand; + g_paramsFound = ctx->paramsFound; + } g_memberDef = ctx->memberDef; - g_paramsFound = ctx->paramsFound; g_isExample = ctx->isExample; g_exampleName = ctx->exampleName; g_sectionDict = ctx->sectionDict; @@ -1754,6 +1757,8 @@ void DocCopy::parse() g_copyStack.append(def); // make sure the descriptions end with a newline, so the parser will correctly // handle them in all cases. + //printf("doc='%s'\n",doc.data()); + //printf("brief='%s'\n",brief.data()); brief+='\n'; doc+='\n'; internalValidatingParseDoc(this,m_children,brief); @@ -1761,7 +1766,7 @@ void DocCopy::parse() g_copyStack.remove(def); ASSERT(g_styleStack.isEmpty()); ASSERT(g_nodeStack.isEmpty()); - docParserPopContext(); + docParserPopContext(TRUE); } else // oops, recursion { @@ -4001,6 +4006,7 @@ int DocParamList::parseXml(const QString ¶mName) } while (retval==RetVal_CloseXml && Mappers::htmlTagMapper->map(g_token->name)!=XML_PARAM && + Mappers::htmlTagMapper->map(g_token->name)!=XML_TYPEPARAM && Mappers::htmlTagMapper->map(g_token->name)!=XML_EXCEPTION); @@ -4419,7 +4425,7 @@ void DocPara::handleInheritDoc() internalValidatingParseDoc(this,m_children,reMd->briefDescription()); internalValidatingParseDoc(this,m_children,reMd->documentation()); g_copyStack.remove(reMd); - docParserPopContext(); + docParserPopContext(TRUE); g_memberDef = thisMd; } } @@ -4641,6 +4647,9 @@ int DocPara::handleCommand(const QString &cmdName) case CMD_PARAM: retval = handleParamSection(cmdName,DocParamSect::Param,FALSE,g_token->paramDir); break; + case CMD_TPARAM: + retval = handleParamSection(cmdName,DocParamSect::TemplateParam,FALSE,g_token->paramDir); + break; case CMD_RETVAL: retval = handleParamSection(cmdName,DocParamSect::RetVal); break; @@ -5012,11 +5021,14 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag handleStyleEnter(this,m_children,DocStyleChange::Code,&g_token->attribs); break; case XML_PARAM: + case XML_TYPEPARAM: { QString paramName; if (findAttribute(tagHtmlAttribs,"name",¶mName)) { - retval = handleParamSection(paramName,DocParamSect::Param,TRUE); + retval = handleParamSection(paramName, + tagId==XML_PARAM ? DocParamSect::Param : DocParamSect::TemplateParam, + TRUE); } else { @@ -5025,6 +5037,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag } break; case XML_PARAMREF: + case XML_TYPEPARAMREF: { QString paramName; if (findAttribute(tagHtmlAttribs,"name",¶mName)) @@ -5037,7 +5050,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag } else { - warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Missing 'name' attribute from tag."); + warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Missing 'name' attribute from tag.",tagId==XML_PARAMREF?"":"type"); } } break; @@ -5330,6 +5343,7 @@ int DocPara::handleHtmlEndTag(const QString &tagName) case XML_LIST: case XML_EXAMPLE: case XML_PARAM: + case XML_TYPEPARAM: case XML_RETURNS: case XML_SEEALSO: case XML_EXCEPTION: @@ -5344,6 +5358,7 @@ int DocPara::handleHtmlEndTag(const QString &tagName) case XML_PERMISSION: case XML_DESCRIPTION: case XML_PARAMREF: + case XML_TYPEPARAMREF: // These tags are defined in .Net but are currently unsupported break; case HTML_UNKNOWN: diff --git a/src/docparser.h b/src/docparser.h index 93a6a76..478f1b9 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -939,7 +939,7 @@ class DocParamSect : public CompAccept, public DocNode public: enum Type { - Unknown, Param, RetVal, Exception + Unknown, Param, RetVal, Exception, TemplateParam }; enum Direction { diff --git a/src/dot.cpp b/src/dot.cpp index 83c9eec..c745ef6 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -34,6 +34,7 @@ #include "debug.h" #include "pagedef.h" #include "portable.h" +#include "dirdef.h" #include #include @@ -42,6 +43,8 @@ #define MAP_CMD "cmap" +#define FONTNAME "FreeSans" + //-------------------------------------------------------------------- static const int maxCmdLine = 40960; @@ -81,9 +84,9 @@ static void writeGraphHeader(QTextStream &t) { t << " bgcolor=\"transparent\";" << endl; } - t << " edge [fontname=\"FreeSans.ttf\",fontsize=10," - "labelfontname=\"FreeSans.ttf\",labelfontsize=10];\n"; - t << " node [fontname=\"FreeSans.ttf\",fontsize=10,shape=record];\n"; + t << " edge [fontname=\"" << FONTNAME << "\",fontsize=10," + "labelfontname=\"" << FONTNAME << "\",labelfontsize=10];\n"; + t << " node [fontname=\"" << FONTNAME << "\",fontsize=10,shape=record];\n"; } static void writeGraphFooter(QTextStream &t) @@ -528,6 +531,8 @@ static QCString convertLabel(const QCString &l) case '<': result+="\\<"; break; case '>': result+="\\>"; break; case '|': result+="\\|"; break; + case '{': result+="\\{"; break; + case '}': result+="\\}"; break; case '"': result+="\\\""; break; default: result+=c; break; } @@ -715,7 +720,7 @@ void DotNode::writeArrow(QTextStream &t, t << ",arrowhead=\"" << arrowStyle[ei->m_color] << "\""; } - if (format==BITMAP) t << ",fontname=\"FreeSans.ttf\""; + if (format==BITMAP) t << ",fontname=\"" << FONTNAME << "\""; t << "];" << endl; } @@ -2717,23 +2722,23 @@ void generateGraphLegend(const char *path) } QTextStream dotText(&dotFile); writeGraphHeader(dotText); - dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",fillcolor=\"grey75\",style=\"filled\" fontcolor=\"black\"];\n"; - dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"FreeSans.ttf\"];\n"; - dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",color=\"black\",URL=\"$classPublicBase" << Doxygen::htmlFileExtension << "\"];\n"; - dotText << " Node11 -> Node10 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"FreeSans.ttf\"];\n"; - dotText << " Node11 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",color=\"red\",URL=\"$classTruncated" << Doxygen::htmlFileExtension << "\"];\n"; - dotText << " Node13 -> Node9 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"FreeSans.ttf\"];\n"; - dotText << " Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",color=\"black\",URL=\"$classProtectedBase" << Doxygen::htmlFileExtension << "\"];\n"; - dotText << " Node14 -> Node9 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"FreeSans.ttf\"];\n"; - dotText << " Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",color=\"black\",URL=\"$classPrivateBase" << Doxygen::htmlFileExtension << "\"];\n"; - dotText << " Node15 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"FreeSans.ttf\"];\n"; - dotText << " Node15 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",color=\"grey75\"];\n"; - dotText << " Node16 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"FreeSans.ttf\"];\n"; - dotText << " Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",color=\"black\",URL=\"$classTempl" << Doxygen::htmlFileExtension << "\"];\n"; - dotText << " Node17 -> Node16 [dir=back,color=\"orange\",fontsize=10,style=\"dashed\",label=\"< int >\",fontname=\"FreeSans.ttf\"];\n"; - dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",color=\"black\",URL=\"$classTempl" << Doxygen::htmlFileExtension << "\"];\n"; - dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"FreeSans.ttf\"];\n"; - dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"FreeSans.ttf\",color=\"black\",URL=\"$classUsed" << Doxygen::htmlFileExtension << "\"];\n"; + dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",fillcolor=\"grey75\",style=\"filled\" fontcolor=\"black\"];\n"; + dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"" << FONTNAME << "\"];\n"; + dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classPublicBase" << Doxygen::htmlFileExtension << "\"];\n"; + dotText << " Node11 -> Node10 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"" << FONTNAME << "\"];\n"; + dotText << " Node11 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"red\",URL=\"$classTruncated" << Doxygen::htmlFileExtension << "\"];\n"; + dotText << " Node13 -> Node9 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"" << FONTNAME << "\"];\n"; + dotText << " Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classProtectedBase" << Doxygen::htmlFileExtension << "\"];\n"; + dotText << " Node14 -> Node9 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"" << FONTNAME << "\"];\n"; + dotText << " Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classPrivateBase" << Doxygen::htmlFileExtension << "\"];\n"; + dotText << " Node15 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"" << FONTNAME << "\"];\n"; + dotText << " Node15 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"grey75\"];\n"; + dotText << " Node16 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"" << FONTNAME << "\"];\n"; + dotText << " Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classTempl" << Doxygen::htmlFileExtension << "\"];\n"; + dotText << " Node17 -> Node16 [dir=back,color=\"orange\",fontsize=10,style=\"dashed\",label=\"< int >\",fontname=\"" << FONTNAME << "\"];\n"; + dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classTempl" << Doxygen::htmlFileExtension << "\"];\n"; + dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"" << FONTNAME << "\"];\n"; + dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classUsed" << Doxygen::htmlFileExtension << "\"];\n"; writeGraphFooter(dotText); dotFile.close(); @@ -3273,8 +3278,152 @@ void DotGroupCollaboration::writeGraphHeader(QTextStream &t) const { t << " bgcolor=\"transparent\";" << endl; } - t << " edge [fontname=\"FreeSans.ttf\",fontsize=8," - "labelfontname=\"FreeSans.ttf\",labelfontsize=8];\n"; - t << " node [fontname=\"FreeSans.ttf\",fontsize=10,shape=record];\n"; + t << " edge [fontname=\"" << FONTNAME << "\",fontsize=8," + "labelfontname=\"" << FONTNAME << "\",labelfontsize=8];\n"; + t << " node [fontname=\"" << FONTNAME << "\",fontsize=10,shape=record];\n"; t << " rankdir=LR;\n"; } + +void writeDotDirDepGraph(QTextStream &t,DirDef *dd) +{ + t << "digraph G {\n"; + if (Config_getBool("DOT_TRANSPARENT")) + { + t << " bgcolor=transparent;\n"; + } + t << " compound=true\n"; + t << " node [ fontsize=10, fontname=\"" << FONTNAME << "\"];\n"; + t << " edge [ labelfontsize=9, labelfontname=\"" << FONTNAME << "\"];\n"; + + QDict dirsInGraph(257); + + dirsInGraph.insert(dd->getOutputFileBase(),dd); + if (dd->parent()) + { + t << " subgraph cluster" << dd->parent()->getOutputFileBase() << " {\n"; + t << " graph [ bgcolor=\"#ddddee\", pencolor=\"black\", label=\"" + << dd->parent()->shortName() + << "\" fontname=\"" << FONTNAME << "\", fontsize=10, URL=\""; + t << dd->parent()->getOutputFileBase() << Doxygen::htmlFileExtension; + t << "\"]\n"; + } + if (dd->isCluster()) + { + t << " subgraph cluster" << dd->getOutputFileBase() << " {\n"; + t << " graph [ bgcolor=\"#eeeeff\", pencolor=\"black\", label=\"\"" + << " URL=\"" << dd->getOutputFileBase() << Doxygen::htmlFileExtension + << "\"];\n"; + t << " " << dd->getOutputFileBase() << " [shape=plaintext label=\"" + << dd->shortName() << "\"];\n"; + + // add nodes for sub directories + QListIterator sdi(dd->subDirs()); + DirDef *sdir; + for (sdi.toFirst();(sdir=sdi.current());++sdi) + { + t << " " << sdir->getOutputFileBase() << " [shape=box label=\"" + << sdir->shortName() << "\""; + if (sdir->isCluster()) + { + t << " color=\"red\""; + } + else + { + t << " color=\"black\""; + } + t << " fillcolor=\"white\" style=\"filled\""; + t << " URL=\"" << sdir->getOutputFileBase() + << Doxygen::htmlFileExtension << "\""; + t << "];\n"; + dirsInGraph.insert(sdir->getOutputFileBase(),sdir); + } + t << " }\n"; + } + else + { + t << " " << dd->getOutputFileBase() << " [shape=box, label=\"" + << dd->shortName() << "\", style=\"filled\", fillcolor=\"#eeeeff\"," + << " pencolor=\"black\", URL=\"" << dd->getOutputFileBase() + << Doxygen::htmlFileExtension << "\"];\n"; + } + if (dd->parent()) + { + t << " }\n"; + } + + // add nodes for other used directories + QDictIterator udi(*dd->usedDirs()); + UsedDir *udir; + //printf("*** For dir %s\n",shortName().data()); + for (udi.toFirst();(udir=udi.current());++udi) + // for each used dir (=directly used or a parent of a directly used dir) + { + const DirDef *usedDir=udir->dir(); + DirDef *dir=dd; + while (dir) + { + //printf("*** check relation %s->%s same_parent=%d !%s->isParentOf(%s)=%d\n", + // dir->shortName().data(),usedDir->shortName().data(), + // dir->parent()==usedDir->parent(), + // usedDir->shortName().data(), + // shortName().data(), + // !usedDir->isParentOf(this) + // ); + if (dir!=usedDir && dir->parent()==usedDir->parent() && + !usedDir->isParentOf(dd)) + // include if both have the same parent (or no parent) + { + t << " " << usedDir->getOutputFileBase() << " [shape=box label=\"" + << usedDir->shortName() << "\""; + if (usedDir->isCluster()) + { + if (!Config_getBool("DOT_TRANSPARENT")) + { + t << " fillcolor=\"white\" style=\"filled\""; + } + t << " color=\"red\""; + } + t << " URL=\"" << usedDir->getOutputFileBase() + << Doxygen::htmlFileExtension << "\"];\n"; + dirsInGraph.insert(usedDir->getOutputFileBase(),usedDir); + break; + } + dir=dir->parent(); + } + } + + // add relations between all selected directories + DirDef *dir; + QDictIterator di(dirsInGraph); + for (di.toFirst();(dir=di.current());++di) // foreach dir in the graph + { + QDictIterator udi(*dir->usedDirs()); + UsedDir *udir; + for (udi.toFirst();(udir=udi.current());++udi) // foreach used dir + { + const DirDef *usedDir=udir->dir(); + if ((dir!=dd || !udir->inherited()) && // only show direct dependendies for this dir + (usedDir!=dd || !udir->inherited()) && // only show direct dependendies for this dir + !usedDir->isParentOf(dir) && // don't point to own parent + dirsInGraph.find(usedDir->getOutputFileBase())) // only point to nodes that are in the graph + { + QCString relationName; + relationName.sprintf("dir_%06d_%06d",dir->dirCount(),usedDir->dirCount()); + if (Doxygen::dirRelations.find(relationName)==0) + { + // new relation + Doxygen::dirRelations.append(relationName, + new DirRelation(relationName,dir,udir)); + } + int nrefs = udir->filePairs().count(); + t << " " << dir->getOutputFileBase() << "->" + << usedDir->getOutputFileBase(); + t << " [headlabel=\"" << nrefs << "\", labeldistance=1.5"; + t << " headhref=\"" << relationName << Doxygen::htmlFileExtension + << "\"];\n"; + } + } + } + + t << "}\n"; +} diff --git a/src/dot.h b/src/dot.h index d076b71..2a59a82 100644 --- a/src/dot.h +++ b/src/dot.h @@ -337,5 +337,6 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, const QCString& relPath,const QString &context); +void writeDotDirDepGraph(QTextStream &t,DirDef *dd); #endif diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 0d163cd..f66be45 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -2482,6 +2482,44 @@ static void buildVarList(EntryNav *rootNav) else mtype=MemberDef::Variable; +#if 0 // does not work correctly + //static bool typedefHidesStruct = Config_getBool("TYPEDEF_HIDES_STRUCT"); + if (typedefHidesStruct) // substitute names with typedef'ed names + { + QCString baseType = type; + baseType.stripPrefix("typedef "); + if (baseType.stripPrefix("enum ")) + { + MemberName *mn=Doxygen::functionNameSDict->find(baseType.stripWhiteSpace()); + MemberNameIterator mni(*mn); + MemberDef *md; + for (mni.toFirst();(md=mni.current());++mni) + { + if (md->isEnumerate()) + { + md->setName(name); + md->setDefinition(name); + goto nextMember; + } + } + } + else + { + baseType.stripPrefix("struct "); + baseType.stripPrefix("union "); + { + ClassDef *typedefClass = Doxygen::classSDict->find(baseType); + if (typedefClass) + { + typedefClass->setName(name); + typedefClass->setClassName(name); + goto nextMember; + } + } + } + } +#endif + if (!root->relates.isEmpty()) // related variable { isRelated=TRUE; @@ -7019,7 +7057,8 @@ static void addSourceReferences() if (fd && md->getStartBodyLine()!=-1 && md->isLinkableInProject() && - fd->generateSourceFile()) + (fd->generateSourceFile() || Doxygen::parseSourcesNeeded) + ) { //printf("Found member `%s' in file `%s' at line `%d' def=%s\n", // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data()); @@ -7035,12 +7074,15 @@ static void addSourceReferences() for (mni.toFirst();(md=mni.current());++mni) { FileDef *fd=md->getBodyDef(); - //printf("member %s body=[%d,%d] fd=%p\n",md->name().data(), - // md->getStartBodyLine(),md->getEndBodyLine(),fd); + //printf("member %s body=[%d,%d] fd=%p link=%d parseSources=%d\n", + // md->name().data(), + // md->getStartBodyLine(),md->getEndBodyLine(),fd, + // md->isLinkableInProject(), + // Doxygen::parseSourcesNeeded); if (fd && md->getStartBodyLine()!=-1 && md->isLinkableInProject() && - fd->generateSourceFile() + (fd->generateSourceFile() || Doxygen::parseSourcesNeeded) ) { //printf("Found member `%s' in file `%s' at line `%d' def=%s\n", @@ -9267,7 +9309,9 @@ void checkConfiguration() Doxygen::xrefLists->setAutoDelete(TRUE); Doxygen::parseSourcesNeeded = Config_getBool("CALL_GRAPH") || - Config_getBool("CALLER_GRAPH"); + Config_getBool("CALLER_GRAPH") || + Config_getBool("REFERENCES_RELATION") || + Config_getBool("REFERENCED_BY_RELATION"); } diff --git a/src/entry.h b/src/entry.h index 04db9ac..f87182c 100644 --- a/src/entry.h +++ b/src/entry.h @@ -266,7 +266,7 @@ class Entry NonAtomic = 0x040000, Copy = 0x080000, Retain = 0x100000, - Assign = 0x200000, + Assign = 0x200000 }; enum ClassSpecifier { diff --git a/src/filedef.cpp b/src/filedef.cpp index 9123976..47304c2 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -835,7 +835,7 @@ void FileDef::addSourceRef(int line,Definition *d,MemberDef *md) srcDefDict->insert(line,d); if (md) srcMemberDict->insert(line,md); //printf("Adding member %s with anchor %s at line %d to file %s\n", - // d->name().data(),anchor,line,name().data()); + // md->name().data(),md->anchor().data(),line,name().data()); } } diff --git a/src/fortrancode.l b/src/fortrancode.l index a2a3ad8..5ca162e 100644 --- a/src/fortrancode.l +++ b/src/fortrancode.l @@ -630,7 +630,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE) codifyLines(yytext); endFontClass(); } -"end"({BS_}{COMMANDS})?/[ \t\n].* { +"end"({BS_}{COMMANDS})?/[ \t\n] { startFontClass("keyword"); codifyLines(yytext); endFontClass(); diff --git a/src/groupdef.h b/src/groupdef.h index dcbe1e4..7a4070f 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -142,10 +142,19 @@ class GroupSDict : public SDict public: GroupSDict(uint size) : SDict(size) {} virtual ~GroupSDict() {} + int compareItems(GCI item1,GCI item2) + { + return strcmp(((GroupDef*)item1)->groupTitle(),((GroupDef*)item2)->groupTitle()); + } }; class GroupList : public QList { + public: + int compareItems(GCI item1,GCI item2) + { + return strcmp(((GroupDef*)item1)->groupTitle(),((GroupDef*)item2)->groupTitle()); + } }; class GroupListIterator : public QListIterator diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index b3739fe..fcd8157 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -935,6 +935,11 @@ void HtmlDocVisitor::visitPre(DocParamSect *s) m_t << theTranslator->trReturnValues(); break; case DocParamSect::Exception: m_t << theTranslator->trExceptions(); break; + case DocParamSect::TemplateParam: + /* TODO: add this + m_t << theTranslator->trTemplateParam(); break; + */ + m_t << "Template Parameters"; break; default: ASSERT(0); } diff --git a/src/index.cpp b/src/index.cpp index a762ecf..beb0477 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -152,7 +152,7 @@ QCString abbreviate(const char *s,const char *name) { QCString scopelessName=name; int i=scopelessName.findRev("::"); - if (i!=-1) scopelessName=scopelessName.mid(i); + if (i!=-1) scopelessName=scopelessName.mid(i+2); QCString result=s; result=result.stripWhiteSpace(); // strip trailing . @@ -2433,6 +2433,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) if (hasSubGroups) { startIndexHierarchy(ol,level+1); + if (Config_getBool("SORT_GROUP_NAMES")) + gd->groupList->sort(); QListIterator gli(*gd->groupList); GroupDef *subgd = 0; for (gli.toFirst();(subgd=gli.current());++gli) @@ -2544,6 +2546,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) void writeGroupHierarchy(OutputList &ol) { startIndexHierarchy(ol,0); + if (Config_getBool("SORT_GROUP_NAMES")) + Doxygen::groupSDict->sort(); GroupSDict::Iterator gli(*Doxygen::groupSDict); GroupDef *gd; for (gli.toFirst();(gd=gli.current());++gli) diff --git a/src/language.cpp b/src/language.cpp index 39c9e66..727eea9 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -355,7 +355,7 @@ bool setTranslator(const char *langName) } #endif #ifdef LANG_FA - else if (L_EQUAL("persian")) + else if (L_EQUAL("persian") || L_EQUAL("farsi")) { theTranslator=new TranslatorDecoder(new TranslatorPersian); } diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 3d7b8c7..0516e37 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -927,6 +927,11 @@ void LatexDocVisitor::visitPre(DocParamSect *s) filter(theTranslator->trReturnValues()); break; case DocParamSect::Exception: filter(theTranslator->trExceptions()); break; + case DocParamSect::TemplateParam: + /* TODO: add this + filter(theTranslator->trTemplateParam()); break; + */ + filter("Template Parameters"); break; default: ASSERT(0); } diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 61e8d0e..4dd8010 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -807,6 +807,11 @@ void ManDocVisitor::visitPre(DocParamSect *s) m_t << theTranslator->trReturnValues(); break; case DocParamSect::Exception: m_t << theTranslator->trExceptions(); break; + case DocParamSect::TemplateParam: + /* TODO: add this + m_t << theTranslator->trTemplateParam(); break; + */ + m_t << "Template Parameters"; break; default: ASSERT(0); } diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 95034dd..9c7f033 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -1161,6 +1161,7 @@ void PerlModDocVisitor::visitPre(DocParamSect *s) case DocParamSect::Param: type = "params"; break; case DocParamSect::RetVal: type = "retvals"; break; case DocParamSect::Exception: type = "exceptions"; break; + case DocParamSect::TemplateParam: type = "templateparam"; break; case DocParamSect::Unknown: err("Error: unknown parameter section found\n"); break; diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index eca9943..30e919e 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -589,6 +589,7 @@ class PrintDocVisitor : public DocVisitor case DocParamSect::Param: printf("param"); break; case DocParamSect::RetVal: printf("retval"); break; case DocParamSect::Exception: printf("exception"); break; + case DocParamSect::TemplateParam: printf("templateparam"); break; case DocParamSect::Unknown: printf("unknown"); break; } printf(">\n"); diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 3eb5ae8..4ed7c16 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -1174,6 +1174,11 @@ void RTFDocVisitor::visitPre(DocParamSect *s) m_t << theTranslator->trReturnValues(); break; case DocParamSect::Exception: m_t << theTranslator->trExceptions(); break; + case DocParamSect::TemplateParam: + /* TODO: add this + m_t << theTranslator->trTemplateParam(); break; + */ + m_t << "Template Parameters"; break; default: ASSERT(0); } diff --git a/src/scanner.l b/src/scanner.l index 50edea9..8125b9c 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -2773,7 +2773,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) initEntry(); BEGIN( FindMembers ); } -. { +. { // spaces, *, or other stuff + idlProp+=yytext; } "]" { current->args += *yytext ; if (--squareCount<=0) diff --git a/src/search.php b/src/search.php index 6253e67..f86184c 100644 --- a/src/search.php +++ b/src/search.php @@ -288,7 +288,7 @@ function main() { $query=$_GET["query"]; } - end_form($query); + end_form(ereg_replace("[^[:alnum:]:\\.\\t ]", " ", $query )); echo " \n
    \n"; $results = array(); $requiredWords = array(); diff --git a/src/search_php.h b/src/search_php.h index f155f5f..afbfc74 100644 --- a/src/search_php.h +++ b/src/search_php.h @@ -288,7 +288,7 @@ " {\n" " $query=$_GET[\"query\"];\n" " }\n" -" end_form($query);\n" +" end_form(ereg_replace(\"[^[:alnum:]:\\\\.\\\\t ]\", \" \", $query ));\n" " echo \" \\n
    \\n\";\n" " $results = array();\n" " $requiredWords = array();\n" diff --git a/src/sortdict.h b/src/sortdict.h index b9f6f7c..bc0488d 100644 --- a/src/sortdict.h +++ b/src/sortdict.h @@ -168,6 +168,18 @@ class SDict return item ? m_list->remove(item) : FALSE; } + /*! Take an item out of the dictionary without deleting it */ + T *take(const char *key) + { + T *item = m_dict->take(key); + if (item) + { + int i = m_list->find(item); + m_list->take(i); + } + return item; + } + /*! Sorts the members of the dictionary. First appending a number * of members and then sorting them is faster (O(NlogN) than using * inSort() for each member (O(N^2)). diff --git a/src/translator_br.h b/src/translator_br.h index e61ef48..56708cf 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -15,8 +15,10 @@ * Thanks to Jorge Ramos and others for their contributions. * * History: + * 20080206: + * - Method trTypeContraints() renamed to trTypeConstraints(). * 20071216: - * - New methods since 1.5.4 updated. + * - New methods since 1.5.4 updated. * 20070914 * - "Translate me" fixed * - Revision number changed from doxygen version to a date string. @@ -30,7 +32,7 @@ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -class TranslatorBrazilian : public TranslatorAdapter_1_5_4 +class TranslatorBrazilian : public Translator { public: @@ -1768,7 +1770,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_5_4 } /*! C# Type Contraint list */ - virtual QCString trTypeContraints() + virtual QCString trTypeConstraints() { return "Restrições do Tipo"; } diff --git a/src/translator_cn.h b/src/translator_cn.h index 80d7720..0648c6a 100644 --- a/src/translator_cn.h +++ b/src/translator_cn.h @@ -24,7 +24,7 @@ */ #define CN_SPC -class TranslatorChinese : public TranslatorAdapter_1_5_4 +class TranslatorChinese : public Translator { public: /*! Used for identification of the language. The identification @@ -1535,7 +1535,258 @@ class TranslatorChinese : public TranslatorAdapter_1_5_4 return "öٱĵ"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + // { return "Member Function/Subroutine Documentation"; } + { return "Աĵ"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + // { return "Data Types List"; } + { return "б"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + // { return "Data Fields"; } + { return ""; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + // { return "Here are the data types with brief descriptions:"; } + { return "Ҫб:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + // QCString result="Here is a list of all "; + // if (!extractAll) + // { + // result+="documented "; + // } + // result+="data types members"; + // result+=" with links to "; + // if (!extractAll) + // { + // result+="the data structure documentation for each member"; + // } + // else + // { + // result+="the data types they belong to:"; + // } + // return result; + if(!extractAll) { + return "ĵͳԱбеÿԱݽṹĵ"; + } else { + return "ͳԱбеԱ͵:"; + } + + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + // { return "Data Type Index"; } + { return ""; } + + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + // { return "Data Type Documentation"; } + { return "ĵ"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + //{ return "Functions/Subroutines"; } + { return "/"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + //{ return "Function/Subroutine Documentation"; } + { return "/ĵ"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + // { return "Data Types"; } + { return ""; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + // { return "Modules List"; } + { return "ģб"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + // QCString result="Here is a list of all "; + // if (!extractAll) result+="documented "; + // result+="modules with brief descriptions:"; + // return result; + if(!extractAll) { + return "Ҫĵģб:"; + } else { + return "Ҫģб:"; + } + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + // QCString result=(QCString)clName; + // switch(compType) + // { + // case ClassDef::Class: result+=" Module"; break; + // case ClassDef::Struct: result+=" Type"; break; + // case ClassDef::Union: result+=" Union"; break; + // case ClassDef::Interface: result+=" Interface"; break; + // case ClassDef::Protocol: result+=" Protocol"; break; + // case ClassDef::Category: result+=" Category"; break; + // case ClassDef::Exception: result+=" Exception"; break; + // } + // if (isTemplate) result+=" Template"; + // result+=" Reference"; + // return result; + QCString result=(QCString)clName; + switch(compType) + { + case ClassDef::Class: result+=CN_SPC"ģ"; break; + case ClassDef::Struct: result+=CN_SPC""; break; + case ClassDef::Union: result+=CN_SPC""; break; + case ClassDef::Interface: result+=CN_SPC""; break; + case ClassDef::Protocol: result+=CN_SPC"ӿ"; break; + case ClassDef::Category: result+=CN_SPC"Ŀ¼"; break; + case ClassDef::Exception: result+=CN_SPC"쳣"; break; + } + if (isTemplate) result+="ģ"; + result+="οֲ"; + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result=namespaceName; + // result+=" Module Reference"; + result += CN_SPC"ģοֲ"; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + // { return "Module Members"; } + { return "ģԱ"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + // QCString result="Here is a list of all "; + // if (!extractAll) result+="documented "; + // result+="module members with links to "; + // if (extractAll) + // { + // result+="the module documentation for each member:"; + // } + // else + // { + // result+="the modules they belong to:"; + // } + // return result; + if(!extractAll) { + return "ĵģԱбеÿԱģĵ"; + } else { + return "ģԱбеԱģ:"; + } + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + // { return "Modules Index"; } + { return "ģ"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool, bool) + { + // QCString result((first_capital ? "Module" : "module")); + // if (!singular) result+="s"; + // return result; + return "ģ"; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + // QCString result=(QCString)"The documentation for this "; + // switch(compType) + // { + // case ClassDef::Class: result+="module"; break; + // case ClassDef::Struct: result+="type"; break; + // case ClassDef::Union: result+="union"; break; + // case ClassDef::Interface: result+="interface"; break; + // case ClassDef::Protocol: result+="protocol"; break; + // case ClassDef::Category: result+="category"; break; + // case ClassDef::Exception: result+="exception"; break; + // } + // result+=" was generated from the following file"; + // if (single) result+=":"; else result+="s:"; + // return result; + QCString result=""; + switch(compType) + { + case ClassDef::Class: result+=CN_SPC"ģ"; break; + case ClassDef::Struct: result+=CN_SPC""; break; + case ClassDef::Union: result+=CN_SPC""; break; + case ClassDef::Interface: result+=CN_SPC""; break; + case ClassDef::Protocol: result+=CN_SPC"ӿ"; break; + case ClassDef::Category: result+=CN_SPC"Ŀ¼"; break; + case ClassDef::Exception: result+=CN_SPC"쳣"; break; + } + result+="ĵļ:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool, bool) + { + return ""; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool, bool) + { + return "ӳ"; + } + + /*! C# Type Constraint list */ + virtual QCString trTypeConstraints() + { + return ""; + } }; #endif diff --git a/src/translator_de.h b/src/translator_de.h index 1bbe711..99e4e2d 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -111,13 +111,16 @@ // 2006/06/12 Jens Seidel (jensseidel@users.sourceforge.net) // - Updated for "new since 1.4.6" version // +// 2008/02/04 Jens Seidel (jensseidel@users.sourceforge.net) +// - Updated for "new since 1.5.4" version +// // Todo: // - see FIXME #ifndef TRANSLATOR_DE_H #define TRANSLATOR_DE_H -class TranslatorGerman : public TranslatorAdapter_1_5_4 +class TranslatorGerman : public Translator { public: @@ -1663,6 +1666,206 @@ class TranslatorGerman : public TranslatorAdapter_1_5_4 virtual QCString trEnumerationValueDocumentation() { return "Enumerator-Dokumentation"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Elementfunktionen/Unterroutinen-Dokumentation"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Datentyp-Liste"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Datenfelder"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Hier folgen die Datentypen mit Kurzbeschreibungen:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Hier folgt eine Liste aller "; + if (!extractAll) + { + result+="dokumentierten "; + } + result+="Datentypelemente"; + result+=" mit Links "; + if (!extractAll) + { + result+="zur Datenstruktur-Dokumentation fr jedes Element"; + } + else + { + result+="zu den Datentypen, zu denen sie gehren:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Datentyp-Index"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Datentyp-Dokumentation"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Funktionen/Unterroutinen"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Funktionen/Unterroutinen-Dokumentation"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Datentypen"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Modulliste"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Hier folgt eine Liste aller "; + if (!extractAll) result+="dokumentierten "; + result+="Module mit ihren Kurzbeschreibungen:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result=(QCString)clName; + result += "-"; + switch(compType) + { + case ClassDef::Class: result+="Modul"; break; + case ClassDef::Struct: result+="Typ"; break; + case ClassDef::Union: result+="Union"; break; + case ClassDef::Interface: result+="Interface"; break; + case ClassDef::Protocol: result+="Protokoll"; break; + case ClassDef::Category: result+="Kategorie"; break; + case ClassDef::Exception: result+="Ausnahmen"; break; + } + if (isTemplate) result+="-Template"; + result+="-Referenz"; + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result=namespaceName; + result+="-Modul-Referenz"; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Modul-Elemente"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Hier folgt eine Liste aller "; + if (!extractAll) result+="dokumentierten "; + result+="Modulelemente mit Links "; + if (extractAll) + { + result+="zur Moduldokumentation fr jedes Element:"; + } + else + { + result+="zu den Modulen, zu denen sie gehren:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Modul-Index"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool /*first_capital*/, bool singular) + { + QCString result("Modul"); + if (!singular) result+="e"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { + // single is true implies a single file + QCString result=(QCString)"Die Dokumentation fr "; + switch(compType) + { + case ClassDef::Class: result+="dieses Modul"; break; + case ClassDef::Struct: result+="diesen Typ"; break; + case ClassDef::Union: result+="diese Union"; break; + case ClassDef::Interface: result+="dieses Interface"; break; + case ClassDef::Protocol: result+="dieses Protokoll"; break; + case ClassDef::Category: result+="diese Kategorie"; break; + case ClassDef::Exception: result+="diese Ausnahme"; break; + } + if (single) + result+=" wurde aus der folgenden Datei erzeugt:"; + else + result+=" wurde aus den folgenden Dateien erzeugt:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool /*first_capital*/, bool singular) + { + QCString result("Typ"); + if (!singular) result+="en"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool /*first_capital*/, bool singular) + { + QCString result("Unterprogramm"); + if (!singular) result+="e"; + return result; + } + + /*! C# Type Constraint list */ + virtual QCString trTypeConstraints() + { + return "Type Constraints"; + } }; diff --git a/src/translator_es.h b/src/translator_es.h index 7ae0072..6d146ab 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -22,6 +22,7 @@ * some words haven't got translate in spanish. * Updated from 1.3.8 to 1.4.6 by Guillermo Ballester Valor (May-05-2006) * Updated fron 1.4.6 to 1.5.1 by Bartomeu Creus Navarro (22-enero-2007) + * Updated fron 1.5.1 to 1.5.5 by Bartomeu Creus Navarro (5-febrero-2008) */ #ifndef TRANSLATOR_ES_H @@ -181,7 +182,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { return "Campos de datos"; } @@ -189,7 +190,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4 { return "Miembros de las clases"; } - } + } /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() @@ -219,7 +220,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4 /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() { return "Esta lista de herencias esta ordenada " - "aproximadamente por orden alfabtico:"; + "aproximadamente por orden alfabtico:"; } /*! This is an introduction to the list with all files. */ @@ -233,8 +234,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4 /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() - { - + { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { return "Lista de estructuras con una breve descripcin:"; @@ -506,6 +506,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4 result+=(QCString)" por"; return result; } + /*! This is part of the sentence used in the standard footer of each page. */ virtual QCString trWrittenBy() @@ -550,7 +551,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4 /*! this text is generated when the \\exception command is used. */ virtual QCString trExceptions() { return "Excepciones"; } - + /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() { return "Generado por"; } @@ -558,7 +559,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4 ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 ////////////////////////////////////////////////////////////////////////// - + /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() { return "Lista de namespace"; } @@ -577,38 +578,38 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4 */ virtual QCString trFriends() { return "Amigas"; } - + ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 ////////////////////////////////////////////////////////////////////////// - + /*! used in the class documentation as a header before the list of all * related classes */ virtual QCString trRelatedFunctionDocumentation() { return "Documentacin de las funciones relacionadas y clases amigas"; } - + ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 ////////////////////////////////////////////////////////////////////////// /*! used as the title of the HTML page of a class/struct/union */ virtual QCString trCompoundReference(const char *clName, - ClassDef::CompoundType compType, - bool isTemplate) + ClassDef::CompoundType compType, + bool isTemplate) { - QCString result="Referencia de "; + QCString result="Referencia de"; + if (isTemplate) result+=" la plantilla de"; switch(compType) { - case ClassDef::Class: result+="la Clase "; break; - case ClassDef::Struct: result+="la Estructura "; break; - case ClassDef::Union: result+="la Unin "; break; - case ClassDef::Interface: result+="la Interfaz "; break; - case ClassDef::Protocol: result+="el Protocolo "; break; - case ClassDef::Category: result+="la Categoria "; break; - case ClassDef::Exception: result+="la Excepcin "; break; + case ClassDef::Class: result+=" la Clase "; break; + case ClassDef::Struct: result+=" la Estructura "; break; + case ClassDef::Union: result+=" la Unin "; break; + case ClassDef::Interface: result+=" la Interfaz "; break; + case ClassDef::Protocol: result+="l Protocolo "; break; + case ClassDef::Category: result+=" la Categoria "; break; + case ClassDef::Exception: result+=" la Excepcin "; break; } - if (isTemplate) result+="