Commit 11de530b authored by dimitri's avatar dimitri

Release-1.4.1-20050210

parent c635cffd
DOXYGEN Version 1.4.1-20050129 DOXYGEN Version 1.4.1-20050210
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 (29 January 2005) Dimitri van Heesch (10 February 2005)
DOXYGEN Version 1.4.1_20050129 DOXYGEN Version 1.4.1_20050210
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) (29 January 2005) Dimitri van Heesch (dimitri@stack.nl) (10 February 2005)
1.4.1-20050129 1.4.1-20050210
...@@ -1430,8 +1430,7 @@ void memcpy(void *dest, const void *src, size_t n); ...@@ -1430,8 +1430,7 @@ void memcpy(void *dest, const void *src, size_t n);
tag of doxygen's configuration file. tag of doxygen's configuration file.
If \<file-name\> itself is not unique for the set of example files specified If \<file-name\> itself is not unique for the set of example files specified
by the by the \ref cfg_example_path "EXAMPLE_PATH" tag, you can include part
\ref cfg_example_path "EXAMPLE_PATH" tag, you can include part
of the absolute path to disambiguate it. of the absolute path to disambiguate it.
Using the \\include command is equivalent to inserting the file into Using the \\include command is equivalent to inserting the file into
...@@ -1448,7 +1447,11 @@ void memcpy(void *dest, const void *src, size_t n); ...@@ -1448,7 +1447,11 @@ void memcpy(void *dest, const void *src, size_t n);
\ref cmdskipline "\\skipline", \ref cmdskipline "\\skipline",
and \\until commands. and \\until commands.
\sa section \ref cmdexample "\\example" and \ref cmddontinclude "\\dontinclude". \note Doxygen's special commands do not work inside blocks of code.
It is allowed to nest C-style comments inside a code block though.
\sa section \ref cmdexample "\\example", \ref cmddontinclude "\\dontinclude", and
section \ref cmdverbatim "\\verbatim".
<hr> <hr>
\section cmdincludelineno \\includelineno <file-name> \section cmdincludelineno \\includelineno <file-name>
...@@ -1635,7 +1638,7 @@ void memcpy(void *dest, const void *src, size_t n); ...@@ -1635,7 +1638,7 @@ void memcpy(void *dest, const void *src, size_t n);
classes and members that are documented are automatically replaced by classes and members that are documented are automatically replaced by
links to the documentation. links to the documentation.
\sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim" \sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim".
<hr> <hr>
\section cmdcopydoc \\copydoc <link-object> \section cmdcopydoc \\copydoc <link-object>
...@@ -1805,7 +1808,7 @@ class C {}; ...@@ -1805,7 +1808,7 @@ class C {};
\addindex \\endverbatim \addindex \\endverbatim
Ends a block of text that was started with a \\verbatim command. Ends a block of text that was started with a \\verbatim command.
\sa section \ref cmdverbatim "\\verbatim". \sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim".
<hr> <hr>
\section cmdendxmlonly \\endxmlonly \section cmdendxmlonly \\endxmlonly
...@@ -2020,6 +2023,8 @@ class C {}; ...@@ -2020,6 +2023,8 @@ class C {};
\warning Make sure you include a \\endverbatim command for each \warning Make sure you include a \\endverbatim command for each
\\verbatim command or the parser will get confused! \\verbatim command or the parser will get confused!
\sa section \ref cmdcode "\\code", and section \ref cmdverbinclude "\\verbinclude".
<hr> <hr>
\section cmdxmlonly \\xmlonly \section cmdxmlonly \\xmlonly
......
...@@ -121,6 +121,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -121,6 +121,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_generate_treeview GENERATE_TREEVIEW \refitem cfg_generate_treeview GENERATE_TREEVIEW
\refitem cfg_generate_xml GENERATE_XML \refitem cfg_generate_xml GENERATE_XML
\refitem cfg_graphical_hierarchy GRAPHICAL_HIERARCHY \refitem cfg_graphical_hierarchy GRAPHICAL_HIERARCHY
\refitem cfg_group_graphs GROUP_GRAPHS
\refitem cfg_have_dot HAVE_DOT \refitem cfg_have_dot HAVE_DOT
\refitem cfg_hhc_location HHC_LOCATION \refitem cfg_hhc_location HHC_LOCATION
\refitem cfg_hide_friend_compounds HIDE_FRIEND_COMPOUNDS \refitem cfg_hide_friend_compounds HIDE_FRIEND_COMPOUNDS
...@@ -202,6 +203,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -202,6 +203,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_template_relations TEMPLATE_RELATIONS \refitem cfg_template_relations TEMPLATE_RELATIONS
\refitem cfg_toc_expand TOC_EXPAND \refitem cfg_toc_expand TOC_EXPAND
\refitem cfg_treeview_width TREEVIEW_WIDTH \refitem cfg_treeview_width TREEVIEW_WIDTH
\refitem cfg_uml_look UML_LOOK
\refitem cfg_use_windows_encoding USE_WINDOWS_ENCODING \refitem cfg_use_windows_encoding USE_WINDOWS_ENCODING
\refitem cfg_verbatim_headers VERBATIM_HEADERS \refitem cfg_verbatim_headers VERBATIM_HEADERS
\refitem cfg_warn_format WARN_FORMAT \refitem cfg_warn_format WARN_FORMAT
...@@ -1586,6 +1588,19 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre> ...@@ -1586,6 +1588,19 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
indirect implementation dependencies (inheritance, containment, and indirect implementation dependencies (inheritance, containment, and
class references variables) of the class with other documented classes. class references variables) of the class with other documented classes.
\anchor cfg_group_graphs
<dt>\c GROUP_GRAPHS <dd>
\addindex GROUP_GRAPHS
If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
will generate a graph for groups, showing the direct groups dependencies.
\anchor cfg_uml_look
<dt>\c UML_LOOK <dd>
\addindex UML_LOOK
If the UML_LOOK tag is set to YES doxygen will generate inheritance and
collaboration diagrams in a style similar to the OMG's Unified Modeling
Language.
\anchor cfg_template_relations \anchor cfg_template_relations
<dt>\c TEMPLATE_RELATIONS <dd> <dt>\c TEMPLATE_RELATIONS <dd>
\addindex TEMPLATE_RELATIONS \addindex TEMPLATE_RELATIONS
......
...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). configuration file (with default name and known as Doxyfile).
Currently (version 1.4.1), 30 languages Currently (version 1.4.1-20050129), 30 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
...@@ -240,7 +240,7 @@ when the translator was updated. ...@@ -240,7 +240,7 @@ when the translator was updated.
<td>Ukrainian</td> <td>Ukrainian</td>
<td>Olexij Tkatchenko</td> <td>Olexij Tkatchenko</td>
<td>olexij.tkatchenko at parcs dot de</td> <td>olexij.tkatchenko at parcs dot de</td>
<td>1.2.11</td> <td>up-to-date</td>
</tr> </tr>
<!-- table content end --> <!-- table content end -->
</table> </table>
...@@ -329,7 +329,7 @@ when the translator was updated. ...@@ -329,7 +329,7 @@ when the translator was updated.
\hline \hline
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & up-to-date \\ Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & up-to-date \\
\hline \hline
Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & 1.2.11 \\ Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & up-to-date \\
\hline \hline
\end{tabular} \end{tabular}
\endlatexonly \endlatexonly
......
This diff is collapsed.
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.4.1_20050129 Version: 1.4.1_20050210
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -46,7 +46,7 @@ clean: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile.doxytag ...@@ -46,7 +46,7 @@ clean: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile.doxytag
distclean: clean distclean: clean
-$(RM) scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \ -$(RM) scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \
ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp \ ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp commentscan.cpp \
declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp
FORCE: FORCE:
...@@ -290,23 +290,32 @@ static VariableContext g_theVarContext; ...@@ -290,23 +290,32 @@ static VariableContext g_theVarContext;
class CallContext class CallContext
{ {
public: public:
struct Ctx
{
Ctx() : name(g_name), type(g_type), cd(0) {}
QCString name;
QCString type;
ClassDef *cd;
};
CallContext() CallContext()
{ {
m_classList.append(0); m_classList.append(new Ctx);
m_classList.setAutoDelete(TRUE);
} }
virtual ~CallContext() {} virtual ~CallContext() {}
void setClass(ClassDef *cd) void setClass(ClassDef *cd)
{ {
if (cd) Ctx *ctx = m_classList.getLast();
if (ctx)
{ {
DBG_CTX((stderr,"** Set call context %s (%p)\n",cd==0 ? "<null>" : cd->name().data(),cd)); DBG_CTX((stderr,"** Set call context %s (%p)\n",cd==0 ? "<null>" : cd->name().data(),cd));
m_classList.removeLast(); ctx->cd=cd;
m_classList.append(cd);
} }
} }
void pushScope() void pushScope()
{ {
m_classList.append(0); m_classList.append(new Ctx);
DBG_CTX((stderr,"** Push call context %d\n",m_classList.count())); DBG_CTX((stderr,"** Push call context %d\n",m_classList.count()));
} }
void popScope() void popScope()
...@@ -314,6 +323,12 @@ class CallContext ...@@ -314,6 +323,12 @@ class CallContext
if (m_classList.count()>1) if (m_classList.count()>1)
{ {
DBG_CTX((stderr,"** Pop call context %d\n",m_classList.count())); DBG_CTX((stderr,"** Pop call context %d\n",m_classList.count()));
Ctx *ctx = m_classList.getLast();
if (ctx)
{
g_name = ctx->name;
g_type = ctx->type;
}
m_classList.removeLast(); m_classList.removeLast();
} }
else else
...@@ -324,16 +339,20 @@ class CallContext ...@@ -324,16 +339,20 @@ class CallContext
void clear() void clear()
{ {
DBG_CTX((stderr,"** Clear call context\n")); DBG_CTX((stderr,"** Clear call context\n"));
m_classList.clear(); Ctx *ctx = m_classList.getLast();
m_classList.append(0); if (ctx)
{
ctx->cd=0;
}
} }
ClassDef *getClass() const ClassDef *getClass() const
{ {
return m_classList.getLast(); Ctx *ctx = m_classList.getLast();
if (ctx) return ctx->cd; else return 0;
} }
private: private:
QList<ClassDef> m_classList; QList<Ctx> m_classList;
}; };
static CallContext g_theCallContext; static CallContext g_theCallContext;
...@@ -761,7 +780,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -761,7 +780,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{ {
cd=getResolvedClass(d,g_sourceFileDef,className.left(i),&md); cd=getResolvedClass(d,g_sourceFileDef,className.left(i),&md);
} }
//printf("is found as a type %s\n",cd?cd->name().data():"<null>"); //fprintf(stderr,"is found as a type %s\n",cd?cd->name().data():"<null>");
} }
else else
{ {
...@@ -928,7 +947,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const ...@@ -928,7 +947,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const
if (mcd) if (mcd)
{ {
MemberDef *xmd = mcd->getMemberByName(memName); MemberDef *xmd = mcd->getMemberByName(memName);
//printf("generateClassMemberLink(class=%s,member=%s)=%p\n",mcd->name().data(),memName,xmd); //fprintf(stderr,"generateClassMemberLink(class=%s,member=%s)=%p\n",mcd->name().data(),memName,xmd);
if (xmd) if (xmd)
{ {
// extract class definition of the return type in order to resolve // extract class definition of the return type in order to resolve
...@@ -967,7 +986,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const ...@@ -967,7 +986,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const
// add usage reference // add usage reference
if (g_currentDefinition && g_currentMemberDef && if (g_currentDefinition && g_currentMemberDef &&
xmd!=g_currentMemberDef && g_insideBody) /*xmd!=g_currentMemberDef &&*/ g_insideBody)
{ {
addDocCrossReference(g_currentMemberDef,xmd); addDocCrossReference(g_currentMemberDef,xmd);
} }
...@@ -2415,6 +2434,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -2415,6 +2434,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
if (*yytext==';') g_searchingForBody=FALSE; if (*yytext==';') g_searchingForBody=FALSE;
if (!g_inClass && !g_type.isEmpty()) if (!g_inClass && !g_type.isEmpty())
{ {
//fprintf(stderr,"add variable g_type=%s g_name=%s)\n",g_type.data(),g_name.data());
g_theVarContext.addVariable(g_type,g_name); g_theVarContext.addVariable(g_type,g_name);
} }
g_parmType.resize(0);g_parmName.resize(0); g_parmType.resize(0);g_parmName.resize(0);
......
...@@ -412,6 +412,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l ...@@ -412,6 +412,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l
sectionTitle,SectionInfo::Anchor); sectionTitle,SectionInfo::Anchor);
Doxygen::sectionDict.insert(anchorLabel,si); Doxygen::sectionDict.insert(anchorLabel,si);
docEntry->anchors->append(si); docEntry->anchors->append(si);
outputXRef.resize(0);
} }
//current->brief = slString; // restore orginial brief desc. //current->brief = slString; // restore orginial brief desc.
} }
...@@ -643,7 +644,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -643,7 +644,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
* grouping commands (e.g. @{ and @}) * grouping commands (e.g. @{ and @})
*/ */
<Comment>{CMD}{CMD}[a-z_A-Z]*{B}* { // escaped command <Comment>{CMD}{CMD}[a-z_A-Z]+{B}* { // escaped command
addOutput(yytext); addOutput(yytext);
} }
<Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!) <Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!)
...@@ -1116,8 +1117,8 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1116,8 +1117,8 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<SectionLabel>{LABELID} { // first argyment <SectionLabel>{LABELID} { // first argyment
sectionLabel=yytext; sectionLabel=yytext;
addOutput(yytext);
sectionTitle.resize(0); sectionTitle.resize(0);
current->doc+=yytext;
BEGIN(SectionTitle); BEGIN(SectionTitle);
} }
<SectionLabel>{DOCNL} { // missing argument <SectionLabel>{DOCNL} { // missing argument
...@@ -1151,15 +1152,19 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1151,15 +1152,19 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
} }
<SectionTitle>[^\n@\\]* { // any character without special meaning <SectionTitle>[^\n@\\]* { // any character without special meaning
sectionTitle+=yytext; sectionTitle+=yytext;
current->doc+=yytext; addOutput(yytext);
} }
<SectionTitle>("\\\\"|"@@") { // unescape escaped command <SectionTitle>("\\\\"|"@@"){ID} { // unescape escaped command
sectionTitle+=*yytext; sectionTitle+=&yytext[1];
current->doc+=*yytext; addOutput(yytext);
}
<SectionTitle>{CMD}[$@\\&~<>#%] { // unescape escaped character
sectionTitle+=yytext[1];
addOutput(yytext);
} }
<SectionTitle>. { // anything else <SectionTitle>. { // anything else
sectionTitle+=yytext; sectionTitle+=yytext;
current->doc+=yytext; addOutput(*yytext);
} }
/* ----- handle arguments of the anchor command ------- */ /* ----- handle arguments of the anchor command ------- */
...@@ -1646,8 +1651,9 @@ static void handleSection(const QCString &s) ...@@ -1646,8 +1651,9 @@ static void handleSection(const QCString &s)
BEGIN(SectionLabel); BEGIN(SectionLabel);
} }
static void handleAnchor(const QCString &) static void handleAnchor(const QCString &s)
{ {
addOutput("@"+s+" ");
BEGIN(AnchorLabel); BEGIN(AnchorLabel);
} }
...@@ -1825,8 +1831,8 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry, ...@@ -1825,8 +1831,8 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry,
/* in,out */ Protection &prot /* in,out */ Protection &prot
) )
{ {
//fprintf(stderr,"isBrief=%d isJavaDocStyle=%d\n", //fprintf(stderr,"parseCommentBlock() isBrief=%d isJavaDocStyle=%d lineNr=%d\n",
// isBrief,isJavaDocStyle); // isBrief,isJavaDocStyle,lineNr);
initParser(); initParser();
guards.setAutoDelete(TRUE); guards.setAutoDelete(TRUE);
guards.clear(); guards.clear();
...@@ -1840,6 +1846,7 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry, ...@@ -1840,6 +1846,7 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry,
//inBody = foundInBody; //inBody = foundInBody;
protection = prot; protection = prot;
needNewEntry = FALSE; needNewEntry = FALSE;
outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc ); setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle; briefEndsAtDot = isJavaDocStyle;
commentScanYYrestart( commentScanYYin ); commentScanYYrestart( commentScanYYin );
......
...@@ -1332,7 +1332,7 @@ static void readTextFileByName(const QString &file,QString &text) ...@@ -1332,7 +1332,7 @@ static void readTextFileByName(const QString &file,QString &text)
FileDef *fd; FileDef *fd;
if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig))) if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig)))
{ {
text = fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES")); text = fileToString(fd->absFilePath(),FALSE);
} }
else if (ambig) else if (ambig)
{ {
...@@ -5126,6 +5126,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, ...@@ -5126,6 +5126,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_paramsFound.clear(); g_paramsFound.clear();
g_sectionDict = 0; //sections; g_sectionDict = 0; //sections;
//printf("Starting comment block at %s:%d\n",g_fileName.data(),startLine);
doctokenizerYYlineno=startLine; doctokenizerYYlineno=startLine;
doctokenizerYYinit(input,g_fileName); doctokenizerYYinit(input,g_fileName);
......
...@@ -252,6 +252,18 @@ static void handleHtmlTag() ...@@ -252,6 +252,18 @@ static void handleHtmlTag()
g_token->endTag = startNamePos==2; g_token->endTag = startNamePos==2;
} }
static QString stripEmptyLines(const char *s)
{
int result=0,p=0;
for (;;)
{
int c;
while ((c=s[p]) && (c==' ' || c=='\t' || c=='\r')) p++;
if (s[p]=='\n') result=++p; else break;
}
return &s[result];
}
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
#undef YY_INPUT #undef YY_INPUT
...@@ -565,6 +577,7 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"))*{ID}{FUNCARG}? ...@@ -565,6 +577,7 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"))*{ID}{FUNCARG}?
g_token->verb+=yytext; g_token->verb+=yytext;
} }
<St_Verbatim>{CMD}"endverbatim" { <St_Verbatim>{CMD}"endverbatim" {
g_token->verb=stripEmptyLines(g_token->verb);
return RetVal_OK; return RetVal_OK;
} }
<St_Verbatim>[^\\@\n]+ | <St_Verbatim>[^\\@\n]+ |
......
...@@ -8775,7 +8775,7 @@ void generateOutput() ...@@ -8775,7 +8775,7 @@ void generateOutput()
} }
Doxygen::tagFile.setDevice(tag); Doxygen::tagFile.setDevice(tag);
Doxygen::tagFile.setEncoding(QTextStream::Latin1); Doxygen::tagFile.setEncoding(QTextStream::Latin1);
Doxygen::tagFile << "<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>" << endl; Doxygen::tagFile << "<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>" << endl;
Doxygen::tagFile << "<tagfile>" << endl; Doxygen::tagFile << "<tagfile>" << endl;
} }
......
...@@ -516,7 +516,17 @@ void NamespaceDef::combineUsingRelations() ...@@ -516,7 +516,17 @@ void NamespaceDef::combineUsingRelations()
void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName) void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName)
{ {
if (count()==0) return; if (count()==0) return; // no namespaces in the list
SDict<NamespaceDef>::Iterator ni(*this);
NamespaceDef *nd;
bool found=FALSE;
for (ni.toFirst();(nd=ni.current()) && !found;++ni)
{
if (nd->isLinkable()) found=TRUE;
}
if (!found) return; // no linkable namespaces in the list
// write list of namespaces // write list of namespaces
ol.startMemberHeader(); ol.startMemberHeader();
bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
...@@ -530,9 +540,9 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName) ...@@ -530,9 +540,9 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName)
} }
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList(); ol.startMemberList();
SDict<NamespaceDef>::Iterator ni(*this);
NamespaceDef *nd;
for (ni.toFirst();(nd=ni.current());++ni) for (ni.toFirst();(nd=ni.current());++ni)
{
if (nd->isLinkable())
{ {
ol.startMemberItem(0); ol.startMemberItem(0);
if (javaOpt) if (javaOpt)
...@@ -567,6 +577,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName) ...@@ -567,6 +577,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName)
ol.newParagraph(); ol.newParagraph();
} }
} }
}
ol.endMemberList(); ol.endMemberList();
} }
...@@ -183,6 +183,7 @@ static QCString docBlock; ...@@ -183,6 +183,7 @@ static QCString docBlock;
static QCString docBlockName; static QCString docBlockName;
static bool docBlockInBody; static bool docBlockInBody;
static bool docBlockJavaStyle; static bool docBlockJavaStyle;
static char docBlockTerm;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -336,51 +337,8 @@ static void addMemberGroupDocs() ...@@ -336,51 +337,8 @@ static void addMemberGroupDocs()
//----------------------------------------------------------------- //-----------------------------------------------------------------
static void handleCommentBlock(const QCString &doc,bool brief) static void startCommentBlock(bool);
{ static void handleCommentBlock(const QCString &doc,bool brief);
if (brief)
{
current->briefFile = yyFileName;
current->briefLine = yyLineNr;
}
else
{
current->docFile = yyFileName;
current->docLine = yyLineNr;
}
if (docBlockInBody)
{
if (previous==0)
{
ASSERT(previous!=0); // shouldn't happen
return;
}
if (!previous->doc.isEmpty())
{ // start a new paragraph for the next piece of text found in the body
previous->doc=previous->doc.stripWhiteSpace()+"\n\n";
}
}
if (parseCommentBlock(
docBlockInBody ? previous : current,
doc, // text
yyFileName, // file
yyLineNr, // line
docBlockInBody ? FALSE : brief,
docBlockInBody ? FALSE : docBlockJavaStyle,
protection)
) // need to start a new entry
{
if (current->section==Entry::MEMBERGRP_SEC)
{
addMemberGroupDocs();
}
current_root->addSubEntry(current);
previous = current;
current = new Entry ;
initEntry();
}
}
//----------------------------------------------------------------- //-----------------------------------------------------------------
static void addXRefItem(bool inBody,const char *listName,const char *itemTitle,const char *listTitle) static void addXRefItem(bool inBody,const char *listName,const char *itemTitle,const char *listTitle)
...@@ -2034,7 +1992,26 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2034,7 +1992,26 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer,OldStyleArgs>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" { <FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer,OldStyleArgs>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount(); lineCount();
if (current->bodyLine==-1) if (current->bodyLine==-1)
{
current->bodyLine=yyLineNr; current->bodyLine=yyLineNr;
}
#ifdef COMMENTSCAN
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF");
docBlock.resize(0);
docBlockTerm = ';';
if (yytext[yyleng-3]=='/')
{
startCommentBlock(TRUE);
BEGIN( DocLine );
}
else
{
startCommentBlock(FALSE);
BEGIN( DocBlock );
}
#else
lastAfterDocContext = YY_START; lastAfterDocContext = YY_START;
afterDocTerminator = ';'; afterDocTerminator = ';';
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
...@@ -2060,9 +2037,27 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2060,9 +2037,27 @@ IDLATTR ("["[^\]]*"]"){BN}*
current->docFile = yyFileName; current->docFile = yyFileName;
BEGIN(AfterDoc); BEGIN(AfterDoc);
} }
#endif
} }
<MemberSpec,FindFields,FindMembers,NextSemi,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" { <MemberSpec,FindFields,FindMembers,NextSemi,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount(); lineCount();
#ifdef COMMENTSCAN
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF");
docBlock.resize(0);
docBlockTerm = ',';
if (yytext[yyleng-3]=='/')
{
startCommentBlock(TRUE);
BEGIN( DocLine );
}
else
{
startCommentBlock(FALSE);
BEGIN( DocBlock );
}
#else
lastAfterDocContext = YY_START; lastAfterDocContext = YY_START;
afterDocTerminator = ','; afterDocTerminator = ',';
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
...@@ -2088,6 +2083,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2088,6 +2083,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
current->docFile = yyFileName; current->docFile = yyFileName;
BEGIN(AfterDoc); BEGIN(AfterDoc);
} }
#endif
} }
<DefineEnd,FindFields,FindFieldArg,ReadInitializer,OldStyleArgs>{BN}*("/**"|"//!"|"/*!"|"///")"<" { <DefineEnd,FindFields,FindFieldArg,ReadInitializer,OldStyleArgs>{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount(); lineCount();
...@@ -4142,6 +4138,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4142,6 +4138,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
docBlockInBody = YY_START==SkipCurly; docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE; docBlockJavaStyle = FALSE;
docBlock.resize(0); docBlock.resize(0);
startCommentBlock(FALSE);
BEGIN( DocBlock ); BEGIN( DocBlock );
#else #else
BEGIN( Doc ); BEGIN( Doc );
...@@ -4179,6 +4176,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4179,6 +4176,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
current->brief.resize(0); current->brief.resize(0);
} }
} }
startCommentBlock(FALSE);
BEGIN( DocBlock ); BEGIN( DocBlock );
#else #else
if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style
...@@ -4243,6 +4241,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4243,6 +4241,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
docBlockInBody = YY_START==SkipCurly; docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE; docBlockJavaStyle = FALSE;
docBlock.resize(0); docBlock.resize(0);
startCommentBlock(TRUE);
BEGIN( DocLine ); BEGIN( DocLine );
#else #else
BEGIN( LineDoc ); BEGIN( LineDoc );
...@@ -4270,6 +4269,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4270,6 +4269,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
docBlockInBody = YY_START==SkipCurly; docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE; docBlockJavaStyle = FALSE;
docBlock.resize(0); docBlock.resize(0);
startCommentBlock(TRUE);
BEGIN( DocLine ); BEGIN( DocLine );
#else #else
BEGIN( LineDoc ); BEGIN( LineDoc );
...@@ -4296,8 +4296,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4296,8 +4296,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
else else
{ {
if ((insideJava || insideCS || insideD) && if ((insideJava || insideCS || insideD) &&
current->name.isEmpty() && current->name.isEmpty()
current->type.isEmpty()
) )
{ {
// static Java initializer // static Java initializer
...@@ -4305,6 +4304,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4305,6 +4304,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
if (current->stat) if (current->stat)
{ {
current->name="[static initializer]"; current->name="[static initializer]";
current->type.resize(0);
} }
else else
{ {
...@@ -4365,7 +4365,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4365,7 +4365,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
} }
<DocBlock>^{B}*"*"+/{BN}+ { // start of a comment line <DocBlock>^{B}*"*"+/{BN}+ { // start of a comment line
} }
<DocBlock>("@@"|"\\\\"){ID} { // escaped command <DocBlock>("@@"|"\\\\"){ID}/[^a-z_A-Z0-9] { // escaped command
docBlock+=yytext; docBlock+=yytext;
} }
<DocBlock>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!) <DocBlock>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!)
...@@ -4399,7 +4399,10 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4399,7 +4399,10 @@ IDLATTR ("["[^\]]*"]"){BN}*
REJECT; REJECT;
} }
} }
<DocCopyBlock>[^@\*\\\n]+ { // any character that is not special <DocCopyBlock>[^@/*\\\n]+ { // any character that is not special
docBlock+=yytext;
}
<DocCopyBlock>"/*"|"*/"|"//" {
docBlock+=yytext; docBlock+=yytext;
} }
<DocCopyBlock>\n { // newline <DocCopyBlock>\n { // newline
...@@ -5259,6 +5262,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -5259,6 +5262,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
} }
<AnchorLabel>{LABELID} { <AnchorLabel>{LABELID} {
SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor); SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor);
printf("New anchor file=%s label=%s\n",yyFileName,yytext);
Doxygen::sectionDict.insert(yytext,si); Doxygen::sectionDict.insert(yytext,si);
current->anchors->append(si); current->anchors->append(si);
current->doc+=yytext; current->doc+=yytext;
...@@ -6142,6 +6146,62 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -6142,6 +6146,62 @@ IDLATTR ("["[^\]]*"]"){BN}*
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
static void startCommentBlock(bool brief)
{
if (brief)
{
current->briefFile = yyFileName;
current->briefLine = yyLineNr;
}
else
{
current->docFile = yyFileName;
current->docLine = yyLineNr;
}
}
static void handleCommentBlock(const QCString &doc,bool brief)
{
if (docBlockInBody)
{
if (previous==0)
{
ASSERT(previous!=0); // shouldn't happen
goto exit;
}
if (!previous->doc.isEmpty())
{ // start a new paragraph for the next piece of text found in the body
previous->doc=previous->doc.stripWhiteSpace()+"\n\n";
}
}
if (parseCommentBlock(
docBlockInBody ? previous : current,
doc, // text
yyFileName, // file
brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief,
docBlockInBody ? FALSE : docBlockJavaStyle,
protection)
) // need to start a new entry
{
if (current->section==Entry::MEMBERGRP_SEC)
{
addMemberGroupDocs();
}
current_root->addSubEntry(current);
previous = current;
current = new Entry ;
initEntry();
}
exit:
if (docBlockTerm)
{
unput(docBlockTerm);
docBlockTerm=0;
}
}
#ifndef COMMENTSCAN #ifndef COMMENTSCAN
static void startGroup() static void startGroup()
{ {
......
...@@ -92,7 +92,7 @@ class Translator ...@@ -92,7 +92,7 @@ class Translator
virtual QCString trClassHierarchy() = 0; virtual QCString trClassHierarchy() = 0;
virtual QCString trCompoundList() = 0; virtual QCString trCompoundList() = 0;
virtual QCString trFileList() = 0; virtual QCString trFileList() = 0;
virtual QCString trHeaderFiles() = 0; //virtual QCString trHeaderFiles() = 0;
virtual QCString trCompoundMembers() = 0; virtual QCString trCompoundMembers() = 0;
virtual QCString trFileMembers() = 0; virtual QCString trFileMembers() = 0;
virtual QCString trRelatedPages() = 0; virtual QCString trRelatedPages() = 0;
...@@ -103,11 +103,11 @@ class Translator ...@@ -103,11 +103,11 @@ class Translator
virtual QCString trCompoundListDescription() = 0; virtual QCString trCompoundListDescription() = 0;
virtual QCString trCompoundMembersDescription(bool extractAll) = 0; virtual QCString trCompoundMembersDescription(bool extractAll) = 0;
virtual QCString trFileMembersDescription(bool extractAll) = 0; virtual QCString trFileMembersDescription(bool extractAll) = 0;
virtual QCString trHeaderFilesDescription() = 0; //virtual QCString trHeaderFilesDescription() = 0;
virtual QCString trExamplesDescription() = 0; virtual QCString trExamplesDescription() = 0;
virtual QCString trRelatedPagesDescription() = 0; virtual QCString trRelatedPagesDescription() = 0;
virtual QCString trModulesDescription() = 0; virtual QCString trModulesDescription() = 0;
virtual QCString trNoDescriptionAvailable() = 0; //virtual QCString trNoDescriptionAvailable() = 0;
// index titles (the project name is prepended for these) // index titles (the project name is prepended for these)
...@@ -133,7 +133,7 @@ class Translator ...@@ -133,7 +133,7 @@ class Translator
virtual QCString trFunctionPrototypeDocumentation() = 0; virtual QCString trFunctionPrototypeDocumentation() = 0;
virtual QCString trTypedefDocumentation() = 0; virtual QCString trTypedefDocumentation() = 0;
virtual QCString trEnumerationTypeDocumentation() = 0; virtual QCString trEnumerationTypeDocumentation() = 0;
virtual QCString trEnumerationValueDocumentation() = 0; //virtual QCString trEnumerationValueDocumentation() = 0;
virtual QCString trFunctionDocumentation() = 0; virtual QCString trFunctionDocumentation() = 0;
virtual QCString trVariableDocumentation() = 0; virtual QCString trVariableDocumentation() = 0;
virtual QCString trCompounds() = 0; virtual QCString trCompounds() = 0;
...@@ -141,9 +141,9 @@ class Translator ...@@ -141,9 +141,9 @@ class Translator
virtual QCString trWrittenBy() = 0; virtual QCString trWrittenBy() = 0;
virtual QCString trClassDiagram(const char *clName) = 0; virtual QCString trClassDiagram(const char *clName) = 0;
virtual QCString trForInternalUseOnly() = 0; virtual QCString trForInternalUseOnly() = 0;
virtual QCString trReimplementedForInternalReasons() = 0; //virtual QCString trReimplementedForInternalReasons() = 0;
virtual QCString trWarning() = 0; virtual QCString trWarning() = 0;
virtual QCString trBugsAndLimitations() = 0; //virtual QCString trBugsAndLimitations() = 0;
virtual QCString trVersion() = 0; virtual QCString trVersion() = 0;
virtual QCString trDate() = 0; virtual QCString trDate() = 0;
virtual QCString trReturns() = 0; virtual QCString trReturns() = 0;
...@@ -223,7 +223,7 @@ class Translator ...@@ -223,7 +223,7 @@ class Translator
// new since 0.49-991003 // new since 0.49-991003
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trSources() = 0; //virtual QCString trSources() = 0;
virtual QCString trDefinedAtLineInSourceFile() = 0; virtual QCString trDefinedAtLineInSourceFile() = 0;
virtual QCString trDefinedInSourceFile() = 0; virtual QCString trDefinedInSourceFile() = 0;
...@@ -317,13 +317,13 @@ class Translator ...@@ -317,13 +317,13 @@ class Translator
// new since 1.2.4 // new since 1.2.4
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trInterfaces() = 0; //virtual QCString trInterfaces() = 0;
virtual QCString trClasses() = 0; virtual QCString trClasses() = 0;
virtual QCString trPackage(const char *name) = 0; virtual QCString trPackage(const char *name) = 0;
virtual QCString trPackageList() = 0; virtual QCString trPackageList() = 0;
virtual QCString trPackageListDescription() = 0; virtual QCString trPackageListDescription() = 0;
virtual QCString trPackages() = 0; virtual QCString trPackages() = 0;
virtual QCString trPackageDocumentation() = 0; //virtual QCString trPackageDocumentation() = 0;
virtual QCString trDefineValue() = 0; virtual QCString trDefineValue() = 0;
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -349,7 +349,7 @@ class Translator ...@@ -349,7 +349,7 @@ class Translator
virtual QCString trGroup(bool first_capital, bool singular) = 0; virtual QCString trGroup(bool first_capital, bool singular) = 0;
virtual QCString trPage(bool first_capital, bool singular) = 0; virtual QCString trPage(bool first_capital, bool singular) = 0;
virtual QCString trMember(bool first_capital, bool singular) = 0; virtual QCString trMember(bool first_capital, bool singular) = 0;
virtual QCString trField(bool first_capital, bool singular) = 0; //virtual QCString trField(bool first_capital, bool singular) = 0;
virtual QCString trGlobal(bool first_capital, bool singular) = 0; virtual QCString trGlobal(bool first_capital, bool singular) = 0;
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
......
This diff is collapsed.
...@@ -493,6 +493,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -493,6 +493,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
// - body code // - body code
// + template arguments // + template arguments
// (templateArguments(), definitionTemplateParameterLists()) // (templateArguments(), definitionTemplateParameterLists())
// - call graph
// enum values are written as part of the enum // enum values are written as part of the enum
if (md->memberType()==MemberDef::EnumValue) return; if (md->memberType()==MemberDef::EnumValue) return;
...@@ -896,7 +897,7 @@ static void writeInnerClasses(const ClassSDict *cl,QTextStream &t) ...@@ -896,7 +897,7 @@ static void writeInnerClasses(const ClassSDict *cl,QTextStream &t)
ClassDef *cd; ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli) for (cli.toFirst();(cd=cli.current());++cli)
{ {
if (cd->name().find('@')!=-1) // skip anonymous scopes if (cd->name().find('@')==-1) // skip anonymous scopes
{ {
t << " <innerclass refid=\"" << cd->getOutputFileBase() t << " <innerclass refid=\"" << cd->getOutputFileBase()
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl; << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
...@@ -913,7 +914,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,QTextStream &t) ...@@ -913,7 +914,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,QTextStream &t)
NamespaceDef *nd; NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli) for (nli.toFirst();(nd=nli.current());++nli)
{ {
if (nd->name().find('@')!=-1) // skip anonymouse scopes if (nd->name().find('@')==-1) // skip anonymouse scopes
{ {
t << " <innernamespace refid=\"" << nd->getOutputFileBase() t << " <innernamespace refid=\"" << nd->getOutputFileBase()
<< "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl; << "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
......
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