Commit 115c6c02 authored by dimitri's avatar dimitri

Release-1.5.3-20070815

parent a56b6170
DOXYGEN Version 1.5.3 DOXYGEN Version 1.5.3-20070815
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 (27 July 2007) Dimitri van Heesch (15 August 2007)
DOXYGEN Version 1.5.3 DOXYGEN Version 1.5.3_20070815
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) (27 July 2007) Dimitri van Heesch (dimitri@stack.nl) (15 August 2007)
...@@ -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=NO doxygen_version_mmn=20070815
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -93,12 +93,12 @@ or ...@@ -93,12 +93,12 @@ or
Some people like to make their comment blocks more visible in the Some people like to make their comment blocks more visible in the
documentation. For this purpose you can use the following: documentation. For this purpose you can use the following:
\verbatim \verbatim
/************************************************ /********************************************//**
* ... text * ... text
***********************************************/ ***********************************************/
\endverbatim \endverbatim
(note the 2 slashes to end the normal comment block and start a special comment block).
or or
......
...@@ -95,9 +95,9 @@ valid commands in \f$\mbox{\LaTeX}\f$'s math-mode. For the third command ...@@ -95,9 +95,9 @@ valid commands in \f$\mbox{\LaTeX}\f$'s math-mode. For the third command
the section should contain valid command for the specific environment. the section should contain valid command for the specific environment.
\warning Currently, doxygen is not very fault tolerant in recovering \warning Currently, doxygen is not very fault tolerant in recovering
from typos in formulas. It may have to be necessary to remove the from typos in formulas. It may be necessary to remove the
file <code>formula.repository</code> that is written to the html directory to file <code>formula.repository</code> that is written to the html directory to
a rid of an incorrect formula get rid of an incorrect formula.
\htmlonly \htmlonly
Go to the <a href="diagrams.html">next</a> section or return to the Go to the <a href="diagrams.html">next</a> section or return to the
......
...@@ -124,7 +124,7 @@ documentation under the terms of the GNU General Public License is hereby ...@@ -124,7 +124,7 @@ documentation under the terms of the GNU General Public License is hereby
granted. No representations are made about the suitability of this software granted. No representations are made about the suitability of this software
for any purpose. It is provided "as is" without express or implied warranty. for any purpose. It is provided "as is" without express or implied warranty.
See the See the
<a href="http://www.gnu.org/copyleft/gpl.html"> <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">
GNU General Public License</a> GNU General Public License</a>
for more details. for more details.
<p> <p>
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
* - Ian Jackson <ian@chiark.greenend.org.uk>. * - Ian Jackson <ian@chiark.greenend.org.uk>.
* Still in the public domain. * Still in the public domain.
*/ */
#include <string.h> /* for memcpy() */ #include <string.h> /* for memcpy() */
#include <sys/types.h> /* for stupid systems */ #include <sys/types.h> /* for stupid systems */
......
...@@ -48,6 +48,6 @@ distclean: clean ...@@ -48,6 +48,6 @@ distclean: clean
-$(RM) scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \ -$(RM) scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \
ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp commentscan.cpp \ ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp commentscan.cpp \
declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp \ declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp \
pycode.cpp pyscanner.cpp pycode.cpp pyscanner.cpp fortrancode.cpp fortranscanner.cpp
FORCE: FORCE:
...@@ -2709,6 +2709,7 @@ void ClassDef::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,co ...@@ -2709,6 +2709,7 @@ void ClassDef::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,co
void ClassDef::addInnerCompound(Definition *d) void ClassDef::addInnerCompound(Definition *d)
{ {
//printf("**** %s::addInnerCompound(%s)\n",name().data(),d->name().data());
if (d->definitionType()==Definition::TypeClass) // only classes can be if (d->definitionType()==Definition::TypeClass) // only classes can be
// nested in classes. // nested in classes.
{ {
......
...@@ -2607,8 +2607,8 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -2607,8 +2607,8 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_code->codify(yytext); g_code->codify(yytext);
} }
<MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) { <MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) {
addParmType(); //addParmType();
g_parmName=yytext; //g_parmName=yytext;
startFontClass("keyword"); startFontClass("keyword");
g_code->codify(yytext); g_code->codify(yytext);
endFontClass(); endFontClass();
......
...@@ -354,6 +354,7 @@ static OutputContext inContext; // are we inside the brief, details ...@@ -354,6 +354,7 @@ static OutputContext inContext; // are we inside the brief, details
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
static QCString formulaEnv; // environment name static QCString formulaEnv; // environment name
static int formulaNewLines; // amount of new lines in the formula
static QCString *pOutputString; // pointer to string to which the output is appended. static QCString *pOutputString; // pointer to string to which the output is appended.
static QCString outputXRef; // temp argument of todo/test/../xrefitem commands static QCString outputXRef; // temp argument of todo/test/../xrefitem commands
static QCString blockName; // preformatted block name (e.g. verbatim, latexonly,...) static QCString blockName; // preformatted block name (e.g. verbatim, latexonly,...)
...@@ -566,6 +567,8 @@ static QCString addFormula() ...@@ -566,6 +567,8 @@ static QCString addFormula()
{ {
formLabel.sprintf("\\form#%d",f->getId()); formLabel.sprintf("\\form#%d",f->getId());
} }
int i;
for (i=0;i<formulaNewLines;i++) formLabel+='\n';
return formLabel; return formLabel;
} }
...@@ -955,14 +958,17 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-] ...@@ -955,14 +958,17 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]
formulaText="\\begin"; formulaText="\\begin";
formulaEnv=&yytext[2]; formulaEnv=&yytext[2];
formulaText+=formulaEnv; formulaText+=formulaEnv;
formulaNewLines=0;
BEGIN(ReadFormulaLong); BEGIN(ReadFormulaLong);
} }
<Comment>{CMD}"f$" { // start of a inline formula <Comment>{CMD}"f$" { // start of a inline formula
formulaText="$"; formulaText="$";
formulaNewLines=0;
BEGIN(ReadFormulaShort); BEGIN(ReadFormulaShort);
} }
<Comment>{CMD}"f[" { // start of a block formula <Comment>{CMD}"f[" { // start of a block formula
formulaText="\\["; formulaText="\\[";
formulaNewLines=0;
BEGIN(ReadFormulaLong); BEGIN(ReadFormulaLong);
} }
<Comment>{CMD}"{" { // begin of a group <Comment>{CMD}"{" { // begin of a group
...@@ -1056,6 +1062,7 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-] ...@@ -1056,6 +1062,7 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]
formulaText+=yytext; formulaText+=yytext;
} }
<ReadFormulaLong,ReadFormulaShort>\n { // new line <ReadFormulaLong,ReadFormulaShort>\n { // new line
formulaNewLines++;
formulaText+=*yytext; formulaText+=*yytext;
yyLineNr++; yyLineNr++;
} }
......
...@@ -155,7 +155,7 @@ ID ([a-z_A-Z][a-z_A-Z0-9]*)|(@[0-9]+) ...@@ -155,7 +155,7 @@ ID ([a-z_A-Z][a-z_A-Z0-9]*)|(@[0-9]+)
<Start>{B}+ { <Start>{B}+ {
addType(); addType();
} }
<Start>{B}*"("({ID}"::")*{B}*"*"({B}*("const"|"volatile"){B}+)? { <Start>{B}*"("({ID}"::")*{B}*[&*]({B}*("const"|"volatile"){B}+)? {
addType(); addType();
QCString text=yytext; QCString text=yytext;
type+=text.stripWhiteSpace(); type+=text.stripWhiteSpace();
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
class ArgumentList; class ArgumentList;
extern void stringToArgumentList(const char *argsString,ArgumentList* &argList); extern void stringToArgumentList(const char *argsString,ArgumentList* &argList,
QCString *extraTypeChars=0);
#endif #endif
...@@ -71,6 +71,7 @@ static QCString g_curArgName; ...@@ -71,6 +71,7 @@ static QCString g_curArgName;
static QCString g_curArgDocs; static QCString g_curArgDocs;
static QCString g_curArgAttrib; static QCString g_curArgAttrib;
static QCString g_curArgArray; static QCString g_curArgArray;
static QCString g_extraTypeChars;
static int g_argRoundCount; static int g_argRoundCount;
static int g_argSharpCount; static int g_argSharpCount;
static int g_argCurlyCount; static int g_argCurlyCount;
...@@ -359,6 +360,10 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -359,6 +360,10 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
<FuncQual>"="{B}*"0" { <FuncQual>"="{B}*"0" {
g_argList->pureSpecifier=TRUE; g_argList->pureSpecifier=TRUE;
} }
<FuncQual>")"{B}*"["[^]]*"]" { // for functions returning a pointer to an array,
// i.e. ")[]" in "int (*f(int))[4]" with argsString="(int))[4]"
g_extraTypeChars=yytext;
}
<ReadDocBlock>[^\*\n]+ { <ReadDocBlock>[^\*\n]+ {
g_curArgDocs+=yytext; g_curArgDocs+=yytext;
} }
...@@ -402,7 +407,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -402,7 +407,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
* \param al a reference to resulting argument list pointer. * \param al a reference to resulting argument list pointer.
*/ */
void stringToArgumentList(const char *argsString,ArgumentList* &al) void stringToArgumentList(const char *argsString,ArgumentList* &al,QCString *extraTypeChars)
{ {
if (al==0) return; if (al==0) return;
if (argsString==0) return; if (argsString==0) return;
...@@ -411,6 +416,7 @@ void stringToArgumentList(const char *argsString,ArgumentList* &al) ...@@ -411,6 +416,7 @@ void stringToArgumentList(const char *argsString,ArgumentList* &al)
g_curArgDocs.resize(0); g_curArgDocs.resize(0);
g_curArgAttrib.resize(0); g_curArgAttrib.resize(0);
g_curArgArray.resize(0); g_curArgArray.resize(0);
g_extraTypeChars.resize(0);
g_argRoundCount = 0; g_argRoundCount = 0;
g_argSharpCount = 0; g_argSharpCount = 0;
g_argCurlyCount = 0; g_argCurlyCount = 0;
...@@ -425,6 +431,7 @@ void stringToArgumentList(const char *argsString,ArgumentList* &al) ...@@ -425,6 +431,7 @@ void stringToArgumentList(const char *argsString,ArgumentList* &al)
defargsYYrestart( defargsYYin ); defargsYYrestart( defargsYYin );
BEGIN( Start ); BEGIN( Start );
defargsYYlex(); defargsYYlex();
if (extraTypeChars) *extraTypeChars=g_extraTypeChars;
//printf("stringToArgumentList(%s) result=%s\n",argsString,argListToString(al).data()); //printf("stringToArgumentList(%s) result=%s\n",argsString,argListToString(al).data());
} }
......
...@@ -321,11 +321,12 @@ FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"))? ...@@ -321,11 +321,12 @@ FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"))?
OPNEW {BLANK}+"new"({BLANK}*"[]")? OPNEW {BLANK}+"new"({BLANK}*"[]")?
OPDEL {BLANK}+"delete"({BLANK}*"[]")? OPDEL {BLANK}+"delete"({BLANK}*"[]")?
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()" OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
OPCAST {BLANK}+[^(\r\n.,]+ OPCAST {BLANK}+[^<(\r\n.,][^(\r\n.,]*
OPMASK ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG}) OPMASK ({BLANK}*{OPNORM}{FUNCARG})
OPMASKOPT ({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})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})
LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[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\\@<>()\[\]:;\?{}&%$#,."]
......
...@@ -68,6 +68,7 @@ ...@@ -68,6 +68,7 @@
#include "parserintf.h" #include "parserintf.h"
#include "htags.h" #include "htags.h"
#include "pyscanner.h" #include "pyscanner.h"
#include "fortranscanner.h"
#include "code.h" #include "code.h"
#include "objcache.h" #include "objcache.h"
#include "store.h" #include "store.h"
...@@ -1149,8 +1150,6 @@ static void addClassToContext(EntryNav *rootNav) ...@@ -1149,8 +1150,6 @@ static void addClassToContext(EntryNav *rootNav)
else // new class else // new class
{ {
ClassDef::CompoundType sec = convertToCompoundType(root->section,root->spec); ClassDef::CompoundType sec = convertToCompoundType(root->section,root->spec);
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
QCString className; QCString className;
QCString namespaceName; QCString namespaceName;
...@@ -1168,6 +1167,8 @@ static void addClassToContext(EntryNav *rootNav) ...@@ -1168,6 +1167,8 @@ static void addClassToContext(EntryNav *rootNav)
} }
cd=new ClassDef(root->fileName,root->startLine,fullName,sec, cd=new ClassDef(root->fileName,root->startLine,fullName,sec,
tagName,refFileName); tagName,refFileName);
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d cd=%p\n",
fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1,cd);
cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
cd->setIsObjectiveC(root->objc); cd->setIsObjectiveC(root->objc);
...@@ -1279,6 +1280,7 @@ static void resolveClassNestingRelations() ...@@ -1279,6 +1280,7 @@ static void resolveClassNestingRelations()
{ {
QCString c,n; QCString c,n;
extractNamespaceName(cd->name(),c,n,TRUE); extractNamespaceName(cd->name(),c,n,TRUE);
n = stripAnonymousNamespaceScope(n);
if (cd->name().contains("::")==nestingLevel && !n.isEmpty()) if (cd->name().contains("::")==nestingLevel && !n.isEmpty())
{ {
cd->visited=TRUE; cd->visited=TRUE;
...@@ -1316,14 +1318,15 @@ static void resolveClassNestingRelations() ...@@ -1316,14 +1318,15 @@ static void resolveClassNestingRelations()
if (cd->name().contains("::")==nestingLevel && !cd->visited) if (cd->name().contains("::")==nestingLevel && !cd->visited)
{ {
cd->visited=TRUE; cd->visited=TRUE;
QCString name = stripAnonymousNamespaceScope(cd->name());
//printf("Level=%d processing=%s\n",nestingLevel,cd->name().data()); //printf("Level=%d processing=%s\n",nestingLevel,cd->name().data());
// also add class to the correct structural context // also add class to the correct structural context
Definition *d = findScopeFromQualifiedName(Doxygen::globalScope, Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,
cd->name(),cd->getFileDef()); name,cd->getFileDef());
if (d==0) // we didn't find anything, create the scope artificially if (d==0) // we didn't find anything, create the scope artificially
// anyway, so we can at least relate scopes properly. // anyway, so we can at least relate scopes properly.
{ {
Definition *d = buildScopeFromQualifiedName(cd->name(),cd->name().contains("::")); Definition *d = buildScopeFromQualifiedName(name,name.contains("::"));
if (d!=cd) // avoid recursion in case of redundant scopes, i.e: namespace N { class N::C {}; } if (d!=cd) // avoid recursion in case of redundant scopes, i.e: namespace N { class N::C {}; }
// for this case doxygen assumes the exitance of a namespace N::N in which C is to be found! // for this case doxygen assumes the exitance of a namespace N::N in which C is to be found!
{ {
...@@ -1331,7 +1334,7 @@ static void resolveClassNestingRelations() ...@@ -1331,7 +1334,7 @@ static void resolveClassNestingRelations()
cd->setOuterScope(d); cd->setOuterScope(d);
warn(cd->getDefFileName(),cd->getDefLine(), warn(cd->getDefFileName(),cd->getDefLine(),
"Warning: Internal inconsistency: scope for class %s not " "Warning: Internal inconsistency: scope for class %s not "
"found!",cd->name().data() "found while looking in the global scope!",name.data()
); );
} }
} }
...@@ -2127,8 +2130,10 @@ static MemberDef *addVariableToFile( ...@@ -2127,8 +2130,10 @@ static MemberDef *addVariableToFile(
{ {
if (md->getFileDef() && if (md->getFileDef() &&
! // not a php array ! // not a php array
(getLanguageFromFileName(md->getFileDef()->name())==SrcLangExt_PHP) && (
(md->argsString()!=root->args && root->args.find('[')!=-1) (getLanguageFromFileName(md->getFileDef()->name())==SrcLangExt_PHP) &&
(md->argsString()!=root->args && root->args.find('[')!=-1)
)
) )
// not a php array variable // not a php array variable
{ {
...@@ -2600,7 +2605,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, ...@@ -2600,7 +2605,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
FileDef *fd=rootNav->fileDef(); FileDef *fd=rootNav->fileDef();
int l,i; int l,i;
static QRegExp re("([a-z_A-Z0-9: ]*[ *]*[ ]*"); static QRegExp re("([a-z_A-Z0-9: ]*[ &*]*[ ]*");
if (!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable if (!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable
{ {
...@@ -2784,10 +2789,6 @@ static void buildFunctionList(EntryNav *rootNav) ...@@ -2784,10 +2789,6 @@ static void buildFunctionList(EntryNav *rootNav)
ClassDef *cd=0; ClassDef *cd=0;
// check if this function's parent is a class // check if this function's parent is a class
static QRegExp re("([a-z_A-Z0-9: ]*[ *]*[ ]*");
//printf("root->parent=`%s' %x cd=%p root->type.find(re,0)=%d\n",
// root->parent->name.data(),root->parent->section,getClass(root->parent->name),
// root->type.find(re,0));
QCString scope=rootNav->parent()->name(); //stripAnonymousNamespaceScope(root->parent->name); QCString scope=rootNav->parent()->name(); //stripAnonymousNamespaceScope(root->parent->name);
scope=stripTemplateSpecifiersFromScope(scope,FALSE); scope=stripTemplateSpecifiersFromScope(scope,FALSE);
...@@ -2826,12 +2827,14 @@ static void buildFunctionList(EntryNav *rootNav) ...@@ -2826,12 +2827,14 @@ static void buildFunctionList(EntryNav *rootNav)
} }
static QRegExp re("([a-z_A-Z0-9: ]*[ &*]*[ ]*");
if (!rootNav->parent()->name().isEmpty() && if (!rootNav->parent()->name().isEmpty() &&
(rootNav->parent()->section() & Entry::COMPOUND_MASK) && (rootNav->parent()->section() & Entry::COMPOUND_MASK) &&
cd && cd &&
// do some fuzzy things to exclude function pointers // do some fuzzy things to exclude function pointers
(root->type.isEmpty() || root->type.find(re,0)==-1 || (root->type.isEmpty() ||
root->type.find(")(")!=-1 || root->type.find("operator")!=-1 (root->type.find(re,0)==-1 || root->args.find(")[")!=-1) || // type contains ..(..* and args not )[.. -> function pointer
root->type.find(")(")!=-1 || root->type.find("operator")!=-1 // type contains ..)(.. and not "operator"
) )
) )
{ {
...@@ -3122,6 +3125,10 @@ static void buildFunctionList(EntryNav *rootNav) ...@@ -3122,6 +3125,10 @@ static void buildFunctionList(EntryNav *rootNav)
//printf("unrelated function %d `%s' `%s' `%s'\n", //printf("unrelated function %d `%s' `%s' `%s'\n",
// root->parent->section,root->type.data(),rname.data(),root->args.data()); // root->parent->section,root->type.data(),rname.data(),root->args.data());
} }
else
{
Debug::print(Debug::Functions,0," --> %s not processed!\n",rname.data());
}
} }
else if (rname.isEmpty()) else if (rname.isEmpty())
{ {
...@@ -4030,7 +4037,7 @@ static bool findClassRelation( ...@@ -4030,7 +4037,7 @@ static bool findClassRelation(
// int *tempArgIndex; // int *tempArgIndex;
// for (;(tempArgIndex=qdi.current());++qdi) // for (;(tempArgIndex=qdi.current());++qdi)
// { // {
// printf("(%s->%d) ",qdi.currentKey().data(),*tempArgIndex); // printf("(%s->%d) ",qdi.currentKey(),*tempArgIndex);
// } // }
//} //}
//printf("\n"); //printf("\n");
...@@ -4077,8 +4084,8 @@ static bool findClassRelation( ...@@ -4077,8 +4084,8 @@ static bool findClassRelation(
); );
//printf("baseClassName=%s baseClass=%p cd=%p explicitGlobalScope=%d\n", //printf("baseClassName=%s baseClass=%p cd=%p explicitGlobalScope=%d\n",
// baseClassName.data(),baseClass,cd,explicitGlobalScope); // baseClassName.data(),baseClass,cd,explicitGlobalScope);
//printf(" root->name=`%s' baseClassName=`%s' baseClass=%s templSpec=%s\n", //printf(" scope=`%s' baseClassName=`%s' baseClass=%s templSpec=%s\n",
// root->name.data(), // cd ? cd->name().data():"<none>",
// baseClassName.data(), // baseClassName.data(),
// baseClass?baseClass->name().data():"<none>", // baseClass?baseClass->name().data():"<none>",
// templSpec.data() // templSpec.data()
...@@ -4091,11 +4098,12 @@ static bool findClassRelation( ...@@ -4091,11 +4098,12 @@ static bool findClassRelation(
if (!isRecursiveBaseClass(rootNav->name(),baseClassName) || explicitGlobalScope) if (!isRecursiveBaseClass(rootNav->name(),baseClassName) || explicitGlobalScope)
{ {
Debug::print( Debug::print(
Debug::Classes,0," class relation %s inherited/used by %s found (%s and %s)\n", Debug::Classes,0," class relation %s inherited/used by %s found (%s and %s) templSpec='%s'\n",
baseClassName.data(), baseClassName.data(),
rootNav->name().data(), rootNav->name().data(),
(bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"), (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
(bi->virt==Normal)?"normal":"virtual" (bi->virt==Normal)?"normal":"virtual",
templSpec.data()
); );
int i=baseClassName.find('<'); int i=baseClassName.find('<');
...@@ -4142,17 +4150,19 @@ static bool findClassRelation( ...@@ -4142,17 +4150,19 @@ static bool findClassRelation(
bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances); bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances);
if (!found && si!=-1) if (!found && si!=-1)
{ {
QCString tmpTemplSpec;
// replace any namespace aliases // replace any namespace aliases
replaceNamespaceAliases(baseClassName,si); replaceNamespaceAliases(baseClassName,si);
baseClass=getResolvedClass(cd, baseClass=getResolvedClass(cd,
cd->getFileDef(), cd->getFileDef(),
baseClassName, baseClassName,
&baseClassTypeDef, &baseClassTypeDef,
&templSpec, &tmpTemplSpec,
mode==Undocumented, mode==Undocumented,
TRUE TRUE
); );
found=baseClass!=0 && baseClass!=cd; found=baseClass!=0 && baseClass!=cd;
if (found) templSpec = tmpTemplSpec;
} }
//printf("root->name=%s biName=%s baseClassName=%s\n", //printf("root->name=%s biName=%s baseClassName=%s\n",
...@@ -4227,6 +4237,8 @@ static bool findClassRelation( ...@@ -4227,6 +4237,8 @@ static bool findClassRelation(
else else
{ {
baseClass=Doxygen::classSDict->find(baseClassName); baseClass=Doxygen::classSDict->find(baseClassName);
//printf("*** classDDict->find(%s)=%p biName=%s templSpec=%s\n",
// baseClassName.data(),baseClass,biName.data(),templSpec.data());
if (baseClass==0) if (baseClass==0)
{ {
baseClass=new ClassDef(root->fileName,root->startLine, baseClass=new ClassDef(root->fileName,root->startLine,
...@@ -5384,8 +5396,8 @@ static void findMember(EntryNav *rootNav, ...@@ -5384,8 +5396,8 @@ static void findMember(EntryNav *rootNav,
// don't be fooled by anonymous scopes // don't be fooled by anonymous scopes
tcd=cd; tcd=cd;
} }
//printf("Looking for %s inside nd=%s result=%p\n", //printf("Looking for %s inside nd=%s result=%p (%s) cd=%p\n",
// scopeName.data(),nd?nd->name().data():"<none>",tcd); // scopeName.data(),nd?nd->name().data():"<none>",tcd,tcd?tcd->name().data():"",cd);
if (cd && tcd==cd) // member's classes match if (cd && tcd==cd) // member's classes match
{ {
...@@ -8825,6 +8837,9 @@ void initDoxygen() ...@@ -8825,6 +8837,9 @@ void initDoxygen()
ParserInterface *defaultParser = new CLanguageScanner; ParserInterface *defaultParser = new CLanguageScanner;
Doxygen::parserManager = new ParserManager(defaultParser); Doxygen::parserManager = new ParserManager(defaultParser);
Doxygen::parserManager->registerParser(".py",new PythonLanguageScanner); Doxygen::parserManager->registerParser(".py",new PythonLanguageScanner);
Doxygen::parserManager->registerParser(".f90", new FortranLanguageScanner);
Doxygen::parserManager->registerParser(".F90", new FortranLanguageScanner);
// register any additional parsers here... // register any additional parsers here...
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef CODE_H
#define CODE_H
#include "qtbc.h"
#include <stdio.h>
class CodeOutputInterface;
class FileDef;
class MemberDef;
void parseFortranCode(CodeOutputInterface &,const char *,const QCString &,
bool ,const char *,FileDef *fd=0,
int startLine=-1,int endLine=-1,bool inlineFragment=FALSE,
MemberDef *memberDef=0);
void resetFortranCodeParserState();
void codeFreeScanner();
#endif
This diff is collapsed.
/******************************************************************************
*
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef SCANNER_FORTRAN_H
#define SCANNER_FORTRAN_H
#include "parserintf.h"
/** \brief Fortran language parser using state-based lexical scanning.
*
* This is the Fortran language parser for doxygen.
*/
class FortranLanguageScanner : public ParserInterface
{
public:
virtual ~FortranLanguageScanner() {}
void parseInput(const char *fileName,
const char *fileBuf,
Entry *root);
bool needsPreprocessing(const QCString &extension);
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
const QCString &input,
bool isExampleBlock,
const char *exampleName=0,
FileDef *fileDef=0,
int startLine=-1,
int endLine=-1,
bool inlineFragment=FALSE,
MemberDef *memberDef=0
);
void resetCodeParserState();
void parsePrototype(const char *text);
};
#endif
This diff is collapsed.
...@@ -930,6 +930,7 @@ void HtmlGenerator::writeCodeLink(const char *ref,const char *f, ...@@ -930,6 +930,7 @@ void HtmlGenerator::writeCodeLink(const char *ref,const char *f,
const char *tooltip) const char *tooltip)
{ {
QCString *dest; QCString *dest;
//printf("writeCodeLink(ref=%s,f=%s,anchor=%s,name=%s,tooltip=%s)\n",ref,f,anchor,name,tooltip);
if (ref) if (ref)
{ {
t << "<a class=\"codeRef\" "; t << "<a class=\"codeRef\" ";
......
...@@ -450,6 +450,11 @@ void HtmlHelp::createProjectFile() ...@@ -450,6 +450,11 @@ void HtmlHelp::createProjectFile()
t << "tab_b.gif" << endl; t << "tab_b.gif" << endl;
t << "tab_l.gif" << endl; t << "tab_l.gif" << endl;
t << "tab_r.gif" << endl; t << "tab_r.gif" << endl;
if (Config_getBool("HTML_DYNAMIC_SECTIONS"))
{
t << "open.gif" << endl;
t << "closed.gif" << endl;
}
f.close(); f.close();
} }
else else
......
...@@ -2589,7 +2589,7 @@ void writeGroupIndexItem(GroupDef *gd,MemberList *ml,const QCString &title, ...@@ -2589,7 +2589,7 @@ void writeGroupIndexItem(GroupDef *gd,MemberList *ml,const QCString &title,
first=FALSE; first=FALSE;
if (htmlHelp) if (htmlHelp)
{ {
htmlHelp->addContentsItem(TRUE, convertToHtml(title), gd->getOutputFileBase(),0); htmlHelp->addContentsItem(TRUE, convertToHtml(title,TRUE), gd->getOutputFileBase(),0);
htmlHelp->incContentsDepth(); htmlHelp->incContentsDepth();
} }
if (ftvHelp) if (ftvHelp)
...@@ -2715,7 +2715,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2715,7 +2715,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
SectionInfo *si=0; SectionInfo *si=0;
if (!pd->name().isEmpty()) si=Doxygen::sectionDict[pd->name()]; if (!pd->name().isEmpty()) si=Doxygen::sectionDict[pd->name()];
if (htmlHelp) htmlHelp->addContentsItem(FALSE, if (htmlHelp) htmlHelp->addContentsItem(FALSE,
convertToHtml(pd->title()), convertToHtml(pd->title(),TRUE),
gd->getOutputFileBase(), gd->getOutputFileBase(),
si ? si->label.data() : 0 si ? si->label.data() : 0
); );
...@@ -2723,7 +2723,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2723,7 +2723,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
gd->getReference(), gd->getReference(),
gd->getOutputFileBase(), gd->getOutputFileBase(),
si ? si->label.data() : 0, si ? si->label.data() : 0,
convertToHtml(pd->title()) convertToHtml(pd->title(),TRUE)
); );
} }
...@@ -2762,7 +2762,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2762,7 +2762,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
{ {
if (htmlHelp) if (htmlHelp)
{ {
htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trNamespaces()), gd->getOutputFileBase(), 0); htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trNamespaces(),TRUE), gd->getOutputFileBase(), 0);
htmlHelp->incContentsDepth(); htmlHelp->incContentsDepth();
} }
...@@ -2779,11 +2779,11 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2779,11 +2779,11 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
{ {
if (htmlHelp) if (htmlHelp)
{ {
htmlHelp->addContentsItem(FALSE, convertToHtml(nsd->name()), nsd->getOutputFileBase()); htmlHelp->addContentsItem(FALSE, convertToHtml(nsd->name(),TRUE), nsd->getOutputFileBase());
} }
if (ftvHelp) if (ftvHelp)
{ {
ftvHelp->addContentsItem(FALSE, nsd->getReference(), nsd->getOutputFileBase(), 0, convertToHtml(nsd->name())); ftvHelp->addContentsItem(FALSE, nsd->getReference(), nsd->getOutputFileBase(), 0, convertToHtml(nsd->name(),TRUE));
} }
} }
if (htmlHelp) htmlHelp->decContentsDepth(); if (htmlHelp) htmlHelp->decContentsDepth();
...@@ -2795,7 +2795,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2795,7 +2795,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
{ {
if (htmlHelp) if (htmlHelp)
{ {
htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trClasses()), gd->getOutputFileBase(), 0); htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trClasses(),TRUE), gd->getOutputFileBase(), 0);
htmlHelp->incContentsDepth(); htmlHelp->incContentsDepth();
} }
...@@ -2832,7 +2832,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2832,7 +2832,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
if (htmlHelp) if (htmlHelp)
{ {
htmlHelp->addContentsItem(TRUE, htmlHelp->addContentsItem(TRUE,
convertToHtml(theTranslator->trFile(TRUE,FALSE)), convertToHtml(theTranslator->trFile(TRUE,FALSE),TRUE),
gd->getOutputFileBase(), 0); gd->getOutputFileBase(), 0);
htmlHelp->incContentsDepth(); htmlHelp->incContentsDepth();
} }
...@@ -2850,9 +2850,9 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2850,9 +2850,9 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
while (fd) while (fd)
{ {
if (htmlHelp) if (htmlHelp)
htmlHelp->addContentsItem(FALSE,convertToHtml(fd->name()),fd->getOutputFileBase()); htmlHelp->addContentsItem(FALSE,convertToHtml(fd->name(),TRUE),fd->getOutputFileBase());
if (ftvHelp) if (ftvHelp)
ftvHelp->addContentsItem(FALSE, fd->getReference(), fd->getOutputFileBase(), 0, convertToHtml(fd->name())); ftvHelp->addContentsItem(FALSE, fd->getReference(), fd->getOutputFileBase(), 0, convertToHtml(fd->name(),TRUE));
fd=fileList->next(); fd=fileList->next();
} }
if (htmlHelp) if (htmlHelp)
...@@ -2866,7 +2866,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2866,7 +2866,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
{ {
if (htmlHelp) if (htmlHelp)
{ {
htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trExamples()), gd->getOutputFileBase(), 0); htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trExamples(),TRUE), gd->getOutputFileBase(), 0);
htmlHelp->incContentsDepth(); htmlHelp->incContentsDepth();
} }
...@@ -2991,9 +2991,9 @@ void writeDirTreeNode(OutputList &ol, DirDef *dd,int level) ...@@ -2991,9 +2991,9 @@ void writeDirTreeNode(OutputList &ol, DirDef *dd,int level)
while (fd) while (fd)
{ {
if (htmlHelp) if (htmlHelp)
htmlHelp->addContentsItem(FALSE,convertToHtml(fd->name()),fd->getOutputFileBase()); htmlHelp->addContentsItem(FALSE,convertToHtml(fd->name(),TRUE),fd->getOutputFileBase());
if (ftvHelp) if (ftvHelp)
ftvHelp->addContentsItem(FALSE, fd->getReference(), fd->getOutputFileBase(), 0, convertToHtml(fd->name())); ftvHelp->addContentsItem(FALSE, fd->getReference(), fd->getOutputFileBase(), 0, convertToHtml(fd->name(),TRUE));
fd=fileList->next(); fd=fileList->next();
} }
} }
......
...@@ -53,10 +53,12 @@ ...@@ -53,10 +53,12 @@
//} //}
static QCString escapeLabelName(const char *s) static QCString escapeLabelName(LatexGenerator *g,const char *s)
{ {
QCString result; QCString result;
const char *p=s; const char *p=s;
char str[2];
str[1]=0;
char c; char c;
while ((c=*p++)) while ((c=*p++))
{ {
...@@ -65,7 +67,7 @@ static QCString escapeLabelName(const char *s) ...@@ -65,7 +67,7 @@ static QCString escapeLabelName(const char *s)
case '%': result+="\\%"; break; case '%': result+="\\%"; break;
case '|': result+="\\tt{\"|}"; break; case '|': result+="\\tt{\"|}"; break;
case '!': result+="\"!"; break; case '!': result+="\"!"; break;
default: result+=c; default: str[0]=c; g->docify(str); break;
} }
} }
return result; return result;
...@@ -1069,7 +1071,7 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name) ...@@ -1069,7 +1071,7 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name)
if (name) if (name)
{ {
t << "\\label{" << fileName << "}\\index{" t << "\\label{" << fileName << "}\\index{"
<< name << "@{"; << escapeLabelName(this,name) << "@{";
escapeMakeIndexChars(this,t,name); escapeMakeIndexChars(this,t,name);
t << "}}" << endl; t << "}}" << endl;
} }
...@@ -1139,15 +1141,15 @@ void LatexGenerator::startMemberDoc(const char *clname, ...@@ -1139,15 +1141,15 @@ void LatexGenerator::startMemberDoc(const char *clname,
t << "\\index{"; t << "\\index{";
if (clname) if (clname)
{ {
t << clname << "@{"; t << escapeLabelName(this,clname) << "@{";
docify(clname); escapeMakeIndexChars(this,t,clname);
t << "}!"; t << "}!";
} }
t << escapeLabelName(memname) << "@{"; t << escapeLabelName(this,memname) << "@{";
escapeMakeIndexChars(this,t,memname); escapeMakeIndexChars(this,t,memname);
t << "}}" << endl; t << "}}" << endl;
t << "\\index{" << escapeLabelName(memname) << "@{"; t << "\\index{" << escapeLabelName(this,memname) << "@{";
escapeMakeIndexChars(this,t,memname); escapeMakeIndexChars(this,t,memname);
t << "}"; t << "}";
if (clname) if (clname)
...@@ -1221,12 +1223,12 @@ void LatexGenerator::addIndexItem(const char *s1,const char *s2) ...@@ -1221,12 +1223,12 @@ void LatexGenerator::addIndexItem(const char *s1,const char *s2)
{ {
if (s1) if (s1)
{ {
t << "\\index{" << escapeLabelName(s1) << "@{"; t << "\\index{" << escapeLabelName(this,s1) << "@{";
escapeMakeIndexChars(this,t,s1); escapeMakeIndexChars(this,t,s1);
t << "}"; t << "}";
if (s2) if (s2)
{ {
t << "!" << escapeLabelName(s2) << "@{"; t << "!" << escapeLabelName(this,s2) << "@{";
escapeMakeIndexChars(this,t,s2); escapeMakeIndexChars(this,t,s2);
t << "}"; t << "}";
} }
...@@ -1356,9 +1358,9 @@ void LatexGenerator::startAnonTypeScope(int indent) ...@@ -1356,9 +1358,9 @@ void LatexGenerator::startAnonTypeScope(int indent)
{ {
t << "\\begin{tabbing}" << endl; t << "\\begin{tabbing}" << endl;
t << "xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=\\kill" << endl; t << "xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=\\kill" << endl;
//printf("LatexGenerator::startMemberItem() insideTabbing=TRUE\n");
insideTabbing=TRUE; insideTabbing=TRUE;
} }
m_indent=indent;
} }
void LatexGenerator::endAnonTypeScope(int indent) void LatexGenerator::endAnonTypeScope(int indent)
...@@ -1368,6 +1370,7 @@ void LatexGenerator::endAnonTypeScope(int indent) ...@@ -1368,6 +1370,7 @@ void LatexGenerator::endAnonTypeScope(int indent)
t << endl << "\\end{tabbing}"; t << endl << "\\end{tabbing}";
insideTabbing=FALSE; insideTabbing=FALSE;
} }
m_indent=indent;
} }
void LatexGenerator::startMemberTemplateParams() void LatexGenerator::startMemberTemplateParams()
...@@ -1401,7 +1404,7 @@ void LatexGenerator::endMemberItem() ...@@ -1401,7 +1404,7 @@ void LatexGenerator::endMemberItem()
if (insideTabbing) if (insideTabbing)
{ {
t << "\\\\"; t << "\\\\";
} }
templateMemberItem = FALSE; templateMemberItem = FALSE;
t << endl; t << endl;
} }
...@@ -1414,7 +1417,7 @@ void LatexGenerator::startMemberDescription() ...@@ -1414,7 +1417,7 @@ void LatexGenerator::startMemberDescription()
} }
else else
{ {
for (int i=0;i<m_indent+1;i++) t << "\\>"; for (int i=0;i<m_indent+2;i++) t << "\\>";
t << "{\\em "; t << "{\\em ";
} }
} }
...@@ -1427,18 +1430,17 @@ void LatexGenerator::endMemberDescription() ...@@ -1427,18 +1430,17 @@ void LatexGenerator::endMemberDescription()
} }
else else
{ {
t << "}\\\\"; t << "}\\\\\n";
m_indent=0;
} }
} }
void LatexGenerator::writeNonBreakableSpace(int) void LatexGenerator::writeNonBreakableSpace(int)
{ {
//printf("writeNonBreakbleSpace()\n");
if (insideTabbing) if (insideTabbing)
{ {
t << "\\>"; t << "\\>";
m_indent++;
} }
else else
t << "~"; t << "~";
......
...@@ -82,6 +82,8 @@ HEADERS = bufstr.h \ ...@@ -82,6 +82,8 @@ HEADERS = bufstr.h \
printdocvisitor.h \ printdocvisitor.h \
pycode.h \ pycode.h \
pyscanner.h \ pyscanner.h \
fortrancode.h \
fortranscanner.h \
qtbc.h \ qtbc.h \
reflist.h \ reflist.h \
rtfdocvisitor.h \ rtfdocvisitor.h \
...@@ -190,6 +192,8 @@ SOURCES = ce_lex.cpp \ ...@@ -190,6 +192,8 @@ SOURCES = ce_lex.cpp \
pre.cpp \ pre.cpp \
pycode.cpp \ pycode.cpp \
pyscanner.cpp \ pyscanner.cpp \
fortrancode.cpp \
fortranscanner.cpp \
reflist.cpp \ reflist.cpp \
rtfdocvisitor.cpp \ rtfdocvisitor.cpp \
rtfgen.cpp \ rtfgen.cpp \
......
...@@ -57,6 +57,12 @@ sub GenerateDep { ...@@ -57,6 +57,12 @@ sub GenerateDep {
#$ GenerateDep("pycode.cpp","pycode.l"); #$ GenerateDep("pycode.cpp","pycode.l");
$(LEX) -PpycodeYY -t pycode.l | $(INCBUFSIZE) >pycode.cpp $(LEX) -PpycodeYY -t pycode.l | $(INCBUFSIZE) >pycode.cpp
#$ GenerateDep("fortranscanner.cpp","fortranscanner.l");
$(LEX) -i -PfscanYY -t fortranscanner.l | $(INCBUFSIZE) >fortranscanner.cpp
#$ GenerateDep("fortrancode.cpp","fortrancode.l");
$(LEX) -i -PfcodeYY -t fortrancode.l | $(INCBUFSIZE) >fortrancode.cpp
#$ GenerateDep("pre.cpp","pre.l"); #$ GenerateDep("pre.cpp","pre.l");
$(LEX) -PpreYY -t pre.l | $(INCBUFSIZE) >pre.cpp $(LEX) -PpreYY -t pre.l | $(INCBUFSIZE) >pre.cpp
......
...@@ -259,6 +259,10 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -259,6 +259,10 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.endParameterName(TRUE,TRUE,!md->isObjCMethod()); ol.endParameterName(TRUE,TRUE,!md->isObjCMethod());
} }
ol.popGeneratorState(); ol.popGeneratorState();
if (md->extraTypeChars())
{
ol.docify(md->extraTypeChars());
}
if (defArgList->constSpecifier) if (defArgList->constSpecifier)
{ {
ol.docify(" const"); ol.docify(" const");
...@@ -334,6 +338,7 @@ class MemberDefImpl ...@@ -334,6 +338,7 @@ class MemberDefImpl
QCString write; // property write accessor QCString write; // property write accessor
QCString exception; // exceptions that can be thrown QCString exception; // exceptions that can be thrown
QCString initializer; // initializer QCString initializer; // initializer
QCString extraTypeChars; // extra type info found after the argument list
int initLines; // number of lines in the initializer int initLines; // number of lines in the initializer
int memSpec; // The specifiers present for this member int memSpec; // The specifiers present for this member
...@@ -525,7 +530,7 @@ void MemberDefImpl::init(Definition *def, ...@@ -525,7 +530,7 @@ void MemberDefImpl::init(Definition *def,
if (!args.isEmpty()) if (!args.isEmpty())
{ {
declArgList = new ArgumentList; declArgList = new ArgumentList;
stringToArgumentList(args,declArgList); stringToArgumentList(args,declArgList,&extraTypeChars);
//printf("setDeclArgList %s to %p const=%d\n",args.data(), //printf("setDeclArgList %s to %p const=%d\n",args.data(),
// declArgList,declArgList->constSpecifier); // declArgList,declArgList->constSpecifier);
} }
...@@ -725,6 +730,11 @@ QCString MemberDef::getOutputFileBase() const ...@@ -725,6 +730,11 @@ QCString MemberDef::getOutputFileBase() const
QCString MemberDef::getReference() const QCString MemberDef::getReference() const
{ {
makeResident(); makeResident();
QCString ref = Definition::getReference();
if (!ref.isEmpty())
{
return ref;
}
if (m_impl->templateMaster) if (m_impl->templateMaster)
{ {
return m_impl->templateMaster->getReference(); return m_impl->templateMaster->getReference();
...@@ -1406,7 +1416,10 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1406,7 +1416,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
//printf("endMember %s annoClassDef=%p annEnumType=%p\n", //printf("endMember %s annoClassDef=%p annEnumType=%p\n",
// name().data(),annoClassDef,annEnumType); // name().data(),annoClassDef,annEnumType);
ol.endMemberItem(); ol.endMemberItem();
if (endAnonScopeNeeded) ol.endAnonTypeScope(--s_indentLevel); if (endAnonScopeNeeded)
{
ol.endAnonTypeScope(--s_indentLevel);
}
// write brief description // write brief description
if (!briefDescription().isEmpty() && if (!briefDescription().isEmpty() &&
...@@ -2872,6 +2885,7 @@ void MemberDef::setTagInfo(TagInfo *ti) ...@@ -2872,6 +2885,7 @@ void MemberDef::setTagInfo(TagInfo *ti)
if (ti) if (ti)
{ {
makeResident(); makeResident();
//printf("%s: Setting tag name=%s anchor=%s\n",name().data(),ti->tagName.data(),ti->anchor.data());
m_impl->anc=ti->anchor; m_impl->anc=ti->anchor;
setReference(ti->tagName); setReference(ti->tagName);
m_impl->explicitOutputFileBase = stripExtension(ti->fileName); m_impl->explicitOutputFileBase = stripExtension(ti->fileName);
...@@ -2905,7 +2919,13 @@ const char *MemberDef::declaration() const ...@@ -2905,7 +2919,13 @@ const char *MemberDef::declaration() const
const char *MemberDef::definition() const const char *MemberDef::definition() const
{ {
makeResident(); makeResident();
return m_impl->def; return m_impl->def;
}
const char *MemberDef::extraTypeChars() const
{
makeResident();
return m_impl->extraTypeChars;
} }
const char *MemberDef::typeString() const const char *MemberDef::typeString() const
...@@ -3661,6 +3681,7 @@ void MemberDef::flushToDisk() const ...@@ -3661,6 +3681,7 @@ void MemberDef::flushToDisk() const
marshalQCString (Doxygen::symbolStorage,m_impl->write); marshalQCString (Doxygen::symbolStorage,m_impl->write);
marshalQCString (Doxygen::symbolStorage,m_impl->exception); marshalQCString (Doxygen::symbolStorage,m_impl->exception);
marshalQCString (Doxygen::symbolStorage,m_impl->initializer); marshalQCString (Doxygen::symbolStorage,m_impl->initializer);
marshalQCString (Doxygen::symbolStorage,m_impl->extraTypeChars);
marshalInt (Doxygen::symbolStorage,m_impl->initLines); marshalInt (Doxygen::symbolStorage,m_impl->initLines);
marshalInt (Doxygen::symbolStorage,m_impl->memSpec); marshalInt (Doxygen::symbolStorage,m_impl->memSpec);
marshalInt (Doxygen::symbolStorage,(int)m_impl->mtype); marshalInt (Doxygen::symbolStorage,(int)m_impl->mtype);
...@@ -3760,6 +3781,7 @@ void MemberDef::loadFromDisk() const ...@@ -3760,6 +3781,7 @@ void MemberDef::loadFromDisk() const
m_impl->write = unmarshalQCString (Doxygen::symbolStorage); m_impl->write = unmarshalQCString (Doxygen::symbolStorage);
m_impl->exception = unmarshalQCString (Doxygen::symbolStorage); m_impl->exception = unmarshalQCString (Doxygen::symbolStorage);
m_impl->initializer = unmarshalQCString (Doxygen::symbolStorage); m_impl->initializer = unmarshalQCString (Doxygen::symbolStorage);
m_impl->extraTypeChars = unmarshalQCString (Doxygen::symbolStorage);
m_impl->initLines = unmarshalInt (Doxygen::symbolStorage); m_impl->initLines = unmarshalInt (Doxygen::symbolStorage);
m_impl->memSpec = unmarshalInt (Doxygen::symbolStorage); m_impl->memSpec = unmarshalInt (Doxygen::symbolStorage);
m_impl->mtype = (MemberDef::MemberType)unmarshalInt (Doxygen::symbolStorage); m_impl->mtype = (MemberDef::MemberType)unmarshalInt (Doxygen::symbolStorage);
......
...@@ -89,6 +89,7 @@ class MemberDef : public Definition ...@@ -89,6 +89,7 @@ class MemberDef : public Definition
const char *argsString() const; const char *argsString() const;
const char *excpString() const; const char *excpString() const;
const char *bitfieldString() const; const char *bitfieldString() const;
const char *extraTypeChars() const;
const QCString &initializer() const; const QCString &initializer() const;
int initializerLines() const; int initializerLines() const;
int getMemberSpecifiers() const; int getMemberSpecifiers() const;
......
...@@ -148,7 +148,7 @@ QString getMscImageMapFromFile(const QString& inFile, const QString& outDir, ...@@ -148,7 +148,7 @@ QString getMscImageMapFromFile(const QString& inFile, const QString& outDir,
QDir::setCurrent(outDir); QDir::setCurrent(outDir);
//printf("Going to dir %s\n",QDir::currentDirPath().data()); //printf("Going to dir %s\n",QDir::currentDirPath().data());
QCString mscExe = "mscgen"; QCString mscExe = Config_getString("MSCGEN_PATH")+"mscgen"+portable_commandExtension();
QCString mscArgs = "-T ismap -i \""; QCString mscArgs = "-T ismap -i \"";
mscArgs+=inFile + ".msc\" -o \""; mscArgs+=inFile + ".msc\" -o \"";
mscArgs+=outFile + "\""; mscArgs+=outFile + "\"";
......
...@@ -79,7 +79,7 @@ void PageDef::writeDocumentation(OutputList &ol) ...@@ -79,7 +79,7 @@ void PageDef::writeDocumentation(OutputList &ol)
(si=Doxygen::sectionDict.find(pageName))!=0) (si=Doxygen::sectionDict.find(pageName))!=0)
{ {
ol.startSection(si->label,si->title,si->type); ol.startSection(si->label,si->title,si->type);
ol.docify(si->title); ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE);
stringToSearchIndex(getOutputFileBase(), stringToSearchIndex(getOutputFileBase(),
theTranslator->trPage(TRUE,TRUE)+" "+si->title, theTranslator->trPage(TRUE,TRUE)+" "+si->title,
si->title); si->title);
......
...@@ -21,9 +21,11 @@ ...@@ -21,9 +21,11 @@
#include "qtbc.h" #include "qtbc.h"
#include <stdio.h> #include <stdio.h>
//#include <qfile.h> //#include <qfile.h>
#include "define.h"
class BufStr; class BufStr;
DefineDict* getFileDefineDict();
void initPreprocessor(); void initPreprocessor();
void cleanUpPreprocessor(); void cleanUpPreprocessor();
void addSearchDir(const char *dir); void addSearchDir(const char *dir);
......
...@@ -104,6 +104,9 @@ static QStack<bool> g_condStack; ...@@ -104,6 +104,9 @@ static QStack<bool> g_condStack;
static bool g_lexInit = FALSE; static bool g_lexInit = FALSE;
DefineDict* getFileDefineDict() {
return g_fileDefineDict;
}
static void setFileName(const char *name) static void setFileName(const char *name)
{ {
......
...@@ -666,6 +666,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -666,6 +666,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x MemberSpecSkip %x MemberSpecSkip
%x EndTemplate %x EndTemplate
%x FuncPtr %x FuncPtr
%x FuncPtrOperator
%x EndFuncPtr %x EndFuncPtr
%x ReadFuncArgType %x ReadFuncArgType
%x ReadTempArgs %x ReadTempArgs
...@@ -686,6 +687,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -686,6 +687,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x FuncFunc %x FuncFunc
%x FuncFuncEnd %x FuncFuncEnd
%x FuncFuncType %x FuncFuncType
%x FuncFuncArray
%x CopyArgString %x CopyArgString
%x CopyArgPHPString %x CopyArgPHPString
%x CopyArgRound %x CopyArgRound
...@@ -1866,6 +1868,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1866,6 +1868,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
} }
} }
<FindMembers>[0-9]{ID} { // some number where we did not expect one
}
<FindMembers>"." { <FindMembers>"." {
if (insideJava || insideCS || insideD) if (insideJava || insideCS || insideD)
{ {
...@@ -2691,14 +2695,18 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2691,14 +2695,18 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
<IDLProp>. { <IDLProp>. {
} }
<Array>"]" { current->args += *yytext ; <Array>"]" { current->args += *yytext ;
if (--squareCount<=0) if (--squareCount<=0)
BEGIN( FindMembers ) ; BEGIN( FindMembers ) ;
} }
<Array>"[" { current->args += *yytext ; <FuncFuncArray>"]" { current->args += *yytext ;
if (--squareCount<=0)
BEGIN( Function ) ;
}
<Array,FuncFuncArray>"[" { current->args += *yytext ;
squareCount++; squareCount++;
} }
<Array>. { current->args += *yytext ; } <Array,FuncFuncArray>. { current->args += *yytext ; }
<SkipSquare>"[" { squareCount++; } <SkipSquare>"[" { squareCount++; }
<SkipSquare>"]" { <SkipSquare>"]" {
if (--squareCount<=0) if (--squareCount<=0)
...@@ -3155,7 +3163,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3155,7 +3163,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<ReadBody,ReadNSBody,ReadBodyIntf>. { current->program += yytext ; } <ReadBody,ReadNSBody,ReadBodyIntf>. { current->program += yytext ; }
<FindMembers>"("/{BN}*({TSCOPE}{BN}*"::")*{TSCOPE}{BN}*")"{BN}*"(" | /* typedef void (A<int>::func_t)(args...) */ <FindMembers>"("/{BN}*({TSCOPE}{BN}*"::")*{TSCOPE}{BN}*")"{BN}*"(" | /* typedef void (A<int>::func_t)(args...) */
<FindMembers>("("({BN}*{TSCOPE}{BN}*"::")*({BN}*"*"{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) */ <FindMembers>("("({BN}*{TSCOPE}{BN}*"::")*({BN}*[*&]{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) or int (*func(int))[] */
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
lineCount(); lineCount();
addType(current); addType(current);
...@@ -3166,18 +3174,41 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3166,18 +3174,41 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
<FuncPtr>{SCOPENAME} { <FuncPtr>{SCOPENAME} {
current->name = yytext; current->name = yytext;
if (current->name=="const" || current->name=="volatile") if (nameIsOperator(current->name))
{ {
funcPtrType += current->name; BEGIN( FuncPtrOperator );
} }
else else
{ {
BEGIN( EndFuncPtr ); if (current->name=="const" || current->name=="volatile")
{
funcPtrType += current->name;
}
else
{
BEGIN( EndFuncPtr );
}
} }
} }
<FuncPtr>. { <FuncPtr>. {
//printf("Error: FuncPtr `%c' unexpected at line %d of %s\n",*yytext,yyLineNr,yyFileName); //printf("Error: FuncPtr `%c' unexpected at line %d of %s\n",*yytext,yyLineNr,yyFileName);
} }
<FuncPtrOperator>"("{BN}*")"{BN}*/"(" {
current->name += yytext;
current->name = current->name.simplifyWhiteSpace();
lineCount();
}
<FuncPtrOperator>\n {
yyLineNr++;
current->name += *yytext;
}
<FuncPtrOperator>"(" {
unput(*yytext);
BEGIN( EndFuncPtr );
}
<FuncPtrOperator>. {
current->name += *yytext;
}
<EndFuncPtr>")"{BN}*/";" { // a variable with extra braces <EndFuncPtr>")"{BN}*/";" { // a variable with extra braces
lineCount(); lineCount();
current->type+=funcPtrType.data()+1; current->type+=funcPtrType.data()+1;
...@@ -3194,10 +3225,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3194,10 +3225,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->args += ")"; current->args += ")";
BEGIN(FindMembers); BEGIN(FindMembers);
} }
<EndFuncPtr>"(" { // a function returning a function <EndFuncPtr>"(" { // a function returning a function or
// a function returning a pointer to an array
current->args += *yytext ; current->args += *yytext ;
roundCount=0; //roundCount=0;
BEGIN( FuncFunc ); //BEGIN( FuncFunc );
current->bodyLine = yyLineNr;
currentArgumentContext = FuncFuncEnd;
fullArgString=current->args.copy();
copyArgString=&current->args;
BEGIN( ReadFuncArgType ) ;
} }
<EndFuncPtr>"["[^\n\]]*"]" { <EndFuncPtr>"["[^\n\]]*"]" {
funcPtrType+=yytext; funcPtrType+=yytext;
...@@ -3228,6 +3265,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3228,6 +3265,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->type+=funcPtrType.data()+1; current->type+=funcPtrType.data()+1;
BEGIN(Function); BEGIN(Function);
} }
<FuncFuncEnd>")"{BN}*/"[" { // function returning a pointer to an array
lineCount();
current->type+=funcPtrType;
current->args+=")";
BEGIN(FuncFuncArray);
}
<FuncFuncEnd>. { <FuncFuncEnd>. {
current->args += *yytext; current->args += *yytext;
} }
...@@ -3827,31 +3870,27 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3827,31 +3870,27 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
// was: current->args.simplifyWhiteSpace(); // was: current->args.simplifyWhiteSpace();
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
static QRegExp re("([^)]*\\[*&][^)]*)"); // (...*...)
if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) ) if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) )
{ {
int tempArg=current->name.find('<'); int tempArg=current->name.find('<');
QCString tempName; QCString tempName;
static QRegExp re("operator[^a-z_A-Z0-9]");
if (tempArg==-1) tempName=current->name; else tempName=current->name.left(tempArg); if (tempArg==-1) tempName=current->name; else tempName=current->name.left(tempArg);
if (/*(current->type.isEmpty() && tempName.find(re)==-1) || */ if (current->type.isEmpty() &&
current->type.left(8)=="typedef " (current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
)
{ {
//printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n", //printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n", current->type.data(),current->name.data(),current->args.data());
// current->type.data(),current->name.data(),current->args.data());
current->section = Entry::VARIABLE_SEC ; current->section = Entry::VARIABLE_SEC ;
} }
else else
{ {
//printf("Scanner.l: found in class function: `%s' `%s' `%s'\n", //printf("Scanner.l: found in class function: `%s' `%s' `%s'\n", current->type.data(),current->name.data(),current->args.data());
// current->type.data(),current->name.data(),current->args.data());
current->section = Entry::FUNCTION_SEC ; current->section = Entry::FUNCTION_SEC ;
current->proto = *yytext==';'; current->proto = *yytext==';';
} }
} }
else // a global function prototype or function variable else // a global function prototype or function variable
{ {
static QRegExp re("([^)]*\\*[^)]*)"); // (...*...)
//printf("Scanner.l: prototype? type=`%s' name=`%s' args=`%s'\n",current->type.data(),current->name.data(),current->args.data()); //printf("Scanner.l: prototype? type=`%s' name=`%s' args=`%s'\n",current->type.data(),current->name.data(),current->args.data());
if (!current->type.isEmpty() && if (!current->type.isEmpty() &&
(current->type.find(re,0)!=-1 || current->type.left(8)=="typedef ")) (current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
...@@ -4975,14 +5014,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4975,14 +5014,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<Prototype>"operator"{B}*"("{B}*")" { <Prototype>"operator"{B}*"("{B}*")" {
current->name+=yytext; current->name+=yytext;
} }
<Prototype>"(" { <Prototype>"(" {
current->args+=*yytext; current->args+=*yytext;
currentArgumentContext = PrototypeQual; currentArgumentContext = PrototypeQual;
fullArgString = current->args.copy(); fullArgString = current->args.copy();
copyArgString = &current->args; copyArgString = &current->args;
BEGIN( ReadFuncArgType ) ; BEGIN( ReadFuncArgType ) ;
} }
<Prototype>"("({ID}"::")*({B}*"*")+ { <Prototype>"("({ID}"::")*({B}*[&*])+ {
current->type+=current->name+yytext; current->type+=current->name+yytext;
current->name.resize(0); current->name.resize(0);
BEGIN( PrototypePtr ); BEGIN( PrototypePtr );
...@@ -4990,10 +5029,20 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4990,10 +5029,20 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<PrototypePtr>{SCOPENAME} { <PrototypePtr>{SCOPENAME} {
current->name+=yytext; current->name+=yytext;
} }
<PrototypePtr>"(" {
current->args+=*yytext;
currentArgumentContext = PrototypeQual;
fullArgString = current->args.copy();
copyArgString = &current->args;
BEGIN( ReadFuncArgType ) ;
}
<PrototypePtr>")" { <PrototypePtr>")" {
current->type+=')'; current->type+=')';
BEGIN( Prototype ); BEGIN( Prototype );
} }
<PrototypePtr>. {
current->name+=yytext;
}
<PrototypeQual>"{" { <PrototypeQual>"{" {
BEGIN( PrototypeSkipLine); BEGIN( PrototypeSkipLine);
} }
...@@ -5010,7 +5059,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -5010,7 +5059,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->virt = Pure; current->virt = Pure;
current->argList->pureSpecifier=TRUE; current->argList->pureSpecifier=TRUE;
} }
<PrototypeQual>"throw"{B}*"(" { <PrototypeQual>"throw"{B}*"(" {
current->exception = "throw("; current->exception = "throw(";
BEGIN(PrototypeExc); BEGIN(PrototypeExc);
} }
...@@ -5018,10 +5067,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -5018,10 +5067,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->exception += ')'; current->exception += ')';
BEGIN(PrototypeQual); BEGIN(PrototypeQual);
} }
<PrototypeExc>. { <PrototypeExc>. {
current->exception += *yytext; current->exception += *yytext;
} }
<Prototype,PrototypeQual>. { <PrototypeQual>. {
current->args += *yytext;
}
<Prototype>. {
current->name += *yytext; current->name += *yytext;
} }
<PrototypeSkipLine>. { <PrototypeSkipLine>. {
......
This diff is collapsed.
...@@ -234,7 +234,7 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te ...@@ -234,7 +234,7 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te
QCString stripScope(const char *name); QCString stripScope(const char *name);
QCString convertToHtml(const char *s); QCString convertToHtml(const char *s,bool keepEntities=TRUE);
QCString convertToXML(const char *s); QCString convertToXML(const char *s);
......
...@@ -1170,6 +1170,8 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -1170,6 +1170,8 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
if (cd->name().find('@')!=-1) return; // skip anonymous compounds. if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
if (cd->templateMaster()!=0) return; // skip generated template instances. if (cd->templateMaster()!=0) return; // skip generated template instances.
msg("Generating XML output for class %s\n",cd->name().data());
ti << " <compound refid=\"" << cd->getOutputFileBase() ti << " <compound refid=\"" << cd->getOutputFileBase()
<< "\" kind=\"" << cd->compoundTypeString() << "\" kind=\"" << cd->compoundTypeString()
<< "\"><name>" << convertToXML(cd->name()) << "</name>" << endl; << "\"><name>" << convertToXML(cd->name()) << "</name>" << endl;
...@@ -1886,7 +1888,6 @@ void generateXML() ...@@ -1886,7 +1888,6 @@ void generateXML()
ClassDef *cd; ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli) for (cli.toFirst();(cd=cli.current());++cli)
{ {
msg("Generating XML output for class %s\n",cd->name().data());
generateXMLForClass(cd,t); generateXMLForClass(cd,t);
} }
} }
......
...@@ -1504,6 +1504,30 @@ ...@@ -1504,6 +1504,30 @@
/> />
</FileConfiguration> </FileConfiguration>
</File> </File>
<File
RelativePath="..\src\fortrancode.cpp"
>
</File>
<File
RelativePath="..\src\fortrancode.l"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="Lex"
CommandLine="flex -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="Lex"
CommandLine="flex -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
</File>
<File <File
RelativePath="..\src\pyscanner.cpp" RelativePath="..\src\pyscanner.cpp"
> >
...@@ -1528,6 +1552,30 @@ ...@@ -1528,6 +1552,30 @@
/> />
</FileConfiguration> </FileConfiguration>
</File> </File>
<File
RelativePath="..\src\fortranscanner.cpp"
>
</File>
<File
RelativePath="..\src\fortranscanner.l"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="Lex"
CommandLine="flex -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="Lex"
CommandLine="flex -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
</File>
<File <File
RelativePath="..\src\reflist.cpp" RelativePath="..\src\reflist.cpp"
> >
...@@ -2095,10 +2143,18 @@ ...@@ -2095,10 +2143,18 @@
RelativePath="..\src\pycode.h" RelativePath="..\src\pycode.h"
> >
</File> </File>
<File
RelativePath="..\src\fortrancode.h"
>
</File>
<File <File
RelativePath="..\src\pyscanner.h" RelativePath="..\src\pyscanner.h"
> >
</File> </File>
<File
RelativePath="..\src\fortranscanner.h"
>
</File>
<File <File
RelativePath="..\src\qtbc.h" RelativePath="..\src\qtbc.h"
> >
......
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