Commit e48f695c authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.7.6

parent 645cc7c6
DOXYGEN Version 1.7.5.1-20111119 DOXYGEN Version 1.7.6
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 (19 November 2011) Dimitri van Heesch (03 December 2011)
DOXYGEN Version 1.7.5.1_20111119 DOXYGEN Version 1.7.6
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -26,4 +26,4 @@ forum. ...@@ -26,4 +26,4 @@ forum.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (19 November 2011) Dimitri van Heesch (dimitri@stack.nl) (03 December 2011)
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
doxygen_version_major=1 doxygen_version_major=1
doxygen_version_minor=7 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. #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"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -1075,15 +1075,15 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ...@@ -1075,15 +1075,15 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
\anchor cfg_exclude \anchor cfg_exclude
<dt>\c EXCLUDE <dd> <dt>\c EXCLUDE <dd>
\addindex EXCLUDE \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 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. 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 \anchor cfg_exclude_symlinks
<dt>\c EXCLUDE_SYMLINKS <dd> <dt>\c EXCLUDE_SYMLINKS <dd>
\addindex EXCLUDE_SYMLINKS \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. that are symbolic links (a Unix file system feature) are excluded from the input.
\anchor cfg_exclude_patterns \anchor cfg_exclude_patterns
......
...@@ -180,6 +180,9 @@ class ClassDefImpl ...@@ -180,6 +180,9 @@ class ClassDefImpl
ClassList *taggedInnerClasses; ClassList *taggedInnerClasses;
ClassDef *tagLessRef; ClassDef *tagLessRef;
/** Does this class represent a Java style enum? */
bool isJavaEnum;
}; };
void ClassDefImpl::init(const char *defFileName, const char *name, void ClassDefImpl::init(const char *defFileName, const char *name,
...@@ -270,13 +273,14 @@ ClassDef::ClassDef( ...@@ -270,13 +273,14 @@ ClassDef::ClassDef(
const char *defFileName,int defLine, const char *defFileName,int defLine,
const char *nm,CompoundType ct, const char *nm,CompoundType ct,
const char *lref,const char *fName, const char *lref,const char *fName,
bool isSymbol) bool isSymbol,bool isJavaEnum)
: Definition(defFileName,defLine,removeRedundantWhiteSpace(nm),0,0,isSymbol) : Definition(defFileName,defLine,removeRedundantWhiteSpace(nm),0,0,isSymbol)
{ {
visited=FALSE; visited=FALSE;
setReference(lref); setReference(lref);
m_impl = new ClassDefImpl; m_impl = new ClassDefImpl;
m_impl->compType = ct; m_impl->compType = ct;
m_impl->isJavaEnum = isJavaEnum;
m_impl->init(defFileName,name(),compoundTypeString(),fName); m_impl->init(defFileName,name(),compoundTypeString(),fName);
} }
...@@ -1015,6 +1019,13 @@ void ClassDef::showUsedFiles(OutputList &ol) ...@@ -1015,6 +1019,13 @@ void ClassDef::showUsedFiles(OutputList &ol)
getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType, getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType,
m_impl->files.count()==1)); 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 else
{ {
ol.parseText(theTranslator->trGeneratedFromFiles( ol.parseText(theTranslator->trGeneratedFromFiles(
...@@ -1939,6 +1950,11 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1939,6 +1950,11 @@ void ClassDef::writeDocumentation(OutputList &ol)
// TODO: TRANSLATE ME // TODO: TRANSLATE ME
pageTitle = VhdlDocGen::getClassTitle(this)+" Reference"; pageTitle = VhdlDocGen::getClassTitle(this)+" Reference";
} }
else if (isJavaEnum())
{
// TODO: TRANSLATE ME
pageTitle = displayName()+" Enum Reference";
}
else else
{ {
pageTitle = theTranslator->trCompoundReference(displayName(), pageTitle = theTranslator->trCompoundReference(displayName(),
...@@ -3166,7 +3182,7 @@ QCString ClassDef::compoundTypeString() const ...@@ -3166,7 +3182,7 @@ QCString ClassDef::compoundTypeString() const
{ {
switch (m_impl->compType) switch (m_impl->compType)
{ {
case Class: return "class"; case Class: return isJavaEnum() ? "enum" : "class";
case Struct: return "struct"; case Struct: return "struct";
case Union: return "union"; case Union: return "union";
case Interface: return getLanguage()==SrcLangExt_ObjC ? "class" : "interface"; case Interface: return getLanguage()==SrcLangExt_ObjC ? "class" : "interface";
...@@ -4027,3 +4043,7 @@ void ClassDef::removeMemberFromLists(MemberDef *md) ...@@ -4027,3 +4043,7 @@ void ClassDef::removeMemberFromLists(MemberDef *md)
} }
} }
bool ClassDef::isJavaEnum() const
{
return m_impl->isJavaEnum;
}
...@@ -79,11 +79,14 @@ class ClassDef : public Definition ...@@ -79,11 +79,14 @@ class ClassDef : public Definition
* generates based on the compound type & name. * generates based on the compound type & name.
* \param isSymbol If TRUE this class name is added as a publicly * \param isSymbol If TRUE this class name is added as a publicly
* visible (and referencable) symbol. * 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, ClassDef(const char *fileName,int startLine,
const char *name,CompoundType ct, const char *name,CompoundType ct,
const char *ref=0,const char *fName=0, const char *ref=0,const char *fName=0,
bool isSymbol=TRUE); bool isSymbol=TRUE,bool isJavaEnum=FALSE);
/*! Destroys a compound definition. */ /*! Destroys a compound definition. */
~ClassDef(); ~ClassDef();
...@@ -273,6 +276,8 @@ class ClassDef : public Definition ...@@ -273,6 +276,8 @@ class ClassDef : public Definition
MemberDef *isSmartPointer() const; MemberDef *isSmartPointer() const;
bool isJavaEnum() const;
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
// --- setters ---- // --- setters ----
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
......
...@@ -811,7 +811,8 @@ OL [oO][lL] ...@@ -811,7 +811,8 @@ OL [oO][lL]
DL [dD][lL] DL [dD][lL]
IMG [iI][mM][gG] IMG [iI][mM][gG]
HR [hH][rR] 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] BN [ \t\n\r]
BL [ \t\r]*"\n" BL [ \t\r]*"\n"
B [ \t] B [ \t]
......
...@@ -1223,20 +1223,28 @@ void Config::check() ...@@ -1223,20 +1223,28 @@ void Config::check()
QCString &dotPath = Config_getString("DOT_PATH"); QCString &dotPath = Config_getString("DOT_PATH");
if (!dotPath.isEmpty()) if (!dotPath.isEmpty())
{ {
QFileInfo dp(dotPath+"/dot"+portable_commandExtension()); QFileInfo fi(dotPath);
if (!dp.exists() || !dp.isFile()) 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=fi.dirPath(TRUE);
dotPath="";
} }
else 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 #if defined(_WIN32) // convert slashes
uint i=0,l=dotPath.length(); uint i=0,l=dotPath.length();
for (i=0;i<l;i++) if (dotPath.at(i)=='/') dotPath.at(i)='\\'; for (i=0;i<l;i++) if (dotPath.at(i)=='/') dotPath.at(i)='\\';
#endif #endif
}
} }
else // make sure the string is empty but not null! else // make sure the string is empty but not null!
{ {
......
...@@ -645,14 +645,15 @@ should be searched for input files as well. Possible values are YES and NO. ...@@ -645,14 +645,15 @@ should be searched for input files as well. Possible values are YES and NO.
If left blank NO is used. If left blank NO is used.
' defval='0'/> ' defval='0'/>
<option type='list' id='EXCLUDE' format='filedir' docs=' <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 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. 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>
<option type='bool' id='EXCLUDE_SYMLINKS' docs=' <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 directories that are symbolic links (a Unix file system feature) are excluded
from the input. from the input.
' defval='0'/> ' defval='0'/>
......
...@@ -916,16 +916,17 @@ void addConfigOptions(Config *cfg) ...@@ -916,16 +916,17 @@ void addConfigOptions(Config *cfg)
//---- //----
cl = cfg->addList( cl = cfg->addList(
"EXCLUDE", "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" "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" "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); cl->setWidgetType(ConfigList::FileAndDir);
//---- //----
cb = cfg->addBool( cb = cfg->addBool(
"EXCLUDE_SYMLINKS", "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" "directories that are symbolic links (a Unix file system feature) are excluded\n"
"from the input.", "from the input.",
FALSE FALSE
......
...@@ -184,7 +184,7 @@ void DirDef::writeBriefDescription(OutputList &ol) ...@@ -184,7 +184,7 @@ void DirDef::writeBriefDescription(OutputList &ol)
void DirDef::writeDirectoryGraph(OutputList &ol) void DirDef::writeDirectoryGraph(OutputList &ol)
{ {
// write graph dependency graph // 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); DotDirDeps dirDep(this);
if (!dirDep.isTrivial()) if (!dirDep.isTrivial())
......
...@@ -962,7 +962,7 @@ static int handleAHref(DocNode *parent,QList<DocNode> &children,const HtmlAttrib ...@@ -962,7 +962,7 @@ static int handleAHref(DocNode *parent,QList<DocNode> &children,const HtmlAttrib
// and remove the href attribute // and remove the href attribute
bool result = attrList.remove(index); bool result = attrList.remove(index);
ASSERT(result); ASSERT(result);
DocHRef *href = new DocHRef(parent,attrList,opt->value); DocHRef *href = new DocHRef(parent,attrList,opt->value,g_relPath);
children.append(href); children.append(href);
g_insideHtmlLink=TRUE; g_insideHtmlLink=TRUE;
retval = href->parse(); retval = href->parse();
...@@ -2740,9 +2740,11 @@ void DocMscFile::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_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; m_parent = parent;
} }
...@@ -5463,7 +5465,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta ...@@ -5463,7 +5465,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
// and remove the src attribute // and remove the src attribute
bool result = attrList.remove(index); bool result = attrList.remove(index);
ASSERT(result); 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); m_children.append(img);
found = TRUE; found = TRUE;
} }
......
...@@ -590,14 +590,16 @@ class DocImage : public CompAccept<DocImage>, public DocNode ...@@ -590,14 +590,16 @@ class DocImage : public CompAccept<DocImage>, public DocNode
{ {
public: public:
enum Type { Html, Latex, Rtf }; enum Type { Html, Latex, Rtf };
DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString &name,Type t); DocImage(DocNode *parent,const HtmlAttribList &attribs,
Kind kind() const { return Kind_Image; } const QCString &name,Type t,const QCString &url=QCString());
Type type() const { return m_type; } Kind kind() const { return Kind_Image; }
Type type() const { return m_type; }
QCString name() const { return m_name; } 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 width() const { return m_width; }
QCString height() const { return m_height; } QCString height() const { return m_height; }
QCString relPath() const { return m_relPath; } QCString relPath() const { return m_relPath; }
QCString url() const { return m_url; }
const HtmlAttribList &attribs() const { return m_attribs; } const HtmlAttribList &attribs() const { return m_attribs; }
void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); } void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); }
void parse(); void parse();
...@@ -609,6 +611,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode ...@@ -609,6 +611,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode
QCString m_width; QCString m_width;
QCString m_height; QCString m_height;
QCString m_relPath; QCString m_relPath;
QCString m_url;
}; };
/*! @brief Node representing a dot file */ /*! @brief Node representing a dot file */
...@@ -747,17 +750,20 @@ class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode ...@@ -747,17 +750,20 @@ class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode
class DocHRef : public CompAccept<DocHRef>, public DocNode class DocHRef : public CompAccept<DocHRef>, public DocNode
{ {
public: public:
DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QCString &url) : DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QCString &url,
m_attribs(attribs), m_url(url) { m_parent = parent; } const QCString &relPath) :
m_attribs(attribs), m_url(url), m_relPath(relPath) { m_parent = parent; }
int parse(); int parse();
QCString url() const { return m_url; } QCString url() const { return m_url; }
Kind kind() const { return Kind_HRef; } QCString relPath() const { return m_relPath; }
void accept(DocVisitor *v) { CompAccept<DocHRef>::accept(this,v); } Kind kind() const { return Kind_HRef; }
void accept(DocVisitor *v) { CompAccept<DocHRef>::accept(this,v); }
const HtmlAttribList &attribs() const { return m_attribs; } const HtmlAttribList &attribs() const { return m_attribs; }
private: private:
HtmlAttribList m_attribs; HtmlAttribList m_attribs;
QCString m_url; QCString m_url;
QCString m_relPath;
}; };
/*! @brief Node Html heading */ /*! @brief Node Html heading */
......
...@@ -1524,15 +1524,35 @@ static void writeBoxMemberList(FTextStream &t, ...@@ -1524,15 +1524,35 @@ static void writeBoxMemberList(FTextStream &t,
{ {
MemberListIterator mlia(*ml); MemberListIterator mlia(*ml);
MemberDef *mma; MemberDef *mma;
int totalCount=0;
for (mlia.toFirst();(mma = mlia.current());++mlia) for (mlia.toFirst();(mma = mlia.current());++mlia)
{ {
if (mma->getClassDef() == scope) if (mma->getClassDef() == scope)
{ {
t << prot << " "; totalCount++;
t << convertLabel(mma->name()); }
if (!mma->isObjCMethod() && }
(mma->isFunction() || mma->isSlot() || mma->isSignal())) t << "()";
t << "\\l"; 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 // write member groups within the memberlist
...@@ -1564,9 +1584,9 @@ void DotNode::writeBox(FTextStream &t, ...@@ -1564,9 +1584,9 @@ void DotNode::writeBox(FTextStream &t,
(hasNonReachableChildren) ? "red" : "black" (hasNonReachableChildren) ? "red" : "black"
); );
t << " Node" << reNumberNode(m_number,reNumber) << " [label=\""; t << " Node" << reNumberNode(m_number,reNumber) << " [label=\"";
static bool umlLook = Config_getBool("UML_LOOK");
if (m_classDef && Config_getBool("UML_LOOK") && if (m_classDef && umlLook && (gt==Inheritance || gt==Collaboration))
(gt==Inheritance || gt==Collaboration))
{ {
//printf("DotNode::writeBox for %s\n",m_classDef->name().data()); //printf("DotNode::writeBox for %s\n",m_classDef->name().data());
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
......
...@@ -1191,7 +1191,7 @@ static void addClassToContext(EntryNav *rootNav) ...@@ -1191,7 +1191,7 @@ static void addClassToContext(EntryNav *rootNav)
refFileName = rootNav->tagInfo()->fileName; refFileName = rootNav->tagInfo()->fileName;
} }
cd=new ClassDef(root->fileName,root->startLine,fullName,sec, 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", 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); fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
......
...@@ -123,7 +123,7 @@ a.elRef { ...@@ -123,7 +123,7 @@ a.elRef {
} }
a.code { a.code {
color: ##60; color: #4665A2;
} }
a.codeRef { a.codeRef {
......
...@@ -123,7 +123,7 @@ ...@@ -123,7 +123,7 @@
"}\n" "}\n"
"\n" "\n"
"a.code {\n" "a.code {\n"
" color: ##60;\n" " color: #4665A2; \n"
"}\n" "}\n"
"\n" "\n"
"a.codeRef {\n" "a.codeRef {\n"
......
...@@ -1209,7 +1209,12 @@ void HtmlDocVisitor::visitPost(DocInternal *) ...@@ -1209,7 +1209,12 @@ void HtmlDocVisitor::visitPost(DocInternal *)
void HtmlDocVisitor::visitPre(DocHRef *href) void HtmlDocVisitor::visitPre(DocHRef *href)
{ {
if (m_hide) return; 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()) << ">"; << htmlAttribsToString(href->attribs()) << ">";
} }
...@@ -1247,9 +1252,23 @@ void HtmlDocVisitor::visitPre(DocImage *img) ...@@ -1247,9 +1252,23 @@ void HtmlDocVisitor::visitPre(DocImage *img)
baseName=baseName.right(baseName.length()-i-1); baseName=baseName.right(baseName.length()-i-1);
} }
m_t << "<div class=\"image\">" << endl; m_t << "<div class=\"image\">" << endl;
m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\"" QCString url = img->url();
<< baseName << "\"" << htmlAttribsToString(img->attribs()) if (url.isEmpty())
<< "/>" << endl; {
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()) if (img->hasCaption())
{ {
m_t << "<div class=\"caption\">" << endl; m_t << "<div class=\"caption\">" << endl;
...@@ -1425,7 +1444,7 @@ void HtmlDocVisitor::visitPre(DocParamSect *s) ...@@ -1425,7 +1444,7 @@ void HtmlDocVisitor::visitPre(DocParamSect *s)
className="exception"; className="exception";
break; break;
case DocParamSect::TemplateParam: case DocParamSect::TemplateParam:
heading="Template Parameters"; break; // TODO: translate me heading="Template Parameters"; break; // TODO: TRANSLATE ME
className="tparams"; className="tparams";
default: default:
ASSERT(0); ASSERT(0);
......
...@@ -204,7 +204,7 @@ DefineManager *DefineManager::theInstance = 0; ...@@ -204,7 +204,7 @@ DefineManager *DefineManager::theInstance = 0;
void DefineManager::DefinesPerFile::collectDefines(DefineDict *dict,QDict<void> &includeStack) 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); QDictIterator<void> di(m_includedFiles);
for (di.toFirst();(di.current());++di) for (di.toFirst();(di.current());++di)
...@@ -1439,6 +1439,7 @@ static void readIncludeFile(const QCString &inc) ...@@ -1439,6 +1439,7 @@ static void readIncludeFile(const QCString &inc)
// absIncFileName avoids difficulties for incFileName starting with "../" (bug 641336) // absIncFileName avoids difficulties for incFileName starting with "../" (bug 641336)
QCString absIncFileName = incFileName; QCString absIncFileName = incFileName;
{ {
static bool searchIncludes = Config_getBool("SEARCH_INCLUDES");
QFileInfo fi(g_yyFileName); QFileInfo fi(g_yyFileName);
if (fi.exists()) if (fi.exists())
{ {
...@@ -1447,8 +1448,29 @@ static void readIncludeFile(const QCString &inc) ...@@ -1447,8 +1448,29 @@ static void readIncludeFile(const QCString &inc)
if (fi2.exists()) if (fi2.exists())
{ {
absIncFileName=fi2.absFilePath(); 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); DefineManager::instance().addInclude(g_yyFileName,absIncFileName);
...@@ -2185,6 +2207,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2185,6 +2207,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_defName = yytext; g_defName = yytext;
g_defName = g_defName.left(g_defName.length()-1).stripWhiteSpace(); g_defName = g_defName.left(g_defName.length()-1).stripWhiteSpace();
g_defVarArgs = FALSE; 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) if ( g_defName!=g_lastGuardName || !g_expectGuard)
{ // define may appear in the output { // define may appear in the output
QCString tmp=(QCString)"#define "+g_defName; QCString tmp=(QCString)"#define "+g_defName;
...@@ -2198,25 +2222,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2198,25 +2222,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
else // define is a guard => hide else // define is a guard => hide
{ {
//printf("Found a guard %s\n",yytext);
g_defText.resize(0); g_defText.resize(0);
g_defLitText.resize(0); g_defLitText.resize(0);
BEGIN(Start); BEGIN(Start);
} }
} 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);
} }
<DefName>{ID}/{B}*"\n" { // empty define <DefName>{ID}/{B}*"\n" { // empty define
g_argDict = 0; g_argDict = 0;
...@@ -2246,6 +2257,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2246,6 +2257,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
g_expectGuard=FALSE; 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" { <DefineArg>"\\\n" {
g_defExtraSpacing+="\n"; g_defExtraSpacing+="\n";
g_yyLineNr++; g_yyLineNr++;
......
...@@ -2871,11 +2871,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2871,11 +2871,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
if ( *yytext == ',') if ( *yytext == ',')
{ {
bool stat = current->stat;
if (needNewCurrent) if (needNewCurrent)
{ {
current = new Entry(*current); current = new Entry(*current);
initEntry(); initEntry();
} }
current->stat = stat; // the static attribute holds for all variables
current->name.resize(0); current->name.resize(0);
current->args.resize(0); current->args.resize(0);
current->brief.resize(0); current->brief.resize(0);
......
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