Commit 2ed43d4c authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.4.1-20050210

parent c00ba20b
DOXYGEN Version 1.4.1-20050129
DOXYGEN Version 1.4.1-20050210
Please read the installation section of the manual
(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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
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);
tag of doxygen's configuration file.
If \<file-name\> itself is not unique for the set of example files specified
by the
\ref cfg_example_path "EXAMPLE_PATH" tag, you can include part
by the \ref cfg_example_path "EXAMPLE_PATH" tag, you can include part
of the absolute path to disambiguate it.
Using the \\include command is equivalent to inserting the file into
......@@ -1446,9 +1445,13 @@ void memcpy(void *dest, const void *src, size_t n);
\ref cmddontinclude "\\dontinclude" command in combination with
the \ref cmdline "\\line", \ref cmdskip "\\skip",
\ref cmdskipline "\\skipline",
and \\until commands.
and \\until commands.
\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" and \ref cmddontinclude "\\dontinclude".
\sa section \ref cmdexample "\\example", \ref cmddontinclude "\\dontinclude", and
section \ref cmdverbatim "\\verbatim".
<hr>
\section cmdincludelineno \\includelineno <file-name>
......@@ -1635,7 +1638,7 @@ void memcpy(void *dest, const void *src, size_t n);
classes and members that are documented are automatically replaced by
links to the documentation.
\sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim"
\sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim".
<hr>
\section cmdcopydoc \\copydoc <link-object>
......@@ -1805,7 +1808,7 @@ class C {};
\addindex \\endverbatim
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>
\section cmdendxmlonly \\endxmlonly
......@@ -2020,6 +2023,8 @@ class C {};
\warning Make sure you include a \\endverbatim command for each
\\verbatim command or the parser will get confused!
\sa section \ref cmdcode "\\code", and section \ref cmdverbinclude "\\verbinclude".
<hr>
\section cmdxmlonly \\xmlonly
......
......@@ -121,6 +121,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_generate_treeview GENERATE_TREEVIEW
\refitem cfg_generate_xml GENERATE_XML
\refitem cfg_graphical_hierarchy GRAPHICAL_HIERARCHY
\refitem cfg_group_graphs GROUP_GRAPHS
\refitem cfg_have_dot HAVE_DOT
\refitem cfg_hhc_location HHC_LOCATION
\refitem cfg_hide_friend_compounds HIDE_FRIEND_COMPOUNDS
......@@ -202,6 +203,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_template_relations TEMPLATE_RELATIONS
\refitem cfg_toc_expand TOC_EXPAND
\refitem cfg_treeview_width TREEVIEW_WIDTH
\refitem cfg_uml_look UML_LOOK
\refitem cfg_use_windows_encoding USE_WINDOWS_ENCODING
\refitem cfg_verbatim_headers VERBATIM_HEADERS
\refitem cfg_warn_format WARN_FORMAT
......@@ -1586,6 +1588,19 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
indirect implementation dependencies (inheritance, containment, and
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
<dt>\c TEMPLATE_RELATIONS <dd>
\addindex TEMPLATE_RELATIONS
......
......@@ -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
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):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
......@@ -240,7 +240,7 @@ when the translator was updated.
<td>Ukrainian</td>
<td>Olexij Tkatchenko</td>
<td>olexij.tkatchenko at parcs dot de</td>
<td>1.2.11</td>
<td>up-to-date</td>
</tr>
<!-- table content end -->
</table>
......@@ -329,7 +329,7 @@ when the translator was updated.
\hline
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & up-to-date \\
\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
\end{tabular}
\endlatexonly
......
This diff is collapsed.
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.4.1_20050129
Version: 1.4.1_20050210
Release: 1
Epoch: 1
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
distclean: clean
-$(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
FORCE:
......@@ -290,23 +290,32 @@ static VariableContext g_theVarContext;
class CallContext
{
public:
struct Ctx
{
Ctx() : name(g_name), type(g_type), cd(0) {}
QCString name;
QCString type;
ClassDef *cd;
};
CallContext()
{
m_classList.append(0);
m_classList.append(new Ctx);
m_classList.setAutoDelete(TRUE);
}
virtual ~CallContext() {}
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));
m_classList.removeLast();
m_classList.append(cd);
ctx->cd=cd;
}
}
void pushScope()
{
m_classList.append(0);
m_classList.append(new Ctx);
DBG_CTX((stderr,"** Push call context %d\n",m_classList.count()));
}
void popScope()
......@@ -314,6 +323,12 @@ class CallContext
if (m_classList.count()>1)
{
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();
}
else
......@@ -324,16 +339,20 @@ class CallContext
void clear()
{
DBG_CTX((stderr,"** Clear call context\n"));
m_classList.clear();
m_classList.append(0);
Ctx *ctx = m_classList.getLast();
if (ctx)
{
ctx->cd=0;
}
}
ClassDef *getClass() const
{
return m_classList.getLast();
Ctx *ctx = m_classList.getLast();
if (ctx) return ctx->cd; else return 0;
}
private:
QList<ClassDef> m_classList;
QList<Ctx> m_classList;
};
static CallContext g_theCallContext;
......@@ -761,7 +780,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{
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
{
......@@ -928,7 +947,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const
if (mcd)
{
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)
{
// extract class definition of the return type in order to resolve
......@@ -967,7 +986,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const
// add usage reference
if (g_currentDefinition && g_currentMemberDef &&
xmd!=g_currentMemberDef && g_insideBody)
/*xmd!=g_currentMemberDef &&*/ g_insideBody)
{
addDocCrossReference(g_currentMemberDef,xmd);
}
......@@ -2415,6 +2434,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
if (*yytext==';') g_searchingForBody=FALSE;
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_parmType.resize(0);g_parmName.resize(0);
......
......@@ -412,6 +412,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l
sectionTitle,SectionInfo::Anchor);
Doxygen::sectionDict.insert(anchorLabel,si);
docEntry->anchors->append(si);
outputXRef.resize(0);
}
//current->brief = slString; // restore orginial brief desc.
}
......@@ -643,7 +644,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
* 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);
}
<Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!)
......@@ -1116,8 +1117,8 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<SectionLabel>{LABELID} { // first argyment
sectionLabel=yytext;
addOutput(yytext);
sectionTitle.resize(0);
current->doc+=yytext;
BEGIN(SectionTitle);
}
<SectionLabel>{DOCNL} { // missing argument
......@@ -1151,15 +1152,19 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
<SectionTitle>[^\n@\\]* { // any character without special meaning
sectionTitle+=yytext;
current->doc+=yytext;
addOutput(yytext);
}
<SectionTitle>("\\\\"|"@@"){ID} { // unescape escaped command
sectionTitle+=&yytext[1];
addOutput(yytext);
}
<SectionTitle>("\\\\"|"@@") { // unescape escaped command
sectionTitle+=*yytext;
current->doc+=*yytext;
<SectionTitle>{CMD}[$@\\&~<>#%] { // unescape escaped character
sectionTitle+=yytext[1];
addOutput(yytext);
}
<SectionTitle>. { // anything else
sectionTitle+=yytext;
current->doc+=yytext;
addOutput(*yytext);
}
/* ----- handle arguments of the anchor command ------- */
......@@ -1168,7 +1173,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor);
Doxygen::sectionDict.insert(yytext,si);
current->anchors->append(si);
addOutput(yytext);
addOutput(yytext);
BEGIN( Comment );
}
<AnchorLabel>{DOCNL} { // missing argument
......@@ -1646,8 +1651,9 @@ static void handleSection(const QCString &s)
BEGIN(SectionLabel);
}
static void handleAnchor(const QCString &)
static void handleAnchor(const QCString &s)
{
addOutput("@"+s+" ");
BEGIN(AnchorLabel);
}
......@@ -1825,8 +1831,8 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry,
/* in,out */ Protection &prot
)
{
//fprintf(stderr,"isBrief=%d isJavaDocStyle=%d\n",
// isBrief,isJavaDocStyle);
//fprintf(stderr,"parseCommentBlock() isBrief=%d isJavaDocStyle=%d lineNr=%d\n",
// isBrief,isJavaDocStyle,lineNr);
initParser();
guards.setAutoDelete(TRUE);
guards.clear();
......@@ -1840,6 +1846,7 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry,
//inBody = foundInBody;
protection = prot;
needNewEntry = FALSE;
outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle;
commentScanYYrestart( commentScanYYin );
......
......@@ -1332,7 +1332,7 @@ static void readTextFileByName(const QString &file,QString &text)
FileDef *fd;
if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig)))
{
text = fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES"));
text = fileToString(fd->absFilePath(),FALSE);
}
else if (ambig)
{
......@@ -5126,6 +5126,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_paramsFound.clear();
g_sectionDict = 0; //sections;
//printf("Starting comment block at %s:%d\n",g_fileName.data(),startLine);
doctokenizerYYlineno=startLine;
doctokenizerYYinit(input,g_fileName);
......
......@@ -252,6 +252,18 @@ static void handleHtmlTag()
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
......@@ -565,6 +577,7 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"))*{ID}{FUNCARG}?
g_token->verb+=yytext;
}
<St_Verbatim>{CMD}"endverbatim" {
g_token->verb=stripEmptyLines(g_token->verb);
return RetVal_OK;
}
<St_Verbatim>[^\\@\n]+ |
......
......@@ -8775,7 +8775,7 @@ void generateOutput()
}
Doxygen::tagFile.setDevice(tag);
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;
}
......
......@@ -516,7 +516,17 @@ void NamespaceDef::combineUsingRelations()
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
ol.startMemberHeader();
bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
......@@ -530,41 +540,42 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName)
}
ol.endMemberHeader();
ol.startMemberList();
SDict<NamespaceDef>::Iterator ni(*this);
NamespaceDef *nd;
for (ni.toFirst();(nd=ni.current());++ni)
{
ol.startMemberItem(0);
if (javaOpt)
{
ol.docify("package ");
}
else
{
ol.docify("namespace ");
}
ol.insertMemberAlign();
QCString name;
if (localName)
{
name = nd->localName();
}
else
{
name = nd->displayName();
}
ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name);
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
if (nd->isLinkable())
{
Doxygen::tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
}
ol.endMemberItem();
if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription();
ol.parseDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
ol.newParagraph();
ol.startMemberItem(0);
if (javaOpt)
{
ol.docify("package ");
}
else
{
ol.docify("namespace ");
}
ol.insertMemberAlign();
QCString name;
if (localName)
{
name = nd->localName();
}
else
{
name = nd->displayName();
}
ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name);
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
Doxygen::tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
}
ol.endMemberItem();
if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription();
ol.parseDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
ol.newParagraph();
}
}
}
ol.endMemberList();
......
......@@ -183,6 +183,7 @@ static QCString docBlock;
static QCString docBlockName;
static bool docBlockInBody;
static bool docBlockJavaStyle;
static char docBlockTerm;
//-----------------------------------------------------------------------------
......@@ -336,51 +337,8 @@ static void addMemberGroupDocs()
//-----------------------------------------------------------------
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 startCommentBlock(bool);
static void handleCommentBlock(const QCString &doc,bool brief);
//-----------------------------------------------------------------
static void addXRefItem(bool inBody,const char *listName,const char *itemTitle,const char *listTitle)
......@@ -2034,7 +1992,26 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer,OldStyleArgs>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount();
if (current->bodyLine==-1)
{
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;
afterDocTerminator = ';';
if (yytext[yyleng-3]=='/')
......@@ -2060,9 +2037,27 @@ IDLATTR ("["[^\]]*"]"){BN}*
current->docFile = yyFileName;
BEGIN(AfterDoc);
}
#endif
}
<MemberSpec,FindFields,FindMembers,NextSemi,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
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;
afterDocTerminator = ',';
if (yytext[yyleng-3]=='/')
......@@ -2088,6 +2083,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
current->docFile = yyFileName;
BEGIN(AfterDoc);
}
#endif
}
<DefineEnd,FindFields,FindFieldArg,ReadInitializer,OldStyleArgs>{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount();
......@@ -4142,6 +4138,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlock.resize(0);
startCommentBlock(FALSE);
BEGIN( DocBlock );
#else
BEGIN( Doc );
......@@ -4179,6 +4176,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
current->brief.resize(0);
}
}
startCommentBlock(FALSE);
BEGIN( DocBlock );
#else
if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style
......@@ -4243,6 +4241,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlock.resize(0);
startCommentBlock(TRUE);
BEGIN( DocLine );
#else
BEGIN( LineDoc );
......@@ -4270,6 +4269,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlock.resize(0);
startCommentBlock(TRUE);
BEGIN( DocLine );
#else
BEGIN( LineDoc );
......@@ -4296,8 +4296,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
else
{
if ((insideJava || insideCS || insideD) &&
current->name.isEmpty() &&
current->type.isEmpty()
current->name.isEmpty()
)
{
// static Java initializer
......@@ -4305,6 +4304,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
if (current->stat)
{
current->name="[static initializer]";
current->type.resize(0);
}
else
{
......@@ -4365,7 +4365,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
}
<DocBlock>^{B}*"*"+/{BN}+ { // start of a comment line
}
<DocBlock>("@@"|"\\\\"){ID} { // escaped command
<DocBlock>("@@"|"\\\\"){ID}/[^a-z_A-Z0-9] { // escaped command
docBlock+=yytext;
}
<DocBlock>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!)
......@@ -4399,9 +4399,12 @@ IDLATTR ("["[^\]]*"]"){BN}*
REJECT;
}
}
<DocCopyBlock>[^@\*\\\n]+ { // any character that is not special
<DocCopyBlock>[^@/*\\\n]+ { // any character that is not special
docBlock+=yytext;
}
<DocCopyBlock>"/*"|"*/"|"//" {
docBlock+=yytext;
}
<DocCopyBlock>\n { // newline
docBlock+=*yytext;
yyLineNr++;
......@@ -5259,6 +5262,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
}
<AnchorLabel>{LABELID} {
SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor);
printf("New anchor file=%s label=%s\n",yyFileName,yytext);
Doxygen::sectionDict.insert(yytext,si);
current->anchors->append(si);
current->doc+=yytext;
......@@ -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
static void startGroup()
{
......
......@@ -92,7 +92,7 @@ class Translator
virtual QCString trClassHierarchy() = 0;
virtual QCString trCompoundList() = 0;
virtual QCString trFileList() = 0;
virtual QCString trHeaderFiles() = 0;
//virtual QCString trHeaderFiles() = 0;
virtual QCString trCompoundMembers() = 0;
virtual QCString trFileMembers() = 0;
virtual QCString trRelatedPages() = 0;
......@@ -103,11 +103,11 @@ class Translator
virtual QCString trCompoundListDescription() = 0;
virtual QCString trCompoundMembersDescription(bool extractAll) = 0;
virtual QCString trFileMembersDescription(bool extractAll) = 0;
virtual QCString trHeaderFilesDescription() = 0;
//virtual QCString trHeaderFilesDescription() = 0;
virtual QCString trExamplesDescription() = 0;
virtual QCString trRelatedPagesDescription() = 0;
virtual QCString trModulesDescription() = 0;
virtual QCString trNoDescriptionAvailable() = 0;
//virtual QCString trNoDescriptionAvailable() = 0;
// index titles (the project name is prepended for these)
......@@ -133,7 +133,7 @@ class Translator
virtual QCString trFunctionPrototypeDocumentation() = 0;
virtual QCString trTypedefDocumentation() = 0;
virtual QCString trEnumerationTypeDocumentation() = 0;
virtual QCString trEnumerationValueDocumentation() = 0;
//virtual QCString trEnumerationValueDocumentation() = 0;
virtual QCString trFunctionDocumentation() = 0;
virtual QCString trVariableDocumentation() = 0;
virtual QCString trCompounds() = 0;
......@@ -141,9 +141,9 @@ class Translator
virtual QCString trWrittenBy() = 0;
virtual QCString trClassDiagram(const char *clName) = 0;
virtual QCString trForInternalUseOnly() = 0;
virtual QCString trReimplementedForInternalReasons() = 0;
//virtual QCString trReimplementedForInternalReasons() = 0;
virtual QCString trWarning() = 0;
virtual QCString trBugsAndLimitations() = 0;
//virtual QCString trBugsAndLimitations() = 0;
virtual QCString trVersion() = 0;
virtual QCString trDate() = 0;
virtual QCString trReturns() = 0;
......@@ -223,7 +223,7 @@ class Translator
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources() = 0;
//virtual QCString trSources() = 0;
virtual QCString trDefinedAtLineInSourceFile() = 0;
virtual QCString trDefinedInSourceFile() = 0;
......@@ -317,13 +317,13 @@ class Translator
// new since 1.2.4
//////////////////////////////////////////////////////////////////////////
virtual QCString trInterfaces() = 0;
//virtual QCString trInterfaces() = 0;
virtual QCString trClasses() = 0;
virtual QCString trPackage(const char *name) = 0;
virtual QCString trPackageList() = 0;
virtual QCString trPackageListDescription() = 0;
virtual QCString trPackages() = 0;
virtual QCString trPackageDocumentation() = 0;
//virtual QCString trPackageDocumentation() = 0;
virtual QCString trDefineValue() = 0;
//////////////////////////////////////////////////////////////////////////
......@@ -349,7 +349,7 @@ class Translator
virtual QCString trGroup(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 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;
//////////////////////////////////////////////////////////////////////////
......
This diff is collapsed.
......@@ -493,6 +493,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
// - body code
// + template arguments
// (templateArguments(), definitionTemplateParameterLists())
// - call graph
// enum values are written as part of the enum
if (md->memberType()==MemberDef::EnumValue) return;
......@@ -896,7 +897,7 @@ static void writeInnerClasses(const ClassSDict *cl,QTextStream &t)
ClassDef *cd;
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()
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
......@@ -913,7 +914,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,QTextStream &t)
NamespaceDef *nd;
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()
<< "\">" << 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