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

Release-1.5.5-20080325

parent 5b23c957
DOXYGEN Version 1.5.5-20080316
DOXYGEN Version 1.5.5-20080325
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (16 March 2008)
Dimitri van Heesch (25 March 2008)
DOXYGEN Version 1.5.5_20080316
DOXYGEN Version 1.5.5_20080325
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (16 March 2008)
Dimitri van Heesch (dimitri@stack.nl) (25 March 2008)
......@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=5
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20080316
doxygen_version_mmn=20080325
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -53,6 +53,8 @@ documentation:
\refitem cmdclass \\class
\refitem cmdcode \\code
\refitem cmdcond \\cond
\refitem cmdcopybrief \\copybrief
\refitem cmdcopydefails \\copydetails
\refitem cmdcopydoc \\copydoc
\refitem cmddate \\date
\refitem cmddef \\def
......@@ -1778,6 +1780,23 @@ Make sure you have first read \ref intro "the introduction".
The copydoc command can be used recursively, but cycles in the copydoc
relation will be broken and flagged as an error.
Note that both the brief description and the detailed documentation
will be copied. See \ref cmdcopybrief "\\cmdcopybrief" and
\ref cmdcopydetails "\\cmdcopydetails" for copying only the brief or
detailed part of the comment block.
<hr>
\section cmdcopybrief \\copybrief <link-object>
Works in a similar way as \ref cmdcopydoc "\\copydoc" but will
only copy the brief description, not the detailed documentation.
<hr>
\section cmdcopydetails \\copydetails <link-object>
Works in a similar way as \ref cmdcopydoc "\\copydoc" but will
only copy the detailed documentation, not the brief description.
<hr>
\section cmddot \\dot
......
......@@ -81,6 +81,8 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_distribute_group_doc DISTRIBUTE_GROUP_DOC
\refitem cfg_docset_bundle_id DOCSET_BUNDLE_ID
\refitem cfg_docset_feedname DOCSET_FEEDNAME
\refitem cfg_dot_fontname DOT_FONTNAME
\refitem cfg_dot_fontpath DOT_FONTPATH
\refitem cfg_dot_graph_max_nodes DOT_GRAPH_MAX_NODES
\refitem cfg_dot_image_format DOT_IMAGE_FORMAT
\refitem cfg_dot_multi_targets DOT_MULTI_TARGETS
......@@ -1814,6 +1816,24 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
visualization toolkit from AT\&T and Lucent Bell Labs. The other options in
this section have no effect if this option is set to \c NO (the default)
<dt>\c DOT_FONTNAME <dd>
\addindex DOT_FONTNAME
By default doxygen will write a font called FreeSans.ttf to the output
directory and reference it in all dot files that doxygen generates. This
font does not include all possible unicode characters however, so when you need
these (or just want a differently looking font) you can specify the font name
using \c DOT_FONTNAME. You need need to make sure dot is able to find the font,
which can be done by putting it in a standard location or by setting the \c DOTFONTPATH
environment variable or by setting \c DOT_FONTPATH to the directory containing
the font.
<dt>\c DOT_FONTPATH <dd>
\addindex DOT_FONTPATH
By default doxygen will tell dot to use the output directory to look for the
FreeSans.ttf font (which doxygen will put there itself). If you specify a
different font using \c DOT_FONTNAME you can set the path where dot
can find it using this tag.
\anchor cfg_class_graph
<dt>\c CLASS_GRAPH <dd>
\addindex CLASS_GRAPH
......
......@@ -72,7 +72,7 @@ when the translator was updated.
<tr bgcolor="#ffffff">
<td>Catalan</td>
<td>Maximiliano Pin<br>Albert Mora</td>
<td>mcpin at emtesistemas dot com<br>amora at iua dot upf dot es</td>
<td>max.pin at bitroit dot com<br>amora at iua dot upf dot es</td>
<td>1.5.4</td>
</tr>
<tr bgcolor="#ffffff">
......@@ -288,7 +288,7 @@ when the translator was updated.
\hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\
\hline
Catalan & Maximiliano Pin & {\tt\tiny mcpin@emtesistemas.com} & 1.5.4 \\
Catalan & Maximiliano Pin & {\tt\tiny max.pin@bitroit.com} & 1.5.4 \\
~ & Albert Mora & {\tt\tiny amora@iua.upf.es} & ~ \\
\hline
Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & up-to-date \\
......
......@@ -19,7 +19,7 @@ TranslatorBrazilian
Fabio "FJTC" Jun Takada Chino: jun-chino@uol.com.br
TranslatorCatalan
Maximiliano Pin: mcpin@emtesistemas.com
Maximiliano Pin: max.pin@bitroit.com
Albert Mora: amora@iua.upf.es
TranslatorChinese
......
......@@ -31,6 +31,8 @@ CommandMap cmdMap[] =
{ "c", CMD_CODE },
{ "code", CMD_STARTCODE },
{ "copydoc", CMD_COPYDOC },
{ "copybrief", CMD_COPYBRIEF },
{ "copydetails", CMD_COPYDETAILS },
{ "date", CMD_DATE },
{ "dontinclude", CMD_DONTINCLUDE },
{ "dotfile", CMD_DOTFILE },
......
......@@ -110,7 +110,9 @@ enum CommandType
CMD_ENDMANONLY = 76,
CMD_INCWITHLINES = 77,
CMD_INHERITDOC = 78,
CMD_TPARAM = 79 | SIMPLESECT_BIT
CMD_TPARAM = 79 | SIMPLESECT_BIT,
CMD_COPYBRIEF = 80,
CMD_COPYDETAILS = 81
};
enum HtmlTagType
......
......@@ -410,7 +410,8 @@ static void popScope()
static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="")
{
static bool searchEngineEnabled=Config_getBool("SEARCHENGINE");
static bool searchEngineEnabled=Config_getBool("SEARCHENGINE") &&
Config_getBool("SOURCE_BROWSER");
if (searchEngineEnabled)
{
Doxygen::searchIndex->setCurrentDoc(name,base,anchor);
......@@ -419,7 +420,8 @@ static void setCurrentDoc(const QCString &name,const QCString &base,const QCStri
static void addToSearchIndex(const char *text)
{
static bool searchEngineEnabled=Config_getBool("SEARCHENGINE");
static bool searchEngineEnabled=Config_getBool("SEARCHENGINE") &&
Config_getBool("SOURCE_BROWSER");
if (searchEngineEnabled)
{
Doxygen::searchIndex->addWord(text,FALSE);
......
......@@ -201,6 +201,9 @@ static DocCmdMap docCmdMap[] =
{ "attention", 0, TRUE },
{ "author", 0, TRUE },
{ "authors", 0, TRUE },
{ "copydoc", 0, TRUE },
{ "copybrief", 0, TRUE },
{ "copydetails", 0, TRUE },
{ "date", 0, TRUE },
{ "dotfile", 0, TRUE },
{ "htmlinclude", 0, TRUE },
......
......@@ -1250,14 +1250,22 @@ void Config::check()
if (Config_getBool("HAVE_DOT"))
{
QCString curFontPath = portable_getenv("DOTFONTPATH");
QCString newFontPath = ".";
if (!curFontPath.isEmpty())
QCString curFontPath = Config_getString("DOT_FONTPATH");
if (curFontPath.isEmpty())
{
portable_getenv("DOTFONTPATH");
QCString newFontPath = ".";
if (!curFontPath.isEmpty())
{
newFontPath+=portable_pathListSeparator();
newFontPath+=curFontPath;
}
portable_setenv("DOTFONTPATH",newFontPath);
}
else
{
newFontPath+=portable_pathListSeparator();
newFontPath+=curFontPath;
portable_setenv("DOTFONTPATH",curFontPath);
}
portable_setenv("DOTFONTPATH",newFontPath);
}
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") && Config_getBool("INLINE_INFO"))
......@@ -2933,6 +2941,23 @@ void Config::create()
"have no effect if this option is set to NO (the default) \n",
FALSE
);
cs = addString( "DOT_FONTNAME",
"By default doxygen will write a font called FreeSans.ttf to the output \n"
"directory and reference it in all dot files that doxygen generates. This \n"
"font does not include all possible unicode characters however, so when you need \n"
"these (or just want a differently looking font) you can specify the font name \n"
"using DOT_FONTNAME. You need need to make sure dot is able to find the font, \n"
"which can be done by putting it in a standard location or by setting the \n"
"DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \n"
"containing the font. \n"
);
cs->setDefaultValue("FreeSans");
cs = addString( "DOT_FONTPATH",
"By default doxygen will tell dot to use the output directory to look for the \n"
"FreeSans.ttf font (which doxygen will put there itself). If you specify a \n"
"different font using DOT_FONTNAME you can set the path where dot \n"
"can find it using this tag. \n"
);
cb = addBool(
"CLASS_GRAPH",
"If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \n"
......
......@@ -1020,7 +1020,7 @@ QCString Definition::qualifiedName() const
if (m_impl->outerScope->name()=="<globalScope>")
{
m_impl->qualifiedName = m_impl->localName.copy();
m_impl->qualifiedName = m_impl->localName;
}
else
{
......
......@@ -81,8 +81,8 @@ static QString g_relPath;
static bool g_hasParamCommand;
static bool g_hasReturnCommand;
static MemberDef * g_memberDef;
static QDict<void> g_paramsFound;
static MemberDef * g_memberDef;
static bool g_isExample;
static QCString g_exampleName;
static SectionDict * g_sectionDict;
......@@ -125,7 +125,7 @@ static QStack<DocParserContext> g_parserStack;
//---------------------------------------------------------------------------
static void docParserPushContext()
static void docParserPushContext(bool saveParamInfo=TRUE)
{
//QCString indent;
//indent.fill(' ',g_parserStack.count()*2+2);
......@@ -143,10 +143,14 @@ static void docParserPushContext()
ctx->fileName = g_fileName;
ctx->relPath = g_relPath;
ctx->hasParamCommand = g_hasParamCommand;
ctx->hasReturnCommand = g_hasReturnCommand;
if (saveParamInfo)
{
ctx->hasParamCommand = g_hasParamCommand;
ctx->hasReturnCommand = g_hasReturnCommand;
ctx->paramsFound = g_paramsFound;
}
ctx->memberDef = g_memberDef;
ctx->paramsFound = g_paramsFound;
ctx->isExample = g_isExample;
ctx->exampleName = g_exampleName;
ctx->sectionDict = g_sectionDict;
......@@ -1744,7 +1748,13 @@ void DocCopy::parse()
{
if (g_copyStack.findRef(def)==-1) // definition not parsed earlier
{
docParserPushContext();
bool hasParamCommand = g_hasParamCommand;
bool hasReturnCommand = g_hasReturnCommand;
QDict<void> paramsFound = g_paramsFound;
//printf("..1 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
// g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
docParserPushContext(FALSE);
if (def->definitionType()==Definition::TypeMember && def->getOuterScope())
{
g_context=def->getOuterScope()->name();
......@@ -1760,14 +1770,49 @@ void DocCopy::parse()
// handle them in all cases.
//printf("doc='%s'\n",doc.data());
//printf("brief='%s'\n",brief.data());
brief+='\n';
doc+='\n';
internalValidatingParseDoc(this,m_children,brief);
internalValidatingParseDoc(this,m_children,doc);
if (m_copyBrief)
{
brief+='\n';
internalValidatingParseDoc(this,m_children,brief);
//printf("..2 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
// g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
hasParamCommand = hasParamCommand || g_hasParamCommand;
hasReturnCommand = hasReturnCommand || g_hasReturnCommand;
QDictIterator<void> it(g_paramsFound);
void *item;
for (;(item=it.current());++it)
{
paramsFound.insert(it.currentKey(),it.current());
}
}
if (m_copyDetails)
{
doc+='\n';
internalValidatingParseDoc(this,m_children,doc);
//printf("..3 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
// g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
hasParamCommand = hasParamCommand || g_hasParamCommand;
hasReturnCommand = hasReturnCommand || g_hasReturnCommand;
QDictIterator<void> it(g_paramsFound);
void *item;
for (;(item=it.current());++it)
{
paramsFound.insert(it.currentKey(),it.current());
}
}
g_copyStack.remove(def);
ASSERT(g_styleStack.isEmpty());
ASSERT(g_nodeStack.isEmpty());
docParserPopContext(TRUE);
g_hasParamCommand = hasParamCommand;
g_hasReturnCommand = hasReturnCommand;
g_paramsFound = paramsFound;
//printf("..4 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
// g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
}
else // oops, recursion
{
......@@ -4437,7 +4482,8 @@ int DocPara::handleCommand(const QString &cmdName)
{
DBG(("handleCommand(%s)\n",cmdName.data()));
int retval = RetVal_OK;
switch (Mappers::cmdMapper->map(cmdName))
int cmdId = Mappers::cmdMapper->map(cmdName);
switch (cmdId)
{
case CMD_UNKNOWN:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Found unknown command `\\%s'",cmdName.data());
......@@ -4702,7 +4748,9 @@ int DocPara::handleCommand(const QString &cmdName)
case CMD_INTERNAL:
retval = RetVal_Internal;
break;
case CMD_COPYDOC:
case CMD_COPYDOC: // fall through
case CMD_COPYBRIEF: // fall through
case CMD_COPYDETAILS:
{
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
......@@ -4724,7 +4772,9 @@ int DocPara::handleCommand(const QString &cmdName)
tokToString(tok),cmdName.data());
break;
}
DocCopy *cpy = new DocCopy(this,g_token->name);
DocCopy *cpy = new DocCopy(this,g_token->name,
cmdId==CMD_COPYDOC || cmdId==CMD_COPYBRIEF,
cmdId==CMD_COPYDOC || cmdId==CMD_COPYDETAILS);
m_children.append(cpy);
cpy->parse();
}
......@@ -5983,8 +6033,9 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
bool isExample, const char *exampleName,
bool singleLine, bool linkFromIndex)
{
//printf("validatingParseDoc(%s,%s)\n",ctx?ctx->name().data():"<none>",
// md?md->name().data():"<none>");
//printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?ctx->name().data():"<none>",
// md?md->name().data():"<none>",
// input);
//printf("========== validating %s at line %d\n",fileName,startLine);
//printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
//g_token = new TokenInfo;
......@@ -6145,6 +6196,9 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
// restore original parser state
docParserPopContext();
//printf("end validatingParseDoc(%s,%s)\n",ctx?ctx->name().data():"<none>",
// md?md->name().data():"<none>");
return root;
}
......
......@@ -500,12 +500,13 @@ class DocIndexEntry : public DocNode
//-----------------------------------------------------------------------
/*! @brief Node representing a entry in the index. */
/*! @brief Node representing a copy of documentation block. */
class DocCopy : public CompAccept<DocCopy>, public DocNode
{
public:
DocCopy(DocNode *parent,const QString &link)
: m_parent(parent), m_link(link) { }
DocCopy(DocNode *parent,const QString &link,bool copyBrief,bool copyDetails)
: m_parent(parent), m_link(link),
m_copyBrief(copyBrief), m_copyDetails(copyDetails) { }
Kind kind() const { return Kind_IndexEntry; }
QString link() const { return m_link; }
DocNode *parent() const { return m_parent; }
......@@ -515,6 +516,8 @@ class DocCopy : public CompAccept<DocCopy>, public DocNode
private:
DocNode *m_parent;
QString m_link;
bool m_copyBrief;
bool m_copyDetails;
};
/*! @brief Node representing an auto List */
......
......@@ -43,7 +43,8 @@
#define MAP_CMD "cmap"
#define FONTNAME "FreeSans"
//#define FONTNAME "FreeSans"
#define FONTNAME getDotFontName()
//--------------------------------------------------------------------
......@@ -76,6 +77,13 @@ static const char *edgeStyleMap[] =
"dashed" // usage
};
static QCString getDotFontName()
{
static QCString dotFontName = Config_getString("DOT_FONTNAME");
if (dotFontName.isEmpty()) dotFontName="FreeSans";
return dotFontName;
}
static void writeGraphHeader(QTextStream &t)
{
t << "digraph G" << endl;
......
......@@ -874,7 +874,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,int level)
else if (nd==0 && cd==0) // scope is not known!
{
// introduce bogus namespace
//printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
//printf("++ adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
nd=new NamespaceDef(
"[generated]",1,fullScope);
......@@ -1409,6 +1409,7 @@ static void buildNamespaceList(EntryNav *rootNav)
tagName=rootNav->tagInfo()->tagName;
tagFileName=rootNav->tagInfo()->fileName;
}
//printf("++ new namespace %d\n",fullName.data());
NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,fullName,tagName,tagFileName);
nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
......@@ -1576,6 +1577,7 @@ static void findUsingDirectives(EntryNav *rootNav)
}
else // unknown namespace, but add it anyway.
{
//printf("++ new unknown namespace %s\n",name.data());
NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,name);
nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
......
......@@ -4944,7 +4944,8 @@ QCString stripScope(const char *name)
count=1;
//printf("pos < = %d\n",p);
p--;
while (p>=0)
bool foundMatch=false;
while (p>=0 && !foundMatch)
{
c=result.at(p--);
switch (c)
......@@ -4962,6 +4963,7 @@ QCString stripScope(const char *name)
}
}
count--;
foundMatch = count==0;
break;
default:
//printf("c=%c count=%d\n",c,count);
......
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