summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2011-12-03 18:14:19 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2011-12-03 18:14:19 (GMT)
commitcfb38c32173c3a16dc1c8e868b4cc23a68ed28b8 (patch)
tree018e8f5de990aedc2ea2b98065d07bc92253a8f1
parent4edf2204046b915a6244cde9be0df3ff60e312cb (diff)
downloadDoxygen-cfb38c32173c3a16dc1c8e868b4cc23a68ed28b8.zip
Doxygen-cfb38c32173c3a16dc1c8e868b4cc23a68ed28b8.tar.gz
Doxygen-cfb38c32173c3a16dc1c8e868b4cc23a68ed28b8.tar.bz2
Release-1.7.6
-rw-r--r--INSTALL4
-rw-r--r--README4
-rwxr-xr-xconfigure4
-rw-r--r--doc/config.doc6
-rw-r--r--src/classdef.cpp24
-rw-r--r--src/classdef.h7
-rw-r--r--src/commentscan.l3
-rw-r--r--src/config.l24
-rw-r--r--src/config.xml7
-rw-r--r--src/configoptions.cpp7
-rw-r--r--src/dirdef.cpp2
-rw-r--r--src/docparser.cpp10
-rw-r--r--src/docparser.h22
-rw-r--r--src/dot.cpp34
-rw-r--r--src/doxygen.cpp2
-rw-r--r--src/doxygen.css2
-rw-r--r--src/doxygen_css.h2
-rw-r--r--src/htmldocvisitor.cpp29
-rw-r--r--src/pre.l62
-rw-r--r--src/scanner.l2
20 files changed, 184 insertions, 73 deletions
diff --git a/INSTALL b/INSTALL
index 30d34f6..95047af 100644
--- a/INSTALL
+++ b/INSTALL
@@ -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)
diff --git a/README b/README
index 08d7273..c1dd455 100644
--- a/README
+++ b/README
@@ -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)
diff --git a/configure b/configure
index aad688b..31e9607 100755
--- a/configure
+++ b/configure
@@ -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);
diff --git a/src/pre.l b/src/pre.l
index ac1c51b..a75a51c 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -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);