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
(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.
......@@ -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"`
......
......@@ -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
......
......@@ -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;
}
......@@ -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 ----
//-----------------------------------------------------------------------------------
......
......@@ -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]
......
......@@ -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!
{
......
......@@ -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'/>
......
......@@ -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
......
......@@ -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())
......
......@@ -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;
}
......
......@@ -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 */
......
......@@ -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");
......
......@@ -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
......
......@@ -123,7 +123,7 @@ a.elRef {
}
a.code {
color: ##60;
color: #4665A2;
}
a.codeRef {
......
......@@ -123,7 +123,7 @@
"}\n"
"\n"
"a.code {\n"
" color: ##60;\n"
" color: #4665A2; \n"
"}\n"
"\n"
"a.codeRef {\n"
......
......@@ -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++;
......
......@@ -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);
......
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