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

Release-1.5.3-20070925

parent 8e4a092e
DOXYGEN Version 1.5.3-20070902 DOXYGEN Version 1.5.3-20070925
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 (02 September 2007) Dimitri van Heesch (25 September 2007)
DOXYGEN Version 1.5.3_20070902 DOXYGEN Version 1.5.3_20070925
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (02 September 2007) Dimitri van Heesch (dimitri@stack.nl) (25 September 2007)
...@@ -20,7 +20,7 @@ doxygen_version_minor=5 ...@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=3 doxygen_version_revision=3
#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=20070902 doxygen_version_mmn=20070925
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -732,9 +732,9 @@ See section \ref memgroup for an example. ...@@ -732,9 +732,9 @@ See section \ref memgroup for an example.
The paragraph will be indented. The paragraph will be indented.
The text of the paragraph has no special internal structure. All visual The text of the paragraph has no special internal structure. All visual
enhancement commands may be used inside the paragraph. enhancement commands may be used inside the paragraph.
Multiple adjacent \\author commands will be joined into a single paragraph Multiple adjacent \\author commands will be joined into a single paragraph.
and separated by commas. Alternatively, one \\author command may mention Each author description will start a new line. Alternatively, one \\author command
several authors. The \\author command ends when a blank line or some other may mention several authors. The \\author command ends when a blank line or some other
sectioning command is encountered. sectioning command is encountered.
\par Example: \par Example:
......
...@@ -200,6 +200,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -200,6 +200,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_show_dirs SHOW_DIRECTORIES \refitem cfg_show_dirs SHOW_DIRECTORIES
\refitem cfg_show_include_files SHOW_INCLUDE_FILES \refitem cfg_show_include_files SHOW_INCLUDE_FILES
\refitem cfg_show_used_files SHOW_USED_FILES \refitem cfg_show_used_files SHOW_USED_FILES
\refitem cfg_sip_support SIP_SUPPORT
\refitem cfg_skip_function_macros SKIP_FUNCTION_MACROS \refitem cfg_skip_function_macros SKIP_FUNCTION_MACROS
\refitem cfg_sort_brief_docs SORT_BRIEF_DOCS \refitem cfg_sort_brief_docs SORT_BRIEF_DOCS
\refitem cfg_sort_member_docs SORT_MEMBER_DOCS \refitem cfg_sort_member_docs SORT_MEMBER_DOCS
...@@ -424,6 +425,14 @@ followed by the descriptions of the tags grouped by category. ...@@ -424,6 +425,14 @@ followed by the descriptions of the tags grouped by category.
If you use Microsoft's C++/CLI language, you should set this option to YES to If you use Microsoft's C++/CLI language, you should set this option to YES to
enable parsing support. enable parsing support.
\anchor cfg_sip_support
<dt>\c SIP_SUPPORT <dd>
\addindex OPTIMIZE_OUTPUT_SIP
Set the SIP_SUPPORT tag to YES if your project consists
of <a href="http://www.riverbankcomputing.co.uk/sip/">sip</a> sources only.
Doxygen will parse them like normal C++ but will assume all classes use public
instead of private inheritance when no explicit protection keyword is present.
\anchor cfg_distribute_group_doc \anchor cfg_distribute_group_doc
<dt>\c DISTRIBUTE_GROUP_DOC <dd> <dt>\c DISTRIBUTE_GROUP_DOC <dd>
\addindex DISTRIBUTE_GROUP_DOC \addindex DISTRIBUTE_GROUP_DOC
......
...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). configuration file (with default name and known as Doxyfile).
Currently (version 1.5.2), 33 languages Currently (version 1.5.3), 33 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
......
...@@ -74,6 +74,7 @@ Kenji Nagamatsu: naga@joyful.club.ne.jp ...@@ -74,6 +74,7 @@ Kenji Nagamatsu: naga@joyful.club.ne.jp
Iwasa Kazmi: iwasa@cosmo-system.jp Iwasa Kazmi: iwasa@cosmo-system.jp
TranslatorKorean TranslatorKorean
Kim Taedong: fly1004@gmail.com
SooYoung Jung: jung5000@gmail.com SooYoung Jung: jung5000@gmail.com
Richard Kim: ryk@dspwiz.com Richard Kim: ryk@dspwiz.com
......
(1.5.2) (1.5.3)
Doxygen supports the following 33 languages (sorted alphabetically): Doxygen supports the following 33 languages (sorted alphabetically):
...@@ -19,7 +19,7 @@ still may be some details listed even for them: ...@@ -19,7 +19,7 @@ still may be some details listed even for them:
TranslatorBrazilian -- The "translate me!" found in a comment. TranslatorBrazilian -- The "translate me!" found in a comment.
TranslatorCatalan TranslatorCatalan
TranslatorChinese -- The "translate me!" found in a comment. TranslatorChinese
TranslatorCroatian -- The "translate me!" found in a comment. TranslatorCroatian -- The "translate me!" found in a comment.
TranslatorCzech TranslatorCzech
TranslatorDanish -- The "translate me!" found in a comment. TranslatorDanish -- The "translate me!" found in a comment.
...@@ -111,12 +111,6 @@ TranslatorBrazilian (Translator) ...@@ -111,12 +111,6 @@ TranslatorBrazilian (Translator)
Implements 194 of the required methods. Implements 194 of the required methods.
TranslatorChinese (Translator)
-----------------
Implements 194 of the required methods.
TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement
---------------------------- ----------------------------
......
...@@ -78,6 +78,7 @@ static QStack<int> g_scopeStack; //!< 1 if bracket starts a scope, ...@@ -78,6 +78,7 @@ static QStack<int> g_scopeStack; //!< 1 if bracket starts a scope,
// 2 for internal blocks // 2 for internal blocks
static int g_anchorCount; static int g_anchorCount;
static FileDef * g_sourceFileDef; static FileDef * g_sourceFileDef;
static bool g_lineNumbers;
static Definition * g_currentDefinition; static Definition * g_currentDefinition;
static MemberDef * g_currentMemberDef; static MemberDef * g_currentMemberDef;
static bool g_includeCodeFragment; static bool g_includeCodeFragment;
...@@ -449,14 +450,13 @@ static void setClassScope(const QCString &name) ...@@ -449,14 +450,13 @@ static void setClassScope(const QCString &name)
static void startCodeLine() static void startCodeLine()
{ {
//if (g_currentFontClass) { g_code->endFontClass(); } //if (g_currentFontClass) { g_code->endFontClass(); }
if (g_sourceFileDef) if (g_sourceFileDef && g_lineNumbers)
{ {
//QCString lineNumber,lineAnchor; //QCString lineNumber,lineAnchor;
//lineNumber.sprintf("%05d",g_yyLineNr); //lineNumber.sprintf("%05d",g_yyLineNr);
//lineAnchor.sprintf("l%05d",g_yyLineNr); //lineAnchor.sprintf("l%05d",g_yyLineNr);
Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr); Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
//printf("startCodeLine %d d=%s\n", g_yyLineNr,d ? d->name().data() : "<null>");
if (!g_includeCodeFragment && d) if (!g_includeCodeFragment && d)
{ {
g_currentDefinition = d; g_currentDefinition = d;
...@@ -1120,7 +1120,7 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName, ...@@ -1120,7 +1120,7 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
int vi; int vi;
QCString vn=varName; QCString vn=varName;
QCString scope; QCString scope;
if ((vi=vn.findRev("::"))!=-1) // explicit scope A::b(), probably static member if ((vi=vn.findRev("::"))!=-1 || (vi=vn.findRev('.'))!=-1) // explicit scope A::b(), probably static member
{ {
ClassDef *jcd = getClass(vn.left(vi)); ClassDef *jcd = getClass(vn.left(vi));
vn=vn.right(vn.length()-vi-2); vn=vn.right(vn.length()-vi-2);
...@@ -1182,11 +1182,13 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName) ...@@ -1182,11 +1182,13 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
QCString locScope=g_classScope.copy(); QCString locScope=g_classScope.copy();
QCString locFunc=removeRedundantWhiteSpace(funcName); QCString locFunc=removeRedundantWhiteSpace(funcName);
//fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data()); //fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data());
int len=2;
int i=locFunc.findRev("::"); int i=locFunc.findRev("::");
if (i==-1) i=locFunc.findRev("."),len=1;
if (i>0) if (i>0)
{ {
locScope=locFunc.left(i); locScope=locFunc.left(i);
locFunc=locFunc.right(locFunc.length()-i-2).stripWhiteSpace(); locFunc=locFunc.right(locFunc.length()-i-len).stripWhiteSpace();
int ts=locScope.find('<'); // start of template int ts=locScope.find('<'); // start of template
int te=locScope.findRev('>'); // end of template int te=locScope.findRev('>'); // end of template
//printf("ts=%d te=%d\n",ts,te); //printf("ts=%d te=%d\n",ts,te);
...@@ -3285,6 +3287,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, ...@@ -3285,6 +3287,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
g_exampleBlock = exBlock; g_exampleBlock = exBlock;
g_exampleName = exName; g_exampleName = exName;
g_sourceFileDef = fd; g_sourceFileDef = fd;
g_lineNumbers = fd!=0;
if (exBlock && fd==0) if (exBlock && fd==0)
{ {
// create a dummy filedef for the example // create a dummy filedef for the example
...@@ -3306,6 +3309,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, ...@@ -3306,6 +3309,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
g_exampleFile = convertNameToFile(g_exampleName+"-example"); g_exampleFile = convertNameToFile(g_exampleName+"-example");
} }
g_includeCodeFragment = inlineFragment; g_includeCodeFragment = inlineFragment;
//printf("** exBlock=%d exName=%s include=%d\n",exBlock,exName,inlineFragment);
startCodeLine(); startCodeLine();
g_type.resize(0); g_type.resize(0);
g_name.resize(0); g_name.resize(0);
...@@ -3322,7 +3326,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, ...@@ -3322,7 +3326,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
endFontClass(); endFontClass();
g_code->endCodeLine(); g_code->endCodeLine();
} }
if (exBlock && g_sourceFileDef) if (exBlock && fd==0)
{ {
// delete the temporary file definition used for this example // delete the temporary file definition used for this example
delete g_sourceFileDef; delete g_sourceFileDef;
......
...@@ -1668,6 +1668,13 @@ void Config::create() ...@@ -1668,6 +1668,13 @@ void Config::create()
"enable parsing support.\n", "enable parsing support.\n",
FALSE FALSE
); );
cb = addBool(
"SIP_SUPPORT",
"Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \n"
"Doxygen will parse them like normal C++ but will assume all classes use public \n"
"instead of private inheritance when no explicit protection keyword is present. \n",
FALSE
);
cb = addBool( cb = addBool(
"DISTRIBUTE_GROUP_DOC", "DISTRIBUTE_GROUP_DOC",
"If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n" "If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n"
......
...@@ -1387,6 +1387,7 @@ DocSymbol::SymType DocSymbol::decodeSymbol(const QString &symName,char *letter) ...@@ -1387,6 +1387,7 @@ DocSymbol::SymType DocSymbol::decodeSymbol(const QString &symName,char *letter)
DBG(("decodeSymbol(%s) l=%d\n",symName.data(),l)); DBG(("decodeSymbol(%s) l=%d\n",symName.data(),l));
if (symName=="&copy;") return DocSymbol::Copy; if (symName=="&copy;") return DocSymbol::Copy;
else if (symName=="&trade;") return DocSymbol::Tm; else if (symName=="&trade;") return DocSymbol::Tm;
else if (symName=="&tm;") return DocSymbol::Tm; // alias for &trace;
else if (symName=="&reg;") return DocSymbol::Reg; else if (symName=="&reg;") return DocSymbol::Reg;
else if (symName=="&lt;") return DocSymbol::Less; else if (symName=="&lt;") return DocSymbol::Less;
else if (symName=="&gt;") return DocSymbol::Greater; else if (symName=="&gt;") return DocSymbol::Greater;
...@@ -2049,7 +2050,7 @@ void DocInternalRef::parse() ...@@ -2049,7 +2050,7 @@ void DocInternalRef::parse()
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
DocRef::DocRef(DocNode *parent,const QString &target) : DocRef::DocRef(DocNode *parent,const QString &target,const QString &context) :
m_parent(parent), m_refToSection(FALSE), m_refToAnchor(FALSE) m_parent(parent), m_refToSection(FALSE), m_refToAnchor(FALSE)
{ {
Definition *compound = 0; Definition *compound = 0;
...@@ -2071,7 +2072,7 @@ DocRef::DocRef(DocNode *parent,const QString &target) : ...@@ -2071,7 +2072,7 @@ DocRef::DocRef(DocNode *parent,const QString &target) :
// m_text.data(),m_ref.data(),m_file.data(),m_refToAnchor); // m_text.data(),m_ref.data(),m_file.data(),m_refToAnchor);
return; return;
} }
else if (resolveLink(g_context,target,TRUE,&compound,anchor)) else if (resolveLink(context,target,TRUE,&compound,anchor))
{ {
bool isFile = compound ? bool isFile = compound ?
(compound->definitionType()==Definition::TypeFile ? TRUE : FALSE) : (compound->definitionType()==Definition::TypeFile ? TRUE : FALSE) :
...@@ -2318,8 +2319,8 @@ endlink: ...@@ -2318,8 +2319,8 @@ endlink:
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
DocDotFile::DocDotFile(DocNode *parent,const QString &name) : DocDotFile::DocDotFile(DocNode *parent,const QString &name,const QString &context) :
m_parent(parent), m_name(name), m_relPath(g_relPath) m_parent(parent), m_name(name), m_relPath(g_relPath), m_context(context)
{ {
} }
...@@ -3235,7 +3236,7 @@ int DocHtmlDescTitle::parse() ...@@ -3235,7 +3236,7 @@ int DocHtmlDescTitle::parse()
} }
else else
{ {
DocRef *ref = new DocRef(this,g_token->name); DocRef *ref = new DocRef(this,g_token->name,g_context);
m_children.append(ref); m_children.append(ref);
ref->parse(); ref->parse();
} }
...@@ -4247,7 +4248,7 @@ void DocPara::handleDotFile(const QString &cmdName) ...@@ -4247,7 +4248,7 @@ void DocPara::handleDotFile(const QString &cmdName)
return; return;
} }
QString name = g_token->name; QString name = g_token->name;
DocDotFile *df = new DocDotFile(this,name); DocDotFile *df = new DocDotFile(this,name,g_context);
m_children.append(df); m_children.append(df);
df->parse(); df->parse();
} }
...@@ -4298,7 +4299,7 @@ void DocPara::handleRef(const QString &cmdName) ...@@ -4298,7 +4299,7 @@ void DocPara::handleRef(const QString &cmdName)
tokToString(tok),cmdName.data()); tokToString(tok),cmdName.data());
goto endref; goto endref;
} }
ref = new DocRef(this,g_token->name); ref = new DocRef(this,g_token->name,g_context);
m_children.append(ref); m_children.append(ref);
ref->parse(); ref->parse();
endref: endref:
......
...@@ -614,7 +614,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode ...@@ -614,7 +614,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode
class DocDotFile : public CompAccept<DocDotFile>, public DocNode class DocDotFile : public CompAccept<DocDotFile>, public DocNode
{ {
public: public:
DocDotFile(DocNode *parent,const QString &name); DocDotFile(DocNode *parent,const QString &name,const QString &context);
void parse(); void parse();
Kind kind() const { return Kind_DotFile; } Kind kind() const { return Kind_DotFile; }
QString name() const { return m_name; } QString name() const { return m_name; }
...@@ -624,6 +624,7 @@ class DocDotFile : public CompAccept<DocDotFile>, public DocNode ...@@ -624,6 +624,7 @@ class DocDotFile : public CompAccept<DocDotFile>, public DocNode
QString width() const { return m_width; } QString width() const { return m_width; }
QString height() const { return m_height; } QString height() const { return m_height; }
DocNode *parent() const { return m_parent; } DocNode *parent() const { return m_parent; }
QString context() const { return m_context; }
void accept(DocVisitor *v) { CompAccept<DocDotFile>::accept(this,v); } void accept(DocVisitor *v) { CompAccept<DocDotFile>::accept(this,v); }
private: private:
DocNode *m_parent; DocNode *m_parent;
...@@ -632,6 +633,7 @@ class DocDotFile : public CompAccept<DocDotFile>, public DocNode ...@@ -632,6 +633,7 @@ class DocDotFile : public CompAccept<DocDotFile>, public DocNode
QString m_relPath; QString m_relPath;
QString m_width; QString m_width;
QString m_height; QString m_height;
QString m_context;
}; };
/*! @brief Node representing a link to some item */ /*! @brief Node representing a link to some item */
...@@ -661,7 +663,7 @@ class DocLink : public CompAccept<DocLink>, public DocNode ...@@ -661,7 +663,7 @@ class DocLink : public CompAccept<DocLink>, public DocNode
class DocRef : public CompAccept<DocRef>, public DocNode class DocRef : public CompAccept<DocRef>, public DocNode
{ {
public: public:
DocRef(DocNode *parent,const QString &target); DocRef(DocNode *parent,const QString &target,const QString &context);
void parse(); void parse();
Kind kind() const { return Kind_Ref; } Kind kind() const { return Kind_Ref; }
QString file() const { return m_file; } QString file() const { return m_file; }
......
...@@ -317,7 +317,7 @@ SCOPEKEYS ":"({ID}":")* ...@@ -317,7 +317,7 @@ SCOPEKEYS ":"({ID}":")*
SCOPECPP {SCOPEPRE}*(~)?{ID}("<"{TEMPCHAR}*">")? SCOPECPP {SCOPEPRE}*(~)?{ID}("<"{TEMPCHAR}*">")?
SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}? SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
SCOPEMASK {SCOPECPP}|{SCOPEOBJC} SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"))? FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})?
OPNEW {BLANK}+"new"({BLANK}*"[]")? OPNEW {BLANK}+"new"({BLANK}*"[]")?
OPDEL {BLANK}+"delete"({BLANK}*"[]")? OPDEL {BLANK}+"delete"({BLANK}*"[]")?
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()" OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
......
...@@ -98,10 +98,13 @@ static void writeGraphFooter(QTextStream &t) ...@@ -98,10 +98,13 @@ static void writeGraphFooter(QTextStream &t)
* (used in case CREATE_SUBDIRS is enabled). * (used in case CREATE_SUBDIRS is enabled).
* \param urlOnly if FALSE the url field in the map contains an external * \param urlOnly if FALSE the url field in the map contains an external
* references followed by a $ and then the URL. * references followed by a $ and then the URL.
* \param context the context (file, class, or namespace) in which the
* map file was found
* \returns TRUE if succesful. * \returns TRUE if succesful.
*/ */
static bool convertMapFile(QTextStream &t,const char *mapName, static bool convertMapFile(QTextStream &t,const char *mapName,
const QCString relPath, bool urlOnly=FALSE) const QCString relPath, bool urlOnly=FALSE,
const QString &context=QString())
{ {
QFile f(mapName); QFile f(mapName);
if (!f.open(IO_ReadOnly)) if (!f.open(IO_ReadOnly))
...@@ -129,7 +132,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName, ...@@ -129,7 +132,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,
{ {
result="href=\""; result="href=\"";
// fake ref node to resolve the url // fake ref node to resolve the url
DocRef *df = new DocRef( (DocNode*) 0, link.mid(5) ); DocRef *df = new DocRef( (DocNode*) 0, link.mid(5), context );
if (!df->ref().isEmpty()) if (!df->ref().isEmpty())
{ {
if ((dest=Doxygen::tagDestinationDict[df->ref()])) if ((dest=Doxygen::tagDestinationDict[df->ref()]))
...@@ -1047,6 +1050,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -1047,6 +1050,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
// compute md5 checksum of the graph were are about to generate // compute md5 checksum of the graph were are about to generate
QString theGraph; QString theGraph;
QTextStream md5stream(&theGraph,IO_WriteOnly); QTextStream md5stream(&theGraph,IO_WriteOnly);
md5stream.setEncoding(md5stream.UnicodeUTF8);
writeGraphHeader(md5stream); writeGraphHeader(md5stream);
md5stream << " rankdir=LR;" << endl; md5stream << " rankdir=LR;" << endl;
for (dnli2.toFirst();(node=dnli2.current());++dnli2) for (dnli2.toFirst();(node=dnli2.current());++dnli2)
...@@ -1077,6 +1081,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -1077,6 +1081,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QFile f(dotName); QFile f(dotName);
if (!f.open(IO_WriteOnly)) return; if (!f.open(IO_WriteOnly)) return;
QTextStream t(&f); QTextStream t(&f);
t.setEncoding(t.UnicodeUTF8);
t << theGraph; t << theGraph;
f.close(); f.close();
resetReNumbering(); resetReNumbering();
...@@ -1677,6 +1682,7 @@ QCString computeMd5Signature(DotNode *root, ...@@ -1677,6 +1682,7 @@ QCString computeMd5Signature(DotNode *root,
//printf("computeMd5Signature\n"); //printf("computeMd5Signature\n");
QString buf; QString buf;
QTextStream md5stream(&buf,IO_WriteOnly); QTextStream md5stream(&buf,IO_WriteOnly);
md5stream.setEncoding(md5stream.UnicodeUTF8);
writeGraphHeader(md5stream); writeGraphHeader(md5stream);
if (lrRank) if (lrRank)
{ {
...@@ -1753,6 +1759,7 @@ static bool updateDotGraph(DotNode *root, ...@@ -1753,6 +1759,7 @@ static bool updateDotGraph(DotNode *root,
if (f.open(IO_WriteOnly)) if (f.open(IO_WriteOnly))
{ {
QTextStream t(&f); QTextStream t(&f);
t.setEncoding(t.UnicodeUTF8);
t << theGraph; t << theGraph;
} }
return TRUE; return TRUE;
...@@ -1894,6 +1901,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1894,6 +1901,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
out << "\"></center>" << endl; out << "\"></center>" << endl;
QString tmpstr; QString tmpstr;
QTextOStream tmpout(&tmpstr); QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath); convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty()) if (!tmpstr.isEmpty())
{ {
...@@ -2207,6 +2215,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -2207,6 +2215,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
out << "</center>" << endl; out << "</center>" << endl;
QString tmpstr; QString tmpstr;
QTextOStream tmpout(&tmpstr); QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath); convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty()) if (!tmpstr.isEmpty())
{ {
...@@ -2499,6 +2508,7 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, ...@@ -2499,6 +2508,7 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
out << "</center>" << endl; out << "</center>" << endl;
QString tmpstr; QString tmpstr;
QTextOStream tmpout(&tmpstr); QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath); convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty()) if (!tmpstr.isEmpty())
{ {
...@@ -2586,6 +2596,7 @@ QCString DotDirDeps::writeGraph(QTextStream &out, ...@@ -2586,6 +2596,7 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
err("Cannot create file %s.dot for writing!\n",baseName.data()); err("Cannot create file %s.dot for writing!\n",baseName.data());
} }
QTextStream t(&f); QTextStream t(&f);
t.setEncoding(t.UnicodeUTF8);
m_dir->writeDepGraph(t); m_dir->writeDepGraph(t);
f.close(); f.close();
...@@ -2639,6 +2650,7 @@ QCString DotDirDeps::writeGraph(QTextStream &out, ...@@ -2639,6 +2650,7 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
out << "</center>" << endl; out << "</center>" << endl;
QString tmpstr; QString tmpstr;
QTextOStream tmpout(&tmpstr); QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath,TRUE); convertMapFile(tmpout,baseName+".map",relPath,TRUE);
if (!tmpstr.isEmpty()) if (!tmpstr.isEmpty())
{ {
...@@ -2811,7 +2823,7 @@ error: ...@@ -2811,7 +2823,7 @@ error:
* \returns a string which is the HTML image map (without the \<map\>\</map\>) * \returns a string which is the HTML image map (without the \<map\>\</map\>)
*/ */
QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString &relPath) const QCString &relPath,const QString &context)
{ {
QString outFile = inFile + ".map"; QString outFile = inFile + ".map";
...@@ -2831,7 +2843,8 @@ QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, ...@@ -2831,7 +2843,8 @@ QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
QString result; QString result;
QTextOStream tmpout(&result); QTextOStream tmpout(&result);
convertMapFile(tmpout, outFile, relPath ,TRUE); tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout, outFile, relPath ,TRUE, context);
QDir().remove(outFile); QDir().remove(outFile);
// printf("result=%s\n",result.data()); // printf("result=%s\n",result.data());
...@@ -3072,6 +3085,7 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo ...@@ -3072,6 +3085,7 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
if (dotfile.open(IO_WriteOnly)) if (dotfile.open(IO_WriteOnly))
{ {
QTextStream tdot(&dotfile); QTextStream tdot(&dotfile);
tdot.setEncoding(tdot.UnicodeUTF8);
writeGraphHeader(tdot); writeGraphHeader(tdot);
// clean write flags // clean write flags
......
...@@ -335,7 +335,7 @@ void generateGraphLegend(const char *path); ...@@ -335,7 +335,7 @@ void generateGraphLegend(const char *path);
void writeDotGraphFromFile(const char *inFile,const char *outDir, void writeDotGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,GraphOutputFormat format); const char *outFile,GraphOutputFormat format);
QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString& relPath); const QCString& relPath,const QString &context);
#endif #endif
...@@ -2605,7 +2605,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, ...@@ -2605,7 +2605,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
FileDef *fd=rootNav->fileDef(); FileDef *fd=rootNav->fileDef();
int l,i; int l,i;
static QRegExp re("([a-z_A-Z0-9: ]*[ &*]*[ ]*"); static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*");
if (!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable if (!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable
{ {
...@@ -2827,7 +2827,7 @@ static void buildFunctionList(EntryNav *rootNav) ...@@ -2827,7 +2827,7 @@ static void buildFunctionList(EntryNav *rootNav)
} }
static QRegExp re("([a-z_A-Z0-9: ]*[ &*]*[ ]*"); static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*");
if (!rootNav->parent()->name().isEmpty() && if (!rootNav->parent()->name().isEmpty() &&
(rootNav->parent()->section() & Entry::COMPOUND_MASK) && (rootNav->parent()->section() & Entry::COMPOUND_MASK) &&
cd && cd &&
...@@ -4210,6 +4210,7 @@ static bool findClassRelation( ...@@ -4210,6 +4210,7 @@ static bool findClassRelation(
usedName=biName; usedName=biName;
//printf("***** usedName=%s templSpec=%s\n",usedName.data(),templSpec.data()); //printf("***** usedName=%s templSpec=%s\n",usedName.data(),templSpec.data());
} }
if (Config_getBool("SIP_SUPPORT")) bi->prot=Public;
cd->insertBaseClass(baseClass,usedName,bi->prot,bi->virt,templSpec); cd->insertBaseClass(baseClass,usedName,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class // add this class as super class to the base class
baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec); baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
*/ */
/** /**
@TODO - continutation lines not always recognized @todo - continutation lines not always recognized
- merging of use-statements with same module name and different only-names - merging of use-statements with same module name and different only-names
- rename part of use-statement - rename part of use-statement
- links to interface functions - links to interface functions
...@@ -414,7 +414,7 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam ...@@ -414,7 +414,7 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
/** /**
gets the link to a generic procedure which depends not on the name, but on the parameter list gets the link to a generic procedure which depends not on the name, but on the parameter list
@TODO implementation @todo implementation
*/ */
static bool getGenericProcedureLink(const ClassDef *cd, static bool getGenericProcedureLink(const ClassDef *cd,
const char *memberText, const char *memberText,
...@@ -618,7 +618,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE) ...@@ -618,7 +618,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
/*-------- ignore ------------------------------------------------------------*/ /*-------- ignore ------------------------------------------------------------*/
<Start>{IGNORE}/{BS}"("? { // do not search keywords, intrinsics... @TODO: complete list <Start>{IGNORE}/{BS}"("? { // do not search keywords, intrinsics... TODO: complete list
codifyLines(yytext); codifyLines(yytext);
} }
/*-------- inner construct ---------------------------------------------------*/ /*-------- inner construct ---------------------------------------------------*/
......
...@@ -594,7 +594,7 @@ void FTVHelp::generateTreeView() ...@@ -594,7 +594,7 @@ void FTVHelp::generateTreeView()
#if QT_VERSION >= 200 #if QT_VERSION >= 200
t.setEncoding(QTextStream::Latin1); t.setEncoding(QTextStream::Latin1);
#endif #endif
t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"; t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\">\n";
t << "<html><head>"; t << "<html><head>";
t << "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">\n"; t << "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">\n";
t << "<title>"; t << "<title>";
......
...@@ -243,7 +243,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) ...@@ -243,7 +243,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
file.close(); file.close();
m_t << "<div align=\"center\">" << endl; m_t << "<div align=\"center\">" << endl;
writeDotFile(fileName,s->relPath()); writeDotFile(fileName,s->relPath(),s->context());
m_t << "</div>" << endl; m_t << "</div>" << endl;
if (Config_getBool("DOT_CLEANUP")) file.remove(); if (Config_getBool("DOT_CLEANUP")) file.remove();
...@@ -270,7 +270,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) ...@@ -270,7 +270,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
file.close(); file.close();
m_t << "<div align=\"center\">" << endl; m_t << "<div align=\"center\">" << endl;
writeMscFile(baseName,s->relPath()); writeMscFile(baseName,s->relPath(),s->context());
m_t << "</div>" << endl; m_t << "</div>" << endl;
if (Config_getBool("DOT_CLEANUP")) file.remove(); if (Config_getBool("DOT_CLEANUP")) file.remove();
...@@ -293,8 +293,16 @@ void HtmlDocVisitor::visit(DocInclude *inc) ...@@ -293,8 +293,16 @@ void HtmlDocVisitor::visit(DocInclude *inc)
case DocInclude::Include: case DocInclude::Include:
m_t << PREFRAG_START; m_t << PREFRAG_START;
Doxygen::parserManager->getParser(inc->extension()) Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),inc->text().latin1(), ->parseCode(m_ci,
inc->isExample(),inc->exampleFile()); inc->context(),
inc->text().latin1(),
inc->isExample(),
inc->exampleFile(),
0, // fd
-1, // startLine
-1, // endLine
TRUE // inlineFragment
);
m_t << PREFRAG_END; m_t << PREFRAG_END;
break; break;
case DocInclude::IncWithLines: case DocInclude::IncWithLines:
...@@ -303,7 +311,8 @@ void HtmlDocVisitor::visit(DocInclude *inc) ...@@ -303,7 +311,8 @@ void HtmlDocVisitor::visit(DocInclude *inc)
QFileInfo cfi( inc->file() ); QFileInfo cfi( inc->file() );
FileDef fd( cfi.dirPath(), cfi.fileName() ); FileDef fd( cfi.dirPath(), cfi.fileName() );
Doxygen::parserManager->getParser(inc->extension()) Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(), ->parseCode(m_ci,
inc->context(),
inc->text().latin1(), inc->text().latin1(),
inc->isExample(), inc->isExample(),
inc->exampleFile(), &fd); inc->exampleFile(), &fd);
...@@ -814,7 +823,7 @@ void HtmlDocVisitor::visitPost(DocImage *img) ...@@ -814,7 +823,7 @@ void HtmlDocVisitor::visitPost(DocImage *img)
void HtmlDocVisitor::visitPre(DocDotFile *df) void HtmlDocVisitor::visitPre(DocDotFile *df)
{ {
if (m_hide) return; if (m_hide) return;
writeDotFile(df->file(),df->relPath()); writeDotFile(df->file(),df->relPath(),df->context());
m_t << "<div align=\"center\">" << endl; m_t << "<div align=\"center\">" << endl;
if (df->hasCaption()) if (df->hasCaption())
{ {
...@@ -1148,7 +1157,8 @@ void HtmlDocVisitor::popEnabled() ...@@ -1148,7 +1157,8 @@ void HtmlDocVisitor::popEnabled()
delete v; delete v;
} }
void HtmlDocVisitor::writeDotFile(const QString &fileName,const QString &relPath) void HtmlDocVisitor::writeDotFile(const QString &fileName,const QString &relPath,
const QString &context)
{ {
QString baseName=fileName; QString baseName=fileName;
int i; int i;
...@@ -1163,11 +1173,12 @@ void HtmlDocVisitor::writeDotFile(const QString &fileName,const QString &relPath ...@@ -1163,11 +1173,12 @@ void HtmlDocVisitor::writeDotFile(const QString &fileName,const QString &relPath
m_t << "<img src=\"" << relPath << baseName << "." m_t << "<img src=\"" << relPath << baseName << "."
<< Config_getEnum("DOT_IMAGE_FORMAT") << "\" alt=\"" << Config_getEnum("DOT_IMAGE_FORMAT") << "\" alt=\""
<< baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl; << baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl;
QString imap = getDotImageMapFromFile(fileName,outDir,relPath.data()); QString imap = getDotImageMapFromFile(fileName,outDir,relPath.data(),context);
m_t << "<map name=\"" << mapName << "\">" << imap << "</map>" << endl; m_t << "<map name=\"" << mapName << "\">" << imap << "</map>" << endl;
} }
void HtmlDocVisitor::writeMscFile(const QString &fileName,const QString &relPath) void HtmlDocVisitor::writeMscFile(const QString &fileName,const QString &relPath,
const QString &context)
{ {
QString baseName=fileName; QString baseName=fileName;
int i; int i;
...@@ -1181,7 +1192,7 @@ void HtmlDocVisitor::writeMscFile(const QString &fileName,const QString &relPath ...@@ -1181,7 +1192,7 @@ void HtmlDocVisitor::writeMscFile(const QString &fileName,const QString &relPath
QString mapFile = fileName+".map"; QString mapFile = fileName+".map";
m_t << "<img src=\"" << relPath << baseName << ".png\" alt=\"" m_t << "<img src=\"" << relPath << baseName << ".png\" alt=\""
<< baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl; << baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl;
QString imap = getMscImageMapFromFile(fileName,outDir,relPath.data()); QString imap = getMscImageMapFromFile(fileName,outDir,relPath.data(),context);
m_t << "<map name=\"" << mapName << "\">" << imap << "</map>" << endl; m_t << "<map name=\"" << mapName << "\">" << imap << "</map>" << endl;
} }
...@@ -135,8 +135,8 @@ class HtmlDocVisitor : public DocVisitor ...@@ -135,8 +135,8 @@ class HtmlDocVisitor : public DocVisitor
const QString &relPath,const QString &anchor, const QString &relPath,const QString &anchor,
const QString &tooltip = QString::null); const QString &tooltip = QString::null);
void endLink(); void endLink();
void writeDotFile(const QString &fileName,const QString &relPath); void writeDotFile(const QString &fileName,const QString &relPath,const QString &context);
void writeMscFile(const QString &fileName,const QString &relPath); void writeMscFile(const QString &fileName,const QString &relPath,const QString &context);
void pushEnabled(); void pushEnabled();
void popEnabled(); void popEnabled();
......
...@@ -53,49 +53,6 @@ ...@@ -53,49 +53,6 @@
//} //}
static QCString escapeLabelName(LatexGenerator *g,const char *s)
{
QCString result;
const char *p=s;
char str[2];
str[1]=0;
char c;
while ((c=*p++))
{
switch (c)
{
case '%': result+="\\%"; break;
case '|': result+="\\tt{\"|}"; break;
case '!': result+="\"!"; break;
default: str[0]=c; g->docify(str); break;
}
}
return result;
}
static QCString escapeMakeIndexChars(LatexGenerator *g,QTextStream &t,const char *s)
{
QCString result;
const char *p=s;
char str[2];
str[1]=0;
char c;
while ((c=*p++))
{
switch (c)
{
case '!': t << "\"!"; break;
case '"': t << "\"\""; break;
case '@': t << "\"@"; break;
case '|': t << "\\tt{\"|}"; break;
case '[': t << "["; break;
case ']': t << "]"; break;
default: str[0]=c; g->docify(str); break;
}
}
return result;
}
LatexGenerator::LatexGenerator() : OutputGenerator() LatexGenerator::LatexGenerator() : OutputGenerator()
{ {
...@@ -1070,9 +1027,10 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name) ...@@ -1070,9 +1027,10 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name)
t << "}" << endl; t << "}" << endl;
if (name) if (name)
{ {
t << "\\label{" << fileName << "}\\index{" t << "\\label{" << fileName << "}\\index{";
<< escapeLabelName(this,name) << "@{"; escapeLabelName(name);
escapeMakeIndexChars(this,t,name); t << "@{";
escapeMakeIndexChars(name);
t << "}}" << endl; t << "}}" << endl;
} }
if (Config_getBool("PDF_HYPERLINKS") && fileName) if (Config_getBool("PDF_HYPERLINKS") && fileName)
...@@ -1141,16 +1099,20 @@ void LatexGenerator::startMemberDoc(const char *clname, ...@@ -1141,16 +1099,20 @@ void LatexGenerator::startMemberDoc(const char *clname,
t << "\\index{"; t << "\\index{";
if (clname) if (clname)
{ {
t << escapeLabelName(this,clname) << "@{"; escapeLabelName(clname);
escapeMakeIndexChars(this,t,clname); t << "@{";
escapeMakeIndexChars(clname);
t << "}!"; t << "}!";
} }
t << escapeLabelName(this,memname) << "@{"; escapeLabelName(memname);
escapeMakeIndexChars(this,t,memname); t << "@{";
escapeMakeIndexChars(memname);
t << "}}" << endl; t << "}}" << endl;
t << "\\index{" << escapeLabelName(this,memname) << "@{"; t << "\\index{";
escapeMakeIndexChars(this,t,memname); escapeLabelName(memname);
t << "@{";
escapeMakeIndexChars(memname);
t << "}"; t << "}";
if (clname) if (clname)
{ {
...@@ -1223,13 +1185,17 @@ void LatexGenerator::addIndexItem(const char *s1,const char *s2) ...@@ -1223,13 +1185,17 @@ void LatexGenerator::addIndexItem(const char *s1,const char *s2)
{ {
if (s1) if (s1)
{ {
t << "\\index{" << escapeLabelName(this,s1) << "@{"; t << "\\index{";
escapeMakeIndexChars(this,t,s1); escapeLabelName(s1);
t << "@{";
escapeMakeIndexChars(s1);
t << "}"; t << "}";
if (s2) if (s2)
{ {
t << "!" << escapeLabelName(this,s2) << "@{"; t << "!";
escapeMakeIndexChars(this,t,s2); escapeLabelName(s2);
t << "@{";
escapeMakeIndexChars(s2);
t << "}"; t << "}";
} }
t << "}"; t << "}";
...@@ -1651,5 +1617,43 @@ void LatexGenerator::endConstraintList() ...@@ -1651,5 +1617,43 @@ void LatexGenerator::endConstraintList()
t << "\\end{Desc}" << endl; t << "\\end{Desc}" << endl;
} }
void LatexGenerator::escapeLabelName(const char *s)
{
const char *p=s;
char str[2];
str[1]=0;
char c;
while ((c=*p++))
{
switch (c)
{
case '%': t << "\\%"; break;
case '|': t << "\\tt{\"|}"; break;
case '!': t << "\"!"; break;
default: str[0]=c; docify(str); break;
}
}
}
void LatexGenerator::escapeMakeIndexChars(const char *s)
{
const char *p=s;
char str[2];
str[1]=0;
char c;
while ((c=*p++))
{
switch (c)
{
case '!': t << "\"!"; break;
case '"': t << "\"\""; break;
case '@': t << "\"@"; break;
case '|': t << "\\tt{\"|}"; break;
case '[': t << "["; break;
case ']': t << "]"; break;
default: str[0]=c; docify(str); break;
}
}
}
...@@ -230,6 +230,8 @@ class LatexGenerator : public OutputGenerator ...@@ -230,6 +230,8 @@ class LatexGenerator : public OutputGenerator
private: private:
LatexGenerator(const LatexGenerator &); LatexGenerator(const LatexGenerator &);
LatexGenerator &operator=(const LatexGenerator &); LatexGenerator &operator=(const LatexGenerator &);
void escapeLabelName(const char *s);
void escapeMakeIndexChars(const char *s);
int col; int col;
bool insideTabbing; bool insideTabbing;
bool firstDescItem; bool firstDescItem;
......
...@@ -85,10 +85,10 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr ...@@ -85,10 +85,10 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
const QCString & /*scopeName*/,MemberDef *md) const QCString & /*scopeName*/,MemberDef *md)
{ {
LockingPtr<ArgumentList> defArgList=(md->isDocsForDefinition() && !md->isProperty()) ? LockingPtr<ArgumentList> defArgList=(md->isDocsForDefinition()) ?
md->argumentList() : md->declArgumentList(); md->argumentList() : md->declArgumentList();
//printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition()); //printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition());
if (defArgList==0) if (defArgList==0 || md->isProperty())
{ {
return FALSE; // member has no function like argument list return FALSE; // member has no function like argument list
} }
...@@ -771,7 +771,7 @@ QCString MemberDef::anchor() const ...@@ -771,7 +771,7 @@ QCString MemberDef::anchor() const
{ {
result=m_impl->groupMember->anchor(); result=m_impl->groupMember->anchor();
} }
else else if (getReference().isEmpty())
{ {
result.prepend("g"); result.prepend("g");
} }
...@@ -2693,6 +2693,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl, ...@@ -2693,6 +2693,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
{ {
Doxygen::tagFile << " <member kind=\"enumeration\">" << endl; Doxygen::tagFile << " <member kind=\"enumeration\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl; Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl; Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
Doxygen::tagFile << " </member>" << endl; Doxygen::tagFile << " </member>" << endl;
...@@ -2741,6 +2742,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl, ...@@ -2741,6 +2742,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
{ {
Doxygen::tagFile << " <member kind=\"enumvalue\">" << endl; Doxygen::tagFile << " <member kind=\"enumvalue\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(fmd->name()) << "</name>" << endl; Doxygen::tagFile << " <name>" << convertToXML(fmd->name()) << "</name>" << endl;
Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
Doxygen::tagFile << " <anchor>" << convertToXML(fmd->anchor()) << "</anchor>" << endl; Doxygen::tagFile << " <anchor>" << convertToXML(fmd->anchor()) << "</anchor>" << endl;
Doxygen::tagFile << " <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl; Doxygen::tagFile << " <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl;
Doxygen::tagFile << " </member>" << endl; Doxygen::tagFile << " </member>" << endl;
......
...@@ -26,7 +26,8 @@ ...@@ -26,7 +26,8 @@
static const int maxCmdLine = 40960; static const int maxCmdLine = 40960;
static bool convertMapFile(QTextStream &t,const char *mapName,const QCString relPath) static bool convertMapFile(QTextStream &t,const char *mapName,const QCString relPath,
const QString &context)
{ {
QFile f(mapName); QFile f(mapName);
if (!f.open(IO_ReadOnly)) if (!f.open(IO_ReadOnly))
...@@ -66,7 +67,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,const QCString rel ...@@ -66,7 +67,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,const QCString rel
{ {
// handle doxygen \ref tag URL reference // handle doxygen \ref tag URL reference
QCString *dest; QCString *dest;
DocRef *df = new DocRef( (DocNode*) 0, url ); DocRef *df = new DocRef( (DocNode*) 0, url, context );
if (!df->ref().isEmpty()) if (!df->ref().isEmpty())
{ {
if ((dest=Doxygen::tagDestinationDict[df->ref()])) t << *dest << "/"; if ((dest=Doxygen::tagDestinationDict[df->ref()])) t << *dest << "/";
...@@ -138,7 +139,7 @@ error: ...@@ -138,7 +139,7 @@ error:
} }
QString getMscImageMapFromFile(const QString& inFile, const QString& outDir, QString getMscImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString& relPath) const QCString& relPath,const QString& context)
{ {
QString outFile = inFile + ".map"; QString outFile = inFile + ".map";
...@@ -162,7 +163,7 @@ QString getMscImageMapFromFile(const QString& inFile, const QString& outDir, ...@@ -162,7 +163,7 @@ QString getMscImageMapFromFile(const QString& inFile, const QString& outDir,
QString result; QString result;
QTextOStream tmpout(&result); QTextOStream tmpout(&result);
convertMapFile(tmpout, outFile, relPath); convertMapFile(tmpout, outFile, relPath, context);
QDir().remove(outFile); QDir().remove(outFile);
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
......
...@@ -26,7 +26,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, ...@@ -26,7 +26,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,MscOutputFormat format); const char *outFile,MscOutputFormat format);
QString getMscImageMapFromFile(const QString& inFile, const QString& outDir, QString getMscImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString& relPath); const QCString& relPath,const QString& context);
#endif #endif
...@@ -924,6 +924,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -924,6 +924,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
addType( current ); addType( current );
current->name = yytext; current->name = yytext;
} }
<CliPropertyType>"["{ID}"]" { // C++/CLI indexed property
current->args = yytext;
}
<CliPropertyType>"{" { <CliPropertyType>"{" {
curlyCount=0; curlyCount=0;
//printf("event: '%s' '%s'\n",current->type.data(),current->name.data()); //printf("event: '%s' '%s'\n",current->type.data(),current->name.data());
......
...@@ -10,31 +10,20 @@ ...@@ -10,31 +10,20 @@
* Documents produced by Doxygen are derivative works derived from the * Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license. * input used in their production; they are not affected by this license.
* *
* Brazilian Portuguese version by * Brazilian Portuguese translation version 20070914
* Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br> * Maintainer: Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br>
* Version: 1.4.6 (2006/06/26) * Thanks to Jorge Ramos and others
* *
* History: * History:
* 1.4.6 * 20070914
* - trCallerGraph() added. * - "Translate me" fixed
* - Revision number changed from doxygen version to a date string.
* - History cleanup
* - Latex babel package fixed.
* 1.4.6
* - trCallerGraph() added.
* - trEnumerationValueDocumentation() added. * - trEnumerationValueDocumentation() added.
* 1.4.1 * Previous history removed from this version.
* - Method trOverloadText() added.
* 1.3.9
* - Updated to Doxygen 1.3.9
* 1.3.8
* - Updated to Doxygen 1.3.8
* 1.3.3:
* - Updated to Doxygen 1.3.3
* 1.3.2:
* - Updated to Doxygen 1.3.2
* 1.3:
* - Updated to Doxygen 1.3.x.
* 1.2.19:
* - Updated to Doxygen 1.2.19
* - Translation Review (Thanks to Jorge Ramos and others)
* - Small fixes in C output.
* - Latex generation support fixed (invalid package name).
*/ */
#ifndef TRANSLATOR_BR_H #ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H #define TRANSLATOR_BR_H
...@@ -64,7 +53,7 @@ class TranslatorBrazilian : public Translator ...@@ -64,7 +53,7 @@ class TranslatorBrazilian : public Translator
*/ */
virtual QCString latexLanguageSupportCommand() virtual QCString latexLanguageSupportCommand()
{ {
return "\\usepackage[spanish]{babel}"; return "\\usepackage[brazil]{babel}";
} }
/*! return the language charset. This will be used for the HTML output */ /*! return the language charset. This will be used for the HTML output */
...@@ -611,8 +600,8 @@ class TranslatorBrazilian : public Translator ...@@ -611,8 +600,8 @@ class TranslatorBrazilian : public Translator
case ClassDef::Struct: result+=" Estrutura "; break; case ClassDef::Struct: result+=" Estrutura "; break;
case ClassDef::Union: result+=" União "; break; case ClassDef::Union: result+=" União "; break;
case ClassDef::Interface: result+=" Interface "; break; case ClassDef::Interface: result+=" Interface "; break;
case ClassDef::Protocol: result+=" Protocol "; break; // translate me! case ClassDef::Protocol: result+=" Protocolo "; break;
case ClassDef::Category: result+=" Category "; break; // translate me! case ClassDef::Category: result+=" Categoria "; break;
case ClassDef::Exception: result+=" Exceção "; break; case ClassDef::Exception: result+=" Exceção "; break;
} }
result+=(QCString)clName; result+=(QCString)clName;
...@@ -769,8 +758,8 @@ class TranslatorBrazilian : public Translator ...@@ -769,8 +758,8 @@ class TranslatorBrazilian : public Translator
case ClassDef::Struct: result+="estrutura "; break; case ClassDef::Struct: result+="estrutura "; break;
case ClassDef::Union: result+="união "; break; case ClassDef::Union: result+="união "; break;
case ClassDef::Interface: result+="interface "; break; case ClassDef::Interface: result+="interface "; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me! case ClassDef::Protocol: result+="protocolo "; break;
case ClassDef::Category: result+="category "; break; // translate me! case ClassDef::Category: result+="categoria "; break;
case ClassDef::Exception: result+="exceção "; break; case ClassDef::Exception: result+="exceção "; break;
} }
result+=" foi gerada a partir "; result+=" foi gerada a partir ";
......
...@@ -475,8 +475,8 @@ class TranslatorChinese : public Translator ...@@ -475,8 +475,8 @@ class TranslatorChinese : public Translator
case ClassDef::Struct: result+="结构"; break; case ClassDef::Struct: result+="结构"; break;
case ClassDef::Union: result+="联合"; break; case ClassDef::Union: result+="联合"; break;
case ClassDef::Interface: result+="接口"; break; case ClassDef::Interface: result+="接口"; break;
case ClassDef::Protocol: result+="协议"; break; // translate me! case ClassDef::Protocol: result+="协议"; break;
case ClassDef::Category: result+="分类"; break; // translate me! case ClassDef::Category: result+="分类"; break;
case ClassDef::Exception: result+="异常"; break; case ClassDef::Exception: result+="异常"; break;
} }
result+="参考"; result+="参考";
...@@ -642,8 +642,8 @@ class TranslatorChinese : public Translator ...@@ -642,8 +642,8 @@ class TranslatorChinese : public Translator
case ClassDef::Struct: result+="结构"; break; case ClassDef::Struct: result+="结构"; break;
case ClassDef::Union: result+="联合"; break; case ClassDef::Union: result+="联合"; break;
case ClassDef::Interface: result+="接口"; break; case ClassDef::Interface: result+="接口"; break;
case ClassDef::Protocol: result+="协议"; break; // translate me! case ClassDef::Protocol: result+="协议"; break;
case ClassDef::Category: result+="分类"; break; // translate me! case ClassDef::Category: result+="分类"; break;
case ClassDef::Exception: result+="异常"; break; case ClassDef::Exception: result+="异常"; break;
} }
result+="的文档由以下文件生成:"; result+="的文档由以下文件生成:";
......
This diff is collapsed.
...@@ -826,11 +826,17 @@ int isAccessibleFrom(Definition *scope,FileDef *fileScope,Definition *item) ...@@ -826,11 +826,17 @@ int isAccessibleFrom(Definition *scope,FileDef *fileScope,Definition *item)
Definition *itemScope=item->getOuterScope(); Definition *itemScope=item->getOuterScope();
if (itemScope==scope || if (
(item->definitionType()==Definition::TypeMember && itemScope==scope || // same thing
itemScope && itemScope->definitionType()==Definition::TypeClass && (item->definitionType()==Definition::TypeMember && // a member
scope->definitionType()==Definition::TypeClass && itemScope && itemScope->definitionType()==Definition::TypeClass && // of a class
((ClassDef*)scope)->isAccessibleMember((MemberDef *)item) scope->definitionType()==Definition::TypeClass && // accessible
((ClassDef*)scope)->isAccessibleMember((MemberDef *)item) // from scope
) ||
(item->definitionType()==Definition::TypeClass && // a nested class
itemScope && itemScope->definitionType()==Definition::TypeClass && // inside a base
scope->definitionType()==Definition::TypeClass && // class of scope
((ClassDef*)scope)->isBaseClass((ClassDef*)itemScope,TRUE)
) )
) )
{ {
...@@ -915,7 +921,11 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope, ...@@ -915,7 +921,11 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,
QCString key(40+explicitScopePart.length()); QCString key(40+explicitScopePart.length());
key.sprintf("%p:%p:%p:%s",scope,fileScope,item,explicitScopePart.data()); key.sprintf("%p:%p:%p:%s",scope,fileScope,item,explicitScopePart.data());
static QDict<void> visitedDict; static QDict<void> visitedDict;
if (visitedDict.find(key)) return -1; // already looked at this if (visitedDict.find(key))
{
//printf("Already visited!\n");
return -1; // already looked at this
}
visitedDict.insert(key,(void *)0x8); visitedDict.insert(key,(void *)0x8);
//printf(" <isAccessibleFromWithExpScope(%s,%s,%s)\n",scope?scope->name().data():"<global>", //printf(" <isAccessibleFromWithExpScope(%s,%s,%s)\n",scope?scope->name().data():"<global>",
......
...@@ -875,7 +875,7 @@ void XmlDocVisitor::visitPost(DocInternalRef *) ...@@ -875,7 +875,7 @@ void XmlDocVisitor::visitPost(DocInternalRef *)
void XmlDocVisitor::visitPre(DocCopy *c) void XmlDocVisitor::visitPre(DocCopy *c)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "<copydoc link=\"" << c->link() << "\">"; m_t << "<copydoc link=\"" << convertToXML(c->link()) << "\">";
} }
void XmlDocVisitor::visitPost(DocCopy *) void XmlDocVisitor::visitPost(DocCopy *)
......
...@@ -539,6 +539,7 @@ static void stripQualifiers(QCString &typeStr) ...@@ -539,6 +539,7 @@ static void stripQualifiers(QCString &typeStr)
if (typeStr.stripPrefix("static ")); if (typeStr.stripPrefix("static "));
else if (typeStr.stripPrefix("virtual ")); else if (typeStr.stripPrefix("virtual "));
else if (typeStr.stripPrefix("volatile ")); else if (typeStr.stripPrefix("volatile "));
else if (typeStr=="virtual") typeStr="";
else done=TRUE; else done=TRUE;
} }
} }
...@@ -563,6 +564,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -563,6 +564,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
// enum values are written as part of the enum // enum values are written as part of the enum
if (md->memberType()==MemberDef::EnumValue) return; if (md->memberType()==MemberDef::EnumValue) return;
if (md->isHidden()) return; if (md->isHidden()) return;
if (md->name().at(0)=='@') return; // anonymous member
// group members are only visible in their group // group members are only visible in their group
//if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return; //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
...@@ -1012,31 +1014,34 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t) ...@@ -1012,31 +1014,34 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
for (mii.toFirst();(mi=mii.current());++mii) for (mii.toFirst();(mi=mii.current());++mii)
{ {
MemberDef *md=mi->memberDef; MemberDef *md=mi->memberDef;
Protection prot = mi->prot; if (md->name().at(0)!='@') // skip anonymous members
Specifier virt=md->virtualness();
t << " <member refid=\"" << md->getOutputFileBase() << "_1" <<
md->anchor() << "\" prot=\"";
switch (prot)
{ {
case Public: t << "public"; break; Protection prot = mi->prot;
case Protected: t << "protected"; break; Specifier virt=md->virtualness();
case Private: t << "private"; break; t << " <member refid=\"" << md->getOutputFileBase() << "_1" <<
case Package: t << "package"; break; md->anchor() << "\" prot=\"";
} switch (prot)
t << "\" virt=\""; {
switch(virt) case Public: t << "public"; break;
{ case Protected: t << "protected"; break;
case Normal: t << "non-virtual"; break; case Private: t << "private"; break;
case Virtual: t << "virtual"; break; case Package: t << "package"; break;
case Pure: t << "pure-virtual"; break; }
} t << "\" virt=\"";
t << "\""; switch(virt)
if (!mi->ambiguityResolutionScope.isEmpty()) {
{ case Normal: t << "non-virtual"; break;
t << " ambiguityscope=\"" << convertToXML(mi->ambiguityResolutionScope) << "\""; case Virtual: t << "virtual"; break;
case Pure: t << "pure-virtual"; break;
}
t << "\"";
if (!mi->ambiguityResolutionScope.isEmpty())
{
t << " ambiguityscope=\"" << convertToXML(mi->ambiguityResolutionScope) << "\"";
}
t << "><scope>" << convertToXML(cd->name()) << "</scope><name>" <<
convertToXML(md->name()) << "</name></member>" << endl;
} }
t << "><scope>" << convertToXML(cd->name()) << "</scope><name>" <<
convertToXML(md->name()) << "</name></member>" << endl;
} }
} }
} }
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
Optimization="0" Optimization="0"
AdditionalIncludeDirectories="$(QTDIR)\include;..\src;." AdditionalIncludeDirectories="$(QTDIR)\include;..\src;."
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;NODEBUG"
MinimalRebuild="true" MinimalRebuild="true"
BasicRuntimeChecks="3" BasicRuntimeChecks="3"
RuntimeLibrary="1" RuntimeLibrary="1"
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="$(QTDIR)\lib\qt-mt336.lib $(QTDIR)\lib\qtmain.lib iconv.lib" AdditionalDependencies="$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib imm32.lib"
OutputFile="..\bin\Debug\doxywizard.exe" OutputFile="..\bin\Debug\doxywizard.exe"
LinkIncremental="2" LinkIncremental="2"
GenerateManifest="false" GenerateManifest="false"
...@@ -139,7 +139,7 @@ ...@@ -139,7 +139,7 @@
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalIncludeDirectories="$(QTDIR)\include;..\src;." AdditionalIncludeDirectories="$(QTDIR)\include;..\src;."
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;NODEBUG"
RuntimeLibrary="0" RuntimeLibrary="0"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
WarningLevel="3" WarningLevel="3"
...@@ -158,7 +158,7 @@ ...@@ -158,7 +158,7 @@
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="$(QTDIR)\lib\qt-mt336.lib $(QTDIR)\lib\qtmain.lib iconv.lib" AdditionalDependencies="$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib imm32.lib"
OutputFile="..\bin\doxywizard.exe" OutputFile="..\bin\doxywizard.exe"
LinkIncremental="1" LinkIncremental="1"
GenerateManifest="false" GenerateManifest="false"
......
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