diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/classdef.cpp | 11 | ||||
-rw-r--r-- | src/code.l | 101 | ||||
-rw-r--r-- | src/config.h | 4 | ||||
-rw-r--r-- | src/config.l | 113 | ||||
-rw-r--r-- | src/definition.cpp | 2 | ||||
-rw-r--r-- | src/dot.cpp | 3 | ||||
-rw-r--r-- | src/doxygen.cpp | 82 | ||||
-rw-r--r-- | src/doxygen.h | 1 | ||||
-rw-r--r-- | src/doxytag.l | 6 | ||||
-rw-r--r-- | src/htmlgen.cpp | 6 | ||||
-rw-r--r-- | src/index.cpp | 7 | ||||
-rw-r--r-- | src/language.cpp | 5 | ||||
-rw-r--r-- | src/latexgen.cpp | 52 | ||||
-rw-r--r-- | src/memberdef.cpp | 3 | ||||
-rw-r--r-- | src/pre.l | 7 | ||||
-rw-r--r-- | src/rtfgen.cpp | 601 | ||||
-rw-r--r-- | src/scanner.l | 24 | ||||
-rw-r--r-- | src/suffixtree.cpp | 4 | ||||
-rw-r--r-- | src/suffixtree.h | 5 | ||||
-rw-r--r-- | src/translator.h | 49 | ||||
-rw-r--r-- | src/translator_cz.h | 940 | ||||
-rw-r--r-- | src/translator_de.h | 22 | ||||
-rw-r--r-- | src/translator_es.h | 30 | ||||
-rw-r--r-- | src/translator_fi.h | 2 | ||||
-rw-r--r-- | src/translator_fr.h | 2 | ||||
-rw-r--r-- | src/translator_hr.h | 2 | ||||
-rw-r--r-- | src/translator_it.h | 30 | ||||
-rw-r--r-- | src/translator_jp.h | 29 | ||||
-rw-r--r-- | src/translator_nl.h | 2 | ||||
-rw-r--r-- | src/translator_ru.h | 2 | ||||
-rw-r--r-- | src/translator_se.h | 2 | ||||
-rw-r--r-- | src/util.cpp | 31 |
32 files changed, 1472 insertions, 708 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index daacfba..558d33b 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1605,8 +1605,14 @@ void ClassDef::determineImplUsageRelation() int brCount=1; while (te<typeLen && brCount!=0) { - if (type.at(te)=='<') brCount++; - if (type.at(te)=='>') brCount--; + if (type.at(te)=='<') + { + if (te<typeLen-1 && type.at(te+1)=='<') te++; else brCount++; + } + if (type.at(te)=='>') + { + if (te<typeLen-1 && type.at(te+1)=='>') te++; else brCount--; + } te++; } } @@ -1614,6 +1620,7 @@ void ClassDef::determineImplUsageRelation() if (te>ts) templSpec = type.mid(ts,te-ts); ClassDef *cd=getResolvedClass(name()+"::"+type.mid(i,l)); if (cd==0) cd=getResolvedClass(type.mid(i,l)); // TODO: also try inbetween scopes! + //printf("Search for class %s result=%p\n",type.mid(i,l).data(),cd); if (cd) // class exists { found=TRUE; @@ -118,6 +118,7 @@ static const char * g_currentFontClass; static bool g_searchingForBody; static bool g_insideBody; static int g_bodyCurlyCount; +static ClassDef * g_classVar; /*! start a new line of code, inserting a line number if g_sourceFileDef * is TRUE. If a definition starts at the current line, then the line @@ -341,6 +342,34 @@ static void generateClassLink(OutputList &ol,char *clName,int *clNameLen=0) } } +static ClassDef *stripClassName(const char *s) +{ + QCString tmp=s; + if (tmp.isEmpty()) return 0; + static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*"); + int p=0,i,l; + while ((i=re.match(tmp,p,&l))!=-1) + { + ClassDef *cd=0; + QCString clName = tmp.mid(i,l); + //printf("g_classScope=`%s' clName=`%s'\n",g_classScope.data(),clName.data()); + if (!g_classScope.isEmpty()) + { + cd=getResolvedClass(g_classScope+"::"+clName); + } + if (cd==0) + { + cd=getResolvedClass(clName); + } + if (cd) + { + return cd; + } + p=i+l; + } + return 0; +} + static bool getLink(const char *className, const char *memberName,OutputList &result, const char *text=0) @@ -375,10 +404,11 @@ static bool getLink(const char *className, } } Definition *d=0; - if (cd) d=cd; else if (cd) d=nd; else if (fd) d=fd; else d=gd; + if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; if (d && d->isLinkable()) { + g_classVar = stripClassName(md->typeString()); if (g_currentDefinition && g_currentMemberDef && md!=g_currentMemberDef && g_insideBody) { @@ -393,32 +423,47 @@ static bool getLink(const char *className, return FALSE; } -static ClassDef *stripClassName(const char *s) +static bool generateClassMemberLink(OutputList &ol,ClassDef *mcd,const char *memName) { - QCString tmp=s; - if (tmp.isEmpty()) return 0; - static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*"); - int p=0,i,l; - while ((i=re.match(tmp,p,&l))!=-1) + //printf("generateClassMemberLink(%s,%s)\n",mcd->name().data(),memName); + MemberName *mmn=memberNameDict[memName]; + if (mmn) { - ClassDef *cd=0; - QCString clName = tmp.mid(i,l); - //printf("g_classScope=`%s' clName=`%s'\n",g_classScope.data(),clName.data()); - if (!g_classScope.isEmpty()) - { - cd=getResolvedClass(g_classScope+"::"+clName); - } - if (cd==0) + MemberNameIterator mmni(*mmn); + MemberDef *mmd,*xmd=0; + ClassDef *xcd=0; + const int maxInheritanceDepth = 100000; + int mdist=maxInheritanceDepth; + for (;(mmd=mmni.current());++mmni) { - cd=getResolvedClass(clName); + int m=minClassDistance(mcd,mmd->memberClass()); + if (m<mdist && mmd->memberClass()->isLinkable()) + { + mdist=m; + xcd=mmd->memberClass(); + xmd=mmd; + } } - if (cd) + if (mdist!=maxInheritanceDepth) { - return cd; + // extract class definition of the return type in order to resolve + // a->b()->c() like call chains + g_classVar = stripClassName(xmd->typeString()); + + // add usage reference + if (g_currentDefinition && g_currentMemberDef && + xmd!=g_currentMemberDef && g_insideBody) + { + xmd->addSourceReference(g_currentMemberDef); + } + + // write the actual link + writeMultiLineCodeLink(ol,xcd->getReference(), + xcd->getOutputFileBase(),xmd->anchor(),memName); + return TRUE; } - p=i+l; } - return 0; + return FALSE; } static void generateMemberLink(OutputList &ol,const char *varName, @@ -493,6 +538,8 @@ static void generateMemberLink(OutputList &ol,const char *varName, ClassDef *mcd=stripClassName(vmd->typeString()); if (mcd && mcd->isLinkable()) { + if (generateClassMemberLink(ol,mcd,memName)) return; +#if 0 //printf("Found class `%s'\n",mcd->name().data()); MemberName *mmn=memberNameDict[memName]; if (mmn) @@ -524,6 +571,7 @@ static void generateMemberLink(OutputList &ol,const char *varName, return; } } +#endif } } } @@ -925,9 +973,21 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" } <MemberCall>{SCOPENAME}/{B}*"(" { if (!g_name.isEmpty()) + { generateMemberLink(*g_code,g_name,yytext); + } + else if (g_classVar) + { + if (!generateClassMemberLink(*g_code,g_classVar,yytext)) + { + g_code->codify(yytext); + } + g_classVar=0; + } else + { g_code->codify(yytext); + } g_name.resize(0);g_type.resize(0); g_bracketCount=0; BEGIN(FuncCall); @@ -1350,6 +1410,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, g_bodyCurlyCount = 0; g_bracketCount = 0; g_sharpCount = 0; + g_classVar = 0; g_classScope = className; g_exampleBlock = exBlock; g_exampleName = exName; diff --git a/src/config.h b/src/config.h index 9330012..9665dbb 100644 --- a/src/config.h +++ b/src/config.h @@ -96,15 +96,17 @@ struct Config static QCString rtfOutputDir; // the directory to put the RTF files static bool compactRTFFlag; // generate more compact RTF static bool rtfHyperFlag; // generate hyper links in RTF + static QCString rtfStylesheetFile; // file to load stylesheet definitions from static bool generateMan; // generate Man pages static QCString manOutputDir; // the directory to put the man pages static QCString manExtension; // extension the man page files static bool preprocessingFlag; // enable preprocessing static bool macroExpansionFlag; // expand macros in the source. + static bool onlyPredefinedFlag; // expand only predefined macros static bool searchIncludeFlag; // search for included files static QStrList includePath; // list of include paths static QStrList predefined; // list of predefined macro names. - static bool onlyPredefinedFlag; // expand only predefined macros + static QStrList expandAsDefinedList; // list of defines to expand static QStrList tagFileList; // list of tag files static QCString genTagFile; // the tag file to generate static bool allExtFlag; // include all external classes flag diff --git a/src/config.l b/src/config.l index 780e9ce..57064e7 100644 --- a/src/config.l +++ b/src/config.l @@ -131,15 +131,17 @@ bool Config::generateRTF = TRUE; QCString Config::rtfOutputDir = "rtf"; bool Config::compactRTFFlag = FALSE; bool Config::rtfHyperFlag = FALSE; +QCString Config::rtfStylesheetFile; bool Config::generateMan = TRUE; QCString Config::manOutputDir = "man"; QCString Config::manExtension = ".3"; bool Config::preprocessingFlag = TRUE; bool Config::macroExpansionFlag = FALSE; +bool Config::onlyPredefinedFlag = FALSE; bool Config::searchIncludeFlag = TRUE; QStrList Config::includePath; QStrList Config::predefined; -bool Config::onlyPredefinedFlag = FALSE; +QStrList Config::expandAsDefinedList; QStrList Config::tagFileList; QCString Config::genTagFile; bool Config::allExtFlag = FALSE; @@ -175,8 +177,6 @@ static bool * b=0; static QStrList * l=0; static int lastState; static QCString elemStr; -//static QCString tabSizeString; -//static QCString colsInAlphaIndexString; static QCString tabSizeString; static QCString colsInAlphaIndexString; static QCString maxDotGraphWidthString; @@ -279,15 +279,17 @@ static int yyread(char *buf,int max_size) <Start>"RTF_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::rtfOutputDir; s->resize(0); } <Start>"COMPACT_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactRTFFlag; } <Start>"RTF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::rtfHyperFlag; } +<Start>"RTF_STYLESHEET_FILE"[ \t]*"=" { BEGIN(GetString); s=&Config::rtfStylesheetFile; s->resize(0); } <Start>"GENERATE_MAN"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateMan; } <Start>"MAN_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::manOutputDir; s->resize(0); } <Start>"MAN_EXTENSION"[ \t]*"=" { BEGIN(GetString); s=&Config::manExtension; s->resize(0); } <Start>"ENABLE_PREPROCESSING"[ \t]*"=" { BEGIN(GetBool); b=&Config::preprocessingFlag; } <Start>"MACRO_EXPANSION"[ \t]*"=" { BEGIN(GetBool); b=&Config::macroExpansionFlag; } +<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>"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; } -<Start>"EXPAND_ONLY_PREDEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; } +<Start>"EXPAND_AS_DEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::expandAsDefinedList; l->clear(); elemStr=""; } <Start>"TAGFILES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::tagFileList; l->clear(); elemStr=""; } <Start>"GENERATE_TAGFILE"[ \t]*"=" { BEGIN(GetString); s=&Config::genTagFile; s->resize(0); } <Start>"ALLEXTERNALS"[ \t]*"=" { BEGIN(GetBool); b=&Config::allExtFlag; } @@ -546,6 +548,7 @@ void dumpConfig() printf("rtfOutputDir=`%s'\n",Config::rtfOutputDir.data()); printf("compactRTFFlag=`%d'\n",Config::compactRTFFlag); printf("rtfHyperFlag=`%d'\n",Config::rtfHyperFlag); + printf("rtfStylesheetFile=`%s'\n",Config::rtfStylesheetFile.data()); printf("# configuration options related to the man page output\n"); printf("generateMan=`%d'\n",Config::generateMan); printf("manOutputDir=`%s'\n",Config::manOutputDir.data()); @@ -553,6 +556,7 @@ void dumpConfig() printf("# Configuration options related to the preprocessor \n"); printf("preprocessingFlag=`%d'\n",Config::preprocessingFlag); printf("macroExpansionFlag=`%d'\n",Config::macroExpansionFlag); + printf("onlyPredefinedFlag=`%d'\n",Config::onlyPredefinedFlag); printf("searchIncludeFlag=`%d'\n",Config::searchIncludeFlag); { char *is=Config::includePath.first(); @@ -570,7 +574,14 @@ void dumpConfig() is=Config::predefined.next(); } } - printf("onlyPredefinedFlag=`%d'\n",Config::onlyPredefinedFlag); + { + char *is=Config::expandAsDefinedList.first(); + while (is) + { + printf("expandAsDefinedList=`%s'\n",is); + is=Config::expandAsDefinedList.next(); + } + } printf("# Configuration::addtions related to external references \n"); { char *is=Config::tagFileList.first(); @@ -677,15 +688,17 @@ void Config::init() Config::rtfOutputDir = "rtf"; Config::compactRTFFlag = FALSE; Config::rtfHyperFlag = FALSE; + Config::rtfStylesheetFile.resize(0); Config::generateMan = TRUE; Config::manOutputDir = "man"; Config::manExtension = ".3"; Config::preprocessingFlag = TRUE; Config::macroExpansionFlag = FALSE; + Config::onlyPredefinedFlag = FALSE; Config::searchIncludeFlag = TRUE; Config::includePath.clear(); Config::predefined.clear(); - Config::onlyPredefinedFlag = FALSE; + Config::expandAsDefinedList.clear(); Config::tagFileList.clear(); Config::genTagFile.resize(0); Config::allExtFlag = FALSE; @@ -1556,6 +1569,17 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; + t << "# Load stylesheet definitions from file. Syntax is similar to doxygen's \n"; + t << "# config file, i.e. a series of assigments. You only have to provide \n"; + t << "# replacements, missing definitions are set to their default value. \n"; + t << "\n"; + } + t << "RTF_STYLESHEET_FILE = "; + writeStringValue(t,Config::rtfStylesheetFile); + t << "\n"; + if (!sl) + { + t << "\n"; } t << "#---------------------------------------------------------------------------\n"; t << "# configuration options related to the man page output\n"; @@ -1614,7 +1638,8 @@ void writeTemplateConfig(QFile *f,bool sl) t << "\n"; t << "# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \n"; t << "# names in the source code. If set to NO (the default) only conditional \n"; - t << "# compilation will be performed. \n"; + t << "# compilation will be performed. Macro expansion can be done in a controlled \n"; + t << "# way by setting EXPAND_ONLY_PREDEF to YES. \n"; t << "\n"; } t << "MACRO_EXPANSION = "; @@ -1623,6 +1648,17 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; + t << "# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n"; + t << "# then the macro expansion is limited to the macros specified with the \n"; + t << "# PREDEFINED and EXPAND_AS_PREDEFINED tags. \n"; + t << "\n"; + } + t << "EXPAND_ONLY_PREDEF = "; + writeBoolValue(t,Config::onlyPredefinedFlag); + t << "\n"; + if (!sl) + { + t << "\n"; t << "# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \n"; t << "# in the INCLUDE_PATH (see below) will be search if a #include is found. \n"; t << "\n"; @@ -1657,13 +1693,14 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; - t << "# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n"; - t << "# then the macro expansion is limited to the macros specified with the \n"; - t << "# PREDEFINED tag. \n"; + t << "# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then \n"; + t << "# this tag can be used to specify a list of macro names that should be expanded. \n"; + t << "# The macro definition that is found in the sources will be used. \n"; + t << "# Use the PREDEFINED tag if you want to use a different macro definition. \n"; t << "\n"; } - t << "EXPAND_ONLY_PREDEF = "; - writeBoolValue(t,Config::onlyPredefinedFlag); + t << "EXPAND_AS_DEFINED = "; + writeStringList(t,Config::expandAsDefinedList); t << "\n"; if (!sl) { @@ -1942,6 +1979,56 @@ void configStrToVal() } Config::colsInAlphaIndex=cols; } + + if (maxDotGraphWidthString.isEmpty()) + { + Config::maxDotGraphWidth=1024; + } + else + { + bool ok; + int width =maxDotGraphWidthString.toInt(&ok); + if (!ok) + { + warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n" + "Using the default of 1024 pixels!\n"); + width=1024; + } + else if (width<250) // clip to lower bound + { + width=250; + } + else if (width>30000) // clip to upper bound + { + width=30000; + } + Config::maxDotGraphWidth=width; + } + + if (maxDotGraphHeightString.isEmpty()) + { + Config::maxDotGraphHeight=1024; + } + else + { + bool ok; + int height =maxDotGraphHeightString.toInt(&ok); + if (!ok) + { + warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n" + "Using the default of 1024 pixels!\n"); + height=1024; + } + else if (height<250) // clip to lower bound + { + height=250; + } + else if (height>30000) // clip to upper bound + { + height=30000; + } + Config::maxDotGraphHeight=height; + } } static void substEnvVarsInString(QCString &s) @@ -2073,10 +2160,12 @@ void substituteEnvironmentVars() substEnvVarsInStrList( Config::extraPackageList ); substEnvVarsInString( Config::latexHeaderFile ); substEnvVarsInString( Config::rtfOutputDir ); + substEnvVarsInString( Config::rtfStylesheetFile ); substEnvVarsInString( Config::manOutputDir ); substEnvVarsInString( Config::manExtension ); substEnvVarsInStrList( Config::includePath ); substEnvVarsInStrList( Config::predefined ); + substEnvVarsInStrList( Config::expandAsDefinedList ); substEnvVarsInStrList( Config::tagFileList ); substEnvVarsInString( Config::genTagFile ); substEnvVarsInString( Config::perlPath ); diff --git a/src/definition.cpp b/src/definition.cpp index 629a45a..1d663ab 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -143,7 +143,7 @@ static bool readCodeFragment(const char *fileName, { // skip until the opening bracket or lonely : is found bool found=FALSE; - char cn; + char cn=0; while (lineNr<=endLine && !f.atEnd() && !found) { while ((c=f.getch())!='{' && c!=':' && c!=-1) if (c=='\n') lineNr++; diff --git a/src/dot.cpp b/src/dot.cpp index a85e9bd..207aa38 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -996,7 +996,8 @@ static void findMaximalDotGraph(DotNode *root, readBoundingBoxDot(baseName+"_tmp.dot",&width,&height); width = width *96/72; // 96 pixels/inch, 72 points/inch height = height*96/72; // 96 pixels/inch, 72 points/inch - //printf("Found bounding box (%d,%d)\n",width,height); + //printf("Found bounding box (%d,%d) max (%d,%d)\n",width,height, + // Config::maxDotGraphWidth,Config::maxDotGraphHeight); lastFit=(width<Config::maxDotGraphWidth && height<Config::maxDotGraphHeight); if (lastFit) // image is small enough diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 39e5f8a..31e012b 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -81,10 +81,6 @@ MemberNameDict functionNameDict(10007); // all functions StringDict substituteDict(1009); // class name substitutes SectionDict sectionDict(257); // all page sections StringDict excludeNameDict(1009); // sections -//FileNameDict inputNameDict(1009); // sections -//FileNameDict includeNameDict(1009); // include names -//FileNameDict exampleNameDict(1009); // examples -//FileNameDict imageNameDict(257); // images FileNameDict *inputNameDict; // sections FileNameDict *includeNameDict; // include names FileNameDict *exampleNameDict; // examples @@ -96,6 +92,7 @@ FormulaDict formulaNameDict(1009); // the label name of all formulas StringDict tagDestinationDict(257); // all tag locations // a member group QDict<void> compoundKeywordDict(7); // keywords recognised as compounds +QDict<void> expandAsDefinedDict(257); // all macros that should be expanded OutputList *outputList = 0; // list of output generating objects PageInfo *mainPage = 0; @@ -906,6 +903,15 @@ static MemberDef *addVariableToClass( root->protection, fromAnnScope ); + + // class friends may be templatized + //QCString name=n; + //int i; + //if (root->type.left(7)=="friend " && (i=name.find('<'))!=-1) + //{ + // name=name.left(i); + //} + // add template names, if the class is a non-specialized template //if (scope.find('<')==-1 && cd->templateArguments()) //{ @@ -1332,7 +1338,7 @@ static void buildMemberList(Entry *root) ClassDef *cd=0; // check if this function's parent is a class - QRegExp re("([a-zA-Z0-9: ]*[ *]*[ ]*"); + QRegExp re("([a-z_A-Z0-9: ]*[ *]*[ ]*"); //printf("root->parent=`%s' cd=%p root->type.find(re,0)=%d\n", // root->parent->name.data(),getClass(root->parent->name), // root->type.find(re,0)); @@ -1896,7 +1902,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, templSpec=baseClassName.mid(i,e-i); baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e); baseClass=getResolvedClass(baseClassName); - //printf("baseClass=%p baseClass=%s templSpec=%s\n", + //printf("baseClass=%p -> baseClass=%s templSpec=%s\n", // baseClass,baseClassName.data(),templSpec.data()); } } @@ -2823,10 +2829,10 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl { Debug::print(Debug::FindMembers,0, "1. funcName=`%s'\n",funcName.data()); - //if (!funcTempList.isEmpty()) // try with member specialization - //{ - // mn=memberNameDict[funcName+funcTempList]; - //} + if (!funcTempList.isEmpty()) // try with member specialization + { + mn=memberNameDict[funcName+funcTempList]; + } if (mn==0) // try without specialization { mn=memberNameDict[funcName]; @@ -2978,15 +2984,39 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl "Warning: no matching class member found for \n %s", fullFuncDecl.data() ); + int candidates=0; if (mn->count()>0) { + md=mn->first(); + while (md) + { + ClassDef *cd=md->memberClass(); + if (cd!=0 && cd->name()==className) candidates++; + md=mn->next(); + } + } + if (candidates>0) + { warn_cont("Possible candidates:\n"); md=mn->first(); while (md) { ClassDef *cd=md->memberClass(); - if (!cd || cd->name()==className) - warn_cont(" %s\n",md->declaration()); + if (cd!=0 && cd->name()==className) + { + warn_cont(" %s",md->declaration()); +#if 0 + if (cd->name().at(0)!='@') + { + warn_cont(" in class %s",cd->name().data()); + } + if (!md->getDefFileName().isEmpty() && md->getDefLine()!=-1) + { + warn_cont(" defined at line %d of file %s",md->getDefLine(),md->getDefFileName().data()); + } +#endif + warn_cont("\n"); + } md=mn->next(); } } @@ -3207,7 +3237,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl static void findMemberDocumentation(Entry *root) { int i=-1,l; - QRegExp re("([a-zA-Z0-9: ]*\\*+[ \\*]*"); + QRegExp re("([a-z_A-Z0-9: ]*\\*+[ \\*]*"); Debug::print(Debug::FindMembers,0, "root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d root->mGrpId=%d\n", root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->memSpec,root->mGrpId @@ -4374,6 +4404,12 @@ static void generateGroupDocs() { //printf("group %s #members=%d\n",gd->name().data(),gd->countMembers()); if (gd->countMembers()>0) gd->writeDocumentation(*outputList); + else + { + warn(gd->getDefFileName(),gd->getDefLine(), + "Warning: group %s does not have any (documented) members.", + gd->name().data()); + } } } @@ -4540,7 +4576,8 @@ static void generateSearchIndex() if (f.open(IO_WriteOnly)) { QTextStream t(&f); - t << Config::docURL << endl << Config::cgiURL << "/" << Config::cgiName << endl; + t << Config::docURL << endl << Config::cgiURL + << "/" << Config::cgiName << endl; f.close(); } else @@ -5276,9 +5313,21 @@ int main(int argc,char **argv) &inputFiles,0); s=Config::inputSources.next(); } - //msg("Input size %d bytes\n",inputSize); + + // add predefined macro name to a dictionary + s=Config::expandAsDefinedList.first(); + while (s) + { + if (expandAsDefinedDict[s]==0) + { + expandAsDefinedDict.insert(s,(void *)666); + } + s=Config::expandAsDefinedList.next(); + } BufStr input(inputSize+1); // Add one byte extra for \0 termination + + // read and preprocess all input files readFiles(input); if (input.isEmpty()) @@ -5288,9 +5337,10 @@ int main(int argc,char **argv) } else { - msg("Read %d bytes\n",input.length()); + msg("Read %d bytes\n",input.curPos()); } + /************************************************************************** * Handle Tag Files * **************************************************************************/ diff --git a/src/doxygen.h b/src/doxygen.h index 87c4592..f48896c 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -126,6 +126,7 @@ extern PageInfo *mainPage; extern StringDict tagDestinationDict; extern QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading extern QIntDict<QCString> memberDocDict; // dictionary of the member groups heading +extern QDict<void> expandAsDefinedDict; extern int annotatedClasses; extern int hierarchyClasses; diff --git a/src/doxytag.l b/src/doxytag.l index 76772a7..001b756 100644 --- a/src/doxytag.l +++ b/src/doxytag.l @@ -203,7 +203,7 @@ QCString unhtmlify(const char *str) <Start>^"<h1 align=center>" { // Qt variant BEGIN( ReadClassName ); } -<Start>^"<h1>" { // Doxygen variant +<Start>^("<hr>")?"<h1>" { // Doxygen variant BEGIN( ReadClassName ); } <Start>^"Inherits " { @@ -223,7 +223,7 @@ QCString unhtmlify(const char *str) BEGIN( SkipHTMLTag ); } <Start>"&"[a-zA-Z]+";" -<Start>[a-z_A-Z][a-z_A-Z0-9]* { +<Start,SkipPreformated>[a-z_A-Z][a-z_A-Z0-9]* { //printf("tag: %s#%s ref: %s word: `%s'\n", // docBaseLink.data(),docAnchor.data(), // docRefName.data(),yytext); @@ -235,7 +235,7 @@ QCString unhtmlify(const char *str) <SkipPreformated>"</pre>" { BEGIN( Start ); } -<SkipPreformated>[^\<]+ +<SkipPreformated>[^\<\n]+ <CheckConstructor>[a-z_A-Z0-9~:]+ { QCString s=yytext; if (s.find("::")!=-1) diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 977e011..52abbff 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -80,7 +80,8 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external) "<title>" << title << "</title>\n"; t << "<link "; if (external) - t << "doxygen=\"_doc:\" href=\"/"; + t << "doxygen=\"_doc:" << Config::docURL + << "\" href=\"" << Config::docURL << "/"; else t << "href=\""; if (Config::htmlStyleSheet.isEmpty()) @@ -147,7 +148,8 @@ void HtmlGenerator::writeFooter(int part,bool external) t << endl << "<img "; if (external) { - t << "doxygen=\"_doc:\" src=\"/"; + t << "doxygen=\"_doc:" << Config::docURL + << "\" src=\"" << Config::docURL << "/"; } else { diff --git a/src/index.cpp b/src/index.cpp index 06ab9ac..aabdcdc 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -547,7 +547,7 @@ int countNamespaces() NamespaceDef *nd; for (;(nd=nli.current());++nli) { - if (nd->isLinkableInProject()) count++; + if (nd->isLinkableInProject() && nd->countMembers()>0) count++; } return count; } @@ -583,7 +583,7 @@ void writeNamespaceIndex(OutputList &ol) NamespaceDef *nd=namespaceList.first(); while (nd) { - if (nd->isLinkableInProject()) + if (nd->isLinkableInProject() && nd->countMembers()>0) { ol.writeStartAnnoItem("namespace",nd->getOutputFileBase(),0,nd->name()); ol.docify(" ("); @@ -1456,7 +1456,6 @@ int countGroups() for (;(gd=gli.current());++gli) { if (gd->countMembers()>0) count++; - gd=groupList.next(); } return count; } @@ -1513,7 +1512,6 @@ void writeGroupIndex(OutputList &ol) htmlHelp->incContentsDepth(); } parseText(ol,theTranslator->trModulesDescription()); - //ol.newParagraph(); ol.endTextBlock(); writeGroupList(ol); if (hasHtmlHelp) @@ -1521,7 +1519,6 @@ void writeGroupIndex(OutputList &ol) htmlHelp->decContentsDepth(); } endFile(ol); - //ol.enable(OutputGenerator::Man); ol.popGeneratorState(); } diff --git a/src/language.cpp b/src/language.cpp index 31e0e6e..27b6c7c 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -15,6 +15,7 @@ * */ +#include "message.h" #include "language.h" #if !defined(ENGLISH_ONLY) #include "translator_nl.h" @@ -51,6 +52,10 @@ bool setTranslator(const char *langName) } else if (L_EQUAL("czech")) { +#ifndef _WIN32 + err("Warning: The Czech translation uses the windows code page 1250 encoding.\n" + "Please convert translator_cz.h to ISO Latin-2 to use it under UNIX.\n"); +#endif theTranslator=new TranslatorCzech; } else if (L_EQUAL("french")) diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 192e6d4..f3d8110 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -216,17 +216,37 @@ void LatexGenerator::startIndexSection(IndexSections is) << " linkcolor=blue" << endl << " ]{hyperref}" << endl; } - if (!theTranslator->latexBabelPackage().isEmpty()) + // 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()=="russian") + 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"; + t << "\\usepackage[cp1251]{inputenc}\n"; #else - t << "\\usepackage[koi8-r]{inputenc}\n"; + t << "\\usepackage[koi8-r]{inputenc}\n"; #endif + } + t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n"; } - t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n"; } const char *s=Config::extraPackageList.first(); @@ -425,7 +445,7 @@ void LatexGenerator::endIndexSection(IndexSections is) bool found=FALSE; while (gd && !found) { - if (gd->isLinkableInProject() || gd->countMembers()>0) + if (gd->countMembers()>0) { t << "}\n\\input{" << gd->getOutputFileBase() << "}\n"; found=TRUE; @@ -434,7 +454,7 @@ void LatexGenerator::endIndexSection(IndexSections is) } while (gd) { - if (gd->isLinkableInProject() || gd->countMembers()>0) + if (gd->countMembers()>0) { if (Config::compactLatexFlag) t << "\\input"; else t << "\\include"; t << "{" << gd->getOutputFileBase() << "}\n"; @@ -602,14 +622,14 @@ void LatexGenerator::writeStyleInfo(int part) break; case 2: { - t << " Dimitri van Heesch (c) 1997-2000}]{}\n"; + t << " Dimitri van Heesch \\copyright{} 1997-2000}]{}\n"; //QCString dtString=dateToString(FALSE); t << "\\lfoot[]{\\fancyplain{}{\\bfseries\\scriptsize "; } break; case 4: { - t << " Dimitri van Heesch (c) 1997-2000}}\n"; + t << " Dimitri van Heesch \\copyright{} 1997-2000}}\n"; t << "\\cfoot{}\n"; t << "\\newenvironment{CompactList}\n"; t << "{\\begin{list}{}{\n"; @@ -812,7 +832,7 @@ void LatexGenerator::startPageRef() void LatexGenerator::endPageRef(const char *clname, const char *anchor) { - t << "~\\pageref{"; + t << "\\,\\pageref{"; if (clname) t << clname; if (anchor) t << "_" << anchor; t << "})}"; @@ -998,7 +1018,8 @@ void LatexGenerator::writeSectionRef(const char *,const char *lab, { if (strcmp(lab,text)!=0) // lab!=text { - t << "{\\bf " << text << " (\\ref " << lab << ")}}"; + // todo: don't hardcode p. here! + t << "{\\bf " << text << "} (p.\\,\\pageref{" << lab << "})"; } else { @@ -1022,7 +1043,7 @@ void LatexGenerator::writeSectionRefAnchor(const char *,const char *lab, startBold(); docify(title); endBold(); - t << " (p.~\\pageref{" << lab << "})" << endl; + t << " (p.\\,\\pageref{" << lab << "})" << endl; } //void LatexGenerator::docify(const char *str) @@ -1033,9 +1054,10 @@ void LatexGenerator::writeSectionRefAnchor(const char *,const char *lab, //void LatexGenerator::docifyStatic(QTextStream &t,const char *str) void LatexGenerator::docify(const char *str) { - static bool isJapanese = theTranslator->latexBabelPackage()=="a4j"; - static bool isRussian = theTranslator->latexBabelPackage()=="russian"; - static bool isGerman = theTranslator->latexBabelPackage()=="german"; + static bool isCzech = theTranslator->idLanguage()=="czech"; + static bool isJapanese = theTranslator->idLanguage()=="japanese"; + static bool isRussian = theTranslator->idLanguage()=="russian"; + static bool isGerman = theTranslator->idLanguage()=="german"; if (str) { const unsigned char *p=(const unsigned char *)str; diff --git a/src/memberdef.cpp b/src/memberdef.cpp index f08a858..2980a73 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -445,8 +445,9 @@ void MemberDef::setMemberDefTemplateArguments(ArgumentList *tal) void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,GroupDef *gd) { - Definition *d; + Definition *d=0; if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd; + if (d==0) return; ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),anchor(),name()); } @@ -758,6 +758,10 @@ Define *newDefine() def->fileName = g_yyFileName; def->lineNr = g_yyLineNr; def->varArgs = g_defVarArgs; + if (!def->name.isEmpty() && expandAsDefinedDict[def->name]) + { + def->isPredefined=TRUE; + } return def; } @@ -1505,7 +1509,8 @@ BN [ \t\r\n] { addDefine(); } - if (/*!Config::onlyPredefinedFlag &&*/ (def=g_fileDefineDict->find(g_defName))==0) + def=g_fileDefineDict->find(g_defName); + if (def==0) // new define { g_fileDefineDict->insert(g_defName,newDefine()); } diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 9ac69cf..c249539 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -4,6 +4,8 @@ * * Copyright (C) 1997-2000 by Parker Waechter & Dimitri van Heesch. * + * Style sheet additions by Alexander Bartolich + * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby * granted. No representations are made about the suitability of this software @@ -19,7 +21,7 @@ #include "qtbc.h" #include <qdir.h> -#include <qstack.h> +#include <qregexp.h> #include "rtfgen.h" #include "config.h" @@ -112,6 +114,277 @@ OutputGenerator *RTFGenerator::copy() return result; } +static const struct +{ + const char *name; + const char *value; +} Rtf_Style_Default[] = +{ + { "Reset", + "\\pard\\plain " + }, + { "Heading1", + "\\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid " + }, + { "Heading2", + "\\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid " + }, + { "Heading3", + "\\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid " + }, + { "Heading4", + "\\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid " + }, + { "Title", + "\\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid " + }, + { "SubTitle", + "\\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid " + }, + { "BodyText", + "\\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid " + }, + { "DenseText", + "\\s18\\widctlpar\\fs22\\cgrid " + }, + { "Header", + "\\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "Footer", + "\\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid " + }, + { "GroupHeader", + "\\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid " + }, + { "CodeExample0", + "\\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample1", + "\\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample2", + "\\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample3", + "\\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample4", + "\\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample5", + "\\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample6", + "\\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample7", + "\\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample8", + "\\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "CodeExample9", + "\\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " + }, + { "ListContinue0", + "\\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue1", + "\\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue2", + "\\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue3", + "\\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue4", + "\\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue5", + "\\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue6", + "\\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue7", + "\\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue8", + "\\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "ListContinue9", + "\\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " + }, + { "DescContinue0", + "\\s60\\li0\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue1", + "\\s61\\li360\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue2", + "\\s62\\li720\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue3", + "\\s63\\li1080\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue4", + "\\s64\\li1440\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue5", + "\\s65\\li1800\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue6", + "\\s66\\li2160\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue7", + "\\s67\\li2520\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue8", + "\\s68\\li2880\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "DescContinue9", + "\\s69\\li3240\\widctlpar\\ql\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC0", + "\\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC1", + "\\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC2", + "\\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC3", + "\\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC4", + "\\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC5", + "\\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC6", + "\\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC7", + "\\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC8", + "\\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "LatexTOC9", + "\\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " + }, + { "ListBullet0", + "\\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid " + }, + { "ListBullet1", + "\\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid " + }, + { "ListBullet2", + "\\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid " + }, + { "ListBullet3", + "\\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid " + }, + { "ListBullet4", + "\\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid " + }, + { "ListBullet5", + "\\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid " + }, + { "ListBullet6", + "\\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid " + }, + { "ListBullet7", + "\\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid " + }, + { "ListBullet8", + "\\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid " + }, + { "ListBullet9", + "\\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid " + }, + { "ListEnum0", + "\\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum1", + "\\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum2", + "\\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum3", + "\\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum4", + "\\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum4", + "\\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum5", + "\\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum6", + "\\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum7", + "\\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid " + }, + { "ListEnum8", + "\\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid " + }, + { 0, + 0 + } +}; + +static QDict<char> Rtf_Style(257); + +static void loadStylesheet(const char *name) +{ + QFile file(name); + if (!file.open(IO_ReadOnly)) + { + err("Can't open RTF style sheet file %s. Using defaults.\n",name); + return; + } + msg("Loading RTF style sheet %s...\n",name); + + static const QRegExp separator("[ \t]*=[ \t]*"); + uint lineNr=1; + QTextStream t(&file); + while (!t.eof()) + { + QCString s(4096); // string buffer of max line length + s = t.readLine().stripWhiteSpace(); + if (s.length()==0 || s.at(0)=='#') continue; // skip blanks & comments + int sepLength; + int sepStart = separator.match(s,0,&sepLength); + if (sepStart<=0) // no valid assignment statement + { + warn(name,lineNr,"Assignment of style sheet name expected!\n"); + continue; + } + QCString key=s.left(sepStart); + if (Rtf_Style[key]==0) // not a valid style sheet name + { + warn(name,lineNr,"Invalid style sheet name %s ignored.\n",key.data()); + continue; + } + s+=" "; // add command separator + Rtf_Style.remove(key); // remove old key + int l = strlen(s.data()+sepStart+sepLength); + char *value = new char[l+1]; + strcpy(value,s.data()+sepStart+sepLength); + Rtf_Style.insert(key,value); // insert new key + lineNr++; + } +} + + void RTFGenerator::init() { QCString dir=Config::rtfOutputDir; @@ -121,98 +394,31 @@ void RTFGenerator::init() err("Could not create output directory %s\n",dir.data()); exit(1); } + + Rtf_Style.setAutoDelete(TRUE); + int i=0; + while (Rtf_Style_Default[i].name!=0) + { + int l = strlen(Rtf_Style_Default[i].value); + char *value = new char[l+1]; + strcpy(value,Rtf_Style_Default[i].value); + Rtf_Style.insert(Rtf_Style_Default[i].name,value); + i++; + } + + if (!Config::rtfStylesheetFile.isEmpty()) + { + loadStylesheet(Config::rtfStylesheetFile); + } } -const char *Rtf_Style_Reset = "\\pard\\plain "; -const char *Rtf_Style_Heading1 = "\\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid "; -const char *Rtf_Style_Heading2 = "\\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid "; -const char *Rtf_Style_Heading3 = "\\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid "; -const char *Rtf_Style_Heading4 = "\\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid "; -const char *Rtf_Style_Title = "\\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid "; -const char *Rtf_Style_SubTitle = "\\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid "; -const char *Rtf_Style_BodyText = "\\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid "; -const char *Rtf_Style_DenseText = "\\s18\\widctlpar\\fs22\\cgrid "; -const char *Rtf_Style_Header = "\\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid "; -const char *Rtf_Style_Footer = "\\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid "; -const char *Rtf_Style_GroupHeader = "\\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid "; -const char *Rtf_Style_CodeExample[] = -{ - "\\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ", - "\\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid " -}; -const char *Rtf_Style_ListContinue[] = -{ - "\\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid " -}; -const char *Rtf_Style_DescContinue[] = -{ - "\\s60\\li0\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s61\\li360\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s62\\li720\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s63\\li1080\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s64\\li1440\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s65\\li1800\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s66\\li2160\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s67\\li2520\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s68\\li2880\\widctlpar\\qj\\adjustright \\fs20\\cgrid ", - "\\s69\\li3240\\widctlpar\\qj\\adjustright \\fs20\\cgrid " -}; -const char *Rtf_Style_LatexTOC[] = -{ - "\\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ", - "\\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid " -}; -const char *Rtf_Style_ListBullet[] = -{ - "\\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid ", - "\\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid ", - "\\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid ", - "\\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid ", - "\\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid ", - "\\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid ", - "\\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid ", - "\\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid ", - "\\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid ", - "\\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid " -}; -const char *Rtf_Style_ListEnum[] = -{ - "\\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid ", - "\\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid ", - "\\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid ", - "\\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid ", - "\\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid ", - "\\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid ", - "\\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid ", - "\\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid ", - "\\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid ", - "\\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid " -}; + +static QCString makeIndexName(const char *s,int i) +{ + QCString result=s; + result+=(char)(i+'0'); + return result; +} void RTFGenerator::beginRTFDocument() { @@ -251,47 +457,53 @@ void RTFGenerator::beginRTFDocument() 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"; - t <<"{" << Rtf_Style_Heading2 <<"\\sbasedon0 \\snext0 heading 2;}\n"; - t <<"{" << Rtf_Style_Heading3 <<"\\sbasedon0 \\snext0 heading 3;}\n"; - t <<"{" << Rtf_Style_Heading4 <<"\\sbasedon0 \\snext0 heading 4;}\n"; + t <<"{" << Rtf_Style["Heading1"] <<"\\sbasedon0 \\snext0 heading 1;}\n"; + t <<"{" << Rtf_Style["Heading2"] <<"\\sbasedon0 \\snext0 heading 2;}\n"; + t <<"{" << Rtf_Style["Heading3"] <<"\\sbasedon0 \\snext0 heading 3;}\n"; + t <<"{" << Rtf_Style["Heading4"] <<"\\sbasedon0 \\snext0 heading 4;}\n"; t <<"{\\*\\cs10 \\additive Default Paragraph Font;}\n"; - t <<"{" << Rtf_Style_Title << "\\sbasedon0 \\snext15 Title;}\n"; - t <<"{" << Rtf_Style_SubTitle << "\\sbasedon0 \\snext16 Subtitle;}\n"; - t <<"{" << Rtf_Style_BodyText << "\\sbasedon0 \\snext17 BodyText;}\n"; - t <<"{" << Rtf_Style_DenseText << "\\sbasedon0 \\snext18 DenseText;}\n"; - t <<"{" << Rtf_Style_Header << "\\sbasedon0 \\snext28 header;}\n"; - t <<"{" << Rtf_Style_Footer << "\\sbasedon0 \\snext29 footer;}\n"; - t <<"{" << Rtf_Style_GroupHeader << "\\sbasedon0 \\snext30 GroupHeader}\n"; + t <<"{" << Rtf_Style["Title"] << "\\sbasedon0 \\snext15 Title;}\n"; + t <<"{" << Rtf_Style["SubTitle"] << "\\sbasedon0 \\snext16 Subtitle;}\n"; + t <<"{" << Rtf_Style["BodyText"] << "\\sbasedon0 \\snext17 BodyText;}\n"; + t <<"{" << Rtf_Style["DenseText"] << "\\sbasedon0 \\snext18 DenseText;}\n"; + t <<"{" << Rtf_Style["Header"] << "\\sbasedon0 \\snext28 header;}\n"; + t <<"{" << Rtf_Style["Footer"] << "\\sbasedon0 \\snext29 footer;}\n"; + t <<"{" << Rtf_Style["GroupHeader"] << "\\sbasedon0 \\snext30 GroupHeader}\n"; for (i=0;i<indentLevels;i++) { - t <<"{" << Rtf_Style_CodeExample[i] <<"\\sbasedon0 \\snext4" + QCString n=makeIndexName("CodeExample",i); + t <<"{" << Rtf_Style[n] <<"\\sbasedon0 \\snext4" << (QMIN(i+1,indentLevels-1)) << " Code Example " << i << ";}\n"; } for (i=0;i<indentLevels;i++) { - t <<"{" << Rtf_Style_ListContinue[i] << "\\sbasedon0 \\snext5" + QCString n=makeIndexName("ListContinue",i); + t <<"{" << Rtf_Style[n] << "\\sbasedon0 \\snext5" << (QMIN(i+1,indentLevels-1)) << " List Continue " << i << ";}\n"; } for (i=0;i<indentLevels;i++) { - t <<"{" << Rtf_Style_DescContinue[i] << "\\sbasedon0 \\snext6" + QCString n=makeIndexName("DescContinue",i); + t <<"{" << Rtf_Style[n] << "\\sbasedon0 \\snext6" << (QMIN(i+1,indentLevels-1)) << " DescContinue " << i << ";}\n"; } for (i=0;i<indentLevels;i++) { - t <<"{" << Rtf_Style_LatexTOC[i] << "\\sbasedon50 \\snext7" + QCString n=makeIndexName("LatexTOC",i); + t <<"{" << Rtf_Style[n] << "\\sbasedon50 \\snext7" << (QMIN(i+1,indentLevels-1)) << " LatexTOC " << i << ";}\n"; } for (i=0;i<indentLevels;i++) { - t <<"{" << Rtf_Style_ListBullet[i] << "\\sbasedon0 \\snext8" + QCString n=makeIndexName("ListBullet",i); + t <<"{" << Rtf_Style[n] << "\\sbasedon0 \\snext8" << (QMIN(i+1,indentLevels-1)) << " \\sautoupd List Bullet " << i << ";}\n"; } for (i=0;i<indentLevels;i++) { - t <<"{" << Rtf_Style_ListEnum[i] << "\\sbasedon0 \\snext9" + QCString n=makeIndexName("ListEnum",i); + t <<"{" << Rtf_Style[n] << "\\sbasedon0 \\snext9" << (QMIN(i+1,indentLevels-1)) << " \\sautoupd List Enum " << i << ";}\n"; } t <<"}" << endl; @@ -301,7 +513,7 @@ void RTFGenerator::beginRTFDocument() void RTFGenerator::beginRTFChapter() { - t <<"\n{\\comment Begin Chapter}\n" << Rtf_Style_Reset; + t <<"\n{\\comment Begin Chapter}\n" << Rtf_Style["Reset"]; // if we are compact, no extra page breaks... if (Config::compactRTFFlag) @@ -314,12 +526,12 @@ void RTFGenerator::beginRTFChapter() t <<"\\sect\\sbkpage\n"; //t <<"\\sect\\sectd\\sbkpage\n"; - t << Rtf_Style_Heading1 << "\n"; + t << Rtf_Style["Heading1"] << "\n"; } void RTFGenerator::beginRTFSection() { - t <<"\n{\\comment Begin Section}\n" << Rtf_Style_Reset; + t <<"\n{\\comment Begin Section}\n" << Rtf_Style["Reset"]; // if we are compact, no extra page breaks... if (Config::compactRTFFlag) @@ -332,7 +544,7 @@ void RTFGenerator::beginRTFSection() t <<"\\sect\\sbkpage\n"; //t <<"\\sect\\sectd\\sbkpage\n"; - t << Rtf_Style_Heading2 << "\n"; + t << Rtf_Style["Heading2"] << "\n"; } void RTFGenerator::startFile(const char *name,const char *, bool ) @@ -509,14 +721,14 @@ void RTFGenerator::endIndexSection(IndexSections is) "}{\\comment end of infoblock}\n"; // setup for this section - t << Rtf_Style_Reset <<"\n"; + t << Rtf_Style["Reset"] <<"\n"; t <<"\\sectd\\pgnlcrm\n"; - t <<"{\\footer "<<Rtf_Style_Footer << "{\\chpgn}}\n"; + t <<"{\\footer "<<Rtf_Style["Footer"] << "{\\chpgn}}\n"; // the title entry t << "{\\comment begin title page}\n"; - t << Rtf_Style_Reset << Rtf_Style_Title << endl; // set to title style + 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 << 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; @@ -524,44 +736,44 @@ void RTFGenerator::endIndexSection(IndexSections is) // table of contents section t << "{\\comment Table of contents}\n"; - t << Rtf_Style_Reset << endl; + t << Rtf_Style["Reset"] << endl; t << "{\\field\\fldedit {\\*\\fldinst TOC \\\\f \\\\*MERGEFORMAT}{\\fldrslt Table of contents}}\\par\n"; - t << Rtf_Style_Reset << endl; + t << Rtf_Style["Reset"] << endl; } break; case isMainPage: - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\tc \\v " << theTranslator->trMainPage() << "}"<< endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"index.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; case isModuleIndex: - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\tc \\v " << theTranslator->trModuleIndex() << "}"<< endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"modules.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; case isNamespaceIndex: - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\tc \\v " << theTranslator->trNamespaceIndex() << "}"<< endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"namespaces.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; case isClassHierarchyIndex: - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\tc \\v " << theTranslator->trHierarchicalIndex() << "}"<< endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"hierarchy.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; case isCompoundIndex: - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\tc \\v " << theTranslator->trCompoundIndex() << "}"<< endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"annotated.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; case isFileIndex: - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\tc \\v " << theTranslator->trFileIndex() << "}"<< endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"files.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; case isPageIndex: - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\tc \\v " << theTranslator->trPageIndex() << "}"<< endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"pages.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; @@ -572,9 +784,9 @@ void RTFGenerator::endIndexSection(IndexSections is) t << "{\\tc \\v " << theTranslator->trModuleDocumentation() << "}"<< endl; while (gd && !found) { - if (gd->isLinkableInProject() || gd->countMembers()>0) + if (gd->countMembers()>0) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << gd->getOutputFileBase(); t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; @@ -585,9 +797,9 @@ void RTFGenerator::endIndexSection(IndexSections is) } while (gd) { - if (gd->isLinkableInProject() || gd->countMembers()>0) + if (gd->countMembers()>0) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; beginRTFSection(); t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << gd->getOutputFileBase(); @@ -605,7 +817,7 @@ void RTFGenerator::endIndexSection(IndexSections is) { if (nd->isLinkableInProject() || nd->countMembers()>0) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << nd->getOutputFileBase(); t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; @@ -617,7 +829,7 @@ void RTFGenerator::endIndexSection(IndexSections is) { if (nd->isLinkableInProject() || nd->countMembers()>0) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; beginRTFSection(); t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << nd->getOutputFileBase(); @@ -637,7 +849,7 @@ void RTFGenerator::endIndexSection(IndexSections is) { if (cd->isLinkableInProject()) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << cd->getOutputFileBase(); t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; @@ -649,7 +861,7 @@ void RTFGenerator::endIndexSection(IndexSections is) { if (cd->isLinkableInProject()) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; beginRTFSection(); t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << cd->getOutputFileBase(); @@ -674,7 +886,7 @@ void RTFGenerator::endIndexSection(IndexSections is) { if (isFirst) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << fd->getOutputFileBase(); t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; @@ -682,7 +894,7 @@ void RTFGenerator::endIndexSection(IndexSections is) } else { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; beginRTFSection(); t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << fd->getOutputFileBase(); @@ -702,7 +914,7 @@ void RTFGenerator::endIndexSection(IndexSections is) t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl; if (pi) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << convertSlashes(pi->name,TRUE); t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; @@ -710,7 +922,7 @@ void RTFGenerator::endIndexSection(IndexSections is) } while (pi) { - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; beginRTFSection(); t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << convertSlashes(pi->name,TRUE); @@ -730,7 +942,7 @@ void RTFGenerator::endIndexSection(IndexSections is) pageName=pi->name.copy(); else pageName=pi->name.lower(); - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << pageName; t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; @@ -743,7 +955,7 @@ void RTFGenerator::endIndexSection(IndexSections is) pageName=pi->name.copy(); else pageName=pi->name.lower(); - //t << "\\par " << Rtf_Style_Reset << endl; + //t << "\\par " << Rtf_Style["Reset"] << endl; //beginRTFSection(); t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << pageName; @@ -754,9 +966,9 @@ void RTFGenerator::endIndexSection(IndexSections is) break; case isEndIndex: beginRTFChapter(); - t << Rtf_Style_Heading1; + t << Rtf_Style["Heading1"]; t << "Index\\par "<< endl; - t << Rtf_Style_Reset<< endl; + t << Rtf_Style["Reset"] << endl; t << "{\\tc \\v Index}" << endl; t << "{\\field\\fldedit {\\*\\fldinst INDEX \\\\c2 \\\\*MERGEFORMAT}{\\fldrslt INDEX}}\n"; @@ -772,8 +984,8 @@ void RTFGenerator::lastIndexPage() t <<"\\sect \\sectd \\sbknone \\pgndec\n"; // set footer - t <<"{\\footer "<< Rtf_Style_Footer << "{\\chpgn}}\n"; - //t << Rtf_Style_Heading1 << "\n"; + t <<"{\\footer "<< Rtf_Style["Footer"] << "{\\chpgn}}\n"; + //t << Rtf_Style["Heading1"] << "\n"; } @@ -798,7 +1010,7 @@ void RTFGenerator::startIndexList() t << "{\\comment (startIndexList)}" << endl; t << "{" << endl; incrementIndentLevel(); - t << Rtf_Style_Reset << Rtf_LCList_DepthStyle() << endl; + t << Rtf_Style["Reset"] << Rtf_LCList_DepthStyle() << endl; newParagraph(); m_omitParagraph=TRUE; } @@ -819,7 +1031,7 @@ void RTFGenerator::startItemList() t << "{"; incrementIndentLevel(); listItemInfo[m_listLevel].isEnum = FALSE; - //t << Rtf_Style_Reset << Rtf_BList_DepthStyle(); + //t << Rtf_Style["Reset"] << Rtf_BList_DepthStyle(); } /*! end bullet list */ @@ -830,7 +1042,7 @@ void RTFGenerator::endItemList() t << "}"; decrementIndentLevel(); m_omitParagraph=TRUE; - //t << Rtf_Style_Reset << styleStack.top() << endl; + //t << Rtf_Style["Reset"] << styleStack.top() << endl; //printf("RTFGenerator::endItemList() `%s'\n",styleStack.top()); //newParagraph(); } @@ -843,7 +1055,7 @@ void RTFGenerator::startEnumList() // starts an enumeration list incrementIndentLevel(); listItemInfo[m_listLevel].isEnum = TRUE; listItemInfo[m_listLevel].number = 1; - //t << Rtf_Style_Reset << Rtf_EList_DepthStyle() << endl; + //t << Rtf_Style["Reset"] << Rtf_EList_DepthStyle() << endl; //newParagraph(); //m_omitParagraph=TRUE; @@ -864,7 +1076,7 @@ void RTFGenerator::writeListItem() { t << "{\\comment (writeListItem)}" << endl; newParagraph(); - t << Rtf_Style_Reset; + t << Rtf_Style["Reset"]; if (listItemInfo[m_listLevel].isEnum) { t << Rtf_EList_DepthStyle() << endl; @@ -980,14 +1192,14 @@ void RTFGenerator::writeEndAnnoItem(const char *name) void RTFGenerator::startSubsection() { //beginRTFSubSection(); - t <<"\n{\\comment Begin SubSection}\n" << Rtf_Style_Reset; - t << Rtf_Style_Heading3 << "\n"; + t <<"\n{\\comment Begin SubSection}\n" << Rtf_Style["Reset"]; + t << Rtf_Style["Heading3"] << "\n"; } void RTFGenerator::endSubsection() { newParagraph(); - t << Rtf_Style_Reset << endl; + t << Rtf_Style["Reset"] << endl; } void RTFGenerator::startSubsubsection() @@ -995,7 +1207,7 @@ void RTFGenerator::startSubsubsection() //beginRTFSubSubSection(); t << "\n{\\comment Begin SubSubSection}\n"; t << "{" << endl; - t << Rtf_Style_Reset << Rtf_Style_Heading4 << "\n"; + t << Rtf_Style["Reset"] << Rtf_Style["Heading4"] << "\n"; } void RTFGenerator::endSubsubsection() @@ -1135,13 +1347,13 @@ void RTFGenerator::startTitleHead(const char *) t <<"{\\comment startTitleHead}" << endl; // beginRTFSection(); - t << Rtf_Style_Reset << Rtf_Style_Heading2 << endl; + t << Rtf_Style["Reset"] << Rtf_Style["Heading2"] << endl; } void RTFGenerator::endTitleHead(const char *fileName,const char *name) { t <<"{\\comment endTitleHead}" << endl; - t << "\\par " << Rtf_Style_Reset << endl; + t << "\\par " << Rtf_Style["Reset"] << endl; if (name) { // make table of contents entry @@ -1177,8 +1389,8 @@ void RTFGenerator::startGroupHeader() { t <<"{\\comment startGroupHeader}" << endl; newParagraph(); - t << Rtf_Style_Reset; - t << Rtf_Style_Heading3; + t << Rtf_Style["Reset"]; + t << Rtf_Style["Heading3"]; t << endl; } @@ -1186,7 +1398,7 @@ void RTFGenerator::endGroupHeader() { t <<"{\\comment endGroupHeader}" << endl; newParagraph(); - t << Rtf_Style_Reset << endl; + t << Rtf_Style["Reset"] << endl; } void RTFGenerator::startMemberDoc(const char *clname, @@ -1200,11 +1412,10 @@ void RTFGenerator::startMemberDoc(const char *clname, addToIndex(memname,clname); addToIndex(clname,memname); } - //t << Rtf_Style_Reset << Rtf_Style_ListBullet1; - t << Rtf_Style_Reset << Rtf_Style_Heading4; + t << Rtf_Style["Reset"] << Rtf_Style["Heading4"]; //styleStack.push(Rtf_Style_Heading4); t << "{" << endl; - //printf("RTFGenerator::startMemberDoc() `%s'\n",Rtf_Style_Heading4); + //printf("RTFGenerator::startMemberDoc() `%s'\n",Rtf_Style["Heading4"]); startBold(); t << endl; } @@ -1215,7 +1426,7 @@ void RTFGenerator::endMemberDoc() t << "}" << endl; //const char *style = styleStack.pop(); //printf("RTFGenerator::endMemberDoc() `%s'\n",style); - //ASSERT(style==Rtf_Style_Heading4); + //ASSERT(style==Rtf_Style["Heading4"]); endBold(); newParagraph(); } @@ -1295,7 +1506,7 @@ void RTFGenerator::startIndent() incrementIndentLevel(); t << "{\\comment (startIndent) }" << endl; t << "{" << endl; - t << Rtf_Style_Reset << Rtf_CList_DepthStyle() << endl; + t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle() << endl; //styleStack.push(style); } @@ -1311,7 +1522,7 @@ void RTFGenerator::startDescription() { t << "{\\comment (startDescription)}" << endl; t << "{" << endl; - t << Rtf_Style_Reset << Rtf_CList_DepthStyle(); + t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle(); } void RTFGenerator::endDescription() @@ -1340,7 +1551,7 @@ void RTFGenerator::startMemberDescription() t << "{\\comment (startMemberDescription)}" << endl; t << "{" << endl; incrementIndentLevel(); - t << Rtf_Style_Reset << Rtf_CList_DepthStyle(); + t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle(); startEmphasis(); } @@ -1364,16 +1575,16 @@ void RTFGenerator::endDescTitle() { t << "{\\comment (endDescTitle) }" << endl; newParagraph(); - //t << Rtf_Style_Reset << styleStack.top(); + //t << Rtf_Style["Reset"] << styleStack.top(); incrementIndentLevel(); - t << Rtf_Style_Reset << Rtf_DList_DepthStyle(); + t << Rtf_Style["Reset"] << Rtf_DList_DepthStyle(); } void RTFGenerator::writeDescItem() { t << "{\\comment (writeDescItem) }" << endl; // incrementIndentLevel(); - //t << Rtf_Style_Reset << Rtf_CList_DepthStyle(); + //t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle(); } void RTFGenerator::endDescList() @@ -1383,18 +1594,18 @@ void RTFGenerator::endDescList() t << "}"; decrementIndentLevel(); m_omitParagraph = TRUE; - //t << Rtf_Style_Reset << styleStack.top() << endl; + //t << Rtf_Style["Reset"] << styleStack.top() << endl; } void RTFGenerator::writeSection(const char *lab,const char *title,bool sub) { t << "{\\comment (writeSection)}" << endl; t << "{"; - t<< Rtf_Style_Reset; + t<< Rtf_Style["Reset"]; if (sub) { // set style - t << Rtf_Style_Heading3; + t << Rtf_Style["Heading3"]; // make table of contents entry t << "{\\tc\\tcl3 \\v "; docify(title); @@ -1403,7 +1614,7 @@ void RTFGenerator::writeSection(const char *lab,const char *title,bool sub) else { // set style - t << Rtf_Style_Heading2; + t << Rtf_Style["Heading2"]; // make table of contents entry t << "{\\tc\\tcl2 \\v "; docify(title); @@ -1530,7 +1741,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d, // display the file t << "{" << endl; - t << Rtf_Style_Reset << endl; + t << Rtf_Style["Reset"] << endl; t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE "; t << fileName << ".gif"; t << " \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; @@ -1545,7 +1756,7 @@ void RTFGenerator::writeFormula(const char *,const char *text) void RTFGenerator::startMemberItem(int) { t <<"{\\comment startMemberItem }" << endl; - t << Rtf_Style_Reset << Rtf_BList_DepthStyle() << endl; // set style to apropriate depth + t << Rtf_Style["Reset"] << Rtf_BList_DepthStyle() << endl; // set style to apropriate depth } void RTFGenerator::endMemberItem(bool) @@ -1575,7 +1786,7 @@ void RTFGenerator::startCodeFragment() { t << "{" << endl; newParagraph(); - t << Rtf_Style_Reset << Rtf_Code_DepthStyle(); + t << Rtf_Style["Reset"] << Rtf_Code_DepthStyle(); //styleStack.push(Rtf_Style_CodeExample); } @@ -1584,7 +1795,7 @@ void RTFGenerator::endCodeFragment() newParagraph(); //styleStack.pop(); //printf("RTFGenerator::endCodeFrament() top=%s\n",styleStack.top()); - //t << Rtf_Style_Reset << styleStack.top() << endl; + //t << Rtf_Style["Reset"] << styleStack.top() << endl; t << "}" << endl; m_omitParagraph = TRUE; } @@ -1633,7 +1844,7 @@ void RTFGenerator::startDescTable() t << "{\\comment (startDescTable) }" << endl; t << "{" << endl; //incrementIndentLevel(); - //t << Rtf_Style_Reset << Rtf_CList_DepthStyle(); + //t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle(); } void RTFGenerator::endDescTable() @@ -1641,7 +1852,7 @@ void RTFGenerator::endDescTable() //decrementIndentLevel(); t << "{\\comment (endDescTable)}" << endl; t << "}" << endl; - //t << Rtf_Style_Reset << styleStack.top(); + //t << Rtf_Style["Reset"] << styleStack.top(); } void RTFGenerator::startDescTableTitle() @@ -1694,49 +1905,55 @@ void RTFGenerator::decrementIndentLevel() // a style for list formatted with "list continue" style const char * RTFGenerator::Rtf_CList_DepthStyle() { - return Rtf_Style_ListContinue[m_listLevel]; + QCString n=makeIndexName("ListContinue",m_listLevel); + return Rtf_Style[n]; } // a style for list formatted as a "latext style" table of contents const char * RTFGenerator::Rtf_LCList_DepthStyle() { - return Rtf_Style_LatexTOC[m_listLevel]; + QCString n=makeIndexName("LatexTOC",m_listLevel); + return Rtf_Style[n]; } // a style for list formatted as a "bullet" style const char * RTFGenerator::Rtf_BList_DepthStyle() { - return Rtf_Style_ListBullet[m_listLevel]; + QCString n=makeIndexName("ListBullet",m_listLevel); + return Rtf_Style[n]; } // a style for list formatted as a "enumeration" style const char * RTFGenerator::Rtf_EList_DepthStyle() { - return Rtf_Style_ListEnum[m_listLevel]; + QCString n=makeIndexName("ListEnum",m_listLevel); + return Rtf_Style[n]; } const char * RTFGenerator::Rtf_DList_DepthStyle() { - return Rtf_Style_DescContinue[m_listLevel]; + QCString n=makeIndexName("DescContinue",m_listLevel); + return Rtf_Style[n]; } const char * RTFGenerator::Rtf_Code_DepthStyle() { - return Rtf_Style_CodeExample[m_listLevel]; + QCString n=makeIndexName("CodeExample",m_listLevel); + return Rtf_Style[n]; } void RTFGenerator::startTextBlock(bool dense) { t << "{\\comment Start TextBlock}" << endl; t << "{" << endl; - t << Rtf_Style_Reset; + t << Rtf_Style["Reset"]; if (dense) // no spacing between "paragraphs" { - t << Rtf_Style_DenseText; + t << Rtf_Style["DenseText"]; } else // some spacing { - t << Rtf_Style_BodyText; + t << Rtf_Style["BodyText"]; } } @@ -1757,7 +1974,7 @@ void RTFGenerator::newParagraph() void RTFGenerator::startMemberSubtitle() { t << "{" << endl; - t << Rtf_Style_Reset << Rtf_CList_DepthStyle() << endl; + t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle() << endl; } void RTFGenerator::endMemberSubtitle() @@ -1953,7 +2170,7 @@ void RTFGenerator::endDotGraph(DotClassGraph &g) // display the file t << "{" << endl; - t << Rtf_Style_Reset << endl; + t << Rtf_Style["Reset"] << endl; t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE "; t << g.diskName() << ".gif"; t << " \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; @@ -1977,7 +2194,7 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g) // display the file t << "{" << endl; - t << Rtf_Style_Reset << endl; + t << Rtf_Style["Reset"] << endl; t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE "; t << g.diskName() << ".gif"; t << " \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; @@ -2037,14 +2254,14 @@ void RTFGenerator::startMemberGroupHeader(bool hasHeader) t << "{\\comment startMemberGroupHeader}" << endl; t << "{" << endl; if (hasHeader) incrementIndentLevel(); - t << Rtf_Style_Reset << Rtf_Style_GroupHeader; + t << Rtf_Style["Reset"] << Rtf_Style["GroupHeader"]; } void RTFGenerator::endMemberGroupHeader() { t << "{\\comment endMemberGroupHeader}" << endl; newParagraph(); - t << Rtf_Style_Reset << Rtf_CList_DepthStyle(); + t << Rtf_Style["Reset"] << Rtf_CList_DepthStyle(); } void RTFGenerator::startMemberGroupDocs() @@ -2063,7 +2280,7 @@ void RTFGenerator::endMemberGroupDocs() void RTFGenerator::startMemberGroup() { t << "{\\comment startMemberGroup}" << endl; - t << Rtf_Style_Reset << Rtf_BList_DepthStyle() << endl; + t << Rtf_Style["Reset"] << Rtf_BList_DepthStyle() << endl; } void RTFGenerator::endMemberGroup(bool hasHeader) diff --git a/src/scanner.l b/src/scanner.l index 7b098f8..5c97241 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -1758,12 +1758,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") { //outDoc->writeSectionRefAnchor(sec->fileName,sec->label,text); outDoc->writeObjectLink(0,sec->fileName,sec->label,text); - //printf("Writing page ref `%s'\n",sec->label.data()); writePageRef(*outDoc,sec->label,0); } else { - //printf(" ref sec=%p sec->fileName=%s\n",sec,sec->fileName.data()); + //printf(" ref sec=%p sec->fileName=%s text=%s\n",sec,sec->fileName.data(),text.data()); outDoc->writeSectionRef(sec->fileName,sec->label,text); } } @@ -3246,7 +3245,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") <MemberSpec>([*&]*{BN}*)*{ID}("["[a-z_A-Z0-9]*"]")* { // the [] part could be improved. lineCount(); int i=0,l=yyleng,j; - while (i<l && (!isalpha(yytext[i]))) i++; + while (i<l && (!isId(yytext[i]))) i++; msName = yytext; msName = msName.right(msName.length()-i); j=msName.find("["); @@ -3300,7 +3299,14 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") // current->parent->section & Entry::COMPOUND_MASK) // varEntry->type+=current->parent->name+"::"; if (isTypedef) + { varEntry->type.prepend("typedef "); + //printf("current->name = %s %s\n",current->name.data(),msName.data()); + if (!current->name.isEmpty() && current->name.at(0)!='@') + { + typedefDict.insert(msName,new QCString(current->name)); + } + } varEntry->type+=current->name+msType; varEntry->fileName = yyFileName; varEntry->startLine = yyLineNr; @@ -4671,12 +4677,12 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") <Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc>("\\\\"|"@@")"f"[$\[\]] { current->doc += &yytext[1]; } -<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc>{CMD}"f$" { +<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>{CMD}"f$" { lastFormulaContext = YY_START; formulaText="$"; BEGIN(ReadFormulaShort); } -<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc>{CMD}"f[" { +<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>{CMD}"f[" { lastFormulaContext = YY_START; formulaText="\\["; BEGIN(ReadFormulaLong); @@ -4685,7 +4691,9 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") formulaText+="$"; if (lastFormulaContext==ClassDocBrief || lastFormulaContext==LineDoc || - lastFormulaContext==JavaDoc + lastFormulaContext==JavaDoc || + lastFormulaContext==AfterDocBrief || + lastFormulaContext==AfterDocLine ) current->brief += addFormula(); else @@ -4696,7 +4704,9 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") formulaText+="\\]"; if (lastFormulaContext==ClassDocBrief || lastFormulaContext==LineDoc || - lastFormulaContext==JavaDoc + lastFormulaContext==JavaDoc || + lastFormulaContext==AfterDocBrief || + lastFormulaContext==AfterDocLine ) current->brief += addFormula(); else diff --git a/src/suffixtree.cpp b/src/suffixtree.cpp index 1befe25..ad0aebd 100644 --- a/src/suffixtree.cpp +++ b/src/suffixtree.cpp @@ -38,7 +38,7 @@ bool writeNumber(QFile &f,int num) (f.putch(num&0xff)==-1); } -bool writeEncodedNumber(QFile &f,uint number) +static bool writeEncodedNumber(QFile &f,uint number) { bool error=FALSE; uint n=number; @@ -52,7 +52,7 @@ bool writeEncodedNumber(QFile &f,uint number) return error; } -int encodedNumberSize(uint number) +static int encodedNumberSize(uint number) { uint n=number; int size=1; diff --git a/src/suffixtree.h b/src/suffixtree.h index 3e59193..a0b7434 100644 --- a/src/suffixtree.h +++ b/src/suffixtree.h @@ -29,10 +29,6 @@ class IndexTree; enum WordRefMasks { WORDINNAME_MASK=4, INNAME_MASK=2, FULLWORD_MASK=1 }; enum WordRefBits { WORDINNAME_BIT=2, INNAME_BIT=1, FULLWORD_BIT=0 }; -// bool inName; -// bool fullWord; -// bool wordInName; - struct WordRef { int id; @@ -77,7 +73,6 @@ class SuffixTree SuffixTree(); ~SuffixTree(); void insertWord(const char *word,int index,bool inName); - //void buildIndex(); void resolveForwardReferences(); void dump(); int size(); // return the size of the (flat) tree in bytes diff --git a/src/translator.h b/src/translator.h index 313b05e..6bc534d 100644 --- a/src/translator.h +++ b/src/translator.h @@ -25,38 +25,33 @@ class Translator { public: - //-------------------------------------------------------------------- - // NOTICE: - // the following functions are now obsolete: these are no longer used and - // will disappear in future versions. You do not have to translate them! - virtual QCString trInherits() - { return "Inherits"; } - virtual QCString trAnd() - { return "and"; } - virtual QCString trInheritedBy() - { return "Inherited By"; } - virtual QCString trReference() - { return "Reference"; } - virtual QCString trReimplementedFrom() - { return "Reimplemented from"; } - virtual QCString trReimplementedIn() - { return "Reimplemented in"; } - virtual QCString trIncludeFile() - { return "Include File"; } - virtual QCString trGeneratedFrom(const char *s,bool single) - { - QCString result=(QCString)"The documentation for this"+s+ - " was generated from the following file"; - if (single) result+=":"; else result+="s:"; - return result; - } - // end of obsolete functions - //-------------------------------------------------------------------- + // --- Language contol methods ------------------- + + /*! Used for identification of the language. May resemble + * the string returned by latexBabelPackage(), but it is not used + * for the same purpose. The identification should not be translated. + * It should be replaced by the name of the language in English + * (e.g. Czech, Japanese, Russian, etc.). It should be equal to + * the identification in language.h. + */ + virtual QCString idLanguage() + { return "english"; } + /*! Used to get the command(s) for the language support. This method + * was designed for languages which do not prefer babel package. + * If this methods returns empty string, then the latexBabelPackage() + * method is used to generate the command for using the babel package. + */ + virtual QCString latexLanguageSupportCommand() + { + return ""; + } /*! returns the name of the package that is included by LaTeX */ virtual QCString latexBabelPackage() { return ""; } + // --- Language translation methods ------------------- + /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() { return "Related Functions"; } diff --git a/src/translator_cz.h b/src/translator_cz.h index ffbcdc3..63edec7 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -27,249 +27,478 @@ // // havran@fel.cvut.cz, 1999/04/11 + +// 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. +// class TranslatorCzech : public Translator { public: - QCString latexBabelPackage() + virtual QCString idLanguage() { return "czech"; } - QCString trInherits() - { return "Dedi"; } - QCString trAnd() - { return "a"; } - QCString trInheritedBy() - { return "Je potomkem"; } - QCString trRelatedFunctions() - { return "Pribuzne metody"; } - QCString trRelatedSubscript() - { return "(Tyto funkce nejsou metody.)"; } - QCString trDetailedDescription() - { return "Podrobna dokumentace"; } - QCString trMemberTypedefDocumentation() - { return "Dokumentace pro deklaraci typu (typedef) ve tride";} - QCString trMemberEnumerationDocumentation() - { return "Dokumentace vyctovych typu"; } - QCString trEnumerationValueDocumentation() - { return "Dokumentace hodnot vyctovych typu"; } - QCString trMemberFunctionDocumentation() - { return "Dokumentace metod"; } - QCString trMemberDataDocumentation() - { return "Dokumentace datovych slozek tridy"; } - QCString trGeneratedFrom(const char *s,bool single) - { - QCString result=(QCString)"Dokumentace pro tento"+s+ - " byla generovana z nasledujiciho souboru"; - if (single) result+=":"; else result+="s:"; - return result; - } - QCString trMore() - { return "Detaily"; } - QCString trReference() - { return "Reference"; } - QCString trListOfAllMembers() - { return "Seznam vsech datovych polozek a metod tridy."; } - QCString trMemberList() - { return "Seznam datovych polozek a metod tridy"; } - QCString trThisIsTheListOfAllMembers() - { return "Toto je uplny seznam datovych polozek a metod tridy pro"; } - QCString trIncludingInheritedMembers() - { return "zahrnuje vsechny nasledujici zdedene datove polozky a metody."; } - QCString trGeneratedAutomatically(const char *s) - { QCString result="Automaticky vygenerovany pomoci programu doxygen"; - if (s) result+=(QCString)" pro "+s; - result+=" ze zdrojoveho souboru."; + + virtual QCString latexLanguageSupportCommand() + { return "\\usepackage{czech}\n"; } + + /*! returns the name of the package that is included by LaTeX */ + virtual QCString latexBabelPackage() + { return ""; } + + /*! used in the compound documentation before a list of related functions. */ + virtual QCString trRelatedFunctions() + { return "Související funkce"; } + + /*! subscript for the related functions. */ + virtual QCString trRelatedSubscript() + { return "(Výše 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"; } + + /*! header that is put before the list of typedefs. */ + virtual QCString trMemberTypedefDocumentation() + { return "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"; } + + /*! header that is put before the list of member functions. */ + virtual QCString trMemberFunctionDocumentation() + { return "Dokumentace k metodám"; } + + /*! header that is put before the list of member attributes. */ + virtual QCString trMemberDataDocumentation() + { return "Dokumentace k datovým členům"; } + + /*! this is the text of a link put after brief descriptions. */ + virtual QCString trMore() + { return "Podrobnosti..."; } + + /*! put in the class documentation */ + virtual QCString trListOfAllMembers() + { return "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"; } + + /*! this is the first part of a sentence that is followed by a class name */ + virtual QCString trThisIsTheListOfAllMembers() + { return "Ú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ů."; } + + /*! this is put at the author sections at the bottom of man pages. + * parameter s is name of the project name. + */ + virtual QCString trGeneratedAutomatically(const char *s) + { QCString result="Generováno automaticky programem Doxygen " + "ze zdrojových textů"; + if (s) result+=(QCString)" projektu "+s; + result+="."; return result; } - QCString trEnumName() - { return "pojmenovani vyctoveho typu"; } - QCString trEnumValue() - { return "hodnota vyctoveho typu"; } - QCString trDefinedIn() - { return "definovany v"; } - QCString trIncludeFile() - { return "Vklada soubor"; } - QCString trVerbatimText(const char *f) - { return (QCString)"Toto je presny text z vlozeneho souboru "+f+""; } - QCString trModules() + + /*! put after an enum name in the list of all members */ + virtual QCString trEnumName() + { return "jméno výčtu"; } + + /*! put after an enum value in the list of all members */ + virtual QCString trEnumValue() + { return "hodnota výčtu"; } + + /*! put after an undocumented member in the list of all members */ + virtual QCString trDefinedIn() + { return "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+"."; } + + // quick reference sections + + /*! This is put above each page as a link to the list of all groups of + * compounds or files (see the \group command). + */ + virtual QCString trModules() { return "Moduly"; } - QCString trClassHierarchy() - { return "Hierarchie trid"; } - QCString trCompoundList() - { return "Seznam objektovych typu"; } - QCString trFileList() - { return "Seznam souboru"; } - QCString trHeaderFiles() - { return "Hlavickove soubory"; } - QCString trCompoundMembers() - { return "Datove slozky a metody objektovych typu"; } - QCString trFileMembers() - { return "Globalni deklarace"; } - QCString trRelatedPages() - { return "Souvisejici stranky"; } - QCString trExamples() - { return "Priklady:"; } - QCString trSearch() - { return "Hledej"; } - QCString trClassHierarchyDescription() - { return "Tento seznam dedicnych zavislosti je temer setriden" - " podle abecedy:"; - } - QCString trFileListDescription(bool extractAll) - { - QCString result="A toto je seznam vsech "; - if (!extractAll) result+="zdokumentovanych "; - result+="souboru s kratkymi popisy:"; + + /*! This is put above each page as a link to the class hierarchy */ + virtual QCString trClassHierarchy() + { return "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"; } + + /*! This is put above each page as a link to the list of documented files */ + virtual QCString trFileList() + { return "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ů"; } + + /*! This is put above each page as a link to all members of compounds. */ + virtual QCString trCompoundMembers() + { return "Součásti složenin"; } + + /*! This is put above each page as a link to all members of files. */ + virtual QCString trFileMembers() + { return "Seznam globálních symbolů"; } + + /*! This is put above each page as a link to all related pages. */ + virtual QCString trRelatedPages() + { return "Související stránky"; } + + /*! This is put above each page as a link to all examples. */ + virtual QCString trExamples() + { return "Příklady"; } + + /*! This is put above each page as a link to the search engine. */ + virtual QCString trSearch() + { return "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:"; + } + + /*! This is an introduction to the list with all files. */ + virtual QCString trFileListDescription(bool extractAll) + { + QCString result="Zde naleznete seznam všech "; + if (!extractAll) result+="dokumentovaných "; + result+="souborů se stručnými popisy:"; return result; } - QCString trCompoundListDescription() - { return "Zde jsou tridy, struktury a " - "unie s kratkymi popisy:"; + + /*! 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:"; } - QCString trCompoundMembersDescription(bool extractAll) + + /*! This is an introduction to the page with all class members. */ + virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Zde je seznam vsech "; - if (!extractAll) result+="zdokumentovanych "; - result+="clenu tridy (metod a datovych slozek) s odkazy na "; - if (extractAll) result+="dokumentaci tridy pro kazdo polozku:"; - else result+="tridy, kam patri:"; + QCString result="Zde naleznete seznam všech "; + if (!extractAll) result+="dokumentovaných "; + result+="členů tříd s odkazy na "; + if (extractAll) + result+="dokumentaci tříd, ke kterým příslušejí:"; + else + result+="třídy, ke kterým příslušejí:"; return result; } - QCString trFileMembersDescription(bool extractAll) + + /*! This is an introduction to the page with all file members. */ + virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="Zde je seznam vsech "; - if (!extractAll) result+="zdokumentovanych "; - result+="globalnich deklaraci s odkazy "; - if (extractAll) result+="na dokumentaci k souboru pro kazdou deklaraci:"; - else result+="na soubory, kde jsou umisteny:"; + QCString result="Zde naleznete seznam všech "; + if (!extractAll) result+="dokumentovaných "; + result+="globálních symbolů, které jsou definovány v souborech projektu. " + "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, " + "proměnnou, konstantu, funkci, výčet, hodnotu výčtu a podobně:"; + return result; } - QCString trHeaderFilesDescription() - {return "Zde jsou hlavickove soubory ktere tvori programove" - " rozhrani aplikace(API):"; - } - QCString trExamplesDescription() - { return "Zde je seznam vsech prikladu:"; } - QCString trRelatedPagesDescription() - { return "Zde je seznam vsech souvisejicich stranek dokumentace:"; } - QCString trModulesDescription() - { return "Zde je seznam vsech modulu:"; } - QCString trNoDescriptionAvailable() - { return "Zadny popis neni k dispozici."; } - QCString trDocumentation() + /*! 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):"; } + + /*! This is an introduction to the page with the list of all examples */ + virtual QCString trExamplesDescription() + { return "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:"; } + + /*! This is an introduction to the page with the list of class/file groups */ + virtual QCString trModulesDescription() + { return "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"; } + + // 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"; } - QCString trModuleIndex() - { return "Index modulu"; } - QCString trHierarchicalIndex() - { return "Index hierarchie"; } - QCString trCompoundIndex() - { return "Index objektovych typu"; } - QCString trFileIndex() - { return "Index souboru"; } - QCString trModuleDocumentation() - { return "Dokumentace modulu"; } - QCString trClassDocumentation() - { return "Dokumentace tridy"; } - QCString trFileDocumentation() - { return "Dokumentace souboru"; } - QCString trExampleDocumentation() - { return "Dokumentace prikladu"; } - QCString trPageDocumentation() - { return "Dokumentace stranek"; } - QCString trReferenceManual() - { return "Referencni manual"; } - - QCString trDefines() - { return "Definice"; } - QCString trFuncProtos() - { return "Prototypy funkci"; } - QCString trTypedefs() - { return "Deklarace datovych typu(typedefs)"; } - QCString trEnumerations() - { return "Vyctove typy (enumerations)"; } - QCString trFunctions() + + /*! This is used in LaTeX as the title of the chapter with the + * index of all groups. + */ + virtual QCString trModuleIndex() + { return "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"; } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index. + */ + virtual QCString trCompoundIndex() + { return "Rejstřík složenin"; } + + /*! This is used in LaTeX as the title of the chapter with the + * list of all files. + */ + virtual QCString trFileIndex() + { return "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ů"; } + + /*! 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"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all files. + */ + virtual QCString trFileDocumentation() + { return "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ů"; } + + /*! 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"; } + + /*! This is used in LaTeX as the title of the document */ + virtual QCString trReferenceManual() + { return "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"; } + + /*! This is used in the documentation of a file as a header before the + * list of function prototypes + */ + virtual QCString trFuncProtos() + { return "Prototypy"; } + + /*! This is used in the documentation of a file as a header before the + * list of typedefs + */ + virtual QCString trTypedefs() + { return "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"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) functions + */ + virtual QCString trFunctions() { return "Funkce"; } - QCString trVariables() - { return "Promenne"; } - QCString trEnumerationValues() - { return "Hodnoty vyctovych typu"; } - QCString trReimplementedFrom() - { return "Je znovu implementovan podle"; } - QCString trReimplementedIn() - { return "Je znovu implementovan v"; } - QCString trAuthor() + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trVariables() + { return "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ů"; } + + /*! This is used in man pages as the author section. */ + virtual QCString trAuthor() { return "Autor"; } - QCString trDefineDocumentation() - { return "Dokumentace definic pomoci maker"; } - QCString trFunctionPrototypeDocumentation() - { return "Dokumentace prototypu funkci"; } - QCString trTypedefDocumentation() - { return "Dokumentace deklaraci datovych typu(typedefs)"; } - QCString trEnumerationTypeDocumentation() - { return "Dokumentace vyctovych typu"; } - QCString trFunctionDocumentation() - { return "Dokumentace funkci"; } - QCString trVariableDocumentation() - { return "Dokumentace promennych"; } - QCString trCompounds() - { return "Polozky objektovych typu"; } - QCString trFiles() - { return "Soubory:"; } - QCString trGeneratedAt(const char *date,const char *projName) + + /*! 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"; } + + /*! 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ů"; } + + /*! 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ů"; } + + /*! 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ů"; } + + /*! 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"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for functions + */ + virtual QCString trFunctionDocumentation() + { return "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"; } + + /*! 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"; } + + /*! This is used in the documentation of a group before the list of + * links to documented files + */ + virtual QCString trFiles() + { return "Soubory"; } + + /*! This is used in the standard footer of each page and indicates when + * the page was generated + */ + virtual QCString trGeneratedAt(const char *date,const char *projName) { - QCString result=(QCString)"Generovany dne "+date; - if (projName) result+=(QCString)" pro "+projName; - result+=(QCString)" "; + QCString result=(QCString)"Generováno "+date; + if (projName) result+=(QCString)" pro projekt "+projName; + result+=(QCString)" programem"; return result; } - QCString trWrittenBy() - { - return "napsany podle"; - } - QCString trClassDiagram(const char *clName) + /*! This is part of the sentence used in the standard footer of each page. + */ + virtual QCString trWrittenBy() { - return (QCString)"Diagram trid pro "+clName; + return " -- autor "; } - QCString trForInternalUseOnly() - { return "Jen pro interni pouziti."; } - QCString trReimplementedForInternalReasons() + + /*! this text is put before a class diagram */ + virtual QCString trClassDiagram(const char *clName) { - return "Znovu implementovany z internich duvodu; programove rozhrani" - " aplikace(API) neni zmeneno."; + return (QCString)"Diagram dědičnosti pro třídu "+clName; } - QCString trWarning() - { return "Upozorneni"; } - QCString trBugsAndLimitations() - { return "Chyby a omezeni"; } - QCString trVersion() + + /*! this text is generated when the \internal command is used. */ + virtual QCString trForInternalUseOnly() + { return "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."; } + + /*! this text is generated when the \warning command is used. */ + virtual QCString trWarning() + { return "Pozor"; } + + /*! this text is generated when the \bug command is used. */ + virtual QCString trBugsAndLimitations() + { return "Chyby a omezení"; } + + /*! this text is generated when the \version command is used. */ + virtual QCString trVersion() { return "Verze"; } - QCString trDate() + + /*! this text is generated when the \date command is used. */ + virtual QCString trDate() { return "Datum"; } - QCString trAuthors() - { return "Autor(i)"; } - QCString trReturns() - { return "ma navratovou hodnotu"; } - QCString trSeeAlso() - { return "Podrobnosti take tady"; } - QCString trParameters() + + /*! this text is generated when the \author command is used. */ + virtual QCString trAuthors() + { return "Autor/autoři"; } + + /*! this text is generated when the \return command is used. */ + virtual QCString trReturns() + { return "Vrací"; } + + /*! this text is generated when the \sa command is used. */ + virtual QCString trSeeAlso() + { return "Viz také"; } + + /*! this text is generated when the \param command is used. */ + virtual QCString trParameters() { return "Parametry"; } - QCString trExceptions() - { return "Vyjimky"; } - QCString trGeneratedBy() - { return "Generovan podle"; } + + /*! this text is generated when the \exception command is used. */ + virtual QCString trExceptions() + { return "Výjimky"; } - // new since 0.49-990307 + /*! this text is used in the title page of a LaTeX document. */ + virtual QCString trGeneratedBy() + { return "Generováno programem"; } + + // new since 0.49-990307 - QCString trNamespaceList() - { return "Seznam prostoru jmen"; } - QCString trNamespaceListDescription(bool extractAll) + /*! used as the title of page containing all the index of all namespaces. */ + virtual QCString trNamespaceList() + { return "Seznam prostorů jmen"; } + + /*! used as an introduction to the namespace list */ + virtual QCString trNamespaceListDescription(bool extractAll) { - QCString result="Zde je seznam vsech "; - if (!extractAll) result+="dokumentovanych "; - result+="prostoru jmen s kratkymi popisy:"; + QCString result="Zde naleznete seznam všech "; + if (!extractAll) result+="dokumentovaných "; + result+="prostorů jmen se stručným popisem:"; return result; } - QCString trFriends() - { return "Spratelene tridy, funkce a metody"; } + + /*! used in the class documentation as a header before the list of all + * friends of a class + */ + virtual QCString trFriends() + { return "Friends"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 @@ -278,76 +507,75 @@ class TranslatorCzech : public Translator /*! used in the class documentation as a header before the list of all * related classes */ - QCString trRelatedFunctionDocumentation() - { return "Dokumentace pro spratelene funkce a ostatni"; } + virtual QCString trRelatedFunctionDocumentation() + { return "Dokumentace k friends"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 ////////////////////////////////////////////////////////////////////////// /*! used as the title of the HTML page of a class/struct/union */ - QCString trCompoundReference(const char *clName, - ClassDef::CompoundType compType, - bool /*isTemplate*/) + virtual QCString trCompoundReference(const char *clName, + ClassDef::CompoundType compType) { QCString result=(QCString)clName+" "; - result+=" Reference"; switch(compType) { - case ClassDef::Class: result+=" tridy"; break; - case ClassDef::Struct: result+=" struktury"; break; - case ClassDef::Union: result+=" unie"; break; - case ClassDef::Interface: result+=" rozhrani"; break; - case ClassDef::Exception: result+=" exception"; break; + 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; } + result+=" Reference"; return result; } /*! used as the title of the HTML page of a file */ - QCString trFileReference(const char *fileName) + virtual QCString trFileReference(const char *fileName) { - QCString result=fileName; - result+=" Reference souboru"; + QCString result="Odkaz na soubor"; + result+=fileName; return result; } /*! used as the title of the HTML page of a namespace */ - QCString trNamespaceReference(const char *namespaceName) + virtual QCString trNamespaceReference(const char *namespaceName) { QCString result=namespaceName; - result+=" Reference prostoru jmen"; + result+=" Namespace Reference???"; return result; } /*! \mgroup Class sections * these are for the member sections of a class, struct or union */ - QCString trPublicMembers() - { return "Verejne metody a datove polozky"; } - QCString trPublicSlots() - { return "Verejne sloty"; } - QCString trSignals() - { return "Signaly"; } - QCString trStaticPublicMembers() - { return "Staticke verejne metody a datove polozky"; } - QCString trProtectedMembers() - { return "Chranene metody a datove polozky"; } - QCString trProtectedSlots() - { return "Chranene sloty"; } - QCString trStaticProtectedMembers() - { return "Staticke chranene metody a datove polozky"; } - QCString trPrivateMembers() - { return "Privatni metody a datove polozky"; } - QCString trPrivateSlots() - { return "Privatni sloty"; } - QCString trStaticPrivateMembers() - { return "Staticke privatni metody a datove polozky"; } + virtual QCString trPublicMembers() + { return "Veřejné metody"; } + virtual QCString trPublicSlots() + { return "Veřejné sloty"; } + virtual QCString trSignals() + { return "Signály"; } + virtual QCString trStaticPublicMembers() + { return "Statické veřejné metody"; } + virtual QCString trProtectedMembers() + { return "Chráněné metody"; } + virtual QCString trProtectedSlots() + { return "Chráněné sloty"; } + virtual QCString trStaticProtectedMembers() + { return "Statické chráněné metody"; } + virtual QCString trPrivateMembers() + { return "Privátní metody"; } + virtual QCString trPrivateSlots() + { return "Privátní sloty"; } + virtual QCString trStaticPrivateMembers() + { return "Statické privátní metody"; } /*! \endmgroup */ /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. */ - QCString trWriteList(int numEntries) + virtual QCString trWriteList(int numEntries) { QCString result; int i; @@ -372,62 +600,62 @@ class TranslatorCzech : public Translator /*! used in class documentation to produce a list of base classes, * if class diagrams are disabled. */ - QCString trInheritsList(int numEntries) + virtual QCString trInheritsList(int numEntries) { - return "dedi "+trWriteList(numEntries)+"."; + return "Dědí "+trWriteList(numEntries)+"."; } /*! used in class documentation to produce a list of super classes, * if class diagrams are disabled. */ - QCString trInheritedByList(int numEntries) + virtual QCString trInheritedByList(int numEntries) { - return "je zdeden z "+trWriteList(numEntries)+"."; + return "Zděděna třídami "+trWriteList(numEntries)+"."; } /*! used in member documentation blocks to produce a list of * members that are hidden by this one. */ - QCString trReimplementedFromList(int numEntries) + virtual QCString trReimplementedFromList(int numEntries) { - return "Znovu implementuje "+trWriteList(numEntries)+"."; + return "Reimplementace z "+trWriteList(numEntries)+"."; } /*! used in member documentation blocks to produce a list of * all member that overwrite the implementation of this member. */ - QCString trReimplementedInList(int numEntries) + virtual QCString trReimplementedInList(int numEntries) { - return "znovu implementovan v "+trWriteList(numEntries)+"."; + return "Reimplementováno v "+trWriteList(numEntries)+"."; } /*! This is put above each page as a link to all members of namespaces. */ - QCString trNamespaceMembers() - { return "Polozky prostoru jmen"; } + virtual QCString trNamespaceMembers() + { return "???Namespace Members"; } /*! This is an introduction to the page with all namespace members */ - QCString trNamespaceMemberDescription(bool extractAll) + virtual QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="Tady je seznam vsech "; - if (!extractAll) result+="zdokumentovanych "; - result+="clenu prostoru jmen s odkazy na "; + QCString result="Zde naleznete seznam všech "; + if (!extractAll) result+="dokumentovaných "; + result+="???namespace members s odkazy na "; if (extractAll) - result+="dukumentaci prostoru jmen pro kazdou polozku:"; + result+="dokumentaci prostoru jmen pro každý člen:"; else - result+="prostor jmen, kteremu patri:"; + result+="prostory jmen, ke kterým příslušejí:"; return result; } /*! This is used in LaTeX as the title of the chapter with the * index of all namespaces. */ - QCString trNamespaceIndex() - { return "Index prostoru jmen"; } + virtual QCString trNamespaceIndex() + { return "Rejstřík prostorů jmen"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all namespaces. */ - QCString trNamespaceDocumentation() - { return "Dokumentace prostoru jmen"; } + virtual QCString trNamespaceDocumentation() + { return "Dokumentace prostorů jmen"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 @@ -436,7 +664,7 @@ class TranslatorCzech : public Translator /*! This is used in the documentation before the list of all * namespaces in a file. */ - QCString trNamespaces() + virtual QCString trNamespaces() { return "Prostory jmen"; } ////////////////////////////////////////////////////////////////////////// @@ -446,48 +674,49 @@ class TranslatorCzech : public Translator /*! This is put at the bottom of a class documentation page and is * followed by a list of files that were used to generate the page. */ - QCString trGeneratedFromFiles(ClassDef::CompoundType compType, + virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file QCString result=(QCString)"Dokumentace pro "; switch(compType) { - case ClassDef::Class: result+="tuto tridu"; break; - case ClassDef::Struct: result+="tuto strukturu"; break; - case ClassDef::Union: result+="tuto unii"; break; - case ClassDef::Interface: result+="toto rozhrani"; break; - case ClassDef::Exception: result+="exception"; break; + case ClassDef::Class: result+="tuto třídu"; break; + case ClassDef::Struct: result+="tuto strukturu (struct)"; break; + case ClassDef::Union: result+="tuto unii (union)"; break; + case ClassDef::Interface: result+="toto rozhraní"; break; + case ClassDef::Exception: result+="tuto výjimku"; break; } - result+=" byla vygenerovana z nasledujiciho souboru"; - if (single) result+=":"; else result+="s:"; + result+=" byla generována z "; + if (single) result+="následujícího souboru:"; + else result+="následujících souborů:"; return result; } /*! This is in the (quick) index as a link to the alphabetical compound * list. */ - QCString trAlphabeticalList() - { return "Abecedni seznam"; } + virtual QCString trAlphabeticalList() + { return "Abecední seznam složenin"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 ////////////////////////////////////////////////////////////////////////// /*! This is used as the heading text for the retval command. */ - QCString trReturnValues() - { return "Vraci hodnoty"; } + virtual QCString trReturnValues() + { return "Vracené hodnoty"; } /*! This is in the (quick) index as a link to the main page (index.html) */ - QCString trMainPage() - { return "Hlavni stranka"; } + virtual QCString trMainPage() + { return "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. */ - QCString trPageAbbreviation() - { return "str."; } + virtual QCString trPageAbbreviation() + { return "s."; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-991003 @@ -495,16 +724,157 @@ class TranslatorCzech : public Translator virtual QCString trSources() { - return "Zdrojove soubory"; + return "Zdroje"; } virtual QCString trDefinedAtLineInSourceFile() { - return "Definice v souboru @1 na radce @0"; + return "Definice je uvedena na řádku @0 v souboru @1."; } virtual QCString trDefinedInSourceFile() { return "Definice v souboru @0."; - } + } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-991205 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trDeprecated() + { + return "Zastaralé"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.0.0 +////////////////////////////////////////////////////////////////////////// + + /*! this text is put before a collaboration diagram */ + virtual QCString trCollaborationDiagram(const char *clName) + { + return (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+":"; + } + /*! header that is put before the list of constructor/destructors. */ + virtual QCString trConstructorDocumentation() + { + return "Dokumentace konstruktoru a destruktoru"; + } + /*! Used in the file documentation to point to the corresponding sources. */ + virtual QCString trGotoSourceCode() + { + return "Zobrazit zdrojový text tohoto souboru."; + } + /*! Used in the file sources to point to the corresponding documentation. */ + virtual QCString trGotoDocumentation() + { + return "Zobrazit dokumentaci tohoto souboru."; + } + /*! Text for the \pre command */ + virtual QCString trPrecondition() + { + return "Precondition"; + } + /*! Text for the \post command */ + virtual QCString trPostcondition() + { + return "Postcondition"; + } + /*! Text for the \invariant command */ + virtual QCString trInvariant() + { + return "Invariant"; + } + /*! Text shown before a multi-line variable/enum initialization */ + virtual QCString trInitialValue() + { + return "Initializer:"; + } + /*! Text used the source code in the file index */ + virtual QCString trCode() + { + return "zdrojový text"; + } + virtual QCString trGraphicalHierarchy() + { + return "Grafické zobrazení hierarchie tříd"; + } + virtual QCString trGotoGraphicalHierarchy() + { + return "Zobrazit grafickou podobu hierarchie tříd"; + } + virtual QCString trGotoTextualHierarchy() + { + return "Zobrazit textovou podobu hierarchie tříd"; + } + virtual QCString trPageIndex() + { + return "Rejstřík stránek"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.0 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trNote() + { + return "Poznámka"; + } + virtual QCString trPublicTypes() + { + return "Veřejné typy"; + } + virtual QCString trPublicAttribs() + { + return "Veřejné atributy"; + } + virtual QCString trStaticPublicAttribs() + { + return "Statické veřejné atributy"; + } + virtual QCString trProtectedTypes() + { + return "Chráněné typy"; + } + virtual QCString trProtectedAttribs() + { + return "Chráněné atributy"; + } + virtual QCString trStaticProtectedAttribs() + { + return "Statické chráněné atributy"; + } + virtual QCString trPrivateTypes() + { + return "Privátní typy"; + } + virtual QCString trPrivateAttribs() + { + return "Privátní atributy"; + } + virtual QCString trStaticPrivateAttribs() + { + return "Statické privátní atributy"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.3 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a todo item */ + virtual QCString trTodo() + { + return "Udělat"; + } + /*! Used as the header of the todo list */ + virtual QCString trTodoList() + { + return "Seznam plánovaných úprav"; + } + }; #endif // TRANSLATOR_CZ_H diff --git a/src/translator_de.h b/src/translator_de.h index faaf665..4f8ddf2 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -25,26 +25,8 @@ class TranslatorGerman : public Translator { public: - //-------------------------------------------------------------------- - // NOTICE: - // the following functions are now obsolete: these are no longer used and - // will disappear in future versions. You do not have to translate them! - QCString trInherits() - { return "Abgeleitet von "; } - QCString trAnd() - { return "und"; } - QCString trInheritedBy() - { return "Basisklasse für"; } - QCString trReference() - { return "Verweis"; } - QCString trReimplementedFrom() - { return "Implementiert von"; } - QCString trReimplementedIn() - { return "erneute Implementation in"; } - QCString trIncludeFile() - { return "Include-Datei"; } - // end of obsolete functions - //-------------------------------------------------------------------- + QCString idLanguage() + { return "german"; } QCString latexBabelPackage() // returns the name of the package that is included by LaTeX diff --git a/src/translator_es.h b/src/translator_es.h index a60a5ab..92466f5 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -30,34 +30,8 @@ class TranslatorSpanish : public Translator { public: - //-------------------------------------------------------------------- - // NOTICE: - // the following functions are now obsolete: these are no longer used and - // will disappear in future versions. You do not have to translate them! - virtual QCString trInherits() - { return "Inherits"; } - virtual QCString trAnd() - { return "y"; } - virtual QCString trInheritedBy() - { return "Inherited By"; } - virtual QCString trReference() - { return "Referencia"; } - virtual QCString trReimplementedFrom() - { return "Reimplementado de"; } - virtual QCString trReimplementedIn() - { return "Reimplementado en"; } - virtual QCString trIncludeFile() - { return "Include File"; } - virtual QCString trGeneratedFrom(const char *s,bool single) - { - QCString result=(QCString)"The documentation for this"+s+ - " was generated from the following file"; - if (single) result+=":"; else result+="s:"; - return result; - } - // end of obsolete functions - //-------------------------------------------------------------------- - + virtual QCString idLanguage() + { return "spanish"; } /*! returns the name of the package that is included by LaTeX */ virtual QCString latexBabelPackage() { return ""; } diff --git a/src/translator_fi.h b/src/translator_fi.h index d85d0c0..504008f 100644 --- a/src/translator_fi.h +++ b/src/translator_fi.h @@ -79,6 +79,8 @@ positiiviset kommentit otetaan ilolla vastaan. class TranslatorFinnish : public Translator { public: + QCString idLanguage() + { return "finnish"; } QCString latexBabelPackage() // returns the name of the package that is included by LaTeX { return "finnish"; } diff --git a/src/translator_fr.h b/src/translator_fr.h index c7c5636..c7d9486 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -25,6 +25,8 @@ class TranslatorFrench : public Translator { public: + QCString idLanguage() + { return "french"; } /*! returns the name of the package that is included by LaTeX */ QCString latexBabelPackage() { return "french"; } diff --git a/src/translator_hr.h b/src/translator_hr.h index 66ce398..40e5733 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -23,6 +23,8 @@ class TranslatorCroatian : public Translator { public: + QCString idLanguage() + { return "croatian"; } QCString latexBabelPackage() { return "croatian"; } QCString trRelatedFunctions() diff --git a/src/translator_it.h b/src/translator_it.h index f032b52..23e7ce1 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -33,34 +33,8 @@ class TranslatorItalian : public Translator { public: - //-------------------------------------------------------------------- - // NOTICE: - // the following functions are now obsolete: these are no longer used and - // will disappear in future versions. You do not have to translate them! - QCString trInherits() - { return "Inherits"; } - QCString trAnd() - { return "and"; } - QCString trInheritedBy() - { return "Inherited By"; } - QCString trReference() - { return "Reference"; } - QCString trReimplementedFrom() - { return "Reimplemented from"; } - QCString trReimplementedIn() - { return "Reimplemented in"; } - QCString trIncludeFile() - { return "Include File"; } - QCString trGeneratedFrom(const char *s,bool single) - { - QCString result=(QCString)"The documentation for this"+s+ - " was generated from the following file"; - if (single) result+=":"; else result+="s:"; - return result; - } - // end of obsolete functions - //-------------------------------------------------------------------- - + QCString idLanguage() + { return "italian"; } /*! returns the name of the package that is included by LaTeX */ QCString latexBabelPackage() { return "italian"; } diff --git a/src/translator_jp.h b/src/translator_jp.h index 38c8670..650dc5d 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -23,33 +23,8 @@ class TranslatorJapanese : public Translator { public: - //-------------------------------------------------------------------- - // NOTICE: - // the following functions are now obsolete: these are no longer used and - // will disappear in future versions. You do not have to translate them! - QCString trInherits() - { return "·Ńľµ"; } - QCString trAnd() - { return "¤Č"; } - QCString trInheritedBy() - { return "Ľˇ¤Ë·Ńľµ¤µ¤ě¤Ć¤¤¤Ţ¤ąˇŁ"; } - QCString trReference() - { return "ĄęĄŐĄˇĄěĄóĄą"; } - QCString trReimplementedFrom() - { return "Ľˇ¤ňşĆÄęµÁ"; } - QCString trReimplementedIn() - { return "Ľˇ¤ÇşĆÄęµÁ"; } - QCString trIncludeFile() - { return "Ą¤ĄóĄŻĄëˇĽĄÉĄŐĄˇĄ¤Ąë"; } - QCString trGeneratedFrom(const char *s,bool) - { - QCString result=(QCString)"¤ł¤Î"+s+ - "¤ËÂФą¤ëĄÉĄĄĺĄáĄóĄČ¤Ď°Ę˛Ľ¤ÎĄŐĄˇĄ¤Ąë¤«¤éŔ¸Ŕ®¤µ¤ě¤Ţ¤·¤żˇŁ"; - return result; - } - // end of obsolete functions - //-------------------------------------------------------------------- - + QCString idLanguage() + { return "japanese"; } /*! returns the name of the package that is included by LaTeX */ QCString latexBabelPackage() { return "a4j"; } diff --git a/src/translator_nl.h b/src/translator_nl.h index e2de0fc..99812f2 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -23,6 +23,8 @@ class TranslatorDutch : public Translator { public: + QCString idLanguage() + { return "dutch"; } QCString latexBabelPackage() { return "dutch"; } QCString trRelatedFunctions() diff --git a/src/translator_ru.h b/src/translator_ru.h index 7f509be..84fc1b9 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -22,6 +22,8 @@ class TranslatorRussian : public Translator { public: + QCString idLanguage() + { return "russian"; } QCString latexBabelPackage() { return "russian"; } QCString trRelatedFunctions() diff --git a/src/translator_se.h b/src/translator_se.h index afeea50..92f2461 100644 --- a/src/translator_se.h +++ b/src/translator_se.h @@ -67,6 +67,8 @@ Problem! class TranslatorSwedish : public Translator { public: + QCString idLanguage() + { return "swedish"; } QCString latexBabelPackage() { return "swedish"; } diff --git a/src/util.cpp b/src/util.cpp index 9643a7d..f9ab566 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -212,6 +212,10 @@ ClassDef *getResolvedClass(const char *name) QCString *subst = typedefDict[name]; if (subst) // there is a typedef with this name { + if (*subst==name) // avoid resolving typedef struct foo foo; + { + return classDict[name]; + } int count=0; // recursion detection guard QCString *newSubst; while ((newSubst=typedefDict[*subst]) && count<10) @@ -241,11 +245,20 @@ QCString removeRedundantWhiteSpace(const QCString &s) if (s.isEmpty()) return s; QCString result; uint i; - for (i=0;i<s.length();i++) + uint l=s.length(); + for (i=0;i<l;i++) { char c=s.at(i); - if (c!=' ' || - (i!=0 && i!=s.length()-1 && isId(s.at(i-1)) && isId(s.at(i+1))) + if (i<l-2 && c=='<' && s.at(i+1)!='<') + { + result+="< "; + } + else if (i>0 && c=='>' && s.at(i-1)!='>') + { + result+=" >"; + } + else if (c!=' ' || + (i!=0 && i!=l-1 && isId(s.at(i-1)) && isId(s.at(i+1))) ) { if ((c=='*' || c=='&' || c=='@') && @@ -547,7 +560,7 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext) //bool texEnabled = ol.isEnabled(OutputGenerator::Latex); ol.disableAllBut(OutputGenerator::Html); QCString extLink,absPath; - if (ext) { extLink="_doc"; absPath="/"; } + if (ext) { extLink="_doc"; absPath=Config::docURL+"/"; } //if (manEnabled) ol.disable(OutputGenerator::Man); //if (texEnabled) ol.disable(OutputGenerator::Latex); if (compact) ol.startCenter(); else ol.startItemList(); @@ -651,7 +664,7 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext) if (Config::searchEngineFlag) { if (!compact) ol.writeListItem(); - ol.startQuickIndexItem("_cgi",""); + ol.startQuickIndexItem("_cgi",Config::cgiURL+"/"+Config::cgiName); parseText(ol,theTranslator->trSearch()); ol.endQuickIndexItem(); } @@ -968,6 +981,8 @@ static void trimNamespaceScope(QCString &t1,QCString &t2) void stripIrrelevantConstVolatile(QCString &s) { int i,j; + if (s=="const") { s.resize(0); return; } + if (s=="volatile") { s.resize(0); return; } i = s.find("const "); if (i!=-1) { @@ -2323,8 +2338,10 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te QCString stripScope(const char *name) { QCString result = name; - int i=result.findRev("::"); - if (i!=-1) + int ti=result.find('<'); // find start of template + if (ti==-1) ti=result.length(); + int i = ti>2 ? result.findRev("::",ti-2) : -1; // find scope just before template + if (i!=-1) // found scope { result=result.right(result.length()-i-2); } |