Commit 6bedd287 authored by dimitri's avatar dimitri

Release-1.5.3-20070902

parent 115c6c02
DOXYGEN Version 1.5.3-20070815 DOXYGEN Version 1.5.3-20070902
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 (15 August 2007) Dimitri van Heesch (02 September 2007)
DOXYGEN Version 1.5.3_20070815 DOXYGEN Version 1.5.3_20070902
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) (15 August 2007) Dimitri van Heesch (dimitri@stack.nl) (02 September 2007)
...@@ -17,6 +17,9 @@ TEMPLATE = doxywizard.t ...@@ -17,6 +17,9 @@ TEMPLATE = doxywizard.t
# executable to generate # executable to generate
TARGET = ../../bin/doxywizard TARGET = ../../bin/doxywizard
# we do not use the debug features in this copy of portable.cpp
DEFINES = NODEBUG
# configure options # configure options
CONFIG = qt warn_on $extraopts CONFIG = qt warn_on $extraopts
......
...@@ -20,7 +20,7 @@ doxygen_version_minor=5 ...@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=3 doxygen_version_revision=3
#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=20070815 doxygen_version_mmn=20070902
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -376,7 +376,7 @@ Before you can compile doxygen you need to download and install the C++ compiler ...@@ -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 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. .NET stuff, they made things somewhat difficult when you use the Express version.
You need to You need to
<a href="http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/"> <a href="http://msdn2.microsoft.com/en-gb/express/aa700755.aspx">
do some manual steps</a> in order to setup a proper working environment for building do some manual steps</a> in order to setup a proper working environment for building
native win32 applications such as Doxygen. native win32 applications such as Doxygen.
......
...@@ -568,7 +568,9 @@ static QCString addFormula() ...@@ -568,7 +568,9 @@ static QCString addFormula()
formLabel.sprintf("\\form#%d",f->getId()); formLabel.sprintf("\\form#%d",f->getId());
} }
int i; int i;
for (i=0;i<formulaNewLines;i++) formLabel+='\n'; for (i=0;i<formulaNewLines;i++) formLabel+="\\_fakenl"; // add fake newlines to
// keep the warnings
// correctly aligned.
return formLabel; return formLabel;
} }
...@@ -690,7 +692,9 @@ static inline void setOutput(OutputContext ctx) ...@@ -690,7 +692,9 @@ static inline void setOutput(OutputContext ctx)
current->briefLine = yyLineNr; current->briefLine = yyLineNr;
} }
} }
if (current->brief.isEmpty()) if (current->brief.stripWhiteSpace().isEmpty()) // we only want one brief
// description even if multiple
// are given...
{ {
pOutputString = &current->brief; pOutputString = &current->brief;
} }
...@@ -794,6 +798,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -794,6 +798,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?) SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
SCOPENAME "$"?(({ID}?{BN}*"::"{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\-]+ 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 %option noyywrap
......
...@@ -849,14 +849,15 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) ...@@ -849,14 +849,15 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
bool Definition::hasDocumentation() const bool Definition::hasDocumentation() const
{ {
static bool extractAll = Config_getBool("EXTRACT_ALL"); static bool extractAll = Config_getBool("EXTRACT_ALL");
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); //static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
makeResident(); makeResident();
bool hasDocs = bool hasDocs =
(m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs (m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs
(m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description (m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description
extractAll || // extract everything extractAll //|| // extract everything
(sourceBrowser && m_impl->body && // (sourceBrowser && m_impl->body &&
m_impl->body->startLine!=-1 && m_impl->body->fileDef); // link to definition // m_impl->body->startLine!=-1 && m_impl->body->fileDef)
; // link to definition
return hasDocs; return hasDocs;
} }
......
...@@ -3798,9 +3798,10 @@ int DocSimpleSect::parseRcs() ...@@ -3798,9 +3798,10 @@ int DocSimpleSect::parseRcs()
m_title = new DocTitle(this); m_title = new DocTitle(this);
m_title->parseFromString(g_token->name); m_title->parseFromString(g_token->name);
docParserPushContext(); QString text = g_token->text;
internalValidatingParseDoc(this,m_children,g_token->text); docParserPushContext(); // this will create a new g_token
docParserPopContext(); internalValidatingParseDoc(this,m_children,text);
docParserPopContext(); // this will restore the old g_token
DBG(("DocSimpleSect::parseRcs()\n")); DBG(("DocSimpleSect::parseRcs()\n"));
DocNode *n=g_nodeStack.pop(); DocNode *n=g_nodeStack.pop();
...@@ -5455,7 +5456,16 @@ reparsetoken: ...@@ -5455,7 +5456,16 @@ reparsetoken:
// so a new simple section will be started at this level. // so a new simple section will be started at this level.
// This is the same as unputting the last read token and continuing. // This is the same as unputting the last read token and continuing.
g_token->name = g_token->simpleSectName; 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())); DBG(("reparsing command %s\n",g_token->name.data()));
goto reparsetoken; goto reparsetoken;
} }
...@@ -5545,7 +5555,16 @@ reparsetoken: ...@@ -5545,7 +5555,16 @@ reparsetoken:
// so a new simple section will be started at this level. // so a new simple section will be started at this level.
// This is the same as unputting the last read token and continuing. // This is the same as unputting the last read token and continuing.
g_token->name = g_token->simpleSectName; 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())); DBG(("reparsing command %s\n",g_token->name.data()));
goto reparsetoken; goto reparsetoken;
} }
...@@ -5608,6 +5627,25 @@ reparsetoken: ...@@ -5608,6 +5627,25 @@ reparsetoken:
goto endparagraph; goto endparagraph;
case TK_RCSTAG: 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); DocSimpleSect *ss=new DocSimpleSect(this,DocSimpleSect::Rcs);
m_children.append(ss); m_children.append(ss);
ss->parseRcs(); ss->parseRcs();
......
...@@ -83,6 +83,7 @@ struct TokenInfo ...@@ -83,6 +83,7 @@ struct TokenInfo
// simple section // simple section
QString simpleSectName; QString simpleSectName;
QString simpleSectText;
// verbatim fragment // verbatim fragment
QString verb; QString verb;
......
...@@ -415,6 +415,9 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}? ...@@ -415,6 +415,9 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}?
g_token->name = "inheritdoc"; g_token->name = "inheritdoc";
return TK_COMMAND; return TK_COMMAND;
} }
<St_Para>"\\_fakenl" { // artificial new line
yylineno++;
}
<St_Para>{SPCMD3} { <St_Para>{SPCMD3} {
g_token->name = "form"; g_token->name = "form";
bool ok; bool ok;
......
...@@ -1473,6 +1473,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode, ...@@ -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 maxWidth=0;
int maxHeight=(int)QMAX(childTreeWidth.size(),parentTreeWidth.size()); int maxHeight=(int)QMAX(childTreeWidth.size(),parentTreeWidth.size());
uint i; uint i;
......
...@@ -2091,7 +2091,7 @@ static MemberDef *addVariableToFile( ...@@ -2091,7 +2091,7 @@ static MemberDef *addVariableToFile(
} }
else else
{ {
if (!root->type.isEmpty()) if (!root->type.isEmpty() && !root->name.isEmpty())
{ {
if (name.at(0)=='@') // dummy variable representing annonymous union if (name.at(0)=='@') // dummy variable representing annonymous union
def=root->type; def=root->type;
...@@ -2625,7 +2625,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, ...@@ -2625,7 +2625,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
// strip redundant template specifier for constructors // strip redundant template specifier for constructors
if ((fd==0 || getLanguageFromFileName(fd->name())==SrcLangExt_Cpp) && 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); name=name.left(i);
} }
......
...@@ -480,6 +480,8 @@ void HtmlHelp::finalize() ...@@ -480,6 +480,8 @@ void HtmlHelp::finalize()
{ {
// end the contents file // end the contents file
cts << "</UL>\n"; cts << "</UL>\n";
cts << "</BODY>\n";
cts << "</HTML>\n";
cts.unsetDevice(); cts.unsetDevice();
cf->close(); cf->close();
delete cf; delete cf;
...@@ -488,6 +490,8 @@ void HtmlHelp::finalize() ...@@ -488,6 +490,8 @@ void HtmlHelp::finalize()
// end the index file // end the index file
kts << "</UL>\n"; kts << "</UL>\n";
kts << "</BODY>\n";
kts << "</HTML>\n";
kts.unsetDevice(); kts.unsetDevice();
kf->close(); kf->close();
delete kf; delete kf;
......
...@@ -22,7 +22,9 @@ extern char **environ; ...@@ -22,7 +22,9 @@ extern char **environ;
#endif #endif
#include "portable.h" #include "portable.h"
//#include "debug.h" #ifndef NODEBUG
#include "debug.h"
#endif
//#include "doxygen.h" //#include "doxygen.h"
static double sysElapsedTime; static double sysElapsedTime;
...@@ -43,7 +45,9 @@ int portable_system(const char *command,const char *args,bool commandHasConsole ...@@ -43,7 +45,9 @@ int portable_system(const char *command,const char *args,bool commandHasConsole
} }
fullCmd += " "; fullCmd += " ";
fullCmd += args; 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__) #if !defined(_WIN32) || defined(__CYGWIN__)
commandHasConsole=commandHasConsole; commandHasConsole=commandHasConsole;
......
...@@ -890,7 +890,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -890,7 +890,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->argList->clear(); current->argList->clear();
lineCount() ; lineCount() ;
} }
<FindMembers>{B}*"event"{BN}* { <FindMembers>{B}*"event"{BN}+ {
if (insideCli) if (insideCli)
{ {
// C++/CLI event // C++/CLI event
...@@ -905,7 +905,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -905,7 +905,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
REJECT; REJECT;
} }
} }
<FindMembers>{B}*"property"{BN}* { <FindMembers>{B}*"property"{BN}+ {
if (insideCli) if (insideCli)
{ {
// C++/CLI property // C++/CLI property
...@@ -942,7 +942,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -942,7 +942,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
addType( current ); addType( current );
current->type += yytext; current->type += yytext;
} }
<FindMembers>{B}*"property"{BN}* { <FindMembers>{B}*"property"{BN}+ {
if (!current->type.isEmpty()) if (!current->type.isEmpty())
{ {
REJECT; REJECT;
...@@ -2751,15 +2751,18 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2751,15 +2751,18 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindFields>";" { <FindFields>";" {
if (insideJava) // last enum field in Java class if (insideJava) // last enum field in Java class
{ {
current->fileName = yyFileName; if (!current->name.isEmpty())
current->startLine = yyLineNr; {
current->type = "@"; // enum marker current->fileName = yyFileName;
current->args = current->args.simplifyWhiteSpace(); current->startLine = yyLineNr;
current->name = current->name.stripWhiteSpace(); current->type = "@"; // enum marker
current->section = Entry::VARIABLE_SEC; current->args = current->args.simplifyWhiteSpace();
current_root->addSubEntry(current); current->name = current->name.stripWhiteSpace();
current = new Entry ; current->section = Entry::VARIABLE_SEC;
initEntry(); current_root->addSubEntry(current);
current = new Entry ;
initEntry();
}
// TODO: skip until the end of the scope // TODO: skip until the end of the scope
BEGIN( SkipRemainder ); BEGIN( SkipRemainder );
...@@ -4001,7 +4004,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4001,7 +4004,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
delete current->sli; delete current->sli;
current->sli = 0; current->sli = 0;
} }
previous->endBodyLine=yyLineNr; if (previous) previous->endBodyLine=yyLineNr;
BEGIN( lastCurlyContext ) ; BEGIN( lastCurlyContext ) ;
} }
} }
...@@ -4209,6 +4212,15 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4209,6 +4212,15 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
BEGIN( FindMembers ); BEGIN( FindMembers );
} }
<CompoundName>{SCOPENAME}/"(" {
current->name = yytext ;
lineCount();
if (current->spec & Entry::Protocol)
{
current->name += "-p";
}
BEGIN( ClassVar );
}
<CompoundName>{SCOPENAME} { <CompoundName>{SCOPENAME} {
current->name = yytext ; current->name = yytext ;
lineCount(); lineCount();
...@@ -4380,9 +4392,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4380,9 +4392,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
<ClassCategory>")" { <ClassCategory>")" {
current->name+=')'; current->name+=')';
// category has no variables so push back an empty body if ((current->section & Entry::Protocol) ||
unput('}'); current->section == Entry::OBJCIMPL_SEC)
unput('{'); {
unput('{'); // fake start of body
}
else // category has no variables so push back an empty body
{
unput('}');
unput('{');
}
BEGIN( ClassVar ); BEGIN( ClassVar );
} }
<ClassVar>":" { <ClassVar>":" {
......
...@@ -1641,7 +1641,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, ...@@ -1641,7 +1641,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
} }
//printf("floatingIndex=%d strlen=%d autoBreak=%d\n",floatingIndex,strLen,autoBreak); //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); QCString splitText = txtStr.mid(skipIndex,newIndex-skipIndex);
int splitLength = splitText.length(); int splitLength = splitText.length();
...@@ -4588,6 +4588,13 @@ QCString escapeCharsInString(const char *name,bool allowDots) ...@@ -4588,6 +4588,13 @@ QCString escapeCharsInString(const char *name,bool allowDots)
case ' ': result+="_01"; break; case ' ': result+="_01"; break;
case '{': result+="_02"; break; case '{': result+="_02"; break;
case '}': result+="_03"; 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: default:
if (caseSenseNames || !isupper(c)) if (caseSenseNames || !isupper(c))
{ {
......
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