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
(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.
......@@ -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)
......@@ -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
......
......@@ -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"`
......
......@@ -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
<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
native win32 applications such as Doxygen.
......
......@@ -568,7 +568,9 @@ static QCString addFormula()
formLabel.sprintf("\\form#%d",f->getId());
}
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;
}
......@@ -690,7 +692,9 @@ static inline void setOutput(OutputContext ctx)
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;
}
......@@ -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
......
......@@ -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;
}
......
......@@ -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();
......
......@@ -83,6 +83,7 @@ struct TokenInfo
// simple section
QString simpleSectName;
QString simpleSectText;
// verbatim fragment
QString verb;
......
......@@ -415,6 +415,9 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}?
g_token->name = "inheritdoc";
return TK_COMMAND;
}
<St_Para>"\\_fakenl" { // artificial new line
yylineno++;
}
<St_Para>{SPCMD3} {
g_token->name = "form";
bool ok;
......
......@@ -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;
......
......@@ -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);
}
......
......@@ -480,6 +480,8 @@ void HtmlHelp::finalize()
{
// end the contents file
cts << "</UL>\n";
cts << "</BODY>\n";
cts << "</HTML>\n";
cts.unsetDevice();
cf->close();
delete cf;
......@@ -488,6 +490,8 @@ void HtmlHelp::finalize()
// end the index file
kts << "</UL>\n";
kts << "</BODY>\n";
kts << "</HTML>\n";
kts.unsetDevice();
kf->close();
delete kf;
......
......@@ -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;
......
......@@ -890,7 +890,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->argList->clear();
lineCount() ;
}
<FindMembers>{B}*"event"{BN}* {
<FindMembers>{B}*"event"{BN}+ {
if (insideCli)
{
// C++/CLI event
......@@ -905,7 +905,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
REJECT;
}
}
<FindMembers>{B}*"property"{BN}* {
<FindMembers>{B}*"property"{BN}+ {
if (insideCli)
{
// C++/CLI property
......@@ -942,7 +942,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
addType( current );
current->type += yytext;
}
<FindMembers>{B}*"property"{BN}* {
<FindMembers>{B}*"property"{BN}+ {
if (!current->type.isEmpty())
{
REJECT;
......@@ -2751,15 +2751,18 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindFields>";" {
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 );
}
<CompoundName>{SCOPENAME}/"(" {
current->name = yytext ;
lineCount();
if (current->spec & Entry::Protocol)
{
current->name += "-p";
}
BEGIN( ClassVar );
}
<CompoundName>{SCOPENAME} {
current->name = yytext ;
lineCount();
......@@ -4380,9 +4392,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
<ClassCategory>")" {
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 );
}
<ClassVar>":" {
......
......@@ -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))
{
......
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