summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2007-09-02 19:15:32 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2007-09-02 19:15:32 (GMT)
commit6bedd287437d2091820129533cb44f56609d0991 (patch)
tree05d18b9500cfc4e613b19d0154b89ed18542a3ae /src
parent115c6c02c3b246c525721aef9b1a43aeeb4666d5 (diff)
downloadDoxygen-6bedd287437d2091820129533cb44f56609d0991.zip
Doxygen-6bedd287437d2091820129533cb44f56609d0991.tar.gz
Doxygen-6bedd287437d2091820129533cb44f56609d0991.tar.bz2
Release-1.5.3-20070902
Diffstat (limited to 'src')
-rw-r--r--src/commentscan.l9
-rw-r--r--src/definition.cpp9
-rw-r--r--src/docparser.cpp48
-rw-r--r--src/doctokenizer.h1
-rw-r--r--src/doctokenizer.l3
-rw-r--r--src/dot.cpp1
-rw-r--r--src/doxygen.cpp4
-rw-r--r--src/htmlhelp.cpp4
-rw-r--r--src/portable.cpp8
-rw-r--r--src/scanner.l51
-rw-r--r--src/util.cpp9
11 files changed, 115 insertions, 32 deletions
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;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
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;
}
+<St_Para>"\\_fakenl" { // artificial new line
+ yylineno++;
+ }
<St_Para>{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 << "</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;
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() ;
}
-<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>":" {
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))
{