From 8e4a092e4d51347f8f6c61d87154ee74edb13d20 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 2 Sep 2007 19:15:32 +0000 Subject: Release-1.5.3-20070902 --- INSTALL | 4 +-- README | 4 +-- addon/doxywizard/doxywizard.pro.in | 3 +++ configure | 2 +- doc/install.doc | 2 +- src/commentscan.l | 9 +++++-- src/definition.cpp | 9 ++++--- src/docparser.cpp | 48 +++++++++++++++++++++++++++++++---- src/doctokenizer.h | 1 + src/doctokenizer.l | 3 +++ src/dot.cpp | 1 + src/doxygen.cpp | 4 +-- src/htmlhelp.cpp | 4 +++ src/portable.cpp | 8 ++++-- src/scanner.l | 51 ++++++++++++++++++++++++++------------ src/util.cpp | 9 ++++++- 16 files changed, 124 insertions(+), 38 deletions(-) diff --git a/INSTALL b/INSTALL index 076f508..a193309 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ -DOXYGEN Version 1.5.3-20070815 +DOXYGEN Version 1.5.3-20070902 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (15 August 2007) +Dimitri van Heesch (02 September 2007) diff --git a/README b/README index b63eb0f..80b8a46 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.5.3_20070815 +DOXYGEN Version 1.5.3_20070902 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) (15 August 2007) +Dimitri van Heesch (dimitri@stack.nl) (02 September 2007) diff --git a/addon/doxywizard/doxywizard.pro.in b/addon/doxywizard/doxywizard.pro.in index ebecae5..6f49eae 100644 --- a/addon/doxywizard/doxywizard.pro.in +++ b/addon/doxywizard/doxywizard.pro.in @@ -17,6 +17,9 @@ TEMPLATE = doxywizard.t # executable to generate TARGET = ../../bin/doxywizard +# we do not use the debug features in this copy of portable.cpp +DEFINES = NODEBUG + # configure options CONFIG = qt warn_on $extraopts diff --git a/configure b/configure index 5d6029e..4f6d013 100755 --- a/configure +++ b/configure @@ -20,7 +20,7 @@ doxygen_version_minor=5 doxygen_version_revision=3 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. -doxygen_version_mmn=20070815 +doxygen_version_mmn=20070902 bin_dirs=`echo $PATH | sed -e "s/:/ /g"` diff --git a/doc/install.doc b/doc/install.doc index b8cb8ff..e29076d 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -376,7 +376,7 @@ Before you can compile doxygen you need to download and install the C++ compiler Visual Studio. Since Microsoft apparently wants to lure everyone into using their .NET stuff, they made things somewhat difficult when you use the Express version. You need to - + do some manual steps in order to setup a proper working environment for building native win32 applications such as Doxygen. diff --git a/src/commentscan.l b/src/commentscan.l index a91dc97..5db2db5 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -568,7 +568,9 @@ static QCString addFormula() formLabel.sprintf("\\form#%d",f->getId()); } int i; - for (i=0;ibriefLine = yyLineNr; } } - if (current->brief.isEmpty()) + if (current->brief.stripWhiteSpace().isEmpty()) // we only want one brief + // description even if multiple + // are given... { pOutputString = ¤t->brief; } @@ -794,6 +798,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?) SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ +RCSTAG "$"{ID}":"[^\n$]+"$" %option noyywrap diff --git a/src/definition.cpp b/src/definition.cpp index ba0bcd2..7647a68 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -849,14 +849,15 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) bool Definition::hasDocumentation() const { static bool extractAll = Config_getBool("EXTRACT_ALL"); - static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); + //static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); makeResident(); bool hasDocs = (m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs (m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description - extractAll || // extract everything - (sourceBrowser && m_impl->body && - m_impl->body->startLine!=-1 && m_impl->body->fileDef); // link to definition + extractAll //|| // extract everything + // (sourceBrowser && m_impl->body && + // m_impl->body->startLine!=-1 && m_impl->body->fileDef) + ; // link to definition return hasDocs; } diff --git a/src/docparser.cpp b/src/docparser.cpp index dff6940..1ada917 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -3798,9 +3798,10 @@ int DocSimpleSect::parseRcs() m_title = new DocTitle(this); m_title->parseFromString(g_token->name); - docParserPushContext(); - internalValidatingParseDoc(this,m_children,g_token->text); - docParserPopContext(); + QString text = g_token->text; + docParserPushContext(); // this will create a new g_token + internalValidatingParseDoc(this,m_children,text); + docParserPopContext(); // this will restore the old g_token DBG(("DocSimpleSect::parseRcs()\n")); DocNode *n=g_nodeStack.pop(); @@ -5455,7 +5456,16 @@ reparsetoken: // so a new simple section will be started at this level. // This is the same as unputting the last read token and continuing. g_token->name = g_token->simpleSectName; - tok = TK_COMMAND; + if (g_token->name.left(4)=="rcs:") // RCS section + { + g_token->name = g_token->name.mid(4); + g_token->text = g_token->simpleSectText; + tok = TK_RCSTAG; + } + else // other section + { + tok = TK_COMMAND; + } DBG(("reparsing command %s\n",g_token->name.data())); goto reparsetoken; } @@ -5545,7 +5555,16 @@ reparsetoken: // so a new simple section will be started at this level. // This is the same as unputting the last read token and continuing. g_token->name = g_token->simpleSectName; - tok = TK_COMMAND; + if (g_token->name.left(4)=="rcs:") // RCS section + { + g_token->name = g_token->name.mid(4); + g_token->text = g_token->simpleSectText; + tok = TK_RCSTAG; + } + else // other section + { + tok = TK_COMMAND; + } DBG(("reparsing command %s\n",g_token->name.data())); goto reparsetoken; } @@ -5608,6 +5627,25 @@ reparsetoken: goto endparagraph; case TK_RCSTAG: { + DocNode *n=parent(); + while (n && + n->kind()!=DocNode::Kind_SimpleSect && + n->kind()!=DocNode::Kind_ParamSect + ) + { + n=n->parent(); + } + if (n) // already in a simple section + { + // simple section cannot start in this paragraph, need + // to unwind the stack and remember the command. + g_token->simpleSectName = "rcs:"+g_token->name; + g_token->simpleSectText = g_token->text; + retval=RetVal_SimpleSec; + goto endparagraph; + } + + // see if we are in a simple list DocSimpleSect *ss=new DocSimpleSect(this,DocSimpleSect::Rcs); m_children.append(ss); ss->parseRcs(); diff --git a/src/doctokenizer.h b/src/doctokenizer.h index 7e6e521..444516f 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -83,6 +83,7 @@ struct TokenInfo // simple section QString simpleSectName; + QString simpleSectText; // verbatim fragment QString verb; diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 901773e..6e8e48f 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -415,6 +415,9 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}? g_token->name = "inheritdoc"; return TK_COMMAND; } +"\\_fakenl" { // artificial new line + yylineno++; + } {SPCMD3} { g_token->name = "form"; bool ok; diff --git a/src/dot.cpp b/src/dot.cpp index d8d4082..86a3aae 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -1473,6 +1473,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode, } } } + if (Config_getBool("UML_LOOK")) return FALSE; // UML graph are always top to bottom int maxWidth=0; int maxHeight=(int)QMAX(childTreeWidth.size(),parentTreeWidth.size()); uint i; diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 3fba678..756d70f 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -2091,7 +2091,7 @@ static MemberDef *addVariableToFile( } else { - if (!root->type.isEmpty()) + if (!root->type.isEmpty() && !root->name.isEmpty()) { if (name.at(0)=='@') // dummy variable representing annonymous union def=root->type; @@ -2625,7 +2625,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, // strip redundant template specifier for constructors if ((fd==0 || getLanguageFromFileName(fd->name())==SrcLangExt_Cpp) && - (i=name.find('<')!=-1) && name.find('>')!=-1) + name.left(9)!="operator " && (i=name.find('<'))!=-1 && name.find('>')!=-1) { name=name.left(i); } diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index d40e50a..58e79f2 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -480,6 +480,8 @@ void HtmlHelp::finalize() { // end the contents file cts << "\n"; + cts << "\n"; + cts << "\n"; cts.unsetDevice(); cf->close(); delete cf; @@ -488,6 +490,8 @@ void HtmlHelp::finalize() // end the index file kts << "\n"; + kts << "\n"; + kts << "\n"; kts.unsetDevice(); kf->close(); delete kf; diff --git a/src/portable.cpp b/src/portable.cpp index dc276d1..174fa20 100644 --- a/src/portable.cpp +++ b/src/portable.cpp @@ -22,7 +22,9 @@ extern char **environ; #endif #include "portable.h" -//#include "debug.h" +#ifndef NODEBUG +#include "debug.h" +#endif //#include "doxygen.h" static double sysElapsedTime; @@ -43,7 +45,9 @@ int portable_system(const char *command,const char *args,bool commandHasConsole } fullCmd += " "; fullCmd += args; - //Debug::print(Debug::ExtCmd,0,"Executing external command `%s`\n",fullCmd.data()); +#ifndef NODEBUG + Debug::print(Debug::ExtCmd,0,"Executing external command `%s`\n",fullCmd.data()); +#endif #if !defined(_WIN32) || defined(__CYGWIN__) commandHasConsole=commandHasConsole; diff --git a/src/scanner.l b/src/scanner.l index 4fd024a..3396579 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -890,7 +890,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current->argList->clear(); lineCount() ; } -{B}*"event"{BN}* { +{B}*"event"{BN}+ { if (insideCli) { // C++/CLI event @@ -905,7 +905,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) REJECT; } } -{B}*"property"{BN}* { +{B}*"property"{BN}+ { if (insideCli) { // C++/CLI property @@ -942,7 +942,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) addType( current ); current->type += yytext; } -{B}*"property"{BN}* { +{B}*"property"{BN}+ { if (!current->type.isEmpty()) { REJECT; @@ -2751,15 +2751,18 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ";" { if (insideJava) // last enum field in Java class { - current->fileName = yyFileName; - current->startLine = yyLineNr; - current->type = "@"; // enum marker - current->args = current->args.simplifyWhiteSpace(); - current->name = current->name.stripWhiteSpace(); - current->section = Entry::VARIABLE_SEC; - current_root->addSubEntry(current); - current = new Entry ; - initEntry(); + if (!current->name.isEmpty()) + { + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->type = "@"; // enum marker + current->args = current->args.simplifyWhiteSpace(); + current->name = current->name.stripWhiteSpace(); + current->section = Entry::VARIABLE_SEC; + current_root->addSubEntry(current); + current = new Entry ; + initEntry(); + } // TODO: skip until the end of the scope BEGIN( SkipRemainder ); @@ -4001,7 +4004,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) delete current->sli; current->sli = 0; } - previous->endBodyLine=yyLineNr; + if (previous) previous->endBodyLine=yyLineNr; BEGIN( lastCurlyContext ) ; } } @@ -4209,6 +4212,15 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } BEGIN( FindMembers ); } +{SCOPENAME}/"(" { + current->name = yytext ; + lineCount(); + if (current->spec & Entry::Protocol) + { + current->name += "-p"; + } + BEGIN( ClassVar ); + } {SCOPENAME} { current->name = yytext ; lineCount(); @@ -4380,9 +4392,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } ")" { current->name+=')'; - // category has no variables so push back an empty body - unput('}'); - unput('{'); + if ((current->section & Entry::Protocol) || + current->section == Entry::OBJCIMPL_SEC) + { + unput('{'); // fake start of body + } + else // category has no variables so push back an empty body + { + unput('}'); + unput('{'); + } BEGIN( ClassVar ); } ":" { diff --git a/src/util.cpp b/src/util.cpp index 0a271c4..7338a9e 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1641,7 +1641,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, } //printf("floatingIndex=%d strlen=%d autoBreak=%d\n",floatingIndex,strLen,autoBreak); - if (strLen>25 && floatingIndex>20 && autoBreak) // try to insert a split point + if (strLen>35 && floatingIndex>30 && autoBreak) // try to insert a split point { QCString splitText = txtStr.mid(skipIndex,newIndex-skipIndex); int splitLength = splitText.length(); @@ -4588,6 +4588,13 @@ QCString escapeCharsInString(const char *name,bool allowDots) case ' ': result+="_01"; break; case '{': result+="_02"; break; case '}': result+="_03"; break; + case '?': result+="_04"; break; + case '^': result+="_05"; break; + case '%': result+="_06"; break; + case '(': result+="_07"; break; + case ')': result+="_08"; break; + case '+': result+="_09"; break; + case '=': result+="_0A"; break; default: if (caseSenseNames || !isupper(c)) { -- cgit v0.12