Commit 07ee85eb authored by dimitri's avatar dimitri

Release-1.4.7

parent de0997f3
DOXYGEN Version 1.4.6-20060507 DOXYGEN Version 1.4.7
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 (07 May 2006) Dimitri van Heesch (11 June 2006)
...@@ -14,6 +14,7 @@ irix-n32 ...@@ -14,6 +14,7 @@ irix-n32
linux-g++ linux-g++
linux-64 linux-64
macosx-c++ macosx-c++
macosx-uni-c++
m68k-atari-mint-g++ m68k-atari-mint-g++
netbsd-g++ netbsd-g++
openbsd-g++ openbsd-g++
......
DOXYGEN Version 1.4.6_20060507 DOXYGEN Version 1.4.7
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) (07 May 2006) Dimitri van Heesch (dimitri@stack.nl) (11 June 2006)
...@@ -1191,6 +1191,16 @@ void MainWidget::saveConfigFile() ...@@ -1191,6 +1191,16 @@ void MainWidget::saveConfigFile()
if (!fn.isEmpty()) if (!fn.isEmpty())
{ {
QFile f(fn); QFile f(fn);
if (f.exists() && QMessageBox::question(this,
"Overwrite file? -- Doxywizard",
"A file called "+fn+" already exists. Do you want to overwrite it?",
"&Yes","&no",
QString::null, 0, 1)
)
{
statusBar()->message("Save request aborted",messageTimeout);
return;
}
if (f.open(IO_WriteOnly)) if (f.open(IO_WriteOnly))
{ {
QTextStream t(&f); QTextStream t(&f);
......
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
doxygen_version_major=1 doxygen_version_major=1
doxygen_version_minor=4 doxygen_version_minor=4
doxygen_version_revision=6 doxygen_version_revision=7
#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=20060507 doxygen_version_mmn=NO
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
...@@ -155,6 +155,9 @@ if test -z "$f_platform"; then ...@@ -155,6 +155,9 @@ if test -z "$f_platform"; then
if test "$f_insttool" = NO; then if test "$f_insttool" = NO; then
f_insttool=/usr/bin/install f_insttool=/usr/bin/install
fi fi
if test -n "`ls /Developer/SDKs/MacOSX10.*u.sdk`"; then
f_platform=macosx-uni-c++
fi
;; ;;
FreeBSD:*) FreeBSD:*)
f_platform=freebsd-g++ f_platform=freebsd-g++
......
...@@ -21,8 +21,8 @@ ...@@ -21,8 +21,8 @@
Doxygen can use the "dot" tool from graphviz 1.5 to generate Doxygen can use the "dot" tool from graphviz 1.5 to generate
more advanced diagrams and graphs. Graphviz is an "open-sourced", more advanced diagrams and graphs. Graphviz is an "open-sourced",
cross-platform graph drawing toolkit from AT\&T and Lucent Bell Labs and cross-platform graph drawing toolkit and can be found
can be found at http://www.research.att.com/sw/tools/graphviz/ at http://www.graphviz.org/
If you have the "dot" tool available in the path, you can set If you have the "dot" tool available in the path, you can set
\ref cfg_have_dot "HAVE_DOT" to \c YES in the configuration file to \ref cfg_have_dot "HAVE_DOT" to \c YES in the configuration file to
......
...@@ -62,9 +62,9 @@ tools should be installed. ...@@ -62,9 +62,9 @@ tools should be installed.
<a href="http://www.tug.org/interest.html#free">teTeX 1.0</a> <a href="http://www.tug.org/interest.html#free">teTeX 1.0</a>
\latexonly \\par (see {\tt http://www.tug.org/interest.html\#free})\endlatexonly. \latexonly \\par (see {\tt http://www.tug.org/interest.html\#free})\endlatexonly.
This is needed for generating LaTeX, Postscript, and PDF output. This is needed for generating LaTeX, Postscript, and PDF output.
<li><a href="http://www.research.att.com/sw/tools/graphviz/"> <li><a href="http://www.graphviz.org/">
the Graph visualization toolkit version 1.8.10 or higher</a> the Graph visualization toolkit version 1.8.10 or higher</a>
\latexonly \\par (see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly. \latexonly \\par (see {\tt http://www.graphviz.org/})\endlatexonly.
Needed for the include dependency graphs, Needed for the include dependency graphs,
the graphical inheritance graphs, and the collaboration graphs. the graphical inheritance graphs, and the collaboration graphs.
If you compile graphviz yourself, make sure you do include If you compile graphviz yourself, make sure you do include
...@@ -559,9 +559,9 @@ features: ...@@ -559,9 +559,9 @@ features:
You can download it from You can download it from
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/vsconHH1Start.asp">Microsoft</a>. <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/vsconHH1Start.asp">Microsoft</a>.
<li><a href="http://www.research.att.com/sw/tools/graphviz/"> <li><a href="http://www.graphviz.org/">
the Graph visualization toolkit version 1.8.10</a><br> the Graph visualization toolkit version 1.8.10</a><br>
\latexonly(see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly. \latexonly(see {\tt http://www.graphviz.org/})\endlatexonly.
Needed for the include dependency graphs, the graphical inheritance graphs, Needed for the include dependency graphs, the graphical inheritance graphs,
and the collaboration graphs. and the collaboration graphs.
</ul> </ul>
......
This diff is collapsed.
This diff is collapsed.
...@@ -2055,22 +2055,27 @@ bool ClassDef::isLinkable() const ...@@ -2055,22 +2055,27 @@ bool ClassDef::isLinkable() const
/*! the class is visible in a class diagram, or class hierarchy */ /*! the class is visible in a class diagram, or class hierarchy */
bool ClassDef::isVisibleInHierarchy() bool ClassDef::isVisibleInHierarchy()
{ {
return // show all classes or a subclass is visible static bool allExternals = Config_getBool("ALLEXTERNALS");
(Config_getBool("ALLEXTERNALS") || hasNonReferenceSuperClass()) && static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES");
static bool extractStatic = Config_getBool("EXTRACT_STATIC");
return // show all classes or a subclass is visible
(allExternals || hasNonReferenceSuperClass()) &&
// and not an annonymous compound // and not an annonymous compound
name().find('@')==-1 && name().find('@')==-1 &&
// not an artifically introduced class // not an artifically introduced class
!m_artificial && !m_artificial &&
// and not privately inherited // and not privately inherited
(m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && (m_prot!=Private || extractPrivate) &&
// documented or shown anyway or documentation is external // documented or shown anyway or documentation is external
(hasDocumentation() || (hasDocumentation() ||
!Config_getBool("HIDE_UNDOC_CLASSES") || !hideUndocClasses ||
(m_templateMaster && m_templateMaster->hasDocumentation()) || (m_templateMaster && m_templateMaster->hasDocumentation()) ||
isReference() isReference()
) && ) &&
// is not part of an unnamed namespace or shown anyway // is not part of an unnamed namespace or shown anyway
(!m_isStatic || Config_getBool("EXTRACT_STATIC")); (!m_isStatic || extractStatic);
} }
bool ClassDef::hasDocumentation() const bool ClassDef::hasDocumentation() const
......
...@@ -3152,7 +3152,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, ...@@ -3152,7 +3152,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
extern "C" { // some bogus code to keep the compiler happy extern "C" { // some bogus code to keep the compiler happy
void codeYYdummy() { yy_flex_realloc(0,0); } void codeYYdummy() { yy_flex_realloc(0,0); }
} }
#else #elif YY_FLEX_SUBMINOR_VERSION<33
#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)." #error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
#endif #endif
...@@ -493,8 +493,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -493,8 +493,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
BEGIN(g_condCtx); BEGIN(g_condCtx);
} }
<CondLine>[ \t]* <CondLine>[ \t]*
<CComment,ReadLine>[\\@]"cond"[ \t]*\n | <CComment,ReadLine>[\\@]"cond"[ \t\r]*\n |
<CondLine>. { // forgot section id? <CondLine>. { // forgot section id?
if (YY_START!=CondLine) g_condCtx=YY_START;
bool oldSkip=g_skip; bool oldSkip=g_skip;
startCondSection(" "); // fake section id causing the section to be hidden unconditionally startCondSection(" "); // fake section id causing the section to be hidden unconditionally
if (g_condCtx==CComment && !oldSkip && g_skip) if (g_condCtx==CComment && !oldSkip && g_skip)
......
...@@ -42,6 +42,8 @@ class ParserInterface; ...@@ -42,6 +42,8 @@ class ParserInterface;
* @param[in] isJavaDocStyle TRUE iff this comment block is in "JavaDoc" style. * @param[in] isJavaDocStyle TRUE iff this comment block is in "JavaDoc" style.
* This means that it starts as a brief description until the end of * This means that it starts as a brief description until the end of
* the sentences is found and then proceeds as a detailed description. * the sentences is found and then proceeds as a detailed description.
* @param[in] isInbody TRUE iff this comment block is located in the body of
* a function.
* @param[in,out] prot The protection level in which this comment block was * @param[in,out] prot The protection level in which this comment block was
* found. Commands in the comment block may override this. * found. Commands in the comment block may override this.
* @param[in,out] position The character position within \a comment where the * @param[in,out] position The character position within \a comment where the
...@@ -63,6 +65,7 @@ bool parseCommentBlock(ParserInterface *parser, ...@@ -63,6 +65,7 @@ bool parseCommentBlock(ParserInterface *parser,
int lineNr, int lineNr,
bool isBrief, bool isBrief,
bool isJavaDocStyle, bool isJavaDocStyle,
bool isInbody,
Protection &prot, Protection &prot,
int &position, int &position,
bool &newEntryNeeded bool &newEntryNeeded
......
...@@ -261,7 +261,8 @@ enum OutputContext ...@@ -261,7 +261,8 @@ enum OutputContext
{ {
OutputDoc, OutputDoc,
OutputBrief, OutputBrief,
OutputXRef OutputXRef,
OutputInbody
}; };
enum GuardType enum GuardType
...@@ -299,7 +300,7 @@ static QCString inputString; // input string ...@@ -299,7 +300,7 @@ static QCString inputString; // input string
static int inputPosition; // read pointer static int inputPosition; // read pointer
static QCString yyFileName; // file name that is read from static QCString yyFileName; // file name that is read from
static int yyLineNr; // line number in the input static int yyLineNr; // line number in the input
//static bool inBody; // was the comment found inside the body of a function? static bool inBody; // was the comment found inside the body of a function?
static OutputContext inContext; // are we inside the brief, details or xref part static OutputContext inContext; // are we inside the brief, details or xref part
static bool briefEndsAtDot; // does the brief description stop at a dot? static bool briefEndsAtDot; // does the brief description stop at a dot?
static QCString formulaText; // Running text of a formula static QCString formulaText; // Running text of a formula
...@@ -479,7 +480,14 @@ static void addXRefItem(const char *listName,const char *itemTitle, ...@@ -479,7 +480,14 @@ static void addXRefItem(const char *listName,const char *itemTitle,
docEntry->addSpecialListItem(listName,itemId); docEntry->addSpecialListItem(listName,itemId);
QCString cmdString; QCString cmdString;
cmdString.sprintf("\\xrefitem %s %d\n",listName,itemId); cmdString.sprintf("\\xrefitem %s %d\n",listName,itemId);
docEntry->doc += cmdString; if (inBody)
{
docEntry->inbodyDocs += cmdString;
}
else
{
docEntry->doc += cmdString;
}
SectionInfo *si=new SectionInfo(listName,anchorLabel, SectionInfo *si=new SectionInfo(listName,anchorLabel,
sectionTitle,SectionInfo::Anchor); sectionTitle,SectionInfo::Anchor);
Doxygen::sectionDict.insert(anchorLabel,si); Doxygen::sectionDict.insert(anchorLabel,si);
...@@ -605,6 +613,7 @@ static inline void setOutput(OutputContext ctx) ...@@ -605,6 +613,7 @@ static inline void setOutput(OutputContext ctx)
} }
inContext = ctx; inContext = ctx;
if (inContext!=OutputXRef && inBody) inContext=OutputInbody;
switch(inContext) switch(inContext)
{ {
case OutputDoc: case OutputDoc:
...@@ -629,6 +638,9 @@ static inline void setOutput(OutputContext ctx) ...@@ -629,6 +638,9 @@ static inline void setOutput(OutputContext ctx)
// first item found, so can't append to previous // first item found, so can't append to previous
//xrefAppendFlag = FALSE; //xrefAppendFlag = FALSE;
break; break;
case OutputInbody:
pOutputString = &current->inbodyDocs;
break;
} }
} }
...@@ -780,7 +792,7 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-] ...@@ -780,7 +792,7 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]
<Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!) <Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!)
addOutput(yytext); addOutput(yytext);
} }
<Comment>{XREFCMD}/[^a-z_A-Z]* { // command that can end a brief description <Comment>{XREFCMD}/[^a-z_A-Z]* { // xref command
if (inContext!=OutputXRef) if (inContext!=OutputXRef)
{ {
briefEndsAtDot=FALSE; briefEndsAtDot=FALSE;
...@@ -826,7 +838,12 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-] ...@@ -826,7 +838,12 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]
// yuk, this is probably not very portable across lex implementations, // yuk, this is probably not very portable across lex implementations,
// but we need to know the position in the input buffer where this // but we need to know the position in the input buffer where this
// rule matched. // rule matched.
// for flex 2.5.33+ we should use YY_CURRENT_BUFFER_LVALUE
#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
#else
inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf; inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf;
#endif
yyterminate(); yyterminate();
} }
} }
...@@ -2177,6 +2194,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2177,6 +2194,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in */ int lineNr, /* in */ int lineNr,
/* in */ bool isBrief, /* in */ bool isBrief,
/* in */ bool isJavaDocStyle, /* in */ bool isJavaDocStyle,
/* in */ bool isInbody,
/* in,out */ Protection &prot, /* in,out */ Protection &prot,
/* in,out */ int &position, /* in,out */ int &position,
/* out */ bool &newEntryNeeded /* out */ bool &newEntryNeeded
...@@ -2202,10 +2220,15 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2202,10 +2220,15 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
xrefAppendFlag = FALSE; xrefAppendFlag = FALSE;
insidePre = FALSE; insidePre = FALSE;
parseMore = FALSE; parseMore = FALSE;
inBody = isInbody;
outputXRef.resize(0); outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc ); setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle; briefEndsAtDot = isJavaDocStyle;
if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
{
current->inbodyDocs+="\n\n";
}
Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n" Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n"
"input=[%s]\n",fileName.data(),lineNr,comment.data() "input=[%s]\n",fileName.data(),lineNr,comment.data()
......
...@@ -311,6 +311,7 @@ static int yyread(char *buf,int max_size) ...@@ -311,6 +311,7 @@ static int yyread(char *buf,int max_size)
if (includeStack.isEmpty()) if (includeStack.isEmpty())
{ {
int c=0; int c=0;
if (inputString==0) return c;
while( c < max_size && inputString[inputPosition] ) while( c < max_size && inputString[inputPosition] )
{ {
*buf = inputString[inputPosition++] ; *buf = inputString[inputPosition++] ;
......
...@@ -325,7 +325,7 @@ OPMASK ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG}) ...@@ -325,7 +325,7 @@ OPMASK ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
LNKWORD1 ("::"|"#")?{SCOPEMASK} LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile") CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 {SCOPEPRE}*"operator"{OPMASK} LNKWORD2 {SCOPEPRE}*"operator"{OPMASK}
LNKWORD3 [0-9a-z_A-Z]+("."[0-9a-z_A-Z]+)+ LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+
CHARWORD [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,.] CHARWORD [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,.]
CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."] CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."]
WORD1 "%"?{CHARWORD}+|"{"|"}"|("\""[^"\n]*"\"") WORD1 "%"?{CHARWORD}+|"{"|"}"|("\""[^"\n]*"\"")
......
...@@ -120,7 +120,7 @@ SearchIndex * Doxygen::searchIndex=0; ...@@ -120,7 +120,7 @@ SearchIndex * Doxygen::searchIndex=0;
SDict<DefinitionList> *Doxygen::symbolMap; SDict<DefinitionList> *Doxygen::symbolMap;
bool Doxygen::outputToWizard=FALSE; bool Doxygen::outputToWizard=FALSE;
QDict<int> * Doxygen::htmlDirMap = 0; QDict<int> * Doxygen::htmlDirMap = 0;
QCache<LookupInfo> Doxygen::lookupCache(20000,20000); QCache<LookupInfo> Doxygen::lookupCache(50000,50000);
DirSDict Doxygen::directories(17); DirSDict Doxygen::directories(17);
SDict<DirRelation> Doxygen::dirRelations(257); SDict<DirRelation> Doxygen::dirRelations(257);
ParserManager *Doxygen::parserManager = 0; ParserManager *Doxygen::parserManager = 0;
...@@ -4889,7 +4889,6 @@ static void findMember(Entry *root, ...@@ -4889,7 +4889,6 @@ static void findMember(Entry *root,
else else
{ {
scopeName = mergeScopes(root->parent->name,scopeName); scopeName = mergeScopes(root->parent->name,scopeName);
printf("joinedName=%s\n",scopeName.data());
} }
} }
else // see if we can prefix a namespace or class that is used from the file else // see if we can prefix a namespace or class that is used from the file
...@@ -6131,7 +6130,7 @@ static void findEnumDocumentation(Entry *root) ...@@ -6131,7 +6130,7 @@ static void findEnumDocumentation(Entry *root)
md->setMemberGroupId(root->mGrpId); md->setMemberGroupId(root->mGrpId);
GroupDef *gd=md->getGroupDef(); GroupDef *gd=md->getGroupDef();
if (gd==0 &&root->groups->first()!=0) // member not grouped but out-of-line documentation is if (gd==0 && root->groups->first()!=0) // member not grouped but out-of-line documentation is
{ {
addMemberToGroups(root,md); addMemberToGroups(root,md);
} }
...@@ -7894,6 +7893,7 @@ static int readFileOrDirectory(const char *s, ...@@ -7894,6 +7893,7 @@ static int readFileOrDirectory(const char *s,
{ {
//printf("killDict=%p count=%d\n",killDict,killDict->count()); //printf("killDict=%p count=%d\n",killDict,killDict->count());
// strip trailing slashes // strip trailing slashes
if (s==0) return 0;
QCString fs = s; QCString fs = s;
char lc = fs.at(fs.length()-1); char lc = fs.at(fs.length()-1);
if (lc=='/' || lc=='\\') fs = fs.left(fs.length()-1); if (lc=='/' || lc=='\\') fs = fs.left(fs.length()-1);
......
...@@ -71,6 +71,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t, ...@@ -71,6 +71,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
docProtoMembers.setInGroup(TRUE); docProtoMembers.setInGroup(TRUE);
docTypedefMembers.setInGroup(TRUE); docTypedefMembers.setInGroup(TRUE);
docEnumMembers.setInGroup(TRUE); docEnumMembers.setInGroup(TRUE);
docEnumValMembers.setInGroup(TRUE);
docFuncMembers.setInGroup(TRUE); docFuncMembers.setInGroup(TRUE);
docVarMembers.setInGroup(TRUE); docVarMembers.setInGroup(TRUE);
...@@ -302,6 +303,18 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -302,6 +303,18 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
docEnumMembers.append(md); docEnumMembers.append(md);
break; break;
case MemberDef::EnumValue: case MemberDef::EnumValue:
if (!docOnly)
{
//printf("enum value %s!\n",md->name().data());
if (Config_getBool("SORT_BRIEF_DOCS"))
decEnumValMembers.inSort(md);
else
decEnumValMembers.append(md);
}
if (Config_getBool("SORT_MEMBER_DOCS"))
docEnumValMembers.inSort(md);
else
docEnumValMembers.append(md);
break; break;
case MemberDef::Prototype: case MemberDef::Prototype:
if (!docOnly) if (!docOnly)
...@@ -381,6 +394,8 @@ void GroupDef::removeMember(MemberDef *md) ...@@ -381,6 +394,8 @@ void GroupDef::removeMember(MemberDef *md)
docEnumMembers.remove(md); docEnumMembers.remove(md);
break; break;
case MemberDef::EnumValue: case MemberDef::EnumValue:
decEnumValMembers.remove(md);
docEnumValMembers.remove(md);
break; break;
case MemberDef::Prototype: case MemberDef::Prototype:
decProtoMembers.remove(md); decProtoMembers.remove(md);
...@@ -654,6 +669,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -654,6 +669,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
decProtoMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFuncProtos(),0); decProtoMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFuncProtos(),0);
decTypedefMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trTypedefs(),0); decTypedefMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trTypedefs(),0);
decEnumMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerations(),0); decEnumMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerations(),0);
decEnumValMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerationValues(),0,TRUE);
decFuncMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFunctions(),0); decFuncMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFunctions(),0);
decVarMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trVariables(),0); decVarMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trVariables(),0);
} }
...@@ -729,6 +745,9 @@ void GroupDef::writeMemberDocumentation(OutputList &ol) ...@@ -729,6 +745,9 @@ void GroupDef::writeMemberDocumentation(OutputList &ol)
docEnumMembers.writeDocumentation(ol,name(),this, docEnumMembers.writeDocumentation(ol,name(),this,
theTranslator->trEnumerationTypeDocumentation()); theTranslator->trEnumerationTypeDocumentation());
docEnumValMembers.writeDocumentation(ol,name(),this,
theTranslator->trEnumerationValueDocumentation(),TRUE);
docFuncMembers.writeDocumentation(ol,name(),this, docFuncMembers.writeDocumentation(ol,name(),this,
theTranslator->trFunctionDocumentation()); theTranslator->trFunctionDocumentation());
......
...@@ -106,6 +106,7 @@ class GroupDef : public Definition ...@@ -106,6 +106,7 @@ class GroupDef : public Definition
MemberList docProtoMembers; MemberList docProtoMembers;
MemberList docTypedefMembers; MemberList docTypedefMembers;
MemberList docEnumMembers; MemberList docEnumMembers;
MemberList docEnumValMembers;
MemberList docFuncMembers; MemberList docFuncMembers;
MemberList docVarMembers; MemberList docVarMembers;
......
...@@ -625,7 +625,10 @@ static int countClassesInTreeList(const ClassSDict &cl) ...@@ -625,7 +625,10 @@ static int countClassesInTreeList(const ClassSDict &cl)
{ {
if (cd->isVisibleInHierarchy()) // should it be visible if (cd->isVisibleInHierarchy()) // should it be visible
{ {
count++; if (cd->subClasses()->count()>0) // should have sub classes
{
count++;
}
} }
} }
} }
...@@ -634,17 +637,6 @@ static int countClassesInTreeList(const ClassSDict &cl) ...@@ -634,17 +637,6 @@ static int countClassesInTreeList(const ClassSDict &cl)
int countClassHierarchy() int countClassHierarchy()
{ {
#if 0
// TODO: let this function return the real number of items in the hierarchy.
initClassHierarchy(&Doxygen::classSDict);
int count=0;
ClassSDict::Iterator cli(Doxygen::classSDict);
for ( ; cli.current(); ++cli)
{
if (cli.current()->subClasses()->count()>0) count++;
}
return count;
#endif
int count=0; int count=0;
initClassHierarchy(&Doxygen::classSDict); initClassHierarchy(&Doxygen::classSDict);
initClassHierarchy(&Doxygen::hiddenClasses); initClassHierarchy(&Doxygen::hiddenClasses);
...@@ -657,7 +649,6 @@ int countClassHierarchy() ...@@ -657,7 +649,6 @@ int countClassHierarchy()
void writeHierarchicalIndex(OutputList &ol) void writeHierarchicalIndex(OutputList &ol)
{ {
//printf("writeHierarchicalIndex: %d classes\n",hierarchyClasses);
if (hierarchyClasses==0) return; if (hierarchyClasses==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
......
...@@ -694,7 +694,18 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, ...@@ -694,7 +694,18 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
} }
if (!onlyText) // write link if (!onlyText) // write link
{ {
ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n); if (mtype==EnumValue && getGroupDef()==0 && // enum value is not grouped
getEnumScope() && getEnumScope()->getGroupDef()) // but its container is
{
GroupDef *enumValGroup = getEnumScope()->getGroupDef();
ol.writeObjectLink(enumValGroup->getReference(),
enumValGroup->getOutputFileBase(),
anchor(),n);
}
else
{
ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
}
} }
else // write only text else // write only text
{ {
...@@ -1029,6 +1040,10 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1029,6 +1040,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
} }
} }
} }
else if (ltype=="@") // rename type from enum values
{
ltype="";
}
else else
{ {
if (isObjCMethod()) if (isObjCMethod())
...@@ -1291,7 +1306,8 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const ...@@ -1291,7 +1306,8 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
const char *scName, const char *scName,
Definition *container, Definition *container,
bool inGroup bool inGroup,
bool showEnumValues
) )
{ {
// if this member is in a group find the real scope name. // if this member is in a group find the real scope name.
...@@ -1301,7 +1317,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1301,7 +1317,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n", //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup); // name().data(),hasDocs,container->definitionType(),inGroup);
if ( !hasDocs ) return; if ( !hasDocs ) return;
if (isEnumValue()) return; if (isEnumValue() && !showEnumValues) return;
QCString scopeName = scName; QCString scopeName = scName;
QCString memAnchor = anchor(); QCString memAnchor = anchor();
...@@ -1357,6 +1373,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1357,6 +1373,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ldef.prepend("enum "); ldef.prepend("enum ");
} }
} }
else if (isEnumValue())
{
if (ldef.at(0)=='@')
{
ldef=ldef.mid(2);
}
}
int i=0,l; int i=0,l;
static QRegExp r("@[0-9]+"); static QRegExp r("@[0-9]+");
......
...@@ -194,7 +194,7 @@ class MemberDef : public Definition ...@@ -194,7 +194,7 @@ class MemberDef : public Definition
bool inGroup); bool inGroup);
void writeDocumentation(MemberList *ml,OutputList &ol, void writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName,Definition *container, const char *scopeName,Definition *container,
bool inGroup); bool inGroup,bool showEnumValues=FALSE);
void warnIfUndocumented(); void warnIfUndocumented();
// relation to other members // relation to other members
......
...@@ -50,7 +50,7 @@ int MemberList::compareItems(GCI item1, GCI item2) ...@@ -50,7 +50,7 @@ int MemberList::compareItems(GCI item1, GCI item2)
/*! Count the number of members in this list that are visible in /*! Count the number of members in this list that are visible in
* the declaration part of a compound's documentation page. * the declaration part of a compound's documentation page.
*/ */
void MemberList::countDecMembers() void MemberList::countDecMembers(bool countEnumValues)
{ {
if (m_numDecMembers!=-1) return; if (m_numDecMembers!=-1) return;
...@@ -77,7 +77,8 @@ void MemberList::countDecMembers() ...@@ -77,7 +77,8 @@ void MemberList::countDecMembers()
m_funcCnt++,m_numDecMembers++; m_funcCnt++,m_numDecMembers++;
break; break;
case MemberDef::Enumeration: m_enumCnt++,m_numDecMembers++; break; case MemberDef::Enumeration: m_enumCnt++,m_numDecMembers++; break;
case MemberDef::EnumValue: //m_enumValCnt++,m_numDecMembers++; case MemberDef::EnumValue: if (countEnumValues)
m_enumValCnt++,m_numDecMembers++;
break; break;
case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break; case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break;
case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break; case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break;
...@@ -117,7 +118,7 @@ void MemberList::countDecMembers() ...@@ -117,7 +118,7 @@ void MemberList::countDecMembers()
//printf("MemberList::countDecMembers()=%d\n",m_numDecMembers); //printf("MemberList::countDecMembers()=%d\n",m_numDecMembers);
} }
void MemberList::countDocMembers() void MemberList::countDocMembers(bool countEnumValues)
{ {
if (m_numDocMembers!=-1) return; // used cached value if (m_numDocMembers!=-1) return; // used cached value
m_numDocMembers=0; m_numDocMembers=0;
...@@ -128,7 +129,8 @@ void MemberList::countDocMembers() ...@@ -128,7 +129,8 @@ void MemberList::countDocMembers()
if (md->isDetailedSectionVisible(m_inGroup,m_inFile)) if (md->isDetailedSectionVisible(m_inGroup,m_inFile))
{ {
// do not count enum values, since they do not produce entries of their own // do not count enum values, since they do not produce entries of their own
if (md->memberType()!=MemberDef::EnumValue) m_numDocMembers++; if (countEnumValues || md->memberType()!=MemberDef::EnumValue)
m_numDocMembers++;
} }
} }
if (memberGroupList) if (memberGroupList)
...@@ -181,9 +183,10 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -181,9 +183,10 @@ void MemberList::writePlainDeclarations(OutputList &ol,
MemberListIterator mli(*this); MemberListIterator mli(*this);
for ( ; (md=mli.current()); ++mli ) for ( ; (md=mli.current()); ++mli )
{ {
//printf(">>> Member `%s' type=%d visible=%d\n",
// md->name().data(),md->memberType(),md->isBriefSectionVisible());
if (md->isBriefSectionVisible()) if (md->isBriefSectionVisible())
{ {
//printf(">>> Member `%s' type=%d\n",md->name().data(),md->memberType());
switch(md->memberType()) switch(md->memberType())
{ {
case MemberDef::Define: // fall through case MemberDef::Define: // fall through
...@@ -264,6 +267,10 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -264,6 +267,10 @@ void MemberList::writePlainDeclarations(OutputList &ol,
break; break;
} }
case MemberDef::EnumValue: case MemberDef::EnumValue:
{
if (first) ol.startMemberList(),first=FALSE;
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
}
break; break;
} }
} }
...@@ -298,11 +305,11 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -298,11 +305,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,
void MemberList::writeDeclarations(OutputList &ol, void MemberList::writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle const char *title,const char *subtitle, bool showEnumValues
/*, bool inGroup,bool countSubGroups*/) /*, bool inGroup,bool countSubGroups*/)
{ {
//printf("----- writeDeclaration() ----\n"); //printf("----- writeDeclaration() ----\n");
countDecMembers(); // count member not in group countDecMembers(showEnumValues); // count member not in group
if (numDecMembers()==0) return; if (numDecMembers()==0) return;
//printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",title,subtitle,numDecMembers()); //printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",title,subtitle,numDecMembers());
if (title) if (title)
...@@ -355,11 +362,11 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -355,11 +362,11 @@ void MemberList::writeDeclarations(OutputList &ol,
void MemberList::writeDocumentation(OutputList &ol, void MemberList::writeDocumentation(OutputList &ol,
const char *scopeName, Definition *container, const char *scopeName, Definition *container,
const char *title) const char *title,bool showEnumValues)
{ {
//printf("MemberList::writeDocumentation()\n"); //printf("MemberList::writeDocumentation()\n");
countDocMembers(); countDocMembers(showEnumValues);
if (numDocMembers()==0) return; if (numDocMembers()==0) return;
if (title) if (title)
...@@ -375,7 +382,7 @@ void MemberList::writeDocumentation(OutputList &ol, ...@@ -375,7 +382,7 @@ void MemberList::writeDocumentation(OutputList &ol,
MemberDef *md; MemberDef *md;
for ( ; (md=mli.current()) ; ++mli) for ( ; (md=mli.current()) ; ++mli)
{ {
md->writeDocumentation(this,ol,scopeName,container,m_inGroup); md->writeDocumentation(this,ol,scopeName,container,m_inGroup,showEnumValues);
} }
if (memberGroupList) if (memberGroupList)
{ {
......
...@@ -45,15 +45,15 @@ class MemberList : public QList<MemberDef> ...@@ -45,15 +45,15 @@ class MemberList : public QList<MemberDef>
int friendCount() const { ASSERT(m_numDecMembers!=-1); return m_friendCnt; } int friendCount() const { ASSERT(m_numDecMembers!=-1); return m_friendCnt; }
int numDecMembers() const { ASSERT(m_numDecMembers!=-1); return m_numDecMembers; } int numDecMembers() const { ASSERT(m_numDecMembers!=-1); return m_numDecMembers; }
int numDocMembers() const { ASSERT(m_numDocMembers!=-1); return m_numDocMembers; } int numDocMembers() const { ASSERT(m_numDocMembers!=-1); return m_numDocMembers; }
void countDecMembers(/*bool inGroup,bool countSubGroups,bool sectionPerType*/); void countDecMembers(bool countEnumValues=FALSE);
void countDocMembers(); void countDocMembers(bool countEnumValues=FALSE);
void writePlainDeclarations(OutputList &ol, void writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
void writeDeclarations(OutputList &ol, void writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle); const char *title,const char *subtitle,bool showEnumValues=FALSE);
void writeDocumentation(OutputList &ol,const char *scopeName, void writeDocumentation(OutputList &ol,const char *scopeName,
Definition *container,const char *title); Definition *container,const char *title,bool showEnumValues=FALSE);
void writeDocumentationPage(OutputList &ol, void writeDocumentationPage(OutputList &ol,
const char *scopeName, Definition *container); const char *scopeName, Definition *container);
void addMemberGroup(MemberGroup *mg); void addMemberGroup(MemberGroup *mg);
......
...@@ -1872,7 +1872,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1872,7 +1872,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
BEGIN(g_condCtx); BEGIN(g_condCtx);
} }
<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t]+\n | <SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*\n |
<CondLine>. { <CondLine>. {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
startCondSection(" "); startCondSection(" ");
...@@ -1943,7 +1943,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1943,7 +1943,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCPPComment>"//" { <SkipCPPComment>"//" {
outputChar('/');outputChar('/'); outputChar('/');outputChar('/');
} }
<SkipCPPComment>[^\x06\n]+ { <SkipCPPComment>[^\x06\@\\\n]+ {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
} }
<SkipCPPComment>. { <SkipCPPComment>. {
......
...@@ -1431,7 +1431,7 @@ void parsePythonCode(CodeOutputInterface &od,const char *className, ...@@ -1431,7 +1431,7 @@ void parsePythonCode(CodeOutputInterface &od,const char *className,
extern "C" { // some bogus code to keep the compiler happy extern "C" { // some bogus code to keep the compiler happy
void pycodeYYdummy() { yy_flex_realloc(0,0); } void pycodeYYdummy() { yy_flex_realloc(0,0); }
} }
#else #elif YY_FLEX_SUBMINOR_VERSION<33
#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)." #error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
#endif #endif
...@@ -308,6 +308,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -308,6 +308,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
brief ? current->briefLine : current->docLine, // line of block start brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief, docBlockInBody ? FALSE : brief,
docBlockJavaStyle, // javadoc style docBlockJavaStyle, // javadoc style
docBlockInBody,
protection, protection,
position, position,
needsEntry) needsEntry)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2006 by Dimitri van Heesch. * Copyright (C) 1997-2005 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -2569,7 +2569,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2569,7 +2569,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
// see if the compound does not have a name or is inside another // see if the compound does not have a name or is inside another
// annonymous compound. If so we insert a // annonymous compound. If so we insert a
// special `annonymous' variable. // special `annonymous' variable.
Entry *p=current_root; //Entry *p=current_root;
Entry *p=current;
while (p) while (p)
{ {
// only look for class scopes, not namespace scopes // only look for class scopes, not namespace scopes
...@@ -2586,7 +2587,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2586,7 +2587,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
break; break;
} }
} }
p=p->parent; //p=p->parent;
if (p==current) p=current_root; else p=p->parent;
} }
} }
//printf("msName=%s current->name=%s\n",msName.data(),current->name.data()); //printf("msName=%s current->name=%s\n",msName.data(),current->name.data());
...@@ -3416,6 +3418,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3416,6 +3418,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
else else
{ {
#if 0
if (!Config_getBool("HIDE_IN_BODY_DOCS") && if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
!current->doc.isEmpty()) !current->doc.isEmpty())
{ {
...@@ -3430,6 +3433,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3430,6 +3433,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
previous->inbodyDocs += current->doc; previous->inbodyDocs += current->doc;
current->doc.resize(0); current->doc.resize(0);
} }
#endif
if (current->sli) // copy special list items if (current->sli) // copy special list items
{ {
QListIterator<ListItemInfo> li(*current->sli); QListIterator<ListItemInfo> li(*current->sli);
...@@ -3880,7 +3884,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3880,7 +3884,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
<Specialization>{BN}+ { lineCount(); *specName +=' '; } <Specialization>{BN}+ { lineCount(); *specName +=' '; }
<Specialization>"<<" { *specName += yytext; } <Specialization>"<<" { *specName += yytext; }
<Specialization>">>" { *specName += yytext; } <Specialization>">>" {
if (insideCS) // for C# >> ends a nested template
{
REJECT;
}
else // for C++ >> is a bitshift operator and > > would end a nested template
{
*specName += yytext;
}
}
<Specialization>"typename"{BN}+ { lineCount(); } <Specialization>"typename"{BN}+ { lineCount(); }
<Specialization>"(" { *specName += *yytext; roundCount++; } <Specialization>"(" { *specName += *yytext; roundCount++; }
<Specialization>")" { *specName += *yytext; roundCount--; } <Specialization>")" { *specName += *yytext; roundCount--; }
...@@ -3977,7 +3990,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3977,7 +3990,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
insideCode=FALSE; insideCode=FALSE;
current->program += yytext ; current->program += yytext ;
} }
<Comment>[^ \.\n\/\*]+ { current->program += yytext ; } <Comment>[^ \.\t\r\n\/\*]+ { current->program += yytext ; }
<Comment>"*/" { current->program += yytext ; <Comment>"*/" { current->program += yytext ;
if (!insideCode) BEGIN( lastContext ) ; if (!insideCode) BEGIN( lastContext ) ;
} }
...@@ -4405,6 +4418,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -4405,6 +4418,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
int position=0; int position=0;
bool needsEntry=FALSE; bool needsEntry=FALSE;
if (docBlockInBody && hideInBodyDocs) return; if (docBlockInBody && hideInBodyDocs) return;
#if 0
if (docBlockInBody) if (docBlockInBody)
{ {
if (previous==0) if (previous==0)
...@@ -4417,6 +4431,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -4417,6 +4431,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
previous->doc=previous->doc.stripWhiteSpace()+"\n\n"; previous->doc=previous->doc.stripWhiteSpace()+"\n\n";
} }
} }
#endif
//printf("parseCommentBlock [%s]\n",doc.data()); //printf("parseCommentBlock [%s]\n",doc.data());
while (parseCommentBlock( while (parseCommentBlock(
g_thisParser, g_thisParser,
...@@ -4426,6 +4441,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -4426,6 +4441,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
brief ? current->briefLine : current->docLine, // line of block start brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief, docBlockInBody ? FALSE : brief,
docBlockInBody ? FALSE : docBlockJavaStyle, docBlockInBody ? FALSE : docBlockJavaStyle,
docBlockInBody,
protection, protection,
position, position,
needsEntry needsEntry
...@@ -4440,7 +4456,9 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -4440,7 +4456,9 @@ static void handleCommentBlock(const QCString &doc,bool brief)
newEntry(); newEntry();
} }
#if 0
exit: exit:
#endif
if (docBlockTerm) if (docBlockTerm)
{ {
unput(docBlockTerm); unput(docBlockTerm);
...@@ -4479,6 +4497,7 @@ static void handleParametersCommentBlocks() ...@@ -4479,6 +4497,7 @@ static void handleParametersCommentBlocks()
current->docLine, // line of block start current->docLine, // line of block start
FALSE, FALSE,
FALSE, FALSE,
FALSE,
protection, protection,
position, position,
needsEntry needsEntry
......
...@@ -135,7 +135,6 @@ class Translator ...@@ -135,7 +135,6 @@ 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 trFunctionDocumentation() = 0; virtual QCString trFunctionDocumentation() = 0;
virtual QCString trVariableDocumentation() = 0; virtual QCString trVariableDocumentation() = 0;
virtual QCString trCompounds() = 0; virtual QCString trCompounds() = 0;
...@@ -446,6 +445,7 @@ class Translator ...@@ -446,6 +445,7 @@ class Translator
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trCallerGraph() = 0; virtual QCString trCallerGraph() = 0;
virtual QCString trEnumerationValueDocumentation() = 0;
}; };
......
...@@ -51,6 +51,10 @@ class TranslatorAdapter_1_4_6 : public TranslatorAdapterBase ...@@ -51,6 +51,10 @@ class TranslatorAdapter_1_4_6 : public TranslatorAdapterBase
{ {
return english.trCallerGraph(); return english.trCallerGraph();
} }
virtual QCString trEnumerationValueDocumentation()
{
return english.trEnumerationValueDocumentation();
}
}; };
class TranslatorAdapter_1_4_1 : public TranslatorAdapter_1_4_6 class TranslatorAdapter_1_4_1 : public TranslatorAdapter_1_4_6
......
...@@ -469,7 +469,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_4_6 ...@@ -469,7 +469,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_4_6
* documentation blocks for defines * documentation blocks for defines
*/ */
virtual QCString trDefineDocumentation() virtual QCString trDefineDocumentation()
{ return "Deinições e macros"; } { return "Definições e macros"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes * of documentation blocks for function prototypes
......
...@@ -65,6 +65,9 @@ ...@@ -65,6 +65,9 @@
// 2004/09/14 - The new methods "since 1.3.9" implemented. // 2004/09/14 - The new methods "since 1.3.9" implemented.
// 2005/02/11 - The "never used" methods removed. // 2005/02/11 - The "never used" methods removed.
// 2005/03/08 - Update for "new since 1.4.1" (trOverloadText()) // 2005/03/08 - Update for "new since 1.4.1" (trOverloadText())
// 2006/05/10 - Update for "new since 1.4.6" -- trCallerGraph(),
// modified trCallGraph() to make the meaning unambiguous
// and clear in the Czech language.
// Todo // Todo
// ---- // ----
...@@ -1488,7 +1491,7 @@ class TranslatorCzech : public TranslatorAdapter_1_4_6 ...@@ -1488,7 +1491,7 @@ class TranslatorCzech : public TranslatorAdapter_1_4_6
/*! Put in front of the call graph for a function. */ /*! Put in front of the call graph for a function. */
virtual QCString trCallGraph() virtual QCString trCallGraph()
{ {
return decode("Graf volání pro tuto funkci:"); return decode("Tato funkce volá...");
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1620,6 +1623,17 @@ class TranslatorCzech : public TranslatorAdapter_1_4_6 ...@@ -1620,6 +1623,17 @@ class TranslatorCzech : public TranslatorAdapter_1_4_6
"která má usnadnit používání. Od výše uvedené metody se liší " "která má usnadnit používání. Od výše uvedené metody se liší "
"pouze jinak zadávanými argumenty."); "pouze jinak zadávanými argumenty.");
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.4.6
//////////////////////////////////////////////////////////////////////////
virtual QCString trCallerGraph()
{
return decode("Tuto funkci volají...");
}
}; };
#endif // TRANSLATOR_CZ_H #endif // TRANSLATOR_CZ_H
...@@ -501,12 +501,6 @@ class TranslatorEnglish : public Translator ...@@ -501,12 +501,6 @@ class TranslatorEnglish : public Translator
virtual QCString trEnumerationTypeDocumentation() virtual QCString trEnumerationTypeDocumentation()
{ return "Enumeration Type Documentation"; } { return "Enumeration Type Documentation"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Enumerator Documentation"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions * of documentation blocks for functions
*/ */
...@@ -1624,11 +1618,19 @@ class TranslatorEnglish : public Translator ...@@ -1624,11 +1618,19 @@ class TranslatorEnglish : public Translator
// new since 1.4.6 // new since 1.4.6
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! This is used to introduce a caller (or called-by) graph */
virtual QCString trCallerGraph() virtual QCString trCallerGraph()
{ {
return "Here is the caller graph for this function:"; return "Here is the caller graph for this function:";
} }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Enumerator Documentation"; }
}; };
#endif #endif
...@@ -20,12 +20,13 @@ ...@@ -20,12 +20,13 @@
* Some notes: * Some notes:
* - It's posible that some sentences haven't got meaning because * - It's posible that some sentences haven't got meaning because
* some words haven't got translate in spanish. * some words haven't got translate in spanish.
* Updated from 1.3.8 to 1.4.6 by Guillermo Ballester Valor (May-05-2006)
*/ */
#ifndef TRANSLATOR_ES_H #ifndef TRANSLATOR_ES_H
#define TRANSLATOR_ES_H #define TRANSLATOR_ES_H
class TranslatorSpanish : public TranslatorAdapter_1_3_8 class TranslatorSpanish : public TranslatorAdapter_1_4_6
{ {
public: public:
virtual QCString idLanguage() virtual QCString idLanguage()
...@@ -1376,6 +1377,76 @@ class TranslatorSpanish : public TranslatorAdapter_1_3_8 ...@@ -1376,6 +1377,76 @@ class TranslatorSpanish : public TranslatorAdapter_1_3_8
return "Coincidencias:"; return "Coincidencias:";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////
/*! This is used in HTML as the title of page with source code for file filename
*/
virtual QCString trSourceFile(QCString& filename)
{
return "Fichero Fuente " + filename;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Jerarquía de Directorio"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Documentación de Directorio"; }
/*! This is used as the title of the directory index and also in the
* Quick links of an HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Directorios"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "La jeraquía de este directorio está ordenada casi, "
"pero no completamente, de forma alfabética:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result="Referencia del Directorio "; result+=dirName; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
QCString result((first_capital ? "Directori" : "directori"));
if (singular) result+="o"; else result+="os";
return result;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a overloaded function.
*/
virtual QCString trOverloadText()
{
return "Esta es una función miembro sobrecargada que se "
"suministra por conveniencia. Difiere de la anterior "
"función solamente en los argumentos que acepta.";
}
}; };
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
* *
* Revision history * Revision history
* *
* 2006/05: translated new items used since version 1.4.6
* corrected typo in trPackageMembers method
* 2005/03: translated new items used since version 1.4.1 * 2005/03: translated new items used since version 1.4.1
* removed unused methods listed in Petr Prikryl February 28 translator report * removed unused methods listed in Petr Prikryl February 28 translator report
* 2004/09: translated new items used since version 1.3.9 * 2004/09: translated new items used since version 1.3.9
...@@ -1362,7 +1364,7 @@ class TranslatorItalian : public TranslatorAdapter_1_4_6 ...@@ -1362,7 +1364,7 @@ class TranslatorItalian : public TranslatorAdapter_1_4_6
*/ */
virtual QCString trPackageMembers() virtual QCString trPackageMembers()
{ {
return "Funczioni con visibilità di package"; return "Funzioni con visibilità di package";
} }
/*! Used as a heading for a list of static Java class functions with /*! Used as a heading for a list of static Java class functions with
* package scope. * package scope.
...@@ -1524,6 +1526,15 @@ class TranslatorItalian : public TranslatorAdapter_1_4_6 ...@@ -1524,6 +1526,15 @@ class TranslatorItalian : public TranslatorAdapter_1_4_6
"unicamente per gli argomenti passati."; "unicamente per gli argomenti passati.";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.4.6
//////////////////////////////////////////////////////////////////////////
virtual QCString trCallerGraph()
{
return "Questo è il grafo dei chiamanti di questa funzione:";
}
}; };
#endif #endif
...@@ -8,7 +8,7 @@ TEMPLATE = app ...@@ -8,7 +8,7 @@ TEMPLATE = app
CONFIG = qt warn_on release CONFIG = qt warn_on release
TMAKE_CC = cc TMAKE_CC = cc
TMAKE_CFLAGS = -pipe -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc TMAKE_CFLAGS = -pipe
TMAKE_CFLAGS_WARN_ON = -Wall -W TMAKE_CFLAGS_WARN_ON = -Wall -W
TMAKE_CFLAGS_WARN_OFF = TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O2 TMAKE_CFLAGS_RELEASE = -O2
...@@ -36,7 +36,7 @@ TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib ...@@ -36,7 +36,7 @@ TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
TMAKE_LINK = c++ TMAKE_LINK = c++
TMAKE_LINK_SHLIB = c++ TMAKE_LINK_SHLIB = c++
TMAKE_LFLAGS = -Wl,-search_paths_first -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc TMAKE_LFLAGS = -Wl,-search_paths_first
TMAKE_LFLAGS_RELEASE = TMAKE_LFLAGS_RELEASE =
TMAKE_LFLAGS_DEBUG = TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -shared TMAKE_LFLAGS_SHLIB = -shared
......
#! Use the common Unix template
#$ IncludeTemplate("../unix/app.t");
#! Use the common Unix template
#$ IncludeTemplate("../unix/lib.t");
#! Use the common Unix template
#$ IncludeTemplate("../unix/subdirs.t");
#
#
#
# tmake configuration for macosx-c++
#
TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = cc
TMAKE_CFLAGS = -pipe -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
TMAKE_CFLAGS_WARN_ON = -Wall -W
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O2
TMAKE_CFLAGS_DEBUG = -g
TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
TMAKE_CXX = c++
TMAKE_CXXFLAGS = $$TMAKE_CFLAGS -D__FreeBSD__=6
TMAKE_CXXFLAGS_WARN_ON = $$TMAKE_CFLAGS_WARN_ON
TMAKE_CXXFLAGS_WARN_OFF = $$TMAKE_CFLAGS_WARN_OFF
TMAKE_CXXFLAGS_RELEASE = $$TMAKE_CFLAGS_RELEASE
TMAKE_CXXFLAGS_DEBUG = $$TMAKE_CFLAGS_DEBUG
TMAKE_CXXFLAGS_SHLIB = $$TMAKE_CFLAGS_SHLIB
TMAKE_CXXFLAGS_YACC = $$TMAKE_CFLAGS_YACC
TMAKE_INCDIR =
TMAKE_LIBDIR =
TMAKE_INCDIR_X11 =
TMAKE_LIBDIR_X11 =
TMAKE_INCDIR_QT = $(QTDIR)/include
TMAKE_LIBDIR_QT = $(QTDIR)/lib
TMAKE_INCDIR_OPENGL = /usr/X11R6/include
TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
TMAKE_LINK = c++
TMAKE_LINK_SHLIB = c++
TMAKE_LFLAGS = -Wl,-search_paths_first -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
TMAKE_LFLAGS_RELEASE =
TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -shared
TMAKE_LFLAGS_SONAME = -dynamiclib -install_name
TMAKE_LIBS =
TMAKE_LIBS_X11 =
TMAKE_LIBS_QT = -lqt
TMAKE_LIBS_QT_MT = -lqt-mt
TMAKE_LIBS_QT_OPENGL = -lqgl
TMAKE_LIBS_OPENGL = -lMesaGL -lMesaGLU -lXmu
TMAKE_MOC = moc
TMAKE_AR = ar cq
TMAKE_RANLIB = ranlib
TMAKE_TAR = tar -cf
TMAKE_GZIP = gzip -9f
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