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
(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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
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
doxygen_version_revision=3
#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"`
......
......@@ -732,9 +732,9 @@ See section \ref memgroup for an example.
The paragraph will be indented.
The text of the paragraph has no special internal structure. All visual
enhancement commands may be used inside the paragraph.
Multiple adjacent \\author commands will be joined into a single paragraph
and separated by commas. Alternatively, one \\author command may mention
several authors. The \\author command ends when a blank line or some other
Multiple adjacent \\author commands will be joined into a single paragraph.
Each author description will start a new line. Alternatively, one \\author command
may mention several authors. The \\author command ends when a blank line or some other
sectioning command is encountered.
\par Example:
......
......@@ -200,6 +200,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_show_dirs SHOW_DIRECTORIES
\refitem cfg_show_include_files SHOW_INCLUDE_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_sort_brief_docs SORT_BRIEF_DOCS
\refitem cfg_sort_member_docs SORT_MEMBER_DOCS
......@@ -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
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
<dt>\c DISTRIBUTE_GROUP_DOC <dd>
\addindex DISTRIBUTE_GROUP_DOC
......
......@@ -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
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):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
......
......@@ -74,6 +74,7 @@ Kenji Nagamatsu: naga@joyful.club.ne.jp
Iwasa Kazmi: iwasa@cosmo-system.jp
TranslatorKorean
Kim Taedong: fly1004@gmail.com
SooYoung Jung: jung5000@gmail.com
Richard Kim: ryk@dspwiz.com
......
(1.5.2)
(1.5.3)
Doxygen supports the following 33 languages (sorted alphabetically):
......@@ -19,7 +19,7 @@ still may be some details listed even for them:
TranslatorBrazilian -- The "translate me!" found in a comment.
TranslatorCatalan
TranslatorChinese -- The "translate me!" found in a comment.
TranslatorChinese
TranslatorCroatian -- The "translate me!" found in a comment.
TranslatorCzech
TranslatorDanish -- The "translate me!" found in a comment.
......@@ -111,12 +111,6 @@ TranslatorBrazilian (Translator)
Implements 194 of the required methods.
TranslatorChinese (Translator)
-----------------
Implements 194 of the required methods.
TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement
----------------------------
......
......@@ -78,6 +78,7 @@ static QStack<int> g_scopeStack; //!< 1 if bracket starts a scope,
// 2 for internal blocks
static int g_anchorCount;
static FileDef * g_sourceFileDef;
static bool g_lineNumbers;
static Definition * g_currentDefinition;
static MemberDef * g_currentMemberDef;
static bool g_includeCodeFragment;
......@@ -449,14 +450,13 @@ static void setClassScope(const QCString &name)
static void startCodeLine()
{
//if (g_currentFontClass) { g_code->endFontClass(); }
if (g_sourceFileDef)
if (g_sourceFileDef && g_lineNumbers)
{
//QCString lineNumber,lineAnchor;
//lineNumber.sprintf("%05d",g_yyLineNr);
//lineAnchor.sprintf("l%05d",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)
{
g_currentDefinition = d;
......@@ -1120,7 +1120,7 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
int vi;
QCString vn=varName;
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));
vn=vn.right(vn.length()-vi-2);
......@@ -1182,11 +1182,13 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
QCString locScope=g_classScope.copy();
QCString locFunc=removeRedundantWhiteSpace(funcName);
//fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data());
int len=2;
int i=locFunc.findRev("::");
if (i==-1) i=locFunc.findRev("."),len=1;
if (i>0)
{
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 te=locScope.findRev('>'); // end of template
//printf("ts=%d te=%d\n",ts,te);
......@@ -3285,6 +3287,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
g_exampleBlock = exBlock;
g_exampleName = exName;
g_sourceFileDef = fd;
g_lineNumbers = fd!=0;
if (exBlock && fd==0)
{
// create a dummy filedef for the example
......@@ -3306,6 +3309,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
g_exampleFile = convertNameToFile(g_exampleName+"-example");
}
g_includeCodeFragment = inlineFragment;
//printf("** exBlock=%d exName=%s include=%d\n",exBlock,exName,inlineFragment);
startCodeLine();
g_type.resize(0);
g_name.resize(0);
......@@ -3322,7 +3326,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
endFontClass();
g_code->endCodeLine();
}
if (exBlock && g_sourceFileDef)
if (exBlock && fd==0)
{
// delete the temporary file definition used for this example
delete g_sourceFileDef;
......
......@@ -1668,6 +1668,13 @@ void Config::create()
"enable parsing support.\n",
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(
"DISTRIBUTE_GROUP_DOC",
"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)
DBG(("decodeSymbol(%s) l=%d\n",symName.data(),l));
if (symName=="&copy;") return DocSymbol::Copy;
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=="&lt;") return DocSymbol::Less;
else if (symName=="&gt;") return DocSymbol::Greater;
......@@ -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)
{
Definition *compound = 0;
......@@ -2071,7 +2072,7 @@ DocRef::DocRef(DocNode *parent,const QString &target) :
// m_text.data(),m_ref.data(),m_file.data(),m_refToAnchor);
return;
}
else if (resolveLink(g_context,target,TRUE,&compound,anchor))
else if (resolveLink(context,target,TRUE,&compound,anchor))
{
bool isFile = compound ?
(compound->definitionType()==Definition::TypeFile ? TRUE : FALSE) :
......@@ -2318,8 +2319,8 @@ endlink:
//---------------------------------------------------------------------------
DocDotFile::DocDotFile(DocNode *parent,const QString &name) :
m_parent(parent), m_name(name), m_relPath(g_relPath)
DocDotFile::DocDotFile(DocNode *parent,const QString &name,const QString &context) :
m_parent(parent), m_name(name), m_relPath(g_relPath), m_context(context)
{
}
......@@ -3235,7 +3236,7 @@ int DocHtmlDescTitle::parse()
}
else
{
DocRef *ref = new DocRef(this,g_token->name);
DocRef *ref = new DocRef(this,g_token->name,g_context);
m_children.append(ref);
ref->parse();
}
......@@ -4247,7 +4248,7 @@ void DocPara::handleDotFile(const QString &cmdName)
return;
}
QString name = g_token->name;
DocDotFile *df = new DocDotFile(this,name);
DocDotFile *df = new DocDotFile(this,name,g_context);
m_children.append(df);
df->parse();
}
......@@ -4298,7 +4299,7 @@ void DocPara::handleRef(const QString &cmdName)
tokToString(tok),cmdName.data());
goto endref;
}
ref = new DocRef(this,g_token->name);
ref = new DocRef(this,g_token->name,g_context);
m_children.append(ref);
ref->parse();
endref:
......
......@@ -614,7 +614,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode
class DocDotFile : public CompAccept<DocDotFile>, public DocNode
{
public:
DocDotFile(DocNode *parent,const QString &name);
DocDotFile(DocNode *parent,const QString &name,const QString &context);
void parse();
Kind kind() const { return Kind_DotFile; }
QString name() const { return m_name; }
......@@ -624,6 +624,7 @@ class DocDotFile : public CompAccept<DocDotFile>, public DocNode
QString width() const { return m_width; }
QString height() const { return m_height; }
DocNode *parent() const { return m_parent; }
QString context() const { return m_context; }
void accept(DocVisitor *v) { CompAccept<DocDotFile>::accept(this,v); }
private:
DocNode *m_parent;
......@@ -632,6 +633,7 @@ class DocDotFile : public CompAccept<DocDotFile>, public DocNode
QString m_relPath;
QString m_width;
QString m_height;
QString m_context;
};
/*! @brief Node representing a link to some item */
......@@ -661,7 +663,7 @@ class DocLink : public CompAccept<DocLink>, public DocNode
class DocRef : public CompAccept<DocRef>, public DocNode
{
public:
DocRef(DocNode *parent,const QString &target);
DocRef(DocNode *parent,const QString &target,const QString &context);
void parse();
Kind kind() const { return Kind_Ref; }
QString file() const { return m_file; }
......
......@@ -317,7 +317,7 @@ SCOPEKEYS ":"({ID}":")*
SCOPECPP {SCOPEPRE}*(~)?{ID}("<"{TEMPCHAR}*">")?
SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"))?
FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})?
OPNEW {BLANK}+"new"({BLANK}*"[]")?
OPDEL {BLANK}+"delete"({BLANK}*"[]")?
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
......
......@@ -98,10 +98,13 @@ static void writeGraphFooter(QTextStream &t)
* (used in case CREATE_SUBDIRS is enabled).
* \param urlOnly if FALSE the url field in the map contains an external
* 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.
*/
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);
if (!f.open(IO_ReadOnly))
......@@ -129,7 +132,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,
{
result="href=\"";
// 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 ((dest=Doxygen::tagDestinationDict[df->ref()]))
......@@ -1047,6 +1050,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
// compute md5 checksum of the graph were are about to generate
QString theGraph;
QTextStream md5stream(&theGraph,IO_WriteOnly);
md5stream.setEncoding(md5stream.UnicodeUTF8);
writeGraphHeader(md5stream);
md5stream << " rankdir=LR;" << endl;
for (dnli2.toFirst();(node=dnli2.current());++dnli2)
......@@ -1077,6 +1081,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QFile f(dotName);
if (!f.open(IO_WriteOnly)) return;
QTextStream t(&f);
t.setEncoding(t.UnicodeUTF8);
t << theGraph;
f.close();
resetReNumbering();
......@@ -1677,6 +1682,7 @@ QCString computeMd5Signature(DotNode *root,
//printf("computeMd5Signature\n");
QString buf;
QTextStream md5stream(&buf,IO_WriteOnly);
md5stream.setEncoding(md5stream.UnicodeUTF8);
writeGraphHeader(md5stream);
if (lrRank)
{
......@@ -1753,6 +1759,7 @@ static bool updateDotGraph(DotNode *root,
if (f.open(IO_WriteOnly))
{
QTextStream t(&f);
t.setEncoding(t.UnicodeUTF8);
t << theGraph;
}
return TRUE;
......@@ -1894,6 +1901,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
out << "\"></center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty())
{
......@@ -2207,6 +2215,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty())
{
......@@ -2499,6 +2508,7 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty())
{
......@@ -2586,6 +2596,7 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
err("Cannot create file %s.dot for writing!\n",baseName.data());
}
QTextStream t(&f);
t.setEncoding(t.UnicodeUTF8);
m_dir->writeDepGraph(t);
f.close();
......@@ -2639,6 +2650,7 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout,baseName+".map",relPath,TRUE);
if (!tmpstr.isEmpty())
{
......@@ -2811,7 +2823,7 @@ error:
* \returns a string which is the HTML image map (without the \<map\>\</map\>)
*/
QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString &relPath)
const QCString &relPath,const QString &context)
{
QString outFile = inFile + ".map";
......@@ -2831,7 +2843,8 @@ QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
QString result;
QTextOStream tmpout(&result);
convertMapFile(tmpout, outFile, relPath ,TRUE);
tmpout.setEncoding(tmpout.UnicodeUTF8);
convertMapFile(tmpout, outFile, relPath ,TRUE, context);
QDir().remove(outFile);
// printf("result=%s\n",result.data());
......@@ -3072,6 +3085,7 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
if (dotfile.open(IO_WriteOnly))
{
QTextStream tdot(&dotfile);
tdot.setEncoding(tdot.UnicodeUTF8);
writeGraphHeader(tdot);
// clean write flags
......
......@@ -335,7 +335,7 @@ void generateGraphLegend(const char *path);
void writeDotGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,GraphOutputFormat format);
QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString& relPath);
const QCString& relPath,const QString &context);
#endif
......@@ -2605,7 +2605,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
FileDef *fd=rootNav->fileDef();
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
{
......@@ -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() &&
(rootNav->parent()->section() & Entry::COMPOUND_MASK) &&
cd &&
......@@ -4210,6 +4210,7 @@ static bool findClassRelation(
usedName=biName;
//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);
// add this class as super class to the base class
baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
......
......@@ -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
- rename part of use-statement
- links to interface functions
......@@ -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
@TODO implementation
@todo implementation
*/
static bool getGenericProcedureLink(const ClassDef *cd,
const char *memberText,
......@@ -618,7 +618,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
/*-------- 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);
}
/*-------- inner construct ---------------------------------------------------*/
......
......@@ -594,7 +594,7 @@ void FTVHelp::generateTreeView()
#if QT_VERSION >= 200
t.setEncoding(QTextStream::Latin1);
#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 << "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">\n";
t << "<title>";
......
......@@ -243,7 +243,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
file.close();
m_t << "<div align=\"center\">" << endl;
writeDotFile(fileName,s->relPath());
writeDotFile(fileName,s->relPath(),s->context());
m_t << "</div>" << endl;
if (Config_getBool("DOT_CLEANUP")) file.remove();
......@@ -270,7 +270,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
file.close();
m_t << "<div align=\"center\">" << endl;
writeMscFile(baseName,s->relPath());
writeMscFile(baseName,s->relPath(),s->context());
m_t << "</div>" << endl;
if (Config_getBool("DOT_CLEANUP")) file.remove();
......@@ -293,8 +293,16 @@ void HtmlDocVisitor::visit(DocInclude *inc)
case DocInclude::Include:
m_t << PREFRAG_START;
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),inc->text().latin1(),
inc->isExample(),inc->exampleFile());
->parseCode(m_ci,
inc->context(),
inc->text().latin1(),
inc->isExample(),
inc->exampleFile(),
0, // fd
-1, // startLine
-1, // endLine
TRUE // inlineFragment
);
m_t << PREFRAG_END;
break;
case DocInclude::IncWithLines:
......@@ -303,7 +311,8 @@ void HtmlDocVisitor::visit(DocInclude *inc)
QFileInfo cfi( inc->file() );
FileDef fd( cfi.dirPath(), cfi.fileName() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
->parseCode(m_ci,
inc->context(),
inc->text().latin1(),
inc->isExample(),
inc->exampleFile(), &fd);
......@@ -814,7 +823,7 @@ void HtmlDocVisitor::visitPost(DocImage *img)
void HtmlDocVisitor::visitPre(DocDotFile *df)
{
if (m_hide) return;
writeDotFile(df->file(),df->relPath());
writeDotFile(df->file(),df->relPath(),df->context());
m_t << "<div align=\"center\">" << endl;
if (df->hasCaption())
{
......@@ -1148,7 +1157,8 @@ void HtmlDocVisitor::popEnabled()
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;
int i;
......@@ -1163,11 +1173,12 @@ void HtmlDocVisitor::writeDotFile(const QString &fileName,const QString &relPath
m_t << "<img src=\"" << relPath << baseName << "."
<< Config_getEnum("DOT_IMAGE_FORMAT") << "\" alt=\""
<< 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;
}
void HtmlDocVisitor::writeMscFile(const QString &fileName,const QString &relPath)
void HtmlDocVisitor::writeMscFile(const QString &fileName,const QString &relPath,
const QString &context)
{
QString baseName=fileName;
int i;
......@@ -1181,7 +1192,7 @@ void HtmlDocVisitor::writeMscFile(const QString &fileName,const QString &relPath
QString mapFile = fileName+".map";
m_t << "<img src=\"" << relPath << baseName << ".png\" alt=\""
<< 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;
}
......@@ -135,8 +135,8 @@ class HtmlDocVisitor : public DocVisitor
const QString &relPath,const QString &anchor,
const QString &tooltip = QString::null);
void endLink();
void writeDotFile(const QString &fileName,const QString &relPath);
void writeMscFile(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,const QString &context);
void pushEnabled();
void popEnabled();
......
......@@ -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()
{
......@@ -1070,9 +1027,10 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name)
t << "}" << endl;
if (name)
{
t << "\\label{" << fileName << "}\\index{"
<< escapeLabelName(this,name) << "@{";
escapeMakeIndexChars(this,t,name);
t << "\\label{" << fileName << "}\\index{";
escapeLabelName(name);
t << "@{";
escapeMakeIndexChars(name);
t << "}}" << endl;
}
if (Config_getBool("PDF_HYPERLINKS") && fileName)
......@@ -1141,16 +1099,20 @@ void LatexGenerator::startMemberDoc(const char *clname,
t << "\\index{";
if (clname)
{
t << escapeLabelName(this,clname) << "@{";
escapeMakeIndexChars(this,t,clname);
escapeLabelName(clname);
t << "@{";
escapeMakeIndexChars(clname);
t << "}!";
}
t << escapeLabelName(this,memname) << "@{";
escapeMakeIndexChars(this,t,memname);
escapeLabelName(memname);
t << "@{";
escapeMakeIndexChars(memname);
t << "}}" << endl;
t << "\\index{" << escapeLabelName(this,memname) << "@{";
escapeMakeIndexChars(this,t,memname);
t << "\\index{";
escapeLabelName(memname);
t << "@{";
escapeMakeIndexChars(memname);
t << "}";
if (clname)
{
......@@ -1223,13 +1185,17 @@ void LatexGenerator::addIndexItem(const char *s1,const char *s2)
{
if (s1)
{
t << "\\index{" << escapeLabelName(this,s1) << "@{";
escapeMakeIndexChars(this,t,s1);
t << "\\index{";
escapeLabelName(s1);
t << "@{";
escapeMakeIndexChars(s1);
t << "}";
if (s2)
{
t << "!" << escapeLabelName(this,s2) << "@{";
escapeMakeIndexChars(this,t,s2);
t << "!";
escapeLabelName(s2);
t << "@{";
escapeMakeIndexChars(s2);
t << "}";
}
t << "}";
......@@ -1651,5 +1617,43 @@ void LatexGenerator::endConstraintList()
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
private:
LatexGenerator(const LatexGenerator &);
LatexGenerator &operator=(const LatexGenerator &);
void escapeLabelName(const char *s);
void escapeMakeIndexChars(const char *s);
int col;
bool insideTabbing;
bool firstDescItem;
......
......@@ -85,10 +85,10 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
const QCString & /*scopeName*/,MemberDef *md)
{
LockingPtr<ArgumentList> defArgList=(md->isDocsForDefinition() && !md->isProperty()) ?
LockingPtr<ArgumentList> defArgList=(md->isDocsForDefinition()) ?
md->argumentList() : md->declArgumentList();
//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
}
......@@ -771,7 +771,7 @@ QCString MemberDef::anchor() const
{
result=m_impl->groupMember->anchor();
}
else
else if (getReference().isEmpty())
{
result.prepend("g");
}
......@@ -2693,6 +2693,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
{
Doxygen::tagFile << " <member kind=\"enumeration\">" << 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 << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
Doxygen::tagFile << " </member>" << endl;
......@@ -2741,6 +2742,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
{
Doxygen::tagFile << " <member kind=\"enumvalue\">" << 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 << " <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl;
Doxygen::tagFile << " </member>" << endl;
......
......@@ -26,7 +26,8 @@
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);
if (!f.open(IO_ReadOnly))
......@@ -66,7 +67,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,const QCString rel
{
// handle doxygen \ref tag URL reference
QCString *dest;
DocRef *df = new DocRef( (DocNode*) 0, url );
DocRef *df = new DocRef( (DocNode*) 0, url, context );
if (!df->ref().isEmpty())
{
if ((dest=Doxygen::tagDestinationDict[df->ref()])) t << *dest << "/";
......@@ -138,7 +139,7 @@ error:
}
QString getMscImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString& relPath)
const QCString& relPath,const QString& context)
{
QString outFile = inFile + ".map";
......@@ -162,7 +163,7 @@ QString getMscImageMapFromFile(const QString& inFile, const QString& outDir,
QString result;
QTextOStream tmpout(&result);
convertMapFile(tmpout, outFile, relPath);
convertMapFile(tmpout, outFile, relPath, context);
QDir().remove(outFile);
QDir::setCurrent(oldDir);
......
......@@ -26,7 +26,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,MscOutputFormat format);
QString getMscImageMapFromFile(const QString& inFile, const QString& outDir,
const QCString& relPath);
const QCString& relPath,const QString& context);
#endif
......@@ -924,6 +924,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
addType( current );
current->name = yytext;
}
<CliPropertyType>"["{ID}"]" { // C++/CLI indexed property
current->args = yytext;
}
<CliPropertyType>"{" {
curlyCount=0;
//printf("event: '%s' '%s'\n",current->type.data(),current->name.data());
......
......@@ -10,31 +10,20 @@
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
* Brazilian Portuguese version by
* Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br>
* Version: 1.4.6 (2006/06/26)
* Brazilian Portuguese translation version 20070914
* Maintainer: Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br>
* Thanks to Jorge Ramos and others
*
* History:
* 1.4.6
* - trCallerGraph() added.
* 20070914
* - "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.
* 1.4.1
* - 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).
* Previous history removed from this version.
*/
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
......@@ -64,7 +53,7 @@ class TranslatorBrazilian : public Translator
*/
virtual QCString latexLanguageSupportCommand()
{
return "\\usepackage[spanish]{babel}";
return "\\usepackage[brazil]{babel}";
}
/*! return the language charset. This will be used for the HTML output */
......@@ -611,8 +600,8 @@ class TranslatorBrazilian : public Translator
case ClassDef::Struct: result+=" Estrutura "; break;
case ClassDef::Union: result+=" União "; break;
case ClassDef::Interface: result+=" Interface "; break;
case ClassDef::Protocol: result+=" Protocol "; break; // translate me!
case ClassDef::Category: result+=" Category "; break; // translate me!
case ClassDef::Protocol: result+=" Protocolo "; break;
case ClassDef::Category: result+=" Categoria "; break;
case ClassDef::Exception: result+=" Exceção "; break;
}
result+=(QCString)clName;
......@@ -769,8 +758,8 @@ class TranslatorBrazilian : public Translator
case ClassDef::Struct: result+="estrutura "; break;
case ClassDef::Union: result+="união "; break;
case ClassDef::Interface: result+="interface "; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me!
case ClassDef::Category: result+="category "; break; // translate me!
case ClassDef::Protocol: result+="protocolo "; break;
case ClassDef::Category: result+="categoria "; break;
case ClassDef::Exception: result+="exceção "; break;
}
result+=" foi gerada a partir ";
......
......@@ -475,8 +475,8 @@ class TranslatorChinese : public Translator
case ClassDef::Struct: result+="结构"; break;
case ClassDef::Union: result+="联合"; break;
case ClassDef::Interface: result+="接口"; break;
case ClassDef::Protocol: result+="协议"; break; // translate me!
case ClassDef::Category: result+="分类"; break; // translate me!
case ClassDef::Protocol: result+="协议"; break;
case ClassDef::Category: result+="分类"; break;
case ClassDef::Exception: result+="异常"; break;
}
result+="参考";
......@@ -642,8 +642,8 @@ class TranslatorChinese : public Translator
case ClassDef::Struct: result+="结构"; break;
case ClassDef::Union: result+="联合"; break;
case ClassDef::Interface: result+="接口"; break;
case ClassDef::Protocol: result+="协议"; break; // translate me!
case ClassDef::Category: result+="分类"; break; // translate me!
case ClassDef::Protocol: result+="协议"; break;
case ClassDef::Category: result+="分类"; break;
case ClassDef::Exception: result+="异常"; break;
}
result+="的文档由以下文件生成:";
......
This diff is collapsed.
......@@ -826,11 +826,17 @@ int isAccessibleFrom(Definition *scope,FileDef *fileScope,Definition *item)
Definition *itemScope=item->getOuterScope();
if (itemScope==scope ||
(item->definitionType()==Definition::TypeMember &&
itemScope && itemScope->definitionType()==Definition::TypeClass &&
scope->definitionType()==Definition::TypeClass &&
((ClassDef*)scope)->isAccessibleMember((MemberDef *)item)
if (
itemScope==scope || // same thing
(item->definitionType()==Definition::TypeMember && // a member
itemScope && itemScope->definitionType()==Definition::TypeClass && // of a class
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,
QCString key(40+explicitScopePart.length());
key.sprintf("%p:%p:%p:%s",scope,fileScope,item,explicitScopePart.data());
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);
//printf(" <isAccessibleFromWithExpScope(%s,%s,%s)\n",scope?scope->name().data():"<global>",
......
......@@ -875,7 +875,7 @@ void XmlDocVisitor::visitPost(DocInternalRef *)
void XmlDocVisitor::visitPre(DocCopy *c)
{
if (m_hide) return;
m_t << "<copydoc link=\"" << c->link() << "\">";
m_t << "<copydoc link=\"" << convertToXML(c->link()) << "\">";
}
void XmlDocVisitor::visitPost(DocCopy *)
......
......@@ -539,6 +539,7 @@ static void stripQualifiers(QCString &typeStr)
if (typeStr.stripPrefix("static "));
else if (typeStr.stripPrefix("virtual "));
else if (typeStr.stripPrefix("volatile "));
else if (typeStr=="virtual") typeStr="";
else done=TRUE;
}
}
......@@ -563,6 +564,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
// enum values are written as part of the enum
if (md->memberType()==MemberDef::EnumValue) return;
if (md->isHidden()) return;
if (md->name().at(0)=='@') return; // anonymous member
// group members are only visible in their group
//if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
......@@ -1012,31 +1014,34 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
for (mii.toFirst();(mi=mii.current());++mii)
{
MemberDef *md=mi->memberDef;
Protection prot = mi->prot;
Specifier virt=md->virtualness();
t << " <member refid=\"" << md->getOutputFileBase() << "_1" <<
md->anchor() << "\" prot=\"";
switch (prot)
if (md->name().at(0)!='@') // skip anonymous members
{
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: t << "package"; break;
}
t << "\" virt=\"";
switch(virt)
{
case Normal: t << "non-virtual"; break;
case Virtual: t << "virtual"; break;
case Pure: t << "pure-virtual"; break;
}
t << "\"";
if (!mi->ambiguityResolutionScope.isEmpty())
{
t << " ambiguityscope=\"" << convertToXML(mi->ambiguityResolutionScope) << "\"";
Protection prot = mi->prot;
Specifier virt=md->virtualness();
t << " <member refid=\"" << md->getOutputFileBase() << "_1" <<
md->anchor() << "\" prot=\"";
switch (prot)
{
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: t << "package"; break;
}
t << "\" virt=\"";
switch(virt)
{
case Normal: t << "non-virtual"; break;
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 @@
Name="VCCLCompilerTool"
Optimization="0"
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"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
......@@ -73,7 +73,7 @@
/>
<Tool
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"
LinkIncremental="2"
GenerateManifest="false"
......@@ -139,7 +139,7 @@
<Tool
Name="VCCLCompilerTool"
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"
UsePrecompiledHeader="0"
WarningLevel="3"
......@@ -158,7 +158,7 @@
/>
<Tool
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"
LinkIncremental="1"
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