diff options
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | README | 4 | ||||
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | doc/config.doc | 6 | ||||
-rw-r--r-- | src/classdef.cpp | 24 | ||||
-rw-r--r-- | src/classdef.h | 7 | ||||
-rw-r--r-- | src/commentscan.l | 3 | ||||
-rw-r--r-- | src/config.l | 24 | ||||
-rw-r--r-- | src/config.xml | 7 | ||||
-rw-r--r-- | src/configoptions.cpp | 7 | ||||
-rw-r--r-- | src/dirdef.cpp | 2 | ||||
-rw-r--r-- | src/docparser.cpp | 10 | ||||
-rw-r--r-- | src/docparser.h | 22 | ||||
-rw-r--r-- | src/dot.cpp | 34 | ||||
-rw-r--r-- | src/doxygen.cpp | 2 | ||||
-rw-r--r-- | src/doxygen.css | 2 | ||||
-rw-r--r-- | src/doxygen_css.h | 2 | ||||
-rw-r--r-- | src/htmldocvisitor.cpp | 29 | ||||
-rw-r--r-- | src/pre.l | 62 | ||||
-rw-r--r-- | src/scanner.l | 2 |
20 files changed, 184 insertions, 73 deletions
@@ -1,7 +1,7 @@ -DOXYGEN Version 1.7.5.1-20111119 +DOXYGEN Version 1.7.6 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (19 November 2011) +Dimitri van Heesch (03 December 2011) @@ -1,4 +1,4 @@ -DOXYGEN Version 1.7.5.1_20111119 +DOXYGEN Version 1.7.6 Please read INSTALL for compilation instructions. @@ -26,4 +26,4 @@ forum. Enjoy, -Dimitri van Heesch (dimitri@stack.nl) (19 November 2011) +Dimitri van Heesch (dimitri@stack.nl) (03 December 2011) @@ -17,10 +17,10 @@ doxygen_version_major=1 doxygen_version_minor=7 -doxygen_version_revision=5.1 +doxygen_version_revision=6 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. -doxygen_version_mmn=20111119 +doxygen_version_mmn=NO bin_dirs=`echo $PATH | sed -e "s/:/ /g"` diff --git a/doc/config.doc b/doc/config.doc index 022f4cd..bf81121 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -1075,15 +1075,15 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" \anchor cfg_exclude <dt>\c EXCLUDE <dd> \addindex EXCLUDE - The \c EXCLUDE tag can be used to specify files and/or directories that should + The \c EXCLUDE tag can be used to specify files and/or directories that should be excluded from the \c INPUT source files. This way you can easily exclude a subdirectory from a directory tree whose root is specified with the \c INPUT tag. - Note that relative paths are relative to directory from which doxygen is run. + Note that relative paths are relative to the directory from which doxygen is run. \anchor cfg_exclude_symlinks <dt>\c EXCLUDE_SYMLINKS <dd> \addindex EXCLUDE_SYMLINKS - The \c EXCLUDE_SYMLINKS tag can be used select whether or not files or directories + The \c EXCLUDE_SYMLINKS tag can be used to select whether or not files or directories that are symbolic links (a Unix file system feature) are excluded from the input. \anchor cfg_exclude_patterns diff --git a/src/classdef.cpp b/src/classdef.cpp index fd3aedf..cc9a617 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -180,6 +180,9 @@ class ClassDefImpl ClassList *taggedInnerClasses; ClassDef *tagLessRef; + + /** Does this class represent a Java style enum? */ + bool isJavaEnum; }; void ClassDefImpl::init(const char *defFileName, const char *name, @@ -270,13 +273,14 @@ ClassDef::ClassDef( const char *defFileName,int defLine, const char *nm,CompoundType ct, const char *lref,const char *fName, - bool isSymbol) + bool isSymbol,bool isJavaEnum) : Definition(defFileName,defLine,removeRedundantWhiteSpace(nm),0,0,isSymbol) { visited=FALSE; setReference(lref); m_impl = new ClassDefImpl; m_impl->compType = ct; + m_impl->isJavaEnum = isJavaEnum; m_impl->init(defFileName,name(),compoundTypeString(),fName); } @@ -1015,6 +1019,13 @@ void ClassDef::showUsedFiles(OutputList &ol) getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType, m_impl->files.count()==1)); } + else if (isJavaEnum()) + { + // TODO: TRANSLATE ME + QCString s; + if (m_impl->files.count()!=1) s="s"; + ol.parseText("The documentation for this enum was generated from the following file"+s+":"); + } else { ol.parseText(theTranslator->trGeneratedFromFiles( @@ -1939,6 +1950,11 @@ void ClassDef::writeDocumentation(OutputList &ol) // TODO: TRANSLATE ME pageTitle = VhdlDocGen::getClassTitle(this)+" Reference"; } + else if (isJavaEnum()) + { + // TODO: TRANSLATE ME + pageTitle = displayName()+" Enum Reference"; + } else { pageTitle = theTranslator->trCompoundReference(displayName(), @@ -3166,7 +3182,7 @@ QCString ClassDef::compoundTypeString() const { switch (m_impl->compType) { - case Class: return "class"; + case Class: return isJavaEnum() ? "enum" : "class"; case Struct: return "struct"; case Union: return "union"; case Interface: return getLanguage()==SrcLangExt_ObjC ? "class" : "interface"; @@ -4027,3 +4043,7 @@ void ClassDef::removeMemberFromLists(MemberDef *md) } } +bool ClassDef::isJavaEnum() const +{ + return m_impl->isJavaEnum; +} diff --git a/src/classdef.h b/src/classdef.h index 13f1157..d92b5a6 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -79,11 +79,14 @@ class ClassDef : public Definition * generates based on the compound type & name. * \param isSymbol If TRUE this class name is added as a publicly * visible (and referencable) symbol. + * \param isJavaEnum If TRUE this class is actually a Java enum. + * I didn't add this to CompoundType to avoid having + * to adapt all translators. */ ClassDef(const char *fileName,int startLine, const char *name,CompoundType ct, const char *ref=0,const char *fName=0, - bool isSymbol=TRUE); + bool isSymbol=TRUE,bool isJavaEnum=FALSE); /*! Destroys a compound definition. */ ~ClassDef(); @@ -273,6 +276,8 @@ class ClassDef : public Definition MemberDef *isSmartPointer() const; + bool isJavaEnum() const; + //----------------------------------------------------------------------------------- // --- setters ---- //----------------------------------------------------------------------------------- diff --git a/src/commentscan.l b/src/commentscan.l index c37b3dc..8ea61ce 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -811,7 +811,8 @@ OL [oO][lL] DL [dD][lL] IMG [iI][mM][gG] HR [hH][rR] -DETAILEDHTML {PRE}|{UL}|{TABLE}|{OL}|{DL}|{P}|[Hh][1-6]|{IMG}|{HR} +PARA [pP][aA][rR][aA] +DETAILEDHTML {PRE}|{UL}|{TABLE}|{OL}|{DL}|{P}|[Hh][1-6]|{IMG}|{HR}|{PARA} BN [ \t\n\r] BL [ \t\r]*"\n" B [ \t] diff --git a/src/config.l b/src/config.l index 7d3f633..3c22571 100644 --- a/src/config.l +++ b/src/config.l @@ -1223,20 +1223,28 @@ void Config::check() QCString &dotPath = Config_getString("DOT_PATH"); if (!dotPath.isEmpty()) { - QFileInfo dp(dotPath+"/dot"+portable_commandExtension()); - if (!dp.exists() || !dp.isFile()) + QFileInfo fi(dotPath); + if (fi.exists() && fi.isFile()) // user specified path + exec { - config_err("warning: the dot tool could not be found at %s\n",dotPath.data()); - dotPath=""; + dotPath=fi.dirPath(TRUE); } else { - dotPath=dp.dirPath(TRUE)+"/"; + QFileInfo dp(dotPath+"/dot"+portable_commandExtension()); + if (!dp.exists() || !dp.isFile()) + { + config_err("warning: the dot tool could not be found at %s\n",dotPath.data()); + dotPath=""; + } + else + { + dotPath=dp.dirPath(TRUE)+"/"; + } + } #if defined(_WIN32) // convert slashes - uint i=0,l=dotPath.length(); - for (i=0;i<l;i++) if (dotPath.at(i)=='/') dotPath.at(i)='\\'; + uint i=0,l=dotPath.length(); + for (i=0;i<l;i++) if (dotPath.at(i)=='/') dotPath.at(i)='\\'; #endif - } } else // make sure the string is empty but not null! { diff --git a/src/config.xml b/src/config.xml index 5ce921c..50867b2 100644 --- a/src/config.xml +++ b/src/config.xml @@ -645,14 +645,15 @@ should be searched for input files as well. Possible values are YES and NO. If left blank NO is used. ' defval='0'/> <option type='list' id='EXCLUDE' format='filedir' docs=' -The EXCLUDE tag can be used to specify files and/or directories that should +The EXCLUDE tag can be used to specify files and/or directories that should be excluded from the INPUT source files. This way you can easily exclude a subdirectory from a directory tree whose root is specified with the INPUT tag. -Note that relative paths are relative to directory from which doxygen is run. +Note that relative paths are relative to the directory from which doxygen is +run. '> </option> <option type='bool' id='EXCLUDE_SYMLINKS' docs=' -The EXCLUDE_SYMLINKS tag can be used select whether or not files or +The EXCLUDE_SYMLINKS tag can be used to select whether or not files or directories that are symbolic links (a Unix file system feature) are excluded from the input. ' defval='0'/> diff --git a/src/configoptions.cpp b/src/configoptions.cpp index f696b2a..79c4aa9 100644 --- a/src/configoptions.cpp +++ b/src/configoptions.cpp @@ -916,16 +916,17 @@ void addConfigOptions(Config *cfg) //---- cl = cfg->addList( "EXCLUDE", - "The EXCLUDE tag can be used to specify files and/or directories that should\n" + "The EXCLUDE tag can be used to specify files and/or directories that should be\n" "excluded from the INPUT source files. This way you can easily exclude a\n" "subdirectory from a directory tree whose root is specified with the INPUT tag.\n" - "Note that relative paths are relative to directory from which doxygen is run." + "Note that relative paths are relative to the directory from which doxygen is\n" + "run." ); cl->setWidgetType(ConfigList::FileAndDir); //---- cb = cfg->addBool( "EXCLUDE_SYMLINKS", - "The EXCLUDE_SYMLINKS tag can be used select whether or not files or\n" + "The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n" "directories that are symbolic links (a Unix file system feature) are excluded\n" "from the input.", FALSE diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 4833c7e..582bdb0 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -184,7 +184,7 @@ void DirDef::writeBriefDescription(OutputList &ol) void DirDef::writeDirectoryGraph(OutputList &ol) { // write graph dependency graph - if (/*Config_getBool("DIRECTORY_GRAPH") &&*/ Config_getBool("HAVE_DOT")) + if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT")) { DotDirDeps dirDep(this); if (!dirDep.isTrivial()) diff --git a/src/docparser.cpp b/src/docparser.cpp index 17c1461..480a77a 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -962,7 +962,7 @@ static int handleAHref(DocNode *parent,QList<DocNode> &children,const HtmlAttrib // and remove the href attribute bool result = attrList.remove(index); ASSERT(result); - DocHRef *href = new DocHRef(parent,attrList,opt->value); + DocHRef *href = new DocHRef(parent,attrList,opt->value,g_relPath); children.append(href); g_insideHtmlLink=TRUE; retval = href->parse(); @@ -2740,9 +2740,11 @@ void DocMscFile::parse() //--------------------------------------------------------------------------- -DocImage::DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString &name,Type t) : +DocImage::DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString &name, + Type t,const QCString &url) : m_attribs(attribs), m_name(name), - m_type(t), m_relPath(g_relPath) + m_type(t), m_relPath(g_relPath), + m_url(url) { m_parent = parent; } @@ -5463,7 +5465,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta // and remove the src attribute bool result = attrList.remove(index); ASSERT(result); - DocImage *img = new DocImage(this,attrList,opt->value,DocImage::Html); + DocImage *img = new DocImage(this,attrList,opt->value,DocImage::Html,opt->value); m_children.append(img); found = TRUE; } diff --git a/src/docparser.h b/src/docparser.h index f679bfb..7c0c6a9 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -590,14 +590,16 @@ class DocImage : public CompAccept<DocImage>, public DocNode { public: enum Type { Html, Latex, Rtf }; - DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString &name,Type t); - Kind kind() const { return Kind_Image; } - Type type() const { return m_type; } + DocImage(DocNode *parent,const HtmlAttribList &attribs, + const QCString &name,Type t,const QCString &url=QCString()); + Kind kind() const { return Kind_Image; } + Type type() const { return m_type; } QCString name() const { return m_name; } - bool hasCaption() const { return !m_children.isEmpty(); } + bool hasCaption() const { return !m_children.isEmpty(); } QCString width() const { return m_width; } QCString height() const { return m_height; } QCString relPath() const { return m_relPath; } + QCString url() const { return m_url; } const HtmlAttribList &attribs() const { return m_attribs; } void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); } void parse(); @@ -609,6 +611,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode QCString m_width; QCString m_height; QCString m_relPath; + QCString m_url; }; /*! @brief Node representing a dot file */ @@ -747,17 +750,20 @@ class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode class DocHRef : public CompAccept<DocHRef>, public DocNode { public: - DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QCString &url) : - m_attribs(attribs), m_url(url) { m_parent = parent; } + DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QCString &url, + const QCString &relPath) : + m_attribs(attribs), m_url(url), m_relPath(relPath) { m_parent = parent; } int parse(); QCString url() const { return m_url; } - Kind kind() const { return Kind_HRef; } - void accept(DocVisitor *v) { CompAccept<DocHRef>::accept(this,v); } + QCString relPath() const { return m_relPath; } + Kind kind() const { return Kind_HRef; } + void accept(DocVisitor *v) { CompAccept<DocHRef>::accept(this,v); } const HtmlAttribList &attribs() const { return m_attribs; } private: HtmlAttribList m_attribs; QCString m_url; + QCString m_relPath; }; /*! @brief Node Html heading */ diff --git a/src/dot.cpp b/src/dot.cpp index e72bf45..5d21b43 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -1524,15 +1524,35 @@ static void writeBoxMemberList(FTextStream &t, { MemberListIterator mlia(*ml); MemberDef *mma; + int totalCount=0; for (mlia.toFirst();(mma = mlia.current());++mlia) { if (mma->getClassDef() == scope) { - t << prot << " "; - t << convertLabel(mma->name()); - if (!mma->isObjCMethod() && - (mma->isFunction() || mma->isSlot() || mma->isSignal())) t << "()"; - t << "\\l"; + totalCount++; + } + } + + int count=0; + for (mlia.toFirst();(mma = mlia.current());++mlia) + { + if (mma->getClassDef() == scope) + { + if (totalCount>=15 && count>=10) + { + t << "and " << (totalCount-count-1) << " more..."; + // TODO: TRANSLATE ME + break; + } + else + { + t << prot << " "; + t << convertLabel(mma->name()); + if (!mma->isObjCMethod() && + (mma->isFunction() || mma->isSlot() || mma->isSignal())) t << "()"; + t << "\\l"; + count++; + } } } // write member groups within the memberlist @@ -1564,9 +1584,9 @@ void DotNode::writeBox(FTextStream &t, (hasNonReachableChildren) ? "red" : "black" ); t << " Node" << reNumberNode(m_number,reNumber) << " [label=\""; + static bool umlLook = Config_getBool("UML_LOOK"); - if (m_classDef && Config_getBool("UML_LOOK") && - (gt==Inheritance || gt==Collaboration)) + if (m_classDef && umlLook && (gt==Inheritance || gt==Collaboration)) { //printf("DotNode::writeBox for %s\n",m_classDef->name().data()); static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 1979e1b..478c6f0 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1191,7 +1191,7 @@ static void addClassToContext(EntryNav *rootNav) refFileName = rootNav->tagInfo()->fileName; } cd=new ClassDef(root->fileName,root->startLine,fullName,sec, - tagName,refFileName); + tagName,refFileName,TRUE,root->spec&Entry::Enum); 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); cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition diff --git a/src/doxygen.css b/src/doxygen.css index 8b6f3ae..6c75976 100644 --- a/src/doxygen.css +++ b/src/doxygen.css @@ -123,7 +123,7 @@ a.elRef { } a.code { - color: ##60; + color: #4665A2; } a.codeRef { diff --git a/src/doxygen_css.h b/src/doxygen_css.h index 00e211b..bdc0ada 100644 --- a/src/doxygen_css.h +++ b/src/doxygen_css.h @@ -123,7 +123,7 @@ "}\n" "\n" "a.code {\n" -" color: ##60;\n" +" color: #4665A2; \n" "}\n" "\n" "a.codeRef {\n" diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index e3e5b08..a35d92a 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -1209,7 +1209,12 @@ void HtmlDocVisitor::visitPost(DocInternal *) void HtmlDocVisitor::visitPre(DocHRef *href) { if (m_hide) return; - m_t << "<a href=\"" << convertToXML(href->url()) << "\"" + QCString url = href->url(); + if (url.left(5)!="http:" && url.left(6)!="https:" && url.left(4)!="ftp:") + { + url.prepend(href->relPath()); + } + m_t << "<a href=\"" << convertToXML(url) << "\"" << htmlAttribsToString(href->attribs()) << ">"; } @@ -1247,9 +1252,23 @@ void HtmlDocVisitor::visitPre(DocImage *img) baseName=baseName.right(baseName.length()-i-1); } m_t << "<div class=\"image\">" << endl; - m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\"" - << baseName << "\"" << htmlAttribsToString(img->attribs()) - << "/>" << endl; + QCString url = img->url(); + if (url.isEmpty()) + { + m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\"" + << baseName << "\"" << htmlAttribsToString(img->attribs()) + << "/>" << endl; + } + else + { + if (url.left(5)!="http:" && url.left(6)!="https:" && url.left(4)!="ftp:") + { + url.prepend(img->relPath()); + } + m_t << "<img src=\"" << url << "\" " + << htmlAttribsToString(img->attribs()) + << "/>" << endl; + } if (img->hasCaption()) { m_t << "<div class=\"caption\">" << endl; @@ -1425,7 +1444,7 @@ void HtmlDocVisitor::visitPre(DocParamSect *s) className="exception"; break; case DocParamSect::TemplateParam: - heading="Template Parameters"; break; // TODO: translate me + heading="Template Parameters"; break; // TODO: TRANSLATE ME className="tparams"; default: ASSERT(0); @@ -204,7 +204,7 @@ DefineManager *DefineManager::theInstance = 0; void DefineManager::DefinesPerFile::collectDefines(DefineDict *dict,QDict<void> &includeStack) { - //printf("DefinesPerFile::collectDefines\n"); + //printf("DefinesPerFile::collectDefines #defines=%d\n",m_defines.count()); { QDictIterator<void> di(m_includedFiles); for (di.toFirst();(di.current());++di) @@ -1439,6 +1439,7 @@ static void readIncludeFile(const QCString &inc) // absIncFileName avoids difficulties for incFileName starting with "../" (bug 641336) QCString absIncFileName = incFileName; { + static bool searchIncludes = Config_getBool("SEARCH_INCLUDES"); QFileInfo fi(g_yyFileName); if (fi.exists()) { @@ -1447,8 +1448,29 @@ static void readIncludeFile(const QCString &inc) if (fi2.exists()) { absIncFileName=fi2.absFilePath(); - } - //printf( "absIncFileName = %s\n", absIncFileName.data() ); + } + else if (searchIncludes) // search in INCLUDE_PATH as well + { + QStrList &includePath = Config_getList("INCLUDE_PATH"); + char *s=includePath.first(); + while (s) + { + QFileInfo fi(s); + if (fi.exists() && fi.isDir()) + { + QCString absName = QCString(fi.absFilePath())+"/"+incFileName; + //printf("trying absName=%s\n",absName.data()); + QFileInfo fi2(absName); + if (fi2.exists()) + { + absIncFileName=fi2.absFilePath(); + break; + } + //printf( "absIncFileName = %s\n", absIncFileName.data() ); + } + } + } + //printf( "absIncFileName = %s\n", absIncFileName.data() ); } } DefineManager::instance().addInclude(g_yyFileName,absIncFileName); @@ -2185,6 +2207,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) g_defName = yytext; g_defName = g_defName.left(g_defName.length()-1).stripWhiteSpace(); g_defVarArgs = FALSE; + //printf("Guard check: %s!=%s || %d\n", + // g_defName.data(),g_lastGuardName.data(),g_expectGuard); if ( g_defName!=g_lastGuardName || !g_expectGuard) { // define may appear in the output QCString tmp=(QCString)"#define "+g_defName; @@ -2198,25 +2222,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } else // define is a guard => hide { + //printf("Found a guard %s\n",yytext); g_defText.resize(0); g_defLitText.resize(0); BEGIN(Start); } - } -<DefName>{ID}/{B}* { // define with content - //printf("Define `%s'\n",yytext); - g_argDict = 0; - g_defArgs = -1; - g_defArgsStr.resize(0); - g_defText.resize(0); - g_defLitText.resize(0); - g_defName = yytext; - g_defVarArgs = FALSE; - QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr; - outputArray(tmp.data(),tmp.length()); - g_quoteArg=FALSE; - g_insideComment=FALSE; - BEGIN(DefineText); + g_expectGuard=FALSE; } <DefName>{ID}/{B}*"\n" { // empty define g_argDict = 0; @@ -2246,6 +2257,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } g_expectGuard=FALSE; } +<DefName>{ID}/{B}* { // define with content + //printf("Define `%s'\n",yytext); + g_argDict = 0; + g_defArgs = -1; + g_defArgsStr.resize(0); + g_defText.resize(0); + g_defLitText.resize(0); + g_defName = yytext; + g_defVarArgs = FALSE; + QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr; + outputArray(tmp.data(),tmp.length()); + g_quoteArg=FALSE; + g_insideComment=FALSE; + BEGIN(DefineText); + } <DefineArg>"\\\n" { g_defExtraSpacing+="\n"; g_yyLineNr++; diff --git a/src/scanner.l b/src/scanner.l index 9cb8031..05b6fc9 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -2871,11 +2871,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } if ( *yytext == ',') { + bool stat = current->stat; if (needNewCurrent) { current = new Entry(*current); initEntry(); } + current->stat = stat; // the static attribute holds for all variables current->name.resize(0); current->args.resize(0); current->brief.resize(0); |