summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2000-07-16 17:27:25 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2000-07-16 17:27:25 (GMT)
commit8feba3b60badccd732e753fadb089d13799db829 (patch)
tree156f3b8b79f2df8ecf0c8d3175e2788e40b4b824 /src
parent61a83f312ce95090dc02ca3b8ce8dd3319d97df1 (diff)
downloadDoxygen-8feba3b60badccd732e753fadb089d13799db829.zip
Doxygen-8feba3b60badccd732e753fadb089d13799db829.tar.gz
Doxygen-8feba3b60badccd732e753fadb089d13799db829.tar.bz2
Release-1.1.5-20000716
Diffstat (limited to 'src')
-rw-r--r--src/code.l48
-rw-r--r--src/config.h7
-rw-r--r--src/config.l36
-rw-r--r--src/definition.cpp33
-rw-r--r--src/diagram.cpp8
-rw-r--r--src/dot.cpp74
-rw-r--r--src/doxygen.cpp284
-rw-r--r--src/entry.cpp2
-rw-r--r--src/entry.h1
-rw-r--r--src/filedef.cpp3
-rw-r--r--src/filedef.h39
-rw-r--r--src/formula.cpp6
-rw-r--r--src/htmlgen.cpp77
-rw-r--r--src/htmlgen.h7
-rw-r--r--src/index.cpp60
-rw-r--r--src/latexgen.cpp255
-rw-r--r--src/latexgen.h3
-rw-r--r--src/membergroup.cpp4
-rw-r--r--src/memberlist.h1
-rw-r--r--src/pre.l18
-rw-r--r--src/rtfgen.cpp160
-rw-r--r--src/rtfgen.h3
-rw-r--r--src/scanner.l57
-rw-r--r--src/translator.h6
-rw-r--r--src/translator_cz.h470
-rw-r--r--src/translator_de.h2
-rw-r--r--src/translator_es.h172
-rw-r--r--src/translator_hr.h14
-rw-r--r--src/util.cpp64
-rw-r--r--src/util.h3
30 files changed, 1319 insertions, 598 deletions
diff --git a/src/code.l b/src/code.l
index 79ddac7..39ff64d 100644
--- a/src/code.l
+++ b/src/code.l
@@ -532,7 +532,8 @@ static void generateMemberLink(OutputList &ol,const char *varName,
MemberDef *vmd;
for (;(vmd=vmni.current());++vmni)
{
- if (vmd->isVariable() && vmd->memberClass()==vcd)
+ if ((vmd->isVariable() || vmd->isFunction()) &&
+ vmd->memberClass()==vcd)
{
//printf("Found variable type=%s\n",vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString());
@@ -924,12 +925,26 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
QCString text=yytext;
g_name+=text.left(i);
}
-<Body>{SCOPENAME}/{B}* {
+<Body>{SCOPENAME}/{B}* { // p->func()
generateClassLink(*g_code,yytext);
addType();
g_name+=yytext;
}
-<Body>{SCOPENAME}/{B}*"(" {
+<Body>"("{B}*"*"{B}*{SCOPENAME}*{B}*")"/{B}* { // (*p)->func()
+ QCString text=yytext;
+ int s=0;
+ while (s<yyleng && (text.at(s)=='(' || isspace(text.at(s)))) s++;
+ int e=yyleng-1;
+ while (e>=0 && (text.at(e)==')' || isspace(yytext[e]))) e--;
+ QCString varname = text.mid(s+1,e-s);
+ QCString tmp=varname.copy();
+ g_code->docify(text.left(s+1));
+ generateClassLink(*g_code,tmp.data());
+ g_code->docify(text.right(yyleng-e-1));
+ addType();
+ g_name+=varname;
+ }
+<Body>{SCOPENAME}/{B}*"(" { // func1()->func2()
addType();
generateFunctionLink(*g_code,yytext);
g_bracketCount=1;
@@ -1051,15 +1066,23 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_parmType.resize(0);g_parmName.resize(0);
BEGIN( Body );
}
-<MemberCall2,FuncCall>")"[ \t\n]*";" {
+<MemberCall2,FuncCall>")"[ \t\n]*[;:] {
codifyLines(yytext);
g_bracketCount=0;
g_searchingForBody=FALSE;
if (!g_inClass && !g_type.isEmpty())
addVariable();
- g_name.resize(0);g_type.resize(0);
g_parmType.resize(0);g_parmName.resize(0);
- BEGIN( Body );
+ if (yytext[yyleng-1]==';' || g_insideBody)
+ {
+ g_name.resize(0);g_type.resize(0);
+ BEGIN( Body );
+ }
+ else
+ {
+ g_bracketCount=0;
+ BEGIN( SkipInits );
+ }
}
<MemberCall2,FuncCall>")"({BN}"const"|"volatile")*{BN}*"{" {
addParameter();
@@ -1081,16 +1104,11 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_type.resize(0); g_name.resize(0);
BEGIN( Body );
}
- /*
-<MemberCall2,FuncCall>")"[ \t\n]*":" {
- addParameter();
- g_parmType.resize(0);g_parmName.resize(0);
- if (g_name.find("::")!=-1) setClassScope(g_name);
- codifyLines(yytext);
+<SkipInits>";" {
+ g_code->codify(yytext);
g_type.resize(0); g_name.resize(0);
- BEGIN( SkipInits );
+ BEGIN( Body );
}
- */
<SkipInits>"{" {
g_code->codify(yytext);
g_curlyCount++;
@@ -1100,6 +1118,8 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_insideBody=TRUE;
}
if (g_insideBody) g_bodyCurlyCount++;
+ if (g_name.find("::")!=-1) setClassScope(g_name);
+ g_type.resize(0); g_name.resize(0);
BEGIN( Body );
}
<SkipInits>{ID} {
diff --git a/src/config.h b/src/config.h
index 9665dbb..a7c220d 100644
--- a/src/config.h
+++ b/src/config.h
@@ -1,3 +1,9 @@
+/* This file was generated by configgen on Fri Jul 14 20:01:34 2000
+ * from config_templ.h
+ *
+ * DO NOT EDIT!
+ */
+
/******************************************************************************
*
*
@@ -105,6 +111,7 @@ struct Config
static bool onlyPredefinedFlag; // expand only predefined macros
static bool searchIncludeFlag; // search for included files
static QStrList includePath; // list of include paths
+ static QStrList includeFilePatternList; // list of include file patterns
static QStrList predefined; // list of predefined macro names.
static QStrList expandAsDefinedList; // list of defines to expand
static QStrList tagFileList; // list of tag files
diff --git a/src/config.l b/src/config.l
index 2a2174e..8c864ff 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1,3 +1,9 @@
+/* This file was generated by configgen on Fri Jul 14 20:01:34 2000
+ * from config_templ.l
+ *
+ * DO NOT EDIT!
+ */
+
/******************************************************************************
*
*
@@ -86,7 +92,7 @@ bool Config::classDiagramFlag = TRUE;
bool Config::sourceBrowseFlag = FALSE;
bool Config::inlineSourceFlag = FALSE;
bool Config::stripCommentsFlag = TRUE;
-bool Config::caseSensitiveNames = FALSE;
+bool Config::caseSensitiveNames = TRUE;
bool Config::hideScopeNames = FALSE;
bool Config::verbatimHeaderFlag = TRUE;
bool Config::showIncFileFlag = TRUE;
@@ -140,6 +146,7 @@ bool Config::macroExpansionFlag = FALSE;
bool Config::onlyPredefinedFlag = FALSE;
bool Config::searchIncludeFlag = TRUE;
QStrList Config::includePath;
+QStrList Config::includeFilePatternList;
QStrList Config::predefined;
QStrList Config::expandAsDefinedList;
QStrList Config::tagFileList;
@@ -288,6 +295,7 @@ static int yyread(char *buf,int max_size)
<Start>"EXPAND_ONLY_PREDEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; }
<Start>"SEARCH_INCLUDES"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchIncludeFlag; }
<Start>"INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::includePath; l->clear(); elemStr=""; }
+<Start>"INCLUDE_FILE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::includeFilePatternList; l->clear(); elemStr=""; }
<Start>"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; }
<Start>"EXPAND_AS_DEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::expandAsDefinedList; l->clear(); elemStr=""; }
<Start>"TAGFILES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::tagFileList; l->clear(); elemStr=""; }
@@ -567,6 +575,14 @@ void dumpConfig()
}
}
{
+ char *is=Config::includeFilePatternList.first();
+ while (is)
+ {
+ printf("includeFilePatternList=`%s'\n",is);
+ is=Config::includeFilePatternList.next();
+ }
+ }
+ {
char *is=Config::predefined.first();
while (is)
{
@@ -643,7 +659,7 @@ void Config::init()
Config::sourceBrowseFlag = FALSE;
Config::inlineSourceFlag = FALSE;
Config::stripCommentsFlag = TRUE;
- Config::caseSensitiveNames = FALSE;
+ Config::caseSensitiveNames = TRUE;
Config::hideScopeNames = FALSE;
Config::verbatimHeaderFlag = TRUE;
Config::showIncFileFlag = TRUE;
@@ -697,6 +713,7 @@ void Config::init()
Config::onlyPredefinedFlag = FALSE;
Config::searchIncludeFlag = TRUE;
Config::includePath.clear();
+ Config::includeFilePatternList.clear();
Config::predefined.clear();
Config::expandAsDefinedList.clear();
Config::tagFileList.clear();
@@ -955,7 +972,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \n";
t << "# can be used to strip a user defined part of the path. Stripping is \n";
t << "# only done if one of the specified strings matches the left-hand part of \n";
- t << "# the path. \n";
+ t << "# the path. It is allowed to use relative paths in the argument list.\n";
t << "\n";
}
t << "STRIP_FROM_PATH = ";
@@ -1680,6 +1697,18 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
+ t << "# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \n";
+ t << "# patterns (like *.h and *.hpp) to filter out the header-files in the \n";
+ t << "# directories. If left blank, the patterns specified with FILE_PATTERNS will \n";
+ t << "# be used. \n";
+ t << "\n";
+ }
+ t << "INCLUDE_FILE_PATTERNS = ";
+ writeStringList(t,Config::includeFilePatternList);
+ t << "\n";
+ if (!sl)
+ {
+ t << "\n";
t << "# The PREDEFINED tag can be used to specify one or more macro names that \n";
t << "# are defined before the preprocessor is started (similar to the -D option of \n";
t << "# gcc). The argument of the tag is a list of macros of the form: name \n";
@@ -2164,6 +2193,7 @@ void substituteEnvironmentVars()
substEnvVarsInString( Config::manOutputDir );
substEnvVarsInString( Config::manExtension );
substEnvVarsInStrList( Config::includePath );
+ substEnvVarsInStrList( Config::includeFilePatternList );
substEnvVarsInStrList( Config::predefined );
substEnvVarsInStrList( Config::expandAsDefinedList );
substEnvVarsInStrList( Config::tagFileList );
diff --git a/src/definition.cpp b/src/definition.cpp
index 4b96f04..22a5826 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -132,6 +132,7 @@ static bool readCodeFragment(const char *fileName,
if (f.open(IO_ReadOnly))
{
int c=0;
+ int col=0;
int lineNr=1;
// skip until the startLine has reached
while (lineNr<startLine && !f.atEnd())
@@ -146,7 +147,21 @@ static bool readCodeFragment(const char *fileName,
char cn=0;
while (lineNr<=endLine && !f.atEnd() && !found)
{
- while ((c=f.getch())!='{' && c!=':' && c!=-1) if (c=='\n') lineNr++;
+ while ((c=f.getch())!='{' && c!=':' && c!=-1)
+ {
+ if (c=='\n')
+ {
+ lineNr++,col=0;
+ }
+ else if (c=='\t')
+ {
+ col+=Config::tabSize - (col%Config::tabSize);
+ }
+ else
+ {
+ col++;
+ }
+ }
if (c==':')
{
cn=f.getch();
@@ -159,6 +174,9 @@ static bool readCodeFragment(const char *fileName,
}
if (found)
{
+ // full the line with spaces until the right column
+ int i;
+ for (i=0;i<col;i++) result+=' ';
// copy until end of line
result+=c;
if (c==':') result+=cn;
@@ -346,10 +364,19 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
}
if (md->getStartBodyLine()!=-1 && md->getBodyDef())
{
+ // for HTML write a real link
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Html);
QCString lineStr,anchorStr;
anchorStr.sprintf("l%05d",md->getStartBodyLine());
- ol.writeObjectLink(0,md->getBodyDef()->sourceName(),
- anchorStr,name);
+ ol.writeObjectLink(0,md->getBodyDef()->sourceName(),anchorStr,name);
+ ol.popGeneratorState();
+
+ // for the other output formats just mention the name
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Html);
+ ol.docify(name);
+ ol.popGeneratorState();
}
else
{
diff --git a/src/diagram.cpp b/src/diagram.cpp
index 9bb2a9f..80e6d10 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -985,9 +985,11 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path,
output << ":\\begin{figure}[H]\n"
"\\begin{center}\n"
"\\leavevmode\n";
- output << "\\setlength{\\epsfysize}{" << realHeight << "cm}\n";
- output << "\\epsfbox{" << fileName << ".eps}\n"
- "\\end{center}\n"
+ //output << "\\setlength{\\epsfysize}{" << realHeight << "cm}\n";
+ //output << "\\epsfbox{" << fileName << ".eps}\n"
+ output << "\\includegraphics[height=" << realHeight << "cm]{"
+ << fileName << "}" << endl;
+ output << "\\end{center}\n"
"\\end{figure}\n";
//printf("writeFigure rows=%d cols=%d\n",rows,cols);
diff --git a/src/dot.cpp b/src/dot.cpp
index 996bf32..37d06f1 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -39,7 +39,7 @@ static const char *edgeColorMap[] =
"darkgreen", // Protected
"firebrick4", // Private
"darkorchid3", // "use" relation
- "grey" // Undocumented
+ "grey50" // Undocumented
};
static const char *edgeStyleMap[] =
@@ -82,7 +82,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName)
QCString *dest;
*urlPtr++='\0';
//printf("refPtr=`%s' urlPtr=`%s'\n",refPtr,urlPtr);
- //printf("Found url=%s coords=%d,%d,%d,%d\n",file,x1,y1,x2,y2);
+ //printf("Found url=%s coords=%d,%d,%d,%d\n",url,x1,y1,x2,y2);
t << "<area ";
if (*refPtr!='\0')
{
@@ -319,7 +319,7 @@ void DotNode::writeBox(QTextStream &t,
bool hasNonReachableChildren)
{
const char *labCol =
- m_url.isEmpty() ? "grey" : // non link
+ m_url.isEmpty() ? "grey50" : // non link
(
(hasNonReachableChildren) ? "red" : "black"
);
@@ -584,7 +584,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
dotCmd.sprintf("%sdot -Tgif \"%s\" -o \"%s\"",
Config::dotPath.data(),dotName.data(),gifName.data());
//printf("Running: dot -Tgif %s -o %s\n",dotName.data(),gifName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
out << "</table>" << endl;
@@ -593,7 +593,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
dotCmd.sprintf("%sdot -Timap \"%s\" -o \"%s\"",
Config::dotPath.data(),dotName.data(),mapName.data());
//printf("Running: dot -Timap %s -o %s\n",dotName.data(),mapName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
out << "</table>" << endl;
@@ -658,11 +658,12 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
}
else
{
+ QCString tmp_url="";
+ if (bClass->isLinkable())
+ tmp_url=bClass->getReference()+"$"+bClass->getOutputFileBase();
bn = new DotNode(m_curNodeNumber++,
bClass->displayName(),
- bClass->isLinkable() ?
- (bClass->getReference()+"$"+bClass->getOutputFileBase()).data() :
- 0
+ tmp_url.data()
);
//printf("Adding node %s to new base node %s (c=%d,p=%d)\n",
// n->m_label.data(),
@@ -704,12 +705,13 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
{
if (cd->isVisibleInHierarchy()) // root class in the graph
{
+ QCString tmp_url="";
+ if (cd->isLinkable())
+ tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
//printf("Inserting root class %s\n",cd->name().data());
DotNode *n = new DotNode(m_curNodeNumber++,
cd->displayName(),
- cd->isLinkable() ?
- (cd->getReference()+"$"+cd->getOutputFileBase()).data() :
- 0
+ tmp_url.data()
);
//m_usedNodes->clear();
@@ -812,10 +814,11 @@ void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot,
{
QCString displayName=className.copy();
if (Config::hideScopeNames) displayName=stripScope(displayName);
+ QCString tmp_url;
+ if (cd->isLinkable()) tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
bn = new DotNode(m_curNodeNumber++,
displayName,
- cd->isLinkable() ?
- (cd->getReference()+"$"+cd->getOutputFileBase()).data() : 0,
+ tmp_url.data(),
distance
);
if (distance>m_maxDistance) m_maxDistance=distance;
@@ -883,10 +886,11 @@ DotClassGraph::DotClassGraph(ClassDef *cd,GraphType t,int maxRecursionDepth)
m_graphType = t;
m_maxDistance = 0;
m_recDepth = maxRecursionDepth;
+ QCString tmp_url="";
+ if (cd->isLinkable()) tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
m_startNode = new DotNode(m_curNodeNumber++,
cd->displayName(),
- cd->isLinkable() ?
- (cd->getReference()+"$"+cd->getOutputFileBase()).data() : 0,
+ tmp_url.data(),
0, // distance
TRUE // is a root node
);
@@ -992,7 +996,7 @@ static void findMaximalDotGraph(DotNode *root,
// create annotated dot file
dotCmd.sprintf("%sdot -Tdot \"%s.dot\" -o \"%s_tmp.dot\"",
Config::dotPath.data(),baseName.data(),baseName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
return;
@@ -1084,7 +1088,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tgif \"%s.dot\" -o \"%s.gif\"",
Config::dotPath.data(),baseName.data(),baseName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
@@ -1093,7 +1097,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
// run dot again to create an image map
dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"",
Config::dotPath.data(),baseName.data(),baseName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
@@ -1111,7 +1115,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tps \"%s.dot\" -o \"%s.eps\"",
Config::dotPath.data(),baseName.data(),baseName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
@@ -1129,8 +1133,10 @@ void DotClassGraph::writeGraph(QTextStream &out,
out << "\\begin{figure}[H]\n"
"\\begin{center}\n"
"\\leavevmode\n"
- "\\setlength{\\epsfxsize}{" << QMIN(width/2,maxWidth) << "pt}\n"
- "\\epsfbox{" << baseName << ".eps}\n"
+ //"\\setlength{\\epsfxsize}{" << QMIN(width/2,maxWidth) << "pt}\n"
+ //"\\epsfbox{" << baseName << ".eps}\n"
+ "\\includegraphics[width=" << QMIN(width/2,maxWidth)
+ << "pt]{" << baseName << "}\n"
"\\end{center}\n"
"\\end{figure}\n";
}
@@ -1163,7 +1169,8 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
}
if (doc || src)
{
- QCString url=bfd ? bfd->getOutputFileBase().data() : "";
+ QCString url="";
+ if (bfd) url=bfd->getOutputFileBase().copy();
if (!doc && src)
{
url+="-source";
@@ -1177,10 +1184,12 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
}
else
{
+ QCString tmp_url="";
+ if (bfd) tmp_url=bfd->getReference()+"$"+url;
bn = new DotNode(
m_curNodeNumber++,
ii->includeName,
- bfd ? (bfd->getReference()+"$"+url).data() : 0,
+ tmp_url,
distance
);
if (distance>m_maxDistance) m_maxDistance=distance;
@@ -1199,9 +1208,10 @@ DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse)
m_inverse = inverse;
ASSERT(fd!=0);
m_diskName = fd->getOutputFileBase().copy();
+ QCString tmp_url=fd->getReference()+"$"+fd->getOutputFileBase();
m_startNode = new DotNode(m_curNodeNumber++,
fd->name(),
- fd->getReference()+"$"+fd->getOutputFileBase(),
+ tmp_url.data(),
0, // distance
TRUE // root node
);
@@ -1252,7 +1262,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tgif \"%s.dot\" -o \"%s.gif\"",
Config::dotPath.data(),baseName.data(),baseName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
@@ -1262,7 +1272,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
// run dot again to create an image map
dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"",
Config::dotPath.data(),baseName.data(),baseName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
@@ -1283,7 +1293,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tps \"%s.dot\" -o \"%s.eps\"",
Config::dotPath.data(),baseName.data(),baseName.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
@@ -1301,8 +1311,10 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
out << "\\begin{figure}[H]\n"
"\\begin{center}\n"
"\\leavevmode\n"
- "\\setlength{\\epsfxsize}{" << QMIN(width/2,maxWidth) << "pt}\n"
- "\\epsfbox{" << baseName << ".eps}\n"
+ //"\\setlength{\\epsfxsize}{" << QMIN(width/2,maxWidth) << "pt}\n"
+ //"\\epsfbox{" << baseName << ".eps}\n"
+ "\\includegraphics[width=" << QMIN(width/2,maxWidth)
+ << "pt]{" << baseName << "}\n"
"\\end{center}\n"
"\\end{figure}\n";
}
@@ -1341,7 +1353,7 @@ void generateGraphLegend(const char *path)
dotText << " Node12 -> Node7 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node12 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_privatebase.html\"];\n";
dotText << " Node13 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
- dotText << " Node13 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey\"];\n";
+ dotText << " Node13 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey50\"];\n";
dotText << " Node14 -> Node7 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n";
dotText << " Node14 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_used.html\"];\n";
dotText << "}\n";
@@ -1361,7 +1373,7 @@ void generateGraphLegend(const char *path)
QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tgif graph_legend.dot -o graph_legend.gif",
Config::dotPath.data());
- if (system(dotCmd)!=0)
+ if (iSystem(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index ae77a91..73f0969 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -58,7 +58,6 @@
#define pclose _pclose
#endif
-
// lists
ClassList classList; // all documented classes
NamespaceList namespaceList; // all namespaces
@@ -1032,32 +1031,6 @@ static MemberDef *addVariableToFile(
root->protection
);
- // new global variable, enum value or typedef
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- root->type,name,root->args,0,
- Public, Normal,root->stat,FALSE,
- mtype,0,0);
- //md->setDefFile(root->fileName);
- //md->setDefLine(root->startLine);
- md->setDocumentation(root->doc);
- md->setBriefDescription(root->brief);
- md->addSectionsToDefinition(root->anchors);
- md->setFromAnnonymousScope(fromAnnScope);
- md->setFromAnnonymousMember(fromAnnMemb);
- md->setIndentDepth(indentDepth);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setInitializer(root->initializer);
- md->setMaxInitLines(root->initLines);
- md->setMemberGroupId(root->mGrpId);
- bool ambig;
- FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig);
- md->setBodyDef(fd);
- //if (root->mGrpId!=-1)
- //{
- // md->setMemberGroup(memberGroupDict[root->mGrpId]);
- //}
-
// see if the function is inside a namespace
NamespaceDef *nd = 0;
if (!scope.isEmpty())
@@ -1068,21 +1041,6 @@ static MemberDef *addVariableToFile(
nd = namespaceDict[nscope];
}
}
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
- {
- nd->insertMember(md);
- md->setNamespace(nd);
- }
- else
- {
- // find file definition
- if (fd)
- {
- fd->insertMember(md);
- md->setFileDef(fd);
- }
- }
-
QCString def;
// determine the definition of the global variable
if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@' &&
@@ -1114,11 +1072,72 @@ static MemberDef *addVariableToFile(
}
}
if (def.left(7)=="static ") def=def.right(def.length()-7);
+
+ MemberName *mn=functionNameDict[name];
+ if (mn)
+ {
+ MemberDef *md=mn->first();
+ while (md)
+ {
+ QCString nscope=removeAnnonymousScopes(scope);
+ NamespaceDef *nd=0;
+ if (!nscope.isEmpty())
+ {
+ nd = namespaceDict[nscope];
+ }
+ if (nd==0 || md->getNamespace()==nd)
+ // variable already in the scope
+ {
+ addMemberDocs(root,md,def,0,FALSE);
+ return md;
+ }
+ md=mn->next();
+ }
+ }
+ // new global variable, enum value or typedef
+ MemberDef *md=new MemberDef(
+ root->fileName,root->startLine,
+ root->type,name,root->args,0,
+ Public, Normal,root->stat,FALSE,
+ mtype,0,0);
+ //md->setDefFile(root->fileName);
+ //md->setDefLine(root->startLine);
+ md->setDocumentation(root->doc);
+ md->setBriefDescription(root->brief);
+ md->addSectionsToDefinition(root->anchors);
+ md->setFromAnnonymousScope(fromAnnScope);
+ md->setFromAnnonymousMember(fromAnnMemb);
+ md->setIndentDepth(indentDepth);
+ md->setBodySegment(root->bodyLine,root->endBodyLine);
+ md->setInitializer(root->initializer);
+ md->setMaxInitLines(root->initLines);
+ md->setMemberGroupId(root->mGrpId);
+ bool ambig;
+ FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig);
+ md->setBodyDef(fd);
md->setDefinition(def);
+ //if (root->mGrpId!=-1)
+ //{
+ // md->setMemberGroup(memberGroupDict[root->mGrpId]);
+ //}
+
+ if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
+ {
+ nd->insertMember(md);
+ md->setNamespace(nd);
+ }
+ else
+ {
+ // find file definition
+ if (fd)
+ {
+ fd->insertMember(md);
+ md->setFileDef(fd);
+ }
+ }
- MemberName *mn = 0;
// add member definition to the list of globals
- if ((mn=functionNameDict[name]))
+ if (mn)
{
mn->inSort(md);
}
@@ -1344,6 +1363,23 @@ static void buildMemberList(Entry *root)
// root->parent->name.data(),getClass(root->parent->name),
// root->type.find(re,0));
QCString scope=stripAnnonymousNamespaceScope(root->parent->name.copy());
+
+ bool isMember=FALSE;
+ int memIndex=root->name.find("::");
+ if (memIndex!=-1)
+ {
+ int ts=root->name.find('<');
+ int te=root->name.find('>');
+ if (ts==-1 || te==-1)
+ {
+ isMember=TRUE;
+ }
+ else
+ {
+ isMember=memIndex<ts && memIndex<te;
+ }
+ }
+
int i;
if (root->parent &&
!root->parent->name.isEmpty() &&
@@ -1494,10 +1530,13 @@ static void buildMemberList(Entry *root)
}
else if (root->parent &&
!(root->parent->section & Entry::COMPOUND_MASK) &&
- root->name.find("::")==-1 && // TODO: remove this check
- // it breaks cases like
- // func<A::B>(), but it is needed
- // for detect that A::func() is a member
+ !isMember &&
+
+ //root->name.find("::")==-1 && // TODO: remove this check
+ // // it breaks cases like
+ // // func<A::B>(), but it is needed
+ // // for detect that A::func() is a member
+
root->relates.isEmpty() &&
root->type.left(7)!="extern " &&
root->type.left(8)!="typedef "
@@ -2193,7 +2232,8 @@ static void addMemberDocs(Entry *root,
//{
// md->setBody(root->body);
//}
- if (md->getStartBodyLine()==-1 && root->bodyLine!=-1)
+ if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1) ||
+ (md->isVariable() && !root->explicitExternal))
{
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
@@ -3792,7 +3832,6 @@ static void buildCompleteMemberLists()
static void generateFileSources()
{
if (documentedHtmlFiles==0) return;
- writeFileIndex(*outputList);
if (inputNameList.count()>0)
{
@@ -3821,7 +3860,6 @@ static void generateFileSources()
static void generateFileDocs()
{
if (documentedHtmlFiles==0) return;
- writeFileIndex(*outputList);
if (inputNameList.count()>0)
{
@@ -4602,8 +4640,11 @@ static void generateSearchIndex()
}
//----------------------------------------------------------------------------
-// generate the configuration file
+/*! Generate a template version of the configuration file.
+ * If the \a shortList parameter is TRUE a configuration file without
+ * comments will be generated.
+ */
static void generateConfigFile(const char *configFile,bool shortList)
{
QFile f;
@@ -4619,6 +4660,9 @@ static void generateConfigFile(const char *configFile,bool shortList)
if (fi.exists()) // create a backup
{
QDir dir=fi.dir();
+ QFileInfo backup(fi.fileName()+".bak");
+ if (backup.exists()) // remove existing backup
+ dir.remove(backup.fileName());
dir.rename(fi.fileName(),fi.fileName()+".bak");
}
f.setName(configFile);
@@ -4642,12 +4686,66 @@ static void generateConfigFile(const char *configFile,bool shortList)
}
else
{
- err("Error: Cannot open file %s for writing\n");
+ err("Error: Cannot open file %s for writing\n",configFile);
exit(1);
}
}
//----------------------------------------------------------------------------
+
+/*! Generate a template stylesheet
+ */
+static void generateStyleSheetFile(OutputGenerator::OutputType outType,const char *sheetName)
+{
+ QFile f;
+ bool fileOpened=FALSE;
+ bool writeToStdout = strcmp(sheetName,"-")==0;
+ if (writeToStdout) // write to stdout
+ {
+ fileOpened = f.open(IO_WriteOnly,stdout);
+ }
+ else // write to file
+ {
+ QFileInfo fi(sheetName);
+ if (fi.exists()) // create a backup
+ {
+ QDir dir=fi.dir();
+ QFileInfo backup(fi.fileName()+".bak");
+ if (backup.exists()) // remove existing backup
+ dir.remove(backup.fileName());
+ dir.rename(fi.fileName(),fi.fileName()+".bak");
+ }
+ f.setName(sheetName);
+ fileOpened = f.open(IO_WriteOnly);
+ }
+
+ if (fileOpened)
+ {
+ switch(outType)
+ {
+ case OutputGenerator::RTF:
+ RTFGenerator::writeStyleSheetFile(f);
+ break;
+ case OutputGenerator::Html:
+ HtmlGenerator::writeStyleSheetFile(f);
+ break;
+ case OutputGenerator::Latex:
+ LatexGenerator::writeStyleSheetFile(f);
+ break;
+ default:
+ break;
+ }
+ f.close();
+ }
+ else
+ {
+ err("Error: Cannot open file %s for writing\n",sheetName);
+ exit(1);
+ }
+}
+
+
+//----------------------------------------------------------------------------
// read and parse a tag file
//static bool readLineFromFile(QFile &f,QCString &s)
@@ -5080,7 +5178,7 @@ static void readFormulaRepository()
static void usage(const char *name)
{
msg("Doxygen version %s\nCopyright Dimitri van Heesch 1997-2000\n\n",versionString);
- msg("You can use doxygen in three ways:\n\n");
+ msg("You can use doxygen in four ways:\n\n");
msg("1) Use doxygen to generate a template configuration file:\n");
msg(" %s [-s] -g [configName]\n\n",name);
msg(" If - is used for configName doxygen will write to standard output.\n\n");
@@ -5090,6 +5188,9 @@ static void usage(const char *name)
msg("configuration file:\n");
msg(" %s [configName]\n\n",name);
msg(" If - is used for configName doxygen will read from standard input.\n\n");
+ msg("4) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
+ msg(" %s -w rtf|html|latex outputFileName [configName]\n",name);
+ msg(" If - is used for outputFileName doxygen will write to standard output.\n\n");
msg("If -s is specified the comments in the config file will be omitted.\n");
msg("If configName is omitted `Doxyfile' will be used as a default.\n\n");
exit(1);
@@ -5127,11 +5228,13 @@ int main(int argc,char **argv)
int optind=1;
const char *configName=0;
const char *debugLabel;
+ const char *formatName;
bool genConfig=FALSE;
bool shortList=FALSE;
bool updateConfig=FALSE;
while (optind<argc && argv[optind][0]=='-' &&
- (isalpha(argv[optind][1]) || argv[optind][1]=='?')
+ (isalpha(argv[optind][1]) || argv[optind][1]=='?' ||
+ argv[optind][1]=='-')
)
{
switch(argv[optind][1])
@@ -5151,6 +5254,64 @@ int main(int argc,char **argv)
case 'u':
updateConfig=TRUE;
break;
+ case 'w':
+ formatName=getArg(argc,argv,optind);
+ if (!formatName)
+ {
+ err("Error: option -w is missing format specifier rtf, html or latex\n");
+ exit(1);
+ }
+ if (optind+1>=argc)
+ {
+ err("Error: option -w is missing a configuration file name\n");
+ exit(1);
+ }
+ if (strcasecmp(formatName,"rtf")==0)
+ {
+ generateStyleSheetFile(OutputGenerator::RTF,argv[optind+1]);
+ exit(1);
+ }
+ else if (strcasecmp(formatName,"html")==0)
+ {
+ generateStyleSheetFile(OutputGenerator::Html,argv[optind+1]);
+ exit(1);
+ }
+ else if (strcasecmp(formatName,"latex")==0)
+ {
+ if (optind+2<argc) // use config file to get settings
+ {
+ QCString configFile=fileToString(argv[optind+2]);
+ if (configFile.isEmpty()) exit(1);
+ parseConfig(fileToString(argv[optind+2]));
+ configStrToVal();
+ substituteEnvironmentVars();
+ checkConfig();
+ }
+ else // use default config
+ {
+ Config::init();
+ setTranslator("English");
+ }
+ generateStyleSheetFile(OutputGenerator::Latex,argv[optind+1]);
+ exit(1);
+ }
+ else
+ {
+ err("Error: Illegal format specifier %s: should be one of rtf, html, or latex\n",formatName);
+ exit(1);
+ }
+ break;
+ case '-':
+ if (strcmp(&argv[optind][2],"help")==0)
+ {
+ usage(argv[0]);
+ }
+ else if (strcmp(&argv[optind][2],"version")==0)
+ {
+ msg("%s\n",versionString);
+ exit(1);
+ }
+ break;
case 'h':
case '?':
usage(argv[0]);
@@ -5284,7 +5445,9 @@ int main(int argc,char **argv)
s=Config::includePath.first();
while (s)
{
- readFileOrDirectory(s,0,includeNameDict,0,&Config::filePatternList,
+ QStrList *pl = &Config::includeFilePatternList;
+ if (pl->count()==0) pl = &Config::filePatternList;
+ readFileOrDirectory(s,0,includeNameDict,0,pl,
&Config::excludePatternList,0,0);
s=Config::includePath.next();
}
@@ -5429,6 +5592,9 @@ int main(int argc,char **argv)
msg("Search for main page...\n");
findMainPage(root);
+ msg("Searching for documented variables...\n");
+ buildVarList(root);
+
msg("Building member list...\n"); // using class info only !
buildMemberList(root);
transferFunctionDocumentation();
@@ -5436,9 +5602,6 @@ int main(int argc,char **argv)
msg("Searching for friends...\n");
findFriends();
- msg("Searching for documented variables...\n");
- buildVarList(root);
-
msg("Searching for documented defines...\n");
findDefineDocumentation(root);
@@ -5534,6 +5697,9 @@ int main(int argc,char **argv)
msg("Generating index page...\n");
writeIndex(*outputList);
+ msg("Generating file index...\n");
+ writeFileIndex(*outputList);
+
msg("Generating example documentation...\n");
generateExampleDocs();
diff --git a/src/entry.cpp b/src/entry.cpp
index 2638051..ceee6ca 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -51,6 +51,7 @@ Entry::Entry(const Entry &e)
sig = e.sig;
slot = e.slot;
stat = e.stat;
+ explicitExternal = e.explicitExternal;
virt = e.virt;
parent = e.parent;
type = e.type.copy();
@@ -219,6 +220,7 @@ void Entry::reset()
slot = FALSE;
stat = FALSE;
proto = FALSE;
+ explicitExternal = FALSE;
memSpec = 0;
subGrouping = TRUE;
protection = Public;
diff --git a/src/entry.h b/src/entry.h
index 9f3018d..5c98a8c 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -164,6 +164,7 @@ class Entry
bool sig; // a Qt signal ?
bool slot; // a Qt slot ?
bool stat; // static ?
+ bool explicitExternal; // explicitly defined as external?
bool proto; // prototype ?
int memSpec; // member specifiers
int initLines; // define/variable initializer lines to show
diff --git a/src/filedef.cpp b/src/filedef.cpp
index fb21f39..ac174f3 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -633,6 +633,7 @@ void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,bool local
//-----------------------------------------------------------------------------
+#if 0
/*! Creates a file list. */
FileList::FileList() : QList<FileDef>()
{
@@ -659,4 +660,4 @@ FileListIterator::FileListIterator(const FileList &cllist) :
QListIterator<FileDef>(cllist)
{
}
-
+#endif
diff --git a/src/filedef.h b/src/filedef.h
index 0dd8d05..c42d2e5 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -169,6 +169,7 @@ class FileDef : public Definition
MemberGroupDict *memberGroupDict;
};
+#if 0 // obsolete
/*! \class FileList filedef.h
\brief This class is list of file definitions.
@@ -195,5 +196,43 @@ class FileListIterator : public QListIterator<FileDef>
public:
FileListIterator(const FileList &list);
};
+#endif
+
+class FileList : public QList<FileDef>
+{
+ public:
+ FileList() : m_pathName("tmp") {}
+ FileList(const char *path) : QList<FileDef>(), m_pathName(path) {}
+ ~FileList() {}
+ QCString path() const { return m_pathName; }
+ int compareItems(GCI item1,GCI item2)
+ {
+ FileDef *md1 = (FileDef *)item1;
+ FileDef *md2 = (FileDef *)item2;
+ return strcasecmp(md1->name(),md2->name());
+ }
+ private:
+ QCString m_pathName;
+};
+
+class OutputNameList : public QList<FileList>
+{
+ public:
+ OutputNameList() : QList<FileList>() {}
+ ~OutputNameList() {}
+ int compareItems(GCI item1,GCI item2)
+ {
+ FileList *fl1 = (FileList *)item1;
+ FileList *fl2 = (FileList *)item2;
+ return strcasecmp(fl1->path(),fl2->path());
+ }
+};
+
+class OutputNameDict : public QDict<FileList>
+{
+ public:
+ OutputNameDict(int size) : QDict<FileList>(size) {}
+ ~OutputNameDict() {}
+};
#endif
diff --git a/src/formula.cpp b/src/formula.cpp
index 4cd5644..d7e444c 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -100,7 +100,7 @@ void FormulaList::generateBitmaps(const char *path)
{
//printf("Running latex...\n");
//system("latex _formulas.tex </dev/null >/dev/null");
- if (system("latex _formulas.tex")!=0)
+ if (iSystem("latex _formulas.tex")!=0)
{
err("Problems running latex. Check your installation or look for typos in _formulas.tex!\n");
formulaError=TRUE;
@@ -121,7 +121,7 @@ void FormulaList::generateBitmaps(const char *path)
// encapsulated postscript.
sprintf(dviCmd,"dvips -q -D 600 -E -n 1 -p %d -o %s.eps _formulas.dvi",
pageIndex,formBase.data());
- if (system(dviCmd)!=0)
+ if (iSystem(dviCmd)!=0)
{
err("Problems running dvips. Check your installation!\n");
return;
@@ -183,7 +183,7 @@ void FormulaList::generateBitmaps(const char *path)
);
#endif
//printf("Running ghostscript...\n");
- if (system(gsCmd)!=0)
+ if (iSystem(gsCmd)!=0)
{
err("Problem running ghostscript. Check your installation!\n");
return;
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index acca70b..89e9b2c 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -28,12 +28,37 @@
#include "diagram.h"
#include "version.h"
#include "dot.h"
+#include "language.h"
#define GROUP_COLOR "#ff8080"
//#define DBG_HTML(x) x;
#define DBG_HTML(x)
+static const char *defaultStyleSheet =
+ "H1 { text-align: center; }\n"
+ "A.qindex {}\n"
+ "A.qindexRef {}\n"
+ "A.el { text-decoration: none; font-weight: bold }\n"
+ "A.elRef { font-weight: bold }\n"
+ "A.code { text-decoration: none; font-weight: normal; color: #4444ee }\n"
+ "A.codeRef { font-weight: normal; color: #4444ee }\n"
+ "DL.el { margin-left: -1cm }\n"
+ "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }\n"
+ "DIV.in { margin-left: 16 }\n"
+ "DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }\n"
+ "TD.md { background-color: #f2f2ff }\n"
+ "DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }\n"
+ "DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller }\n"
+ "FONT.keyword { color: #008000 }\n"
+ "FONT.keywordtype { color: #604020 }\n"
+ "FONT.keywordflow { color: #e08000 }\n"
+ "FONT.comment { color: #800000 }\n"
+ "FONT.preprocessor { color: #806020 }\n"
+ "FONT.stringliteral { color: #002080 }\n"
+ "FONT.charliteral { color: #008080 }\n";
+
+
HtmlHelp *HtmlGenerator::htmlHelp = 0;
HtmlGenerator::HtmlGenerator() : OutputGenerator()
@@ -66,6 +91,11 @@ void HtmlGenerator::init()
writeNullImage(Config::htmlOutputDir);
}
+void HtmlGenerator::writeStyleSheetFile(QFile &file)
+{
+ QTextStream t(&file);
+ t << defaultStyleSheet;
+}
void HtmlGenerator::startFile(const char *name,const char *title,bool external)
{
QCString fileName=name;
@@ -77,6 +107,8 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
{
t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
"<html><head><meta name=\"robots\" content=\"noindex\">\n"
+ "<meta http-equiv=\"Content-Type\" content=\"text/html;charset="
+ << theTranslator->idLanguageCharset() << "\">\n"
"<title>" << title << "</title>\n";
t << "<link ";
if (external)
@@ -198,29 +230,7 @@ void HtmlGenerator::writeStyleInfo(int part)
//t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
//t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
- t << "H1 { text-align: center; }" << endl;
- t << "A.qindex {}" << endl;
- t << "A.qindexRef {}" << endl;
- t << "A.el { text-decoration: none; font-weight: bold }" << endl;
- t << "A.elRef { font-weight: bold }" << endl;
- t << "A.code { text-decoration: none; font-weight: normal; color: #4444ee }" << endl;
- t << "A.codeRef { font-weight: normal; color: #4444ee }" << endl;
- t << "DL.el { margin-left: -1cm }" << endl;
- t << "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }" << endl;
- t << "DIV.in { margin-left: 16 }" << endl;
- t << "DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }" << endl;
- t << "TD.md { background-color: #f2f2ff }" << endl;
- t << "DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }" << endl;
- t << "DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller }" << endl;
- t << "FONT.keyword { color: #008000 }" << endl;
- t << "FONT.keywordtype { color: #604020 }" << endl;
- t << "FONT.keywordflow { color: #e08000 }" << endl;
- t << "FONT.comment { color: #800000 }" << endl;
- t << "FONT.preprocessor { color: #806020 }" << endl;
- t << "FONT.stringliteral { color: #002080 }" << endl;
- t << "FONT.charliteral { color: #008080 }" << endl;
- //t << "TD.groupLine { background-color: #3080ff }" << endl;
- t << endl;
+ t << defaultStyleSheet;
endPlainFile();
}
else // write user defined style sheet
@@ -759,8 +769,8 @@ void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const
t << "<p>" << endl;
t << "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\" border=\"0\">" << endl;
t << " <tr>" << endl;
- t << " <td class=\"md\"><b>" << endl;
- t << " <table cellspadding=\"0\" cellspacing=\"0\" border=\"0\">" << endl;
+ t << " <td class=\"md\">" << endl;
+ t << " <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">" << endl;
}
void HtmlGenerator::startMemberDocPrefixItem()
@@ -887,3 +897,20 @@ void HtmlGenerator::endMemberGroup(bool)
{
}
+void HtmlGenerator::startIndent()
+{
+ //t << "<div class=\"in\">" << endl;
+ t << "<table cellspacing=5 cellpadding=0 border=0>\n"
+ " <tr>\n"
+ " <td>\n"
+ " &nbsp;\n"
+ " </td>\n"
+ " <td>\n";
+}
+void HtmlGenerator::endIndent()
+{
+ t << " </td>\n"
+ " </tr>\n"
+ "</table>\n";
+ //t << "</div>" << endl;
+}
diff --git a/src/htmlgen.h b/src/htmlgen.h
index e0e58cb..cda2982 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -29,6 +29,8 @@ class HtmlGenerator : public OutputGenerator
public:
HtmlGenerator();
~HtmlGenerator();
+ static void init();
+ static void writeStyleSheetFile(QFile &f);
OutputGenerator *copy() { return new HtmlGenerator; }
//OutputGenerator *clone() { return new HtmlGenerator(*this); }
@@ -41,7 +43,6 @@ class HtmlGenerator : public OutputGenerator
bool isEnabled(OutputType o) { return (o==Html && active); }
OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; }
- static void init();
//void generateExternalIndex();
void startFile(const char *name,const char *title,bool external);
@@ -185,8 +186,8 @@ class HtmlGenerator : public OutputGenerator
void writeSectionRefItem(const char *,const char *,const char *);
void writeSectionRefAnchor(const char *,const char *,const char *);
void addToIndex(const char *,const char *) {}
- void startIndent() { t << "<div class=\"in\">" << endl; }
- void endIndent() { t << "</div>" << endl; }
+ void startIndent();
+ void endIndent();
void writeSynopsis() {}
void startClassDiagram();
void endClassDiagram(ClassDiagram &,const char *,const char *);
diff --git a/src/index.cpp b/src/index.cpp
index d59a3a0..3a76956 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -37,6 +37,8 @@
//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+
// strips w from s iff s starts with w
bool stripWord(QCString &s,QCString w)
{
@@ -367,19 +369,50 @@ void writeFileIndex(OutputList &ol)
//ol.newParagraph();
ol.endTextBlock();
- ol.startIndexList();
+ OutputNameDict outputNameDict(1009);
+ OutputNameList outputNameList;
+ outputNameList.setAutoDelete(TRUE);
+
+ // re-sort input files in (dir,file) output order instead of (file,dir) input order
FileName *fn=inputNameList.first();
while (fn)
{
FileDef *fd=fn->first();
while (fd)
{
+ QCString path=fd->getPath();
+ if (path.isEmpty()) path="[external]";
+ FileList *fl = outputNameDict.find(path);
+ if (fl)
+ {
+ fl->inSort(fd);
+ //printf("+ inserting %s---%s\n",fd->getPath().data(),fd->name().data());
+ }
+ else
+ {
+ //printf("o inserting %s---%s\n",fd->getPath().data(),fd->name().data());
+ fl = new FileList(path);
+ fl->inSort(fd);
+ outputNameList.inSort(fl);
+ outputNameDict.insert(path,fl);
+ }
+ fd=fn->next();
+ }
+ fn=inputNameList.next();
+ }
+
+ ol.startIndexList();
+ FileList *fl=outputNameList.first();
+ while (fl)
+ {
+ FileDef *fd=fl->first();
+ while (fd)
+ {
+ //printf("Found filedef %s\n",fd->name().data());
bool doc = fd->isLinkableInProject();
bool src = fd->generateSource() || Config::sourceBrowseFlag;
if ((doc || src) && !fd->isReference())
{
- //ol.writeIndexItem(fd->getReference(),fd->diskName(),
- // fd->name());
QCString path;
if (Config::fullPathNameFlag)
{
@@ -419,6 +452,10 @@ void writeFileIndex(OutputList &ol)
if (doc)
{
ol.writeObjectLink(0,fd->getOutputFileBase(),0,fd->name());
+ if (hasHtmlHelp)
+ {
+ htmlHelp->addContentsItem(fd->name(),fd->getOutputFileBase());
+ }
}
else
{
@@ -434,7 +471,6 @@ void writeFileIndex(OutputList &ol)
parseText(ol,theTranslator->trCode());
ol.docify("]");
ol.endTextLink();
- //ol.writeObjectLink(0,fd->includeName(),0," [src]");
}
if (!fd->briefDescription().isEmpty())
{
@@ -447,18 +483,13 @@ void writeFileIndex(OutputList &ol)
ol+=briefOutput;
ol.docify(")");
}
- //ol.enable(OutputGenerator::Latex);
ol.popGeneratorState();
// --------------------------------------------------------
- if (hasHtmlHelp)
- {
- htmlHelp->addContentsItem(fd->name(),fd->getOutputFileBase());
- }
}
- fd=fn->next();
+ fd=fl->next();
}
- fn=inputNameList.next();
+ fl=outputNameList.next();
}
ol.endIndexList();
if (hasHtmlHelp)
@@ -773,7 +804,7 @@ void writeAlphabeticalClassList(OutputList &ol)
}
// generate table
- for (i=0;i<rows;i++) // forarch table row
+ for (i=0;i<rows;i++) // foreach table row
{
ol.nextTableRow();
// the last column may contain less items then the others
@@ -1474,10 +1505,7 @@ void writeGroupList(OutputList &ol)
{
ol.startDescItem();
ol.startTextLink(gd->getOutputFileBase(),0);
- parseDoc(ol,
- gd->getDefFileName(),gd->getDefLine(),
- 0,0,
- gd->groupTitle());
+ parseText(ol,gd->groupTitle());
ol.endTextLink();
ol.endDescItem();
parseDoc(ol,
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index f3d8110..1a19618 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -146,12 +146,24 @@ void LatexGenerator::init()
<< endl
<< "ps: refman.ps" << endl
<< endl
- << "pdf: ps" << endl
- << "\tps2pdf refman.ps refman.pdf" << endl
+ << "pdf: refman.pdf" << endl
+ << endl
+ << "ps_2on1: refman_2on1.ps" << endl
+ << endl
+ << "pdf_2on1: refman_2on1.pdf" << endl
<< endl
<< "refman.ps: refman.dvi" << endl
<< "\tdvips -o refman.ps refman.dvi" << endl
<< endl
+ << "refman.pdf: refman.ps" << endl
+ << "\tps2pdf refman.ps refman.pdf" << endl
+ << endl
+ << "refman_2on1.ps: refman.ps" << endl
+ << "\tpsnup -2 refman.ps >refman_2on1.ps" << endl
+ << endl
+ << "refman_2on1.pdf: refman_2on1.ps" << endl
+ << "\tps2pdf refman_2on1.ps refman_2on1.pdf" << endl
+ << endl
<< "refman.dvi: refman.tex doxygen.sty" << endl
<< "\techo \"Running latex...\"" << endl
<< "\tlatex refman.tex" << endl
@@ -163,6 +175,117 @@ void LatexGenerator::init()
<< "\trm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out" << endl;
}
+static void writeDefaultsStyleSheetPart1(QTextStream &t)
+{
+ // part 1
+
+ QCString paperName;
+ if (Config::latexBatchModeFlag) t << "\\batchmode" << endl;
+ if (Config::paperType=="a4wide") paperName="a4"; else paperName=Config::paperType;
+ t << "\\documentclass[" << paperName << "paper";
+ if (Config::pdfHyperFlag) t << ",ps2pdf";
+ t << "]{";
+ if (Config::compactLatexFlag) t << "article"; else t << "book";
+ t << "}\n";
+ if (Config::paperType=="a4wide") t << "\\usepackage{a4wide}\n";
+ t << "\\usepackage{makeidx}\n"
+ "\\usepackage{fancyhdr}\n"
+ "\\usepackage{graphicx}\n"
+ "\\usepackage{float}\n"
+ "\\usepackage{doxygen}\n";
+ if (Config::pdfHyperFlag)
+ {
+ t << "\\usepackage{times}" << endl
+ << "\\usepackage[backref=true," << endl
+ << " pagebackref=true," << endl
+ << " colorlinks=true," << endl
+ << " linkcolor=blue" << endl
+ << " ]{hyperref}" << endl;
+ }
+ // Try to get the command for switching on the language
+ // support
+ QCString sLanguageSupportCommand(
+ theTranslator->latexLanguageSupportCommand());
+
+ if (!sLanguageSupportCommand.isEmpty())
+ {
+ // The command is not empty. The language does
+ // not want to use the babel package. Use this
+ // command instead.
+ t << sLanguageSupportCommand;
+ }
+ else
+ {
+ if (!theTranslator->latexBabelPackage().isEmpty())
+ {
+ // The result of the LatexLanguageSupportCommand()
+ // is empty, which means that the language prefers
+ // the babel package, or no package is needed at all.
+ if (theTranslator->latexBabelPackage()=="russian")
+ {
+ // The russian babel package also needs an encoding.
+ // Assume the encoding matched the platform.
+#if defined(_WIN32)
+ t << "\\usepackage[cp1251]{inputenc}\n";
+#else
+ t << "\\usepackage[koi8-r]{inputenc}\n";
+#endif
+ }
+ t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n";
+ }
+ }
+
+ const char *s=Config::extraPackageList.first();
+ while (s)
+ {
+ t << "\\usepackage{" << s << "}\n";
+ s=Config::extraPackageList.next();
+ }
+ t << "\\makeindex\n"
+ "\\setcounter{tocdepth}{1}\n"
+ "\\setlength{\\footrulewidth}{0.4pt}\n"
+ "\\begin{document}\n"
+ "\\begin{titlepage}\n"
+ "\\vspace*{7cm}\n"
+ "\\begin{center}\n"
+ "{\\Large ";
+
+}
+
+static void writeDefaultsStyleSheetPart2(QTextStream &t)
+{
+ // part 2
+ t << "}\\\\" << endl
+ << "\\vspace*{1cm}" << endl
+ << "{\\large ";
+}
+
+static void writeDefaultsStyleSheetPart3(QTextStream &t)
+{
+ // part 3
+ t << " Doxygen " << versionString << "}\\\\" << endl
+ << "\\vspace*{0.5cm}" << endl
+ << "{\\small " << dateToString(TRUE) << "}\\\\" << endl
+ << "\\end{center}" << endl
+ << "\\end{titlepage}" << endl;
+ if (!Config::compactLatexFlag) t << "\\clearemptydoublepage\n";
+ t << "\\pagenumbering{roman}\n";
+ t << "\\tableofcontents\n";
+ if (!Config::compactLatexFlag) t << "\\clearemptydoublepage\n";
+ t << "\\pagenumbering{arabic}\n";
+}
+
+void LatexGenerator::writeStyleSheetFile(QFile &f)
+{
+ QTextStream t(&f);
+ writeDefaultsStyleSheetPart1(t);
+ t << "Your title here";
+ writeDefaultsStyleSheetPart2(t);
+ t << "Generated by";
+ writeDefaultsStyleSheetPart3(t);
+}
+
+
void LatexGenerator::startFile(const char *name,const char *,bool)
{
QCString fileName=name;
@@ -187,82 +310,13 @@ void LatexGenerator::startProjectNumber()
void LatexGenerator::startIndexSection(IndexSections is)
{
- QCString paperName;
switch (is)
{
case isTitlePageStart:
{
if (Config::latexHeaderFile.isEmpty())
{
- if (Config::latexBatchModeFlag) t << "\\batchmode" << endl;
- if (Config::paperType=="a4wide") paperName="a4"; else paperName=Config::paperType;
- t << "\\documentclass[" << paperName << "paper";
- if (Config::pdfHyperFlag) t << ",ps2pdf";
- t << "]{";
- if (Config::compactLatexFlag) t << "article"; else t << "book";
- t << "}\n";
- if (Config::paperType=="a4wide") t << "\\usepackage{a4wide}\n";
- t << "\\usepackage{makeidx}\n"
- "\\usepackage{fancyhdr}\n"
- "\\usepackage{epsfig}\n"
- "\\usepackage{float}\n"
- "\\usepackage{doxygen}\n";
- if (Config::pdfHyperFlag)
- {
- t << "\\usepackage{times}" << endl
- << "\\usepackage[backref=true," << endl
- << " pagebackref=true," << endl
- << " colorlinks=true," << endl
- << " linkcolor=blue" << endl
- << " ]{hyperref}" << endl;
- }
- // Try to get the command for switching on the language
- // support
- QCString sLanguageSupportCommand(
- theTranslator->latexLanguageSupportCommand());
-
- if (!sLanguageSupportCommand.isEmpty())
- {
- // The command is not empty. The language does
- // not want to use the babel package. Use this
- // command instead.
- t << sLanguageSupportCommand;
- }
- else
- {
- if (!theTranslator->latexBabelPackage().isEmpty())
- {
- // The result of the LatexLanguageSupportCommand()
- // is empty, which means that the language prefers
- // the babel package, or no package is needed at all.
- if (theTranslator->latexBabelPackage()=="russian")
- {
- // The russian babel package also needs an encoding.
- // Assume the encoding matched the platform.
-#if defined(_WIN32)
- t << "\\usepackage[cp1251]{inputenc}\n";
-#else
- t << "\\usepackage[koi8-r]{inputenc}\n";
-#endif
- }
- t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n";
- }
- }
-
- const char *s=Config::extraPackageList.first();
- while (s)
- {
- t << "\\usepackage{" << s << "}\n";
- s=Config::extraPackageList.next();
- }
- t << "\\makeindex\n"
- "\\setcounter{tocdepth}{1}\n"
- "\\setlength{\\footrulewidth}{0.4pt}\n"
- "\\begin{document}\n"
- "\\begin{titlepage}\n"
- "\\vspace*{7cm}\n"
- "\\begin{center}\n"
- "{\\Large ";
+ writeDefaultsStyleSheetPart1(t);
}
else
{
@@ -274,9 +328,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
case isTitlePageAuthor:
if (Config::latexHeaderFile.isEmpty())
{
- t << "}\\\\" << endl
- << "\\vspace*{1cm}" << endl
- << "{\\large ";
+ writeDefaultsStyleSheetPart2(t);
}
break;
case isMainPage:
@@ -406,16 +458,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
case isTitlePageAuthor:
if (Config::latexHeaderFile.isEmpty())
{
- t << " Doxygen " << versionString << "}\\\\" << endl
- << "\\vspace*{0.5cm}" << endl
- << "{\\small " << dateToString(TRUE) << "}\\\\" << endl
- << "\\end{center}" << endl
- << "\\end{titlepage}" << endl;
- if (!Config::compactLatexFlag) t << "\\clearemptydoublepage\n";
- t << "\\pagenumbering{roman}\n";
- t << "\\tableofcontents\n";
- if (!Config::compactLatexFlag) t << "\\clearemptydoublepage\n";
- t << "\\pagenumbering{arabic}\n";
+ writeDefaultsStyleSheetPart3(t);
}
break;
case isMainPage:
@@ -1108,15 +1151,15 @@ void LatexGenerator::docify(const char *str)
break;
case '"': if (isGerman) // " has a special meaning if German
// - Thomas Vesper
- { t << "\\char`\\\""; }
+ { t << "\\char`\\\"{}"; }
else
{ t << (char)c; }
break;
default:
if (isJapanese)
- { // language is japanese
- if (c>=128) // wide character
+ { // Japanese language uses wide characters
+ if (c>=128)
{
t << (char)c;
if (*p)
@@ -1125,25 +1168,25 @@ void LatexGenerator::docify(const char *str)
t << (char)c;
}
}
- else // ascii char => see if we can insert hypenation hint
+ else // ascii char => see if we can insert a hypenation hint
{
if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c;
}
}
- else if (isRussian)
+ else if (isCzech || isRussian)
{
if (c>=128)
{
t << (char)c;
}
- else
+ else // ascii char => see if we can insert a hypenation hint
{
if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c;
}
}
- else // language is other than russian or japanese
+ else // language is other than Czech, Russian or Japanese
{
switch(c)
{
@@ -1156,8 +1199,8 @@ void LatexGenerator::docify(const char *str)
case 194: t << "\\^{A}"; break;
case 195: t << "\\~{A}"; break;
case 196: t << "\\\"{A}"; break;
- case 197: t << "\\AA "; break;
- case 198: t << "\\AE "; break;
+ case 197: t << "\\AA{}"; break;
+ case 198: t << "\\AE{}"; break;
case 199: t << "\\c{C}"; break;
case 200: t << "\\`{E}"; break;
case 201: t << "\\'{E}"; break;
@@ -1181,14 +1224,14 @@ void LatexGenerator::docify(const char *str)
case 219: t << "\\^{U}"; break;
case 220: t << "\\\"{U}"; break;
case 221: t << "\\'{Y}"; break;
- case 223: t << "\\ss "; break;
+ case 223: t << "\\ss{}"; break;
case 224: t << "\\`{a}"; break;
case 225: t << "\\'{a}"; break;
case 226: t << "\\^{a}"; break;
case 227: t << "\\~{a}"; break;
case 228: t << "\\\"{a}"; break;
- case 229: t << "\\aa "; break;
- case 230: t << "\\ae "; break;
+ case 229: t << "\\aa{}"; break;
+ case 230: t << "\\ae{}"; break;
case 231: t << "\\c{c}"; break;
case 232: t << "\\`{e}"; break;
case 233: t << "\\'{e}"; break;
@@ -1204,7 +1247,7 @@ void LatexGenerator::docify(const char *str)
case 244: t << "\\^{o}"; break;
case 245: t << "\\~{o}"; break;
case 246: t << "\\\"{o}"; break;
- case 248: t << "\\o "; break;
+ case 248: t << "\\o{}"; break;
case 249: t << "\\`{u}"; break;
case 250: t << "\\'{u}"; break;
case 251: t << "\\^{u}"; break;
@@ -1331,12 +1374,16 @@ void LatexGenerator::endMemberList()
void LatexGenerator::writeImage(const char *name,const char *w,const char *h)
{
- t << "\\mbox{\\epsfig{file=" << name;
- if (w)
- t << "," << w;
- else if (h)
- t << "," << h;
- t << "}}" << endl;
+ t << "\\mbox{";
+ QCString gfxName = name;
+ if (gfxName.right(4)==".eps") gfxName.left(gfxName.length()-4);
+ // "\\epsfig{file=" << name;
+ t << "\\includegraphics";
+ if (w || h) t << "[";
+ if (w) t << "width=" << w; else if (h) t << "height=" << h;
+ if (w || h) t << "]";
+ t << "{" << gfxName << "}";
+ t << "}" << endl;
}
void LatexGenerator::startMemberGroupHeader(bool hasHeader)
diff --git a/src/latexgen.h b/src/latexgen.h
index 47aecd7..63af7f5 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -27,6 +27,8 @@ class LatexGenerator : public OutputGenerator
public:
LatexGenerator();
~LatexGenerator();
+ static void init();
+ static void writeStyleSheetFile(QFile &f);
OutputGenerator *copy();
//OutputGenerator *clone() { return new LatexGenerator(*this); }
@@ -39,7 +41,6 @@ class LatexGenerator : public OutputGenerator
bool isEnabled(OutputType o) { return (o==Latex && active); }
OutputGenerator *get(OutputType o) { return (o==Latex) ? this : 0; }
- static void init();
void startFile(const char *name,const char *title, bool external);
void writeFooter(int,bool) {}
void endFile();
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 516a284..223932c 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -54,7 +54,9 @@ MemberGroup::~MemberGroup()
void MemberGroup::insertMember(MemberDef *md)
{
//printf("MemberGroup::insertMember memberList=%p count=%d"
- // " member section list: %p\n",memberList,memberList->count(),
+ // " member section list: %p\n",
+ // memberList->first() ? memberList->first()->getSectionList() : 0,
+ // memberList->count(),
// md->getSectionList());
if (inSameSection && memberList->count()>0 &&
memberList->first()->getSectionList()!=md->getSectionList())
diff --git a/src/memberlist.h b/src/memberlist.h
index 96b4453..118c327 100644
--- a/src/memberlist.h
+++ b/src/memberlist.h
@@ -78,4 +78,5 @@ class MemberDict : public QDict<MemberDef>
~MemberDict() {}
};
+
#endif
diff --git a/src/pre.l b/src/pre.l
index 66eebfb..cc80748 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -668,12 +668,26 @@ QCString removeIdsAndMarkers(const char *s)
}
p+=2;
}
- else if (isdigit(c))
+ else if (isdigit(c)) // number
{
result+=c;
p++;
inNum=TRUE;
}
+ else if (c=='d') // identifier starting with a `d'
+ {
+ if (strncmp(p,"defined ",8)==0 || strncmp(p,"defined(",8)==0)
+ // defined keyword
+ {
+ p+=7; // skip defined
+ }
+ else
+ {
+ result+="0L";
+ p++;
+ while ((c=*p) && isId(c)) p++;
+ }
+ }
else if ((isalpha(c) || c=='_') && !inNum) // replace identifier with 0L
{
result+="0L";
@@ -731,8 +745,10 @@ bool computeExpression(const QCString &expr)
{
QCString e=expr;
expandExpression(e,0,0);
+ //printf("after expansion `%s'\n",e.data());
e = removeIdsAndMarkers(e);
if (e.isEmpty()) return FALSE;
+ //printf("parsing `%s'\n",e.data());
return parseCppExpression(e);
}
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index c249539..1dc7e87 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -31,6 +31,10 @@
#include "diagram.h"
#include "language.h"
#include "dot.h"
+#include "version.h"
+
+//#define DBG_RTF(x) x;
+#define DBG_RTF(x)
const int indentLevels = 10;
@@ -343,6 +347,22 @@ static const struct
static QDict<char> Rtf_Style(257);
+void RTFGenerator::writeStyleSheetFile(QFile &file)
+{
+ QTextStream t(&file);
+ t << "# Generated by doxygen " << versionString << "\n\n";
+ t << "# This file describes styles used for generating RTF output.\n";
+ t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
+ t << "# Remove a hash to activate a line.\n\n";
+
+ int i;
+ for (i=0;Rtf_Style_Default[i].name!=0;i++)
+ {
+ t << "# " << Rtf_Style_Default[i].name << " = "
+ << Rtf_Style_Default[i].value << endl;
+ }
+}
+
static void loadStylesheet(const char *name)
{
QFile file(name);
@@ -428,14 +448,14 @@ void RTFGenerator::beginRTFDocument()
*/
t <<"{\\rtf1\\ansi\\ansicpg1252\\uc1 \\deff0\\deflang1033\\deflangfe1033\n";
- t <<"{\\comment Begining font list}\n";
+ DBG_RTF(t <<"{\\comment Begining font list}\n")
t <<"{\\fonttbl ";
t <<"{\\f0\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\n";
t <<"{\\f1\\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\n";
t <<"{\\f2\\fmodern\\fcharset0\\fprq1{\\*\\panose 02070309020205020404}Courier New;}\n";
t <<"{\\f3\\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol;}\n";
t <<"}\n";
- t <<"{\\comment begin colors}\n";
+ DBG_RTF(t <<"{\\comment begin colors}\n")
t <<"{\\colortbl;";
t <<"\\red0\\green0\\blue0;";
t <<"\\red0\\green0\\blue255;";
@@ -454,7 +474,7 @@ void RTFGenerator::beginRTFDocument()
t <<"\\red128\\green128\\blue128;";
t <<"\\red192\\green192\\blue192;}" << endl;
- t <<"{\\comment Begining style list}\n";
+ DBG_RTF(t <<"{\\comment Begining style list}\n")
t <<"{\\stylesheet\n";
t <<"{\\widctlpar\\adjustright \\fs20\\cgrid \\snext0 Normal;}\n";
t <<"{" << Rtf_Style["Heading1"] <<"\\sbasedon0 \\snext0 heading 1;}\n";
@@ -507,13 +527,16 @@ void RTFGenerator::beginRTFDocument()
<< (QMIN(i+1,indentLevels-1)) << " \\sautoupd List Enum " << i << ";}\n";
}
t <<"}" << endl;
+ // this comment is needed for postprocessing!
t <<"{\\comment begin body}" << endl;
}
void RTFGenerator::beginRTFChapter()
{
- t <<"\n{\\comment Begin Chapter}\n" << Rtf_Style["Reset"];
+ t <<"\n";
+ DBG_RTF(t << "{\\comment Begin Chapter}\n")
+ t << Rtf_Style["Reset"];
// if we are compact, no extra page breaks...
if (Config::compactRTFFlag)
@@ -531,7 +554,9 @@ void RTFGenerator::beginRTFChapter()
void RTFGenerator::beginRTFSection()
{
- t <<"\n{\\comment Begin Section}\n" << Rtf_Style["Reset"];
+ t <<"\n";
+ DBG_RTF(t << "{\\comment Begin Section}\n")
+ t << Rtf_Style["Reset"];
// if we are compact, no extra page breaks...
if (Config::compactRTFFlag)
@@ -603,7 +628,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
break;
case isClassHierarchyIndex:
//Hierarchical Index
- t << "{\\comment start classhierarchy}\n";
+ DBG_RTF(t << "{\\comment start classhierarchy}\n")
beginRTFChapter();
break;
case isCompoundIndex:
@@ -718,24 +743,24 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
t << " Doxygen}\n"
"{\\creatim " << dateToRTFDateString() << "}\n"
- "}{\\comment end of infoblock}\n";
-
+ "}";
+ DBG_RTF(t << "{\\comment end of infoblock}\n")
// setup for this section
t << Rtf_Style["Reset"] <<"\n";
t <<"\\sectd\\pgnlcrm\n";
t <<"{\\footer "<<Rtf_Style["Footer"] << "{\\chpgn}}\n";
// the title entry
- t << "{\\comment begin title page}\n";
+ DBG_RTF(t << "{\\comment begin title page}\n")
t << Rtf_Style["Reset"] << Rtf_Style["Title"] << endl; // set to title style
t << "{\\field\\fldedit {\\*\\fldinst TITLE \\\\*MERGEFORMAT}{\\fldrslt TITLE}}\\par" << endl;
t << Rtf_Style["Reset"] << Rtf_Style["SubTitle"] << endl; // set to subtitle style
t << "{\\field\\fldedit {\\*\\fldinst AUTHOR \\\\*MERGEFORMAT}{\\fldrslt AUTHOR}}\\par" << endl;
t << "{\\field\\fldedit {\\*\\fldinst CREATEDATE \\\\*MERGEFORMAT}"
"{\\fldrslt CREATEDATE}}\\par"<<endl;
- t << "{\\comment End title page}" << endl;
+ DBG_RTF(t << "{\\comment End title page}" << endl)
// table of contents section
- t << "{\\comment Table of contents}\n";
+ DBG_RTF(t << "{\\comment Table of contents}\n")
t << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit {\\*\\fldinst TOC \\\\f \\\\*MERGEFORMAT}{\\fldrslt Table of contents}}\\par\n";
t << Rtf_Style["Reset"] << endl;
@@ -978,7 +1003,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
void RTFGenerator::lastIndexPage()
{
- t <<"{\\comment Begining Body of RTF Document}\n";
+ DBG_RTF(t <<"{\\comment Begining Body of RTF Document}\n")
// end page and setup for rest of document
t <<"\\sect \\sbkpage \\pgnrestart\n";
t <<"\\sect \\sectd \\sbknone \\pgndec\n";
@@ -1007,7 +1032,7 @@ void RTFGenerator::writeString(const char *text)
void RTFGenerator::startIndexList()
{
- t << "{\\comment (startIndexList)}" << endl;
+ DBG_RTF(t << "{\\comment (startIndexList)}" << endl)
t << "{" << endl;
incrementIndentLevel();
t << Rtf_Style["Reset"] << Rtf_LCList_DepthStyle() << endl;
@@ -1017,7 +1042,7 @@ void RTFGenerator::startIndexList()
void RTFGenerator::endIndexList()
{
- t << "{\\comment (endIndexList)}" << endl;
+ DBG_RTF(t << "{\\comment (endIndexList)}" << endl)
newParagraph();
t << "}";
decrementIndentLevel();
@@ -1027,7 +1052,7 @@ void RTFGenerator::endIndexList()
/*! start bullet list */
void RTFGenerator::startItemList()
{
- t << "{\\comment (startItemList level=" << m_listLevel << ") }" << endl;
+ DBG_RTF(t << "{\\comment (startItemList level=" << m_listLevel << ") }" << endl)
t << "{";
incrementIndentLevel();
listItemInfo[m_listLevel].isEnum = FALSE;
@@ -1038,7 +1063,7 @@ void RTFGenerator::startItemList()
void RTFGenerator::endItemList()
{
newParagraph();
- t << "{\\comment (endItemList level=" << m_listLevel << ")}" << endl;
+ DBG_RTF(t << "{\\comment (endItemList level=" << m_listLevel << ")}" << endl)
t << "}";
decrementIndentLevel();
m_omitParagraph=TRUE;
@@ -1050,7 +1075,7 @@ void RTFGenerator::endItemList()
/*! start enumeration list */
void RTFGenerator::startEnumList() // starts an enumeration list
{
- t << "{\\comment (startEnumList)}" << endl;
+ DBG_RTF(t << "{\\comment (startEnumList)}" << endl)
t << "{" << endl;
incrementIndentLevel();
listItemInfo[m_listLevel].isEnum = TRUE;
@@ -1065,7 +1090,7 @@ void RTFGenerator::startEnumList() // starts an enumeration list
void RTFGenerator::endEnumList()
{
newParagraph();
- t << "{\\comment (endEnumList)}" << endl;
+ DBG_RTF(t << "{\\comment (endEnumList)}" << endl)
t << "}";
decrementIndentLevel();
m_omitParagraph=TRUE;
@@ -1074,7 +1099,7 @@ void RTFGenerator::endEnumList()
/*! write bullet or enum item */
void RTFGenerator::writeListItem()
{
- t << "{\\comment (writeListItem)}" << endl;
+ DBG_RTF(t << "{\\comment (writeListItem)}" << endl)
newParagraph();
t << Rtf_Style["Reset"];
if (listItemInfo[m_listLevel].isEnum)
@@ -1093,7 +1118,7 @@ void RTFGenerator::writeListItem()
void RTFGenerator::writeIndexItem(const char *ref,const char *fn,
const char *name)
{
- t << "{\\comment (writeIndexItem)}" << endl;
+ DBG_RTF(t << "{\\comment (writeIndexItem)}" << endl)
//t << Rtf_LCList_DepthStyle() << endl;
docify(name);
if (!ref && fn)
@@ -1152,7 +1177,7 @@ void RTFGenerator::writeMailLink(const char *url)
void RTFGenerator::writeStartAnnoItem(const char *,const char *f,
const char *path,const char *name)
{
- t << "{\\comment (writeStartAnnoItem)}" << endl;
+ DBG_RTF(t << "{\\comment (writeStartAnnoItem)}" << endl)
t << "{\\b ";
if (path) docify(path);
if (f && Config::rtfHyperFlag)
@@ -1175,7 +1200,7 @@ void RTFGenerator::writeStartAnnoItem(const char *,const char *f,
void RTFGenerator::writeEndAnnoItem(const char *name)
{
- t << "{\\comment (writeEndAnnoItem)}" << endl;
+ DBG_RTF(t << "{\\comment (writeEndAnnoItem)}" << endl)
if (name)
{
t << "\\tab ";
@@ -1192,7 +1217,9 @@ void RTFGenerator::writeEndAnnoItem(const char *name)
void RTFGenerator::startSubsection()
{
//beginRTFSubSection();
- t <<"\n{\\comment Begin SubSection}\n" << Rtf_Style["Reset"];
+ t <<"\n";
+ DBG_RTF(t << "{\\comment Begin SubSection}\n")
+ t << Rtf_Style["Reset"];
t << Rtf_Style["Heading3"] << "\n";
}
@@ -1205,7 +1232,8 @@ void RTFGenerator::endSubsection()
void RTFGenerator::startSubsubsection()
{
//beginRTFSubSubSection();
- t << "\n{\\comment Begin SubSubSection}\n";
+ t << "\n";
+ DBG_RTF(t << "{\\comment Begin SubSubSection}\n")
t << "{" << endl;
t << Rtf_Style["Reset"] << Rtf_Style["Heading4"] << "\n";
}
@@ -1344,7 +1372,7 @@ void RTFGenerator::writeCodeLink(const char *ref,const char *f,
void RTFGenerator::startTitleHead(const char *)
{
- t <<"{\\comment startTitleHead}" << endl;
+ DBG_RTF(t <<"{\\comment startTitleHead}" << endl)
// beginRTFSection();
t << Rtf_Style["Reset"] << Rtf_Style["Heading2"] << endl;
@@ -1352,7 +1380,7 @@ void RTFGenerator::startTitleHead(const char *)
void RTFGenerator::endTitleHead(const char *fileName,const char *name)
{
- t <<"{\\comment endTitleHead}" << endl;
+ DBG_RTF(t <<"{\\comment endTitleHead}" << endl)
t << "\\par " << Rtf_Style["Reset"] << endl;
if (name)
{
@@ -1378,7 +1406,7 @@ void RTFGenerator::endTitleHead(const char *fileName,const char *name)
void RTFGenerator::startTitle()
{
- t <<"{\\comment startTitle}" << endl;
+ DBG_RTF(t <<"{\\comment startTitle}" << endl)
if (Config::compactRTFFlag)
beginRTFSection();
else
@@ -1387,7 +1415,7 @@ void RTFGenerator::startTitle()
void RTFGenerator::startGroupHeader()
{
- t <<"{\\comment startGroupHeader}" << endl;
+ DBG_RTF(t <<"{\\comment startGroupHeader}" << endl)
newParagraph();
t << Rtf_Style["Reset"];
t << Rtf_Style["Heading3"];
@@ -1396,7 +1424,7 @@ void RTFGenerator::startGroupHeader()
void RTFGenerator::endGroupHeader()
{
- t <<"{\\comment endGroupHeader}" << endl;
+ DBG_RTF(t <<"{\\comment endGroupHeader}" << endl)
newParagraph();
t << Rtf_Style["Reset"] << endl;
}
@@ -1406,7 +1434,7 @@ void RTFGenerator::startMemberDoc(const char *clname,
const char *,
const char *)
{
- t << "{\\comment startMemberDoc}" << endl;
+ DBG_RTF(t << "{\\comment startMemberDoc}" << endl)
if (memname && memname[0]!='@')
{
addToIndex(memname,clname);
@@ -1422,7 +1450,7 @@ void RTFGenerator::startMemberDoc(const char *clname,
void RTFGenerator::endMemberDoc()
{
- t << "{\\comment endMemberDoc}" << endl;
+ DBG_RTF(t << "{\\comment endMemberDoc}" << endl)
t << "}" << endl;
//const char *style = styleStack.pop();
//printf("RTFGenerator::endMemberDoc() `%s'\n",style);
@@ -1504,7 +1532,7 @@ void RTFGenerator::addToIndex(const char *s1,const char *s2)
void RTFGenerator::startIndent()
{
incrementIndentLevel();
- t << "{\\comment (startIndent) }" << endl;
+ DBG_RTF(t << "{\\comment (startIndent) }" << endl)
t << "{" << endl;
t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle() << endl;
//styleStack.push(style);
@@ -1520,14 +1548,14 @@ void RTFGenerator::endIndent()
void RTFGenerator::startDescription()
{
- t << "{\\comment (startDescription)}" << endl;
+ DBG_RTF(t << "{\\comment (startDescription)}" << endl)
t << "{" << endl;
t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
}
void RTFGenerator::endDescription()
{
- t << "{\\comment (endDescription)}" << endl;
+ DBG_RTF(t << "{\\comment (endDescription)}" << endl)
t << "}";
newParagraph();
}
@@ -1535,20 +1563,20 @@ void RTFGenerator::endDescription()
void RTFGenerator::startDescItem()
{
newParagraph();
- t << "{\\comment (startDescItem)}" << endl;
+ DBG_RTF(t << "{\\comment (startDescItem)}" << endl)
t << "{\\b ";
}
void RTFGenerator::endDescItem()
{
- t << "{\\comment (endDescItem)}" << endl;
+ DBG_RTF(t << "{\\comment (endDescItem)}" << endl)
t << "}" << endl;
newParagraph();
}
void RTFGenerator::startMemberDescription()
{
- t << "{\\comment (startMemberDescription)}" << endl;
+ DBG_RTF(t << "{\\comment (startMemberDescription)}" << endl)
t << "{" << endl;
incrementIndentLevel();
t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
@@ -1557,7 +1585,7 @@ void RTFGenerator::startMemberDescription()
void RTFGenerator::endMemberDescription()
{
- t << "{\\comment (endMemberDescription)}" << endl;
+ DBG_RTF(t << "{\\comment (endMemberDescription)}" << endl)
endEmphasis();
newParagraph();
decrementIndentLevel();
@@ -1566,14 +1594,14 @@ void RTFGenerator::endMemberDescription()
void RTFGenerator::startDescList()
{
- t << "{\\comment (startDescList)}" << endl;
+ DBG_RTF(t << "{\\comment (startDescList)}" << endl)
t << "{";
newParagraph();
}
void RTFGenerator::endDescTitle()
{
- t << "{\\comment (endDescTitle) }" << endl;
+ DBG_RTF(t << "{\\comment (endDescTitle) }" << endl)
newParagraph();
//t << Rtf_Style["Reset"] << styleStack.top();
incrementIndentLevel();
@@ -1582,14 +1610,14 @@ void RTFGenerator::endDescTitle()
void RTFGenerator::writeDescItem()
{
- t << "{\\comment (writeDescItem) }" << endl;
+ DBG_RTF(t << "{\\comment (writeDescItem) }" << endl)
// incrementIndentLevel();
//t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
}
void RTFGenerator::endDescList()
{
- t << "{\\comment (endDescList)}" << endl;
+ DBG_RTF(t << "{\\comment (endDescList)}" << endl)
newParagraph();
t << "}";
decrementIndentLevel();
@@ -1599,7 +1627,7 @@ void RTFGenerator::endDescList()
void RTFGenerator::writeSection(const char *lab,const char *title,bool sub)
{
- t << "{\\comment (writeSection)}" << endl;
+ DBG_RTF(t << "{\\comment (writeSection)}" << endl)
t << "{";
t<< Rtf_Style["Reset"];
if (sub)
@@ -1732,7 +1760,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d,
const char *fileName,const char *)
{
newParagraph();
- t <<"{\\comment This would be an image map..." << endl;
+ DBG_RTF(t <<"{\\comment This would be an image map..." << endl)
// create a gif file
d.writeImageMap(t,dir,fileName);
@@ -1755,13 +1783,13 @@ void RTFGenerator::writeFormula(const char *,const char *text)
void RTFGenerator::startMemberItem(int)
{
- t <<"{\\comment startMemberItem }" << endl;
+ DBG_RTF(t <<"{\\comment startMemberItem }" << endl)
t << Rtf_Style["Reset"] << Rtf_BList_DepthStyle() << endl; // set style to apropriate depth
}
void RTFGenerator::endMemberItem(bool)
{
- t <<"{\\comment endMemberItem }" << endl;
+ DBG_RTF(t <<"{\\comment endMemberItem }" << endl)
newParagraph();
}
@@ -1809,7 +1837,7 @@ void RTFGenerator::writeNonBreakableSpace()
void RTFGenerator::startMemberList()
{
t << endl;
- t << "{\\comment (startMemberList) }" << endl;
+ DBG_RTF(t << "{\\comment (startMemberList) }" << endl)
t << "{" << endl;
#ifdef DELETEDCODE
if (!insideTabbing)
@@ -1819,7 +1847,7 @@ void RTFGenerator::startMemberList()
void RTFGenerator::endMemberList()
{
- t << "{\\comment (endMemberList) }" << endl;
+ DBG_RTF(t << "{\\comment (endMemberList) }" << endl)
t << "}" << endl;
#ifdef DELETEDCODE
if (!insideTabbing)
@@ -1841,7 +1869,7 @@ void RTFGenerator::writeImage(const char *,const char *,const char *)
void RTFGenerator::startDescTable()
{
- t << "{\\comment (startDescTable) }" << endl;
+ DBG_RTF(t << "{\\comment (startDescTable) }" << endl)
t << "{" << endl;
//incrementIndentLevel();
//t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
@@ -1850,7 +1878,7 @@ void RTFGenerator::startDescTable()
void RTFGenerator::endDescTable()
{
//decrementIndentLevel();
- t << "{\\comment (endDescTable)}" << endl;
+ DBG_RTF(t << "{\\comment (endDescTable)}" << endl)
t << "}" << endl;
//t << Rtf_Style["Reset"] << styleStack.top();
}
@@ -1858,25 +1886,25 @@ void RTFGenerator::endDescTable()
void RTFGenerator::startDescTableTitle()
{
//t << Rtf_BList_DepthStyle() << endl;
- t << "{\\comment (startDescTableTitle) }" << endl;
+ DBG_RTF(t << "{\\comment (startDescTableTitle) }" << endl)
startBold();
}
void RTFGenerator::endDescTableTitle()
{
- t << "{\\comment (endDescTableTitle) }" << endl;
+ DBG_RTF(t << "{\\comment (endDescTableTitle) }" << endl)
endBold();
t << " ";
}
void RTFGenerator::startDescTableData()
{
- t << "{\\comment (startDescTableData) }" << endl;
+ DBG_RTF(t << "{\\comment (startDescTableData) }" << endl)
}
void RTFGenerator::endDescTableData()
{
- t << "{\\comment (endDescTableData) }" << endl;
+ DBG_RTF(t << "{\\comment (endDescTableData) }" << endl)
newParagraph();
}
@@ -1944,7 +1972,7 @@ const char * RTFGenerator::Rtf_Code_DepthStyle()
void RTFGenerator::startTextBlock(bool dense)
{
- t << "{\\comment Start TextBlock}" << endl;
+ DBG_RTF(t << "{\\comment Start TextBlock}" << endl)
t << "{" << endl;
t << Rtf_Style["Reset"];
if (dense) // no spacing between "paragraphs"
@@ -1961,7 +1989,7 @@ void RTFGenerator::endTextBlock()
{
newParagraph();
t << "}" << endl;
- t << "{\\comment End TextBlock}" << endl;
+ DBG_RTF(t << "{\\comment End TextBlock}" << endl)
m_omitParagraph = TRUE;
}
@@ -2123,9 +2151,9 @@ static bool PreProcessFile(QDir &d,QCString &infName, QTextStream &t, bool bIncl
int startNamePos = lineBuf.find('"',pos)+1;
int endNamePos = lineBuf.find('"',startNamePos);
QCString fileName = lineBuf.mid(startNamePos,endNamePos-startNamePos);
- t << "{\\comment begin include " << fileName << "}" << endl;
+ DBG_RTF(t << "{\\comment begin include " << fileName << "}" << endl)
if (!PreProcessFile(d,fileName,t,FALSE)) return FALSE;
- t << "{\\comment end include " << fileName << "}" << endl;
+ DBG_RTF(t << "{\\comment end include " << fileName << "}" << endl)
}
else
{
@@ -2162,7 +2190,7 @@ void RTFGenerator::startDotGraph()
void RTFGenerator::endDotGraph(DotClassGraph &g)
{
newParagraph();
- t <<"{\\comment This would be an image map..." << endl;
+ DBG_RTF(t <<"{\\comment This would be an image map..." << endl)
g.writeGraph(t,GIF,Config::rtfOutputDir);
@@ -2184,7 +2212,7 @@ void RTFGenerator::startInclDepGraph()
void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
{
newParagraph();
- t <<"{\\comment This would be an image map..." << endl;
+ DBG_RTF(t <<"{\\comment This would be an image map..." << endl)
g.writeGraph(t,GIF,Config::rtfOutputDir);
@@ -2251,7 +2279,7 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name)
void RTFGenerator::startMemberGroupHeader(bool hasHeader)
{
- t << "{\\comment startMemberGroupHeader}" << endl;
+ DBG_RTF(t << "{\\comment startMemberGroupHeader}" << endl)
t << "{" << endl;
if (hasHeader) incrementIndentLevel();
t << Rtf_Style["Reset"] << Rtf_Style["GroupHeader"];
@@ -2259,33 +2287,33 @@ void RTFGenerator::startMemberGroupHeader(bool hasHeader)
void RTFGenerator::endMemberGroupHeader()
{
- t << "{\\comment endMemberGroupHeader}" << endl;
+ DBG_RTF(t << "{\\comment endMemberGroupHeader}" << endl)
newParagraph();
t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle();
}
void RTFGenerator::startMemberGroupDocs()
{
- t << "{\\comment startMemberGroupDocs}" << endl;
+ DBG_RTF(t << "{\\comment startMemberGroupDocs}" << endl)
startEmphasis();
}
void RTFGenerator::endMemberGroupDocs()
{
- t << "{\\comment endMemberGroupDocs}" << endl;
+ DBG_RTF(t << "{\\comment endMemberGroupDocs}" << endl)
endEmphasis();
newParagraph();
}
void RTFGenerator::startMemberGroup()
{
- t << "{\\comment startMemberGroup}" << endl;
+ DBG_RTF(t << "{\\comment startMemberGroup}" << endl)
t << Rtf_Style["Reset"] << Rtf_BList_DepthStyle() << endl;
}
void RTFGenerator::endMemberGroup(bool hasHeader)
{
- t << "{\\comment endMemberGroup}" << endl;
+ DBG_RTF(t << "{\\comment endMemberGroup}" << endl)
if (hasHeader) decrementIndentLevel();
t << "}";
}
diff --git a/src/rtfgen.h b/src/rtfgen.h
index 9245bb3..e5cf9ca 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -27,6 +27,8 @@ class RTFGenerator : public OutputGenerator
public:
RTFGenerator();
~RTFGenerator();
+ static void init();
+ static void writeStyleSheetFile(QFile &f);
OutputGenerator *copy();
//OutputGenerator *clone() { return new RTFGenerator(*this); }
@@ -39,7 +41,6 @@ class RTFGenerator : public OutputGenerator
bool isEnabled(OutputType o) { return (o==RTF && active); }
OutputGenerator *get(OutputType o) { return (o==RTF) ? this : 0; }
- static void init();
void startFile(const char *name,const char *title, bool external);
void writeFooter(int,bool) {}
void endFile();
diff --git a/src/scanner.l b/src/scanner.l
index 8062238..9967667 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -859,11 +859,18 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
return result;
}
+// find first identifier in string (exclusing type keywords)
QCString extractName(const QCString &s)
{
- uint i=0;
- while (i<s.length() && isId(s.at(i))) i++;
- return s.left(i);
+ static const QRegExp id("[a-z_A-Z][a-z_A-Z0-9]*");
+ int i,p=0,l;
+ while ((i=id.match(s,p,&l))!=-1)
+ {
+ QCString idstr=s.mid(i,l);
+ if (idstr!="struct" && idstr!="class" && idstr!="union") return idstr;
+ p=i+l;
+ }
+ return "";
}
/* ----------------------------------------------------------------- */
@@ -1288,7 +1295,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
outDoc->addToIndex(yytext,0);
BEGIN(DocScan);
}
-<DocScan>{CMD}"arg"/{BN} {
+<DocScan>{CMD}("arg"|"li")/{BN} {
if (insideArgumentList)
{
outDoc->writeListItem();
@@ -1778,7 +1785,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
else if (!generateLink(*outDoc,className,yytext,TRUE,0))
{
warn(yyFileName,yyLineNr,"Warning: reference to unknown section %s!",yytext);
- outDoc->writeBoldString(" unknown reference! ");
+ //outDoc->writeBoldString(" unknown reference! ");
}
BEGIN(DocScan);
}
@@ -1907,24 +1914,29 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
"in the documentation.");
}
-<DocScan>{ID}"<"[^>\ \t\n]*">"("::"{ID})+"("?[a-z_A-Z0-9,:\<\> \t\*\&]*")"? {
+<DocScan,DocRefName>{ID}"<"[^>\ \t\n]*">"("::"{ID})+"("?[a-z_A-Z0-9,:\<\> \t\*\&]*")"? {
generateRef(*outDoc,className,yytext,inSeeBlock);
+ BEGIN(DocScan);
}
-<DocScan>{SCOPEMASK}"("[a-z_A-Z0-9,:\<\> \t\*\&]+")" {
+<DocScan,DocRefName>{SCOPEMASK}"("[a-z_A-Z0-9,:\<\> \t\*\&]+")" {
generateRef(*outDoc,className,yytext,inSeeBlock);
+ BEGIN(DocScan);
}
-<DocScan>{SCOPEMASK}("()")? {
+<DocScan,DocRefName>{SCOPEMASK}("()")? {
generateRef(*outDoc,className,yytext,inSeeBlock);
+ BEGIN(DocScan);
}
-<DocScan>({SCOPEMASK}"::")?"operator()("[a-z_A-Z0-9,\<\> \t\*\&]*")" {
+<DocScan,DocRefName>({SCOPEMASK}"::")?"operator()("[a-z_A-Z0-9,\<\> \t\*\&]*")" {
QCString oName=yytext;
generateRef(*outDoc,className,
removeRedundantWhiteSpace(oName),inSeeBlock);
+ BEGIN(DocScan);
}
-<DocScan>({SCOPEMASK}"::")?"operator"[^(\r\n.,]+"("[a-z_A-Z0-9,\<\> \t\*\&]*")" {
+<DocScan,DocRefName>({SCOPEMASK}"::")?"operator"[^(\r\n.,]+"("[a-z_A-Z0-9,\<\> \t\*\&]*")" {
QCString oName=yytext;
generateRef(*outDoc,className,
removeRedundantWhiteSpace(oName),inSeeBlock);
+ BEGIN(DocScan);
}
<DocScan>("http:"|"https:"|"ftp:"|"file:"){URLMASK} { outDoc->writeHtmlLink(yytext,yytext); }
<DocScan>[a-zA-Z_0-9\.\-]+"@"[0-9a-z_A-Z\.\-]+ { outDoc->writeMailLink(yytext); }
@@ -1943,10 +1955,9 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
outDoc->endCodeFragment();
BEGIN( DocScan );
}
-<DocScan>{CMD}"e"{BN}+ { BEGIN( DocEmphasis ); }
-<DocScan>{CMD}"a"{BN}+ { BEGIN( DocEmphasis ); }
+<DocScan>{CMD}("e"|"em"|"a"){BN}+ { BEGIN( DocEmphasis ); }
<DocScan>{CMD}"b"{BN}+ { BEGIN( DocBold ); }
-<DocScan>{CMD}"c"{BN}+ { BEGIN( DocCode ); }
+<DocScan>{CMD}("c"|"p"){BN}+ { BEGIN( DocCode ); }
<DocScan>{CMD}"l"{BN}+
<DocScan>"\\n"/[^a-z_A-Z0-9] { outDoc->lineBreak(); }
<DocScan>{CMD}"include"{BN}+ { BEGIN( DocInclude ); }
@@ -2167,7 +2178,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
}
<DocEmphasis>{WORD} {
outDoc->startEmphasis();
- linkifyText(*outDoc,className,0,yytext);
+ linkifyText(*outDoc,className,0,yytext,FALSE,FALSE);
outDoc->endEmphasis();
BEGIN( DocScan );
}
@@ -2185,7 +2196,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
}
<DocBold>{WORD} {
outDoc->startBold();
- linkifyText(*outDoc,className,0,yytext);
+ linkifyText(*outDoc,className,0,yytext,FALSE,FALSE);
outDoc->endBold();
BEGIN( DocScan );
}
@@ -2197,7 +2208,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
}
<DocCode>{WORD} {
outDoc->startTypewriter();
- linkifyText(*outDoc,className,0,yytext);
+ linkifyText(*outDoc,className,0,yytext,FALSE,FALSE);
outDoc->endTypewriter();
BEGIN( DocScan );
}
@@ -2347,7 +2358,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
current->argList->clear();
lineCount();
}
-
+<FindMembers>{B}*"properties"{B}":" { /* M$-IDL only: ignored */ }
+<FindMembers>{B}*"methods"{B}":" { /* M$-IDL only: ignored */ }
<FindMembers>{B}*"public"{BN}*":"{BN}* {
current->protection = protection = Public ;
current->slot = slot = FALSE;
@@ -2387,6 +2399,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
}
<FindMembers>{B}*"extern"{BN}+ {
current->stat = FALSE;
+ current->explicitExternal = TRUE;
lineCount();
}
<FindMembers>{B}*"virtual"{BN}+ { current->type += " virtual ";
@@ -2436,7 +2449,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
lineCount();
BEGIN( CompoundName );
}
-<FindMembers>{B}*"interface"{BN}+ { // M$/Corba IDL interface
+<FindMembers>{B}*("disp")?"interface"{BN}+ { // M$/Corba IDL interface
isTypedef=FALSE;
current->section = Entry::INTERFACE_SEC;
addType( current ) ;
@@ -3047,9 +3060,9 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
{
// add typedef to dictionary
QCString dest = extractName(current->type.right(current->type.length()-8));
- if (!dest.isEmpty())
+ if (typedefDict[current->name]==0 && !dest.isEmpty())
{
- //printf(">>>>>>>>>> adding %s->%s\n",current->name.data(),dest.data());
+ //printf("1>>>>>>>>>> adding %s->%s\n",current->name.data(),dest.data());
typedefDict.insert(current->name, new QCString(dest));
}
}
@@ -3323,6 +3336,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
//printf("current->name = %s %s\n",current->name.data(),msName.data());
if (!current->name.isEmpty() && current->name.at(0)!='@')
{
+ //printf("2>>>>>>>>>> adding %s->%s\n",msName.data(),current->name.data());
typedefDict.insert(msName,new QCString(current->name));
}
}
@@ -3956,6 +3970,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
if (isTypedef)
{
//QCString dest = extractName(current->name);
+ //printf("3>>>>>>>>>> adding %s->%s\n",yytext,current->name.data());
typedefDict.insert(yytext,new QCString(current->name));
//current->extends->append(
// new BaseInfo(yytext,Public,Normal)
@@ -4656,7 +4671,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
<SkipCode>"//" {
current->doc+=yytext;
}
-<SkipCode>[^ \*\t\/\\\n]+ {
+<SkipCode>[^ \<\*\t\/\\\n]+ {
current->doc+=yytext;
}
<SkipCode>\n {
diff --git a/src/translator.h b/src/translator.h
index ef89013..cb2e2ab 100644
--- a/src/translator.h
+++ b/src/translator.h
@@ -50,6 +50,12 @@ class Translator
virtual QCString latexBabelPackage()
{ return ""; }
+ /*! return the language charset. This will be used for the HTML output */
+ virtual QCString idLanguageCharset()
+ {
+ return "iso-8859-1";
+ }
+
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
diff --git a/src/translator_cz.h b/src/translator_cz.h
index 0b78c99..0678483 100644
--- a/src/translator_cz.h
+++ b/src/translator_cz.h
@@ -26,15 +26,115 @@
// mail the comments and text proposals to
//
// havran@fel.cvut.cz, 1999/04/11
+//
+// The first version of Czech strings with diacritics was implemented by
+// Petr Prikryl (prikrylp@skil.cz). Vlastimil Havran is still
+// the maintainer. The translation was based on translator.h
+// of Doxygen versison 1.1.4 (from scratch) and updated for 1.1.5
+// (including important updates of the up-to-1.1.4 strings).
+//
+// The Czech strings in this file were first written in Windows 1250
+// encoding. The conditional compilation ensures or the neutral
+// functionality of the macro DECODE, or calling the WinToISO()
+// method for on-line encoding conversion. If you want to maintain
+// the source in the ISO Latin-2, do convert the source, change the
+// conditional definition of the DECODE macro using the method
+// ISOToWin() -- for conversion of strings for the Windows version.
+// The version which does not call the function is slightly faster.
+//
+// Notice: Only one of the following tables is necessary for
+// the support as well as the only one conversion private method
+// of the TranslatorCzech class. However, the prototype was created
+// under WindowsNT thus using Windows 1250 encoding. The second
+// table and the method are here to switch to the ISO Latin-2
+// smoothly. And also, there is not a big loose of space when both
+// tables and methods are supported.
+
+/*! Translation tables for characters >127. They should work,
+ * but I would not put my hand into fire for that.
+ */
+static const char WinToISOTab[] = {
+ '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
+ '\x88', '\x89', '\xA9', '\x8B', '\xA6', '\xAB', '\xAE', '\xAC',
+ '\x90', '\x91', '\x92', '\x93', '\x94', '\x2E', '\x96', '\x97',
+ '\x98', '\x99', '\xB9', '\x9B', '\xB6', '\xBB', '\xBE', '\xBC',
+ '\xA0', '\x20', '\x20', '\xA3', '\xA4', '\xA1', '\xA6', '\xA7',
+ '\x22', '\xA9', '\xAA', '\x3C', '\xAC', '\x2D', '\xAE', '\xAF',
+ '\x2E', '\x2B', '\x20', '\xB3', '\x27', '\x75', '\xB6', '\xB7',
+ '\x20', '\xB1', '\xBA', '\x3E', '\xA5', '\x22', '\xB5', '\xBF',
+ '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
+ '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
+ '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
+ '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
+ '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
+ '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
+ '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\x2D',
+ '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
+ '\0'
+};
+
+static const char ISOToWinTab[] = {
+ '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
+ '\x88', '\x89', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F',
+ '\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97',
+ '\x98', '\x99', '\x9A', '\x9B', '\x9C', '\x9D', '\x9E', '\x9F',
+ '\xA0', '\xA5', '\xA2', '\xA3', '\xA4', '\xBC', '\x8C', '\xA7',
+ '\xA8', '\x8A', '\xAA', '\x8D', '\x8F', '\xAD', '\x8E', '\xAF',
+ '\xB0', '\xB9', '\xB2', '\xB3', '\xB4', '\xBE', '\x9C', '\xB7',
+ '\xB8', '\x9A', '\xBA', '\x9D', '\x9F', '\xBD', '\x9E', '\xBF',
+ '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
+ '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
+ '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
+ '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
+ '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
+ '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
+ '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\xF7',
+ '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
+ '\0'
+};
-// Notice that the following texts were written in Czech using
-// MS-Windows code page 1250. If you want to use it in Unix,
-// convert the file to the ISO Latin-2
-// This is a prototype created by Petr Prikryl (prikrylp@skil.cz), 2000/06/20.
+// Here the DECODE macro assumes the source written in Win1250 encoding.
//
+#ifdef _WIN32
+ #define DECODE(sInput) sInput
+#else
+ #define DECODE(sInput) WinToISO(sInput)
+#endif
+
+
+
class TranslatorCzech : public Translator
{
+ private:
+ /*! returns the string converted from Win1250 to ISO Latin-2 */
+ QCString WinToISO(const QCString sInput)
+ {
+ QCString result;
+ int len = sInput.length();
+
+ for (int i = 0; i < len; ++i)
+ {
+ unsigned int c = sInput[i];
+ result += (c > 127) ? WinToISOTab[c & 0x7F] : c;
+ }
+ return result;
+ }
+
+ /*! returns the string converted from ISO Latin-2 to Win1250 */
+ QCString ISOToWin(const QCString sInput)
+ {
+ QCString result;
+ int len = sInput.length();
+
+ for (int i = 0; i < len; ++i)
+ {
+ unsigned int c = sInput[i];
+ result += (c > 127) ? ISOToWinTab[c & 0x7F] : c;
+ }
+ return result;
+ }
+
public:
virtual QCString idLanguage()
{ return "czech"; }
@@ -48,51 +148,51 @@ class TranslatorCzech : public Translator
/*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions()
- { return "Související funkce"; }
+ { return DECODE("Související funkce"); }
/*! subscript for the related functions. */
virtual QCString trRelatedSubscript()
- { return "(Výše uvedené funkce nejsou členskými funkcemi.)"; }
+ { return DECODE("(Uvedené funkce nejsou členskými funkcemi.)"); }
/*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription()
- { return "Detailní popis"; }
+ { return DECODE("Detailní popis"); }
/*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation()
- { return "Dokumentace k členských typům"; }
+ { return DECODE("Dokumentace k členských typům"); }
/*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation()
- { return "Dokumentace k členským výčtům"; }
+ { return DECODE("Dokumentace k členským výčtům"); }
/*! header that is put before the list of member functions. */
virtual QCString trMemberFunctionDocumentation()
- { return "Dokumentace k metodám"; }
+ { return DECODE("Dokumentace k metodám"); }
/*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
- { return "Dokumentace k datovým členům"; }
+ { return DECODE("Dokumentace k datovým členům"); }
/*! this is the text of a link put after brief descriptions. */
virtual QCString trMore()
- { return "Podrobnosti..."; }
+ { return DECODE("(...)"); }
/*! put in the class documentation */
virtual QCString trListOfAllMembers()
- { return "Seznam všech členů."; }
+ { return DECODE("Seznam všech členů."); }
/*! used as the title of the "list of all members" page of a class */
virtual QCString trMemberList()
- { return "Seznam členů třídy"; }
+ { return DECODE("Seznam členů třídy"); }
/*! this is the first part of a sentence that is followed by a class name */
virtual QCString trThisIsTheListOfAllMembers()
- { return "Úplný seznam členů třídy "; }
+ { return DECODE("Zde naleznete úplný seznam členů třídy "); }
/*! this is the remainder of the sentence after the class name */
virtual QCString trIncludingInheritedMembers()
- { return ", včetně všech zděděných členů."; }
+ { return DECODE(", včetně všech zděděných členů."); }
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
@@ -102,26 +202,26 @@ class TranslatorCzech : public Translator
"ze zdrojových textů";
if (s) result+=(QCString)" projektu "+s;
result+=".";
- return result;
+ return DECODE(result);
}
/*! put after an enum name in the list of all members */
virtual QCString trEnumName()
- { return "jméno výčtu"; }
+ { return DECODE("jméno výčtu"); }
/*! put after an enum value in the list of all members */
virtual QCString trEnumValue()
- { return "hodnota výčtu"; }
+ { return DECODE("hodnota výčtu"); }
/*! put after an undocumented member in the list of all members */
virtual QCString trDefinedIn()
- { return "definován v"; }
+ { return DECODE("definován v"); }
/*! put as in introduction in the verbatim header file of a class.
* parameter f is the name of the include file.
*/
virtual QCString trVerbatimText(const char *f)
- { return (QCString)"Úplný text vkládaného souboru "+f+"."; }
+ { return DECODE((QCString)"Úplný text vkládaného souboru "+f+"."); }
// quick reference sections
@@ -129,48 +229,48 @@ class TranslatorCzech : public Translator
* compounds or files (see the \group command).
*/
virtual QCString trModules()
- { return "Moduly"; }
+ { return DECODE("Moduly"); }
/*! This is put above each page as a link to the class hierarchy */
virtual QCString trClassHierarchy()
- { return "Hierarchie tříd"; }
+ { return DECODE("Hierarchie tříd"); }
/*! This is put above each page as a link to the list of annotated classes */
virtual QCString trCompoundList()
- { return "Seznam složenin"; }
+ { return DECODE("Seznam tříd"); }
/*! This is put above each page as a link to the list of documented files */
virtual QCString trFileList()
- { return "Seznam souborů"; }
+ { return DECODE("Seznam souborů"); }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
- { return "Seznam hlavičkových souborů"; }
+ { return DECODE("Seznam hlavičkových souborů"); }
/*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers()
- { return "Součásti složenin"; }
+ { return DECODE("Seznam členů tříd"); }
/*! This is put above each page as a link to all members of files. */
virtual QCString trFileMembers()
- { return "Seznam globálních symbolů"; }
+ { return DECODE("Symboly v souborech"); }
/*! This is put above each page as a link to all related pages. */
virtual QCString trRelatedPages()
- { return "Související stránky"; }
+ { return DECODE("Související stránky"); }
/*! This is put above each page as a link to all examples. */
virtual QCString trExamples()
- { return "Příklady"; }
+ { return DECODE("Příklady"); }
/*! This is put above each page as a link to the search engine. */
virtual QCString trSearch()
- { return "Hledat"; }
+ { return DECODE("Hledat"); }
/*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription()
- { return "Zde naleznete seznam, vyjadřující vztah dědičnosti tříd. "
- "Je seřazen přibližně (ale ne úplně) podle abecedy:";
+ { return DECODE("Zde naleznete seznam, vyjadřující vztah dědičnosti tříd. "
+ "Je seřazen přibližně (ale ne úplně) podle abecedy:");
}
/*! This is an introduction to the list with all files. */
@@ -179,15 +279,15 @@ class TranslatorCzech : public Translator
QCString result="Zde naleznete seznam všech ";
if (!extractAll) result+="dokumentovaných ";
result+="souborů se stručnými popisy:";
- return result;
+ return DECODE(result);
}
/*! This is an introduction to the annotated compound list. */
virtual QCString trCompoundListDescription()
- { return "Složeninami (compound) se rozumí netriviální prvky, které "
- "zahrnují třídy, struktury (struct), unie (union) "
- "a rozhraní (interface). V seznamu jsou uvedeny jejich stručné "
- "popisy:";
+ { return DECODE("Následující seznam obsahuje především identifikace tříd, "
+ "ale nachází se zde i další netriviální prvky, jako jsou "
+ "struktury (struct), unie (union) a rozhraní (interface). "
+ "V seznamu jsou uvedeny jejich stručné popisy:");
}
/*! This is an introduction to the page with all class members. */
@@ -200,7 +300,7 @@ class TranslatorCzech : public Translator
result+="dokumentaci tříd, ke kterým příslušejí:";
else
result+="třídy, ke kterým příslušejí:";
- return result;
+ return DECODE(result);
}
/*! This is an introduction to the page with all file members. */
@@ -208,205 +308,210 @@ class TranslatorCzech : public Translator
{
QCString result="Zde naleznete seznam všech ";
if (!extractAll) result+="dokumentovaných ";
- result+="globálních symbolů, které jsou definovány v souborech projektu. "
+ result+="symbolů, které jsou definovány na úrovni svých souborů. "
"Pro každý symbol je uveden odkaz na ";
if (extractAll)
result+="dokumentaci příslušného souboru";
else
result+="soubor, ve kterém je symbol definován";
- result+=". Symbol může označovat makro, typ, instanci třídy, "
+ result+=". Podle způsobu definice může být symbol globálním symbolem "
+ "nebo symbolem, který je viditelný pouze z daného souboru "
+ "(to se týká například statických proměnných v C++). "
+ "Seznam neobsahuje symboly členů tříd. "
+ "Symbol může označovat makro, typ, instanci třídy, "
"proměnnou, konstantu, funkci, výčet, hodnotu výčtu a podobně:";
- return result;
+ return DECODE(result);
}
/*! This is an introduction to the page with the list of all header files. */
virtual QCString trHeaderFilesDescription()
- { return "Zde naleznete hlavičkové soubory, které tvoří "
- "aplikační programátorské rozhraní (API):"; }
+ { return DECODE("Zde naleznete hlavičkové soubory, které tvoří "
+ "aplikační programátorské rozhraní (API):"); }
/*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription()
- { return "Zde naleznete seznam všech příkladů:"; }
+ { return DECODE("Zde naleznete seznam všech příkladů:"); }
/*! This is an introduction to the page with the list of related pages */
virtual QCString trRelatedPagesDescription()
- { return "Zde naleznete seznam všech souvisejících stránek dokumentace:"; }
+ { return DECODE("Zde naleznete seznam všech souvisejících stránek "
+ "dokumentace:"); }
/*! This is an introduction to the page with the list of class/file groups */
virtual QCString trModulesDescription()
- { return "Zde naleznete seznam všech modulů:"; }
+ { return DECODE("Zde naleznete seznam všech modulů:"); }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
virtual QCString trNoDescriptionAvailable()
- { return "Popis není k dispozici"; }
+ { return DECODE("Popis není k dispozici"); }
// index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
virtual QCString trDocumentation()
- { return "Dokumentace"; }
+ { return DECODE("Dokumentace"); }
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
virtual QCString trModuleIndex()
- { return "Rejstřík modulů"; }
+ { return DECODE("Rejstřík modulů"); }
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
virtual QCString trHierarchicalIndex()
- { return "Rejstřík hierarchie tříd"; }
+ { return DECODE("Rejstřík hierarchie tříd"); }
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
*/
virtual QCString trCompoundIndex()
- { return "Rejstřík složenin"; }
+ { return DECODE("Rejstřík tříd"); }
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
virtual QCString trFileIndex()
- { return "Rejstřík souborů"; }
+ { return DECODE("Rejstřík souborů"); }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
virtual QCString trModuleDocumentation()
- { return "Dokumentace modulů"; }
+ { return DECODE("Dokumentace modulů"); }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions.
*/
virtual QCString trClassDocumentation()
- { return "Dokumentace tříd"; }
+ { return DECODE("Dokumentace tříd"); }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all files.
*/
virtual QCString trFileDocumentation()
- { return "Dokumentace souborů"; }
+ { return DECODE("Dokumentace souborů"); }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
virtual QCString trExampleDocumentation()
- { return "Dokumentace příkladů"; }
+ { return DECODE("Dokumentace příkladů"); }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
virtual QCString trPageDocumentation()
- { return "Dokumentace souvisejících stránek"; }
+ { return DECODE("Dokumentace souvisejících stránek"); }
/*! This is used in LaTeX as the title of the document */
virtual QCString trReferenceManual()
- { return "Referenční příručka"; }
+ { return DECODE("Referenční příručka"); }
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
virtual QCString trDefines()
- { return "Definice maker"; }
+ { return DECODE("Definice maker"); }
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
*/
virtual QCString trFuncProtos()
- { return "Prototypy"; }
+ { return DECODE("Prototypy"); }
/*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
virtual QCString trTypedefs()
- { return "Definice typů"; }
+ { return DECODE("Definice typů"); }
/*! This is used in the documentation of a file as a header before the
* list of enumerations
*/
virtual QCString trEnumerations()
- { return "Výčty"; }
+ { return DECODE("Výčty"); }
/*! This is used in the documentation of a file as a header before the
* list of (global) functions
*/
virtual QCString trFunctions()
- { return "Funkce"; }
+ { return DECODE("Funkce"); }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
virtual QCString trVariables()
- { return "Proměnné"; }
+ { return DECODE("Proměnné"); }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
virtual QCString trEnumerationValues()
- { return "Hodnoty výčtů"; }
+ { return DECODE("Hodnoty výčtů"); }
/*! This is used in man pages as the author section. */
virtual QCString trAuthor()
- { return "Autor"; }
+ { return DECODE("Autor"); }
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
virtual QCString trDefineDocumentation()
- { return "Dokumentace k definicím maker"; }
+ { return DECODE("Dokumentace k definicím maker"); }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
*/
virtual QCString trFunctionPrototypeDocumentation()
- { return "Dokumentace prototypů"; }
+ { return DECODE("Dokumentace prototypů"); }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
virtual QCString trTypedefDocumentation()
- { return "Dokumentace definic typů"; }
+ { return DECODE("Dokumentace definic typů"); }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
virtual QCString trEnumerationTypeDocumentation()
- { return "Dokumentace výčtových typů"; }
+ { return DECODE("Dokumentace výčtových typů"); }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
- { return "Dokumentace výčtových hodnot"; }
+ { return DECODE("Dokumentace výčtových hodnot"); }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
virtual QCString trFunctionDocumentation()
- { return "Dokumentace funkcí"; }
+ { return DECODE("Dokumentace funkcí"); }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
virtual QCString trVariableDocumentation()
- { return "Dokumentace proměnných"; }
+ { return DECODE("Dokumentace proměnných"); }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
*/
virtual QCString trCompounds()
- { return "Složeniny"; }
+ { return DECODE("Třídy"); }
/*! This is used in the documentation of a group before the list of
* links to documented files
*/
virtual QCString trFiles()
- { return "Soubory"; }
+ { return DECODE("Soubory"); }
/*! This is used in the standard footer of each page and indicates when
* the page was generated
@@ -416,74 +521,75 @@ class TranslatorCzech : public Translator
QCString result=(QCString)"Generováno "+date;
if (projName) result+=(QCString)" pro projekt "+projName;
result+=(QCString)" programem";
- return result;
+ return DECODE(result);
}
/*! This is part of the sentence used in the standard footer of each page.
*/
virtual QCString trWrittenBy()
{
- return " -- autor ";
+ return DECODE(" -- autor ");
}
/*! this text is put before a class diagram */
virtual QCString trClassDiagram(const char *clName)
{
- return (QCString)"Diagram dědičnosti pro třídu "+clName;
+ return DECODE((QCString)"Diagram dědičnosti pro třídu "+clName);
}
/*! this text is generated when the \internal command is used. */
virtual QCString trForInternalUseOnly()
- { return "Pouze pro vnitřní použití."; }
+ { return DECODE("Pouze pro vnitřní použití."); }
/*! this text is generated when the \reimp command is used. */
virtual QCString trReimplementedForInternalReasons()
- { return "Reimplementováno z interních důvodů; aplikační rozhraní zachováno."; }
+ { return DECODE("Reimplementováno z interních důvodů; "
+ "aplikační rozhraní zachováno."); }
/*! this text is generated when the \warning command is used. */
virtual QCString trWarning()
- { return "Pozor"; }
+ { return DECODE("Pozor"); }
/*! this text is generated when the \bug command is used. */
virtual QCString trBugsAndLimitations()
- { return "Chyby a omezení"; }
+ { return DECODE("Chyby a omezení"); }
/*! this text is generated when the \version command is used. */
virtual QCString trVersion()
- { return "Verze"; }
+ { return DECODE("Verze"); }
/*! this text is generated when the \date command is used. */
virtual QCString trDate()
- { return "Datum"; }
+ { return DECODE("Datum"); }
/*! this text is generated when the \author command is used. */
virtual QCString trAuthors()
- { return "Autor/autoři"; }
+ { return DECODE("Autor/autoři"); }
/*! this text is generated when the \return command is used. */
virtual QCString trReturns()
- { return "Vrací"; }
+ { return DECODE("Vrací"); }
/*! this text is generated when the \sa command is used. */
virtual QCString trSeeAlso()
- { return "Viz také"; }
+ { return DECODE("Viz také"); }
/*! this text is generated when the \param command is used. */
virtual QCString trParameters()
- { return "Parametry"; }
+ { return DECODE("Parametry"); }
/*! this text is generated when the \exception command is used. */
virtual QCString trExceptions()
- { return "Výjimky"; }
+ { return DECODE("Výjimky"); }
/*! this text is used in the title page of a LaTeX document. */
virtual QCString trGeneratedBy()
- { return "Generováno programem"; }
+ { return DECODE("Generováno programem"); }
// new since 0.49-990307
/*! used as the title of page containing all the index of all namespaces. */
virtual QCString trNamespaceList()
- { return "Seznam prostorů jmen"; }
+ { return DECODE("Seznam prostorů jmen"); }
/*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll)
@@ -491,14 +597,14 @@ class TranslatorCzech : public Translator
QCString result="Zde naleznete seznam všech ";
if (!extractAll) result+="dokumentovaných ";
result+="prostorů jmen se stručným popisem:";
- return result;
+ return DECODE(result);
}
/*! used in the class documentation as a header before the list of all
* friends of a class
*/
virtual QCString trFriends()
- { return "Friends"; }
+ { return DECODE("Friends"); }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
@@ -508,7 +614,7 @@ class TranslatorCzech : public Translator
* related classes
*/
virtual QCString trRelatedFunctionDocumentation()
- { return "Dokumentace k friends"; }
+ { return DECODE("Dokumentace k friends"); }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
@@ -517,60 +623,61 @@ class TranslatorCzech : public Translator
/*! used as the title of the HTML page of a class/struct/union */
virtual QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType,
- bool /*isTemplate*/)
+ bool isTemplate)
{
- QCString result=(QCString)clName+" ";
+ QCString result("Dokumentace ");
+ if (isTemplate) result+="šablony ";
switch(compType)
{
- case ClassDef::Class: result+=" Třída"; break;
- case ClassDef::Struct: result+=" Struktura"; break;
- case ClassDef::Union: result+=" Unie"; break;
- case ClassDef::Interface: result+=" Rozhraní"; break;
- case ClassDef::Exception: result+=" Výjimka"; break;
+ case ClassDef::Class: result+="třídy "; break;
+ case ClassDef::Struct: result+="struktury "; break;
+ case ClassDef::Union: result+="unie "; break;
+ case ClassDef::Interface: result+="rozhraní "; break;
+ case ClassDef::Exception: result+="výjimky "; break;
}
- result+=" Reference";
- return result;
+ result+=clName;
+ return DECODE(result);
}
/*! used as the title of the HTML page of a file */
virtual QCString trFileReference(const char *fileName)
{
- QCString result="Odkaz na soubor";
+ QCString result="Dokumentace souboru ";
result+=fileName;
- return result;
+ return DECODE(result);
}
/*! used as the title of the HTML page of a namespace */
virtual QCString trNamespaceReference(const char *namespaceName)
{
- QCString result=namespaceName;
- result+=" Namespace Reference???";
- return result;
+ QCString result("Dokumentace prostroru jmen ");
+ result+=namespaceName;
+ return DECODE(result);
}
/*! \mgroup Class sections
* these are for the member sections of a class, struct or union
*/
virtual QCString trPublicMembers()
- { return "Veřejné metody"; }
+ { return DECODE("Veřejné metody"); }
virtual QCString trPublicSlots()
- { return "Veřejné sloty"; }
+ { return DECODE("Veřejné sloty"); }
virtual QCString trSignals()
- { return "Signály"; }
+ { return DECODE("Signály"); }
virtual QCString trStaticPublicMembers()
- { return "Statické veřejné metody"; }
+ { return DECODE("Statické veřejné metody"); }
virtual QCString trProtectedMembers()
- { return "Chráněné metody"; }
+ { return DECODE("Chráněné metody"); }
virtual QCString trProtectedSlots()
- { return "Chráněné sloty"; }
+ { return DECODE("Chráněné sloty"); }
virtual QCString trStaticProtectedMembers()
- { return "Statické chráněné metody"; }
+ { return DECODE("Statické chráněné metody"); }
virtual QCString trPrivateMembers()
- { return "Privátní metody"; }
+ { return DECODE("Privátní metody"); }
virtual QCString trPrivateSlots()
- { return "Privátní sloty"; }
+ { return DECODE("Privátní sloty"); }
virtual QCString trStaticPrivateMembers()
- { return "Statické privátní metody"; }
+ { return DECODE("Statické privátní metody"); }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items.
@@ -595,7 +702,7 @@ class TranslatorCzech : public Translator
result+=" a ";
}
}
- return result;
+ return DECODE(result);
}
/*! used in class documentation to produce a list of base classes,
@@ -603,7 +710,7 @@ class TranslatorCzech : public Translator
*/
virtual QCString trInheritsList(int numEntries)
{
- return "Dědí "+trWriteList(numEntries)+".";
+ return DECODE("Dědí "+trWriteList(numEntries)+".");
}
/*! used in class documentation to produce a list of super classes,
@@ -611,7 +718,7 @@ class TranslatorCzech : public Translator
*/
virtual QCString trInheritedByList(int numEntries)
{
- return "Zděděna třídami "+trWriteList(numEntries)+".";
+ return DECODE("Zděděna třídami "+trWriteList(numEntries)+".");
}
/*! used in member documentation blocks to produce a list of
@@ -619,7 +726,7 @@ class TranslatorCzech : public Translator
*/
virtual QCString trReimplementedFromList(int numEntries)
{
- return "Reimplementace z "+trWriteList(numEntries)+".";
+ return DECODE("Reimplementace metody třídy "+trWriteList(numEntries)+".");
}
/*! used in member documentation blocks to produce a list of
@@ -627,36 +734,37 @@ class TranslatorCzech : public Translator
*/
virtual QCString trReimplementedInList(int numEntries)
{
- return "Reimplementováno v "+trWriteList(numEntries)+".";
+ return DECODE("Reimplementováno v "+trWriteList(numEntries)+".");
}
/*! This is put above each page as a link to all members of namespaces. */
virtual QCString trNamespaceMembers()
- { return "???Namespace Members"; }
+ { return DECODE("Symboly v prostorech jmen"); }
/*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result="Zde naleznete seznam všech ";
if (!extractAll) result+="dokumentovaných ";
- result+="???namespace members s odkazy na ";
+ result+="symbolů, které jsou definovány ve svých prostorech jmen. "
+ "U každého je uveden odkaz na ";
if (extractAll)
- result+="dokumentaci prostoru jmen pro každý člen:";
+ result+="dokumentaci příslušného prostoru jmen:";
else
- result+="prostory jmen, ke kterým příslušejí:";
- return result;
+ result+="příslušný prostor jmen:";
+ return DECODE(result);
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
virtual QCString trNamespaceIndex()
- { return "Rejstřík prostorů jmen"; }
+ { return DECODE("Rejstřík prostorů jmen"); }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
virtual QCString trNamespaceDocumentation()
- { return "Dokumentace prostorů jmen"; }
+ { return DECODE("Dokumentace prostorů jmen"); }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
@@ -666,7 +774,7 @@ class TranslatorCzech : public Translator
* namespaces in a file.
*/
virtual QCString trNamespaces()
- { return "Prostory jmen"; }
+ { return DECODE("Prostory jmen"); }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
@@ -691,14 +799,14 @@ class TranslatorCzech : public Translator
result+=" byla generována z ";
if (single) result+="následujícího souboru:";
else result+="následujících souborů:";
- return result;
+ return DECODE(result);
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual QCString trAlphabeticalList()
- { return "Abecední seznam složenin"; }
+ { return DECODE("Rejstřík tříd"); }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
@@ -706,18 +814,18 @@ class TranslatorCzech : public Translator
/*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues()
- { return "Vracené hodnoty"; }
+ { return DECODE("Vracené hodnoty"); }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
- { return "Hlavní stránka"; }
+ { return DECODE("Hlavní stránka"); }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual QCString trPageAbbreviation()
- { return "s."; }
+ { return DECODE("s."); }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
@@ -725,15 +833,15 @@ class TranslatorCzech : public Translator
virtual QCString trSources()
{
- return "Zdroje";
+ return DECODE("Zdroje");
}
virtual QCString trDefinedAtLineInSourceFile()
{
- return "Definice je uvedena na řádku @0 v souboru @1.";
+ return DECODE("Definice je uvedena na řádku @0 v souboru @1.");
}
virtual QCString trDefinedInSourceFile()
{
- return "Definice v souboru @0.";
+ return DECODE("Definice v souboru @0.");
}
//////////////////////////////////////////////////////////////////////////
@@ -742,7 +850,7 @@ class TranslatorCzech : public Translator
virtual QCString trDeprecated()
{
- return "Zastaralé";
+ return DECODE("Zastaralé");
}
//////////////////////////////////////////////////////////////////////////
@@ -752,68 +860,69 @@ class TranslatorCzech : public Translator
/*! this text is put before a collaboration diagram */
virtual QCString trCollaborationDiagram(const char *clName)
{
- return (QCString)"Diagram tříd pro "+clName+":";
+ return DECODE((QCString)"Diagram tříd pro "+clName+":");
}
/*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName)
{
- return (QCString)"Graf závislostí souborů pro "+fName+":";
+ return DECODE((QCString)"Graf závislostí na vkládaných souborech "
+ "pro "+fName+":");
}
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
{
- return "Dokumentace konstruktoru a destruktoru";
+ return DECODE("Dokumentace konstruktoru a destruktoru");
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
{
- return "Zobrazit zdrojový text tohoto souboru.";
+ return DECODE("Zobrazit zdrojový text tohoto souboru.");
}
/*! Used in the file sources to point to the corresponding documentation. */
virtual QCString trGotoDocumentation()
{
- return "Zobrazit dokumentaci tohoto souboru.";
+ return DECODE("Zobrazit dokumentaci tohoto souboru.");
}
/*! Text for the \pre command */
virtual QCString trPrecondition()
{
- return "Precondition";
+ return DECODE("Precondition");
}
/*! Text for the \post command */
virtual QCString trPostcondition()
{
- return "Postcondition";
+ return DECODE("Postcondition");
}
/*! Text for the \invariant command */
virtual QCString trInvariant()
{
- return "Invariant";
+ return DECODE("Invariant");
}
/*! Text shown before a multi-line variable/enum initialization */
virtual QCString trInitialValue()
{
- return "Initializer:";
+ return DECODE("Initializer:");
}
/*! Text used the source code in the file index */
virtual QCString trCode()
{
- return "zdrojový text";
+ return DECODE("zdrojový text");
}
virtual QCString trGraphicalHierarchy()
{
- return "Grafické zobrazení hierarchie tříd";
+ return DECODE("Grafické zobrazení hierarchie tříd");
}
virtual QCString trGotoGraphicalHierarchy()
{
- return "Zobrazit grafickou podobu hierarchie tříd";
+ return DECODE("Zobrazit grafickou podobu hierarchie tříd");
}
virtual QCString trGotoTextualHierarchy()
{
- return "Zobrazit textovou podobu hierarchie tříd";
+ return DECODE("Zobrazit textovou podobu hierarchie tříd");
}
virtual QCString trPageIndex()
{
- return "Rejstřík stránek";
+ return DECODE("Rejstřík stránek");
}
//////////////////////////////////////////////////////////////////////////
@@ -822,43 +931,43 @@ class TranslatorCzech : public Translator
virtual QCString trNote()
{
- return "Poznámka";
+ return DECODE("Poznámka");
}
virtual QCString trPublicTypes()
{
- return "Veřejné typy";
+ return DECODE("Veřejné typy");
}
virtual QCString trPublicAttribs()
{
- return "Veřejné atributy";
+ return DECODE("Veřejné atributy");
}
virtual QCString trStaticPublicAttribs()
{
- return "Statické veřejné atributy";
+ return DECODE("Statické veřejné atributy");
}
virtual QCString trProtectedTypes()
{
- return "Chráněné typy";
+ return DECODE("Chráněné typy");
}
virtual QCString trProtectedAttribs()
{
- return "Chráněné atributy";
+ return DECODE("Chráněné atributy");
}
virtual QCString trStaticProtectedAttribs()
{
- return "Statické chráněné atributy";
+ return DECODE("Statické chráněné atributy");
}
virtual QCString trPrivateTypes()
{
- return "Privátní typy";
+ return DECODE("Privátní typy");
}
virtual QCString trPrivateAttribs()
{
- return "Privátní atributy";
+ return DECODE("Privátní atributy");
}
virtual QCString trStaticPrivateAttribs()
{
- return "Statické privátní atributy";
+ return DECODE("Statické privátní atributy");
}
//////////////////////////////////////////////////////////////////////////
@@ -868,16 +977,39 @@ class TranslatorCzech : public Translator
/*! Used as a marker that is put before a todo item */
virtual QCString trTodo()
{
- return "Udělat";
+ return DECODE("Udělat");
}
/*! Used as the header of the todo list */
virtual QCString trTodoList()
{
- return "Seznam plánovaných úprav";
+ return DECODE("Seznam plánovaných úprav");
}
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.4
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trReferencedBy()
+ {
+ return DECODE("Používá se v");
+ }
+ virtual QCString trRemarks()
+ {
+ return DECODE("Poznámky"); // ??? not checked in a context
+ }
+ virtual QCString trAttention()
+ {
+ return DECODE("Upozornění"); // ??? not checked in a context
+ }
+ virtual QCString trInclByDepGraph()
+ {
+ return DECODE("Následující graf ukazuje, které soubory přímo nebo "
+ "nepřímo vkládají tento soubor:");
+ }
+ virtual QCString trSince()
+ {
+ return DECODE("Od"); // ??? not checked in a context
+ }
};
#endif // TRANSLATOR_CZ_H
-
-
diff --git a/src/translator_de.h b/src/translator_de.h
index 4f8ddf2..a48251b 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -345,7 +345,7 @@ class TranslatorGerman : public Translator
{ return "Nur f&uuml;r den internen Gebrauch."; }
QCString trReimplementedForInternalReasons()
// this text is generated when the \reimp command is used.
- { return "Aufgrund interner Gr&uuml;nde neu implementiert; "
+ { return "Aus internen Gr&uuml;nden neu implementiert. "
"Das API wird davon nicht ber&uuml;hrt.";
}
QCString trWarning()
diff --git a/src/translator_es.h b/src/translator_es.h
index 92466f5..1af7658 100644
--- a/src/translator_es.h
+++ b/src/translator_es.h
@@ -16,10 +16,10 @@
*/
/**
- * translator_es.h modified by Lucas Cruz
+ * translator_es.h modified by Lucas Cruz (7-julio-2000)
* Some notes:
- * - I only use upper case in the first letter of the title, because
- * the aspect of the document is more pleasing to the eye.
+ * - It's posible that some sentences haven't got meaning because
+ * some words haven't got translate in spanish.
*/
#ifndef TRANSLATOR_ES_H
@@ -38,7 +38,7 @@ class TranslatorSpanish : public Translator
/*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions()
- { return "Funciones Relacionadas"; }
+ { return "Funciones relacionadas"; }
/*! subscript for the related functions. */
virtual QCString trRelatedSubscript()
@@ -46,23 +46,23 @@ class TranslatorSpanish : public Translator
/*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription()
- { return "Descripción Detallada"; }
+ { return "Descripción detallada"; }
/*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation()
- { return "Documentación de los 'Tipos Definidos' Miembros de la Clase"; }
+ { return "Documentación de los 'Tipos Definidos' miembros de la clase"; }
/*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation()
- { return "Documentación de las Enumeraciones Miembro de la Clase"; }
+ { return "Documentación de las enumeraciones miembro de la clase"; }
/*! header that is put before the list of member functions. */
virtual QCString trMemberFunctionDocumentation()
- { return "Documentación de las Funciones Miembro"; }
+ { return "Documentación de las funciones miembro"; }
/*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
- { return "Documentación de los Datos Miembro"; }
+ { return "Documentación de los datos miembro"; }
/*! this is the text of a link put after brief descriptions. */
virtual QCString trMore()
@@ -74,7 +74,7 @@ class TranslatorSpanish : public Translator
/*! used as the title of the "list of all members" page of a class */
virtual QCString trMemberList()
- { return "Lista de los Miembros"; }
+ { return "Lista de los miembros"; }
/*! this is the first part of a sentence that is followed by a class name */
virtual QCString trThisIsTheListOfAllMembers()
@@ -122,31 +122,31 @@ class TranslatorSpanish : public Translator
/*! This is put above each page as a link to the class hierarchy */
virtual QCString trClassHierarchy()
- { return "Jerarquía de la Clase"; }
+ { return "Jerarquía de la clase"; }
/*! This is put above each page as a link to the list of annotated classes */
virtual QCString trCompoundList()
- { return "Lista de Componentes"; }
+ { return "Lista de componentes"; }
/*! This is put above each page as a link to the list of documented files */
virtual QCString trFileList()
- { return "Lista de Archivos"; }
+ { return "Lista de archivos"; }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
- { return "Archivos Cabecera"; }
+ { return "Archivos cabecera"; }
/*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers()
- { return "Miembros de las Clases"; }
+ { return "Miembros de las clases"; }
/*! This is put above each page as a link to all members of files. */
virtual QCString trFileMembers()
- { return "Archivos de los Miembros"; }
+ { return "Archivos de los miembros"; }
/*! This is put above each page as a link to all related pages. */
virtual QCString trRelatedPages()
- { return "Páginas Relacionadas"; }
+ { return "Páginas relacionadas"; }
/*! This is put above each page as a link to all examples. */
virtual QCString trExamples()
@@ -236,59 +236,59 @@ class TranslatorSpanish : public Translator
* index of all groups.
*/
virtual QCString trModuleIndex()
- { return "Indice de Módulos"; }
+ { return "Indice de módulos"; }
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
virtual QCString trHierarchicalIndex()
- { return "Indice Jerárquico"; }
+ { return "Indice jerárquico"; }
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
*/
virtual QCString trCompoundIndex()
- { return "Indice de Clases"; }
+ { return "Indice de clases"; }
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
virtual QCString trFileIndex()
- { return "Indice de Archivos"; }
+ { return "Indice de archivos"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
virtual QCString trModuleDocumentation()
- { return "Documentación de Módulos"; }
+ { return "Documentación de módulos"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions.
*/
virtual QCString trClassDocumentation()
- { return "Documentación de Clasee"; }
+ { return "Documentación de clasee"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all files.
*/
virtual QCString trFileDocumentation()
- { return "Documentación de Archivos"; }
+ { return "Documentación de archivos"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
virtual QCString trExampleDocumentation()
- { return "Documentación de Ejemplos"; }
+ { return "Documentación de ejemplos"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
virtual QCString trPageDocumentation()
- { return "Documentación de Páginas"; }
+ { return "Documentación de páginas"; }
/*! This is used in LaTeX as the title of the document */
virtual QCString trReferenceManual()
- { return "Manual de Referencia"; }
+ { return "Manual de referencia"; }
/*! This is used in the documentation of a file as a header before the
* list of defines
@@ -300,13 +300,13 @@ class TranslatorSpanish : public Translator
* list of function prototypes
*/
virtual QCString trFuncProtos()
- { return "Funciones Prototipo"; }
+ { return "Funciones prototipo"; }
/*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
virtual QCString trTypedefs()
- { return "Tipos Definidos"; }
+ { return "Tipos definidos"; }
/*! This is used in the documentation of a file as a header before the
* list of enumerations
@@ -340,7 +340,7 @@ class TranslatorSpanish : public Translator
* documentation blocks for defines
*/
virtual QCString trDefineDocumentation()
- { return "Documentación de las Definiciones"; }
+ { return "Documentación de las definiciones"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
@@ -352,31 +352,31 @@ class TranslatorSpanish : public Translator
* of documentation blocks for typedefs
*/
virtual QCString trTypedefDocumentation()
- { return "Documentación de los Tipos Definidos"; }
+ { return "Documentación de los tipos definidos"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
virtual QCString trEnumerationTypeDocumentation()
- { return "Documentación de las Enumeraciones"; }
+ { return "Documentación de las enumeraciones"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
- { return "Documentación de los Valores de la Enumeración"; }
+ { return "Documentación de los valores de la enumeración"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
virtual QCString trFunctionDocumentation()
- { return "Documentación de las Funciones"; }
+ { return "Documentación de las funciones"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
virtual QCString trVariableDocumentation()
- { return "Documentación de las Variables"; }
+ { return "Documentación de las variables"; }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
@@ -465,7 +465,7 @@ class TranslatorSpanish : public Translator
/*! used as the title of page containing all the index of all namespaces. */
virtual QCString trNamespaceList()
- { return "Lista de Namespace"; }
+ { return "Lista de namespace"; }
/*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll)
@@ -490,7 +490,7 @@ class TranslatorSpanish : public Translator
* related classes
*/
virtual QCString trRelatedFunctionDocumentation()
- { return "Documentación de las Funciones Relacionadas y Clases Amigas"; }
+ { return "Documentación de las funciones relacionadas y clases amigas"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
@@ -518,7 +518,7 @@ class TranslatorSpanish : public Translator
virtual QCString trFileReference(const char *fileName)
{
QCString result=fileName;
- result+=" Archivo Referencia";
+ result+=" Archivo referencia";
return result;
}
@@ -526,7 +526,7 @@ class TranslatorSpanish : public Translator
virtual QCString trNamespaceReference(const char *namespaceName)
{
QCString result=namespaceName;
- result+=" Namespace Referencia";
+ result+=" Namespace referencia";
return result;
}
@@ -534,25 +534,25 @@ class TranslatorSpanish : public Translator
* these are for the member sections of a class, struct or union
*/
virtual QCString trPublicMembers()
- { return "Métodos Públicos"; }
+ { return "Métodos públicos"; }
virtual QCString trPublicSlots()
- { return "Slots Públicos"; }
+ { return "Slots públicos"; }
virtual QCString trSignals()
{ return "Seńales"; }
virtual QCString trStaticPublicMembers()
- { return "Métodos Públicos Estáticos"; }
+ { return "Métodos públicos estáticos"; }
virtual QCString trProtectedMembers()
- { return "Métodos Protegidos"; }
+ { return "Métodos protegidos"; }
virtual QCString trProtectedSlots()
- { return "Slots Protegidos"; }
+ { return "Slots protegidos"; }
virtual QCString trStaticProtectedMembers()
- { return "Métodos Protegidos Estáticos"; }
+ { return "Métodos protegidos estáticos"; }
virtual QCString trPrivateMembers()
- { return "Métodos Privados"; }
+ { return "Métodos privados"; }
virtual QCString trPrivateSlots()
- { return "Slots Privados"; }
+ { return "Slots privados"; }
virtual QCString trStaticPrivateMembers()
- { return "Métodos Privados Estáticos"; }
+ { return "Métodos privados estáticos"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items.
@@ -614,7 +614,7 @@ class TranslatorSpanish : public Translator
/*! This is put above each page as a link to all members of namespaces. */
virtual QCString trNamespaceMembers()
- { return "Namespace Miembros"; }
+ { return "Namespace miembros"; }
/*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll)
@@ -632,13 +632,13 @@ class TranslatorSpanish : public Translator
* index of all namespaces.
*/
virtual QCString trNamespaceIndex()
- { return "Indice de Namespace"; }
+ { return "Indice de namespace"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
virtual QCString trNamespaceDocumentation()
- { return "Documentación de Namespace"; }
+ { return "Documentación de namespace"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
@@ -680,7 +680,7 @@ class TranslatorSpanish : public Translator
* list.
*/
virtual QCString trAlphabeticalList()
- { return "Lista Alfabética"; }
+ { return "Lista alfabética"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
@@ -693,7 +693,7 @@ class TranslatorSpanish : public Translator
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
- { return "Página Principal"; }
+ { return "Página principal"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
@@ -744,7 +744,7 @@ class TranslatorSpanish : public Translator
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
{
- return "Documentación del Constructor y Destructor";
+ return "Documentación del constructor y destructor";
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
@@ -783,7 +783,7 @@ class TranslatorSpanish : public Translator
}
virtual QCString trGraphicalHierarchy()
{
- return "Representación Gráfica de la Clase";
+ return "Representación gráfica de la clase";
}
virtual QCString trGotoGraphicalHierarchy()
{
@@ -795,7 +795,7 @@ class TranslatorSpanish : public Translator
}
virtual QCString trPageIndex()
{
- return "Página Indice";
+ return "Página indice";
}
virtual QCString trNote()
{
@@ -804,40 +804,82 @@ class TranslatorSpanish : public Translator
virtual QCString trPublicTypes()
{
- return "Tipos Públicos";
+ return "Tipos públicos";
}
virtual QCString trPublicAttribs()
{
- return "Atributos Públicos";
+ return "Atributos públicos";
}
virtual QCString trStaticPublicAttribs()
{
- return "Atributos Públicos Estáticos";
+ return "Atributos públicos estáticos";
}
virtual QCString trProtectedTypes()
{
- return "Tipos Protegidos";
+ return "Tipos protegidos";
}
virtual QCString trProtectedAttribs()
{
- return "Atributos Protegidos";
+ return "Atributos protegidos";
}
virtual QCString trStaticProtectedAttribs()
{
- return "Atributos Protegidos Estáticos";
+ return "Atributos protegidos estáticos";
}
virtual QCString trPrivateTypes()
{
- return "Tipos Privados";
+ return "Tipos privados";
}
virtual QCString trPrivateAttribs()
{
- return "Atributos Privados";
+ return "Atributos privados";
}
virtual QCString trStaticPrivateAttribs()
{
- return "Atributos Privados Estáticos";
+ return "Atributos privados estáticos";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.3
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a marker that is put before a todo item */
+ virtual QCString trTodo()
+ {
+ return "Todo";
+ }
+ /*! Used as the header of the todo list */
+ virtual QCString trTodoList()
+ {
+ return "Listado de todo";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.4
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trReferencedBy()
+ {
+ return "Referenciado por";
+ }
+ virtual QCString trRemarks()
+ {
+ return "Comentarios";
+ }
+ virtual QCString trAttention()
+ {
+ return "Atención";
+ }
+ virtual QCString trInclByDepGraph()
+ {
+ return "Este gráfico muestra que archivos directa o "
+ "indirectamente incluyen a este archivo.";
+ }
+ virtual QCString trSince()
+ {
+ return "Desde";
}
};
+
#endif
diff --git a/src/translator_hr.h b/src/translator_hr.h
index 3407e82..593b7ca 100644
--- a/src/translator_hr.h
+++ b/src/translator_hr.h
@@ -15,6 +15,8 @@
*
*/
+// translation by Boris Bralo <boris.bralo@zg.tel.hr>
+
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
@@ -27,6 +29,14 @@ class TranslatorCroatian : public Translator
{ return "croatian"; }
QCString latexBabelPackage()
{ return "croatian"; }
+ QCString idLanguageCharset()
+ {
+#ifdef _WIN32
+ return "windows-1250";
+#else
+ return "iso-8859-2";
+#endif
+ }
QCString trRelatedFunctions()
{ return "Povezane funkcije"; }
QCString trRelatedSubscript()
@@ -612,7 +622,11 @@ class TranslatorCroatian : public Translator
}
virtual QCString trAttention()
{
+#ifdef _WIN32
+ return "Pa?nja";
+#else
return "Paľnja";
+#endif
}
virtual QCString trInclByDepGraph()
{
diff --git a/src/util.cpp b/src/util.cpp
index eb2f252..a1e93a8 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -37,6 +37,55 @@
#include "version.h"
#include "groupdef.h"
+#ifndef _WIN32
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <errno.h>
+extern char **environ;
+#endif
+
+/*! Implements an interruptable system call on Unix */
+int iSystem(const char *command)
+{
+#ifndef _WIN32
+ /*! taken from the system() manpage on my Linux box */
+ int pid,status;
+
+ if (command==0) return 1;
+ pid = fork();
+ if (pid==-1) return -1;
+ if (pid==0)
+ {
+ const char * argv[4];
+ argv[0] = "sh";
+ argv[1] = "-c";
+ argv[2] = command;
+ argv[3] = 0;
+ execve("/bin/sh",(char * const *)argv,environ);
+ exit(127);
+ }
+ for (;;)
+ {
+ if (waitpid(pid,&status,0)==-1)
+ {
+ if (errno!=EINTR) return -1;
+ }
+ else
+ {
+ return status;
+ }
+ }
+#else
+ system(command);
+#endif
+}
+
+
+
+
+
// an inheritance tree of depth of 100000 should be enough for everyone :-)
const int maxInheritanceDepth = 100000;
@@ -212,6 +261,7 @@ ClassDef *getResolvedClass(const char *name)
QCString *subst = typedefDict[name];
if (subst) // there is a typedef with this name
{
+ //printf("getResolvedClass `%s'->`%s'\n",name,subst->data());
if (*subst==name) // avoid resolving typedef struct foo foo;
{
return classDict[name];
@@ -220,6 +270,7 @@ ClassDef *getResolvedClass(const char *name)
QCString *newSubst;
while ((newSubst=typedefDict[*subst]) && count<10)
{
+ if (*subst==*newSubst) return classDict[subst->data()]; // for breaking typedef struct A A;
subst=newSubst;
count++;
}
@@ -249,11 +300,11 @@ QCString removeRedundantWhiteSpace(const QCString &s)
for (i=0;i<l;i++)
{
char c=s.at(i);
- if (i<l-2 && c=='<' && s.at(i+1)!='<')
+ if (i<l-2 && c=='<' && (isId(s.at(i+1)) || isspace(s.at(i+1))))
{
result+="< ";
}
- else if (i>0 && c=='>' && s.at(i-1)!='>')
+ else if (i>0 && c=='>' && (isId(s.at(i-1)) || isspace(s.at(i-1))))
{
result+=" >";
}
@@ -267,6 +318,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
result+=c;
}
}
+ //printf("removeRedundantWhiteSpace(`%s')=`%s'\n",s.data(),result.data());
return result;
}
@@ -288,7 +340,7 @@ bool leftScopeMatch(const QCString &scope, const QCString &name)
);
}
-void linkifyText(OutputList &ol,const char *scName,const char *name,const char *text,bool autoBreak)
+void linkifyText(OutputList &ol,const char *scName,const char *name,const char *text,bool autoBreak,bool external)
{
//printf("scope=`%s' name=`%s' Text: `%s'\n",scName,name,text);
static QRegExp regExp("[a-z_A-Z][a-z_A-Z0-9:]*");
@@ -362,7 +414,7 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
if ((cd=getClass(fullName)))
{
// add link to the result
- if (cd->isLinkable())
+ if (external ? cd->isLinkable() : cd->isLinkableInProject())
{
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,word);
found=TRUE;
@@ -384,13 +436,13 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
getDefs(scName,word,0,md,cd,fd,nd,gd) &&
(md->isTypedef() || md->isEnumerate() ||
md->isReference() || md->isVariable()) &&
- md->isLinkable()
+ (external ? md->isLinkable() : md->isLinkableInProject())
)
{
//printf("Found ref\n");
Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
- if (d && d->isLinkable())
+ if (d && (external ? d->isLinkable() : d->isLinkableInProject()))
{
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),word);
diff --git a/src/util.h b/src/util.h
index 4f9668f..3d683d8 100644
--- a/src/util.h
+++ b/src/util.h
@@ -41,7 +41,7 @@ extern void setAnchors(char id,MemberList *ml,int groupId=-1);
extern QCString fileToString(const char *name);
extern QCString dateToString(bool);
extern void linkifyText(OutputList &ol,const char *clName,const char *name,
- const char *text,bool autoBreak=FALSE);
+ const char *text,bool autoBreak=FALSE,bool external=TRUE);
extern bool getDefs(const QCString &scopeName,const QCString &memberName,
const char *, MemberDef *&md,
ClassDef *&cd,FileDef *&fd,
@@ -97,5 +97,6 @@ void extractNamespaceName(const QCString &scopeName,
QCString &className,QCString &namespaceName);
QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &templ);
QCString stripScope(const char *name);
+int iSystem(const char *command);
#endif