From 039f53bb7a3f1c3dfdf03f120437f2daef454fb3 Mon Sep 17 00:00:00 2001 From: dimitri Date: Thu, 26 Jun 2008 19:24:36 +0000 Subject: Release-1.5.6-20080626 --- INSTALL | 4 +- README | 4 +- configure | 4 +- doc/config.doc | 5 +- doc/language.doc | 18 +- doc/maintainers.txt | 3 + doc/translator_report.txt | 46 +- src/code.l | 104 +-- src/commentscan.l | 2 +- src/config.l | 11 +- src/defargs.h | 2 +- src/defargs.l | 2 +- src/docparser.cpp | 9 +- src/doxygen.cpp | 127 ++-- src/language.cpp | 13 +- src/memberdef.cpp | 21 +- src/portable.cpp | 4 +- src/pyscanner.l | 15 +- src/scanner.l | 22 +- src/translator_en.h | 3 +- src/translator_mk.h | 205 ++++- src/translator_nl.h | 3 +- src/translator_sc.h | 1805 +++++++++++++++++++++++++++++++++++++++++++++ src/translator_sr.h | 742 ++++++++++++------- src/util.cpp | 41 +- src/util.h | 3 +- src/vhdlscanner.l | 133 ++-- 27 files changed, 2827 insertions(+), 524 deletions(-) create mode 100644 src/translator_sc.h diff --git a/INSTALL b/INSTALL index eb15914..a1e564d 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ -DOXYGEN Version 1.5.6 +DOXYGEN Version 1.5.6-20080626 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (17 May 2008) +Dimitri van Heesch (26 June 2008) diff --git a/README b/README index 563cf65..60f0b02 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.5.6 +DOXYGEN Version 1.5.6_20080626 Please read INSTALL for compilation instructions. @@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. Enjoy, -Dimitri van Heesch (dimitri@stack.nl) (17 May 2008) +Dimitri van Heesch (dimitri@stack.nl) (26 June 2008) diff --git a/configure b/configure index 956336c..0b1e2fa 100755 --- a/configure +++ b/configure @@ -20,7 +20,7 @@ doxygen_version_minor=5 doxygen_version_revision=6 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. -doxygen_version_mmn=NO +doxygen_version_mmn=20080626 bin_dirs=`echo $PATH | sed -e "s/:/ /g"` @@ -669,7 +669,7 @@ fi echo -n " Generating src/lang_cfg.h..." echo $f_langs | $f_perl -e '@l=split(/,/,); chomp @l; - @allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA")); + @allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA,SC")); foreach my $elem (@l){ $elem =~ tr/a-z/A-Z/; $r=0; diff --git a/doc/config.doc b/doc/config.doc index b0a4cb5..1f3905a 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -1261,8 +1261,9 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" HTML output directory. Running \c make will produce the docset in that directory and running make install will install the docset in ~/Library/Developer/Shared/Documentation/DocSets - so that Xcode will find it at startup. - + so that Xcode will find it at startup. See + + this article for more information. \anchor cfg_docset_feedname
\c DOCSET_FEEDNAME
diff --git a/doc/language.doc b/doc/language.doc index 62957ae..d991d65 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -23,14 +23,14 @@ text fragments, generated by doxygen, can be produced in languages other than English (the default). The output language is chosen through the configuration file (with default name and known as Doxyfile). -Currently (version 1.5.5), 34 languages +Currently (version 1.5.6), 35 languages are supported (sorted alphabetically): Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, -Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and -Ukrainian.. +Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, +Swedish, and Ukrainian.. The table of information related to the supported languages follows. It is sorted by language alphabetically. The Status column @@ -193,7 +193,7 @@ when the translator was updated. Macedonian Slave Jovanovski slavejovanovski at yahoo dot com - 1.5.04 + up-to-date Norwegian @@ -238,6 +238,12 @@ when the translator was updated. 1.4.1 + SerbianCyrilic + Nedeljko Stefanovic + stenedjo at yahoo dot com + up-to-date + + Slovak Stanislav Kudláč skudlac at pobox dot sk @@ -339,7 +345,7 @@ when the translator was updated. ~ & Mindaugas Radzius & {\tt\tiny mindaugasradzius@takas.lt} & ~ \\ ~ & Aidas Berukstis & {\tt\tiny aidasber@takas.lt} & ~ \\ \hline - Macedonian & Slave Jovanovski & {\tt\tiny slavejovanovski@yahoo.com} & 1.5.04 \\ + Macedonian & Slave Jovanovski & {\tt\tiny slavejovanovski@yahoo.com} & up-to-date \\ \hline Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.4.6 \\ \hline @@ -356,6 +362,8 @@ when the translator was updated. \hline Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.4.1 \\ \hline + SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo@yahoo.com} & up-to-date \\ + \hline Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\ \hline Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ostri.org} & 1.4.6 \\ diff --git a/doc/maintainers.txt b/doc/maintainers.txt index b90bd8e..cacf416 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -108,6 +108,9 @@ Alexandr Chelpanov: cav@cryptopro.ru TranslatorSerbian Dejan Milosavljevic: dmilos@email.com +TranslatorSerbianCyrilic +Nedeljko Stefanovic: stenedjo@yahoo.com + TranslatorSlovak Stanislav Kudláč: skudlac@pobox.sk diff --git a/doc/translator_report.txt b/doc/translator_report.txt index c1311f7..8598404 100644 --- a/doc/translator_report.txt +++ b/doc/translator_report.txt @@ -1,15 +1,15 @@ -(1.5.5) +(1.5.6) -Doxygen supports the following 34 languages (sorted alphabetically): +Doxygen supports the following 35 languages (sorted alphabetically): Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, -Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and -Ukrainian. +Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, +Swedish, and Ukrainian. -Of them, 14 translators are up-to-date, 20 translators are based on +Of them, 16 translators are up-to-date, 19 translators are based on some adapter class, and 2 are English based. ---------------------------------------------------------------------- @@ -29,8 +29,10 @@ still may be some details listed even for them: TranslatorGerman TranslatorItalian TranslatorKorean + TranslatorMacedonian TranslatorPersian TranslatorRussian + TranslatorSerbianCyrilic TranslatorSpanish -- Change the base class to Translator. ---------------------------------------------------------------------- @@ -39,9 +41,6 @@ obsolete at the end). The other info shows the estimation of Doxygen version when the class was last updated and number of methods that must be implemented to become up-to-date: - TranslatorMacedonian 1.5.04 22 methods to implement - Note: Change the base class to TranslatorAdapter_1_5_4. - TranslatorJapanese 1.5.4 22 methods to implement TranslatorGreek 1.5.4 22 methods to implement TranslatorFrench 1.5.4 22 methods to implement @@ -470,37 +469,6 @@ TranslatorLithuanian (TranslatorAdapter_1_4_6) 24 methods to implement virtual QCString trSubprogramDocumentation() -TranslatorMacedonian (TranslatorAdapter_1_4_6) 22 methods to implement --------------------- - - Implements 194 of the required methods. - - Missing methods (should be implemented): - - virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) - virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single) - virtual QCString trSubprograms() - virtual QCString trModulesListDescription(bool extractAll) - virtual QCString trModulesList() - virtual QCString trTypeConstraints() - virtual QCString trMemberFunctionDocumentationFortran() - virtual QCString trCompoundListDescriptionFortran() - virtual QCString trTypeDocumentation() - virtual QCString trModuleReference(const char * namespaceName) - virtual QCString trModulesMemberDescription(bool extractAll) - virtual QCString trModulesMembers() - virtual QCString trModulesIndex() - virtual QCString trCompoundListFortran() - virtual QCString trDataTypes() - virtual QCString trCompoundIndexFortran() - virtual QCString trSubprogram(bool first_capital, bool singular) - virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate) - virtual QCString trType(bool first_capital, bool singular) - virtual QCString trModule(bool first_capital, bool singular) - virtual QCString trCompoundMembersFortran() - virtual QCString trSubprogramDocumentation() - - TranslatorNorwegian (TranslatorAdapter_1_4_6) 23 methods to implement ------------------- diff --git a/src/code.l b/src/code.l index 01e504e..fde0d82 100644 --- a/src/code.l +++ b/src/code.l @@ -1285,69 +1285,71 @@ static void startFontClass(const char *s) static void writeObjCMethodCall(ObjCCallCtx *ctx) { if (ctx==0) return; - if (ctx->methodName.isEmpty()) return; - const char *p = ctx->format.data(); - //printf("writeObjCMethodCall(%s) obj=%s method=%s\n", - // ctx->format.data(),ctx->objectTypeOrName.data(),ctx->methodName.data()); char c; - if (!ctx->objectTypeOrName.isEmpty() && ctx->objectTypeOrName.at(0)!='$') + const char *p = ctx->format.data(); + if (!ctx->methodName.isEmpty()) { - //printf("Looking for object=%s method=%s\n",ctx->objectTypeOrName.data(), - // ctx->methodName.data()); - ClassDef *cd = g_theVarContext.findVariable(ctx->objectTypeOrName); - if (cd==0) // not a local variable + //printf("writeObjCMethodCall(%s) obj=%s method=%s\n", + // ctx->format.data(),ctx->objectTypeOrName.data(),ctx->methodName.data()); + if (!ctx->objectTypeOrName.isEmpty() && ctx->objectTypeOrName.at(0)!='$') { - if (ctx->objectTypeOrName=="self") + //printf("Looking for object=%s method=%s\n",ctx->objectTypeOrName.data(), + // ctx->methodName.data()); + ClassDef *cd = g_theVarContext.findVariable(ctx->objectTypeOrName); + if (cd==0) // not a local variable { - if (g_currentDefinition && - g_currentDefinition->definitionType()==Definition::TypeClass) + if (ctx->objectTypeOrName=="self") { - ctx->objectType = (ClassDef *)g_currentDefinition; + if (g_currentDefinition && + g_currentDefinition->definitionType()==Definition::TypeClass) + { + ctx->objectType = (ClassDef *)g_currentDefinition; + } } - } - else - { - ctx->objectType = getResolvedClass( - g_currentDefinition, - g_sourceFileDef, - ctx->objectTypeOrName, - &ctx->method); - } - //printf(" object is class? %p\n",ctx->objectType); - if (ctx->objectType) // found class - { - ctx->method = ctx->objectType->getMemberByName(ctx->methodName); - //printf(" yes->method=%s\n",ctx->method?ctx->method->name().data():""); - } - else if (ctx->method==0) // search for class variable with the same name - { - //printf(" no\n"); - //printf("g_currentDefinition=%p\n",g_currentDefinition); - if (g_currentDefinition && - g_currentDefinition->definitionType()==Definition::TypeClass) + else { - ctx->objectVar = ((ClassDef *)g_currentDefinition)->getMemberByName(ctx->objectTypeOrName); - //printf(" ctx->objectVar=%p\n",ctx->objectVar); - if (ctx->objectVar) + ctx->objectType = getResolvedClass( + g_currentDefinition, + g_sourceFileDef, + ctx->objectTypeOrName, + &ctx->method); + } + //printf(" object is class? %p\n",ctx->objectType); + if (ctx->objectType) // found class + { + ctx->method = ctx->objectType->getMemberByName(ctx->methodName); + //printf(" yes->method=%s\n",ctx->method?ctx->method->name().data():""); + } + else if (ctx->method==0) // search for class variable with the same name + { + //printf(" no\n"); + //printf("g_currentDefinition=%p\n",g_currentDefinition); + if (g_currentDefinition && + g_currentDefinition->definitionType()==Definition::TypeClass) { - ctx->objectType = stripClassName(ctx->objectVar->typeString()); - //printf(" ctx->objectType=%p\n",ctx->objectType); - if (ctx->objectType) + ctx->objectVar = ((ClassDef *)g_currentDefinition)->getMemberByName(ctx->objectTypeOrName); + //printf(" ctx->objectVar=%p\n",ctx->objectVar); + if (ctx->objectVar) { - ctx->method = ctx->objectType->getMemberByName(ctx->methodName); - //printf(" ctx->method=%p\n",ctx->method); + ctx->objectType = stripClassName(ctx->objectVar->typeString()); + //printf(" ctx->objectType=%p\n",ctx->objectType); + if (ctx->objectType) + { + ctx->method = ctx->objectType->getMemberByName(ctx->methodName); + //printf(" ctx->method=%p\n",ctx->method); + } } } } } - } - else // local variable - { - //printf(" object is local variable\n"); - if (cd!=VariableContext::dummyContext) + else // local variable { - ctx->method = cd->getMemberByName(ctx->methodName); - //printf(" class=%p method=%p\n",cd,ctx->method); + //printf(" object is local variable\n"); + if (cd!=VariableContext::dummyContext) + { + ctx->method = cd->getMemberByName(ctx->methodName); + //printf(" class=%p method=%p\n",cd,ctx->method); + } } } } @@ -1653,8 +1655,8 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">" SCOPETNAME ((({ID}{TEMPLIST}?){BN}*"::"{BN}*)*)((~{BN}*)?{ID}) SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*"::"{BN}*)+ -KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol") -KEYWORD ("add"|"asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|KEYWORD_OBJC) +KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw") +KEYWORD ("add"|"asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC}) FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while") TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string") CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast") diff --git a/src/commentscan.l b/src/commentscan.l index 87c9080..cfbc050 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -2486,7 +2486,7 @@ void closeGroup(Entry *e,const char *fileName,int) if (g_memberGroupId!=DOX_NOGROUP) // end of member group { MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId); - if (info) // know group + if (info) // known group { info->doc = g_memberGroupDocs; info->docFile = fileName; diff --git a/src/config.l b/src/config.l index 9d49c92..ee1ebab 100644 --- a/src/config.l +++ b/src/config.l @@ -1423,8 +1423,8 @@ void Config::create() "Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n" "Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n" "Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n" - "Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, \n" - "and Ukrainian.\n", + "Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \n" + "Spanish, Swedish, and Ukrainian.\n", "English" ); #ifdef LANG_ZA @@ -1512,6 +1512,9 @@ void Config::create() #ifdef LANG_SR ce->addValue("Serbian"); #endif +#ifdef LANG_SC + ce->addValue("Serbian-Cyrilic"); +#endif #ifdef LANG_SK ce->addValue("Slovak"); #endif @@ -2354,7 +2357,9 @@ void Config::create() "HTML output directory. Running make will produce the docset in that \n" "directory and running \"make install\" will install the docset in \n" "~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \n" - "it at startup.", + "it at startup. \n" + "See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html " + "for more information. \n", FALSE ); cb->addDependency("GENERATE_HTML"); diff --git a/src/defargs.h b/src/defargs.h index cb0f81b..6f23269 100644 --- a/src/defargs.h +++ b/src/defargs.h @@ -23,7 +23,7 @@ class ArgumentList; -extern void stringToArgumentList(const char *argsString,ArgumentList* &argList, +extern void stringToArgumentList(const char *argsString,ArgumentList* argList, QCString *extraTypeChars=0); #endif diff --git a/src/defargs.l b/src/defargs.l index 9fe6372..f44c1f3 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -426,7 +426,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* * \param al a reference to resulting argument list pointer. */ -void stringToArgumentList(const char *argsString,ArgumentList* &al,QCString *extraTypeChars) +void stringToArgumentList(const char *argsString,ArgumentList* al,QCString *extraTypeChars) { if (al==0) return; if (argsString==0) return; diff --git a/src/docparser.cpp b/src/docparser.cpp index 279d0e9..a434ac7 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -468,6 +468,7 @@ static void detectNoDocumentedParams() LockingPtr al = g_memberDef->argumentList(); LockingPtr declAl = g_memberDef->declArgumentList(); QString returnType = g_memberDef->typeString(); + bool isPython = getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python; if (!g_memberDef->hasDocumentedParams() && g_hasParamCommand) @@ -489,7 +490,9 @@ static void detectNoDocumentedParams() // see if all parameters have documentation for (ali.toFirst();(a=ali.current()) && allDoc;++ali) { - if (!a->name.isEmpty() && a->type!="void") + if (!a->name.isEmpty() && a->type!="void" && + !(isPython && a->name=="self") + ) { allDoc = !a->docs.isEmpty(); } @@ -503,7 +506,9 @@ static void detectNoDocumentedParams() Argument *a; for (ali.toFirst();(a=ali.current()) && allDoc;++ali) { - if (!a->name.isEmpty() && a->type!="void") + if (!a->name.isEmpty() && a->type!="void" && + !(isPython && a->name=="self") + ) { allDoc = !a->docs.isEmpty(); } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 3c878b8..c2cd624 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -2350,28 +2350,8 @@ done: return result; } -//---------------------------------------------------------------------- -// Searches the Entry tree for Variable documentation sections. -// If found they are stored in their class or in the global list. - -static void buildVarList(EntryNav *rootNav) +static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) { - //printf("buildVarList(%s)\n",rootNav->name().data()); - int isFuncPtr=-1; - if (!rootNav->name().isEmpty() && - (rootNav->type().isEmpty() || compoundKeywordDict.find(rootNav->type())==0) && - ( - (rootNav->section()==Entry::VARIABLE_SEC // it's a variable - ) || - (rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable - (isFuncPtr=findFunctionPtr(rootNav->type()))!=-1 - ) || - (rootNav->section()==Entry::FUNCTION_SEC && // class variable initialized by constructor - isVarWithConstructor(rootNav) - ) - ) - ) // documented variable - { rootNav->loadEntry(g_storage); Entry *root = rootNav->entry(); @@ -2493,44 +2473,6 @@ static void buildVarList(EntryNav *rootNav) else mtype=MemberDef::Variable; -#if 0 // does not work correctly - //static bool typedefHidesStruct = Config_getBool("TYPEDEF_HIDES_STRUCT"); - if (typedefHidesStruct) // substitute names with typedef'ed names - { - QCString baseType = type; - baseType.stripPrefix("typedef "); - if (baseType.stripPrefix("enum ")) - { - MemberName *mn=Doxygen::functionNameSDict->find(baseType.stripWhiteSpace()); - MemberNameIterator mni(*mn); - MemberDef *md; - for (mni.toFirst();(md=mni.current());++mni) - { - if (md->isEnumerate()) - { - md->setName(name); - md->setDefinition(name); - goto nextMember; - } - } - } - else - { - baseType.stripPrefix("struct "); - baseType.stripPrefix("union "); - { - ClassDef *typedefClass = Doxygen::classSDict->find(baseType); - if (typedefClass) - { - typedefClass->setName(name); - typedefClass->setClassName(name); - goto nextMember; - } - } - } - } -#endif - if (!root->relates.isEmpty()) // related variable { isRelated=TRUE; @@ -2606,9 +2548,61 @@ static void buildVarList(EntryNav *rootNav) //printf("Inserting member in global scope %s!\n",scope.data()); addVariableToFile(rootNav,mtype,scope,name,FALSE,/*0,*/0); } -nextMember: +nextMember: rootNav->releaseEntry(); +} + +//---------------------------------------------------------------------- +// Searches the Entry tree for typedef documentation sections. +// If found they are stored in their class or in the global list. +static void buildTypedefList(EntryNav *rootNav) +{ + //printf("buildVarList(%s)\n",rootNav->name().data()); + if (!rootNav->name().isEmpty() && + rootNav->section()==Entry::VARIABLE_SEC && + rootNav->type().find("typedef ")!=-1 // its a typedef + ) + { + addVariable(rootNav); + } + if (rootNav->children()) + { + EntryNavListIterator eli(*rootNav->children()); + EntryNav *e; + for (;(e=eli.current());++eli) + { + if (e->section()!=Entry::ENUM_SEC) + { + buildTypedefList(e); + } + } + } +} + +//---------------------------------------------------------------------- +// Searches the Entry tree for Variable documentation sections. +// If found they are stored in their class or in the global list. + +static void buildVarList(EntryNav *rootNav) +{ + //printf("buildVarList(%s)\n",rootNav->name().data()); + int isFuncPtr=-1; + if (!rootNav->name().isEmpty() && + (rootNav->type().isEmpty() || compoundKeywordDict.find(rootNav->type())==0) && + ( + (rootNav->section()==Entry::VARIABLE_SEC // it's a variable + ) || + (rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable + (isFuncPtr=findFunctionPtr(rootNav->type()))!=-1 + ) || + (rootNav->section()==Entry::FUNCTION_SEC && // class variable initialized by constructor + isVarWithConstructor(rootNav) + ) + ) + ) // documented variable + { + addVariable(rootNav,isFuncPtr); } if (rootNav->children()) { @@ -4110,8 +4104,10 @@ static bool findClassRelation( { baseClassName.prepend(scopeName.left(scopeOffset)+"::"); } - baseClassName=stripTemplateSpecifiersFromScope - (removeRedundantWhiteSpace(baseClassName)); + //QCString stripped; + //baseClassName=stripTemplateSpecifiersFromScope + // (removeRedundantWhiteSpace(baseClassName),TRUE, + // &stripped); MemberDef *baseClassTypeDef=0; QCString templSpec; ClassDef *baseClass=getResolvedClass(explicitGlobalScope ? 0 : cd, @@ -9808,6 +9804,13 @@ void parseInput() msg("Searching for enumerations...\n"); findEnums(rootNav); + // Since buildVarList calls isVarWithConstructor + // and this calls getResolvedClass we need to process + // typedefs first so the relations between classes via typedefs + // are properly resolved. See bug 536385 for an example. + msg("Searching for documented typedefs...\n"); + buildTypedefList(rootNav); + msg("Searching for documented variables...\n"); buildVarList(rootNav); diff --git a/src/language.cpp b/src/language.cpp index aa5de7b..ebe6c84 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -131,6 +131,9 @@ #ifdef LANG_MK #include "translator_mk.h" #endif +#ifdef LANG_SC +#include "translator_sc.h" +#endif #endif // !ENGLISH_ONLY #define L_EQUAL(a) !stricmp(langName,a) @@ -217,9 +220,7 @@ bool setTranslator(const char *langName) #ifdef LANG_FI else if (L_EQUAL("finnish")) { - //theTranslator=new TranslatorFinnish; - theTranslator=new TranslatorEnglish; - err(obsoleteMsg); + theTranslator=new TranslatorDecoder(new TranslatorFinnish); } #endif #ifdef LANG_RU @@ -330,6 +331,12 @@ bool setTranslator(const char *langName) theTranslator=new TranslatorDecoder(new TranslatorSerbian); } #endif +#ifdef LANG_SC + else if (L_EQUAL("serbian-cyrilic")) + { + theTranslator=new TranslatorSerbian; + } +#endif #ifdef LANG_CA else if (L_EQUAL("catalan")) { diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 2180bb9..824d8e9 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -1808,7 +1808,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, Specifier lvirt=virtualness(); - if (!isObjCMethod() && + if ((!isObjCMethod() || isOptional() || isRequired()) && (protection()!=Public || lvirt!=Normal || isFriend() || isRelated() || (isInline() && Config_getBool("INLINE_INFO")) || @@ -1855,13 +1855,18 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, if (isAssign()) sl.append("assign"); else if (isCopy()) sl.append("copy"); else if (isRetain()) sl.append("retain"); - if (protection()==Protected) sl.append("protected"); - else if (protection()==Private) sl.append("private"); - else if (protection()==Package) sl.append("package"); - if (lvirt==Virtual) sl.append("virtual"); - else if (lvirt==Pure) sl.append("pure virtual"); - if (isSignal()) sl.append("signal"); - if (isSlot()) sl.append("slot"); + + if (!isObjCMethod()) + { + if (protection()==Protected) sl.append("protected"); + else if (protection()==Private) sl.append("private"); + else if (protection()==Package) sl.append("package"); + + if (lvirt==Virtual) sl.append("virtual"); + else if (lvirt==Pure) sl.append("pure virtual"); + if (isSignal()) sl.append("signal"); + if (isSlot()) sl.append("slot"); + } } if (m_impl->classDef && m_impl->classDef!=container) sl.append("inherited"); } diff --git a/src/portable.cpp b/src/portable.cpp index 59484b2..7bbe33f 100644 --- a/src/portable.cpp +++ b/src/portable.cpp @@ -382,7 +382,9 @@ size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft, // avoid a compile error, that is were the CASTNEEDED is for. #if ((defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109) && \ !((defined(_OS_MAC_) || defined(Q_OS_MACX) )&& (_LIBICONV_VERSION==0x010B))) \ - || defined(_OS_SOLARIS_)) + || defined(_OS_SOLARIS_) \ + || defined(_OS_NETBSD_) \ + ) #define CASTNEEDED(x) (x) #else #define CASTNEEDED(x) (char **)(x) diff --git a/src/pyscanner.l b/src/pyscanner.l index b70c448..6c832f7 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -535,6 +535,16 @@ STARTDOCSYMS ^{B}"##"/[^#] g_packageCommentAllowed = FALSE; BEGIN( Import ); } + ^{B}{IDENTIFIER}/{B}"="{B}"property" { // property + current->section = Entry::VARIABLE_SEC; + current->mtype = Property; + current->name = QCString(yytext).stripWhiteSpace(); + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + g_packageCommentAllowed = FALSE; + BEGIN(VariableDec); + } ^{B}{IDENTIFIER}/{B}"="[^=] { // variable g_indent=computeIndent(yytext); current->section = Entry::VARIABLE_SEC; @@ -1129,7 +1139,10 @@ STARTDOCSYMS ^{B}"##"/[^#] BEGIN(TripleString); } "(" { // tuple - current->type = "tuple"; + if (current->mtype!=Property) + { + current->type = "tuple"; + } current->initializer+=*yytext; g_atomStart='('; g_atomEnd=')'; diff --git a/src/scanner.l b/src/scanner.l index e05e38b..4557ac1 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -1254,10 +1254,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) {B}*"explicit"{BN}+ { current->spec|=Entry::Explicit; lineCount(); } -{B}*"@required"{BN}+ { current->spec|=Entry::Required; +{B}*"@required"{BN}+ { // Objective C 2.0 protocol required section + current->spec=(current->spec & ~Entry::Optional) | Entry::Required; lineCount(); } -{B}*"@optional"{BN}+ { current->spec|=Entry::Optional; +{B}*"@optional"{BN}+ { // Objective C 2.0 protocol optional section + current->spec=(current->spec & ~Entry::Required) | Entry::Optional; lineCount(); } /* @@ -4064,6 +4066,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current_root->addSubEntry(current); current = new Entry ; initEntry(); + // Objective C 2.0: Required/Optional section + if (previous->spec & (Entry::Optional | Entry::Required)) + { + current->spec |= previous->spec & (Entry::Optional|Entry::Required); + } lastCurlyContext = FindMembers; if ( *yytext == ',' ) { @@ -4754,7 +4761,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ")" { if (--roundCount<=0) BEGIN ( lastSkipRoundContext ); } -","|">"|({BN}+"implements"{BN}*) { lineCount(); +","|(">"({BN}*"{")?)|({BN}+"implements"{BN}*) { lineCount(); if (insideProtocolList) { baseName+="-p"; @@ -4785,7 +4792,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) if (*yytext=='>') { // end of a ObjC protocol list insideProtocolList=FALSE; - unput('{'); // dummy start body + if (yyleng==1) + { + unput('{'); // dummy start body + } + else + { + yyless(1); + } } else { diff --git a/src/translator_en.h b/src/translator_en.h index fda3b22..eeff2b6 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -1042,8 +1042,7 @@ class TranslatorEnglish : public Translator " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file " - "is set to 240 this will result in the following graph:" + "This will result in the following graph:" "

\"\"
\n" "

\n" "The boxes in the above graph have the following meaning:\n" diff --git a/src/translator_mk.h b/src/translator_mk.h index 0500b66..49ab516 100644 --- a/src/translator_mk.h +++ b/src/translator_mk.h @@ -24,12 +24,15 @@ // 2007/12/09 // - Initial translation to Macedonian. // +// 2008/05/22 +// - Translation for 1.5.4. +// // #ifndef TRANSLATOR_MK_H #define TRANSLATOR_MK_H -class TranslatorMacedonian : public TranslatorAdapter_1_4_6 +class TranslatorMacedonian : public Translator { public: @@ -1558,7 +1561,207 @@ class TranslatorMacedonian : public TranslatorAdapter_1_4_6 virtual QCString trEnumerationValueDocumentation() { return "Документија на Набројувања"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Документација на функции/процедури членови"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Список на Типови"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Членови"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Список на типови со кратки описи:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Список на сите "; + if (!extractAll) + { + result+="документирани "; + } + result+="членови на типови"; + result+=" со врски до "; + if (!extractAll) + { + result+="документацијата за секој член:"; + } + else + { + result+="типовите на кои што припаѓаат:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Попис на Типови"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Документација на Типови"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Функции/Процедури"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Документација на Функции/Процедури"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Типови"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Попис на Модули"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Список на сите "; + if (!extractAll) result+="документирани "; + result+="модули со кратки описи:"; + return result; + } + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result=(QCString)clName + " - Повикување на"; + switch(compType) + { + case ClassDef::Class: result+=" Класа"; break; + case ClassDef::Struct: result+=" Тип"; break; + case ClassDef::Union: result+=" Унија"; break; + case ClassDef::Interface: result+=" Интерфејс"; break; + case ClassDef::Protocol: result+=" Протокол"; break; + case ClassDef::Category: result+=" Категорија"; break; + case ClassDef::Exception: result+=" Исклучок"; break; + } + if (isTemplate) result+=" Образец"; + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" - Содржина на Модул"; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Членови на Модул"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Список на сите "; + if (!extractAll) result+="документирани "; + result+="членови на модулот со врски до "; + if (extractAll) + { + result+="документацијата за секој член:"; + } + else + { + result+="модулите на кои што припаѓаат:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Попис на Модули"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Модул" : "модул")); + if (!singular) result+="и"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"Документацијата за "; + switch(compType) + { + case ClassDef::Class: result+="оваа класа"; break; + case ClassDef::Struct: result+="овој тип"; break; + case ClassDef::Union: result+="оваа унија"; break; + case ClassDef::Interface: result+="овој интерфејс"; break; + case ClassDef::Protocol: result+="овој протокол"; break; + case ClassDef::Category: result+="оваа категорија"; break; + case ClassDef::Exception: result+="овој исклучок"; break; + } + result+=" беше создадена од "; + if (single) result+="следнава датотека:"; else result+="следниве датотеки:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "Тип" : "тип")); + if (!singular) result+="ови"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Потпрограм" : "потпрограм")); + if (singular){ + result+="а"; + }else{ + result+="и"; + } + + return result; + } + + /*! C# Type Constraint list */ + virtual QCString trTypeConstraints() + { + return "Ограничувања на Тип"; + } }; #endif diff --git a/src/translator_nl.h b/src/translator_nl.h index 672926a..d7b61f7 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -674,8 +674,7 @@ class TranslatorDutch : public Translator " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Als de \\c MAX_DOT_GRAPH_HEIGHT tag in the configuratie file " - "op 200 gezet is, zal het bestaande voorbeeld resulteren in de volgende graaf:" + "Dit voorbeeld zal resulteren in de volgende graaf:" "

\n" "

\n" "De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:\n" diff --git a/src/translator_sc.h b/src/translator_sc.h new file mode 100644 index 0000000..1439e82 --- /dev/null +++ b/src/translator_sc.h @@ -0,0 +1,1805 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2008 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_SC_H +#define TRANSLATOR_SC_H + +/*! + When defining a translator class for the new language, follow + the description in the documentation. One of the steps says + that you should copy the translator_en.h (this) file to your + translator_xx.h new file. Your new language should use the + Translator class as the base class. This means that you need to + implement exactly the same (pure virtual) methods as the + TranslatorEnglish does. Because of this, it is a good idea to + start with the copy of TranslatorEnglish and replace the strings + one by one. + + It is not necessary to include "translator.h" or + "translator_adapter.h" here. The files are included in the + language.cpp correctly. Not including any of the mentioned + files frees the maintainer from thinking about whether the + first, the second, or both files should be included or not, and + why. This holds namely for localized translators because their + base class is changed occasionaly to adapter classes when the + Translator class changes the interface, or back to the + Translator class (by the local maintainer) when the localized + translator is made up-to-date again. +*/ +class TranslatorSerbianCyrilic : public Translator +{ + public: + + // --- Language control methods ------------------- + + /*! Used for identification of the language. The identification + * should not be translated. It should be replaced by the name + * of the language in English using lower-case characters only + * (e.g. "czech", "japanese", "russian", etc.). It should be equal to + * the identification used in language.cpp. + */ + virtual QCString idLanguage() + { return "serbiancyr"; } + + /*! Used to get the LaTeX command(s) for the language support. + * This method should return string with commands that switch + * LaTeX to the desired language. For example + *

"\\usepackage[german]{babel}\n"
+     *  
+ * or + *
"\\usepackage{polski}\n"
+     *  "\\usepackage[latin2]{inputenc}\n"
+     *  "\\usepackage[T1]{fontenc}\n"
+     *  
+ * + * The English LaTeX does not use such commands. Because of this + * the empty string is returned in this implementation. + */ + virtual QCString latexLanguageSupportCommand() + { + return ""; + } + + /*! return the language charset. This will be used for the HTML output */ + virtual QCString idLanguageCharset() + { + return "utf-8"; + } + + // --- Language translation methods ------------------- + + /*! used in the compound documentation before a list of related functions. */ + virtual QCString trRelatedFunctions() + { return "Повезане функције"; } + + /*! subscript for the related functions. */ + virtual QCString trRelatedSubscript() + { return "(Напомињемо да ово нису функције чланице.)"; } + + /*! header that is put before the detailed description of files, classes and namespaces. */ + virtual QCString trDetailedDescription() + { return "Опширније"; } + + /*! header that is put before the list of typedefs. */ + virtual QCString trMemberTypedefDocumentation() + { return "Документација дефиниције типа"; } + + /*! header that is put before the list of enumerations. */ + virtual QCString trMemberEnumerationDocumentation() + { return "Документација члана набрајања"; } + + /*! header that is put before the list of member functions. */ + virtual QCString trMemberFunctionDocumentation() + { return "Документација функције чланице"; } + + /*! header that is put before the list of member attributes. */ + virtual QCString trMemberDataDocumentation() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Документација поља"; + } + else + { + return "Документација атрибута"; + } + } + + /*! this is the text of a link put after brief descriptions. */ + virtual QCString trMore() + { return "Још..."; } + + /*! put in the class documentation */ + virtual QCString trListOfAllMembers() + { return "Списак свих чланова."; } + + /*! used as the title of the "list of all members" page of a class */ + virtual QCString trMemberList() + { return "Списак чланова"; } + + /*! this is the first part of a sentence that is followed by a class name */ + virtual QCString trThisIsTheListOfAllMembers() + { return "Ово је списак свих чланова од "; } + + /*! this is the remainder of the sentence after the class name */ + virtual QCString trIncludingInheritedMembers() + { return ", укључујући све наслеђене чланове."; } + + /*! this is put at the author sections at the bottom of man pages. + * parameter s is name of the project name. + */ + virtual QCString trGeneratedAutomatically(const char *s) + { QCString result="Аутоматски направљено помоћу Doxygen-а"; + if (s) result+=(QCString)" за "+s; + result+=" из изворног кода."; + return result; + } + + /*! put after an enum name in the list of all members */ + virtual QCString trEnumName() + { return "назив набрајања"; } + + /*! put after an enum value in the list of all members */ + virtual QCString trEnumValue() + { return "вредност набрајања"; } + + /*! put after an undocumented member in the list of all members */ + virtual QCString trDefinedIn() + { return "дефинисано у"; } + + // quick reference sections + + /*! This is put above each page as a link to the list of all groups of + * compounds or files (see the \\group command). + */ + virtual QCString trModules() + { return "Модули"; } + + /*! This is put above each page as a link to the class hierarchy */ + virtual QCString trClassHierarchy() + { return "Хијерархија класа"; } + + /*! This is put above each page as a link to the list of annotated classes */ + virtual QCString trCompoundList() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Структуре"; + } + else + { + return "Списак класа"; + } + } + + /*! This is put above each page as a link to the list of documented files */ + virtual QCString trFileList() + { return "Списак датотека"; } + + /*! This is put above each page as a link to all members of compounds. */ + virtual QCString trCompoundMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Поља"; + } + else + { + return "Чланови класе"; + } + } + + /*! This is put above each page as a link to all members of files. */ + virtual QCString trFileMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Глобално"; + } + else + { + return "Чланови датотеке"; + } + } + + /*! This is put above each page as a link to all related pages. */ + virtual QCString trRelatedPages() + { return "Повезане странице"; } + + /*! This is put above each page as a link to all examples. */ + virtual QCString trExamples() + { return "Примери"; } + + /*! This is put above each page as a link to the search engine. */ + virtual QCString trSearch() + { return "Тражи"; } + + /*! This is an introduction to the class hierarchy. */ + virtual QCString trClassHierarchyDescription() + { return "Овај списак наслеђивања је уређен " + "скоро по абецеди:"; + } + + /*! This is an introduction to the list with all files. */ + virtual QCString trFileListDescription(bool extractAll) + { + QCString result="Овде је списак свих "; + if (!extractAll) result+="документованих "; + result+="датотека са кратким описима:"; + return result; + } + + /*! This is an introduction to the annotated compound list. */ + virtual QCString trCompoundListDescription() + { + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Овде су структуре са кратким описима:"; + } + else + { + return "Овде су класе, структуре, " + "уније и интерфејси са кратким описима:"; + } + } + + /*! This is an introduction to the page with all class members. */ + virtual QCString trCompoundMembersDescription(bool extractAll) + { + QCString result="Овде је списак свих "; + if (!extractAll) + { + result+="документованих "; + } + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="поља структура и унија"; + } + else + { + result+="чланова класа"; + } + result+=" са везама ка "; + if (!extractAll) + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="документацији структуре/уније за свако поље:"; + } + else + { + result+="документацији класе за сваки члан:"; + } + } + else + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="структури/унији којој припадају:"; + } + else + { + result+="класи којој припадају:"; + } + } + return result; + } + + /*! This is an introduction to the page with all file members. */ + virtual QCString trFileMembersDescription(bool extractAll) + { + QCString result="Овде је списак свих "; + if (!extractAll) result+="документованих "; + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="фрункција, променљивих, макро замена, набрајања, и дефиниција типова"; + } + else + { + result+="чланова датотеке"; + } + result+=" са везама ка "; + if (extractAll) + result+="датотекама којима припадају:"; + else + result+="документацији:"; + return result; + } + + /*! This is an introduction to the page with the list of all examples */ + virtual QCString trExamplesDescription() + { return "Овде је списак свих примера:"; } + + /*! This is an introduction to the page with the list of related pages */ + virtual QCString trRelatedPagesDescription() + { return "Овде је списак свих повезаних страница документације:"; } + + /*! This is an introduction to the page with the list of class/file groups */ + virtual QCString trModulesDescription() + { return "Овде је списак свих модула:"; } + + // index titles (the project name is prepended for these) + + /*! This is used in HTML as the title of index.html. */ + virtual QCString trDocumentation() + { return "Документација"; } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all groups. + */ + virtual QCString trModuleIndex() + { return "Индекс модула"; } + + /*! This is used in LaTeX as the title of the chapter with the + * class hierarchy. + */ + virtual QCString trHierarchicalIndex() + { return "Хијерархијски индекс"; } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index. + */ + virtual QCString trCompoundIndex() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Индекс структура"; + } + else + { + return "Индекс класа"; + } + } + + /*! This is used in LaTeX as the title of the chapter with the + * list of all files. + */ + virtual QCString trFileIndex() + { return "Индекс датотека"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all groups. + */ + virtual QCString trModuleDocumentation() + { return "Документација модула"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all classes, structs and unions. + */ + virtual QCString trClassDocumentation() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Документација структуре"; + } + else + { + return "Документација класе"; + } + } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all files. + */ + virtual QCString trFileDocumentation() + { return "Документација датотеке"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all examples. + */ + virtual QCString trExampleDocumentation() + { return "Документација примера"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all related pages. + */ + virtual QCString trPageDocumentation() + { return "Документација странице"; } + + /*! This is used in LaTeX as the title of the document */ + virtual QCString trReferenceManual() + { return "Приручник"; } + + /*! This is used in the documentation of a file as a header before the + * list of defines + */ + virtual QCString trDefines() + { return "Дефиниције"; } + + /*! This is used in the documentation of a file as a header before the + * list of function prototypes + */ + virtual QCString trFuncProtos() + { return "Декларације функција"; } + + /*! This is used in the documentation of a file as a header before the + * list of typedefs + */ + virtual QCString trTypedefs() + { return "Дефиниције типова"; } + + /*! This is used in the documentation of a file as a header before the + * list of enumerations + */ + virtual QCString trEnumerations() + { return "Набрајања"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) functions + */ + virtual QCString trFunctions() + { return "Функције"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trVariables() + { return "Променљиве"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trEnumerationValues() + { return "Вредности набрајања"; } + + /*! This is used in the documentation of a file before the list of + * documentation blocks for defines + */ + virtual QCString trDefineDocumentation() + { return "Документација дефиниције"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for function prototypes + */ + virtual QCString trFunctionPrototypeDocumentation() + { return "Документација декларације функције"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for typedefs + */ + virtual QCString trTypedefDocumentation() + { return "Документација дефиниције типа"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration types + */ + virtual QCString trEnumerationTypeDocumentation() + { return "Документација набрајања"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for functions + */ + virtual QCString trFunctionDocumentation() + { return "Документација функције"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for variables + */ + virtual QCString trVariableDocumentation() + { return "Документација променљиве"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds + */ + virtual QCString trCompounds() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Структуре"; + } + else + { + return "Класе"; + } + } + + /*! This is used in the standard footer of each page and indicates when + * the page was generated + */ + virtual QCString trGeneratedAt(const char *date,const char *projName) + { + QCString result=(QCString)"Направљено "+date; + if (projName) result+=(QCString)" за "+projName; + result+=(QCString)" помоћу"; + return result; + } + /*! This is part of the sentence used in the standard footer of each page. + */ + virtual QCString trWrittenBy() + { + return "написао"; + } + + /*! this text is put before a class diagram */ + virtual QCString trClassDiagram(const char *clName) + { + return (QCString)"Дијаграм наслеђивања за "+clName+":"; + } + + /*! this text is generated when the \\internal command is used. */ + virtual QCString trForInternalUseOnly() + { return "Само за унутрашњу употребу."; } + + /*! this text is generated when the \\warning command is used. */ + virtual QCString trWarning() + { return "Упозорење"; } + + /*! this text is generated when the \\version command is used. */ + virtual QCString trVersion() + { return "Верзија"; } + + /*! this text is generated when the \\date command is used. */ + virtual QCString trDate() + { return "Датум"; } + + /*! this text is generated when the \\return command is used. */ + virtual QCString trReturns() + { return "Враћа"; } + + /*! this text is generated when the \\sa command is used. */ + virtual QCString trSeeAlso() + { return "Види"; } + + /*! this text is generated when the \\param command is used. */ + virtual QCString trParameters() + { return "Параметри"; } + + /*! this text is generated when the \\exception command is used. */ + virtual QCString trExceptions() + { return "Изизеци"; } + + /*! this text is used in the title page of a LaTeX document. */ + virtual QCString trGeneratedBy() + { return "Направљено помоћу"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990307 +////////////////////////////////////////////////////////////////////////// + + /*! used as the title of page containing all the index of all namespaces. */ + virtual QCString trNamespaceList() + { return "Списак простора имена"; } + + /*! used as an introduction to the namespace list */ + virtual QCString trNamespaceListDescription(bool extractAll) + { + QCString result="Овде је списак свих "; + if (!extractAll) result+="документованих "; + result+="простора имена са кратким описима:"; + return result; + } + + /*! used in the class documentation as a header before the list of all + * friends of a class + */ + virtual QCString trFriends() + { return "Пријатељи"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990405 +////////////////////////////////////////////////////////////////////////// + + /*! used in the class documentation as a header before the list of all + * related classes + */ + virtual QCString trRelatedFunctionDocumentation() + { return "Документација за пријатеље и повезане функције"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990425 +////////////////////////////////////////////////////////////////////////// + + /*! used as the title of the HTML page of a class/struct/union */ + virtual QCString trCompoundReference(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result=(QCString)clName; + if (isTemplate) { + result+=" Шаблон"; + switch(compType) + { + case ClassDef::Class: result+="ска класа"; break; + case ClassDef::Struct: result+="ска структура"; break; + case ClassDef::Union: result+="ска унија"; break; + case ClassDef::Interface: result+="ски интерфејс"; break; + case ClassDef::Protocol: result+="ски протокол"; break; + case ClassDef::Category: result+="ска категорија"; break; + case ClassDef::Exception: result+="ски изузетак"; break; + } + } else { + result+=" Референца"; + switch(compType) + { + case ClassDef::Class: result+=" класе"; break; + case ClassDef::Struct: result+=" структуре"; break; + case ClassDef::Union: result+=" уније"; break; + case ClassDef::Interface: result+=" интерфејса"; break; + case ClassDef::Protocol: result+=" протокола"; break; + case ClassDef::Category: result+=" категорије"; break; + case ClassDef::Exception: result+=" изузетка"; break; + } + } + return result; + } + + /*! used as the title of the HTML page of a file */ + virtual QCString trFileReference(const char *fileName) + { + QCString result=fileName; + result+=" Референца датотеке"; + return result; + } + + /*! used as the title of the HTML page of a namespace */ + virtual QCString trNamespaceReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" Референца простора имена"; + return result; + } + + virtual QCString trPublicMembers() + { return "Јавне функције чланице"; } + virtual QCString trPublicSlots() + { return "Јавни слотови"; } + virtual QCString trSignals() + { return "Сигнали"; } + virtual QCString trStaticPublicMembers() + { return "Статичке јавне функције чланице"; } + virtual QCString trProtectedMembers() + { return "Заштићене функције чланице"; } + virtual QCString trProtectedSlots() + { return "Заштићени слотови"; } + virtual QCString trStaticProtectedMembers() + { return "Статичке заштићене функције чланице"; } + virtual QCString trPrivateMembers() + { return "Приватне функције чланице"; } + virtual QCString trPrivateSlots() + { return "Приватни слотови"; } + virtual QCString trStaticPrivateMembers() + { return "Статичке приватне функције чланице"; } + + /*! this function is used to produce a comma-separated list of items. + * use generateMarker(i) to indicate where item i should be put. + */ + virtual QCString trWriteList(int numEntries) + { + QCString result; + int i; + // the inherits list contain `numEntries' classes + for (i=0;i