From 784e2b65dc675f89c8f21b3c7b306f5fb1bfa4ca Mon Sep 17 00:00:00 2001 From: dimitri Date: Sun, 9 Jun 2002 16:56:34 +0000 Subject: Release-1.2.16-20020609 --- INSTALL | 4 +- Makefile.in | 6 +- README | 4 +- VERSION | 2 +- configure | 4 +- doc/config.doc | 2 +- doc/install.doc | 3 +- doc/language.doc | 24 +- doc/maintainers.txt | 3 + doc/translator.pl | 20 +- packages/rpm/doxygen.spec | 2 +- src/classdef.cpp | 21 + src/code.l | 1 + src/commentcnv.l | 16 +- src/config.l | 10 +- src/doc.l | 84 ++- src/doxygen.cpp | 36 +- src/lang_cfg.h | 1 + src/language.cpp | 13 + src/latexgen.cpp | 159 +++-- src/pre.l | 4 + src/scanner.l | 208 +++++-- src/tagreader.cpp | 5 + src/translator_jp.h | 85 ++- src/translator_sr.h | 1400 +++++++++++++++++++++++++++++++++++++++++++++ 25 files changed, 1893 insertions(+), 224 deletions(-) create mode 100644 src/translator_sr.h diff --git a/INSTALL b/INSTALL index 7a443be..8186a6c 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.16-20020603 +DOXYGEN Version 1.2.16-20020609 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (03 June 2002) +Dimitri van Heesch (09 June 2002) diff --git a/Makefile.in b/Makefile.in index 0bd6b2e..27a404d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -48,7 +48,7 @@ install: doxywizard_install $(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin $(INSTTOOL) -m 755 bin/doxysearch $(INSTALL)/bin -install_docs: +install_docs: install $(INSTTOOL) -d $(DOCDIR) cp -r doc $(DOCDIR) cp -r examples $(DOCDIR) @@ -62,16 +62,12 @@ install_docs: rm -rf $(DOCDIR)/doc cd $(DOCDIR)/latex ; $(MAKE) cp $(DOCDIR)/latex/doxygen_manual.pdf $(DOCDIR) - cp $(DOCDIR)/latex/doxygen_manual.ps $(DOCDIR) rm -rf $(DOCDIR)/latex docs: FORCE cd examples ; $(MAKE) cd doc ; $(MAKE) -ps: docs - cd latex ; $(MAKE) - pdf: docs cd latex ; $(MAKE) diff --git a/README b/README index e053144..1cf6e7d 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.2.16_20020603 +DOXYGEN Version 1.2.16_20020609 Please read INSTALL for compilation instructions. @@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. Enjoy, -Dimitri van Heesch (dimitri@stack.nl) (03 June 2002) +Dimitri van Heesch (dimitri@stack.nl) (09 June 2002) diff --git a/VERSION b/VERSION index 0cfe5bc..8ef3cd1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.16-20020603 +1.2.16-20020609 diff --git a/configure b/configure index ab3a078..eb60190 100755 --- a/configure +++ b/configure @@ -27,7 +27,7 @@ f_prefix=/usr f_insttool=NO f_english=NO f_wizard=NO -f_langs=nl,se,cz,fr,it,de,jp,es,fi,ru,hr,pl,pt,hu,kr,ro,si,cn,no,br,dk,sk,ua,gr,tw +f_langs=nl,se,cz,fr,it,de,jp,es,fi,ru,hr,pl,pt,hu,kr,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr while test -n "$1"; do case $1 in @@ -483,7 +483,7 @@ echo -n " Generating src/lang_cfg.h..." echo $f_langs | $f_perl -e '@l=split(/,/,); chomp @l; @allowed=(NL,SE,CZ,FR,IT,DE,JP,ES,FI,RU,HR,PL,PT,HU,KR,RO,SI,CN,NO,BR, - DK,SK,UA,GR,TW); + DK,SK,UA,GR,TW,SR); foreach my $elem (@l){ $elem =~ tr/a-z/A-Z/; $r=0; diff --git a/doc/config.doc b/doc/config.doc index 3269d49..fa9c5c3 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -239,7 +239,7 @@ followed by the descriptions of the tags grouped by category. The default language is English, other supported languages are: Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, - Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish. + Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish and Swedish. \anchor cfg_extract_all
\c EXTRACT_ALL
diff --git a/doc/install.doc b/doc/install.doc index 2296294..4b3b047 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -397,7 +397,7 @@ Here is what is required: of the cygwin tools that I put together just to compile doxygen. As a third alternative one could use the GNUWin32 tools that can be - found at http://gnuwin32.sourceforge.net/ + found at http://gnuwin32.sourceforge.net/ Make sure the BISONLIB environment variable points to the location where the files bison.simple and @@ -474,6 +474,7 @@ Here is what is required: and the collaboration graphs. + Compilation is now done by performing the following steps:
    diff --git a/doc/language.doc b/doc/language.doc index 22582b6..89ac96b 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -25,14 +25,14 @@ Doxygen has built-in support for multiple languages. This means that the text fragments that doxygen generates can be produced in languages other than English (the default) at configuration time. -Currently (version 1.2.14-20020317), 26 languages +Currently (version 1.2.16-20020603), 27 languages are supported (sorted alphabetically): -Brazilian Portuguese, Chinese, Chinesetraditional, Croatian, Czech, +Brazilian Portuguese, Chinese, Chinese Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Romanian, -Russian, Slovak, Slovene, Spanish, Swedish, -and Ukrainian. +Russian, Serbian, Slovak, Slovene, Spanish, +Swedish, and Ukrainian. The table of information related to the supported languages follows. It is sorted by language alphabetically. The Status column @@ -52,7 +52,7 @@ when the translator was updated. Status - Brazilian + Brazilian Portuguese Fabio "FJTC" Jun Takada Chino chino@NOSPAM.icmc.sc.usp.br up-to-date @@ -64,7 +64,7 @@ when the translator was updated. 1.2.13 - Chinesetraditional + Chinese Traditional Gary Lee garylee@NOSPAM.ecosine.com.tw up-to-date @@ -178,6 +178,12 @@ when the translator was updated. up-to-date + Serbian + Dejan Milosavljevic + dmilos@NOSPAM.email.com + up-to-date + + Slovak Stanislav Kudláč skudlac@NOSPAM.pobox.sk @@ -218,12 +224,12 @@ when the translator was updated. {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\ \hline \hline - Brazilian & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\ + Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\ \hline Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\ & Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\ \hline - Chinesetraditional & Gary Lee & {\tt garylee@ecosine.com.tw} & up-to-date \\ + Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & up-to-date \\ \hline Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\ \hline @@ -265,6 +271,8 @@ when the translator was updated. \hline Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\ \hline + Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & up-to-date \\ + \hline Slovak & Stanislav Kudl\'{a}\v{c} & {\tt skudlac@pobox.sk} & 1.2.13 \\ \hline Slovene & Matjaz Ostroversnik & {\tt matjaz.ostroversnik@zrs-tk.si} & up-to-date \\ diff --git a/doc/maintainers.txt b/doc/maintainers.txt index b729303..4673c16 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -69,6 +69,9 @@ Alexandru Iosup: aiosup@yahoo.com Russian Alexandr Chelpanov: cav@cryptopro.ru +Serbian +Dejan Milosavljevic: dmilos@email.com + Slovak Stanislav Kudláč: skudlac@pobox.sk diff --git a/doc/translator.pl b/doc/translator.pl index 170c7c5..d6204c9 100644 --- a/doc/translator.pl +++ b/doc/translator.pl @@ -118,6 +118,11 @@ # - Some defined() operators used on hash elements were replaced # by exists() operators where appropriate. # +# 2002/05/21 +# - Changes to display languages with two words more naturally +# (like "Chinese Traditional" instead of "Chinesetraditional" +# or "Brazilian Portuguese" instead of "Brazilian"). +# ################################################################ use 5.005; @@ -607,6 +612,7 @@ xxxTABLE_FOOTxxx my $languages = join(", ", @languages); $languages =~ s{((\w+,\s){5})}{$1\n}g; $languages =~ s{Brazilian}{Brazilian Portuguese}; + $languages =~ s{Chinesetraditional}{Chinese Traditional}; $languages =~ s{(,\s+)(\w+)$}{$1and $2}s; $output =~ s{\$languages}{$languages}; @@ -692,6 +698,15 @@ xxxTABLE_FOOTxxx # information, and add it to the tables. #{{{ # foreach my $lang (sort keys %language) { + + # Transform the key for the language into more human readable + # form. Basically, only languages with two words are going to be + # corrected. #{{{ + # + my $lang_readable = $lang; + $lang_readable =~ s{Brazilian}{Brazilian Portuguese}; + $lang_readable =~ s{Chinesetraditional}{Chinese Traditional}; + ##}}} # Read the line with info for the language and separate # the status. #{{{ @@ -748,7 +763,7 @@ xxxTABLE_FOOTxxx # my $item = $htmlTableRow; - $item =~ s{\$lang}{$lang}; + $item =~ s{\$lang}{$lang_readable}; $item =~ s{\$maintainer}{$name}; $item =~ s{\$email}{$email}; $item =~ s{\$status}{$status}; @@ -774,7 +789,7 @@ xxxTABLE_FOOTxxx $name = $1; $email = $2; - $item =~ s{\$lang}{$lang}; + $item =~ s{\$lang}{$lang_readable}; $item =~ s{\$maintainer}{$name}; $item =~ s{\$email}{$email}; $item =~ s{\$status}{$status}; @@ -1187,6 +1202,7 @@ print STDERR "\n\n"; my $languages = join(", ", @languages); $languages =~ s{((\w+,\s){5})}{$1\n}g; $languages =~ s{Brazilian}{Brazilian Portuguese}; + $languages =~ s{Chinesetraditional}{Chinese Traditional}; $languages =~ s{(,\s+)(\w+)$}{$1and $2.}s; print FOUT "$languages\n"; diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index 78e3a91..388a4bc 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,6 +1,6 @@ Summary: A documentation system for C/C++. Name: doxygen -Version: 1.2.16_20020603 +Version: 1.2.16_20020609 Release: 1 Epoch: 1 Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz diff --git a/src/classdef.cpp b/src/classdef.cpp index f82cbf0..1231e09 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1189,6 +1189,9 @@ void ClassDef::writeDocumentation(OutputList &ol) ol.docify(stripFromPath(path)); } + // for HTML + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); if (fd->generateSourceFile()) { ol.writeObjectLink(0,fd->getSourceFileBase(),0,fd->name()); @@ -1202,6 +1205,24 @@ void ClassDef::writeDocumentation(OutputList &ol) { ol.docify(fd->name()); } + ol.popGeneratorState(); + + // for other output formats + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Html); + if (fd->isLinkable()) + { + ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0, + fd->name()); + } + else + { + ol.docify(fd->name()); + } + + ol.popGeneratorState(); + + } file=m_files.next(); } diff --git a/src/code.l b/src/code.l index 42eda81..0ecfa8e 100644 --- a/src/code.l +++ b/src/code.l @@ -1047,6 +1047,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" bool ambig; bool found=FALSE; FileDef *fd=0; + //printf("looking for include %s\n",yytext); if ((fd=findFileDef(Doxygen::inputNameDict,yytext,ambig)) && fd->isLinkable()) { diff --git a/src/commentcnv.l b/src/commentcnv.l index de7e8a7..bba1b21 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -162,22 +162,22 @@ static int yyread(char *buf,int max_size) copyToOutput(yytext,yyleng); BEGIN(Scan); } -^[ \t]*"///"[\/]*\n { +^[ \t]*"///"[\/]*/\n { replaceCommentMarker(yytext,yyleng); } -^[ \t]*"///"[^\/\n].*/\n { - replaceCommentMarker(yytext,yyleng); - } -^[ \t]*"//!".*/\n { /* second line of special comment */ +\n[ \t]*"///"[\/]*/\n { replaceCommentMarker(yytext,yyleng); } -\n[ \t]*"///"[\/]*\n { +^[ \t]*"///"[^\/\n].*/\n { replaceCommentMarker(yytext,yyleng); - } + } \n[ \t]*"///"[^\/\n].*/\n { replaceCommentMarker(yytext,yyleng); } -\n[ \t]*"//!".*/\n { /* other line of special comment */ +^[ \t]*"//!".*/\n { + replaceCommentMarker(yytext,yyleng); + } +\n[ \t]*"//!".*/\n { replaceCommentMarker(yytext,yyleng); } \n { /* end of special comment */ diff --git a/src/config.l b/src/config.l index ceffb23..ab4a52f 100644 --- a/src/config.l +++ b/src/config.l @@ -1248,9 +1248,9 @@ void Config::create() "information to generate all constant output in the proper language. \n" "The default language is English, other supported languages are: \n" "Brazilian, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, \n" - "Finnish, French, German, Greek, Hungarian, Italian, Japanese, Korean, \n" - "Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Slovene, \n" - "Spanish, Swedish and Ukrainian.\n", + "Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en \n" + "(Japanese with english messages), Korean, Norwegian, Polish, Portuguese, \n" + "Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian.\n", "English" ); #ifdef LANG_BR @@ -1295,6 +1295,7 @@ void Config::create() #endif #ifdef LANG_JP ce->addValue("Japanese"); + ce->addValue("Japanese-en"); #endif #ifdef LANG_KR ce->addValue("Korean"); @@ -1314,6 +1315,9 @@ void Config::create() #ifdef LANG_RU ce->addValue("Russian"); #endif +#ifdef LANG_SR + ce->addValue("Serbian"); +#endif #ifdef LANG_SK ce->addValue("Slovak"); #endif diff --git a/src/doc.l b/src/doc.l index 4ffb5a9..c98a057 100644 --- a/src/doc.l +++ b/src/doc.l @@ -966,6 +966,13 @@ static void checkArgName(const QCString &name,bool isParam) /* ----------------------------------------------------------------- */ +/*! Looks for a documentation block with name commandName in the current + * context (copyDocScope). The resulting documentation string is + * put in pDoc, the definition in which the documentation was found is + * put in pDef. + * @retval TRUE if name was found. + * @retval FALSE if name was not found. + */ bool findDocsForMemberOrCompound(const char *commandName, QCString *pDoc, Definition **pDef) @@ -976,53 +983,40 @@ bool findDocsForMemberOrCompound(const char *commandName, int l=cmdArg.length(); if (l==0) return FALSE; + int funcStart=cmdArg.find('('); + if (funcStart==-1) funcStart=l; + //int lastScopeStart=cmdArg.findRev("::",funcStart); + //int lastScopeEnd = lastScopeStart==-1 ? 0 : lastScopeStart+2; + //QCString scope=cmdArg.left(QMAX(lastScopeStart,0)); + //QCString name=cmdArg.mid(lastScopeEnd,funcStart-lastScopeEnd); + QCString name=cmdArg.left(funcStart); + QCString args=cmdArg.right(l-funcStart); + + // try if the link is to a member + MemberDef *md=0; + ClassDef *cd=0; + FileDef *fd=0; + NamespaceDef *nd=0; + GroupDef *gd=0; + PageInfo *pi=0; + bool found = getDefs(copyDocScope,name,args,md,cd,fd,nd,gd,FALSE,0,TRUE); + if (found && md) + { + *pDoc=md->documentation(); + *pDef=md; + return TRUE; + } + + int scopeOffset=copyDocScope.length(); do // for each scope { - int funcStart=cmdArg.find('('); - if (funcStart==-1) funcStart=l; - int lastScopeStart=cmdArg.findRev("::",funcStart); - int lastScopeEnd = lastScopeStart==-1 ? 0 : lastScopeStart+2; - QCString scope=cmdArg.left(QMAX(lastScopeStart,0)); - QCString name=cmdArg.mid(lastScopeEnd,funcStart-lastScopeEnd); - QCString args=cmdArg.right(l-funcStart); - - if (scope.isEmpty()) - { - if (scopeOffset>0) - { - scope=copyDocScope.left(scopeOffset); - } - } - else - { - if (scopeOffset>0) - { - scope.prepend(copyDocScope.left(scopeOffset)+"::"); - } - } - //printf("findDocsForMemberOrCompound: scope=`%s' name=`%s' arg=`%s'\n",scope.data(),name.data(),args.data()); - - // try if the link is to a member - MemberDef *md=0; - ClassDef *cd=0; - FileDef *fd=0; - NamespaceDef *nd=0; - GroupDef *gd=0; - PageInfo *pi=0; - bool found = getDefs(scope,name,args,md,cd,fd,nd,gd,FALSE,0,TRUE); - if (found && md) - { - *pDoc=md->documentation(); - *pDef=md; - return TRUE; - } - QCString fullName=cmdArg; if (scopeOffset>0) { fullName.prepend(copyDocScope.left(scopeOffset)+"::"); } + //printf("Trying fullName=`%s'\n",fullName.data()); // try class, namespace, group, page, file reference cd = Doxygen::classSDict[fullName]; @@ -1071,7 +1065,7 @@ bool findDocsForMemberOrCompound(const char *commandName, scopeOffset = copyDocScope.findRev("::",scopeOffset-1); if (scopeOffset==-1) scopeOffset=0; } - } while (scopeOffset>0); + } while (scopeOffset>=0); return FALSE; @@ -1108,8 +1102,8 @@ FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]+ ID [a-z_A-Z][a-z_A-Z0-9]* SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) SCOPEMASK {ID}?(("::"|"#")?(~)?{ID})+ -URLCHAR [a-z_A-Z0-9\!\~\:\;\'\$\?\@\&\%\#\.\-\+\/\=\(\)] -URLMASK ([a-z_A-Z][^\>\"\n]*{URLCHAR})|({URLCHAR}+) +URLCHAR [a-z_A-Z0-9\!\~\:\;\'\$\?\@\&\%\#\.\-\+\/\=] +URLMASK (([a-z_A-Z][^\>\"\n]*{URLCHAR})|({URLCHAR}+))("("{URLCHAR}*")")? NONTERM [\{\}\[\]\`\~\@\|\-\+\#\$\/\\\!\%\^\&\*()a-z_A-Z<>0-9\x80-\xff] WORD ({NONTERM}+([^\n\t ]*{NONTERM}+)?)|("\""[^\n\"]*"\"") ATTR ({B}+[^>\n]*)? @@ -2983,9 +2977,13 @@ void resolveCopyDocCommands(const char *scope,QCString &docString) void parseDoc(OutputDocInterface &od,const char *fileName,int startLine, const char *clName,MemberDef *md,const QCString &docStr) { + strcpy(yyFileName,fileName); + yyLineNr = startLine; + QCString docString=docStr; resolveCopyDocCommands(clName,docString); + yyLineNr = startLine; //printf("parseDoc(file=`%s',line=%d)\n",fileName,startLine); initParser(); initParseCodeContext(); @@ -2995,8 +2993,6 @@ void parseDoc(OutputDocInterface &od,const char *fileName,int startLine, hasParamCommand = FALSE; paramsFound.setAutoDelete(FALSE); paramsFound.clear(); - strcpy(yyFileName,fileName); - yyLineNr = startLine; parseDocument(od,docString); if (md && hasParamCommand && Config_getBool("WARN_IF_UNDOCUMENTED")) diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 20a7b57..0322193 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -5754,15 +5754,21 @@ static void resolveUserReferences() si->fileName=si->definition->getOutputFileBase().copy(); } } - // hack: the items of a todo/test list are all fragments from different files, - // so the resulting section's all have the wrong file name (not from the - // todo/test list, but from the file in which they are defined). We correct this - // here by looking at the generated section labels! + // hack: the items of a todo/test/bug list are all fragments from + // different files, so the resulting section's all have the wrong file + // name (not from the todo/test/bug list, but from the file in which they + // are defined). We correct this here by looking at the generated section + // labels! if (si->label.left(5)=="_todo" || si->label.left(5)=="_test") { si->fileName=si->label.mid(1,4); // extract "todo" or "test" si->generated=TRUE; } + else if (si->label.left(4)=="_bug") + { + si->fileName="bug"; + si->generated=TRUE; + } } } @@ -6774,11 +6780,11 @@ void readConfiguration(int argc, char **argv) exit(1); } - QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); - if (!setTranslator(outputLanguage)) - { - err("Error: Output language %s not supported! Using English instead.\n", outputLanguage.data()); - } + QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); + if (!setTranslator(outputLanguage)) + { + err("Error: Output language %s not supported! Using English instead.\n", outputLanguage.data()); + } QFile f; if (openOutputFile(argv[optind+1],f)) @@ -6820,11 +6826,11 @@ void readConfiguration(int argc, char **argv) exit(1); } - QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); - if (!setTranslator(outputLanguage)) - { - err("Error: Output language %s not supported! Using English instead.\n", outputLanguage.data()); - } + QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); + if (!setTranslator(outputLanguage)) + { + err("Error: Output language %s not supported! Using English instead.\n", outputLanguage.data()); + } QFile f; if (openOutputFile(argv[optind+1],f)) @@ -7158,7 +7164,7 @@ void parseInput() **************************************************************************/ Entry *root=new Entry; - msg("Reading tag files\n"); + msg("Reading and parsing tag files\n"); QStrList &tagFileList = Config_getList("TAGFILES"); s=tagFileList.first(); diff --git a/src/lang_cfg.h b/src/lang_cfg.h index 8c54688..fe373e3 100644 --- a/src/lang_cfg.h +++ b/src/lang_cfg.h @@ -23,3 +23,4 @@ #define LANG_UA #define LANG_GR #define LANG_TW +#define LANG_SR diff --git a/src/language.cpp b/src/language.cpp index 7c9494a..5711b07 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -97,6 +97,9 @@ #ifdef LANG_GR #include "translator_gr.h" #endif +#ifdef LANG_SR +#include "translator_sr.h" +#endif //#ifdef LANG_JS //#include "translator_js.h" //#endif @@ -154,6 +157,10 @@ bool setTranslator(const char *langName) { theTranslator=new TranslatorJapanese; } + else if (L_EQUAL("japanese-en")) + { + theTranslator=new TranslatorJapaneseEn; + } #endif #ifdef LANG_ES else if (L_EQUAL("spanish")) @@ -263,6 +270,12 @@ bool setTranslator(const char *langName) theTranslator=new TranslatorGreek; } #endif +#ifdef LANG_SR + else if (L_EQUAL("serbian")) + { + theTranslator=new TranslatorSerbian; + } +#endif // else if (L_EQUAL("japanese-sjis")) // { // theTranslator=new TranslatorJapaneseSjis; diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 58e6044..2508b98 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -152,64 +152,72 @@ void LatexGenerator::init() QCString mkidx_command = Config_getString("MAKEINDEX_CMD_NAME"); // end insertion by KONNO Akihisa 2002-03-05 QTextStream t(&file); - t << "all: refman.dvi" << endl - << endl - << "ps: refman.ps" << endl - << endl - << "pdf: refman.pdf" << endl - << endl - << "ps_2on1: refman_2on1.ps" << endl - << endl - << "pdf_2on1: refman_2on1.pdf" << endl - << endl - << "refman.ps: refman.dvi" << endl - << "\tdvips -o refman.ps refman.dvi" << endl - << endl; - if (Config_getBool("USE_PDFLATEX")) // use pdflatex instead of latex - { - t << "refman.pdf: refman.tex" << endl; - t << "\tpdflatex refman.tex" << endl; - t << "\tmakeindex refman.idx" << endl; - t << "\tpdflatex refman.tex" << endl << endl; - } - else // otherwise use ps2pdf: not as nice :( - { - t << "refman.pdf: refman.ps" << endl; + if (!Config_getBool("USE_PDFLATEX")) // use plain old latex + { + t << "all: refman.dvi" << endl + << endl + << "ps: refman.ps" << endl + << endl + << "pdf: refman.pdf" << endl + << endl + << "ps_2on1: refman_2on1.ps" << endl + << endl + << "pdf_2on1: refman_2on1.pdf" << endl + << endl + << "refman.ps: refman.dvi" << endl + << "\tdvips -o refman.ps refman.dvi" << endl + << endl; + t << "refman.pdf: refman.ps" << endl; #if defined(_MSC_VER) - // ps2pdf.bat does not work properly from a makefile using GNU make! - t << "\tgswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " - "-sOutputFile=refman.pdf -c save pop -f refman.ps" << endl << endl; + // ps2pdf.bat does not work properly from a makefile using GNU make! + t << "\tgswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " + "-sOutputFile=refman.pdf -c save pop -f refman.ps" << endl << endl; #else - t << "\tps2pdf refman.ps refman.pdf" << endl << endl; + t << "\tps2pdf refman.ps refman.pdf" << endl << endl; #endif - } - - t << "refman_2on1.ps: refman.ps" << endl - << "\tpsnup -2 refman.ps >refman_2on1.ps" << endl - << endl - << "refman_2on1.pdf: refman_2on1.ps" << endl + t << "refman.dvi: refman.tex doxygen.sty" << endl + << "\techo \"Running latex...\"" << endl + << "\t" << latex_command << " refman.tex" << endl + << "\techo \"Running makeindex...\"" << endl + << "\t" << mkidx_command << " refman.idx" << endl + << "\techo \"Rerunning latex....\"" << endl + << "\t" << latex_command << " refman.tex" << endl + << "\tlatex_count=5 ; \\" << endl + << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl + << "\t do \\" << endl + << "\t echo \"Rerunning latex....\" ;\\" << endl + << "\t " << latex_command << " refman.tex ;\\" << endl + << "\t latex_count=`expr $$latex_count - 1` ;\\" << endl + << "\t done" << endl << endl + << "refman_2on1.ps: refman.ps" << endl + << "\tpsnup -2 refman.ps >refman_2on1.ps" << endl + << endl + << "refman_2on1.pdf: refman_2on1.ps" << endl #if defined(_MSC_VER) - // ps2pdf.bat does not work properly from a makefile using GNU make! - << "\tgswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " - "-sOutputFile=refman_2on1.pdf -c save pop -f refman_2on1.ps" << endl + // ps2pdf.bat does not work properly from a makefile using GNU make! + << "\tgswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " + "-sOutputFile=refman_2on1.pdf -c save pop -f refman_2on1.ps" << endl #else - << "\tps2pdf refman_2on1.ps refman_2on1.pdf" << endl + << "\tps2pdf refman_2on1.ps refman_2on1.pdf" << endl; #endif - << endl - << "refman.dvi: refman.tex doxygen.sty" << endl - << "\techo \"Running latex...\"" << endl - << "\t" << latex_command << " refman.tex" << endl - << "\techo \"Running makeindex...\"" << endl - << "\t" << mkidx_command << " refman.idx" << endl - << "\techo \"Rerunning latex....\"" << endl - << "\t" << latex_command << " refman.tex" << endl - << "\tlatex_count=5 ; \\" << endl - << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl - << "\t do \\" << endl - << "\t echo \"Rerunning latex....\" ;\\" << endl - << "\t " << latex_command << " refman.tex ;\\" << endl - << "\t latex_count=`expr $$latex_count - 1` ;\\" << endl - << "\t done" << endl << endl + } + else // use pdflatex for higher quality output + { + t << "all: refman.pdf" << endl << endl; + t << "refman.pdf: refman.tex" << endl; + t << "\tpdflatex refman.tex" << endl; + t << "\tmakeindex refman.idx" << endl; + t << "\tpdflatex refman.tex" << endl << endl + << "\tlatex_count=5 ; \\" << endl + << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl + << "\t do \\" << endl + << "\t echo \"Rerunning latex....\" ;\\" << endl + << "\t pdflatex refman.tex ;\\" << endl + << "\t latex_count=`expr $$latex_count - 1` ;\\" << endl + << "\t done" << endl << endl; + } + + t << endl << "clean:" << endl << "\trm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out" << endl; } @@ -1033,7 +1041,7 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name) { t << "\\label{" << fileName << "}\\index{" << name << "@{"; - docify(name); + escapeMakeIndexChars(this,t,name); t << "}}" << endl; } if (Config_getBool("PDF_HYPERLINKS") && fileName) @@ -1183,7 +1191,7 @@ void LatexGenerator::addIndexItem(const char *s1,const char *s2) if (s2) { t << "!" << escapeLabelName(s2) << "@{"; - docify(s2); + escapeMakeIndexChars(this,t,s2); t << "}"; } t << "}"; @@ -1389,7 +1397,6 @@ void LatexGenerator::docify(const char *str) { static bool isCzech = theTranslator->idLanguage()=="czech"; static bool isJapanese = theTranslator->idLanguage()=="japanese"; - static bool isJapaneseSjis = theTranslator->idLanguage()=="japanese-sjis"; static bool isKorean = theTranslator->idLanguage()=="korean"; static bool isRussian = theTranslator->idLanguage()=="russian"; static bool isUkrainian = theTranslator->idLanguage()=="ukrainian"; @@ -1404,7 +1411,27 @@ void LatexGenerator::docify(const char *str) unsigned char pc='\0'; while (*p) { + static bool MultiByte = FALSE; c=*p++; + + if( isJapanese) + { + if (MultiByte) + { + t << (char)c; + MultiByte = FALSE; + pc = c; + continue; + } + if (c>=0x80) + { + MultiByte = TRUE; + t << (char)c; + pc = c; + continue; + } + } + if (insidePre) { switch(c) @@ -1462,7 +1489,7 @@ void LatexGenerator::docify(const char *str) default: // Some languages uses wide characters - if (isJapanese || isJapaneseSjis || isKorean || isChinese) + if (isJapanese || isKorean || isChinese) { if (c>=128) { @@ -1600,6 +1627,8 @@ void LatexGenerator::docify(const char *str) void LatexGenerator::codify(const char *str) { + static bool isJapanese = theTranslator->idLanguage()=="japanese"; + if (str) { const char *p=str; @@ -1608,7 +1637,25 @@ void LatexGenerator::codify(const char *str) int &tabSize = Config_getInt("TAB_SIZE"); while (*p) { + static bool MultiByte = FALSE; c=*p++; + + if( isJapanese ) + { + if ( MultiByte ) + { + t << (char)c; + MultiByte = FALSE; + continue; + } + if ( c<0 ) // char in range [0x80..0xff] + { + t << (char)c; + MultiByte = TRUE; + continue; + } + } + switch(c) { case 0x0c: break; // remove ^L diff --git a/src/pre.l b/src/pre.l index 7af3435..5d957ef 100644 --- a/src/pre.l +++ b/src/pre.l @@ -105,6 +105,7 @@ static void setFileName(const char *name) bool ambig; g_yyFileName=name; g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig); + if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0; } static void incrLevel() @@ -164,6 +165,7 @@ static Define *isDefined(const char *name) static FILE *checkAndOpenFile(const QCString &absName) { FILE *f = 0; + //printf("checkAndOpenFile(%s)\n",absName.data()); QFileInfo fi(absName); if (fi.exists() && fi.isFile()) { @@ -942,6 +944,7 @@ static void readIncludeFile(const QCString &inc) //printf("Searching for `%s'\n",incFileName.data()); if ((f=findFile(incFileName,localInclude))) // see if the include file can be found { + //printf("Found include file!\n"); if (Debug::isFlagSet(Debug::Preprocessor)) { for (i=0;iaddIncludeDependency(fd,incFileName,localInclude); // add included by dependency diff --git a/src/scanner.l b/src/scanner.l index eced109..93663c1 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -123,8 +123,11 @@ static QCString aliasName; static QCString baseName; static QCString* specName; static QCString formulaText; +static bool useOverrideCommands = FALSE; static bool insideIDL = FALSE; static bool insideJava = FALSE; +static bool insidePHP = FALSE; +static bool insidePHPCode = FALSE; static bool insideCppQuote = FALSE; static int argRoundCount; @@ -320,8 +323,11 @@ static QCString addFormula() static bool nameIsOperator(QCString &name) { - return name.right(8)=="operator" && - (name.length()==8 || !isId(name.at(name.length()-9))); + int i=name.find("operator"); + if (i==-1) return FALSE; + if (i==0 && !isId(name.at(8))) return TRUE; // case operator ::X + if (i>0 && !isId(name.at(i-1)) && !isId(name.at(i+8))) return TRUE; // case X::operator + return FALSE; // case TEXToperatorTEXT } static void checkFormula() @@ -379,6 +385,11 @@ static void setContext() QCString fileName = yyFileName; insideIDL = fileName.right(4)==".idl"; insideJava = fileName.right(5)==".java"; + insidePHP = fileName.right(4)==".php"; + if ( insidePHP ) + { + useOverrideCommands = TRUE; + } //printf("setContext(%s) insideIDL=%d\n",yyFileName,insideIDL); } @@ -471,6 +482,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) %x NextSemi %x BitFields %x FindMembers +%x FindMembersPHP %x FindMemberName %x FindFields %x FindFieldArg @@ -614,8 +626,15 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) current_root->addSubEntry(current); current = new Entry; } - BEGIN( FindMembers ); - } + if ( insidePHP ) + { + BEGIN( FindMembersPHP ); + } + else + { + BEGIN( FindMembers ); + } + } "{" { curlyCount=0; needsSemi = TRUE; @@ -664,6 +683,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) unput(*yytext); BEGIN( FindMembers ); } +". { // Non-PHP code text, ignore + } +"?>" { // PHP code end + insidePHPCode = FALSE; + BEGIN( FindMembersPHP ); + } + {B}*("properties"|"__property"){BN}*":"{BN}* { // IDL or Borland C++ builder property current->mtype = mtype = Property; current->protection = protection = Public ; @@ -1131,8 +1161,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) current->name+=*yytext; // *currentTemplateSpec+=*yytext; } -{SCOPENAME} { +{SCOPENAME} { lineCount(); +// if ( insidePHP && strcmp(yytext,"define")==0) +// { +// BEGIN(DefinePHP); +// } if (insideIDL && yyleng==9 && strcmp(yytext,"cpp_quote")==0) { BEGIN(CppQuote); @@ -1153,6 +1187,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) insideTryBlock=FALSE; BEGIN(TryFunctionBlock); } +// else if ( insidePHP && strcmp(yytext,"function")==0 ) +// { +// BEGIN( +// } else { if (YY_START==FindMembers) @@ -1179,10 +1217,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) current->name += yytext; } QCString tmp=yytext; - if (nameIsOperator(tmp)) + if (nameIsOperator(tmp)) + { BEGIN( Operator ); + } else - BEGIN(FindMembers); + { + BEGIN(FindMembers); + } } } "." { @@ -1565,6 +1607,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) { current->bodyLine = yyLineNr; } + if ( insidePHP && current->type.left(3) == "var" ) + { + current->type = current->type.mid(3); + } current->type=current->type.simplifyWhiteSpace(); current->args=current->args.simplifyWhiteSpace(); current->name=current->name.stripWhiteSpace(); @@ -2244,7 +2290,18 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) BEGIN(SkipCPP); } */ -[{:;,] { unput(*yytext); BEGIN( Function ); } +[{:;,] { + if ( strcmp(yytext,";")==0 && insidePHP && current->type.left(8) != "function" ) + { + current->reset(); + initEntry(); + BEGIN( FindMembers ); + } + else + { + unput(*yytext); BEGIN( Function ); + } + } {BN}*"const"{BN}* { lineCount() ; current->args += " const "; @@ -2353,7 +2410,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) //printf("Scanner.l: found in class function: `%s' `%s' `%s'\n", // current->type.data(),current->name.data(),current->args.data()); current->section = Entry::FUNCTION_SEC ; - current->proto = *yytext==';'; + current->proto = *yytext==';'; } } else // a global function prototype or function variable @@ -2369,36 +2426,46 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) else { //printf("Scanner.l: found prototype\n"); - current->section = Entry::FUNCTION_SEC; + current->section = Entry::FUNCTION_SEC; current->proto = TRUE; } } //printf("Adding entry `%s'\n",current->name.data()); - previous = current; - current_root->addSubEntry(current); - current = new Entry ; - initEntry(); - lastCurlyContext = FindMembers; - if ( *yytext == ',' ) - { - current->type = previous->type.data(); - } - if ( *yytext == '{' ) + if ( insidePHP && current->type.left(8) != "function" ) { - if (current_root->section & Entry::COMPOUND_MASK) - previous->memSpec = previous->memSpec | Entry::Inline; - //addToBody(yytext); - curlyCount=0; - BEGIN( SkipCurly ) ; + initEntry(); } else { - if (previous->section!=Entry::VARIABLE_SEC) - previous->bodyLine=-1; // a function/member declaration - BEGIN( FindMembers ) ; + if ( insidePHP && current->type.left(8) == "function" ) + { + current->type = current->type.mid(8); + } + previous = current; + current_root->addSubEntry(current); + current = new Entry ; + initEntry(); + lastCurlyContext = FindMembers; + if ( *yytext == ',' ) + { + current->type = previous->type.data(); + } + if ( *yytext == '{' ) + { + if ( !insidePHP && (current_root->section & Entry::COMPOUND_MASK) ) + previous->memSpec = previous->memSpec | Entry::Inline; + //addToBody(yytext); + curlyCount=0; + BEGIN( SkipCurly ) ; + } + else + { + if (previous->section!=Entry::VARIABLE_SEC) + previous->bodyLine=-1; // a function/member declaration + BEGIN( FindMembers ) ; + } } - } - + } "{" { //addToBody(yytext); //lastCurlyContext = FindMembers; @@ -2592,6 +2659,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) baseName.resize(0); BEGIN( BasesProt ) ; } + else if (insidePHP && (strcmp(yytext,"extends")==0)) + { + current->type.resize(0); + baseProt=Public; + baseVirt=Normal; + baseName.resize(0); + BEGIN( BasesProt ) ; + } else { //if (isTypedef) @@ -2618,9 +2693,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } ":" { current->type.resize(0); - if (current->section == Entry::INTERFACE_SEC || current->section == Entry::STRUCT_SEC) + if (current->section == Entry::INTERFACE_SEC || current->section == Entry::STRUCT_SEC || insidePHP) baseProt=Public; - else + else baseProt=Private; baseVirt=Normal; baseName.resize(0); @@ -2715,7 +2790,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) current->extends->append( new BaseInfo(baseName,baseProt,baseVirt) ); - if (current->section == Entry::INTERFACE_SEC || insideJava) + if (current->section == Entry::INTERFACE_SEC || insideJava || insidePHP) baseProt=Public; else baseProt=Private; @@ -4126,22 +4201,61 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) current->doc+=yytext; } {CMD}[a-z_A-Z][a-z_A-Z0-9]* { - QCString *pValue=Doxygen::aliasDict[yytext+1]; - if (pValue) - { - int i,l=pValue->length(); - for (i=l-1;i>=0;i--) + bool handled=FALSE; + if ( useOverrideCommands) + { + if ( strcmp(yytext+1,"static")==0 ) + { + current->stat = TRUE; handled = TRUE; + } + else if ( strcmp(yytext+1,"pure")==0 ) + { + current->virt = Pure; handled = TRUE; + } + else if ( strcmp(yytext+1,"private")==0 ) + { + current->protection = Private; handled = TRUE; + } + else if ( strcmp(yytext+1,"privatesection")==0 ) + { + current->protection = protection = Private; handled = TRUE; + } + else if ( strcmp(yytext+1,"protected")==0 ) + { + current->protection = Protected; handled = TRUE; + } + else if ( strcmp(yytext+1,"protectedsection")==0 ) + { + current->protection = protection = Protected ; handled = TRUE; + } + else if ( strcmp(yytext+1,"public")==0 ) + { + current->protection = Public; handled = TRUE; + } + else if ( strcmp(yytext+1,"publicsection")==0 ) + { + current->protection = protection = Public; handled = TRUE; + } + } + if (!handled) + { + QCString *pValue=Doxygen::aliasDict[yytext+1]; + if (pValue) { - unput(pValue->at(i)); + int i,l=pValue->length(); + for (i=l-1;i>=0;i--) + { + unput(pValue->at(i)); + } } - } - else - { - if (YY_START==CopyArgComment) - fullArgString+=yytext; else - current->doc+=yytext; - } + { + if (YY_START==CopyArgComment) + fullArgString+=yytext; + else + current->doc+=yytext; + } + } } "\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text current->brief+=yytext; @@ -4307,7 +4421,7 @@ static void parseCompounds(Entry *rt) // set default protection based on the compound type if( ce->section==Entry::CLASS_SEC ) // class { - if (ce->fileName.right(5)==".java") + if (ce->fileName.right(5)==".java" || ce->fileName.right(4)==".php") current->protection = protection = Public ; // Actually this should be package scope! else current->protection = protection = Private ; diff --git a/src/tagreader.cpp b/src/tagreader.cpp index acbcb0c..6934966 100644 --- a/src/tagreader.cpp +++ b/src/tagreader.cpp @@ -1159,15 +1159,19 @@ void TagFileParser::addIncludes() TagFileInfo *tfi = m_tagFileFiles.first(); while (tfi) { + //printf("tag file tagName=%s path=%s name=%s\n",m_tagName.data(),tfi->path.data(),tfi->name.data()); FileName *fn = Doxygen::inputNameDict->find(tfi->name); if (fn) { + //printf("found\n"); FileNameIterator fni(*fn); FileDef *fd; for (;(fd=fni.current());++fni) { + //printf("input file path=%s name=%s\n",fd->getPath().data(),fd->name().data()); if (fd->getPath()==QCString(m_tagName+":"+tfi->path)) { + //printf("found\n"); QListIterator mii(tfi->includes); TagIncludeInfo *ii; for (;(ii=mii.current());++mii) @@ -1213,3 +1217,4 @@ void parseTagFile(Entry *root,const char *fullName,const char *tagName) handler.addIncludes(); } + diff --git a/src/translator_jp.h b/src/translator_jp.h index 2e995a5..30ac856 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -29,6 +29,38 @@ #ifndef TRANSLATOR_JP_H #define TRANSLATOR_JP_H +class TranslatorJapaneseEn : public TranslatorEnglish +{ + public: + virtual QCString idLanguage() + { return "japanese"; } + virtual QCString latexLanguageSupportCommand() + { + return ""; + } + /*! returns the name of the package that is included by LaTeX */ + virtual QCString idLanguageCharset() + { +#ifdef _WIN32 + return "Shift_JIS"; +#else + return "euc-jp"; +#endif + } + virtual QCString trRTFansicp() + { + return "932"; + } + + /*! Used as ansicpg for RTF fcharset + * \see trRTFansicp() for a table of possible values. + */ + virtual QCString trRTFCharSet() + { + return "128"; + } +}; + class TranslatorJapanese : public Translator { private: @@ -64,7 +96,7 @@ class TranslatorJapanese : public Translator /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() - { return decode("¡Ê¤³¤ì¤é¤Ï¥á¥ó¥Ð´Ø¿ô¤Ç¤Ê¤¤¤³¤È¤ËÃí°Õ¡Ë"); } + { return decode("¡Ê¤³¤ì¤é¤Ï¥á¥½¥Ã¥É¤Ç¤Ê¤¤¤³¤È¤ËÃí°Õ¡Ë"); } /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() @@ -72,15 +104,15 @@ class TranslatorJapanese : public Translator /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() - { return decode("Typedef ¥á¥ó¥Ð¤Î²òÀâ"); } + { return decode("Typedef ¤Î²òÀâ"); } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() - { return decode("Enum ¥á¥ó¥Ð¤Î²òÀâ"); } + { return decode("Enum ¤Î²òÀâ"); } /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() - { return decode("´Ø¿ô¥á¥ó¥Ð¤Î²òÀâ"); } + { return decode("¥á¥½¥Ã¥É¤Î²òÀâ"); } /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() @@ -91,7 +123,7 @@ class TranslatorJapanese : public Translator } else { - return decode("¥á¥ó¥Ð¤Î²òÀâ"); + return decode("ÊÑ¿ô¤Î²òÀâ"); } } @@ -258,7 +290,7 @@ class TranslatorJapanese : public Translator QCString result=decode("¤³¤ì¤Ï"); if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+=decode("´Ø¿ô¡¢ÊÑ¿ô¡¢¥Þ¥¯¥í¡¢Îóµó·¿¡¢·¿ÄêµÁ¤Î"); + result+=decode("´Ø¿ô¡¢ÊÑ¿ô¡¢¥Þ¥¯¥í¡¢Enum¡¢Typedef ¤Î"); } else { @@ -389,13 +421,13 @@ class TranslatorJapanese : public Translator * list of typedefs */ virtual QCString trTypedefs() - { return decode("·¿ÄêµÁ"); } + { return decode("Typedef"); } /*! This is used in the documentation of a file as a header before the * list of enumerations */ virtual QCString trEnumerations() - { return decode("Îóµó·¿"); } + { return decode("Enum"); } /*! This is used in the documentation of a file as a header before the * list of (global) functions @@ -413,7 +445,7 @@ class TranslatorJapanese : public Translator * list of (global) variables */ virtual QCString trEnumerationValues() - { return decode("ÎóµóÃÍ"); } + { return decode("Enum ÃÍ"); } /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ @@ -430,19 +462,19 @@ class TranslatorJapanese : public Translator * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() - { return decode("·¿ÄêµÁ¤Î²òÀâ"); } + { return decode("Typedef ¤Î²òÀâ"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ virtual QCString trEnumerationTypeDocumentation() - { return decode("Îóµó·¿¤Î²òÀâ"); } + { return decode("Enum ¤Î²òÀâ"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration values */ virtual QCString trEnumerationValueDocumentation() - { return decode("ÎóµóÃͤβòÀâ"); } + { return decode("Enum ÃͤβòÀâ"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions @@ -609,25 +641,25 @@ class TranslatorJapanese : public Translator /* these are for the member sections of a class, struct or union */ virtual QCString trPublicMembers() - { return decode("Public ¥á¥ó¥Ð"); } + { return decode("Public ¥á¥½¥Ã¥É"); } virtual QCString trPublicSlots() { return decode("Public ¥¹¥í¥Ã¥È"); } virtual QCString trSignals() { return decode("¥·¥°¥Ê¥ë"); } virtual QCString trStaticPublicMembers() - { return decode("Static Public ¥á¥ó¥Ð"); } + { return decode("Static Public ¥á¥½¥Ã¥É"); } virtual QCString trProtectedMembers() - { return decode("Protected ¥á¥ó¥Ð"); } + { return decode("Protected ¥á¥½¥Ã¥É"); } virtual QCString trProtectedSlots() { return decode("Protected ¥¹¥í¥Ã¥È"); } virtual QCString trStaticProtectedMembers() - { return decode("Static Protected ¥á¥ó¥Ð"); } + { return decode("Static Protected ¥á¥½¥Ã¥É"); } virtual QCString trPrivateMembers() - { return decode("Private ¥á¥ó¥Ð"); } + { return decode("Private ¥á¥½¥Ã¥É"); } virtual QCString trPrivateSlots() { return decode("Private ¥¹¥í¥Ã¥È"); } virtual QCString trStaticPrivateMembers() - { return decode("Static Private ¥á¥ó¥Ð"); } + { return decode("Static Private ¥á¥½¥Ã¥É"); } /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -880,22 +912,22 @@ class TranslatorJapanese : public Translator } virtual QCString trPublicTypes() { - return decode("¸ø³«·¿"); + return decode("Public ·¿"); } virtual QCString trPublicAttribs() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return decode("¥Ç¡¼¥¿¥Õ¥£¡¼¥ë¥É"); + return decode("ÊÑ¿ô"); } else { - return decode("Public °À­"); + return decode("Public ÊÑ¿ô"); } } virtual QCString trStaticPublicAttribs() { - return decode("Static Public °À­"); + return decode("Static Public ÊÑ¿ô"); } virtual QCString trProtectedTypes() { @@ -903,11 +935,11 @@ class TranslatorJapanese : public Translator } virtual QCString trProtectedAttribs() { - return decode("Protected °À­"); + return decode("Protected ÊÑ¿ô"); } virtual QCString trStaticProtectedAttribs() { - return decode("Static Protected °À­"); + return decode("Static Protected ÊÑ¿ô"); } virtual QCString trPrivateTypes() { @@ -915,11 +947,11 @@ class TranslatorJapanese : public Translator } virtual QCString trPrivateAttribs() { - return decode("Private °À­"); + return decode("Private ÊÑ¿ô"); } virtual QCString trStaticPrivateAttribs() { - return decode("Static Private °À­"); + return decode("Static Private ÊÑ¿ô"); } ////////////////////////////////////////////////////////////////////////// @@ -1334,4 +1366,5 @@ class TranslatorJapanese : public Translator } }; + #endif diff --git a/src/translator_sr.h b/src/translator_sr.h new file mode 100644 index 0000000..aa5502b --- /dev/null +++ b/src/translator_sr.h @@ -0,0 +1,1400 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2002 by Dimitri van Heesch. + * + * 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 + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef TRANSLATOR_SR_H +#define TRANSLATOR_SR_H + +// translation by Dejan D. M. Milosavljevic ; + +class TranslatorSerbian : public Translator +{ + QCString decode(const QCString& sInput) + { +#ifdef _WIN32 + return ISO88592ToWin1250(sInput); +#else + return sInput; +#endif + } + + + public: + + // --- Language control methods ------------------- + + /*! Used for identification of the language. The identification + * should not be translated. It should be replaced by the name + * of the language in English using lower-case characters only + * (e.g. "czech", "japanese", "russian", etc.). It should be equal to + * the identification used in language.cpp. + */ + virtual QCString idLanguage() + { return "serbian"; } + + /*! Used to get the LaTeX command(s) for the language support. + * This method should return string with commands that switch + * LaTeX to the desired language. For example + *
    "\\usepackage[german]{babel}\n"
    +     *  
    + * or + *
    "\\usepackage{polski}\n"
    +     *  "\\usepackage[latin2]{inputenc}\n"
    +     *  "\\usepackage[T1]{fontenc}\n"
    +     *  
    + * + * The English LaTeX does not use such commands. Because of this + * the empty string is returned in this implementation. + */ + virtual QCString latexLanguageSupportCommand() + { + return ""; + } + + /*! return the language charset. This will be used for the HTML output */ + virtual QCString idLanguageCharset() + { +#ifdef _WIN32 + { return "windows-1250"; } +#else + { return "iso-8859-2"; } +#endif + } + + // --- Language translation methods ------------------- + + /*! used in the compound documentation before a list of related functions. */ + virtual QCString trRelatedFunctions() + { return "Povezane funkcije"; } + + /*! subscript for the related functions. */ + virtual QCString trRelatedSubscript() + { return decode( "(To nisu funkcije èlanice.)" ); } + + /*! header that is put before the detailed description of files, classes and namespaces. */ + virtual QCString trDetailedDescription() + { return decode( "Detaljno obja¹njenje" ); } + + /*! header that is put before the list of typedefs. */ + virtual QCString trMemberTypedefDocumentation() + { return decode( "Dokumentacija typedef èlanova" ); } + + /*! header that is put before the list of enumerations. */ + virtual QCString trMemberEnumerationDocumentation() + { return decode( "Dokumentacija enum èlanova" ); } + + /*! header that is put before the list of member functions. */ + virtual QCString trMemberFunctionDocumentation() + { return "Dokumentacija funkcija èlanica"; } + + /*! header that is put before the list of member attributes. */ + virtual QCString trMemberDataDocumentation() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Dokumentacija èlanova"; + } + else + { + return "Documentacija javnoh èlanova"; + } + } + + /*! this is the text of a link put after brief descriptions. */ + virtual QCString trMore() + { return "Jo¹..."; } + + /*! put in the class documentation */ + virtual QCString trListOfAllMembers() + { return "Spisak svih èlanova."; } + + /*! used as the title of the "list of all members" page of a class */ + virtual QCString trMemberList() + { return "Spisak èlanova"; } + + /*! this is the first part of a sentence that is followed by a class name */ + virtual QCString trThisIsTheListOfAllMembers() + { return "Ovo je spisak svih èlanova "; } + + /*! this is the remainder of the sentence after the class name */ + virtual QCString trIncludingInheritedMembers() + { return ", ukljuèujuæi nasleðene èlanove."; } + + /*! 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="Napravljeno automatski Doxygen-om"; + if (s) result+=(QCString)" za "+s; + result+=" od izvornog koda."; + return result; + } + + /*! put after an enum name in the list of all members */ + virtual QCString trEnumName() + { return "ime enum-a "; } + + /*! put after an enum value in the list of all members */ + virtual QCString trEnumValue() + { return "vrednost enum-a"; } + + /*! put after an undocumented member in the list of all members */ + virtual QCString trDefinedIn() + { return "definisano u"; } + + // 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 "Moduli"; } + + /*! This is put above each page as a link to the class hierarchy */ + virtual QCString trClassHierarchy() + { return "Stablo klasa"; } + + /*! This is put above each page as a link to the list of annotated classes */ + virtual QCString trCompoundList() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Sve strukture"; + } + else + { + return "Sve klase"; + } + } + + /*! This is put above each page as a link to the list of documented files */ + virtual QCString trFileList() + { return "Spisak fajlova"; } + + /*! This is put above each page as a link to the list of all verbatim headers */ + virtual QCString trHeaderFiles() + { return "Zaglavlja"; } + + /*! This is put above each page as a link to all members of compounds. */ + virtual QCString trCompoundMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Svi èlanovi struktura"; + } + else + { + return "Svi èlanovi klasa"; + } + } + + /*! This is put above each page as a link to all members of files. */ + virtual QCString trFileMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Globalni"; + } + else + { + return "Lokalni"; + } + } + + /*! This is put above each page as a link to all related pages. */ + virtual QCString trRelatedPages() + { return "Stranice povezane s ovom"; } + + /*! This is put above each page as a link to all examples. */ + virtual QCString trExamples() + { return "Primeri"; } + + /*! This is put above each page as a link to the search engine. */ + virtual QCString trSearch() + { return "Tra¾i"; } + + /*! This is an introduction to the class hierarchy. */ + virtual QCString trClassHierarchyDescription() + { return "Stablo nasleðivanja je slo¾eno ""pribli¾no po abecedi:"; } + + /*! This is an introduction to the list with all files. */ + virtual QCString trFileListDescription(bool extractAll) + { + QCString result="Spisak svih "; + if (!extractAll) result+="dokumetovanih "; + result+="fajlova, sa kratkim opisom:"; + return result; + } + + /*! This is an introduction to the annotated compound list. */ + virtual QCString trCompoundListDescription() + { + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Spisak struktura sa kratkim opisom:"; + } + else + { + return "Spisak klasa, struktura, unija i interjfejsa sa kratkim opisom:"; + + } + } + + /*! This is an introduction to the page with all class members. */ + virtual QCString trCompoundMembersDescription(bool extractAll) + { + QCString result="Spisak svih "; + if (!extractAll) + { + result+="dokumentovanih "; + } + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="èlanova struktura ili unija"; + } + else + { + result+="èlanova klasa"; + } + result+=" sa linkovima na "; + if (extractAll) + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="dokumentaciju èlanova struktura/unija:"; + } + else + { + result+="dokumentaciju svakog èlana klase:"; + } + } + else + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="strukture/uniije koje pripadaju:"; + } + else + { + result+="klase koje pripadaju:"; + } + } + return result; + } + + /*! This is an introduction to the page with all file members. */ + virtual QCString trFileMembersDescription(bool extractAll) + { + QCString result="Spisak svih "; + if (!extractAll) result+="dokumentovanih "; + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="funkcija, promenjiva, makro zamena, enum-a, i typedef-va"; + } + else + { + result+="èlanova"; + } + + result+=" sa linkovima na "; + + if (extractAll) + result+="fajlove u kojima se nalaze:"; + else + result+=" dokumentaciju:"; + return decode( result ); + } + + /*! This is an introduction to the page with the list of all header files. */ + virtual QCString trHeaderFilesDescription() + { return decode( "Zaglavlja koje izgraðuju API:" ); } + + /*! This is an introduction to the page with the list of all examples */ + virtual QCString trExamplesDescription() + { return "Spisak primera:"; } + + /*! This is an introduction to the page with the list of related pages */ + virtual QCString trRelatedPagesDescription() + { return decode( "Spisak svih slèinih stranica:" ); } + + /*! This is an introduction to the page with the list of class/file groups */ + virtual QCString trModulesDescription() + { return "Spisak svih modula:"; } + + /*! This sentences is used in the annotated class/file lists if no brief + * description is given. + */ + virtual QCString trNoDescriptionAvailable() + { return "Opis nije dostupan"; } + + // index titles (the project name is prepended for these) + + + /*! This is used in HTML as the title of index.html. */ + virtual QCString trDocumentation() + { return "Dokumentacija"; } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all groups. + */ + virtual QCString trModuleIndex() + { return "Index modula"; } + + /*! This is used in LaTeX as the title of the chapter with the + * class hierarchy. + */ + virtual QCString trHierarchicalIndex() + { return "Hijerarhijski sad¾raj"; } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index. + */ + virtual QCString trCompoundIndex() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode( "Glavni sadr¾aj" ); + } + else + { + return decode( "Glavni sadr¾aj" ); + } + } + + /*! This is used in LaTeX as the title of the chapter with the + * list of all files. + */ + virtual QCString trFileIndex() + { return "Indeks fajlova"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all groups. + */ + virtual QCString trModuleDocumentation() + { return "Dokumentacija modula"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all classes, structs and unions. + */ + virtual QCString trClassDocumentation() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Dokumentacija stuktura"; + } + else + { + return "Dokumentacija klasa"; + } + } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all files. + */ + virtual QCString trFileDocumentation() + { return "Dokumentacija fajla"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all examples. + */ + virtual QCString trExampleDocumentation() + { return "Dokumentacija primera"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all related pages. + */ + virtual QCString trPageDocumentation() + { return "Dokumentacija stranice"; } + + /*! This is used in LaTeX as the title of the document */ + virtual QCString trReferenceManual() + { return decode("Priruènik"); } + + /*! This is used in the documentation of a file as a header before the + * list of defines + */ + virtual QCString trDefines() + { return "Makro zamene"; } + + /*! This is used in the documentation of a file as a header before the + * list of function prototypes + */ + virtual QCString trFuncProtos() + { return "Deklaracija funkcije"; } + + /*! This is used in the documentation of a file as a header before the + * list of typedefs + */ + virtual QCString trTypedefs() + { return "Typedef-ovi"; } + + /*! This is used in the documentation of a file as a header before the + * list of enumerations + */ + virtual QCString trEnumerations() + { return "Enum-ovi"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) functions + */ + virtual QCString trFunctions() + { return "Funkcije"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trVariables() + { return "Promenjive"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trEnumerationValues() + { return "Vrednosti enum-ova"; } + + /*! This is used in the documentation of a file before the list of + * documentation blocks for defines + */ + virtual QCString trDefineDocumentation() + { return "Dokumentacija makro zamene"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for function prototypes + */ + virtual QCString trFunctionPrototypeDocumentation() + { return "Dokumentacija deklaracije funkcije"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for typedefs + */ + virtual QCString trTypedefDocumentation() + { return "Dokumentacija typedef-a"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration types + */ + virtual QCString trEnumerationTypeDocumentation() + { return "Dokumetacija enum tipa"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration values + */ + virtual QCString trEnumerationValueDocumentation() + { return "Dokumentacija enum vrednosti"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for functions + */ + virtual QCString trFunctionDocumentation() + { return "Dokumentacija funkcije"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for variables + */ + virtual QCString trVariableDocumentation() + { return "Dokumentacija promenjive"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds + */ + virtual QCString trCompounds() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Strukture"; + } + else + { + return "Klase i strukture"; + } + } + + /*! 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)"Napravljeno "+date; + if (projName) result+=(QCString)" za "+projName; + result+=(QCString)" od"; + return result; + } + /*! This is part of the sentence used in the standard footer of each page. + */ + virtual QCString trWrittenBy() + { + return "napisao"; + } + + /*! this text is put before a class diagram */ + virtual QCString trClassDiagram(const char *clName) + { + return decode( QCString("Dijagram nasleðivanja za klasu ") + clName+":" ); + } + + /*! this text is generated when the \\internal command is used. */ + virtual QCString trForInternalUseOnly() + { return decode( "Samo za unutrasnju upotrebu." ); } + + /*! this text is generated when the \\reimp command is used. */ + virtual QCString trReimplementedForInternalReasons() + { return decode("Preuraðeno zbog internih razloga; Nema uticaja na API." ); } + + /*! this text is generated when the \\warning command is used. */ + virtual QCString trWarning() + { return "Upozorenje"; } + + /*! this text is generated when the \\bug command is used. */ + virtual QCString trBugsAndLimitations() + { return decode("Gre¹ke i ogranièenja"); } + + /*! this text is generated when the \\version command is used. */ + virtual QCString trVersion() + { return "Verzija"; } + + /*! this text is generated when the \\date command is used. */ + virtual QCString trDate() + { return "Datum"; } + + /*! this text is generated when the \\return command is used. */ + virtual QCString trReturns() + { return decode( "Vraæenene vrednosti" ); } + + /*! this text is generated when the \\sa command is used. */ + virtual QCString trSeeAlso() + { return "Takoðe pogledati"; } + + /*! this text is generated when the \\param command is used. */ + virtual QCString trParameters() + { return "Parametri"; } + + /*! this text is generated when the \\exception command is used. */ + virtual QCString trExceptions() + { return "Izuzeci"; } + + /*! this text is used in the title page of a LaTeX document. */ + virtual QCString trGeneratedBy() + { return "Napravio"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990307 +////////////////////////////////////////////////////////////////////////// + + /*! used as the title of page containing all the index of all namespaces. */ + virtual QCString trNamespaceList() + { return "Spisak prostora imena"; } + + /*! used as an introduction to the namespace list */ + virtual QCString trNamespaceListDescription(bool extractAll) + { + QCString result="Spisak svih "; + if (!extractAll) result+="dokumentovanih "; + result+="prostora imena sa kratkim opisom:"; + return result; + } + + /*! used in the class documentation as a header before the list of all + * friends of a class + */ + virtual QCString trFriends() + { return "Prijatelji"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990405 +////////////////////////////////////////////////////////////////////////// + + /*! used in the class documentation as a header before the list of all + * related classes + */ + virtual QCString trRelatedFunctionDocumentation() + { return "Dokumentacija prijateljskih funkcija ili klasa"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990425 +////////////////////////////////////////////////////////////////////////// + + /*! used as the title of the HTML page of a class/struct/union */ + virtual QCString trCompoundReference(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result( "Dokumentacija " ); + + switch(compType) + { + case ClassDef::Class: result+="klase "; break; + case ClassDef::Struct: result+="strukture "; break; + case ClassDef::Union: result+="unije "; break; + case ClassDef::Interface: result+="interfejsa "; break; + case ClassDef::Exception: result+="izuzetka "; break; + } + if (isTemplate) result+="¹vablona "; + + result += clName; + return decode( result ); + } + + /*! used as the title of the HTML page of a file */ + virtual QCString trFileReference(const char *fileName) + { + QCString result=fileName; + result+=" Opis fajla"; + return result; + } + + /*! used as the title of the HTML page of a namespace */ + virtual QCString trNamespaceReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" Opis prostora imena"; + return result; + } + + virtual QCString trPublicMembers() + { return decode("Javni èlanovi"); } + virtual QCString trPublicSlots() + { return "Javni slotovi"; } + virtual QCString trSignals() + { return "Signali"; } + virtual QCString trStaticPublicMembers() + { return decode("Zajednièki javni èlanovi"); } + virtual QCString trProtectedMembers() + { return decode("Zastiæeni èlanovi"); } + virtual QCString trProtectedSlots() + { return decode("Zastiæeni slotovi"); } + virtual QCString trStaticProtectedMembers() + { return decode("Zajednièki za¹tiæeni èlanovi"); } + virtual QCString trPrivateMembers() + { return decode("Privani èlanovi"); } + virtual QCString trPrivateSlots() + { return decode("Privatni slotovi"); } + virtual QCString trStaticPrivateMembers() + { return decode("Zajednièki privatni èlanovi"); } + + /*! this function is used to produce a comma-separated list of items. + * use generateMarker(i) to indicate where item i should be put. + */ + virtual QCString trWriteList(int numEntries) + { + QCString result; + int i; + // the inherits list contain `numEntries' classes + for (i=0;i