diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2000-07-16 17:27:25 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2000-07-16 17:27:25 (GMT) |
commit | 55571c2989a42e670d62b4cb2d2bd2882b5ecd60 (patch) | |
tree | 156f3b8b79f2df8ecf0c8d3175e2788e40b4b824 /src | |
parent | 56bc9bda61e06b9bd6da5aa58083e93a3b55a465 (diff) | |
download | Doxygen-55571c2989a42e670d62b4cb2d2bd2882b5ecd60.zip Doxygen-55571c2989a42e670d62b4cb2d2bd2882b5ecd60.tar.gz Doxygen-55571c2989a42e670d62b4cb2d2bd2882b5ecd60.tar.bz2 |
Release-1.1.5-20000716
Diffstat (limited to 'src')
-rw-r--r-- | src/code.l | 48 | ||||
-rw-r--r-- | src/config.h | 7 | ||||
-rw-r--r-- | src/config.l | 36 | ||||
-rw-r--r-- | src/definition.cpp | 33 | ||||
-rw-r--r-- | src/diagram.cpp | 8 | ||||
-rw-r--r-- | src/dot.cpp | 74 | ||||
-rw-r--r-- | src/doxygen.cpp | 284 | ||||
-rw-r--r-- | src/entry.cpp | 2 | ||||
-rw-r--r-- | src/entry.h | 1 | ||||
-rw-r--r-- | src/filedef.cpp | 3 | ||||
-rw-r--r-- | src/filedef.h | 39 | ||||
-rw-r--r-- | src/formula.cpp | 6 | ||||
-rw-r--r-- | src/htmlgen.cpp | 77 | ||||
-rw-r--r-- | src/htmlgen.h | 7 | ||||
-rw-r--r-- | src/index.cpp | 60 | ||||
-rw-r--r-- | src/latexgen.cpp | 255 | ||||
-rw-r--r-- | src/latexgen.h | 3 | ||||
-rw-r--r-- | src/membergroup.cpp | 4 | ||||
-rw-r--r-- | src/memberlist.h | 1 | ||||
-rw-r--r-- | src/pre.l | 18 | ||||
-rw-r--r-- | src/rtfgen.cpp | 160 | ||||
-rw-r--r-- | src/rtfgen.h | 3 | ||||
-rw-r--r-- | src/scanner.l | 57 | ||||
-rw-r--r-- | src/translator.h | 6 | ||||
-rw-r--r-- | src/translator_cz.h | 470 | ||||
-rw-r--r-- | src/translator_de.h | 2 | ||||
-rw-r--r-- | src/translator_es.h | 172 | ||||
-rw-r--r-- | src/translator_hr.h | 14 | ||||
-rw-r--r-- | src/util.cpp | 64 | ||||
-rw-r--r-- | src/util.h | 3 |
30 files changed, 1319 insertions, 598 deletions
@@ -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" + " \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 @@ -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ür den internen Gebrauch."; } QCString trReimplementedForInternalReasons() // this text is generated when the \reimp command is used. - { return "Aufgrund interner Gründe neu implementiert; " + { return "Aus internen Gründen neu implementiert. " "Das API wird davon nicht berü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); @@ -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 |