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

Release-1.5.5

parent 0e922bf3
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)
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)
......@@ -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("<qt><center>A tool to configure and run doxygen version ")+versionString+
" on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2006</center><p>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2008</center><p>"
"</qt>";
QMessageBox::about(this,"Doxygen GUI",msg);
}
......
......@@ -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;
......
......@@ -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"`
......
......@@ -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
<dt>\c SORT_GROUP_NAMES <dd>
\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
<dt>\c SORT_BY_SCOPE_NAME <dd>
\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
<dt>\c GENERATE_DEPRECATEDLIST <dd>
\addindex GENERATE_DEPRECATEDLIST
......@@ -977,8 +999,10 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
<dt>\c SOURCE_BROWSER <dd>
\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
<dt>\c INLINE_SOURCES <dd>
......
......@@ -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
......
......@@ -61,6 +61,11 @@ Here is the list of tags supported by doxygen:
<li><tt>\<summary\></tt> Identifies the brief description.
Similar to using \ref cmdbrief "\\brief".
<li><tt>\<term\></tt> Part of a <tt>\<list\></tt> command.
<li><tt>\<typeparam name="paramName"\></tt> Marks a piece of text as the documentation
for type parameter "paramName". Similar to
using \ref cmdparam "\\param".
<li><tt>\<typeparamref name="paramName"\></tt> Refers to a parameter with name
"paramName". Similar to using \ref cmda "\\a".
<li><tt>\<value\></tt> Identifies a property. Ignored by doxygen.
</ul>
......
......@@ -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");
......
......@@ -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<int> *templateNames);
......
......@@ -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 <code> 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 }
};
//----------------------------------------------------------------------------
......
......@@ -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
......
......@@ -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();
}
<Body>"$"?"this->" { g_code->codify(yytext); }
<Body,FuncCall>"$"?"this->" { g_code->codify(yytext); }
<Body>"."|"->" {
g_code->codify(yytext);
g_memCallContext = YY_START;
......
......@@ -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$]+"$"
<Comment>(\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
......
......@@ -775,6 +775,7 @@
<xsd:enumeration value="param" />
<xsd:enumeration value="retval" />
<xsd:enumeration value="exception" />
<xsd:enumeration value="templateparam" />
</xsd:restriction>
</xsd:simpleType>
......
......@@ -775,6 +775,7 @@
" <xsd:enumeration value=\"param\" />\n"
" <xsd:enumeration value=\"retval\" />\n"
" <xsd:enumeration value=\"exception\" />\n"
" <xsd:enumeration value=\"templateparam\" />\n"
" </xsd:restriction>\n"
" </xsd:simpleType>\n"
"\n"
......
......@@ -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
......@@ -1891,6 +1895,13 @@ void Config::create()
"declaration order. \n",
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"
......@@ -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"
......
......@@ -159,6 +159,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
}
<ReadFuncArgPtr>")"/{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();
......
......@@ -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!="<globalScope>")
{
//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<SectionInfo> *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);
}
}
......
......@@ -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);
......
......@@ -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<DirDef> 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<DirDef> 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<UsedDir> 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<DirDef> di(dirsInGraph);
for (di.toFirst();(dir=di.current());++di) // foreach dir in the graph
{
QDictIterator<UsedDir> 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);
}
//----------------------------------------------------------------------
......
......@@ -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<UsedDir> *usedDirs() const { return m_usedDirs; }
bool isParentOf(DirDef *dir) const;
bool depGraphIsTrivial() const;
......
......@@ -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 &paramName)
} 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",&paramName))
{
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",&paramName))
......@@ -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 <paramref> tag.");
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Missing 'name' attribute from <param%sref> 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:
......
......@@ -939,7 +939,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode
public:
enum Type
{
Unknown, Param, RetVal, Exception
Unknown, Param, RetVal, Exception, TemplateParam
};
enum Direction
{
......
This diff is collapsed.
......@@ -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
......@@ -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");
}
......
......@@ -266,7 +266,7 @@ class Entry
NonAtomic = 0x040000,
Copy = 0x080000,
Retain = 0x100000,
Assign = 0x200000,
Assign = 0x200000
};
enum ClassSpecifier
{
......
......@@ -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());
}
}
......
......@@ -630,7 +630,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
codifyLines(yytext);
endFontClass();
}
<Start>"end"({BS_}{COMMANDS})?/[ \t\n].* {
<Start>"end"({BS_}{COMMANDS})?/[ \t\n] {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
......
......@@ -142,10 +142,19 @@ class GroupSDict : public SDict<GroupDef>
public:
GroupSDict(uint size) : SDict<GroupDef>(size) {}
virtual ~GroupSDict() {}
int compareItems(GCI item1,GCI item2)
{
return strcmp(((GroupDef*)item1)->groupTitle(),((GroupDef*)item2)->groupTitle());
}
};
class GroupList : public QList<GroupDef>
{
public:
int compareItems(GCI item1,GCI item2)
{
return strcmp(((GroupDef*)item1)->groupTitle(),((GroupDef*)item2)->groupTitle());
}
};
class GroupListIterator : public QListIterator<GroupDef>
......
......@@ -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);
}
......
......@@ -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<GroupDef> 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)
......
......@@ -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);
}
......
......@@ -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);
}
......
......@@ -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);
}
......
......@@ -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;
......
......@@ -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");
......
......@@ -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);
}
......
......@@ -2773,7 +2773,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
initEntry();
BEGIN( FindMembers );
}
<IDLProp>. {
<IDLProp>. { // spaces, *, or other stuff
idlProp+=yytext;
}
<Array>"]" { current->args += *yytext ;
if (--squareCount<=0)
......
......@@ -288,7 +288,7 @@ function main()
{
$query=$_GET["query"];
}
end_form($query);
end_form(ereg_replace("[^[:alnum:]:\\.\\t ]", " ", $query ));
echo "&nbsp;\n<div class=\"searchresults\">\n";
$results = array();
$requiredWords = array();
......
......@@ -288,7 +288,7 @@
" {\n"
" $query=$_GET[\"query\"];\n"
" }\n"
" end_form($query);\n"
" end_form(ereg_replace(\"[^[:alnum:]:\\\\.\\\\t ]\", \" \", $query ));\n"
" echo \"&nbsp;\\n<div class=\\\"searchresults\\\">\\n\";\n"
" $results = array();\n"
" $requiredWords = array();\n"
......
......@@ -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)).
......
......@@ -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";
}
......
This diff is collapsed.
......@@ -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 für jedes Element";
}
else
{
result+="zu den Datentypen, zu denen sie gehören:";
}
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 für jedes Element:";
}
else
{
result+="zu den Modulen, zu denen sie gehören:";
}
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 für ";
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";
}
};
......
This diff is collapsed.
This diff is collapsed.
......@@ -998,7 +998,7 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
{
return "Documentation des contructeurs et destructeur";
return "Documentation des constructeurs et destructeur";
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
......
......@@ -1617,20 +1617,21 @@ class TranslatorKorean : public Translator
/*! 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 ";
QCString result="다음은 ";
if (!extractAll)
{
result+="documented ";
result+="문서화된 ";
}
result+="data types members";
result+=" with links to ";
result+="모든 데이타 타입 멤버들의 목록입니다. ";
result+="각 항목은 ";
if (!extractAll)
{
result+="the data structure documentation for each member";
result+="각 멤버에 대한 데이타 구조 문서화 페이지의 링크를 가지고 있습니다.";
}
else
{
result+="the data types they belong to:";
result+="그들이 속한 데이타 타입의 링크를 가지고 있습니다. :";
}
return result;
}
......
This diff is collapsed.
......@@ -215,11 +215,11 @@ class TranslatorDecoder : public Translator
QCString trCompounds()
{ return toUtf8(m_translator->trCompounds()); }
QCString trGeneratedAt(const char *date,const char *projName)
{ return toUtf8(m_translator->trGeneratedAt(date,fromUtf8(projName))); }
{ return toUtf8(m_translator->trGeneratedAt(fromUtf8(date),fromUtf8(projName))); }
QCString trWrittenBy()
{ return toUtf8(m_translator->trWrittenBy()); }
QCString trClassDiagram(const char *clName)
{ return toUtf8(m_translator->trClassDiagram(clName)); }
{ return toUtf8(m_translator->trClassDiagram(fromUtf8(clName))); }
QCString trForInternalUseOnly()
{ return toUtf8(m_translator->trForInternalUseOnly()); }
QCString trWarning()
......@@ -264,13 +264,13 @@ class TranslatorDecoder : public Translator
QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType,
bool isTemplate)
{ return toUtf8(m_translator->trCompoundReference(clName,compType,isTemplate)); }
{ return toUtf8(m_translator->trCompoundReference(fromUtf8(clName),compType,isTemplate)); }
QCString trFileReference(const char *fileName)
{ return toUtf8(m_translator->trFileReference(fromUtf8(fileName))); }
QCString trNamespaceReference(const char *namespaceName)
{ return toUtf8(m_translator->trNamespaceReference(namespaceName)); }
{ return toUtf8(m_translator->trNamespaceReference(fromUtf8(namespaceName))); }
QCString trPublicMembers()
{ return toUtf8(m_translator->trPublicMembers()); }
......@@ -363,7 +363,7 @@ class TranslatorDecoder : public Translator
//////////////////////////////////////////////////////////////////////////
QCString trCollaborationDiagram(const char *clName)
{ return toUtf8(m_translator->trCollaborationDiagram(clName)); }
{ return toUtf8(m_translator->trCollaborationDiagram(fromUtf8(clName))); }
QCString trInclDepGraph(const char *fName)
{ return toUtf8(m_translator->trInclDepGraph(fromUtf8(fName))); }
QCString trConstructorDocumentation()
......@@ -484,7 +484,7 @@ class TranslatorDecoder : public Translator
QCString trClasses()
{ return toUtf8(m_translator->trClasses()); }
QCString trPackage(const char *name)
{ return toUtf8(m_translator->trPackage(name)); }
{ return toUtf8(m_translator->trPackage(fromUtf8(name))); }
QCString trPackageList()
{ return toUtf8(m_translator->trPackageList()); }
QCString trPackageListDescription()
......@@ -686,9 +686,9 @@ class TranslatorDecoder : public Translator
QCString trCompoundReferenceFortran(const char *clName,
ClassDef::CompoundType compType,
bool isTemplate)
{ return toUtf8(m_translator->trCompoundReferenceFortran(clName,compType,isTemplate)); }
{ return toUtf8(m_translator->trCompoundReferenceFortran(fromUtf8(clName),compType,isTemplate)); }
QCString trModuleReference(const char *namespaceName)
{ return toUtf8(m_translator->trModuleReference(namespaceName)); }
{ return toUtf8(m_translator->trModuleReference(fromUtf8(namespaceName))); }
QCString trModulesMembers()
{ return toUtf8(m_translator->trModulesMembers()); }
QCString trModulesMemberDescription(bool extractAll)
......
......@@ -247,7 +247,7 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0)
for (int k=1;k<count;k++)
{
printf("adding '%s' '%s'\n",ql.at(0)->data(),ql.at(k)->data());
//printf("adding '%s' '%s'\n",ql.at(0)->data(),ql.at(k)->data());
Entry *pTemp=new Entry;
initEntry(pTemp);
pTemp->startLine = line;
......
......@@ -778,6 +778,8 @@ void XmlDocVisitor::visitPre(DocParamSect *s)
m_t << "retval"; break;
case DocParamSect::Exception:
m_t << "exception"; break;
case DocParamSect::TemplateParam:
m_t << "templateparam"; break;
default:
ASSERT(0);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment