From 7a048b942ae75eae857fb7f7466926b5749799c0 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Tue, 29 Aug 2000 16:55:26 +0000 Subject: Release-1.2.1-20000829 --- INSTALL | 4 +- README | 4 +- VERSION | 2 +- addon/configgen/config_templ.l | 14 + addon/configgen/configgen.cpp | 12 + doc/commands.doc | 2 +- doc/faq.doc | 6 +- doc/history.doc | 2 +- doc/trouble.doc | 2 +- packages/rpm/doxygen.spec | 2 +- src/classdef.cpp | 8 +- src/code.l | 34 +- src/config.h | 3 +- src/config.l | 43 +- src/diagram.cpp | 4 +- src/diagram.h | 2 +- src/doc.l | 90 +++- src/dot.cpp | 114 +++-- src/dot.h | 5 +- src/doxygen.cpp | 160 ++++--- src/doxygen.h | 1 + src/doxygen.pro.in | 2 +- src/htmlgen.cpp | 2 +- src/language.cpp | 5 + src/latexgen.h | 2 +- src/memberdef.cpp | 9 +- src/rtfgen.cpp | 12 +- src/translator_hr.h | 559 +++++++++++++++-------- src/translator_hu.h | 987 +++++++++++++++++++++++++++++++++++++++++ src/translator_it.h | 141 +++++- src/translator_pl.h | 88 ++++ src/util.cpp | 55 +-- 32 files changed, 1958 insertions(+), 418 deletions(-) create mode 100644 src/translator_hu.h diff --git a/INSTALL b/INSTALL index 202b9ae..907ad31 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.1 +DOXYGEN Version 1.2.1-20000829 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (13 August 2000) +Dimitri van Heesch (29 August 2000) diff --git a/README b/README index e1d89eb..ee24629 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.2.1 +DOXYGEN Version 1.2.1-20000829 Please read INSTALL for compilation instructions. @@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at Enjoy, -Dimitri van Heesch (13 August 2000) +Dimitri van Heesch (29 August 2000) diff --git a/VERSION b/VERSION index 6085e94..a63044a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.1 +1.2.1-20000829 diff --git a/addon/configgen/config_templ.l b/addon/configgen/config_templ.l index aab5755..98a688f 100644 --- a/addon/configgen/config_templ.l +++ b/addon/configgen/config_templ.l @@ -812,6 +812,20 @@ void checkConfig() #endif s=Config::includePath.next(); } + + // check aliases + s=Config::aliasList.first(); + while (s) + { + QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*="); + QCString alias=s; + alias=alias.stripWhiteSpace(); + if (alias.find(re)!=0) + { + err("Illegal alias format `%s'. Use \"name=value\"\n",alias.data()); + } + s=Config::aliasList.next(); + } // check dot path if (!Config::dotPath.isEmpty()) diff --git a/addon/configgen/configgen.cpp b/addon/configgen/configgen.cpp index 4367f20..48146ee 100644 --- a/addon/configgen/configgen.cpp +++ b/addon/configgen/configgen.cpp @@ -1014,6 +1014,18 @@ void init() "disable (NO) the test list. This list is created by putting \\test \n" "commands in the documentation.\n" ); + ConfigList::add( "aliasList", + "ALIASES", + "", + "list of aliases", + "This tag can be used to specify a number of aliases that acts \n" + "as commands in the documentation. An alias has the form \"\\name=value\". \n" + "For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n" + "put the command \\sideeffect (or @sideeffect) in the documentation, which \n" + "will result in a user defined paragraph with heading \"Side Effects:\". \n" + "You can put \\n's in the value part of an alias to insert newlines. \n" + "Predefined commands cannot be overwritten using aliases. \n" + ); //----------------------------------------------------------------------------------------------- ConfigInfo::add( "Messages","configuration options related to warning and progress messages"); //----------------------------------------------------------------------------------------------- diff --git a/doc/commands.doc b/doc/commands.doc index 80b032b..46f01f4 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -282,7 +282,7 @@ Doxygen. Unrecognized commands are treated as normal text. (either global or as a member of a class). This command is needed if a comment block is \e not located before the function declaration or definition. A full function declaration should be specified after the - \fn command. The argument ends at the end of the line. + \\fn command. The argument ends at the end of the line. \par Example: \verbinclude func.h diff --git a/doc/faq.doc b/doc/faq.doc index 0817742..4606a19 100644 --- a/doc/faq.doc +++ b/doc/faq.doc @@ -39,12 +39,12 @@ You should use the \\mainpage command inside a comment block like this: In order for global functions, variables, enums, typedefs, and defines to be documented you should document the file in which these commands are -located using a comment block containing a \file (or @file) +located using a comment block containing a \\file (or \@file) command. Alternatively, you can put all members in a group (or module) -using the \ingroup command and then document the group using a comment -block containing the \defgroup command. +using the \\ingroup command and then document the group using a comment +block containing the \\defgroup command.
  • How can I avoid that some code fragment is parsed by Doxyen?

    diff --git a/doc/history.doc b/doc/history.doc index beee457..ddded0a 100644 --- a/doc/history.doc +++ b/doc/history.doc @@ -111,7 +111,7 @@ special //! C++ line comments.

  • Unrelated members can now be documented. A page containing a list of these members is generated. -
  • Added an \include command to insert blocks of source code +
  • Added an \\include command to insert blocks of source code into the documentation.
  • Warnings are generated for members that are undocumented.
  • You can now specify your own HTML headers and footers for the diff --git a/doc/trouble.doc b/doc/trouble.doc index 1f309bc..6e7be24 100644 --- a/doc/trouble.doc +++ b/doc/trouble.doc @@ -62,7 +62,7 @@ documentation, because of possible ambiguities or lack of information about the context in which the code fragment is found.
  • It is not possible to insert a non-member function f in a class A - using the \relates command, if class A already has a member with name f + using the \\relates command, if class A already has a member with name f and the same argument list.
  • There is only very limited support for member specialization at the moment. It only works if there is a specialized template class as diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index 0625b70..d27b856 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ Name: doxygen -Version: 1.2.1 +Version: 1.2.1-20000829 Summary: documentation system for C, C++ and IDL Release: 1 Source0: doxygen-%{version}.src.tar.gz diff --git a/src/classdef.cpp b/src/classdef.cpp index be5f1c2..84e047d 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1200,9 +1200,11 @@ void ClassDef::writeMemberList(OutputList &ol) ol.writeString(")"); memberWritten=TRUE; } - if ((protect!=Public || md->isStatic() || virt!=Normal || - md->isFriend() || md->isRelated() || - md->getMemberSpecifiers()!=0 + if ((protect!=Public || virt!=Normal || + md->isFriend() || md->isRelated() || md->isExplicit() || + md->isMutable() || (md->isInline() && Config::inlineInfoFlag) || + md->isSignal() || md->isSlot() || + md->isStatic() ) && memberWritten) { diff --git a/src/code.l b/src/code.l index 7825142..4086dd3 100644 --- a/src/code.l +++ b/src/code.l @@ -447,7 +447,9 @@ static bool getLink(const char *className, { md->addSourceReference(g_currentMemberDef); } - //printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data()); + //printf("d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getOutputFileBase().data(),d->name().data(),md->name().data()); + //printf("g_classVar=`%s' type=`%s'\n",g_classVar ? g_classVar->name().data() : "none",md->typeString()); + writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(), md->anchor(),text ? text : memberName); return TRUE; @@ -559,8 +561,36 @@ static void generateMemberLink(OutputList &ol,const char *varName, ClassDef *vcd = getResolvedClass(g_classScope); if (vcd && vcd->isLinkable()) { - //printf("Found class for variable `%s'\n",varName); + //printf("Found class %s for variable `%s'\n",g_classScope.data(),varName); MemberName *vmn=memberNameDict[varName]; + if (vmn==0) + { + int vi; + QCString vn=varName; + QCString scope; + if ((vi=vn.findRev("::"))!=-1) // explicit scope A::b(), probably static member + { + ClassDef *jcd = getClass(vn.left(vi)); + vn=vn.right(vn.length()-vi-2); + vmn=memberNameDict[vn]; + //printf("Trying name `%s' scope=%s\n",vn.data(),scope.data()); + MemberNameIterator vmni(*vmn); + MemberDef *vmd; + for (;(vmd=vmni.current());++vmni) + { + if ((vmd->isVariable() || vmd->isFunction()) && + vmd->getClassDef()==jcd) + { + //printf("Found variable type=%s\n",vmd->typeString()); + ClassDef *mcd=stripClassName(vmd->typeString()); + if (mcd && mcd->isLinkable()) + { + if (generateClassMemberLink(ol,mcd,memName)) return; + } + } + } + } + } if (vmn) { //printf("There is a variable with name `%s'\n",varName); diff --git a/src/config.h b/src/config.h index 81e6a4e..7160451 100644 --- a/src/config.h +++ b/src/config.h @@ -1,4 +1,4 @@ -/* This file was generated by configgen on Sat Aug 12 16:16:35 2000 +/* This file was generated by configgen on Fri Aug 25 21:22:11 2000 * from config_templ.h * * DO NOT EDIT! @@ -68,6 +68,7 @@ struct Config static QStrList sectionFilterList; // list of section filters that are enabled static bool generateTodoList; // do we want a todo list? static bool generateTestList; // do we want a test list? + static QStrList aliasList; // list of aliases static bool quietFlag; // generate progress messages flag static bool warningFlag; // generate warnings flag static bool warningUndocFlag; // generate undocumented warnings diff --git a/src/config.l b/src/config.l index 75a4223..1965934 100644 --- a/src/config.l +++ b/src/config.l @@ -1,4 +1,4 @@ -/* This file was generated by configgen on Sun Aug 13 14:05:26 2000 +/* This file was generated by configgen on Fri Aug 25 21:22:11 2000 * from config_templ.l * * DO NOT EDIT! @@ -105,6 +105,7 @@ int Config::tabSize = 8; QStrList Config::sectionFilterList; bool Config::generateTodoList = TRUE; bool Config::generateTestList = TRUE; +QStrList Config::aliasList; bool Config::quietFlag = FALSE; bool Config::warningFlag = TRUE; bool Config::warningUndocFlag = TRUE; @@ -361,6 +362,8 @@ static void readIncludeFile(const char *incName) "ENABLED_SECTIONS"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::sectionFilterList; elemStr=""; } "GENERATE_TODOLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTodoList; } "GENERATE_TESTLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTestList; } +"ALIASES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::aliasList; l->clear(); elemStr=""; } +"ALIASES"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::aliasList; elemStr=""; } "QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; } "WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; } "WARN_IF_UNDOCUMENTED"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningUndocFlag; } @@ -595,6 +598,14 @@ void dumpConfig() } printf("generateTodoList=`%d'\n",Config::generateTodoList); printf("generateTestList=`%d'\n",Config::generateTestList); + { + char *is=Config::aliasList.first(); + while (is) + { + printf("aliasList=`%s'\n",is); + is=Config::aliasList.next(); + } + } printf("# configuration options related to warning and progress messages\n"); printf("quietFlag=`%d'\n",Config::quietFlag); printf("warningFlag=`%d'\n",Config::warningFlag); @@ -817,6 +828,7 @@ void Config::init() Config::sectionFilterList.clear(); Config::generateTodoList = TRUE; Config::generateTestList = TRUE; + Config::aliasList.clear(); Config::quietFlag = FALSE; Config::warningFlag = TRUE; Config::warningUndocFlag = TRUE; @@ -1310,6 +1322,20 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; + t << "# This tag can be used to specify a number of aliases that acts \n"; + t << "# as commands in the documentation. An alias has the form \"\\name=value\". \n"; + t << "# For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n"; + t << "# put the command \\sideeffect (or @sideeffect) in the documentation, which \n"; + t << "# will result in a user defined paragraph with heading \"Side Effects:\". \n"; + t << "# Predefined commands cannot be overwritten using aliases. \n"; + t << "\n"; + } + t << "ALIASES = "; + writeStringList(t,Config::aliasList); + t << "\n"; + if (!sl) + { + t << "\n"; } t << "#---------------------------------------------------------------------------\n"; t << "# configuration options related to warning and progress messages\n"; @@ -2374,6 +2400,7 @@ void substituteEnvironmentVars() substEnvVarsInString( Config::outputLanguage ); substEnvVarsInStrList( Config::stripFromPath ); substEnvVarsInStrList( Config::sectionFilterList ); + substEnvVarsInStrList( Config::aliasList ); substEnvVarsInString( Config::warnFormat ); substEnvVarsInStrList( Config::inputSources ); substEnvVarsInStrList( Config::filePatternList ); @@ -2635,6 +2662,20 @@ void checkConfig() #endif s=Config::includePath.next(); } + + // check aliases + s=Config::aliasList.first(); + while (s) + { + QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*="); + QCString alias=s; + alias=alias.stripWhiteSpace(); + if (alias.find(re)!=0) + { + err("Illegal alias format `%s'. Use \"name=value\"\n",alias.data()); + } + s=Config::aliasList.next(); + } // check dot path if (!Config::dotPath.isEmpty()) diff --git a/src/diagram.cpp b/src/diagram.cpp index 2173f16..4808565 100644 --- a/src/diagram.cpp +++ b/src/diagram.cpp @@ -1246,8 +1246,8 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path, } -void ClassDiagram::writeImageMap(QTextStream &t,const char *path, - const char *fileName, bool generateMap) +void ClassDiagram::writeImage(QTextStream &t,const char *path, + const char *fileName, bool generateMap) { uint baseRows=base->computeRows(); uint superRows=super->computeRows(); diff --git a/src/diagram.h b/src/diagram.h index 74495b8..4338772 100644 --- a/src/diagram.h +++ b/src/diagram.h @@ -123,7 +123,7 @@ class ClassDiagram ~ClassDiagram(); void writeFigure(QTextStream &t,const char *path, const char *file); - void writeImageMap(QTextStream &t,const char *path, + void writeImage(QTextStream &t,const char *path, const char *file,bool generateMap=TRUE); private: TreeDiagram *base; diff --git a/src/doc.l b/src/doc.l index 935b531..695a07b 100644 --- a/src/doc.l +++ b/src/doc.l @@ -90,6 +90,7 @@ static bool inAttentionBlock; static bool inParBlock; static QCString sectionRef; static bool insideVerbatim = FALSE; +static bool insidePre = FALSE; static int depthIf; //static int currentListIndentLevel; static QStack currentListIndent; @@ -486,10 +487,15 @@ static void addListItemMarker(const char *marker,int dashPos,bool enumerated) int indent=0; for (i=0;iabsFilePath().data())); @@ -944,7 +951,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") } {CMD}"endlink"/[^a-z_A-Z0-9] { warn(yyFileName,yyLineNr, "Warning: \\endlink without \\link " - "in documentation." + "in documentation of this entity." ); } {CMD}"addindex"{B}+ { @@ -1460,10 +1467,10 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") outDoc->writeObjectLink(0,internalRefFile,internalRefAnchor,text); BEGIN(DocScan); } -{CMD}"ref" { +{CMD}"ref"/{BN} { BEGIN(DocRefName); } -{CMD}"refitem" { +{CMD}"refitem"/{BN} { BEGIN(DocRefItem); } {CMD}"if"/{BN} { @@ -1476,7 +1483,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") { warn(yyFileName,yyLineNr, "Warning: documentation block contains \\endif without " - "matching \\if found in documentation." + "matching \\if found in documentation of this entity." ); } else @@ -1515,7 +1522,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") } else if (!generateLink(*outDoc,className,yytext,TRUE,0)) { - warn(yyFileName,yyLineNr,"Warning: reference to unknown section %s!",yytext); + warn(yyFileName,yyLineNr,"Warning: reference to unknown section %s in the documentation of this entity!",yytext); //outDoc->writeBoldString(" unknown reference! "); } BEGIN(DocScan); @@ -1548,7 +1555,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") } else if (!generateLink(*outDoc,className,sectionRef,TRUE,text)) { - warn(yyFileName,yyLineNr,"Warning: reference to unknown section %s!",sectionRef.data()); + warn(yyFileName,yyLineNr,"Warning: reference to unknown section %s in the documentation of this entity!",sectionRef.data()); outDoc->writeBoldString(" unknown reference! "); } BEGIN(DocScan); @@ -1566,7 +1573,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") } else { - warn(yyFileName,yyLineNr,"Warning: reference to unknown section %s!",sectionRef.data()); + warn(yyFileName,yyLineNr,"Warning: reference to unknown section %s in the documentation of this entity!",sectionRef.data()); outDoc->writeBoldString(" unknown reference! "); } BEGIN(DocScan); @@ -1623,10 +1630,10 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") BEGIN(DocScan); } [a-z_A-Z0-9\.\-]+ { - warn(yyFileName,yyLineNr,"Warning: %s is an unsupported output format for \\image",yytext); + warn(yyFileName,yyLineNr,"Warning: %s is an unsupported output format for \\image in the documentation of the entity",yytext); } \n { - warn(yyFileName,yyLineNr,"Warning: invalid \\image command found!"); + warn(yyFileName,yyLineNr,"Warning: invalid \\image command found in the documentation of this entity!"); outDoc->enableAll(); BEGIN(DocScan); } @@ -1637,7 +1644,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") } {CMD}"endcode"/[^a-z_A-Z0-9] { warn(yyFileName,yyLineNr,"Warning: \\endcode without \\code " - "in the documentation."); + "in the documentation of this entity."); } {ID}"<"[^>\ \t\n]*">"("::"{ID})+"("?[a-z_A-Z0-9,:\<\> \t\*\&]*")"? { @@ -1775,8 +1782,18 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") /*restoreOutputListState();*/ outDoc->popGeneratorState(); } -"<"{PRE}{ATTR}">" { outDoc->startPreFragment(); } -"" { outDoc->endPreFragment(); } +"<"{PRE}{ATTR}">" { + if (insidePre) + { + warn(yyFileName,yyLineNr,"Warning in the documentation of this entity:\nNested
     found in the documentation of this entity!");
    +					  }
    +  					  outDoc->startPreFragment(); 
    +					  insidePre=TRUE;
    +					}
    +""	        { 
    +  					  outDoc->endPreFragment(); 
    +					  insidePre=FALSE;
    +					}
     "<"{SUB}{ATTR}">"		{ outDoc->startSubscript(); }
     ""		{ outDoc->endSubscript(); }
     "<"{SUP}{ATTR}">"		{ outDoc->startSuperscript(); }
    @@ -1792,13 +1809,13 @@ DOCPARAM  ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
     					  if (currentListIndent.isEmpty())
     					  {
     					    warn(yyFileName,yyLineNr,
    -                                                 "Warning: more  tags than 
      tags in the documentation." + "Warning in the documentation of this entity:\nMore
    tags than
      tags in the documentation of this entity." ); } else if (currentListIndent.top()!="O") { warn(yyFileName,yyLineNr, - "Warning:
    tag does not end a
      tag in the documentation." + "Warning in the documentation of this entity:\nThe
    tag does not end a
      tag." ); } else @@ -1814,13 +1831,13 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") if (currentListIndent.isEmpty()) { warn(yyFileName,yyLineNr, - "Warning: more tags than
        tags in the documentation." + "Warning in the documentation of this entity:\nMore
      tags than
        tags." ); } else if (currentListIndent.top()!="U") { warn(yyFileName,yyLineNr, - "Warning:
      tag does not end a
        tag in the documentation." + "Warning in the documentation of this entity:\nThe
      tag does not end a
        tag." ); } else @@ -1834,7 +1851,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") currentListIndent.top()=="D") { warn(yyFileName,yyLineNr, - "Warning: The
      • tag can only be used inside a
          ...
        or a
          ...
        block." + "Warning in the documentation of this entity:\nThe
      • tag can only be used inside a
          ...
        or a
          ...
        block." ); } else @@ -1855,13 +1872,13 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") if (currentListIndent.isEmpty()) { warn(yyFileName,yyLineNr, - "Warning: more tags than
        tags in the documentation." + "Warning in the documentation of this entity:\nMore
        tags than
        tags in the documentation." ); } else if (currentListIndent.top()!="D") { warn(yyFileName,yyLineNr, - "Warning:
        tag does not end a
        tag in the documentation." + "Warning in the documentation of this entity:\nThe
        tag does not end a
        tag in the documentation." ); } else @@ -1875,7 +1892,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") currentListIndent.top()!="D") { warn(yyFileName,yyLineNr, - "Warning: The
        tag can only be used inside a
        ...
        block." + "Warning in the documentation of this entity:\nThe
        tag can only be used inside a
        ...
        block." ); } else @@ -1889,7 +1906,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") currentListIndent.top()!="D") { warn(yyFileName,yyLineNr, - "Warning: The
        tag can only be used inside a
        ...
        block." + "Warning in the documentation of this entity:\nThe
        tag can only be used inside a
        ...
        block." ); } else @@ -1935,7 +1952,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") {CMD}("\\"|"@"|"<"|">"|"&"|"$"|"#"|"%") { outDoc->docify(&yytext[1]); } -"%"[a-zA-Z_0-9\-]+ { +"%"[a-zA-Z_0-9\-]+ { outDoc->docify(yytext+1); } [a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"("[a-z_A-Z0-9,:\<\> \t\*\&]*")" { @@ -2012,7 +2029,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") outDoc->newParagraph(); } if (inBlock()) endBlock(); - addListItemMarker(strrchr(yytext,'\n')+1,dashPos,isEnumerated); + addListItemMarker(yytext,dashPos+1,isEnumerated); } ({B}*"\n"){2,}{B}* { // new paragraph if (insideArgumentList) @@ -2034,7 +2051,32 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") outDoc->writeChar(' '); } \n?{B}* { - outDoc->writeChar(' '); + if (insidePre) + { + outDoc->docify(yytext); + } + else + { + outDoc->writeChar(' '); + } + } +"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text + outDoc->docify(yytext); + } +{CMD}[a-z_A-Z][a-z_A-Z0-9]* { + QCString *pValue=aliasDict[yytext+1]; + if (pValue) + { + int i,l=pValue->length(); + for (i=l-1;i>=0;i--) + { + unput(pValue->at(i)); + } + } + else + { + warn(yyFileName,yyLineNr,"Warning in the documentation of this entity:\nUnknown command `%s' found.",yytext); + } } [a-z_A-Z0-9]+ { outDoc->docify(yytext); diff --git a/src/dot.cpp b/src/dot.cpp index ccf991f..d81d09d 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -1043,13 +1043,27 @@ static void findMaximalDotGraph(DotNode *root, QCString DotClassGraph::diskName() const { - return m_diskName + "_coll_graph"; + QString result=m_diskName.copy(); + switch (m_graphType) + { + case Implementation: + result+="_coll_graph"; + break; + case Interface: + result+="_intf_graph"; + break; + case Inheritance: + result+="_inherit_graph"; + break; + } + return result; } void DotClassGraph::writeGraph(QTextStream &out, GraphOutputFormat format, const char *path, - bool isTBRank) + bool isTBRank, + bool generateImageMap) { QDir d(path); // store the original directory @@ -1094,34 +1108,37 @@ void DotClassGraph::writeGraph(QTextStream &out, QDir::setCurrent(oldDir); return; } - // run dot again to create an image map - dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"", - Config::dotPath.data(),baseName.data(),baseName.data()); - if (iSystem(dotCmd)!=0) + if (generateImageMap) { - err("Error: Problems running dot. Check your installation!\n"); - QDir::setCurrent(oldDir); - return; - } - out << "

        m_label << "_" << mapName << "\" alt=\""; - switch (m_graphType) - { - case Implementation: - out << "Collaboration graph"; - break; - case Interface: - out << "Interface dependency graph"; - break; - case Inheritance: - out << "Inheritance graph"; - break; + switch (m_graphType) + { + case Implementation: + out << "Collaboration graph"; + break; + case Interface: + out << "Interface dependency graph"; + break; + case Inheritance: + out << "Inheritance graph"; + break; + } + out << "\">
        " << endl; + out << "m_label << "_" << mapName << "\">" << endl; + convertMapFile(out,baseName+".map"); + out << "" << endl; + thisDir.remove(baseName+".map"); } - out << "\">
        " << endl; - out << "m_label << "_" << mapName << "\">" << endl; - convertMapFile(out,baseName+".map"); - out << "

        " << endl; - thisDir.remove(baseName+".map"); } else if (format==EPS) // run dot to create a .eps image { @@ -1251,12 +1268,16 @@ DotInclDepGraph::~DotInclDepGraph() QCString DotInclDepGraph::diskName() const { - return m_diskName + "_incldep"; + QCString result=m_diskName.copy(); + if (m_inverse) result+="_dep"; + result+="_incl"; + return result; } void DotInclDepGraph::writeGraph(QTextStream &out, GraphOutputFormat format, - const char *path + const char *path, + bool generateImageMap ) { QDir d(path); @@ -1292,25 +1313,28 @@ void DotInclDepGraph::writeGraph(QTextStream &out, return; } - // run dot again to create an image map - dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"", - Config::dotPath.data(),baseName.data(),baseName.data()); - if (iSystem(dotCmd)!=0) + if (generateImageMap) { - err("Problems running dot. Check your installation!\n"); - QDir::setCurrent(oldDir); - return; - } + // run dot again to create an image map + dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"", + Config::dotPath.data(),baseName.data(),baseName.data()); + if (iSystem(dotCmd)!=0) + { + err("Problems running dot. Check your installation!\n"); + QDir::setCurrent(oldDir); + return; + } - out << "

        \"";"; - out << "
        " << endl; - out << "" << endl; - convertMapFile(out,baseName+".map"); - out << "

        " << endl; - thisDir.remove(baseName+".map"); + if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph"; + out << "\">"; + out << "

        " << endl; + out << "" << endl; + convertMapFile(out,baseName+".map"); + out << "" << endl; + thisDir.remove(baseName+".map"); + } } else if (format==EPS) { diff --git a/src/dot.h b/src/dot.h index b87059e..90a0df1 100644 --- a/src/dot.h +++ b/src/dot.h @@ -120,7 +120,7 @@ class DotClassGraph ~DotClassGraph(); bool isTrivial() const; void writeGraph(QTextStream &t,GraphOutputFormat f,const char *path, - bool TBRank=TRUE); + bool TBRank=TRUE,bool imageMap=TRUE); QCString diskName() const; private: @@ -141,7 +141,8 @@ class DotInclDepGraph public: DotInclDepGraph(FileDef *fd,bool inverse=FALSE); ~DotInclDepGraph(); - void writeGraph(QTextStream &t, GraphOutputFormat f,const char *path); + void writeGraph(QTextStream &t, GraphOutputFormat f,const char *path, + bool writeImageMap=TRUE); bool isTrivial() const; QCString diskName() const; diff --git a/src/doxygen.cpp b/src/doxygen.cpp index c18ba20..981d7d6 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -81,9 +81,10 @@ ClassDict classDict(1009); // all documented classes NamespaceDict namespaceDict(257); // all documented namespaces MemberNameDict memberNameDict(10007); // all class member names MemberNameDict functionNameDict(10007); // all functions -//StringDict substituteDict(1009); // class name substitutes +//StringDict substituteDict(1009); // class name substitutes SectionDict sectionDict(257); // all page sections StringDict excludeNameDict(1009); // sections +StringDict aliasDict(257); // aliases FileNameDict *inputNameDict; // sections FileNameDict *includeNameDict; // include names FileNameDict *exampleNameDict; // examples @@ -1081,8 +1082,9 @@ static MemberDef *addVariableToClass( MemberName *mn=memberNameDict[name]; if (mn) { - MemberDef *md=mn->first(); - while (md) + MemberNameIterator mni(*mn); + MemberDef *md; + for (mni.toFirst();(md=mni.current());++mni) { if (md->getClassDef()==cd && root->type==md->typeString()) // member already in the scope @@ -1090,7 +1092,6 @@ static MemberDef *addVariableToClass( addMemberDocs(root,md,def,0,FALSE); return md; } - md=mn->next(); } } // new member variable, typedef or enum value @@ -1212,8 +1213,9 @@ static MemberDef *addVariableToFile( MemberName *mn=functionNameDict[name]; if (mn) { - MemberDef *md=mn->first(); - while (md) + MemberNameIterator mni(*mn); + MemberDef *md; + for (mni.toFirst();(md=mni.current());++mni) { QCString nscope=removeAnnonymousScopes(scope); NamespaceDef *nd=0; @@ -1228,7 +1230,6 @@ static MemberDef *addVariableToFile( md->setRefItems(root->todoId,root->testId); return md; } - md=mn->next(); } } // new global variable, enum value or typedef @@ -1690,8 +1691,9 @@ static void buildMemberList(Entry *root) if ((mn=functionNameDict[rname])) { //printf("--> function %s already found!\n",rname.data()); - MemberDef *md=mn->first(); - while (md && !found) + MemberNameIterator mni(*mn); + MemberDef *md; + for (mni.toFirst();((md=mni.current()) && !found);++mni) { NamespaceDef *nd = md->getNamespaceDef(); NamespaceDef *rnd = 0; @@ -1709,7 +1711,7 @@ static void buildMemberList(Entry *root) ) { // see if we need to create a new member - found=nsName==rnsName && // members are in the same namespace + found=nsName==rnsName || // members are in the same namespace ((fd!=0 && // no external reference fd->absFilePath()==root->fileName // prototype in the same file ) || @@ -1735,7 +1737,6 @@ static void buildMemberList(Entry *root) } md->addSectionsToDefinition(root->anchors); } - md=mn->next(); } } if (!found) /* global function is unique with respect to the file */ @@ -2680,9 +2681,10 @@ static bool findUnrelatedFunction(Entry *root, { Debug::print(Debug::FindMembers,0,"3. Found function scope\n"); //int count=0; - MemberDef *md=mn->first(); + MemberNameIterator mni(*mn); + MemberDef *md; bool found=FALSE; - while (md) + for (mni.toFirst();(md=mni.current()) && !found;++mni) { bool ambig; NamespaceDef *nd=md->getNamespaceDef(); @@ -2716,7 +2718,6 @@ static bool findUnrelatedFunction(Entry *root, found=TRUE; } } - md=mn->next(); } if (!found) // no match { @@ -2727,11 +2728,9 @@ static bool findUnrelatedFunction(Entry *root, if (mn->count()>0) { warn_cont("Possible candidates:\n"); - md=mn->first(); - while (md) + for (mni.toFirst();(md=mni.current());++mni) { warn_cont(" %s\n",md->declaration()); - md=mn->next(); } } } @@ -3185,7 +3184,6 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl if (!className.isEmpty()) // class name is valid { int count=0; - //MemberDef *md=mn->first(); // for each member with that name MemberNameIterator mni(*mn); MemberDef *md; for (mni.toFirst();(md=mni.current());++mni) @@ -3328,37 +3326,22 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl int candidates=0; if (mn->count()>0) { - md=mn->first(); - while (md) + for (mni.toFirst();(md=mni.current());++mni) { ClassDef *cd=md->getClassDef(); if (cd!=0 && cd->name()==className) candidates++; - md=mn->next(); } } if (candidates>0) { warn_cont("Possible candidates:\n"); - md=mn->first(); - while (md) + for (mni.toFirst();(md=mni.current());++mni) { ClassDef *cd=md->getClassDef(); 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"); + warn_cont(" %s\n",md->declaration()); } - md=mn->next(); } } } @@ -3368,18 +3351,18 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl // for unique overloaded member we allow the class to be // omitted, this is to be Qt compatable. Using this should // however be avoided, because it is error prone - MemberDef *md=mn->first(); + MemberNameIterator mni(*mn); + MemberDef *md=mni.toFirst(); ASSERT(md); ClassDef *cd=md->getClassDef(); ASSERT(cd); QCString className=cd->name().copy(); - md=mn->next(); + ++mni; bool unique=TRUE; - while (md) + for (;(md=mni.current());++mni) { ClassDef *cd=md->getClassDef(); if (className!=cd->name()) unique=FALSE; - md=mn->next(); } if (unique) { @@ -3812,8 +3795,12 @@ static void findEnums(Entry *root) if (!e->name.isEmpty() && (fmn=(*mnd)[e->name])) // get list of members with the same name as the field { - MemberDef *fmd=fmn->first(); - while (fmd) // search for the scope with the right name + MemberNameIterator fmni(*fmn); + MemberDef *fmd; + for (fmni.toFirst(); + (fmd=fmni.current()) && fmd->isEnumValue(); + ++fmni + ) // search for the scope with the right name { if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') { @@ -3842,7 +3829,6 @@ static void findEnums(Entry *root) fmd->setEnumScope(md); // cross ref with enum name } } - fmd=fmn->next(); } } } @@ -3900,8 +3886,9 @@ static void findEnumDocumentation(Entry *root) MemberName *mn=memberNameDict[name]; if (mn) { - MemberDef *md=mn->first(); - while (md && !found) + MemberNameIterator mni(*mn); + MemberDef *md; + for (mni.toFirst();(md=mni.current()) && !found;++mni) { ClassDef *cd=md->getClassDef(); if (cd && cd->name()==className) @@ -3927,7 +3914,6 @@ static void findEnumDocumentation(Entry *root) md->addSectionsToDefinition(root->anchors); found=TRUE; } - md=mn->next(); } } else @@ -3939,7 +3925,7 @@ static void findEnumDocumentation(Entry *root) { MemberDef *md; MemberName *mn=functionNameDict[name]; - if (mn && (md=mn->first())) + if (mn && (md=mn->getFirst())) { md->setDocumentation(root->doc); md->setBriefDescription(root->brief); @@ -3981,16 +3967,16 @@ static void findDEV(const MemberNameList &mnl) { if (md->isEnumerate()) // member is an enum { - QList *fmdl = md->enumFieldList(); + MemberList *fmdl = md->enumFieldList(); int documentedEnumValues=0; if (fmdl) // enum has values { - MemberDef *fmd=fmdl->first(); + MemberListIterator fmni(*fmdl); + MemberDef *fmd; // for each enum value - while (fmd) + for (fmni.toFirst();(fmd=fmni.current());++fmni) { if (fmd->isLinkableInProject()) documentedEnumValues++; - fmd=fmdl->next(); } } // at least one enum value is documented @@ -4016,19 +4002,20 @@ static void findDocumentedEnumValues() static void computeMemberRelations() { - MemberName *mn=memberNameList.first(); - while (mn) // for each member name + MemberNameListIterator mnli(memberNameList); + MemberName *mn; + for ( ; (mn=mnli.current()) ; ++mnli ) // for each member name { MemberNameIterator mdi(*mn); - for ( ; mdi.current() ; ++mdi) // for each member with a specific arg list + MemberDef *md; + for ( ; (md=mdi.current()) ; ++mdi ) // for each member with a specific arg list { - MemberDef *md=mdi.current(); MemberNameIterator bmdi(*mn); - for ( ; bmdi.current() ; ++bmdi) // for each other member with that signature + MemberDef *bmd; + for ( ; (bmd=bmdi.current()) ; ++bmdi ) // for each other member with that signature { - MemberDef *bmd=bmdi.current(); ClassDef *bmcd = bmd->getClassDef(); - ClassDef *mcd = md->getClassDef(); + ClassDef *mcd = md->getClassDef(); //printf("Check relation between `%s'::`%s' and `%s'::`%s'\n", // mcd->name().data(),md->name().data(), // bmcd->name().data(),bmd->name().data() @@ -4060,7 +4047,6 @@ static void computeMemberRelations() } } } - mn=memberNameList.next(); } } @@ -4108,11 +4094,13 @@ static void generateFileSources() if (inputNameList.count()>0) { - FileName *fn=inputNameList.first(); - while (fn) + FileNameListIterator fnli(inputNameList); + FileName *fn; + for (;(fn=fnli.current());++fnli) { - FileDef *fd=fn->first(); - while (fd) + FileNameIterator fni(*fn); + FileDef *fd; + for (;(fd=fni.current());++fni) { bool src = !fd->isReference() && (fd->generateSource() || Config::sourceBrowseFlag); @@ -4121,9 +4109,7 @@ static void generateFileSources() msg("Generating code for file %s...\n",fd->name().data()); fd->writeSource(*outputList); } - fd=fn->next(); } - fn=inputNameList.next(); } } } @@ -4136,11 +4122,13 @@ static void generateFileDocs() if (inputNameList.count()>0) { - FileName *fn=inputNameList.first(); - while (fn) + FileNameListIterator fnli(inputNameList); + FileName *fn; + for (fnli.toFirst();(fn=fnli.current());++fnli) { - FileDef *fd=fn->first(); - while (fd) + FileNameIterator fni(*fn); + FileDef *fd; + for (fni.toFirst();(fd=fni.current());++fni) { bool doc = fd->isLinkableInProject(); if (doc) @@ -4149,9 +4137,7 @@ static void generateFileDocs() fd->writeDocumentation(*outputList); } - fd=fn->next(); } - fn=inputNameList.next(); } } } @@ -5728,6 +5714,38 @@ int main(int argc,char **argv) } s=Config::expandAsDefinedList.next(); } + + // add aliases to a dictionary + aliasDict.setAutoDelete(TRUE); + s=Config::aliasList.first(); + while (s) + { + if (aliasDict[s]==0) + { + QCString alias=s; + int i=alias.find('='); + if (i>0) + { + QCString name=alias.left(i).stripWhiteSpace(); + QCString value=alias.right(alias.length()-i-1); + value=substitute(value,"\\n","\n"); + //printf("Alias: found name=`%s' value=`%s'\n",name.data(),value.data()); + if (!name.isEmpty()) + { + QCString *dn=aliasDict[name]; + if (dn==0) // insert new alias + { + aliasDict.insert(name,new QCString(value)); + } + else // overwrite previous alias + { + *dn=value; + } + } + } + } + s=Config::aliasList.next(); + } BufStr input(inputSize+1); // Add one byte extra for \0 termination diff --git a/src/doxygen.h b/src/doxygen.h index 6229ac5..7b41698 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -99,6 +99,7 @@ extern FormulaList formulaList; extern FormulaDict formulaDict; extern FormulaDict formulaNameDict; extern StringDict tagDestinationDict; +extern StringDict aliasDict; extern QIntDict memberHeaderDict; // dictionary of the member groups heading extern QIntDict memberDocDict; // dictionary of the member groups heading extern QDict expandAsDefinedDict; diff --git a/src/doxygen.pro.in b/src/doxygen.pro.in index 417dea8..6de8edd 100644 --- a/src/doxygen.pro.in +++ b/src/doxygen.pro.in @@ -26,7 +26,7 @@ HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \ translator_nl.h translator_se.h translator_cz.h translator_fr.h \ translator_it.h formula.h debug.h membergroup.h htmlhelp.h \ translator_ru.h translator_pl.h dot.h rtfgen.h xml.h xml_dtd.h \ - reflist.h page.h sortdict.h + reflist.h page.h sortdict.h translator_hu.h SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \ memberdef.cpp membername.cpp index.cpp memberlist.cpp \ entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \ diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 4667631..e8cdc15 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -577,7 +577,7 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d, << " border=\"0\">" << endl << "" << endl; - d.writeImageMap(t,dir,fileName); + d.writeImage(t,dir,fileName); } void HtmlGenerator::startColorFont(uchar red,uchar green,uchar blue) diff --git a/src/language.cpp b/src/language.cpp index 186edae..31928a4 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -31,6 +31,7 @@ #include "translator_hr.h" #include "translator_pl.h" #include "translator_pt.h" +#include "translator_hu.h" #endif #define L_EQUAL(a) !stricmp(langName,a) @@ -100,6 +101,10 @@ bool setTranslator(const char *langName) { theTranslator=new TranslatorPortuguese; } + else if (L_EQUAL("hungarian")) + { + theTranslator=new TranslatorHungarian; + } #endif else // use the default language (i.e. english) { diff --git a/src/latexgen.h b/src/latexgen.h index b102f76..8a3a341 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -108,7 +108,7 @@ class LatexGenerator : public OutputGenerator void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ } void writeAnchor(const char *fileName,const char *name); - void startCodeFragment() { t << "\\small\\begin{verbatim}"; } + void startCodeFragment() { t << "\\footnotesize\\begin{verbatim}"; } void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; } void startPreFragment() { t << "\\small\\begin{alltt}"; } void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl; } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 266c45c..80c5ce6 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -972,10 +972,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, rmd = rmd->reimplements(); } - if (isStatic() || protection()!=Public || - lvirt!=Normal || isSignal() || isFriend() || - isRelated() || isSlot() || - getMemberSpecifiers()!=0 + if (protection()!=Public || lvirt!=Normal || + isFriend() || isRelated() || isExplicit() || + isMutable() || (isInline() && Config::inlineInfoFlag) || + isSignal() || isSlot() || + isStatic() ) { // write the member specifier list diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 8fef647..cb35eeb 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -1737,7 +1737,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d, newParagraph(); // create a gif file - d.writeImageMap(t,dir,fileName,FALSE); + d.writeImage(t,dir,fileName,FALSE); // display the file t << "{" << endl; @@ -2160,11 +2160,8 @@ void RTFGenerator::startDotGraph() void RTFGenerator::endDotGraph(DotClassGraph &g) { newParagraph(); - DBG_RTF(t <<"{\\comment This would be an image map..." << endl) - g.writeGraph(t,GIF,Config::rtfOutputDir); - - t << "}" << endl; + g.writeGraph(t,GIF,Config::rtfOutputDir,TRUE,FALSE); // display the file t << "{" << endl; @@ -2182,11 +2179,8 @@ void RTFGenerator::startInclDepGraph() void RTFGenerator::endInclDepGraph(DotInclDepGraph &g) { newParagraph(); - DBG_RTF(t <<"{\\comment This would be an image map..." << endl) - g.writeGraph(t,GIF,Config::rtfOutputDir); - - t << "}" << endl; + g.writeGraph(t,GIF,Config::rtfOutputDir,FALSE); //QCString diskName = g.diskName(); diff --git a/src/translator_hr.h b/src/translator_hr.h index 593b7ca..8b619e3 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -13,10 +13,16 @@ * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * - */ - +*/ // translation by Boris Bralo - +// Updates: +// -------- +// 2000/08/20 +// - Better handling of ISO-8859-2/ WIN 1250 stuff based on (actualy stolen from :-)) Czech translations +// implemented by Petr Prikryl (prikrylp@skil.cz). +// As opposed to Czech translation this one assumes that Doxygen strings are written in Linux ( it's true, +// I don't have QT pro licence ) , and uses ISOToWin function when built in WIN32 +// #ifndef TRANSLATOR_HR_H #define TRANSLATOR_HR_H @@ -24,249 +30,333 @@ class TranslatorCroatian : public Translator { + private: + /*! to avoid macro redefinition from translator_cz.h */ + /* Speed loss is actualy less than in Czech version due to + fewer QCString copying. + */ + inline QCString& decode(const QCString& sInput) + { +#ifdef _WIN32 + return ISOToWin(sInput); +#else + return const_cast(sInput); +#endif + } + /*! returns the string converted from windows-1250 to iso-8859-2 */ + QCString WinToISO(const QCString& sInput) + { + // The conversion table for characters >127 + // + static const char WinToISOTab[] = { + '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\xA9', '\x8B', '\xA6', '\xAB', '\xAE', '\xAC', + '\x90', '\x91', '\x92', '\x93', '\x94', '\x2E', '\x96', '\x97', + '\x98', '\x99', '\xB9', '\x9B', '\xB6', '\xBB', '\xBE', '\xBC', + '\xA0', '\x20', '\x20', '\xA3', '\xA4', '\xA1', '\xA6', '\xA7', + '\x22', '\xA9', '\xAA', '\x3C', '\xAC', '\x2D', '\xAE', '\xAF', + '\x2E', '\x2B', '\x20', '\xB3', '\x27', '\x75', '\xB6', '\xB7', + '\x20', '\xB1', '\xBA', '\x3E', '\xA5', '\x22', '\xB5', '\xBF', + '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7', + '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF', + '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7', + '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF', + '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7', + '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF', + '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\x2D', + '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF', + '\0' + }; + + QCString result; + int len = sInput.length(); + + for (int i = 0; i < len; ++i) + { + unsigned int c = sInput[i]; + result += (c > 127) ? WinToISOTab[c & 0x7F] : c; + } + return result; + } + + /*! returns the string converted from iso-8859-2 to windows-1250 */ + QCString ISOToWin(const QCString& sInput) + { + // The conversion table for characters >127 + // + static const char ISOToWinTab[] = { + '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F', + '\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97', + '\x98', '\x99', '\x9A', '\x9B', '\x9C', '\x9D', '\x9E', '\x9F', + '\xA0', '\xA5', '\xA2', '\xA3', '\xA4', '\xBC', '\x8C', '\xA7', + '\xA8', '\x8A', '\xAA', '\x8D', '\x8F', '\xAD', '\x8E', '\xAF', + '\xB0', '\xB9', '\xB2', '\xB3', '\xB4', '\xBE', '\x9C', '\xB7', + '\xB8', '\x9A', '\xBA', '\x9D', '\x9F', '\xBD', '\x9E', '\xBF', + '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7', + '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF', + '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7', + '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF', + '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7', + '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF', + '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\xF7', + '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF', + '\0' + }; + QCString result; + int len = sInput.length(); + + for (int i = 0; i < len; ++i) + { + unsigned int c = sInput[i]; + result += (c > 127) ? ISOToWinTab[c & 0x7F] : c; + } + return result; + } public: QCString idLanguage() { return "croatian"; } - QCString latexBabelPackage() - { return "croatian"; } QCString idLanguageCharset() - { #ifdef _WIN32 - return "windows-1250"; + { return "windows-1250"; } #else - return "iso-8859-2"; + { return "iso-8859-2"; } #endif - } + QCString latexBabelPackage() + { return "croatian"; } QCString trRelatedFunctions() - { return "Povezane funkcije"; } + { return decode("Povezane funkcije"); } QCString trRelatedSubscript() - { return "(To nisu member funkcije.)"; } + { return decode("(To nisu member funkcije.)"); } QCString trDetailedDescription() - { return "Detaljno objaąnjenje"; } + { return decode("Detaljno objaąnjenje"); } QCString trMemberTypedefDocumentation() - { return "Dokumentacija typedef članova"; } + { return decode("Dokumentacija typedef članova"); } QCString trMemberEnumerationDocumentation() - { return "Dokumentacija enum članova"; } + { return decode("Dokumentacija enum članova"); } QCString trEnumerationValueDocumentation() - { return "Dokumentacija enum vrijednosti"; } + { return decode("Dokumentacija enum vrijednosti"); } QCString trMemberFunctionDocumentation() - { return "Dokumentacija funkcija"; } + { return decode("Dokumentacija funkcija"); } QCString trMemberDataDocumentation() - { return "Documentacija varijabli"; } + { return decode("Documentacija varijabli"); } QCString trGeneratedFrom(const char *s,bool single) { - QCString result=(QCString)"Dokumentacija za "+s+ - "je generirana iz "; - if (single) result+="datoteke :"; else result+="slijedećih datoteka:"; + QCString result= decode("Dokumentacija za ")+s+ + decode("je generirana iz "); + if (single) + result+= decode("datoteke :"); + else + result+= decode("slijedećih datoteka:"); return result; } QCString trMore() - { return "Opąirnije..."; } + { return decode("Opąirnije..."); } QCString trListOfAllMembers() - { return "Popis svih članova."; } + { return decode("Popis svih članova."); } QCString trMemberList() - { return "Popis članova."; } + { return decode("Popis članova."); } QCString trThisIsTheListOfAllMembers() - { return "Ovo je popis svih članova"; } + { return decode("Ovo je popis svih članova"); } QCString trIncludingInheritedMembers() - { return ", uključujući naslijeđene članove."; } + { return decode(", uključujući naslijeđene članove."); } QCString trGeneratedAutomatically(const char *s) - { QCString result="generirano automatski Doxygen-om"; - if (s) result+=(QCString)" za "+s; - result+=" iz programskog koda."; + { QCString result=decode("generirano automatski Doxygen-om"); + if (s) result+=(QCString)decode(" za ")+s; + result+=decode(" iz programskog koda."); return result; } QCString trEnumName() - { return "enum ime"; } + { return decode("enum ime"); } QCString trEnumValue() - { return "enum vrijednost"; } + { return decode("enum vrijednost"); } QCString trDefinedIn() - { return "definirano u"; } + { return decode("definirano u"); } QCString trVerbatimText(const char *f) - { return (QCString)"Ovo je citirani tekst iz include datoteke "+f+"."; } + { return (QCString)decode("Ovo je citirani tekst iz include datoteke ")+f+"."; } QCString trModules() - { return "Moduli"; } + { return decode("Moduli"); } QCString trClassHierarchy() - { return "Stablo klasa"; } + { return decode("Stablo klasa"); } QCString trCompoundList() - { return "Sve klase"; } + { return decode("Sve klase"); } QCString trFileList() - { return "Popis datoteka"; } + { return decode("Popis datoteka"); } QCString trHeaderFiles() - { return "Header datoteke"; } + { return decode("Header datoteke"); } QCString trCompoundMembers() - { return "Svi članovi"; } + { return decode("Svi članovi"); } QCString trFileMembers() - { return "Članovi(memberi) u datoteci"; } + { return decode("Članovi(memberi) u datoteci"); } QCString trRelatedPages() - { return "Povezane stranice"; } + { return decode("Povezane stranice"); } QCString trExamples() - { return "Primjeri"; } + { return decode("Primjeri"); } QCString trSearch() - { return "Traľi"; } + { return decode("Traľi"); } QCString trClassHierarchyDescription() - { return "Stablo naslijeđivanja je posloľeno " - "pribliľno po abecedi:"; + { return decode("Stablo naslijeđivanja je posloľeno " + "pribliľno po abecedi:"); } QCString trFileListDescription(bool extractAll) { - QCString result="Popis svih "; - if (!extractAll) result+="dokumentiranih "; - result+="datoteka, s kratkim opisom:"; + QCString result=decode("Popis svih "); + if (!extractAll) result+=decode("dokumentiranih "); + result+=decode("datoteka, s kratkim opisom:"); return result; } QCString trCompoundListDescription() - { return "Popis svih klasa, unija i struktura " - "s kratkim opisom :"; + { return decode("Popis svih klasa, unija i struktura " + "s kratkim opisom :"); } QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Popis svih "; - if (!extractAll) result+="dokumentiranih "; - result+="članova klasa s linkovima na "; - if (extractAll) result+="dokumentaciju svakog člana:"; - else result+="dokumentaciju klase :"; + QCString result=decode("Popis svih "); + if (!extractAll) result+=decode("dokumentiranih "); + result+=decode("članova klasa s linkovima na "); + if (extractAll) result+=decode("dokumentaciju svakog člana:"); + else result+=decode("dokumentaciju klase :"); return result; } QCString trFileMembersDescription(bool extractAll) { - QCString result="Popis svih "; - if (!extractAll) result+="dokumentiranih "; - result+="članova s linkovima na "; - if (extractAll) result+="dokumentaciju datoteke u kojima se nalaze:"; - else result+="datoteke u kojima se nalaze:"; + QCString result=decode("Popis svih "); + if (!extractAll) result+=decode("dokumentiranih "); + result+=decode("članova s linkovima na "); + if (extractAll) result+=decode("dokumentaciju datoteke u kojima se nalaze:"); + else result+=decode("datoteke u kojima se nalaze:"); return result; } QCString trHeaderFilesDescription() - { return "Popis header datoteka koje čine API :"; } + { return decode("Popis header datoteka koje čine API :"); } QCString trExamplesDescription() - { return "Popis primjera :"; } + { return decode("Popis primjera :"); } QCString trRelatedPagesDescription() - { return "Popis povezanih stranica:"; } + { return decode("Popis povezanih stranica:"); } QCString trModulesDescription() - { return "Popis svih modula:"; } + { return decode("Popis svih modula:"); } QCString trNoDescriptionAvailable() - { return "Opis nije dostupan"; } + { return decode("Opis nije dostupan"); } QCString trDocumentation() - { return "Dokumentacija"; } + { return decode("Dokumentacija"); } QCString trModuleIndex() - { return "Indeks modula"; } + { return decode("Indeks modula"); } QCString trHierarchicalIndex() - { return "Hijerarhijski indeks"; } + { return decode("Hijerarhijski indeks"); } QCString trCompoundIndex() - { return "Skupni indeks"; } + { return decode("Skupni indeks"); } QCString trFileIndex() - { return "Indeks datoteka"; } + { return decode("Indeks datoteka"); } QCString trModuleDocumentation() - { return "Dokumentacija modula"; } + { return decode("Dokumentacija modula"); } QCString trClassDocumentation() - { return "Dokumentacija klasa"; } + { return decode("Dokumentacija klasa"); } QCString trFileDocumentation() - { return "Dokumentacija datoteka"; } + { return decode("Dokumentacija datoteka"); } QCString trExampleDocumentation() - { return "Dokumentacija primjera"; } + { return decode("Dokumentacija primjera"); } QCString trPageDocumentation() - { return "Dokumentacija za povezane stranice"; } + { return decode("Dokumentacija za povezane stranice"); } QCString trReferenceManual() - { return "Priručnik"; } + { return decode("Priručnik"); } QCString trDefines() - { return "Define-ovi"; } + { return decode("Define-ovi"); } QCString trFuncProtos() - { return "Prototipi funkcija"; } + { return decode("Prototipi funkcija"); } QCString trTypedefs() - { return "Typedef-ovi"; } + { return decode("Typedef-ovi"); } QCString trEnumerations() - { return "Enumeracije"; } + { return decode("Enumeracije"); } QCString trFunctions() - { return "Funkcije"; } + { return decode("Funkcije"); } QCString trVariables() - { return "Varijable"; } + { return decode("Varijable"); } QCString trEnumerationValues() - { return "Vrijednosti enum-ova"; } + { return decode("Vrijednosti enum-ova"); } QCString trAuthor() - { return "autor"; } + { return decode("autor"); } QCString trDefineDocumentation() - { return "Dokumentacija define-a"; } + { return decode("Dokumentacija define-a"); } QCString trFunctionPrototypeDocumentation() - { return "Dokumentacija prototipa funkcije"; } + { return decode("Dokumentacija prototipa funkcije"); } QCString trTypedefDocumentation() - { return "Dokumentacija typedef-a"; } + { return decode("Dokumentacija typedef-a"); } QCString trEnumerationTypeDocumentation() - { return "Dokumentacija enum tipa"; } + { return decode("Dokumentacija enum tipa"); } QCString trFunctionDocumentation() - { return "Dokumentacije funkcijs"; } + { return decode("Dokumentacije funkcijs"); } QCString trVariableDocumentation() - { return "Dokumentacija varijable"; } + { return decode("Dokumentacija varijable"); } QCString trCompounds() - { return "Strukture"; } + { return decode("Strukture"); } QCString trFiles() - { return "Datoteke"; } + { return decode("Datoteke"); } QCString trGeneratedAt(const char *date,const char *projName) { - QCString result=(QCString)"Generirano "+date; - if (projName) result+=(QCString)" projekt: "+projName; - result+=(QCString)" generator: "; + QCString result=(QCString)decode("Generirano ")+date; + if (projName) result+=(QCString)decode(" projekt: ")+projName; + result+=(QCString)decode(" generator: "); return result; } QCString trWrittenBy() { - return "napisao "; + return decode("napisao "); } QCString trClassDiagram(const char *clName) { - return (QCString)"Dijagram klasa za "+clName; + return decode("Dijagram klasa za ")+clName; } QCString trForInternalUseOnly() - { return "Isključivo za internu uporabu."; } + { return decode("Isključivo za internu uporabu."); } QCString trReimplementedForInternalReasons() - { return "Reimplementirano zbog internih razloga; " - "Nema utjecaja na API."; + { return decode("Reimplementirano zbog internih razloga; " + "Nema utjecaja na API."); } QCString trWarning() - { return "Upozorenje"; } + { return decode("Upozorenje"); } QCString trBugsAndLimitations() - { return "Greąke i ograničenja"; } + { return decode("Greąke i ograničenja"); } QCString trVersion() - { return "Verzija"; } + { return decode("Verzija"); } QCString trDate() - { return "Datum"; } + { return decode("Datum"); } QCString trAuthors() - { return "Autor(i)"; } + { return decode("Autor(i)"); } QCString trReturns() - { return "Povratne vrijednosti"; } + { return decode("Povratne vrijednosti"); } QCString trSeeAlso() - { return "Vidi također"; } + { return decode("Vidi također"); } QCString trParameters() - { return "Parametri"; } + { return decode("Parametri"); } QCString trExceptions() - { return "Iznimke"; } + { return decode("Iznimke"); } QCString trGeneratedBy() - { return "Generirao"; } + { return decode("Generirao"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 ////////////////////////////////////////////////////////////////////////// QCString trNamespaceList() - { return "Popis namespace-ova"; } + { return decode("Popis namespace-ova"); } QCString trNamespaceListDescription(bool extractAll) { - QCString result="Popis svih "; - if (!extractAll) result+="dokumentiranih "; - result+="namespace-ova s kratkim opisom:"; + QCString result=decode("Popis svih "); + if (!extractAll) result+=decode("dokumentiranih "); + result+=decode("namespace-ova s kratkim opisom:"); return result; } QCString trFriends() - { return "Friend-ovi "; } + { return decode("Friend-ovi "); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 ////////////////////////////////////////////////////////////////////////// QCString trRelatedFunctionDocumentation() - { return "Dokumentacija povezanih funkcija"; } + { return decode("Dokumentacija povezanih funkcija"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -277,14 +367,14 @@ class TranslatorCroatian : public Translator bool /*isTemplate*/) // used as the title of the HTML page of a class/struct/union { - QCString result="Opis "; + QCString result=decode("Opis "); switch(compType) { - case ClassDef::Class: result+=" klase "; break; - case ClassDef::Struct: result+=" strukture "; break; - case ClassDef::Union: result+=" unije "; break; - case ClassDef::Interface: result+=" sučelja (interface) "; break; - case ClassDef::Exception: result+=" iznimke (exception) "; break; + case ClassDef::Class: result+=decode(" klase "); break; + case ClassDef::Struct: result+=decode(" strukture "); break; + case ClassDef::Union: result+=decode(" unije "); break; + case ClassDef::Interface: result+=decode(" sučelja (interface) "); break; + case ClassDef::Exception: result+=decode(" iznimke (exception) "); break; } result += (QCString)clName; @@ -293,14 +383,14 @@ class TranslatorCroatian : public Translator QCString trFileReference(const char *fileName) // used as the title of the HTML page of a file { - QCString result="Opis datoteke "; + QCString result=decode("Opis datoteke "); result+=fileName; return result; } QCString trNamespaceReference(const char *namespaceName) // used as the title of the HTML page of a namespace { - QCString result ="Opis namespace-a "; + QCString result =decode("Opis namespace-a "); result+=namespaceName; return result; @@ -308,25 +398,25 @@ class TranslatorCroatian : public Translator // these are for the member sections of a class, struct or union QCString trPublicMembers() - { return "Public članovi"; } + { return decode("Public članovi"); } QCString trPublicSlots() - { return "Public slotovi"; } + { return decode("Public slotovi"); } QCString trSignals() - { return "Signali"; } + { return decode("Signali"); } QCString trStaticPublicMembers() - { return "Static public članovi"; } + { return decode("Static public članovi"); } QCString trProtectedMembers() - { return "Protected članovi"; } + { return decode("Protected članovi"); } QCString trProtectedSlots() - { return "Protected slotovi"; } + { return decode("Protected slotovi"); } QCString trStaticProtectedMembers() - { return "Static protected članovi"; } + { return decode("Static protected članovi"); } QCString trPrivateMembers() - { return "Private članovi"; } + { return decode("Private članovi"); } QCString trPrivateSlots() - { return "Private slotovi"; } + { return decode("Private slotovi"); } QCString trStaticPrivateMembers() - { return "Static private članovi"; } + { return decode("Static private članovi"); } // end of member sections QCString trWriteList(int numEntries) @@ -357,50 +447,50 @@ class TranslatorCroatian : public Translator // used in class documentation to produce a list of base classes, // if class diagrams are disabled. { - return "Naslijeđuje od "+trWriteList(numEntries)+"."; + return decode("Naslijeđuje od "+trWriteList(numEntries)+"."); } QCString trInheritedByList(int numEntries) // used in class documentation to produce a list of super classes, // if class diagrams are disabled. { - return "Naslijeđena u "+trWriteList(numEntries)+"."; + return decode("Naslijeđena u "+trWriteList(numEntries)+"."); } QCString trReimplementedFromList(int numEntries) // used in member documentation blocks to produce a list of // members that are hidden by this one. { - return "Reimplementirano od "+trWriteList(numEntries)+"."; + return decode("Reimplementirano od "+trWriteList(numEntries)+"."); } QCString trReimplementedInList(int numEntries) { // used in member documentation blocks to produce a list of // all member that overwrite the implementation of this member. - return "Reimplementacija u "+trWriteList(numEntries)+"."; + return decode("Reimplementacija u "+trWriteList(numEntries)+"."); } QCString trNamespaceMembers() // This is put above each page as a link to all members of namespaces. - { return "Namespace članovi"; } + { return decode("Namespace članovi"); } QCString trNamespaceMemberDescription(bool extractAll) // This is an introduction to the page with all namespace members { - QCString result="Lista svih "; - if (!extractAll) result+="dokumentiranih "; - result+="namespace članova s linkovima na "; + QCString result=decode("Lista svih "); + if (!extractAll) result+=decode("dokumentiranih "); + result+=decode("namespace članova s linkovima na "); if (extractAll) - result+="namespace dokumentaciju svakog člana:"; + result+=decode("namespace dokumentaciju svakog člana:"); else - result+="namespace kojima pripadaju:"; + result+=decode("namespace kojima pripadaju:"); return result; } QCString trNamespaceIndex() // This is used in LaTeX as the title of the chapter with the // index of all namespaces. - { return "Indeks namespace-a"; } + { return decode("Indeks namespace-a"); } QCString trNamespaceDocumentation() // This is used in LaTeX as the title of the chapter containing // the documentation of all namespaces. - { return "Dokumentacija namespace-a"; } + { return decode("Dokumentacija namespace-a"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990728 @@ -413,16 +503,16 @@ class TranslatorCroatian : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"Dokumentacija ove "; + QCString result=(QCString)decode("Dokumentacija ove "); switch(compType) { - case ClassDef::Class: result+="klase"; break; - case ClassDef::Struct: result+="strukture"; break; - case ClassDef::Union: result+="unije"; break; - case ClassDef::Interface: result+="sučelja (interface)"; break; - case ClassDef::Exception: result+="iznimke (exception)"; break; + case ClassDef::Class: result+=decode("klase"); break; + case ClassDef::Struct: result+=decode("strukture"); break; + case ClassDef::Union: result+=decode("unije"); break; + case ClassDef::Interface: result+=decode("sučelja (interface)"); break; + case ClassDef::Exception: result+=decode("iznimke (exception)"); break; } - result+=" je generirana iz datotek"; + result+=decode(" je generirana iz datotek"); if (single) result+="e :"; else result+="a :"; return result; } @@ -431,7 +521,7 @@ class TranslatorCroatian : public Translator * list. */ QCString trAlphabeticalList() - { return "Abecedni popis"; } + { return decode("Abecedni popis"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 @@ -439,18 +529,18 @@ class TranslatorCroatian : public Translator /*! This is used as the heading text for the retval command. */ QCString trReturnValues() - { return "Povratna vrijednost"; } + { return decode("Povratna vrijednost"); } /*! This is in the (quick) index as a link to the main page (index.html) */ QCString trMainPage() - { return "Glavna stranica"; } + { return decode("Glavna stranica"); } /*! 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."; } + { return decode("str."); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-991106 @@ -458,15 +548,15 @@ class TranslatorCroatian : public Translator QCString trSources() { - return "Izvorne datoteke"; + return decode("Izvorne datoteke"); } QCString trDefinedAtLineInSourceFile() { - return "Definirano u liniji @0 datoteke @1."; + return decode("Definirano u liniji @0 datoteke @1."); } QCString trDefinedInSourceFile() { - return "Definirano u datoteci @0."; + return decode("Definirano u datoteci @0."); } ////////////////////////////////////////////////////////////////////////// @@ -475,7 +565,7 @@ class TranslatorCroatian : public Translator QCString trDeprecated() { - return "Zastarjelo"; + return decode("Zastarjelo"); } ////////////////////////////////////////////////////////////////////////// @@ -485,68 +575,68 @@ class TranslatorCroatian : public Translator /*! this text is put before a collaboration diagram */ QCString trCollaborationDiagram(const char *clName) { - return (QCString)"Kolaboracijski dijagram za "+clName+":"; + return decode( (QCString)"Kolaboracijski dijagram za "+clName+ ":"); } /*! this text is put before an include dependency graph */ QCString trInclDepGraph(const char *fName) { - return (QCString)"Graf include međuovisnosti za "+fName+":"; + return decode((QCString)"Graf include međuovisnosti za "+fName+":"); } /*! header that is put before the list of constructor/destructors. */ QCString trConstructorDocumentation() { - return "Dokumentacija konstruktora i destruktora "; + return decode("Dokumentacija konstruktora i destruktora "); } /*! Used in the file documentation to point to the corresponding sources. */ QCString trGotoSourceCode() { - return "Izvorni kod"; + return decode("Izvorni kod"); } /*! Used in the file sources to point to the corresponding documentation. */ QCString trGotoDocumentation() { - return "Dokumenacija za ovu datoteku."; + return decode("Dokumenacija za ovu datoteku."); } /*! Text for the \pre command */ QCString trPrecondition() { - return "Preduvjeti"; + return decode("Preduvjeti"); } /*! Text for the \post command */ QCString trPostcondition() { - return "Postuvjeti"; + return decode("Postuvjeti"); } /*! Text for the \invariant command */ QCString trInvariant() { - return "Invarijanta"; + return decode("Invarijanta"); } /*! Text shown before a multi-line variable/enum initialization */ QCString trInitialValue() { - return "Početna vrijednost:"; + return decode("Početna vrijednost:"); } /*! Text used the source code in the file index */ QCString trCode() { - return "kod"; + return decode("kod"); } QCString trGraphicalHierarchy() { - return "Grafičko stablo klasa"; + return decode("Grafičko stablo klasa"); } QCString trGotoGraphicalHierarchy() { - return "Grafičko stablo klasa"; + return decode("Grafičko stablo klasa"); } QCString trGotoTextualHierarchy() { - return "Tekstualno stablo klasa"; + return decode("Tekstualno stablo klasa"); } QCString trPageIndex() { - return "Indeks stranice"; + return decode("Indeks stranice"); } ////////////////////////////////////////////////////////////////////////// @@ -555,43 +645,43 @@ class TranslatorCroatian : public Translator QCString trNote() { - return "Primjedba"; + return decode("Primjedba"); } QCString trPublicTypes() { - return "Public tipovi"; + return decode("Public tipovi"); } QCString trPublicAttribs() { - return "Public atributi"; + return decode("Public atributi"); } QCString trStaticPublicAttribs() { - return "Static public atributi"; + return decode("Static public atributi"); } QCString trProtectedTypes() { - return "Protected tipovi"; + return decode("Protected tipovi"); } QCString trProtectedAttribs() { - return "Protected atributi"; + return decode("Protected atributi"); } QCString trStaticProtectedAttribs() { - return "Static protected atributi"; + return decode("Static protected atributi"); } QCString trPrivateTypes() { - return "Private tipovi"; + return decode("Private tipovi"); } QCString trPrivateAttribs() { - return "Private atributi"; + return decode("Private atributi"); } QCString trStaticPrivateAttribs() { - return "Static private atributi"; + return decode("Static private atributi"); } ////////////////////////////////////////////////////////////////////////// // new since 1.1.3 @@ -600,12 +690,12 @@ class TranslatorCroatian : public Translator /*! Used as a marker that is put before a todo item */ virtual QCString trTodo() { - return "Za uraditi"; + return decode("Za uraditi"); } /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "Ostalo za uraditi"; + return decode("Ostalo za uraditi"); } ////////////////////////////////////////////////////////////////////////// @@ -614,31 +704,108 @@ class TranslatorCroatian : public Translator virtual QCString trReferencedBy() { - return "Referencirano od"; + return decode("Referencirano od"); } virtual QCString trRemarks() { - return "Napomene"; + return decode("Napomene"); } virtual QCString trAttention() { -#ifdef _WIN32 - return "Pa?nja"; -#else - return "Paľnja"; -#endif + return decode("Paľnja"); } virtual QCString trInclByDepGraph() { - return "Ovaj graf pokazuje koje datoteke izravno " - "ili neizravno uključuju ovu datoteku:"; + return decode("Ovaj graf pokazuje koje datoteke izravno " + "ili neizravno uključuju ovu datoteku:"); } virtual QCString trSince() { - return "Od"; + return decode("Od"); } +////////////////////////////////////////////////////////////////////////// +// new since 1.1.5 +////////////////////////////////////////////////////////////////////////// + /*! title of the graph legend page */ + virtual QCString trLegendTitle() + { + return decode("Legenda"); + } + /*! page explaining how the dot graph's should be interpreted */ + virtual QCString trLegendDocs() + { + return + decode( "Ova stranica objaąnjava kako interpretirati grafikone koje je generirao " + "doxygen.

        \n" + "Na primjer:\n" + "\\code\n" + "/*! Nevidljiva klasa (neće stati na graf date visine) */\n" + "class Invisible { };\n\n" + "/*! Odrezana klasa, inheritance je skriven (klase se vidi na grafu, ali ne i sve bazne klase) */\n" + "class Truncated : public Invisible { };\n\n" + "/* Nedokumentirana klasa */\n" + "class Undocumented { };\n\n" + "/*! Klasa koja je naslijeđena public */\n" + "class PublicBase : public Truncated { };\n\n" + "/*! Klasa koje je naslijeđena protected */\n" + "class ProtectedBase { };\n\n" + "/*! Klasa koje je naslijeđena private */\n" + "class PrivateBase { };\n\n" + "/*! Klasa koja se koristi agregacijom */\n" + "class Used { };\n\n" + "/*! Super klasa koja naslijeđuje/koristi ostale */\n" + "class Inherited : public PublicBase,\n" + " protected ProtectedBase,\n" + " private PrivateBase,\n" + " public Undocumented\n" + "{\n" + " private:\n" + " Used *m_usedClass;\n" + "};\n" + "\\endcode\n" + "Ako je \\c MAX_DOT_GRAPH_HEIGHT tag u konfiguracijskoj datoteci " + "postavljen na 200 gornje veze će rezultirati grafikonom:" + "

        \n" + "

        \n" + "Pravokutnici imaju slijedeće značenje:\n" + "

          \n" + "
        • Puni crni predstavlja klasu za koji je generiran graf.\n" + "
        • Pravokutnik s crnim rubom predstavlja dokumentiranu klasu.\n" + "
        • Pravokutnik s sivim rubom predstavlja nedokumentiranu klasu.\n" + "
        • Pravokutnik s crvenim rubom predstavlja dokumentiranu klasu\n" + "Za koju nije prikazan graf naslijeđivanja. Graf je odrezan " + "ako ne stane unutar određenih granica." + "
        \n" + "Strelice imaju slijedeće značenje:\n" + "
          \n" + "
        • Tamnoplava strelica označava public naslijeđivanje.\n" + "
        • Tamnozelena strelica označava protected naslijeđivanje.\n" + "
        • Tamnocrvena strelica označava private naslijeđivanje.\n" + "
        • Ljubičasta isprekidana strelica se koristi za agregate vezu. " + "Strelica je označena imenom varijable.\n" + "
        \n"); + } + /*! text for the link to the legend page */ + virtual QCString trLegend() + { + return decode("legenda"); + } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.0 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a test item */ + virtual QCString trTest() + { + return "Test"; + } + /*! Used as the header of the test list */ + virtual QCString trTestList() + { + return "Test lista"; + } }; #endif diff --git a/src/translator_hu.h b/src/translator_hu.h new file mode 100644 index 0000000..7140242 --- /dev/null +++ b/src/translator_hu.h @@ -0,0 +1,987 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2000 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_HU_H +#define TRANSLATOR_HU_H + +#include "translator.h" + +class TranslatorHungarian : public Translator +{ + public: + + // --- Language contol methods ------------------- + QCString idLanguage() + { return "hungarian"; } + /*! 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. + */ + QCString latexLanguageSupportCommand() + { + return ""; + } + /*! returns the name of the package that is included by LaTeX */ + QCString latexBabelPackage() + { return ""; } + + /*! return the language charset. This will be used for the HTML output */ + QCString idLanguageCharset() + { + return "iso-8859-2"; + } + + // --- Language translation methods ------------------- + + /*! used in the compound documentation before a list of related functions. */ + QCString trRelatedFunctions() + { return "Kapcsolódó függvények"; } + + /*! subscript for the related functions. */ + QCString trRelatedSubscript() + { return "(Figyelem! Ezek a függvények nem tagjai az osztálynak!)"; } + + /*! header that is put before the detailed description of files, classes and namespaces. */ + QCString trDetailedDescription() + { return "Részletes leírás"; } + + /*! header that is put before the list of typedefs. */ + QCString trMemberTypedefDocumentation() + { return "Osztálytag típusdefiníciók dokumentációja"; } + + /*! header that is put before the list of enumerations. */ + QCString trMemberEnumerationDocumentation() + { return "Osztálytag enumerációk dokumentációja"; } + + /*! header that is put before the list of member functions. */ + QCString trMemberFunctionDocumentation() + { return "Osztálytag függvények (metódusok) dokumentációja"; } + + /*! header that is put before the list of member attributes. */ + QCString trMemberDataDocumentation() + { return "Osztálytag adatok dokumentációja"; } + + /*! this is the text of a link put after brief descriptions. */ + QCString trMore() + { return "Részletek..."; } + + /*! put in the class documentation */ + QCString trListOfAllMembers() + { return "Osztálytagok listája."; } + + /*! used as the title of the "list of all members" page of a class */ + QCString trMemberList() + { return "Osztálytagok listája"; } + + /*! this is the first part of a sentence that is followed by a class name */ + QCString trThisIsTheListOfAllMembers() + { return "A(z) "; } + + /*! this is the remainder of the sentence after the class name */ + QCString trIncludingInheritedMembers() + { return " osztály tagjainak teljes listája, az örökölt tagokkal együtt."; } + + /*! this is put at the author sections at the bottom of man pages. + * parameter s is name of the project name. + */ + QCString trGeneratedAutomatically(const char *s) + { QCString result="Ezt a dokumentációt a Doxygen készítette"; + if (s) result+=(QCString)" a(z) "+s+(QCString)" projekthez"; + result+=" a forráskódból."; + return result; + } + + /*! put after an enum name in the list of all members */ + QCString trEnumName() + { return "enumeráció neve"; } + + /*! put after an enum value in the list of all members */ + QCString trEnumValue() + { return "enumeráció értéke"; } + + /*! put after an undocumented member in the list of all members */ + QCString trDefinedIn() + { return "definiálva itt:"; } + + /*! put as in introduction in the verbatim header file of a class. + * parameter f is the name of the include file. + */ + QCString trVerbatimText(const char *f) + { return (QCString)"Ez a(z) "+f+" definíciós fájl pontos tartalma."; } + + // 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). + */ + QCString trModules() + { return "Modulok"; } + + /*! This is put above each page as a link to the class hierarchy */ + QCString trClassHierarchy() + { return "Osztályhierarchia"; } + + /*! This is put above each page as a link to the list of annotated classes */ + QCString trCompoundList() + { return "Összetevők listája"; } + + /*! This is put above each page as a link to the list of documented files */ + QCString trFileList() + { return "Fájlok listája"; } + + /*! This is put above each page as a link to the list of all verbatim headers */ + QCString trHeaderFiles() + { return "Definíciós fájlok"; } + + /*! This is put above each page as a link to all members of compounds. */ + QCString trCompoundMembers() + { return "Osztályok összetevői"; } + + /*! This is put above each page as a link to all members of files. */ + QCString trFileMembers() + { return "Fájlok elemei"; } + + /*! This is put above each page as a link to all related pages. */ + QCString trRelatedPages() + { return "Kapcsolódó lapok"; } + + /*! This is put above each page as a link to all examples. */ + QCString trExamples() + { return "Példák"; } + + /*! This is put above each page as a link to the search engine. */ + QCString trSearch() + { return "Keresés"; } + + /*! This is an introduction to the class hierarchy. */ + QCString trClassHierarchyDescription() + { return "Ez a leszármaztatási lista hozzávetőleg, " + "de nem szigorúan véve, ábécé sorrendbe rendezett:"; + } + + /*! This is an introduction to the list with all files. */ + QCString trFileListDescription(bool extractAll) + { + QCString result="Ez az összes "; + if (!extractAll) result+="doumentált "; + result+="fájl listája rövid leírásokkal:"; + return result; + } + + /*! This is an introduction to the annotated compound list. */ + QCString trCompoundListDescription() + { return "Ez az osztályok, struktúrák, uniók és interfészek " + "listája rövid leírásokkal:"; + } + + /*! This is an introduction to the page with all class members. */ + QCString trCompoundMembersDescription(bool extractAll) + { + QCString result="Ez az összes "; + if (!extractAll) result+="dokumentált "; + result+="osztály összetevő listája "; + if (extractAll) + result+="hivatkozással a hozzájuk tartózó osztály dokumentációra:"; + else + result+="az őket tartalmazó osztály megjelölésével:"; + return result; + } + + /*! This is an introduction to the page with all file members. */ + QCString trFileMembersDescription(bool extractAll) + { + QCString result="Ez az összes "; + if (!extractAll) result+="dokumentált "; + result+="fájl elem listája "; + if (extractAll) + result+="hivatkozással a hozzájuk tartózó fájl dokumentációra:"; + else + result+="az őket tartalmazó fájl megjelölésével:"; + return result; + } + + /*! This is an introduction to the page with the list of all header files. */ + QCString trHeaderFilesDescription() + { return "Ezek a Programozói Interfészt (API) alkotó definíciós fájlok:"; } + + /*! This is an introduction to the page with the list of all examples */ + QCString trExamplesDescription() + { return "Ez a példák listája:"; } + + /*! This is an introduction to the page with the list of related pages */ + QCString trRelatedPagesDescription() + { return "Ez a kapcsolódó dokumentációk listája:"; } + + /*! This is an introduction to the page with the list of class/file groups */ + QCString trModulesDescription() + { return "Ez a modulok listája:"; } + + /*! This sentences is used in the annotated class/file lists if no brief + * description is given. + */ + QCString trNoDescriptionAvailable() + { return "Nincs hozzá leírás"; } + + // index titles (the project name is prepended for these) + + + /*! This is used in HTML as the title of index.html. */ + QCString trDocumentation() + { return "Dokumentáció"; } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all groups. + */ + QCString trModuleIndex() + { return "Modul index"; } + + /*! This is used in LaTeX as the title of the chapter with the + * class hierarchy. + */ + QCString trHierarchicalIndex() + { return "Hierarchikus index"; } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index. + */ + QCString trCompoundIndex() + { return "Összetevők indexe"; } + + /*! This is used in LaTeX as the title of the chapter with the + * list of all files. + */ + QCString trFileIndex() + { return "Fájl index"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all groups. + */ + QCString trModuleDocumentation() + { return "Modul documentáció"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all classes, structs and unions. + */ + QCString trClassDocumentation() + { return "Osztály documentatáció"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all files. + */ + QCString trFileDocumentation() + { return "Fájl documentatáció"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all examples. + */ + QCString trExampleDocumentation() + { return "Példák documentatációja"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all related pages. + */ + QCString trPageDocumentation() + { return "Kapcsolódó lapok documentációja"; } + + /*! This is used in LaTeX as the title of the document */ + QCString trReferenceManual() + { return "Referencia kézikönyv"; } + + /*! This is used in the documentation of a file as a header before the + * list of defines + */ + QCString trDefines() + { return "Definíciók"; } + + /*! This is used in the documentation of a file as a header before the + * list of function prototypes + */ + QCString trFuncProtos() + { return "Függvény prototípusok"; } + + /*! This is used in the documentation of a file as a header before the + * list of typedefs + */ + QCString trTypedefs() + { return "Típusdefiníciók"; } + + /*! This is used in the documentation of a file as a header before the + * list of enumerations + */ + QCString trEnumerations() + { return "Enumerációk"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) functions + */ + QCString trFunctions() + { return "Függvények"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + QCString trVariables() + { return "Változók"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + QCString trEnumerationValues() + { return "Enumeráció értékek"; } + + /*! This is used in man pages as the author section. */ + QCString trAuthor() + { return "Szerző"; } + + /*! This is used in the documentation of a file before the list of + * documentation blocks for defines + */ + QCString trDefineDocumentation() + { return "Definíciók dokumentációja"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for function prototypes + */ + QCString trFunctionPrototypeDocumentation() + { return "Függvény prototípusok documentációja"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for typedefs + */ + QCString trTypedefDocumentation() + { return "Típusdefiníciók documentációja"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration types + */ + QCString trEnumerationTypeDocumentation() + { return "Enumerációk documentációja"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration values + */ + QCString trEnumerationValueDocumentation() + { return "Enumeráció értékek documentációja"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for functions + */ + QCString trFunctionDocumentation() + { return "Függvények dokumentációja"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for variables + */ + QCString trVariableDocumentation() + { return "Változók documentációja"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds + */ + QCString trCompounds() + { return "Összetevők"; } + + /*! This is used in the documentation of a group before the list of + * links to documented files + */ + QCString trFiles() + { return "Fájlok"; } + + /*! This is used in the standard footer of each page and indicates when + * the page was generated + */ + QCString trGeneratedAt(const char *date,const char *projName) + { + QCString result=(QCString)""; + if (projName) result+=(QCString)"Projekt: "+projName; + result+=(QCString)" Készült: "+date+" Készítette: "; + return result; + } + /*! This is part of the sentence used in the standard footer of each page. + */ + QCString trWrittenBy() + { + return " melyet írt "; + } + + /*! this text is put before a class diagram */ + QCString trClassDiagram(const char *clName) + { + return clName+(QCString)" osztály származtatási diagramja"; + } + + /*! this text is generated when the \internal command is used. */ + QCString trForInternalUseOnly() + { return "CSAK BELSŐ HASZNÁLATRA!"; } + + /*! this text is generated when the \reimp command is used. */ + QCString trReimplementedForInternalReasons() + { return "Belső okok miatt újraimplementálva, az API-t nem érinti."; } + + /*! this text is generated when the \warning command is used. */ + QCString trWarning() + { return "Figyelmeztetés"; } + + /*! this text is generated when the \bug command is used. */ + QCString trBugsAndLimitations() + { return "Hibák és korlátozások"; } + + /*! this text is generated when the \version command is used. */ + QCString trVersion() + { return "Verzió"; } + + /*! this text is generated when the \date command is used. */ + QCString trDate() + { return "Dátum"; } + + /*! this text is generated when the \author command is used. */ + QCString trAuthors() + { return "Szerző(k)"; } + + /*! this text is generated when the \return command is used. */ + QCString trReturns() + { return "Visszaadott érték"; } + + /*! this text is generated when the \sa command is used. */ + QCString trSeeAlso() + { return "Lásd még"; } + + /*! this text is generated when the \param command is used. */ + QCString trParameters() + { return "Paraméterek"; } + + /*! this text is generated when the \exception command is used. */ + QCString trExceptions() + { return "Kivételek"; } + + /*! this text is used in the title page of a LaTeX document. */ + QCString trGeneratedBy() + { return "Készítette"; } + + // new since 0.49-990307 + + /*! used as the title of page containing all the index of all namespaces. */ + QCString trNamespaceList() + { return "Névtér lista"; } + + /*! used as an introduction to the namespace list */ + QCString trNamespaceListDescription(bool extractAll) + { + QCString result="Ez az összes "; + if (!extractAll) result+="dokumentált "; + result+="névtér listája rövid leírásokkal:"; + return result; + } + + /*! used in the class documentation as a header before the list of all + * friends of a class + */ + QCString trFriends() + { return "Barátok"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990405 +////////////////////////////////////////////////////////////////////////// + + /*! used in the class documentation as a header before the list of all + * related classes + */ + QCString trRelatedFunctionDocumentation() + { return "Barát és kapcsolódó függvények dokumentációja"; } + +////////////////////////////////////////////////////////////////////////// +// 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) + { + QCString result=(QCString)clName; + switch(compType) + { + case ClassDef::Class: result+=" osztály"; break; + case ClassDef::Struct: result+=" struktúra"; break; + case ClassDef::Union: result+=" unió"; break; + case ClassDef::Interface: result+=" interfész"; break; + case ClassDef::Exception: result+=" kivétel"; break; + } + if (isTemplate) result+=" sablon"; + result+=" referencia"; + return result; + } + + /*! used as the title of the HTML page of a file */ + QCString trFileReference(const char *fileName) + { + QCString result=fileName; + result+=" fájl referencia"; + return result; + } + + /*! used as the title of the HTML page of a namespace */ + QCString trNamespaceReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" névtér reference"; + return result; + } + + /*! \mgroup Class sections + * these are for the member sections of a class, struct or union + */ + QCString trPublicMembers() + { return "Publikus metódusok"; } + QCString trPublicSlots() + { return "Publikus adatok"; } + QCString trSignals() + { return "Szignálok"; } + QCString trStaticPublicMembers() + { return "Statikus publikus metódusok"; } + QCString trProtectedMembers() + { return "Védett metódusok"; } + QCString trProtectedSlots() + { return "Védett adatok"; } + QCString trStaticProtectedMembers() + { return "Statikus védett metódusok"; } + QCString trPrivateMembers() + { return "Privát metódusok"; } + QCString trPrivateSlots() + { return "Privát adatok"; } + QCString trStaticPrivateMembers() + { return "Statikus privát metódusok"; } + /*! \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) + { + QCString result; + int i; + // the inherits list contain `numEntries' classes + for (i=0;i