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 Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (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. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, 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") ...@@ -221,9 +221,6 @@ Step2::Step2(QWidget *parent) : QWidget(parent,"Step2")
layout->addWidget(m_optimizeLang); layout->addWidget(m_optimizeLang);
layout->addStretch(1); layout->addStretch(1);
connect(m_crossRef,SIGNAL(stateChanged(int)),
parent,SLOT(changeCrossRefState(int)));
} }
bool Step2::crossReferencingEnabled() const bool Step2::crossReferencingEnabled() const
...@@ -621,44 +618,6 @@ Wizard::Wizard(QWidget *parent=0) : QTabDialog(parent) ...@@ -621,44 +618,6 @@ Wizard::Wizard(QWidget *parent=0) : QTabDialog(parent)
setCancelButton(); 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) MainWidget::MainWidget(QWidget *parent)
...@@ -1339,7 +1298,7 @@ void MainWidget::about() ...@@ -1339,7 +1298,7 @@ void MainWidget::about()
QTextStream t(&msg,IO_WriteOnly); QTextStream t(&msg,IO_WriteOnly);
t << QString("<qt><center>A tool to configure and run doxygen version ")+versionString+ t << QString("<qt><center>A tool to configure and run doxygen version ")+versionString+
" on your source files.</center><p><br>" " 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>"; "</qt>";
QMessageBox::about(this,"Doxygen GUI",msg); QMessageBox::about(this,"Doxygen GUI",msg);
} }
......
...@@ -225,10 +225,6 @@ class Wizard : public QTabDialog ...@@ -225,10 +225,6 @@ class Wizard : public QTabDialog
void setInheritanceGraph(bool enable) { m_step4->setInheritanceGraph(enable); } void setInheritanceGraph(bool enable) { m_step4->setInheritanceGraph(enable); }
void setCallGraph(bool enable) { m_step4->setCallGraph(enable); } void setCallGraph(bool enable) { m_step4->setCallGraph(enable); }
public slots:
void changeCallGraphState(int state);
void changeCrossRefState(int state);
private: private:
Step1 *m_step1; Step1 *m_step1;
Step2 *m_step2; Step2 *m_step2;
......
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
doxygen_version_major=1 doxygen_version_major=1
doxygen_version_minor=5 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. #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"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -208,6 +208,8 @@ followed by the descriptions of the tags grouped by category. ...@@ -208,6 +208,8 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_sip_support SIP_SUPPORT \refitem cfg_sip_support SIP_SUPPORT
\refitem cfg_skip_function_macros SKIP_FUNCTION_MACROS \refitem cfg_skip_function_macros SKIP_FUNCTION_MACROS
\refitem cfg_sort_brief_docs SORT_BRIEF_DOCS \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_sort_member_docs SORT_MEMBER_DOCS
\refitem cfg_source_browser SOURCE_BROWSER \refitem cfg_source_browser SOURCE_BROWSER
\refitem cfg_strip_code_comments STRIP_CODE_COMMENTS \refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
...@@ -682,6 +684,26 @@ function's detailed documentation block. ...@@ -682,6 +684,26 @@ function's detailed documentation block.
by member name. If set to \c NO (the default) the members will appear in by member name. If set to \c NO (the default) the members will appear in
declaration order. 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 \anchor cfg_generate_deprecatedlist
<dt>\c GENERATE_DEPRECATEDLIST <dd> <dt>\c GENERATE_DEPRECATEDLIST <dd>
\addindex GENERATE_DEPRECATEDLIST \addindex GENERATE_DEPRECATEDLIST
...@@ -977,8 +999,10 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ...@@ -977,8 +999,10 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
<dt>\c SOURCE_BROWSER <dd> <dt>\c SOURCE_BROWSER <dd>
\addindex SOURCE_BROWSER \addindex SOURCE_BROWSER
If the \c SOURCE_BROWSER tag is set to \c YES then a list of source files will 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. 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 \anchor cfg_inline_sources
<dt>\c INLINE_SOURCES <dd> <dt>\c INLINE_SOURCES <dd>
......
...@@ -27,7 +27,7 @@ Li Daobing: lidaobing@gmail.com ...@@ -27,7 +27,7 @@ Li Daobing: lidaobing@gmail.com
Wei Liu: liuwei@asiainfo.com Wei Liu: liuwei@asiainfo.com
TranslatorChinesetraditional TranslatorChinesetraditional
Daniel YC Lin: dlin@taifex.com.tw Daniel YC Lin: dlin.tw@gmail.com
Gary Lee: garywlee@gmail.com Gary Lee: garywlee@gmail.com
TranslatorCroatian TranslatorCroatian
...@@ -90,7 +90,7 @@ TranslatorMacedonian ...@@ -90,7 +90,7 @@ TranslatorMacedonian
Slave Jovanovski: slavejovanovski@yahoo.com Slave Jovanovski: slavejovanovski@yahoo.com
TranslatorPersian TranslatorPersian
Ali Nadalizadeh: nadalisoft@yahoo.com Ali Nadalizadeh: nadalizadeh@gmail.com
TranslatorPolish TranslatorPolish
Piotr Kaminski: Piotr.Kaminski@ctm.gdynia.pl Piotr Kaminski: Piotr.Kaminski@ctm.gdynia.pl
......
...@@ -61,6 +61,11 @@ Here is the list of tags supported by doxygen: ...@@ -61,6 +61,11 @@ Here is the list of tags supported by doxygen:
<li><tt>\<summary\></tt> Identifies the brief description. <li><tt>\<summary\></tt> Identifies the brief description.
Similar to using \ref cmdbrief "\\brief". Similar to using \ref cmdbrief "\\brief".
<li><tt>\<term\></tt> Part of a <tt>\<list\></tt> command. <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. <li><tt>\<value\></tt> Identifies a property. Ignored by doxygen.
</ul> </ul>
......
...@@ -3058,6 +3058,11 @@ QCString ClassDef::className() const ...@@ -3058,6 +3058,11 @@ QCString ClassDef::className() const
return m_impl->className; return m_impl->className;
}; };
void ClassDef::setClassName(const char *name)
{
m_impl->className = name;
}
void ClassDef::addListReferences() void ClassDef::addListReferences()
{ {
bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN");
......
...@@ -284,6 +284,7 @@ class ClassDef : public Definition ...@@ -284,6 +284,7 @@ class ClassDef : public Definition
void setIsStatic(bool b); void setIsStatic(bool b);
void setIsObjectiveC(bool b); void setIsObjectiveC(bool b);
void setCompoundType(CompoundType t); void setCompoundType(CompoundType t);
void setClassName(const char *name);
void setTemplateArguments(ArgumentList *al); void setTemplateArguments(ArgumentList *al);
void setTemplateBaseClassNames(QDict<int> *templateNames); void setTemplateBaseClassNames(QDict<int> *templateNames);
......
...@@ -91,6 +91,7 @@ CommandMap cmdMap[] = ...@@ -91,6 +91,7 @@ CommandMap cmdMap[] =
{ "version", CMD_VERSION }, { "version", CMD_VERSION },
{ "warning", CMD_WARNING }, { "warning", CMD_WARNING },
{ "throws", CMD_EXCEPTION }, { "throws", CMD_EXCEPTION },
{ "tparam", CMD_TPARAM },
{ "\\", CMD_BSLASH }, { "\\", CMD_BSLASH },
{ "@", CMD_AT }, { "@", CMD_AT },
{ "<", CMD_LESS }, { "<", CMD_LESS },
...@@ -154,27 +155,29 @@ CommandMap htmlTagMap[] = ...@@ -154,27 +155,29 @@ CommandMap htmlTagMap[] =
{ "span", HTML_SPAN }, { "span", HTML_SPAN },
{ "div", HTML_DIV }, { "div", HTML_DIV },
{ "c", XML_C }, { "c", XML_C },
// { "code", XML_CODE }, <= ambigious <code> is also a HTML tag // { "code", XML_CODE }, <= ambigious <code> is also a HTML tag
{ "description",XML_DESCRIPTION }, { "description", XML_DESCRIPTION },
{ "example", XML_EXAMPLE }, { "example", XML_EXAMPLE },
{ "exception", XML_EXCEPTION }, { "exception", XML_EXCEPTION },
{ "include", XML_INCLUDE }, { "include", XML_INCLUDE },
{ "item", XML_ITEM }, { "item", XML_ITEM },
{ "list", XML_LIST }, // type="table|bullet|number" { "list", XML_LIST }, // type="table|bullet|number"
{ "listheader", XML_LISTHEADER }, { "listheader", XML_LISTHEADER },
{ "para", XML_PARA }, { "para", XML_PARA },
{ "param", XML_PARAM }, { "param", XML_PARAM },
{ "paramref", XML_PARAMREF }, { "paramref", XML_PARAMREF },
{ "permission", XML_PERMISSION }, { "typeparam", XML_TYPEPARAM },
{ "remarks", XML_REMARKS }, { "typeparamref", XML_TYPEPARAMREF },
{ "returns", XML_RETURNS }, { "permission", XML_PERMISSION },
{ "see", XML_SEE }, { "remarks", XML_REMARKS },
{ "seealso", XML_SEEALSO }, { "returns", XML_RETURNS },
{ "summary", XML_SUMMARY }, { "see", XML_SEE },
{ "term", XML_TERM }, { "seealso", XML_SEEALSO },
{ "value", XML_VALUE }, { "summary", XML_SUMMARY },
{ 0, 0 } { "term", XML_TERM },
{ "value", XML_VALUE },
{ 0, 0 }
}; };
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
......
...@@ -109,7 +109,8 @@ enum CommandType ...@@ -109,7 +109,8 @@ enum CommandType
CMD_MANONLY = 75, CMD_MANONLY = 75,
CMD_ENDMANONLY = 76, CMD_ENDMANONLY = 76,
CMD_INCWITHLINES = 77, CMD_INCWITHLINES = 77,
CMD_INHERITDOC = 78 CMD_INHERITDOC = 78,
CMD_TPARAM = 79 | SIMPLESECT_BIT
}; };
enum HtmlTagType enum HtmlTagType
...@@ -150,27 +151,28 @@ enum HtmlTagType ...@@ -150,27 +151,28 @@ enum HtmlTagType
XML_CmdMask = 0x100, XML_CmdMask = 0x100,
XML_C = XML_CmdMask + 0, XML_C = XML_CmdMask + 0,
XML_CODE = XML_CmdMask + 1, XML_CODE = XML_CmdMask + 1,
XML_DESCRIPTION= XML_CmdMask + 2, XML_DESCRIPTION = XML_CmdMask + 2,
XML_EXAMPLE = XML_CmdMask + 3, XML_EXAMPLE = XML_CmdMask + 3,
XML_EXCEPTION = XML_CmdMask + 4, XML_EXCEPTION = XML_CmdMask + 4,
XML_INCLUDE = XML_CmdMask + 5, XML_INCLUDE = XML_CmdMask + 5,
XML_ITEM = XML_CmdMask + 6, XML_ITEM = XML_CmdMask + 6,
XML_LIST = XML_CmdMask + 7, XML_LIST = XML_CmdMask + 7,
XML_LISTHEADER = XML_CmdMask + 8, XML_LISTHEADER = XML_CmdMask + 8,
XML_PARA = XML_CmdMask + 9, XML_PARA = XML_CmdMask + 9,
XML_PARAM = XML_CmdMask + 10, XML_PARAM = XML_CmdMask + 10,
XML_PARAMREF = XML_CmdMask + 11, XML_PARAMREF = XML_CmdMask + 11,
XML_PERMISSION = XML_CmdMask + 12, XML_PERMISSION = XML_CmdMask + 12,
XML_REMARKS = XML_CmdMask + 13, XML_REMARKS = XML_CmdMask + 13,
XML_RETURNS = XML_CmdMask + 14, XML_RETURNS = XML_CmdMask + 14,
XML_SEE = XML_CmdMask + 15, XML_SEE = XML_CmdMask + 15,
XML_SEEALSO = XML_CmdMask + 16, XML_SEEALSO = XML_CmdMask + 16,
XML_SUMMARY = XML_CmdMask + 17, XML_SUMMARY = XML_CmdMask + 17,
XML_TERM = XML_CmdMask + 18, XML_TERM = XML_CmdMask + 18,
XML_VALUE = XML_CmdMask + 19 XML_TYPEPARAM = XML_CmdMask + 19,
XML_TYPEPARAMREF = XML_CmdMask + 20,
XML_VALUE = XML_CmdMask + 21
}; };
class Mapper class Mapper
......
...@@ -766,9 +766,9 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst) ...@@ -766,9 +766,9 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst)
static bool callerGraph = Config_getBool("CALLER_GRAPH"); static bool callerGraph = Config_getBool("CALLER_GRAPH");
static bool callGraph = Config_getBool("CALL_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 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 || dst->hasCallerGraph()) &&
if ((referencedByRelation || callerGraph) &&
(src->isFunction() || src->isSlot()) (src->isFunction() || src->isSlot())
) )
{ {
...@@ -784,7 +784,7 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst) ...@@ -784,7 +784,7 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst)
mdDecl->addSourceReferencedBy(src); mdDecl->addSourceReferencedBy(src);
} }
} }
if ((referencesRelation || callGraph) && if ((referencesRelation || callGraph || src->hasCallGraph()) &&
(src->isFunction() || src->isSlot()) (src->isFunction() || src->isSlot())
) )
{ {
...@@ -2407,7 +2407,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -2407,7 +2407,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_code->codify(yytext); g_code->codify(yytext);
endFontClass(); endFontClass();
} }
<Body>"$"?"this->" { g_code->codify(yytext); } <Body,FuncCall>"$"?"this->" { g_code->codify(yytext); }
<Body>"."|"->" { <Body>"."|"->" {
g_code->codify(yytext); g_code->codify(yytext);
g_memCallContext = YY_START; g_memCallContext = YY_START;
......
...@@ -122,33 +122,33 @@ static DocCmdMap docCmdMap[] = ...@@ -122,33 +122,33 @@ static DocCmdMap docCmdMap[] =
// command name handler function ends brief description // command name handler function ends brief description
{ "brief", &handleBrief, FALSE }, { "brief", &handleBrief, FALSE },
{ "short", &handleBrief, FALSE }, { "short", &handleBrief, FALSE },
{ "fn", &handleFn, TRUE }, { "fn", &handleFn, FALSE },
{ "var", &handleFn, TRUE }, { "var", &handleFn, FALSE },
{ "typedef", &handleFn, TRUE }, { "typedef", &handleFn, FALSE },
{ "property", &handleFn, TRUE }, { "property", &handleFn, FALSE },
{ "def", &handleDef, TRUE }, { "def", &handleDef, FALSE },
{ "overload", &handleOverload, TRUE }, { "overload", &handleOverload, FALSE },
{ "enum", &handleEnum, TRUE }, { "enum", &handleEnum, FALSE },
{ "defgroup", &handleDefGroup, TRUE }, { "defgroup", &handleDefGroup, FALSE },
{ "addtogroup", &handleAddToGroup, TRUE }, { "addtogroup", &handleAddToGroup, FALSE },
{ "weakgroup", &handleWeakGroup, TRUE }, { "weakgroup", &handleWeakGroup, FALSE },
{ "namespace", &handleNamespace, TRUE }, { "namespace", &handleNamespace, FALSE },
{ "package", &handlePackage, TRUE }, { "package", &handlePackage, FALSE },
{ "class", &handleClass, TRUE }, { "class", &handleClass, FALSE },
{ "headerfile", &handleHeaderFile, TRUE }, { "headerfile", &handleHeaderFile, FALSE },
{ "protocol", &handleProtocol, TRUE }, { "protocol", &handleProtocol, FALSE },
{ "category", &handleCategory, TRUE }, { "category", &handleCategory, FALSE },
{ "union", &handleUnion, TRUE }, { "union", &handleUnion, FALSE },
{ "struct", &handleStruct, TRUE }, { "struct", &handleStruct, FALSE },
{ "interface", &handleInterface, TRUE }, { "interface", &handleInterface, FALSE },
{ "idlexcept", &handleIdlException, TRUE }, { "idlexcept", &handleIdlException, FALSE },
{ "page", &handlePage, TRUE }, { "page", &handlePage, FALSE },
{ "mainpage", &handleMainpage, TRUE }, { "mainpage", &handleMainpage, FALSE },
{ "file", &handleFile, TRUE }, { "file", &handleFile, FALSE },
{ "dir", &handleDir, TRUE }, { "dir", &handleDir, FALSE },
{ "example", &handleExample, TRUE }, { "example", &handleExample, FALSE },
{ "details", &handleDetails, TRUE }, { "details", &handleDetails, TRUE },
{ "name", &handleName, TRUE }, { "name", &handleName, FALSE },
{ "todo", &handleTodo, TRUE }, { "todo", &handleTodo, TRUE },
{ "test", &handleTest, TRUE }, { "test", &handleTest, TRUE },
{ "bug", &handleBug, TRUE }, { "bug", &handleBug, TRUE },
...@@ -174,28 +174,28 @@ static DocCmdMap docCmdMap[] = ...@@ -174,28 +174,28 @@ static DocCmdMap docCmdMap[] =
{ "dot", &handleFormatBlock, TRUE }, { "dot", &handleFormatBlock, TRUE },
{ "msc", &handleFormatBlock, TRUE }, { "msc", &handleFormatBlock, TRUE },
{ "code", &handleFormatBlock, TRUE }, { "code", &handleFormatBlock, TRUE },
{ "addindex", &handleAddIndex, TRUE }, { "addindex", &handleAddIndex, FALSE },
{ "if", &handleIf, FALSE }, { "if", &handleIf, FALSE },
{ "ifnot", &handleIfNot, FALSE }, { "ifnot", &handleIfNot, FALSE },
{ "elseif", &handleElseIf, FALSE }, { "elseif", &handleElseIf, FALSE },
{ "else", &handleElse, FALSE }, { "else", &handleElse, FALSE },
{ "endif", &handleEndIf, FALSE }, { "endif", &handleEndIf, FALSE },
{ "ingroup", &handleIngroup, TRUE }, { "ingroup", &handleIngroup, FALSE },
{ "nosubgrouping", &handleNoSubGrouping, TRUE }, { "nosubgrouping", &handleNoSubGrouping, FALSE },
{ "showinitializer", &handleShowInitializer, TRUE }, { "showinitializer", &handleShowInitializer, FALSE },
{ "hideinitializer", &handleHideInitializer, TRUE }, { "hideinitializer", &handleHideInitializer, FALSE },
{ "callgraph", &handleCallgraph, TRUE }, { "callgraph", &handleCallgraph, FALSE },
{ "callergraph", &handleCallergraph, TRUE }, { "callergraph", &handleCallergraph, FALSE },
{ "internal", &handleInternal, TRUE }, { "internal", &handleInternal, TRUE },
{ "_linebr", &handleLineBr, FALSE }, { "_linebr", &handleLineBr, FALSE },
{ "static", &handleStatic, TRUE }, { "static", &handleStatic, FALSE },
{ "pure", &handlePure, TRUE }, { "pure", &handlePure, FALSE },
{ "private", &handlePrivate, TRUE }, { "private", &handlePrivate, FALSE },
{ "privatesection", &handlePrivateSection, TRUE }, { "privatesection", &handlePrivateSection, FALSE },
{ "protected", &handleProtected, TRUE }, { "protected", &handleProtected, FALSE },
{ "protectedsection",&handleProtectedSection, TRUE }, { "protectedsection",&handleProtectedSection, FALSE },
{ "public", &handlePublic, TRUE }, { "public", &handlePublic, FALSE },
{ "publicsection", &handlePublicSection, TRUE }, { "publicsection", &handlePublicSection, FALSE },
{ "inherit", &handleInherit, TRUE }, { "inherit", &handleInherit, TRUE },
{ "arg", 0, TRUE }, { "arg", 0, TRUE },
{ "attention", 0, TRUE }, { "attention", 0, TRUE },
...@@ -213,6 +213,7 @@ static DocCmdMap docCmdMap[] = ...@@ -213,6 +213,7 @@ static DocCmdMap docCmdMap[] =
{ "note", 0, TRUE }, { "note", 0, TRUE },
{ "par", 0, TRUE }, { "par", 0, TRUE },
{ "param", 0, TRUE }, { "param", 0, TRUE },
{ "tparam", 0, TRUE },
{ "post", 0, TRUE }, { "post", 0, TRUE },
{ "pre", 0, TRUE }, { "pre", 0, TRUE },
{ "remark", 0, TRUE }, { "remark", 0, TRUE },
...@@ -728,14 +729,14 @@ static inline void addOutput(char c) ...@@ -728,14 +729,14 @@ static inline void addOutput(char c)
*pOutputString+=c; *pOutputString+=c;
} }
static void endBrief() static void endBrief(bool addToOutput=TRUE)
{ {
if (!current->brief.stripWhiteSpace().isEmpty()) if (!current->brief.stripWhiteSpace().isEmpty())
{ // only go to the detailed description if we have { // only go to the detailed description if we have
// found some brief description and not just whitespace // found some brief description and not just whitespace
briefEndsAtDot=FALSE; briefEndsAtDot=FALSE;
setOutput(OutputDoc); setOutput(OutputDoc);
addOutput(yytext); if (addToOutput) addOutput(yytext);
} }
} }
...@@ -1009,13 +1010,13 @@ RCSTAG "$"{ID}":"[^\n$]+"$" ...@@ -1009,13 +1010,13 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>(\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command) <Comment>(\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command)
if (inContext!=OutputBrief) if (inContext!=OutputBrief)
{ {
addOutput(yytext); addOutput("\n\n");
setOutput(OutputDoc); setOutput(OutputDoc);
} }
else else
{ // only go to the detailed description if we have { // only go to the detailed description if we have
// found some brief description and not just whitespace // found some brief description and not just whitespace
endBrief(); endBrief(FALSE);
} }
lineCount(); lineCount();
} }
...@@ -2216,6 +2217,12 @@ static bool handleInternal(const QCString &) ...@@ -2216,6 +2217,12 @@ static bool handleInternal(const QCString &)
{ {
if (!Config_getBool("INTERNAL_DOCS")) 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 ); BEGIN( SkipInternal );
} }
else else
......
...@@ -775,6 +775,7 @@ ...@@ -775,6 +775,7 @@
<xsd:enumeration value="param" /> <xsd:enumeration value="param" />
<xsd:enumeration value="retval" /> <xsd:enumeration value="retval" />
<xsd:enumeration value="exception" /> <xsd:enumeration value="exception" />
<xsd:enumeration value="templateparam" />
</xsd:restriction> </xsd:restriction>
</xsd:simpleType> </xsd:simpleType>
......
...@@ -775,6 +775,7 @@ ...@@ -775,6 +775,7 @@
" <xsd:enumeration value=\"param\" />\n" " <xsd:enumeration value=\"param\" />\n"
" <xsd:enumeration value=\"retval\" />\n" " <xsd:enumeration value=\"retval\" />\n"
" <xsd:enumeration value=\"exception\" />\n" " <xsd:enumeration value=\"exception\" />\n"
" <xsd:enumeration value=\"templateparam\" />\n"
" </xsd:restriction>\n" " </xsd:restriction>\n"
" </xsd:simpleType>\n" " </xsd:simpleType>\n"
"\n" "\n"
......
...@@ -1291,6 +1291,7 @@ void Config::check() ...@@ -1291,6 +1291,7 @@ void Config::check()
annotationFromBrief.append("the"); annotationFromBrief.append("the");
} }
#if 0
if (Config_getBool("CALL_GRAPH") && if (Config_getBool("CALL_GRAPH") &&
(!Config_getBool("SOURCE_BROWSER") || !Config_getBool("REFERENCES_RELATION")) (!Config_getBool("SOURCE_BROWSER") || !Config_getBool("REFERENCES_RELATION"))
) )
...@@ -1311,6 +1312,7 @@ void Config::check() ...@@ -1311,6 +1312,7 @@ void Config::check()
Config_getBool("SOURCE_BROWSER")=TRUE; Config_getBool("SOURCE_BROWSER")=TRUE;
Config_getBool("REFERENCED_BY_RELATION")=TRUE; Config_getBool("REFERENCED_BY_RELATION")=TRUE;
} }
#endif
// some default settings for vhdl // some default settings for vhdl
if (Config_getBool("OPTIMIZE_OUTPUT_VHDL") && if (Config_getBool("OPTIMIZE_OUTPUT_VHDL") &&
(Config_getBool("INLINE_INHERITED_MEMB") || (Config_getBool("INLINE_INHERITED_MEMB") ||
...@@ -1413,10 +1415,11 @@ void Config::create() ...@@ -1413,10 +1415,11 @@ void Config::create()
"information to generate all constant output in the proper language. \n" "information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n" "The default language is English, other supported languages are: \n"
"Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n" "Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n"
"Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, \n" "Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n"
"Italian, Japanese, Japanese-en (Japanese with English messages), Korean, \n" "Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n"
"Korean-en, Lithuanian, Norwegian, Macedonian, Polish, Portuguese, Romanian, \n" "Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n"
"Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.\n", "Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, \n"
"and Ukrainian.\n",
"English" "English"
); );
#ifdef LANG_ZA #ifdef LANG_ZA
...@@ -1486,6 +1489,7 @@ void Config::create() ...@@ -1486,6 +1489,7 @@ void Config::create()
ce->addValue("Macedonian"); ce->addValue("Macedonian");
#endif #endif
#ifdef LANG_FA #ifdef LANG_FA
ce->addValue("Farsi");
ce->addValue("Persian"); ce->addValue("Persian");
#endif #endif
#ifdef LANG_PL #ifdef LANG_PL
...@@ -1891,6 +1895,13 @@ void Config::create() ...@@ -1891,6 +1895,13 @@ void Config::create()
"declaration order. \n", "declaration order. \n",
FALSE 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( cb = addBool(
"SORT_BY_SCOPE_NAME", "SORT_BY_SCOPE_NAME",
"If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \n" "If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \n"
...@@ -2159,9 +2170,7 @@ void Config::create() ...@@ -2159,9 +2170,7 @@ void Config::create()
"If the SOURCE_BROWSER tag is set to YES then a list of source files will \n" "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" "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" "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" "VERBATIM_HEADERS is set to NO. \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",
FALSE FALSE
); );
cb = addBool( cb = addBool(
...@@ -2181,16 +2190,14 @@ void Config::create() ...@@ -2181,16 +2190,14 @@ void Config::create()
"If the REFERENCED_BY_RELATION tag is set to YES (the default) \n" "If the REFERENCED_BY_RELATION tag is set to YES (the default) \n"
"then for each documented function all documented \n" "then for each documented function all documented \n"
"functions referencing it will be listed. \n", "functions referencing it will be listed. \n",
TRUE FALSE
); );
cb->addDependency("SOURCE_BROWSER");
cb = addBool( "REFERENCES_RELATION", cb = addBool( "REFERENCES_RELATION",
"If the REFERENCES_RELATION tag is set to YES (the default) \n" "If the REFERENCES_RELATION tag is set to YES (the default) \n"
"then for each documented function all documented entities \n" "then for each documented function all documented entities \n"
"called/used by that function will be listed. \n", "called/used by that function will be listed. \n",
TRUE FALSE
); );
cb->addDependency("SOURCE_BROWSER");
cb = addBool( "REFERENCES_LINK_SOURCE", cb = addBool( "REFERENCES_LINK_SOURCE",
"If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\n" "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" "and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\n"
...@@ -2198,7 +2205,6 @@ void Config::create() ...@@ -2198,7 +2205,6 @@ void Config::create()
"link to the source code. Otherwise they will link to the documentstion.\n", "link to the source code. Otherwise they will link to the documentstion.\n",
TRUE TRUE
); );
cb->addDependency("SOURCE_BROWSER");
cb = addBool( cb = addBool(
"USE_HTAGS", "USE_HTAGS",
"If the USE_HTAGS tag is set to YES then the references to source code \n" "If the USE_HTAGS tag is set to YES then the references to source code \n"
...@@ -2961,7 +2967,7 @@ void Config::create() ...@@ -2961,7 +2967,7 @@ void Config::create()
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"CALL_GRAPH", "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" "doxygen will generate a call dependency graph for every global function \n"
"or class method. Note that enabling this option will significantly increase \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" "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() ...@@ -2971,7 +2977,7 @@ void Config::create()
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"CALLER_GRAPH", "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" "doxygen will generate a caller dependency graph for every global function \n"
"or class method. Note that enabling this option will significantly increase \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" "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]* ...@@ -159,6 +159,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
} }
<ReadFuncArgPtr>")"/{B}*"[" { // pointer to fixed size array <ReadFuncArgPtr>")"/{B}*"[" { // pointer to fixed size array
g_curArgTypeName+=yytext; g_curArgTypeName+=yytext;
g_curArgTypeName+=g_curArgName;
//g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace(); //g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace();
BEGIN( ReadFuncArgType ); BEGIN( ReadFuncArgType );
} }
...@@ -307,6 +308,19 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -307,6 +308,19 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
a->type = removeRedundantWhiteSpace(g_curArgTypeName); a->type = removeRedundantWhiteSpace(g_curArgTypeName);
} }
a->array += removeRedundantWhiteSpace(g_curArgArray); 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(); 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()); //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(); a->docs = g_curArgDocs.stripWhiteSpace();
......
...@@ -301,6 +301,32 @@ Definition::~Definition() ...@@ -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) void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
{ {
if (!anchorList) return; if (!anchorList) return;
...@@ -765,7 +791,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, ...@@ -765,7 +791,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool /*funcOnly*/) const QCString &text,MemberSDict *members,bool /*funcOnly*/)
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
if (Config_getBool("SOURCE_BROWSER") && members) if (/*Config_getBool("SOURCE_BROWSER") &&*/ members)
{ {
ol.startParagraph(); ol.startParagraph();
ol.parseText(text); ol.parseText(text);
...@@ -938,7 +964,6 @@ void Definition::addSourceReferences(MemberDef *md) ...@@ -938,7 +964,6 @@ void Definition::addSourceReferences(MemberDef *md)
} }
if (m_impl->sourceRefsDict->find(name)==0) if (m_impl->sourceRefsDict->find(name)==0)
{ {
//printf("Adding reference %s->%s\n",md->name().data(),name.data());
m_impl->sourceRefsDict->inSort(name,md); m_impl->sourceRefsDict->inSort(name,md);
} }
} }
......
...@@ -245,7 +245,7 @@ class Definition : public DefinitionIntf, public LockableObj ...@@ -245,7 +245,7 @@ class Definition : public DefinitionIntf, public LockableObj
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
/*! Sets a new \a name for the definition */ /*! 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. */ /*! Sets the documentation of this definition to \a d. */
void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE); void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
......
...@@ -558,145 +558,7 @@ DirDef *DirDef::mergeDirectoryInTree(const QCString &path) ...@@ -558,145 +558,7 @@ DirDef *DirDef::mergeDirectoryInTree(const QCString &path)
void DirDef::writeDepGraph(QTextStream &t) void DirDef::writeDepGraph(QTextStream &t)
{ {
t << "digraph G {\n"; writeDotDirDepGraph(t,this);
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";
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
......
...@@ -62,6 +62,7 @@ class DirDef : public Definition ...@@ -62,6 +62,7 @@ class DirDef : public Definition
bool isCluster() const { return m_subdirs.count()>0; } bool isCluster() const { return m_subdirs.count()>0; }
int level() const { return m_level; } int level() const { return m_level; }
DirDef *parent() const { return m_parent; } DirDef *parent() const { return m_parent; }
int dirCount() const { return m_dirCount; }
const QDict<UsedDir> *usedDirs() const { return m_usedDirs; } const QDict<UsedDir> *usedDirs() const { return m_usedDirs; }
bool isParentOf(DirDef *dir) const; bool isParentOf(DirDef *dir) const;
bool depGraphIsTrivial() const; bool depGraphIsTrivial() const;
......
...@@ -162,7 +162,7 @@ static void docParserPushContext() ...@@ -162,7 +162,7 @@ static void docParserPushContext()
g_parserStack.push(ctx); g_parserStack.push(ctx);
} }
static void docParserPopContext() static void docParserPopContext(bool keepParamInfo=FALSE)
{ {
DocParserContext *ctx = g_parserStack.pop(); DocParserContext *ctx = g_parserStack.pop();
g_context = ctx->context; g_context = ctx->context;
...@@ -175,10 +175,13 @@ static void docParserPopContext() ...@@ -175,10 +175,13 @@ static void docParserPopContext()
g_fileName = ctx->fileName; g_fileName = ctx->fileName;
g_relPath = ctx->relPath; g_relPath = ctx->relPath;
g_hasParamCommand = ctx->hasParamCommand; if (!keepParamInfo)
g_hasReturnCommand = ctx->hasReturnCommand; {
g_hasParamCommand = ctx->hasParamCommand;
g_hasReturnCommand = ctx->hasReturnCommand;
g_paramsFound = ctx->paramsFound;
}
g_memberDef = ctx->memberDef; g_memberDef = ctx->memberDef;
g_paramsFound = ctx->paramsFound;
g_isExample = ctx->isExample; g_isExample = ctx->isExample;
g_exampleName = ctx->exampleName; g_exampleName = ctx->exampleName;
g_sectionDict = ctx->sectionDict; g_sectionDict = ctx->sectionDict;
...@@ -1754,6 +1757,8 @@ void DocCopy::parse() ...@@ -1754,6 +1757,8 @@ void DocCopy::parse()
g_copyStack.append(def); g_copyStack.append(def);
// make sure the descriptions end with a newline, so the parser will correctly // make sure the descriptions end with a newline, so the parser will correctly
// handle them in all cases. // handle them in all cases.
//printf("doc='%s'\n",doc.data());
//printf("brief='%s'\n",brief.data());
brief+='\n'; brief+='\n';
doc+='\n'; doc+='\n';
internalValidatingParseDoc(this,m_children,brief); internalValidatingParseDoc(this,m_children,brief);
...@@ -1761,7 +1766,7 @@ void DocCopy::parse() ...@@ -1761,7 +1766,7 @@ void DocCopy::parse()
g_copyStack.remove(def); g_copyStack.remove(def);
ASSERT(g_styleStack.isEmpty()); ASSERT(g_styleStack.isEmpty());
ASSERT(g_nodeStack.isEmpty()); ASSERT(g_nodeStack.isEmpty());
docParserPopContext(); docParserPopContext(TRUE);
} }
else // oops, recursion else // oops, recursion
{ {
...@@ -4001,6 +4006,7 @@ int DocParamList::parseXml(const QString &paramName) ...@@ -4001,6 +4006,7 @@ int DocParamList::parseXml(const QString &paramName)
} while (retval==RetVal_CloseXml && } while (retval==RetVal_CloseXml &&
Mappers::htmlTagMapper->map(g_token->name)!=XML_PARAM && Mappers::htmlTagMapper->map(g_token->name)!=XML_PARAM &&
Mappers::htmlTagMapper->map(g_token->name)!=XML_TYPEPARAM &&
Mappers::htmlTagMapper->map(g_token->name)!=XML_EXCEPTION); Mappers::htmlTagMapper->map(g_token->name)!=XML_EXCEPTION);
...@@ -4419,7 +4425,7 @@ void DocPara::handleInheritDoc() ...@@ -4419,7 +4425,7 @@ void DocPara::handleInheritDoc()
internalValidatingParseDoc(this,m_children,reMd->briefDescription()); internalValidatingParseDoc(this,m_children,reMd->briefDescription());
internalValidatingParseDoc(this,m_children,reMd->documentation()); internalValidatingParseDoc(this,m_children,reMd->documentation());
g_copyStack.remove(reMd); g_copyStack.remove(reMd);
docParserPopContext(); docParserPopContext(TRUE);
g_memberDef = thisMd; g_memberDef = thisMd;
} }
} }
...@@ -4641,6 +4647,9 @@ int DocPara::handleCommand(const QString &cmdName) ...@@ -4641,6 +4647,9 @@ int DocPara::handleCommand(const QString &cmdName)
case CMD_PARAM: case CMD_PARAM:
retval = handleParamSection(cmdName,DocParamSect::Param,FALSE,g_token->paramDir); retval = handleParamSection(cmdName,DocParamSect::Param,FALSE,g_token->paramDir);
break; break;
case CMD_TPARAM:
retval = handleParamSection(cmdName,DocParamSect::TemplateParam,FALSE,g_token->paramDir);
break;
case CMD_RETVAL: case CMD_RETVAL:
retval = handleParamSection(cmdName,DocParamSect::RetVal); retval = handleParamSection(cmdName,DocParamSect::RetVal);
break; break;
...@@ -5012,11 +5021,14 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag ...@@ -5012,11 +5021,14 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
handleStyleEnter(this,m_children,DocStyleChange::Code,&g_token->attribs); handleStyleEnter(this,m_children,DocStyleChange::Code,&g_token->attribs);
break; break;
case XML_PARAM: case XML_PARAM:
case XML_TYPEPARAM:
{ {
QString paramName; QString paramName;
if (findAttribute(tagHtmlAttribs,"name",&paramName)) if (findAttribute(tagHtmlAttribs,"name",&paramName))
{ {
retval = handleParamSection(paramName,DocParamSect::Param,TRUE); retval = handleParamSection(paramName,
tagId==XML_PARAM ? DocParamSect::Param : DocParamSect::TemplateParam,
TRUE);
} }
else else
{ {
...@@ -5025,6 +5037,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag ...@@ -5025,6 +5037,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
} }
break; break;
case XML_PARAMREF: case XML_PARAMREF:
case XML_TYPEPARAMREF:
{ {
QString paramName; QString paramName;
if (findAttribute(tagHtmlAttribs,"name",&paramName)) if (findAttribute(tagHtmlAttribs,"name",&paramName))
...@@ -5037,7 +5050,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag ...@@ -5037,7 +5050,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
} }
else 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; break;
...@@ -5330,6 +5343,7 @@ int DocPara::handleHtmlEndTag(const QString &tagName) ...@@ -5330,6 +5343,7 @@ int DocPara::handleHtmlEndTag(const QString &tagName)
case XML_LIST: case XML_LIST:
case XML_EXAMPLE: case XML_EXAMPLE:
case XML_PARAM: case XML_PARAM:
case XML_TYPEPARAM:
case XML_RETURNS: case XML_RETURNS:
case XML_SEEALSO: case XML_SEEALSO:
case XML_EXCEPTION: case XML_EXCEPTION:
...@@ -5344,6 +5358,7 @@ int DocPara::handleHtmlEndTag(const QString &tagName) ...@@ -5344,6 +5358,7 @@ int DocPara::handleHtmlEndTag(const QString &tagName)
case XML_PERMISSION: case XML_PERMISSION:
case XML_DESCRIPTION: case XML_DESCRIPTION:
case XML_PARAMREF: case XML_PARAMREF:
case XML_TYPEPARAMREF:
// These tags are defined in .Net but are currently unsupported // These tags are defined in .Net but are currently unsupported
break; break;
case HTML_UNKNOWN: case HTML_UNKNOWN:
......
...@@ -939,7 +939,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode ...@@ -939,7 +939,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode
public: public:
enum Type enum Type
{ {
Unknown, Param, RetVal, Exception Unknown, Param, RetVal, Exception, TemplateParam
}; };
enum Direction enum Direction
{ {
......
This diff is collapsed.
...@@ -337,5 +337,6 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, ...@@ -337,5 +337,6 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString& relPath,const QString &context); const QCString& relPath,const QString &context);
void writeDotDirDepGraph(QTextStream &t,DirDef *dd);
#endif #endif
...@@ -2482,6 +2482,44 @@ static void buildVarList(EntryNav *rootNav) ...@@ -2482,6 +2482,44 @@ static void buildVarList(EntryNav *rootNav)
else else
mtype=MemberDef::Variable; 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 if (!root->relates.isEmpty()) // related variable
{ {
isRelated=TRUE; isRelated=TRUE;
...@@ -7019,7 +7057,8 @@ static void addSourceReferences() ...@@ -7019,7 +7057,8 @@ static void addSourceReferences()
if (fd && if (fd &&
md->getStartBodyLine()!=-1 && md->getStartBodyLine()!=-1 &&
md->isLinkableInProject() && md->isLinkableInProject() &&
fd->generateSourceFile()) (fd->generateSourceFile() || Doxygen::parseSourcesNeeded)
)
{ {
//printf("Found member `%s' in file `%s' at line `%d' def=%s\n", //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()); // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data());
...@@ -7035,12 +7074,15 @@ static void addSourceReferences() ...@@ -7035,12 +7074,15 @@ static void addSourceReferences()
for (mni.toFirst();(md=mni.current());++mni) for (mni.toFirst();(md=mni.current());++mni)
{ {
FileDef *fd=md->getBodyDef(); FileDef *fd=md->getBodyDef();
//printf("member %s body=[%d,%d] fd=%p\n",md->name().data(), //printf("member %s body=[%d,%d] fd=%p link=%d parseSources=%d\n",
// md->getStartBodyLine(),md->getEndBodyLine(),fd); // md->name().data(),
// md->getStartBodyLine(),md->getEndBodyLine(),fd,
// md->isLinkableInProject(),
// Doxygen::parseSourcesNeeded);
if (fd && if (fd &&
md->getStartBodyLine()!=-1 && md->getStartBodyLine()!=-1 &&
md->isLinkableInProject() && md->isLinkableInProject() &&
fd->generateSourceFile() (fd->generateSourceFile() || Doxygen::parseSourcesNeeded)
) )
{ {
//printf("Found member `%s' in file `%s' at line `%d' def=%s\n", //printf("Found member `%s' in file `%s' at line `%d' def=%s\n",
...@@ -9267,7 +9309,9 @@ void checkConfiguration() ...@@ -9267,7 +9309,9 @@ void checkConfiguration()
Doxygen::xrefLists->setAutoDelete(TRUE); Doxygen::xrefLists->setAutoDelete(TRUE);
Doxygen::parseSourcesNeeded = Config_getBool("CALL_GRAPH") || 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 ...@@ -266,7 +266,7 @@ class Entry
NonAtomic = 0x040000, NonAtomic = 0x040000,
Copy = 0x080000, Copy = 0x080000,
Retain = 0x100000, Retain = 0x100000,
Assign = 0x200000, Assign = 0x200000
}; };
enum ClassSpecifier enum ClassSpecifier
{ {
......
...@@ -835,7 +835,7 @@ void FileDef::addSourceRef(int line,Definition *d,MemberDef *md) ...@@ -835,7 +835,7 @@ void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
srcDefDict->insert(line,d); srcDefDict->insert(line,d);
if (md) srcMemberDict->insert(line,md); if (md) srcMemberDict->insert(line,md);
//printf("Adding member %s with anchor %s at line %d to file %s\n", //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) ...@@ -630,7 +630,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
codifyLines(yytext); codifyLines(yytext);
endFontClass(); endFontClass();
} }
<Start>"end"({BS_}{COMMANDS})?/[ \t\n].* { <Start>"end"({BS_}{COMMANDS})?/[ \t\n] {
startFontClass("keyword"); startFontClass("keyword");
codifyLines(yytext); codifyLines(yytext);
endFontClass(); endFontClass();
......
...@@ -142,10 +142,19 @@ class GroupSDict : public SDict<GroupDef> ...@@ -142,10 +142,19 @@ class GroupSDict : public SDict<GroupDef>
public: public:
GroupSDict(uint size) : SDict<GroupDef>(size) {} GroupSDict(uint size) : SDict<GroupDef>(size) {}
virtual ~GroupSDict() {} virtual ~GroupSDict() {}
int compareItems(GCI item1,GCI item2)
{
return strcmp(((GroupDef*)item1)->groupTitle(),((GroupDef*)item2)->groupTitle());
}
}; };
class GroupList : public QList<GroupDef> 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> class GroupListIterator : public QListIterator<GroupDef>
......
...@@ -935,6 +935,11 @@ void HtmlDocVisitor::visitPre(DocParamSect *s) ...@@ -935,6 +935,11 @@ void HtmlDocVisitor::visitPre(DocParamSect *s)
m_t << theTranslator->trReturnValues(); break; m_t << theTranslator->trReturnValues(); break;
case DocParamSect::Exception: case DocParamSect::Exception:
m_t << theTranslator->trExceptions(); break; m_t << theTranslator->trExceptions(); break;
case DocParamSect::TemplateParam:
/* TODO: add this
m_t << theTranslator->trTemplateParam(); break;
*/
m_t << "Template Parameters"; break;
default: default:
ASSERT(0); ASSERT(0);
} }
......
...@@ -152,7 +152,7 @@ QCString abbreviate(const char *s,const char *name) ...@@ -152,7 +152,7 @@ QCString abbreviate(const char *s,const char *name)
{ {
QCString scopelessName=name; QCString scopelessName=name;
int i=scopelessName.findRev("::"); int i=scopelessName.findRev("::");
if (i!=-1) scopelessName=scopelessName.mid(i); if (i!=-1) scopelessName=scopelessName.mid(i+2);
QCString result=s; QCString result=s;
result=result.stripWhiteSpace(); result=result.stripWhiteSpace();
// strip trailing . // strip trailing .
...@@ -2433,6 +2433,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2433,6 +2433,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
if (hasSubGroups) if (hasSubGroups)
{ {
startIndexHierarchy(ol,level+1); startIndexHierarchy(ol,level+1);
if (Config_getBool("SORT_GROUP_NAMES"))
gd->groupList->sort();
QListIterator<GroupDef> gli(*gd->groupList); QListIterator<GroupDef> gli(*gd->groupList);
GroupDef *subgd = 0; GroupDef *subgd = 0;
for (gli.toFirst();(subgd=gli.current());++gli) for (gli.toFirst();(subgd=gli.current());++gli)
...@@ -2544,6 +2546,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2544,6 +2546,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
void writeGroupHierarchy(OutputList &ol) void writeGroupHierarchy(OutputList &ol)
{ {
startIndexHierarchy(ol,0); startIndexHierarchy(ol,0);
if (Config_getBool("SORT_GROUP_NAMES"))
Doxygen::groupSDict->sort();
GroupSDict::Iterator gli(*Doxygen::groupSDict); GroupSDict::Iterator gli(*Doxygen::groupSDict);
GroupDef *gd; GroupDef *gd;
for (gli.toFirst();(gd=gli.current());++gli) for (gli.toFirst();(gd=gli.current());++gli)
......
...@@ -355,7 +355,7 @@ bool setTranslator(const char *langName) ...@@ -355,7 +355,7 @@ bool setTranslator(const char *langName)
} }
#endif #endif
#ifdef LANG_FA #ifdef LANG_FA
else if (L_EQUAL("persian")) else if (L_EQUAL("persian") || L_EQUAL("farsi"))
{ {
theTranslator=new TranslatorDecoder(new TranslatorPersian); theTranslator=new TranslatorDecoder(new TranslatorPersian);
} }
......
...@@ -927,6 +927,11 @@ void LatexDocVisitor::visitPre(DocParamSect *s) ...@@ -927,6 +927,11 @@ void LatexDocVisitor::visitPre(DocParamSect *s)
filter(theTranslator->trReturnValues()); break; filter(theTranslator->trReturnValues()); break;
case DocParamSect::Exception: case DocParamSect::Exception:
filter(theTranslator->trExceptions()); break; filter(theTranslator->trExceptions()); break;
case DocParamSect::TemplateParam:
/* TODO: add this
filter(theTranslator->trTemplateParam()); break;
*/
filter("Template Parameters"); break;
default: default:
ASSERT(0); ASSERT(0);
} }
......
...@@ -807,6 +807,11 @@ void ManDocVisitor::visitPre(DocParamSect *s) ...@@ -807,6 +807,11 @@ void ManDocVisitor::visitPre(DocParamSect *s)
m_t << theTranslator->trReturnValues(); break; m_t << theTranslator->trReturnValues(); break;
case DocParamSect::Exception: case DocParamSect::Exception:
m_t << theTranslator->trExceptions(); break; m_t << theTranslator->trExceptions(); break;
case DocParamSect::TemplateParam:
/* TODO: add this
m_t << theTranslator->trTemplateParam(); break;
*/
m_t << "Template Parameters"; break;
default: default:
ASSERT(0); ASSERT(0);
} }
......
...@@ -1161,6 +1161,7 @@ void PerlModDocVisitor::visitPre(DocParamSect *s) ...@@ -1161,6 +1161,7 @@ void PerlModDocVisitor::visitPre(DocParamSect *s)
case DocParamSect::Param: type = "params"; break; case DocParamSect::Param: type = "params"; break;
case DocParamSect::RetVal: type = "retvals"; break; case DocParamSect::RetVal: type = "retvals"; break;
case DocParamSect::Exception: type = "exceptions"; break; case DocParamSect::Exception: type = "exceptions"; break;
case DocParamSect::TemplateParam: type = "templateparam"; break;
case DocParamSect::Unknown: case DocParamSect::Unknown:
err("Error: unknown parameter section found\n"); err("Error: unknown parameter section found\n");
break; break;
......
...@@ -589,6 +589,7 @@ class PrintDocVisitor : public DocVisitor ...@@ -589,6 +589,7 @@ class PrintDocVisitor : public DocVisitor
case DocParamSect::Param: printf("param"); break; case DocParamSect::Param: printf("param"); break;
case DocParamSect::RetVal: printf("retval"); break; case DocParamSect::RetVal: printf("retval"); break;
case DocParamSect::Exception: printf("exception"); break; case DocParamSect::Exception: printf("exception"); break;
case DocParamSect::TemplateParam: printf("templateparam"); break;
case DocParamSect::Unknown: printf("unknown"); break; case DocParamSect::Unknown: printf("unknown"); break;
} }
printf(">\n"); printf(">\n");
......
...@@ -1174,6 +1174,11 @@ void RTFDocVisitor::visitPre(DocParamSect *s) ...@@ -1174,6 +1174,11 @@ void RTFDocVisitor::visitPre(DocParamSect *s)
m_t << theTranslator->trReturnValues(); break; m_t << theTranslator->trReturnValues(); break;
case DocParamSect::Exception: case DocParamSect::Exception:
m_t << theTranslator->trExceptions(); break; m_t << theTranslator->trExceptions(); break;
case DocParamSect::TemplateParam:
/* TODO: add this
m_t << theTranslator->trTemplateParam(); break;
*/
m_t << "Template Parameters"; break;
default: default:
ASSERT(0); ASSERT(0);
} }
......
...@@ -2773,7 +2773,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2773,7 +2773,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
initEntry(); initEntry();
BEGIN( FindMembers ); BEGIN( FindMembers );
} }
<IDLProp>. { <IDLProp>. { // spaces, *, or other stuff
idlProp+=yytext;
} }
<Array>"]" { current->args += *yytext ; <Array>"]" { current->args += *yytext ;
if (--squareCount<=0) if (--squareCount<=0)
......
...@@ -288,7 +288,7 @@ function main() ...@@ -288,7 +288,7 @@ function main()
{ {
$query=$_GET["query"]; $query=$_GET["query"];
} }
end_form($query); end_form(ereg_replace("[^[:alnum:]:\\.\\t ]", " ", $query ));
echo "&nbsp;\n<div class=\"searchresults\">\n"; echo "&nbsp;\n<div class=\"searchresults\">\n";
$results = array(); $results = array();
$requiredWords = array(); $requiredWords = array();
......
...@@ -288,7 +288,7 @@ ...@@ -288,7 +288,7 @@
" {\n" " {\n"
" $query=$_GET[\"query\"];\n" " $query=$_GET[\"query\"];\n"
" }\n" " }\n"
" end_form($query);\n" " end_form(ereg_replace(\"[^[:alnum:]:\\\\.\\\\t ]\", \" \", $query ));\n"
" echo \"&nbsp;\\n<div class=\\\"searchresults\\\">\\n\";\n" " echo \"&nbsp;\\n<div class=\\\"searchresults\\\">\\n\";\n"
" $results = array();\n" " $results = array();\n"
" $requiredWords = array();\n" " $requiredWords = array();\n"
......
...@@ -168,6 +168,18 @@ class SDict ...@@ -168,6 +168,18 @@ class SDict
return item ? m_list->remove(item) : FALSE; 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 /*! Sorts the members of the dictionary. First appending a number
* of members and then sorting them is faster (O(NlogN) than using * of members and then sorting them is faster (O(NlogN) than using
* inSort() for each member (O(N^2)). * inSort() for each member (O(N^2)).
......
...@@ -15,8 +15,10 @@ ...@@ -15,8 +15,10 @@
* Thanks to Jorge Ramos and others for their contributions. * Thanks to Jorge Ramos and others for their contributions.
* *
* History: * History:
* 20080206:
* - Method trTypeContraints() renamed to trTypeConstraints().
* 20071216: * 20071216:
* - New methods since 1.5.4 updated. * - New methods since 1.5.4 updated.
* 20070914 * 20070914
* - "Translate me" fixed * - "Translate me" fixed
* - Revision number changed from doxygen version to a date string. * - Revision number changed from doxygen version to a date string.
...@@ -30,7 +32,7 @@ ...@@ -30,7 +32,7 @@
#ifndef TRANSLATOR_BR_H #ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H #define TRANSLATOR_BR_H
class TranslatorBrazilian : public TranslatorAdapter_1_5_4 class TranslatorBrazilian : public Translator
{ {
public: public:
...@@ -1768,7 +1770,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_5_4 ...@@ -1768,7 +1770,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_5_4
} }
/*! C# Type Contraint list */ /*! C# Type Contraint list */
virtual QCString trTypeContraints() virtual QCString trTypeConstraints()
{ {
return "Restrições do Tipo"; return "Restrições do Tipo";
} }
......
This diff is collapsed.
...@@ -111,13 +111,16 @@ ...@@ -111,13 +111,16 @@
// 2006/06/12 Jens Seidel (jensseidel@users.sourceforge.net) // 2006/06/12 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated for "new since 1.4.6" version // - 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: // Todo:
// - see FIXME // - see FIXME
#ifndef TRANSLATOR_DE_H #ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H #define TRANSLATOR_DE_H
class TranslatorGerman : public TranslatorAdapter_1_5_4 class TranslatorGerman : public Translator
{ {
public: public:
...@@ -1663,6 +1666,206 @@ class TranslatorGerman : public TranslatorAdapter_1_5_4 ...@@ -1663,6 +1666,206 @@ class TranslatorGerman : public TranslatorAdapter_1_5_4
virtual QCString trEnumerationValueDocumentation() virtual QCString trEnumerationValueDocumentation()
{ return "Enumerator-Dokumentation"; } { 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 ...@@ -998,7 +998,7 @@ class TranslatorFrench : public TranslatorAdapter_1_5_4
/*! header that is put before the list of constructor/destructors. */ /*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation() 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. */ /*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode() virtual QCString trGotoSourceCode()
......
...@@ -1617,20 +1617,21 @@ class TranslatorKorean : public Translator ...@@ -1617,20 +1617,21 @@ class TranslatorKorean : public Translator
/*! This is an introduction to the page with all data types (Fortran). */ /*! This is an introduction to the page with all data types (Fortran). */
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
{ {
QCString result="Here is a list of all "; QCString result="다음은 ";
if (!extractAll) if (!extractAll)
{ {
result+="documented "; result+="문서화된 ";
} }
result+="data types members"; result+="모든 데이타 타입 멤버들의 목록입니다. ";
result+=" with links to ";
result+="각 항목은 ";
if (!extractAll) if (!extractAll)
{ {
result+="the data structure documentation for each member"; result+="각 멤버에 대한 데이타 구조 문서화 페이지의 링크를 가지고 있습니다.";
} }
else else
{ {
result+="the data types they belong to:"; result+="그들이 속한 데이타 타입의 링크를 가지고 있습니다. :";
} }
return result; return result;
} }
......
This diff is collapsed.
...@@ -215,11 +215,11 @@ class TranslatorDecoder : public Translator ...@@ -215,11 +215,11 @@ class TranslatorDecoder : public Translator
QCString trCompounds() QCString trCompounds()
{ return toUtf8(m_translator->trCompounds()); } { return toUtf8(m_translator->trCompounds()); }
QCString trGeneratedAt(const char *date,const char *projName) 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() QCString trWrittenBy()
{ return toUtf8(m_translator->trWrittenBy()); } { return toUtf8(m_translator->trWrittenBy()); }
QCString trClassDiagram(const char *clName) QCString trClassDiagram(const char *clName)
{ return toUtf8(m_translator->trClassDiagram(clName)); } { return toUtf8(m_translator->trClassDiagram(fromUtf8(clName))); }
QCString trForInternalUseOnly() QCString trForInternalUseOnly()
{ return toUtf8(m_translator->trForInternalUseOnly()); } { return toUtf8(m_translator->trForInternalUseOnly()); }
QCString trWarning() QCString trWarning()
...@@ -264,13 +264,13 @@ class TranslatorDecoder : public Translator ...@@ -264,13 +264,13 @@ class TranslatorDecoder : public Translator
QCString trCompoundReference(const char *clName, QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType, ClassDef::CompoundType compType,
bool isTemplate) bool isTemplate)
{ return toUtf8(m_translator->trCompoundReference(clName,compType,isTemplate)); } { return toUtf8(m_translator->trCompoundReference(fromUtf8(clName),compType,isTemplate)); }
QCString trFileReference(const char *fileName) QCString trFileReference(const char *fileName)
{ return toUtf8(m_translator->trFileReference(fromUtf8(fileName))); } { return toUtf8(m_translator->trFileReference(fromUtf8(fileName))); }
QCString trNamespaceReference(const char *namespaceName) QCString trNamespaceReference(const char *namespaceName)
{ return toUtf8(m_translator->trNamespaceReference(namespaceName)); } { return toUtf8(m_translator->trNamespaceReference(fromUtf8(namespaceName))); }
QCString trPublicMembers() QCString trPublicMembers()
{ return toUtf8(m_translator->trPublicMembers()); } { return toUtf8(m_translator->trPublicMembers()); }
...@@ -363,7 +363,7 @@ class TranslatorDecoder : public Translator ...@@ -363,7 +363,7 @@ class TranslatorDecoder : public Translator
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
QCString trCollaborationDiagram(const char *clName) QCString trCollaborationDiagram(const char *clName)
{ return toUtf8(m_translator->trCollaborationDiagram(clName)); } { return toUtf8(m_translator->trCollaborationDiagram(fromUtf8(clName))); }
QCString trInclDepGraph(const char *fName) QCString trInclDepGraph(const char *fName)
{ return toUtf8(m_translator->trInclDepGraph(fromUtf8(fName))); } { return toUtf8(m_translator->trInclDepGraph(fromUtf8(fName))); }
QCString trConstructorDocumentation() QCString trConstructorDocumentation()
...@@ -484,7 +484,7 @@ class TranslatorDecoder : public Translator ...@@ -484,7 +484,7 @@ class TranslatorDecoder : public Translator
QCString trClasses() QCString trClasses()
{ return toUtf8(m_translator->trClasses()); } { return toUtf8(m_translator->trClasses()); }
QCString trPackage(const char *name) QCString trPackage(const char *name)
{ return toUtf8(m_translator->trPackage(name)); } { return toUtf8(m_translator->trPackage(fromUtf8(name))); }
QCString trPackageList() QCString trPackageList()
{ return toUtf8(m_translator->trPackageList()); } { return toUtf8(m_translator->trPackageList()); }
QCString trPackageListDescription() QCString trPackageListDescription()
...@@ -686,9 +686,9 @@ class TranslatorDecoder : public Translator ...@@ -686,9 +686,9 @@ class TranslatorDecoder : public Translator
QCString trCompoundReferenceFortran(const char *clName, QCString trCompoundReferenceFortran(const char *clName,
ClassDef::CompoundType compType, ClassDef::CompoundType compType,
bool isTemplate) bool isTemplate)
{ return toUtf8(m_translator->trCompoundReferenceFortran(clName,compType,isTemplate)); } { return toUtf8(m_translator->trCompoundReferenceFortran(fromUtf8(clName),compType,isTemplate)); }
QCString trModuleReference(const char *namespaceName) QCString trModuleReference(const char *namespaceName)
{ return toUtf8(m_translator->trModuleReference(namespaceName)); } { return toUtf8(m_translator->trModuleReference(fromUtf8(namespaceName))); }
QCString trModulesMembers() QCString trModulesMembers()
{ return toUtf8(m_translator->trModulesMembers()); } { return toUtf8(m_translator->trModulesMembers()); }
QCString trModulesMemberDescription(bool extractAll) QCString trModulesMemberDescription(bool extractAll)
......
...@@ -247,7 +247,7 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0) ...@@ -247,7 +247,7 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0)
for (int k=1;k<count;k++) 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; Entry *pTemp=new Entry;
initEntry(pTemp); initEntry(pTemp);
pTemp->startLine = line; pTemp->startLine = line;
......
...@@ -778,6 +778,8 @@ void XmlDocVisitor::visitPre(DocParamSect *s) ...@@ -778,6 +778,8 @@ void XmlDocVisitor::visitPre(DocParamSect *s)
m_t << "retval"; break; m_t << "retval"; break;
case DocParamSect::Exception: case DocParamSect::Exception:
m_t << "exception"; break; m_t << "exception"; break;
case DocParamSect::TemplateParam:
m_t << "templateparam"; break;
default: default:
ASSERT(0); 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