diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/classdef.cpp | 261 | ||||
-rw-r--r-- | src/classdef.h | 3 | ||||
-rw-r--r-- | src/definition.cpp | 2 | ||||
-rw-r--r-- | src/definition.h | 2 | ||||
-rw-r--r-- | src/doc.l | 137 | ||||
-rw-r--r-- | src/doxygen.cpp | 24 | ||||
-rw-r--r-- | src/filedef.cpp | 127 | ||||
-rw-r--r-- | src/filedef.h | 25 | ||||
-rw-r--r-- | src/groupdef.cpp | 151 | ||||
-rw-r--r-- | src/groupdef.h | 25 | ||||
-rw-r--r-- | src/index.cpp | 14 | ||||
-rw-r--r-- | src/language.cpp | 6 | ||||
-rw-r--r-- | src/latexgen.cpp | 10 | ||||
-rw-r--r-- | src/memberdef.cpp | 765 | ||||
-rw-r--r-- | src/memberdef.h | 27 | ||||
-rw-r--r-- | src/membergroup.cpp | 82 | ||||
-rw-r--r-- | src/membergroup.h | 21 | ||||
-rw-r--r-- | src/memberlist.cpp | 600 | ||||
-rw-r--r-- | src/memberlist.h | 43 | ||||
-rw-r--r-- | src/message.cpp | 4 | ||||
-rw-r--r-- | src/namespacedef.cpp | 141 | ||||
-rw-r--r-- | src/namespacedef.h | 28 | ||||
-rw-r--r-- | src/rtfgen.cpp | 16 | ||||
-rw-r--r-- | src/scanner.l | 26 | ||||
-rw-r--r-- | src/translator.h | 18 | ||||
-rw-r--r-- | src/translator_br.h | 786 | ||||
-rw-r--r-- | src/translator_cz.h | 189 | ||||
-rw-r--r-- | src/translator_de.h | 155 | ||||
-rw-r--r-- | src/translator_ru.h | 1653 | ||||
-rw-r--r-- | src/util.cpp | 91 | ||||
-rw-r--r-- | src/util.h | 7 |
31 files changed, 3109 insertions, 2330 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index f477cb1..743ff4f 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -150,58 +150,31 @@ void ClassDef::insertSubClass(ClassDef *cd,Protection p, inheritedBy->inSort(new BaseClassDef(cd,0,p,s,t)); } -void ClassDef::addMemberListToGroup(MemberList *ml) -{ - MemberListIterator mli(*ml); - MemberDef *md; - for (;(md=mli.current());++mli) - { - int groupId=md->getMemberGroupId(); - if (groupId!=-1) - { - QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId]; - QCString *pDocs = Doxygen::memberDocDict[groupId]; - if (pGrpHeader) - { - MemberGroup *mg = memberGroupDict->find(groupId); - if (mg==0) - { - mg = new MemberGroup(groupId,*pGrpHeader,pDocs ? pDocs->data() : 0); - memberGroupDict->insert(groupId,mg); - memberGroupList->append(mg); - } - mg->insertMember(md); - md->setMemberGroup(mg); - } - } - } -} - void ClassDef::addMembersToMemberGroup() { - addMemberListToGroup(&pubTypes); - addMemberListToGroup(&pubMembers); - addMemberListToGroup(&pubAttribs); - addMemberListToGroup(&pubSlots); - addMemberListToGroup(&signals); - addMemberListToGroup(&dcopMethods); - addMemberListToGroup(&pubStaticMembers); - addMemberListToGroup(&pubStaticAttribs); - addMemberListToGroup(&proTypes); - addMemberListToGroup(&proMembers); - addMemberListToGroup(&proAttribs); - addMemberListToGroup(&proSlots); - addMemberListToGroup(&proStaticMembers); - addMemberListToGroup(&proStaticAttribs); - addMemberListToGroup(&priTypes); - addMemberListToGroup(&priMembers); - addMemberListToGroup(&priAttribs); - addMemberListToGroup(&priSlots); - addMemberListToGroup(&priStaticMembers); - addMemberListToGroup(&priStaticAttribs); - addMemberListToGroup(&friends); - addMemberListToGroup(&related); - addMemberListToGroup(&properties); + ::addMembersToMemberGroup(&pubTypes,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&pubMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&pubAttribs,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&pubSlots,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&signals,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&dcopMethods,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&pubStaticMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&pubStaticAttribs,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&proTypes,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&proMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&proAttribs,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&proSlots,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&proStaticMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&proStaticAttribs,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&priTypes,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&priMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&priAttribs,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&priSlots,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&priStaticMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&priStaticAttribs,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&friends,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&related,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&properties,memberGroupDict,memberGroupList); } // adds new member definition to the class @@ -1037,85 +1010,26 @@ void ClassDef::writeDocumentation(OutputList &ol) writeTemplateSpec(ol,outerTempArgList,pageType,name()); } - typedefMembers.countDocMembers(); - if (typedefMembers.totalCount()>0) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trMemberTypedefDocumentation()); - ol.endGroupHeader(); - typedefMembers.writeDocumentation(ol,name(),this); - } + typedefMembers.writeDocumentation(ol,name(),this, + theTranslator->trMemberTypedefDocumentation()); - enumMembers.countDocMembers(); - if (enumMembers.totalCount()>0) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trMemberEnumerationDocumentation()); - ol.endGroupHeader(); - enumMembers.writeDocumentation(ol,name(),this); - } + enumMembers.writeDocumentation(ol,name(),this, + theTranslator->trMemberEnumerationDocumentation()); - //enumValMembers.countDocMembers(); - //if (enumValMembers.totalCount()>0) - //{ - // ol.writeRuler(); - // ol.startGroupHeader(); - // parseText(ol,theTranslator->trEnumerationValueDocumentation()); - // ol.endGroupHeader(); - // enumValMembers.writeDocumentation(ol,name()); - //} - - constructors.countDocMembers(); - if (constructors.totalCount()>0) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trConstructorDocumentation()); - ol.endGroupHeader(); - constructors.writeDocumentation(ol,name(),this); - } + constructors.writeDocumentation(ol,name(),this, + theTranslator->trConstructorDocumentation()); - functionMembers.countDocMembers(); - if (functionMembers.totalCount()>0) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trMemberFunctionDocumentation()); - ol.endGroupHeader(); - functionMembers.writeDocumentation(ol,name(),this); - } + functionMembers.writeDocumentation(ol,name(),this, + theTranslator->trMemberFunctionDocumentation()); - relatedMembers.countDocMembers(); - if (relatedMembers.totalCount()>0) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trRelatedFunctionDocumentation()); - ol.endGroupHeader(); - relatedMembers.writeDocumentation(ol,name(),this); - } + relatedMembers.writeDocumentation(ol,name(),this, + theTranslator->trRelatedFunctionDocumentation()); - variableMembers.countDocMembers(); - if (variableMembers.totalCount()>0) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trMemberDataDocumentation()); - ol.endGroupHeader(); - variableMembers.writeDocumentation(ol,name(),this); - } + variableMembers.writeDocumentation(ol,name(),this, + theTranslator->trMemberDataDocumentation()); - propertyMembers.countDocMembers(); - if (propertyMembers.totalCount()>0) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trPropertyDocumentation()); - ol.endGroupHeader(); - propertyMembers.writeDocumentation(ol,name(),this); - } + propertyMembers.writeDocumentation(ol,name(),this, + theTranslator->trPropertyDocumentation()); ol.startTextBlock(); @@ -1398,13 +1312,16 @@ bool ClassDef::hasNonReferenceSuperClass() return found; } +/*! called from MemberDef::writeDeclaration() to (recusively) write the + * definition of an annonymous struct, union or class. + */ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup) { //ol.insertMemberAlign(); //printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup); - if (inGroup && md && md->getClassDef()==this) return; - + //if (inGroup && md && md->getClassDef()==this) return; + ol.docify(compoundTypeString()); int ri=name().findRev("::"); if (ri==-1) ri=name().length(); @@ -1417,45 +1334,64 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup) ol.docify(" {"); ol.endMemberItem(FALSE); - // insert members of this class - if (inGroup) + // write user defined member groups + MemberGroupListIterator mgli(*memberGroupList); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) { - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->writePlainDeclarations(ol,this,0,0,0); - } + mg->setInGroup(inGroup); + mg->writePlainDeclarations(ol,this,0,0,0); } - else + + pubTypes.setInGroup(inGroup); + pubTypes.writePlainDeclarations(ol,this,0,0,0); + pubMembers.setInGroup(inGroup); + pubMembers.writePlainDeclarations(ol,this,0,0,0); + pubAttribs.setInGroup(inGroup); + pubAttribs.writePlainDeclarations(ol,this,0,0,0); + pubSlots.setInGroup(inGroup); + pubSlots.writePlainDeclarations(ol,this,0,0,0); + signals.setInGroup(inGroup); + signals.writePlainDeclarations(ol,this,0,0,0); + dcopMethods.setInGroup(inGroup); + dcopMethods.writePlainDeclarations(ol,this,0,0,0); + properties.setInGroup(inGroup); + properties.writePlainDeclarations(ol,this,0,0,0); + pubStaticMembers.setInGroup(inGroup); + pubStaticMembers.writePlainDeclarations(ol,this,0,0,0); + pubStaticAttribs.setInGroup(inGroup); + pubStaticAttribs.writePlainDeclarations(ol,this,0,0,0); + proTypes.setInGroup(inGroup); + proTypes.writePlainDeclarations(ol,this,0,0,0); + proMembers.setInGroup(inGroup); + proMembers.writePlainDeclarations(ol,this,0,0,0); + proAttribs.setInGroup(inGroup); + proAttribs.writePlainDeclarations(ol,this,0,0,0); + proSlots.setInGroup(inGroup); + proSlots.writePlainDeclarations(ol,this,0,0,0); + proStaticMembers.setInGroup(inGroup); + proStaticMembers.writePlainDeclarations(ol,this,0,0,0); + proStaticAttribs.setInGroup(inGroup); + proStaticAttribs.writePlainDeclarations(ol,this,0,0,0); + if (Config_getBool("EXTRACT_PRIVATE")) { - pubTypes.writePlainDeclarations(ol,this,0,0,0); - pubMembers.writePlainDeclarations(ol,this,0,0,0); - pubAttribs.writePlainDeclarations(ol,this,0,0,0); - pubSlots.writePlainDeclarations(ol,this,0,0,0); - signals.writePlainDeclarations(ol,this,0,0,0); - dcopMethods.writePlainDeclarations(ol,this,0,0,0); - properties.writePlainDeclarations(ol,this,0,0,0); - pubStaticMembers.writePlainDeclarations(ol,this,0,0,0); - pubStaticAttribs.writePlainDeclarations(ol,this,0,0,0); - proTypes.writePlainDeclarations(ol,this,0,0,0); - proMembers.writePlainDeclarations(ol,this,0,0,0); - proAttribs.writePlainDeclarations(ol,this,0,0,0); - proSlots.writePlainDeclarations(ol,this,0,0,0); - proStaticMembers.writePlainDeclarations(ol,this,0,0,0); - proStaticAttribs.writePlainDeclarations(ol,this,0,0,0); - if (Config_getBool("EXTRACT_PRIVATE")) - { - priTypes.writePlainDeclarations(ol,this,0,0,0); - priMembers.writePlainDeclarations(ol,this,0,0,0); - priAttribs.writePlainDeclarations(ol,this,0,0,0); - priSlots.writePlainDeclarations(ol,this,0,0,0); - priStaticMembers.writePlainDeclarations(ol,this,0,0,0); - priStaticAttribs.writePlainDeclarations(ol,this,0,0,0); - } - friends.writePlainDeclarations(ol,this,0,0,0); - related.writePlainDeclarations(ol,this,0,0,0); + priTypes.setInGroup(inGroup); + priTypes.writePlainDeclarations(ol,this,0,0,0); + priMembers.setInGroup(inGroup); + priMembers.writePlainDeclarations(ol,this,0,0,0); + priAttribs.setInGroup(inGroup); + priAttribs.writePlainDeclarations(ol,this,0,0,0); + priSlots.setInGroup(inGroup); + priSlots.writePlainDeclarations(ol,this,0,0,0); + priStaticMembers.setInGroup(inGroup); + priStaticMembers.writePlainDeclarations(ol,this,0,0,0); + priStaticAttribs.setInGroup(inGroup); + priStaticAttribs.writePlainDeclarations(ol,this,0,0,0); } + friends.setInGroup(inGroup); + friends.writePlainDeclarations(ol,this,0,0,0); + related.setInGroup(inGroup); + related.writePlainDeclarations(ol,this,0,0,0); } /*! a link to this class is possible within this project */ @@ -1478,6 +1414,11 @@ bool ClassDef::isVisibleInHierarchy() (hasDocumentation() || !Config_getBool("HIDE_UNDOC_CLASSES") || isReference()); } +bool ClassDef::hasDocumentation() const +{ + return Definition::hasDocumentation(); +} + //---------------------------------------------------------------------- // recursive function: // returns TRUE iff class definition `bcd' represents an (in)direct base diff --git a/src/classdef.h b/src/classdef.h index 2270d31..63dabd9 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -70,6 +70,8 @@ class ClassDef : public Definition QCString getFileBase() const; QCString getSourceFileBase() const; + bool hasDocumentation() const; + /*! Returns the name as it is appears in the documentation */ QCString displayName() const; @@ -247,7 +249,6 @@ class ClassDef : public Definition protected: void addUsedInterfaceClasses(MemberDef *md,const char *typeStr); - void addMemberListToGroup(MemberList *); bool hasExamples(); bool hasNonReferenceSuperClass(); diff --git a/src/definition.cpp b/src/definition.cpp index 78c2ded..1beeba9 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -400,7 +400,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) ol.popGeneratorState(); } -bool Definition::hasDocumentation() +bool Definition::hasDocumentation() const { return !doc.isEmpty() || // has detailed docs !brief.isEmpty() || // has brief description diff --git a/src/definition.h b/src/definition.h index 7353e38..2018525 100644 --- a/src/definition.h +++ b/src/definition.h @@ -73,7 +73,7 @@ class Definition */ void setBriefDescription(const char *b); /*! Returns TRUE iff the definition is documented */ - virtual bool hasDocumentation(); + virtual bool hasDocumentation() const; virtual bool isLinkableInProject() = 0; virtual bool isLinkable() = 0; @@ -1841,21 +1841,49 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) } <DocScan,DocRefName>{ID}"<"[^>\ \t\n]*">"("::"{ID})+"("?[a-z_A-Z0-9,:\<\> \t\*\&]*")"? { - generateRef(*outDoc,className,yytext,inSeeBlock); + if (!insideHtmlLink) + { + generateRef(*outDoc,className,yytext,inSeeBlock); + } + else + { + outDoc->docify(yytext); + } BEGIN(DocScan); } <DocScan,DocRefName>{SCOPEMASK}"("[a-z_A-Z0-9,:\<\> \t\*\&]+")" { - generateRef(*outDoc,className,yytext,inSeeBlock); + if (!insideHtmlLink) + { + generateRef(*outDoc,className,yytext,inSeeBlock); + } + else + { + outDoc->docify(yytext); + } BEGIN(DocScan); } <DocScan,DocRefName>{SCOPEMASK}("()")? { - generateRef(*outDoc,className,yytext,inSeeBlock); + if (!insideHtmlLink) + { + generateRef(*outDoc,className,yytext,inSeeBlock); + } + else + { + outDoc->docify(yytext); + } BEGIN(DocScan); } <DocScan,DocRefName>({SCOPEMASK}"::")?"operator"{OPMASK} { QCString oName=yytext; - generateRef(*outDoc,className, - removeRedundantWhiteSpace(oName),inSeeBlock); + if (!insideHtmlLink) + { + generateRef(*outDoc,className, + removeRedundantWhiteSpace(oName),inSeeBlock); + } + else + { + outDoc->docify(yytext); + } BEGIN(DocScan); } <DocScan>("http:"|"https:"|"ftp:"|"file:"){URLMASK} { outDoc->startHtmlLink(yytext); @@ -1864,10 +1892,24 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) } <DocScan>[a-zA-Z_0-9\.\-]+"@"[0-9a-z_A-Z\.\-]+ { outDoc->writeMailLink(yytext); } <DocScan>{FILESCHAR}*{FILEECHAR}+/".\\n" { // special exception that is otherwise matches by FILEMASK - generateRef(*outDoc,className,yytext,inSeeBlock); + if (!insideHtmlLink) + { + generateRef(*outDoc,className,yytext,inSeeBlock); + } + else + { + outDoc->docify(yytext); + } } <DocScan>{FILEMASK} { - generateFileRef(*outDoc,yytext); + if (!insideHtmlLink) + { + generateFileRef(*outDoc,yytext); + } + else + { + outDoc->docify(yytext); + } } <DocCodeBlock>{BN}*{CMD}"endcode"/[^a-z_A-Z0-9] { // needed to match things like \endcode. (note the dot) parseCode(*outDoc,className,codeBlock,exampleDoc,exampleName); @@ -2156,55 +2198,118 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) } <DocEmphasis>{FILEMASK} { outDoc->startEmphasis(); - generateFileRef(*outDoc,yytext); + if (!insideHtmlLink) + { + generateFileRef(*outDoc,yytext); + } + else + { + outDoc->docify(yytext); + } outDoc->endEmphasis(); BEGIN( DocScan ); } <DocEmphasis>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"("[a-z_A-Z0-9,:\<\> \t\*\&]*")" { outDoc->startEmphasis(); - generateRef(*outDoc,className,yytext,inSeeBlock); + if (!insideHtmlLink) + { + generateRef(*outDoc,className,yytext,inSeeBlock); + } + else + { + outDoc->docify(yytext); + } outDoc->endEmphasis(); BEGIN( DocScan ); } <DocEmphasis>{WORD} { outDoc->startEmphasis(); - linkifyText(TextGeneratorOLImpl(*outDoc),className,0,yytext,FALSE,FALSE); + if (!insideHtmlLink) + { + linkifyText(TextGeneratorOLImpl(*outDoc),className,0,yytext,FALSE,FALSE); + } + else + { + outDoc->docify(yytext); + } outDoc->endEmphasis(); BEGIN( DocScan ); } <DocBold>{FILEMASK} { outDoc->startBold(); - generateFileRef(*outDoc,yytext); + if (!insideHtmlLink) + { + generateFileRef(*outDoc,yytext); + } + else + { + outDoc->docify(yytext); + } outDoc->endBold(); BEGIN( DocScan ); } <DocBold>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"("[a-z_A-Z0-9,:\<\> \t\*\&]*")" { outDoc->startBold(); - generateRef(*outDoc,className,yytext,inSeeBlock); + if (!insideHtmlLink) + { + generateRef(*outDoc,className,yytext,inSeeBlock); + } + else + { + outDoc->docify(yytext); + } outDoc->endBold(); BEGIN( DocScan ); } <DocBold>{WORD} { outDoc->startBold(); - linkifyText(TextGeneratorOLImpl(*outDoc),className,0,yytext,FALSE,FALSE); + if (!insideHtmlLink) + { + linkifyText(TextGeneratorOLImpl(*outDoc),className,0,yytext,FALSE,FALSE); + } + else + { + outDoc->docify(yytext); + } outDoc->endBold(); BEGIN( DocScan ); } <DocCode>{FILEMASK} { outDoc->startTypewriter(); - generateFileRef(*outDoc,yytext); + if (!insideHtmlLink) + { + generateFileRef(*outDoc,yytext); + } + else + { + outDoc->docify(yytext); + } outDoc->endTypewriter(); BEGIN( DocScan ); } <DocCode>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()!\*/]*"("[a-z_A-Z0-9,:\<\> \t\*\&]*")" { outDoc->startTypewriter(); - generateRef(*outDoc,className,yytext,inSeeBlock); + if (!insideHtmlLink) + { + generateRef(*outDoc,className,yytext,inSeeBlock); + } + else + { + outDoc->docify(yytext); + } outDoc->endTypewriter(); BEGIN( DocScan ); } <DocCode>{WORD} { outDoc->startTypewriter(); - linkifyText(TextGeneratorOLImpl(*outDoc),className,0,yytext,FALSE,FALSE); + if (!insideHtmlLink) + { + linkifyText(TextGeneratorOLImpl(*outDoc),className,0,yytext,FALSE,FALSE); + } + else + { + outDoc->docify(yytext); + } outDoc->endTypewriter(); BEGIN( DocScan ); } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 18610ac..73c765c 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -599,7 +599,7 @@ static bool addNamespace(Entry *root,ClassDef *cd) { NamespaceDef *nd=0; //printf("addNameSpace() trying: %s\n",e->name.data()); - QCString nsName = stripAnnonymousNamespaceScope(e->name); + QCString nsName = stripAnonymousNamespaceScope(e->name); if (!nsName.isEmpty() && nsName.at(0)!='@' && (nd=getResolvedNamespace(nsName)) ) @@ -637,7 +637,7 @@ static void buildClassList(Entry *root) } else { - fullName=stripAnnonymousNamespaceScope(fullName); + fullName=stripAnonymousNamespaceScope(fullName); Debug::print(Debug::Classes,0," Found class with name %s\n",fullName.data()); bool ambig; @@ -825,7 +825,7 @@ static void buildNamespaceList(Entry *root) !root->name.isEmpty() ) { - QCString fullName=stripAnnonymousNamespaceScope(root->name.copy()); + QCString fullName=stripAnonymousNamespaceScope(root->name.copy()); if (!fullName.isEmpty()) { //printf("Found namespace %s in %s at line %d\n",root->name.data(), @@ -1199,13 +1199,14 @@ static MemberDef *addVariableToClass( md->setDefinition(def); md->setBitfields(root->bitfields); md->addSectionsToDefinition(root->anchors); - md->setFromAnnonymousScope(fromAnnScope); - md->setFromAnnonymousMember(fromAnnMemb); + md->setFromAnonymousScope(fromAnnScope); + md->setFromAnonymousMember(fromAnnMemb); md->setIndentDepth(indentDepth); md->setBodySegment(root->bodyLine,root->endBodyLine); md->setInitializer(root->initializer); md->setMaxInitLines(root->initLines); md->setMemberGroupId(root->mGrpId); + addMemberToGroups(root,md); //if (root->mGrpId!=-1) //{ // printf("memberdef %s in memberGroup %d\n",name.data(),root->mGrpId); @@ -1356,8 +1357,8 @@ static MemberDef *addVariableToFile( md->setDocumentation(root->doc); md->setBriefDescription(root->brief); md->addSectionsToDefinition(root->anchors); - md->setFromAnnonymousScope(fromAnnScope); - md->setFromAnnonymousMember(fromAnnMemb); + md->setFromAnonymousScope(fromAnnScope); + md->setFromAnonymousMember(fromAnnMemb); md->setIndentDepth(indentDepth); md->setBodySegment(root->bodyLine,root->endBodyLine); md->setInitializer(root->initializer); @@ -1366,6 +1367,7 @@ static MemberDef *addVariableToFile( md->setBodyDef(fd); md->setDefinition(def); md->setExplicitExternal(root->explicitExternal); + addMemberToGroups(root,md); //if (root->mGrpId!=-1) //{ // md->setMemberGroup(memberGroupDict[root->mGrpId]); @@ -1535,7 +1537,7 @@ void buildVarList(Entry *root) else mtype=MemberDef::Variable; - QCString classScope=stripAnnonymousNamespaceScope(scope); + QCString classScope=stripAnonymousNamespaceScope(scope); QCString annScopePrefix=scope.left(scope.length()-classScope.length()); scope=classScope; if (!scope.isEmpty() && !name.isEmpty() && (cd=getClass(scope))) @@ -1639,7 +1641,7 @@ static void buildMemberList(Entry *root) //printf("root->parent=`%s' cd=%p root->type.find(re,0)=%d\n", // root->parent->name.data(),getClass(root->parent->name), // root->type.find(re,0)); - QCString scope=stripAnnonymousNamespaceScope(root->parent->name.copy()); + QCString scope=stripAnonymousNamespaceScope(root->parent->name.copy()); bool isMember=FALSE; int memIndex=rname.find("::"); @@ -2475,7 +2477,7 @@ static void computeClassRelations(Entry *root) { ClassDef *cd; // strip any annonymous scopes first - QCString bName=stripAnnonymousNamespaceScope(root->name); + QCString bName=stripAnonymousNamespaceScope(root->name); Debug::print(Debug::Classes,0," Class %s : \n",bName.data()); if ((cd=getClass(bName))) { @@ -3201,7 +3203,7 @@ static void findMember(Entry *root, Entry *p=root->parent; while (p) // get full scope as class name { - QCString sc = stripAnnonymousNamespaceScope(p->name); + QCString sc = stripAnonymousNamespaceScope(p->name); if ((p->section & Entry::SCOPE_MASK) && !sc.isEmpty() && sc[0]!='@' ) diff --git a/src/filedef.cpp b/src/filedef.cpp index 741c76d..e2fcb76 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -114,7 +114,7 @@ void FileDef::writeDocumentation(OutputList &ol) // fn.prepend(stripFromPath(getPath().copy())); //} - //printf("WriteDocumentation %p diskname=%s\n",this,diskname.data()); + //printf("WriteDocumentation diskname=%s\n",diskname.data()); QCString pageTitle=name()+" File Reference"; startFile(ol,getOutputFileBase(),pageTitle); @@ -311,7 +311,13 @@ void FileDef::writeDocumentation(OutputList &ol) } } - allMemberList.writeDeclarations(ol,0,0,this,0,0,0); + //allMemberList.writeDeclarations(ol,0,0,this,0,0,0); + decDefineMembers.writeDeclarations(ol,0,0,this,0,theTranslator->trDefines(),0); + decProtoMembers.writeDeclarations(ol,0,0,this,0,theTranslator->trFuncProtos(),0); + decTypedefMembers.writeDeclarations(ol,0,0,this,0,theTranslator->trTypedefs(),0); + decEnumMembers.writeDeclarations(ol,0,0,this,0,theTranslator->trEnumerations(),0); + decFuncMembers.writeDeclarations(ol,0,0,this,0,theTranslator->trFunctions(),0); + decVarMembers.writeDeclarations(ol,0,0,this,0,theTranslator->trVariables(),0); ol.endMemberSections(); //doc=doc.stripWhiteSpace(); @@ -366,65 +372,23 @@ void FileDef::writeDocumentation(OutputList &ol) } } - defineMembers.countDocMembers(); - if (defineMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trDefineDocumentation()); - ol.endGroupHeader(); - defineMembers.writeDocumentation(ol,name(),this); - } + docDefineMembers.writeDocumentation(ol,name(),this, + theTranslator->trDefineDocumentation()); - protoMembers.countDocMembers(); - if (protoMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trFunctionPrototypeDocumentation()); - ol.endGroupHeader(); - protoMembers.writeDocumentation(ol,name(),this); - } + docProtoMembers.writeDocumentation(ol,name(),this, + theTranslator->trFunctionPrototypeDocumentation()); - typedefMembers.countDocMembers(); - if (typedefMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trTypedefDocumentation()); - ol.endGroupHeader(); - typedefMembers.writeDocumentation(ol,name(),this); - } + docTypedefMembers.writeDocumentation(ol,name(),this, + theTranslator->trTypedefDocumentation()); - enumMembers.countDocMembers(); - if (enumMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trEnumerationTypeDocumentation()); - ol.endGroupHeader(); - enumMembers.writeDocumentation(ol,name(),this); - } + docEnumMembers.writeDocumentation(ol,name(),this, + theTranslator->trEnumerationTypeDocumentation()); - funcMembers.countDocMembers(); - if (funcMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trFunctionDocumentation()); - ol.endGroupHeader(); - funcMembers.writeDocumentation(ol,name(),this); - } + docFuncMembers.writeDocumentation(ol,name(),this, + theTranslator->trFunctionDocumentation()); - varMembers.countDocMembers(); - if (varMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trVariableDocumentation()); - ol.endGroupHeader(); - varMembers.writeDocumentation(ol,name(),this); - } + docVarMembers.writeDocumentation(ol,name(),this, + theTranslator->trVariableDocumentation()); // write Author section (Man only) ol.disableAllBut(OutputGenerator::Man); @@ -470,6 +434,7 @@ void FileDef::writeSource(OutputList &ol) ol.enableAll(); } +#if 0 /*! Adds a member \a md to the member group with id \a groupId. */ void FileDef::addMemberListToGroup(MemberList *ml, @@ -501,15 +466,16 @@ void FileDef::addMemberListToGroup(MemberList *ml, } } } +#endif void FileDef::addMembersToMemberGroup() { - addMemberListToGroup(&allMemberList,&MemberDef::isDefine); - addMemberListToGroup(&allMemberList,&MemberDef::isTypedef); - addMemberListToGroup(&allMemberList,&MemberDef::isEnumerate); - addMemberListToGroup(&allMemberList,&MemberDef::isEnumValue); - addMemberListToGroup(&allMemberList,&MemberDef::isFunction); - addMemberListToGroup(&allMemberList,&MemberDef::isVariable); + ::addMembersToMemberGroup(&decDefineMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decProtoMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decTypedefMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decEnumMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decFuncMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decVarMembers,memberGroupDict,memberGroupList); } /*! Adds member definition \a md to the list of all members of this file */ @@ -521,45 +487,56 @@ void FileDef::insertMember(MemberDef *md) switch(md->memberType()) { case MemberDef::Variable: + case MemberDef::Property: + decVarMembers.append(md); if (sortMemberDocs) - varMembers.inSort(md); + docVarMembers.inSort(md); else - varMembers.append(md); + docVarMembers.append(md); break; case MemberDef::Function: + decFuncMembers.append(md); if (sortMemberDocs) - funcMembers.inSort(md); + docFuncMembers.inSort(md); else - funcMembers.append(md); + docFuncMembers.append(md); break; case MemberDef::Typedef: + decTypedefMembers.append(md); if (sortMemberDocs) - typedefMembers.inSort(md); + docTypedefMembers.inSort(md); else - typedefMembers.append(md); + docTypedefMembers.append(md); break; case MemberDef::Enumeration: + decEnumMembers.append(md); if (sortMemberDocs) - enumMembers.inSort(md); + docEnumMembers.inSort(md); else - enumMembers.append(md); + docEnumMembers.append(md); break; case MemberDef::EnumValue: // enum values are shown inside their enums break; case MemberDef::Prototype: + decProtoMembers.append(md); if (sortMemberDocs) - protoMembers.inSort(md); + docProtoMembers.inSort(md); else - protoMembers.append(md); + docProtoMembers.append(md); break; case MemberDef::Define: + decDefineMembers.append(md); if (sortMemberDocs) - defineMembers.inSort(md); + docDefineMembers.inSort(md); else - defineMembers.append(md); + docDefineMembers.append(md); break; default: - err("FileDef::insertMembers(): unexpected member insert in file!\n"); + err("FileDef::insertMembers(): " + "member `%s' with class scope `%s' inserted in file scope `%s'!\n", + md->name().data(), + md->getClassDef() ? md->getClassDef()->name().data() : "", + name().data()); } //addMemberToGroup(md,groupId); } diff --git a/src/filedef.h b/src/filedef.h index d042601..26a297d 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -149,15 +149,22 @@ class FileDef : public Definition //void generateXMLSection(QTextStream &t,MemberList *ml,const char *type); MemberList allMemberList; - MemberList defineMembers; - MemberList protoMembers; - MemberList typedefMembers; - MemberList enumMembers; - MemberList funcMembers; - MemberList varMembers; - - protected: - void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const); + + // members in the declaration part of the documentation + MemberList decDefineMembers; + MemberList decProtoMembers; + MemberList decTypedefMembers; + MemberList decEnumMembers; + MemberList decFuncMembers; + MemberList decVarMembers; + + // members in the documentation part of the documentation + MemberList docDefineMembers; + MemberList docProtoMembers; + MemberList docTypedefMembers; + MemberList docEnumMembers; + MemberList docFuncMembers; + MemberList docVarMembers; private: diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 765c95f..ccb81de 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -56,6 +56,22 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) : memberGroupList->setAutoDelete(TRUE); memberGroupDict = new MemberGroupDict(1009); + decDefineMembers.setInGroup(TRUE); + decProtoMembers.setInGroup(TRUE); + decTypedefMembers.setInGroup(TRUE); + decEnumMembers.setInGroup(TRUE); + decEnumValMembers.setInGroup(TRUE); + decFuncMembers.setInGroup(TRUE); + decVarMembers.setInGroup(TRUE); + + docDefineMembers.setInGroup(TRUE); + docProtoMembers.setInGroup(TRUE); + docTypedefMembers.setInGroup(TRUE); + docEnumMembers.setInGroup(TRUE); + docEnumValMembers.setInGroup(TRUE); + docFuncMembers.setInGroup(TRUE); + docVarMembers.setInGroup(TRUE); + visited = 0; } @@ -119,6 +135,7 @@ void GroupDef::addExample(const PageInfo *def) exampleDict->append(def->name,def); } +#if 0 void GroupDef::addMemberListToGroup(MemberList *ml, bool (MemberDef::*func)() const) { @@ -147,9 +164,12 @@ void GroupDef::addMemberListToGroup(MemberList *ml, } } } +#endif + void GroupDef::addMembersToMemberGroup() { +#if 0 addMemberListToGroup(allMemberList,&MemberDef::isDefine); addMemberListToGroup(allMemberList,&MemberDef::isTypedef); addMemberListToGroup(allMemberList,&MemberDef::isEnumerate); @@ -158,6 +178,23 @@ void GroupDef::addMembersToMemberGroup() addMemberListToGroup(allMemberList,&MemberDef::isSlot); addMemberListToGroup(allMemberList,&MemberDef::isSignal); addMemberListToGroup(allMemberList,&MemberDef::isVariable); +#endif + + ::addMembersToMemberGroup(&decDefineMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decProtoMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decTypedefMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decEnumMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decEnumValMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decFuncMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decVarMembers,memberGroupDict,memberGroupList); + + //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count()); + MemberGroupListIterator mgli(*memberGroupList); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->setInGroup(TRUE); + } } @@ -189,49 +226,55 @@ void GroupDef::insertMember(MemberDef *md) switch(md->memberType()) { case MemberDef::Variable: + decVarMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - varMembers.inSort(md); + docVarMembers.inSort(md); else - varMembers.append(md); + docVarMembers.append(md); break; case MemberDef::Function: + decFuncMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - funcMembers.inSort(md); + docFuncMembers.inSort(md); else - funcMembers.append(md); + docFuncMembers.append(md); break; case MemberDef::Typedef: + decTypedefMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - typedefMembers.inSort(md); + docTypedefMembers.inSort(md); else - typedefMembers.append(md); + docTypedefMembers.append(md); break; case MemberDef::Enumeration: + decEnumMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - enumMembers.inSort(md); + docEnumMembers.inSort(md); else - enumMembers.append(md); + docEnumMembers.append(md); break; case MemberDef::EnumValue: - if (Config_getBool("SORT_MEMBER_DOCS")) - enumValMembers.inSort(md); - else - enumValMembers.append(md); break; case MemberDef::Prototype: + decProtoMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - protoMembers.inSort(md); + docProtoMembers.inSort(md); else - protoMembers.append(md); + docProtoMembers.append(md); break; case MemberDef::Define: + decDefineMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - defineMembers.inSort(md); + docDefineMembers.inSort(md); else - defineMembers.append(md); + docDefineMembers.append(md); break; default: - err("FileDef::insertMembers(): unexpected member insert in file!\n"); + err("GroupDef::insertMembers(): " + "member `%s' with class scope `%s' inserted in group scope `%s'!\n", + md->name().data(), + md->getClassDef() ? md->getClassDef()->name().data() : "", + name().data()); } //addMemberToGroup(md,groupId); } @@ -410,7 +453,13 @@ void GroupDef::writeDocumentation(OutputList &ol) mg->writeDeclarations(ol,0,0,0,this); } - allMemberList->writeDeclarations(ol,0,0,0,this,0,0); + //allMemberList->writeDeclarations(ol,0,0,0,this,0,0); + decDefineMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trDefines(),0); + decProtoMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFuncProtos(),0); + decTypedefMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trTypedefs(),0); + decEnumMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerations(),0); + decFuncMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFunctions(),0); + decVarMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trVariables(),0); } ol.endMemberSections(); @@ -471,65 +520,23 @@ void GroupDef::writeDocumentation(OutputList &ol) } } - defineMembers.countDocMembers(TRUE); - if (defineMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trDefineDocumentation()); - ol.endGroupHeader(); - defineMembers.writeDocumentation(ol,name(),this); - } + docDefineMembers.writeDocumentation(ol,name(),this, + theTranslator->trDefineDocumentation()); - protoMembers.countDocMembers(TRUE); - if (protoMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trFunctionPrototypeDocumentation()); - ol.endGroupHeader(); - protoMembers.writeDocumentation(ol,name(),this); - } + docProtoMembers.writeDocumentation(ol,name(),this, + theTranslator->trFunctionPrototypeDocumentation()); - typedefMembers.countDocMembers(TRUE); - if (typedefMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trTypedefDocumentation()); - ol.endGroupHeader(); - typedefMembers.writeDocumentation(ol,name(),this); - } + docTypedefMembers.writeDocumentation(ol,name(),this, + theTranslator->trTypedefDocumentation()); - enumMembers.countDocMembers(TRUE); - if (enumMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trEnumerationTypeDocumentation()); - ol.endGroupHeader(); - enumMembers.writeDocumentation(ol,name(),this); - } + docEnumMembers.writeDocumentation(ol,name(),this, + theTranslator->trEnumerationTypeDocumentation()); - funcMembers.countDocMembers(TRUE); - if (funcMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trFunctionDocumentation()); - ol.endGroupHeader(); - funcMembers.writeDocumentation(ol,name(),this); - } + docFuncMembers.writeDocumentation(ol,name(),this, + theTranslator->trFunctionDocumentation()); - varMembers.countDocMembers(TRUE); - if (varMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trVariableDocumentation()); - ol.endGroupHeader(); - varMembers.writeDocumentation(ol,name(),this); - } + docVarMembers.writeDocumentation(ol,name(),this, + theTranslator->trVariableDocumentation()); if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { diff --git a/src/groupdef.h b/src/groupdef.h index 8c586ba..e55c727 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -94,14 +94,23 @@ class GroupDef : public Definition MemberList *allMemberList; MemberNameInfoDict *allMemberNameInfoDict; - // members sorted by type - MemberList defineMembers; - MemberList protoMembers; - MemberList typedefMembers; - MemberList enumMembers; - MemberList enumValMembers; - MemberList funcMembers; - MemberList varMembers; + // members in the declaration part of the documentation + MemberList decDefineMembers; + MemberList decProtoMembers; + MemberList decTypedefMembers; + MemberList decEnumMembers; + MemberList decEnumValMembers; + MemberList decFuncMembers; + MemberList decVarMembers; + + // members in the documentation part of the documentation + MemberList docDefineMembers; + MemberList docProtoMembers; + MemberList docTypedefMembers; + MemberList docEnumMembers; + MemberList docEnumValMembers; + MemberList docFuncMembers; + MemberList docVarMembers; /* user defined member groups */ MemberGroupList *memberGroupList; // list of member groups in this group diff --git a/src/index.cpp b/src/index.cpp index d37bef6..f7aa869 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -2239,13 +2239,13 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) }; MemInfo memberLists[] = { - MemInfo(&gd->defineMembers, theTranslator->trDefines()), - MemInfo(&gd->typedefMembers, theTranslator->trTypedefs()), - MemInfo(&gd->enumMembers, theTranslator->trEnumerations()), - MemInfo(&gd->enumValMembers, theTranslator->trEnumerationValues()), - MemInfo(&gd->funcMembers, theTranslator->trFunctions()), - MemInfo(&gd->varMembers, theTranslator->trVariables()), - MemInfo(&gd->protoMembers, theTranslator->trFuncProtos()), + MemInfo(&gd->docDefineMembers, theTranslator->trDefines()), + MemInfo(&gd->docTypedefMembers, theTranslator->trTypedefs()), + MemInfo(&gd->docEnumMembers, theTranslator->trEnumerations()), + MemInfo(&gd->docEnumValMembers, theTranslator->trEnumerationValues()), + MemInfo(&gd->docFuncMembers, theTranslator->trFunctions()), + MemInfo(&gd->docVarMembers, theTranslator->trVariables()), + MemInfo(&gd->docProtoMembers, theTranslator->trFuncProtos()), MemInfo(0,0) }; diff --git a/src/language.cpp b/src/language.cpp index 870a271..d8b2b86 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -61,10 +61,6 @@ bool setTranslator(const char *langName) } else if (L_EQUAL("czech")) { -#ifndef _WIN32 - err("Warning: The Czech translation uses the windows code page 1250 encoding.\n" - "Please convert translator_cz.h to ISO Latin-2 to use it under UNIX.\n"); -#endif theTranslator=new TranslatorCzech; } else if (L_EQUAL("french")) @@ -133,7 +129,7 @@ bool setTranslator(const char *langName) } else if (L_EQUAL("brazilian")) { - theTranslator=new TranslatorBrazilianPortuguese; + theTranslator=new TranslatorBrazilian; } #endif else // use the default language (i.e. english) diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 9347c79..761845f 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -261,16 +261,6 @@ static void writeDefaultHeaderPart1(QTextStream &t) // The result of the LatexLanguageSupportCommand() // is empty, which means that the language prefers // the babel package, or no package is needed at all. - if (theTranslator->latexBabelPackage()=="russian") - { - // The russian babel package also needs an encoding. - // Assume the encoding matched the platform. -#if defined(_WIN32) - t << "\\usepackage[cp1251]{inputenc}\n"; -#else - t << "\\usepackage[koi8-r]{inputenc}\n"; -#endif - } t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n"; } } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 9962576..75b5c21 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -182,7 +182,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, } } -static void writeTemplatePrefix(OutputList &ol,ArgumentList *al,bool br=TRUE) +static void writeTemplatePrefix(OutputList &ol,ArgumentList *al) { ol.docify("template<"); Argument *a=al->first(); @@ -200,35 +200,29 @@ static void writeTemplatePrefix(OutputList &ol,ArgumentList *al,bool br=TRUE) if (a) ol.docify(", "); } ol.docify("> "); - if (br) - { - // ol.pushGeneratorState(); - // ol.disable(OutputGenerator::Man); - // ol.disable(OutputGenerator::Latex); - // ol.lineBreak(); - // ol.popGeneratorState(); - } } //----------------------------------------------------------------------------- /*! Creates a new member definition. - * Members can be function/variables/enums/etc. inside a class or inside a - * file. * * \param df File containing the definition of this member. * \param dl Line at which the member definition was found. * \param t A string representing the type of the member. - * \param n A string representing the name of the member. + * \param na A string representing the name of the member. * \param a A string representing the arguments of the member. - * \param p The type of protection of the member, possible values are: + * \param e A string representing the throw clause of the members. + * \param p The protection context of the member, possible values are: * \c Public, \c Protected, \c Private. - * \param v The `virtualness' of the member, possible values are: + * \param v The degree of `virtualness' of the member, possible values are: * \c Normal, \c Virtual, \c Pure. - * \param s A boolean that is true if the member is static. - * \param r A boolean that is true if the member is only related. + * \param s A boolean that is true iff the member is static. + * \param r A boolean that is true iff the member is only related. * \param mt The kind of member. See #MemberDef::MemberType for a list of * all types. + * \param tal The template arguments of this member. + * \param al The arguments of this member. This is a structured form of + * the string past as argument \a a. */ MemberDef::MemberDef(const char *df,int dl, @@ -240,7 +234,6 @@ MemberDef::MemberDef(const char *df,int dl, //printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl); classDef=0; fileDef=0; - //fileDec=0; redefines=0; redefinedBy=0; nspace=0; @@ -268,7 +261,6 @@ MemberDef::MemberDef(const char *df,int dl, stat=s; mtype=mt; exception=e; - eUsed=FALSE; proto=FALSE; annScope=FALSE; memSpec=FALSE; @@ -319,6 +311,7 @@ MemberDef::MemberDef(const char *df,int dl, } } +/*! Destroys the member definition. */ MemberDef::~MemberDef() { delete redefinedBy; @@ -399,10 +392,6 @@ QCString MemberDef::getOutputFileBase() const { return fileDef->getOutputFileBase(); } - //else if (fileDec) - //{ - // return fileDec->getOutputFileBase(); - //} else if (nspace) { return nspace->getOutputFileBase(); @@ -454,7 +443,7 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd, { Definition *d=0; if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd; - if (d==0) { err("Member %s without group! Please report this bug!\n",name().data()); return; } + if (d==0) { err("Member %s without definition! Please report this bug!\n",name().data()); return; } if (group!=0 && gd==0) // forward link to the group { ol.writeObjectLink(group->getReference(),group->getOutputFileBase(),anchor(),name()); @@ -465,422 +454,435 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd, } } - -void MemberDef::writeDeclaration(OutputList &ol, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup - ) +/*! If this member has an anonymous class/struct/union as its type, then + * this method will return the ClassDef that describes this return type. + */ +ClassDef *MemberDef::getClassDefOfAnonymousType(const char *scopeName) const { - int i,l; - bool hasDocs=hasDocumentation(); - //printf("%s MemberDef::writeDeclaration(): hasDocs %d\n",name().data(),hasDocs); - //if (cd) - //{ - // printf("MemberDef: %s in class %s annScope=%d annMemb=%p\n", - // name().data(),cd->name().data(),annScope,annMemb); - //} - - // hide members in anonymous scopes - // (they are displayed by there parent placeholder) - if (annScope) return; - // hide undocumented members unless overwritten by the configuration - if (!hasDocs && Config_getBool("HIDE_UNDOC_MEMBERS")) return; - // hide members with no detailed desciption and brief descriptions explicitly - // disabled. - if (Config_getBool("HIDE_UNDOC_MEMBERS") && documentation().isEmpty() && - !Config_getBool("BRIEF_MEMBER_DESC") && !Config_getBool("REPEAT_BRIEF") - ) return; - // hide static file & namespace members unless extract static is on - if (cd==0 && isStatic() && !Config_getBool("EXTRACT_STATIC")) return; - - // hide private member that are put into a member group. Non-grouped - // members are not rendered anyway. - //printf("md->name()=`%s' Protection=%d\n",name().data(),protection()); - if (inGroup && protection()==Private && !Config_getBool("EXTRACT_PRIVATE")) return; - - QCString ltype=type.copy(); + QCString cname=scopeName; + QCString ltype(type); // strip `static' keyword from ltype if (ltype.left(7)=="static ") ltype=ltype.right(ltype.length()-7); // strip `friend' keyword from ltype if (ltype.left(7)=="friend ") ltype=ltype.right(ltype.length()-7); static QRegExp r("@[0-9]+"); - i=-1; - if ((ltype.isEmpty() || (i=r.match(ltype,0,&l))==-1) || !enumUsed()) + int l,i=r.match(ltype,0,&l); + // search for the last anonymous scope in the member type + ClassDef *annoClassDef=0; + if (i!=-1) // found anonymous scope in type { - - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + int il=i-1,ir=i+l; + // extract anonymous scope + while (il>=0 && (isId(ltype.at(il)) || ltype.at(il)==':' || ltype.at(il)=='@')) il--; + if (il>0) il++; + while (ir<(int)ltype.length() && (isId(ltype.at(ir)) || ltype.at(ir)==':' || ltype.at(ir)=='@')) ir++; + + //QCString annName = ltype.mid(i,l); + QCString annName = ltype.mid(il,ir-il); + + // if inside a class or namespace try to prepend the scope name + if (!cname.isEmpty() && annName.left(cname.length()+2)!=cname+"::") { - Doxygen::tagFile << " <member kind=\""; - switch (mtype) - { - case Define: Doxygen::tagFile << "define"; break; - case EnumValue: Doxygen::tagFile << "enumvalue"; break; - case Property: Doxygen::tagFile << "property"; break; - case Variable: Doxygen::tagFile << "variable"; break; - case Typedef: Doxygen::tagFile << "typedef"; break; - case Enumeration: Doxygen::tagFile << "enumeration"; break; - case Function: Doxygen::tagFile << "function"; break; - case Signal: Doxygen::tagFile << "signal"; break; - case Prototype: Doxygen::tagFile << "prototype"; break; - case Friend: Doxygen::tagFile << "friend"; break; - case DCOP: Doxygen::tagFile << "dcop"; break; - case Slot: Doxygen::tagFile << "slot"; break; - } - if (prot!=Public) - { - Doxygen::tagFile << "\" protection=\""; - if (prot==Protected) Doxygen::tagFile << "public"; - else /* Private */ Doxygen::tagFile << "protected"; - } - if (virt!=Normal) - { - Doxygen::tagFile << "\" virtualness=\""; - if (virt==Virtual) Doxygen::tagFile << "virtual"; - else /* Pure */ Doxygen::tagFile << "pure"; - } - if (isStatic()) - { - Doxygen::tagFile << "\" static=\"yes"; - } - Doxygen::tagFile << "\">" << endl; - Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; - Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl; - Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl; - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </member>" << endl; + QCString ts=stripAnonymousNamespaceScope(cname+"::"+annName); + //printf("Member::writeDeclaration: Trying %s\n",ts.data()); + annoClassDef=getClass(ts); } - - Definition *d=0; - ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something - if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; - QCString cname = d->name(); - QCString cfname = d->getOutputFileBase(); - - //int gId = inGroup ? -1 : groupId(); - //MemberGroup *mg = (gId!=prevGroupId && gId!=-1) ? memberGroupDict[gId] : 0; - //const char *gHeader = 0; - //const char *gFile = 0; - //if (mg) - //{ - // gHeader=mg->header(); - // gFile=mg->getOutputFileBase(); - //} - // - //if (!inGroup) - //{ - // if (prevGroupId==-1 && gId!=-1) - // { - // ol.memberGroupSpacing(FALSE); - // ol.memberGroupSeparator(); - // } - // else if (prevGroupId!=-1 && gId==-1) - // { - // ol.memberGroupSpacing(TRUE); - // ol.memberGroupSeparator(); - // } - // else if (prevGroupId!=-1 && gId!=-1 && prevGroupId!=gId) - // { - // ol.memberGroupSpacing(TRUE); - // ol.memberGroupSeparator(); - // } - //} - - HtmlHelp *htmlHelp=0; - bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); - if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance(); - - // search for the last anonymous scope in the member type - ClassDef *annoClassDef=0; - //while (i!=-1 && cname.find(ltype.mid(i,l))!=-1) - //{ - // i=r.match(ltype,i+l,&l); - //} - int il=i-1,ir=i+l; - if (i!=-1) // found anonymous scope in type + // if not found yet, try without scope name + if (annoClassDef==0) { - // extract anonymous scope - while (il>=0 && (isId(ltype.at(il)) || ltype.at(il)==':' || ltype.at(il)=='@')) il--; - if (il>0) il++; - while (ir<(int)ltype.length() && (isId(ltype.at(ir)) || ltype.at(ir)==':' || ltype.at(ir)=='@')) ir++; - - //QCString annName = ltype.mid(i,l); - QCString annName = ltype.mid(il,ir-il); - - // if inside a class or namespace try to prepend the scope name - if ((cd || nd) && annName.left(cname.length())!=cname) - { - QCString ts=stripAnnonymousNamespaceScope(cname+"::"+annName); - //printf("Member::writeDeclaration: Trying %s\n",ts.data()); - annoClassDef=getClass(ts); - } - // if not found yet, try without scope name - if (annoClassDef==0) - { - QCString ts=stripAnnonymousNamespaceScope(annName); - //printf("Member::writeDeclaration: Trying %s\n",ts.data()); - annoClassDef=getClass(ts); - } + QCString ts=stripAnonymousNamespaceScope(annName); + //printf("Member::writeDeclaration: Trying %s\n",ts.data()); + annoClassDef=getClass(ts); } + } + return annoClassDef; +} + +/*! This methods returns TRUE iff the brief section (also known as + * declaration section) is visible in the documentation. + */ +bool MemberDef::isBriefSectionVisible() const +{ + // only include static members with file/namespace scope if + // explicitly enabled in the config file + bool visibleIfStatic = !(getClassDef()==0 && + isStatic() && + !Config_getBool("EXTRACT_STATIC") + ); - // start a new member declaration - ol.startMemberItem((annoClassDef || annMemb || annEnumType) ? 1 : 0); + // only include members is the are documented or + // HIDE_UNDOC_MEMBERS is NO in the config file + bool visibleIfDocumented = (!Config_getBool("HIDE_UNDOC_MEMBERS") || + hasDocumentation() + ); + + // hide members with no detailed desciption and brief descriptions + // explicitly disabled. + bool visibleIfEnabled = !(Config_getBool("HIDE_UNDOC_MEMBERS") && + documentation().isEmpty() && + !Config_getBool("BRIEF_MEMBER_DESC") && + !Config_getBool("REPEAT_BRIEF") + ); + + // only include members that are non-private unless EXTRACT_PRIVATE is + // set to YES or the member is part of a group + bool visibleIfPrivate = (protection()!=Private || + Config_getBool("EXTRACT_PRIVATE") + ); - // If there is no detailed description we need to write the anchor here. - bool detailsVisible = detailsAreVisible(); - if (!detailsVisible && !Config_getBool("EXTRACT_ALL") && !annMemb) - { - QCString doxyName=name().copy(); - if (!cname.isEmpty()) doxyName.prepend(cname+"::"); - ol.startDoxyAnchor(cfname,anchor(),doxyName); + return visibleIfStatic && visibleIfDocumented && + visibleIfEnabled && visibleIfPrivate && !annScope; +} - ol.addIndexItem(name(),cname); - ol.addIndexItem(cname,name()); +void MemberDef::writeDeclaration(OutputList &ol, + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, + bool inGroup + ) +{ + //printf("%s MemberDef::writeDeclaration()\n",name().data()); - if (hasHtmlHelp) - { - htmlHelp->addIndexItem(cname,name(),cfname,anchor()); - } - ol.pushGeneratorState(); - ol.disable(OutputGenerator::Man); - ol.docify("\n"); - ol.popGeneratorState(); - } + // hide members whose brief section should not be visible + if (!isBriefSectionVisible()) return; - //printf("member name=%s indDepth=%d\n",name().data(),indDepth); - if (annoClassDef || annMemb) - { - int j; - for (j=0;j<indDepth;j++) - { - ol.writeNonBreakableSpace(3); - } - } - - if (tArgList) + // write tag file information of this member + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + { + Doxygen::tagFile << " <member kind=\""; + switch (mtype) { - writeTemplatePrefix(ol,tArgList,FALSE); + case Define: Doxygen::tagFile << "define"; break; + case EnumValue: Doxygen::tagFile << "enumvalue"; break; + case Property: Doxygen::tagFile << "property"; break; + case Variable: Doxygen::tagFile << "variable"; break; + case Typedef: Doxygen::tagFile << "typedef"; break; + case Enumeration: Doxygen::tagFile << "enumeration"; break; + case Function: Doxygen::tagFile << "function"; break; + case Signal: Doxygen::tagFile << "signal"; break; + case Prototype: Doxygen::tagFile << "prototype"; break; + case Friend: Doxygen::tagFile << "friend"; break; + case DCOP: Doxygen::tagFile << "dcop"; break; + case Slot: Doxygen::tagFile << "slot"; break; } - else if (membTAL) + if (prot!=Public) { - writeTemplatePrefix(ol,membTAL,FALSE); + Doxygen::tagFile << "\" protection=\""; + if (prot==Protected) Doxygen::tagFile << "public"; + else /* Private */ Doxygen::tagFile << "protected"; } - - if (i!=-1) // member has an anonymous type + if (virt!=Normal) { - //printf("annoClassDef=%p annMemb=%p scopeName=`%s' anonymous=`%s'\n", - // annoClassDef,annMemb,cname.data(),ltype.mid(i,l).data()); - - if (annoClassDef) // type is an anonymous compound - { - //printf("class found!\n"); - annoClassDef->writeDeclaration(ol,annMemb,inGroup); - ol.startMemberItem(2); - int j; - for (j=0;j<indDepth;j++) - { - ol.writeNonBreakableSpace(3); - } - QCString varName=ltype.right(ltype.length()-ir).stripWhiteSpace(); - ol.docify("}"); - if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@')) - { - ol.docify(";"); - } - else - { - ol.docify(varName); - } - } - else - { - if (getAnonymousEnumType()) // type is an anonymous enum - { - linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype.left(i),TRUE); - ol+=*getAnonymousEnumType()->enumDecl(); - linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype.right(ltype.length()-i-l),TRUE); - } - else - { - ltype = ltype.left(i) + " { ... } " + ltype.right(ltype.length()-i-l); - linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype,TRUE); - } - } + Doxygen::tagFile << "\" virtualness=\""; + if (virt==Virtual) Doxygen::tagFile << "virtual"; + else /* Pure */ Doxygen::tagFile << "pure"; } - else - { - linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype,TRUE); - } - bool htmlOn = ol.isEnabled(OutputGenerator::Html); - if (htmlOn && Config_getBool("HTML_ALIGN_MEMBERS") && !ltype.isEmpty()) + if (isStatic()) { - ol.disable(OutputGenerator::Html); + Doxygen::tagFile << "\" static=\"yes"; } - if (!ltype.isEmpty()) ol.docify(" "); - if (htmlOn) + Doxygen::tagFile << "\">" << endl; + Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; + Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl; + Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl; + writeDocAnchorsToTagFile(); + Doxygen::tagFile << " </member>" << endl; + } + + Definition *d=0; + ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something + if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; + QCString cname = d->name(); + QCString cfname = d->getOutputFileBase(); + + HtmlHelp *htmlHelp=0; + bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); + if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance(); + + // search for the last anonymous scope in the member type + ClassDef *annoClassDef=getClassDefOfAnonymousType((cd||nd)?cname.data():0); + + // start a new member declaration + ol.startMemberItem((annoClassDef || annMemb || annEnumType) ? 1 : 0); + + // If there is no detailed description we need to write the anchor here. + bool detailsVisible = isDetailedSectionVisible(); + if (!detailsVisible && !annMemb) + { + QCString doxyName=name().copy(); + if (!cname.isEmpty()) doxyName.prepend(cname+"::"); + ol.startDoxyAnchor(cfname,anchor(),doxyName); + + ol.addIndexItem(name(),cname); + ol.addIndexItem(cname,name()); + + if (hasHtmlHelp) { - ol.enable(OutputGenerator::Html); + htmlHelp->addIndexItem(cname,name(),cfname,anchor()); } + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Man); + ol.docify("\n"); + ol.popGeneratorState(); + } - if (annMemb) + //printf("member name=%s indDepth=%d\n",name().data(),indDepth); + if (annoClassDef || annMemb) + { + int j; + for (j=0;j<indDepth;j++) { - //bool latexOn = ol.isEnabled(OutputGenerator::Latex); - //bool manOn = ol.isEnabled(OutputGenerator::Man); - //if (latexOn) ol.disable(OutputGenerator::Latex); - //if (manOn) ol.disable(OutputGenerator::Man); - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Html); ol.writeNonBreakableSpace(3); - ol.popGeneratorState(); - //if (latexOn) ol.enable(OutputGenerator::Latex); - //if (manOn) ol.enable(OutputGenerator::Man); } - else + } + + if (tArgList) + { + writeTemplatePrefix(ol,tArgList); + } + else if (membTAL) + { + writeTemplatePrefix(ol,membTAL); + } + + QCString ltype(type); + // strip `static' keyword from ltype + if (ltype.left(7)=="static ") ltype=ltype.right(ltype.length()-7); + // strip `friend' keyword from ltype + if (ltype.left(7)=="friend ") ltype=ltype.right(ltype.length()-7); + static QRegExp r("@[0-9]+"); + + int l,i=r.match(ltype,0,&l); + if (i!=-1) // member has an anonymous type + { + //printf("annoClassDef=%p annMemb=%p scopeName=`%s' anonymous=`%s'\n", + // annoClassDef,annMemb,cname.data(),ltype.mid(i,l).data()); + + if (annoClassDef) // type is an anonymous compound { - ol.insertMemberAlign(); + int ir=i+l; + //printf("class found!\n"); + annoClassDef->writeDeclaration(ol,annMemb,inGroup); + ol.startMemberItem(2); + int j; + for (j=0;j<indDepth;j++) + { + ol.writeNonBreakableSpace(3); + } + QCString varName=ltype.right(ltype.length()-ir).stripWhiteSpace(); + //printf(">>>>>> indDepth=%d ltype=`%s' varName=`%s'\n",indDepth,ltype.data(),varName.data()); + ol.docify("}"); + if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@')) + { + ol.docify(";"); + } + //else + //{ + // ol.docify(varName); + //} } - - // write name - if (!name().isEmpty() && name().at(0)!='@') + else { - if (isLinkable()) + if (getAnonymousEnumType()) // type is an anonymous enum { - if (annMemb) - { - //printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor()); - annMemb->writeLink(ol, - annMemb->getClassDef(), - annMemb->getNamespaceDef(), - annMemb->getFileDef(), - annMemb->getGroupDef() - ); - annMemb->annUsed=annUsed=TRUE; - } - else - //printf("writeLink %s->%d\n",name.data(),hasDocumentation()); - writeLink(ol,cd,nd,fd,gd); + linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype.left(i),TRUE); + ol+=*getAnonymousEnumType()->enumDecl(); + linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype.right(ltype.length()-i-l),TRUE); } - else // there is a brief member description and brief member - // descriptions are enabled or there is no detailed description. + else { - if (annMemb) annMemb->annUsed=annUsed=TRUE; - ol.startBold(); - ol.docify(name()); - ol.endBold(); + ltype = ltype.left(i) + " { ... } " + ltype.right(ltype.length()-i-l); + linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype,TRUE); } } + } + else + { + linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype,TRUE); + } + bool htmlOn = ol.isEnabled(OutputGenerator::Html); + if (htmlOn && Config_getBool("HTML_ALIGN_MEMBERS") && !ltype.isEmpty()) + { + ol.disable(OutputGenerator::Html); + } + if (!ltype.isEmpty()) ol.docify(" "); + if (htmlOn) + { + ol.enable(OutputGenerator::Html); + } - // if member template specifiers are not part of the name, but they are - // present, we add them - //if (tArgList && !(name().find('<')!=-1 && name().find('>')!=-1) - // && cd && cd->templateArguments()) - //{ - // ol.docify(tempArgListToString(tArgList)); - //} + if (annMemb) + { + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.writeNonBreakableSpace(3); + ol.popGeneratorState(); + } + else + { + ol.insertMemberAlign(); + } - if (argsString()) + // write name + if (!name().isEmpty() && name().at(0)!='@') + { + if (isLinkable()) { - if (!isDefine()) ol.writeString(" "); - //ol.docify(argsString()); - linkifyText(TextGeneratorOLImpl(ol),cname,name(),argsString()); + if (annMemb) + { + //printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor()); + annMemb->writeLink(ol, + annMemb->getClassDef(), + annMemb->getNamespaceDef(), + annMemb->getFileDef(), + annMemb->getGroupDef() + ); + annMemb->annUsed=annUsed=TRUE; + } + else + //printf("writeLink %s->%d\n",name.data(),hasDocumentation()); + writeLink(ol,cd,nd,fd,gd); } - - if (excpString()) + else // there is a brief member description and brief member + // descriptions are enabled or there is no detailed description. { - ol.writeString(" "); - ol.docify(excpString()); + if (annMemb) annMemb->annUsed=annUsed=TRUE; + ol.startBold(); + ol.docify(name()); + ol.endBold(); } + } + + if (argsString()) + { + if (!isDefine()) ol.writeString(" "); + //ol.docify(argsString()); + linkifyText(TextGeneratorOLImpl(ol),cname,name(),argsString()); + } + + if (excpString()) + { + ol.writeString(" "); + ol.docify(excpString()); + } - if (!bitfields.isEmpty()) // add bitfields + if (!bitfields.isEmpty()) // add bitfields + { + linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace()); + } + else if (!init.isEmpty() && initLines==0 && // one line initializer + ((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly + ) // add initializer + { + if (!isDefine()) { - linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace()); + ol.writeString(" = "); + linkifyText(TextGeneratorOLImpl(ol),cname,name(),init.simplifyWhiteSpace()); } - else if (!init.isEmpty() && initLines==0 && // one line initializer - ((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly - ) // add initializer + else { - if (!isDefine()) - { - ol.writeString(" = "); - linkifyText(TextGeneratorOLImpl(ol),cname,name(),init.simplifyWhiteSpace()); - } - else - { - ol.writeNonBreakableSpace(3); - linkifyText(TextGeneratorOLImpl(ol),cname,name(),init); - } + ol.writeNonBreakableSpace(3); + linkifyText(TextGeneratorOLImpl(ol),cname,name(),init); } + } - if (!detailsVisible && !Config_getBool("EXTRACT_ALL") && !annMemb) - { - ol.endDoxyAnchor(cfname,anchor()); - } + if (!detailsVisible && !annMemb) + { + ol.endDoxyAnchor(cfname,anchor()); + } - ol.endMemberItem((annoClassDef!=0 && indDepth==0) || annEnumType); - - //ol.endMemberItem(gId!=-1,gFile,gHeader,annoClassDef || annMemb); - // write brief description - if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC") && !annMemb) + ol.endMemberItem((annoClassDef!=0 && indDepth==0) || annEnumType); + + //ol.endMemberItem(gId!=-1,gFile,gHeader,annoClassDef || annMemb); + // write brief description + if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC") && !annMemb) + { + ol.startMemberDescription(); + parseDoc(ol,defFileName,defLine,cname,name(),briefDescription()); + if (detailsVisible) { - ol.startMemberDescription(); - parseDoc(ol,defFileName,defLine,cname,name(),briefDescription()); - if (/*!documentation().isEmpty()*/ detailsAreVisible()) + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.endEmphasis(); + ol.docify(" "); + if (group!=0 && gd==0) // forward link to the group { - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Html); - ol.endEmphasis(); - ol.docify(" "); - if (group!=0 && gd==0) // forward link to the group - { - ol.startTextLink(group->getOutputFileBase(),anchor()); - } - else - { - ol.startTextLink(0,anchor()); - } - parseText(ol,theTranslator->trMore()); - ol.endTextLink(); - ol.startEmphasis(); - ol.popGeneratorState(); + ol.startTextLink(group->getOutputFileBase(),anchor()); + } + else + { + ol.startTextLink(0,anchor()); } - //ol.newParagraph(); - ol.endMemberDescription(); + parseText(ol,theTranslator->trMore()); + ol.endTextLink(); + ol.startEmphasis(); + ol.popGeneratorState(); } + //ol.newParagraph(); + ol.endMemberDescription(); } warnIfUndocumented(); } +bool MemberDef::isDetailedSectionVisible(bool inGroup) const +{ + // the member has details documentation for any of the following reasons + bool docFilter = + // treat everything as documented + Config_getBool("EXTRACT_ALL") || + // has detailed docs + !documentation().isEmpty() || + // is an enum with values that are documented + (mtype==Enumeration && docEnumValues) || + // is documented enum value + (mtype==EnumValue && !briefDescription().isEmpty()) || + // has brief description that is part of the detailed description + (!briefDescription().isEmpty() && + (!Config_getBool("BRIEF_MEMBER_DESC") || + Config_getBool("ALWAYS_DETAILED_SEC")) && + Config_getBool("REPEAT_BRIEF" + ) + ) || + // has a multi-line initialization block + (initLines>0 && initLines<maxInitLines) || + // has one or more documented arguments + (argList!=0 && argList->hasDocumentation()); + + // this is not a global static or global statics should be extracted + bool staticFilter = getClassDef()!=0 || !isStatic() || Config_getBool("EXTRACT_STATIC"); + + // details are not part of a group or this is for a group documentation page + bool groupFilter = getGroupDef()==0 || inGroup; + + // member is part of an anonymous scope that is the type of + // another member in the list. + // + bool inAnonymousScope = !briefDescription().isEmpty() && annUsed; + + return ((docFilter && staticFilter) || inAnonymousScope) && groupFilter; +} + /*! Writes the "detailed documentation" section of this member to * all active output formats. */ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, const char *scName, - Definition *container + Definition *container, + bool inGroup ) { - // hide global static functions unless extractStaticFlag is enabled - if (getClassDef()==0 && isStatic() && !Config_getBool("EXTRACT_STATIC")) return; - // hide member that are documented in their own group - if (group!=0 && container->definitionType()!=TypeGroup) return; - // if this member is in a group find the real scope name. - QCString scopeName = scName; - if (container->definitionType()==TypeGroup) + bool hasDocs = isDetailedSectionVisible(inGroup); + //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n", + // name().data(),hasDocs,container->definitionType(),inGroup); + if ( hasDocs ) { - if (getClassDef()) scopeName=getClassDef()->name(); - else if (getNamespaceDef()) scopeName=getNamespaceDef()->name(); - else if (getFileDef()) scopeName=getFileDef()->name(); - } + QCString scopeName = scName; + if (container->definitionType()==TypeGroup) + { + if (getClassDef()) scopeName=getClassDef()->name(); + else if (getNamespaceDef()) scopeName=getNamespaceDef()->name(); + else if (getFileDef()) scopeName=getFileDef()->name(); + } - bool hasDocs = detailsAreVisible(); - //printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition()); - if ( - Config_getBool("EXTRACT_ALL") || hasDocs - || /* member is part of an anonymous scope that is the type of - * another member in the list. - */ - (!hasDocs && !briefDescription().isEmpty() && annUsed) - ) - { // get definition. QCString cname = container->name(); QCString cfname = container->getOutputFileBase(); @@ -939,7 +941,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, } if (!found) // anonymous compound { - //printf("Annonymous compound `%s'\n",cname.data()); + //printf("Anonymous compound `%s'\n",cname.data()); ol.startDoxyAnchor(cfname,anchor(),doxyName); ol.startMemberDoc(cname,name(),anchor(),name()); if (hasHtmlHelp) @@ -1429,30 +1431,17 @@ bool MemberDef::isLinkable() return isLinkableInProject() || isReference(); } -bool MemberDef::detailsAreVisible() const -{ - return !documentation().isEmpty() || // has detailed docs - //((Config_getBool("SOURCE_BROWSER") || Config_getBool("INLINE_SOURCES")) && startBodyLine!=-1 && bodyDef) || // has reference to sources - (mtype==Enumeration && docEnumValues) || // has enum values - (mtype==EnumValue && !briefDescription().isEmpty()) || // is doc enum value - (!briefDescription().isEmpty() && - (!Config_getBool("BRIEF_MEMBER_DESC") || Config_getBool("ALWAYS_DETAILED_SEC")) && - Config_getBool("REPEAT_BRIEF") // has brief description inside detailed area - ) || - (initLines>0 && initLines<maxInitLines) || - (argList!=0 && argList->hasDocumentation()) - ; -} - void MemberDef::setEnumDecl(OutputList &ed) { enumDeclList=new OutputList(&ed); *enumDeclList+=ed; } -bool MemberDef::hasDocumentation() +bool MemberDef::hasDocumentation() const { - return Definition::hasDocumentation() || (argList!=0 && argList->hasDocumentation()); + return Definition::hasDocumentation() || + (mtype==Enumeration && docEnumValues) || // has enum values + (argList!=0 && argList->hasDocumentation()); } void MemberDef::setMemberGroup(MemberGroup *grp) diff --git a/src/memberdef.h b/src/memberdef.h index ee60338..4eda16b 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -95,6 +95,7 @@ class MemberDef : public Definition Specifier virtualness() const { return virt; } MemberType memberType() const { return mtype; } + // convenience methods bool isSignal() const { return mtype==Signal; } bool isSlot() const { return mtype==Slot; } @@ -117,8 +118,9 @@ class MemberDef : public Definition // output info bool isLinkableInProject(); bool isLinkable(); - bool detailsAreVisible() const; - bool hasDocumentation(); // overrides hasDocumentation in definition.h + bool hasDocumentation() const; // overrides hasDocumentation in definition.h + bool isBriefSectionVisible() const; + bool isDetailedSectionVisible(bool inGroup=FALSE) const; // set functions void setMemberType(MemberType t) { mtype=t; } @@ -148,7 +150,8 @@ class MemberDef : public Definition ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, bool inGroup); void writeDocumentation(MemberList *ml,OutputList &ol, - const char *scopeName,Definition *container); + const char *scopeName,Definition *container, + bool inGroup); void warnIfUndocumented(); // relation to other members @@ -162,8 +165,8 @@ class MemberDef : public Definition void setEnumScope(MemberDef *md) { enumScope=md; } MemberDef *getEnumScope() const { return enumScope; } void setEnumDecl(OutputList &ed); - void setEnumUsed() { eUsed=TRUE; } - bool enumUsed() const { return eUsed; } + //void setEnumUsed() { eUsed=TRUE; } + //bool enumUsed() const { return eUsed; } OutputList *enumDecl() const { return enumDeclList; } MemberList *enumFieldList() const { return enumFields; } void setDocumentedEnumValues(bool value) { docEnumValues=value; } @@ -202,11 +205,11 @@ class MemberDef : public Definition void setMemberGroupId(int id) { grpId=id; } int getMemberGroupId() const { return grpId; } - // annonymous scope members - void setFromAnnonymousScope(bool b) { annScope=b; } - void setFromAnnonymousMember(MemberDef *m) { annMemb=m; } - bool fromAnnonymousScope() const { return annScope; } - bool annonymousDeclShown() const { return annUsed; } + // anonymous scope members + void setFromAnonymousScope(bool b) { annScope=b; } + void setFromAnonymousMember(MemberDef *m) { annMemb=m; } + bool fromAnonymousScope() const { return annScope; } + bool anonymousDeclShown() const { return annUsed; } void setIndentDepth( int i) { indDepth=i; } int indentDepth() { return indDepth; } @@ -214,7 +217,7 @@ class MemberDef : public Definition QCString getScopeString() const; - //void generateXML(QTextStream &t,Definition *def); + ClassDef *getClassDefOfAnonymousType(const char *scopeName) const; private: ClassDef *classDef; // member of or related to @@ -247,7 +250,7 @@ class MemberDef : public Definition bool stat; // is it a static function? int memSpec; // The specifiers present for this member MemberType mtype; // returns the kind of member - bool eUsed; // is the enumerate already placed in a list + //bool eUsed; // is the enumerate already placed in a list bool proto; // is it a prototype; bool docEnumValues; // is an enum with documented enum values. bool annScope; // member is part of an annoymous scope diff --git a/src/membergroup.cpp b/src/membergroup.cpp index f96dc06..83e4dd3 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -43,7 +43,7 @@ MemberGroup::MemberGroup(int id,const char *hdr,const char *d) /* : Definition(i scope = 0; inSameSection = TRUE; inDeclSection = 0; - numDeclMembers = -1; + m_numDecMembers = -1; //printf("Member group docs=`%s'\n",doc.data()); } @@ -89,15 +89,22 @@ void MemberGroup::setAnchors() void MemberGroup::writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd) { - memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,doc,TRUE,TRUE); + //printf("MemberGroup::writeDeclarations() memberList->count()=%d\n",memberList->count()); + memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,doc/*,TRUE,TRUE*/); } void MemberGroup::writePlainDeclarations(OutputList &ol, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup) + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd + ) { //printf("MemberGroup::writePlainDeclarations() memberList->count()=%d\n",memberList->count()); - memberList->writePlainDeclarations(ol,cd,nd,fd,gd,inGroup); + memberList->writePlainDeclarations(ol,cd,nd,fd,gd); +} + +void MemberGroup::writeDocumentation(OutputList &ol,const char *scopeName, + Definition *container) +{ + memberList->writeDocumentation(ol,scopeName,container,0); } /*! Add this group as a subsection of the declaration section, instead @@ -111,14 +118,14 @@ void MemberGroup::addToDeclarationSection() } } -int MemberGroup::countDecMembers(bool sectionPerType) +int MemberGroup::countDecMembers(/*bool sectionPerType*/) { - if (numDeclMembers==-1) /* number of member not cached */ + if (m_numDecMembers==-1) /* number of member not cached */ { - memberList->countDecMembers(TRUE,TRUE,sectionPerType); - numDeclMembers = memberList->totalCount(); + memberList->countDecMembers(/*TRUE,TRUE,sectionPerType*/); + m_numDecMembers = memberList->numDecMembers(); } - return numDeclMembers; + return m_numDecMembers; } void MemberGroup::distributeMemberGroupDocumentation() @@ -141,3 +148,58 @@ void MemberGroup::distributeMemberGroupDocumentation() } } } + +int MemberGroup::varCount() const +{ + return memberList->varCount(); +} + +int MemberGroup::funcCount() const +{ + return memberList->funcCount(); +} + +int MemberGroup::enumCount() const +{ + return memberList->enumCount(); +} + +int MemberGroup::enumValueCount() const +{ + return memberList->enumValueCount(); +} + +int MemberGroup::typedefCount() const +{ + return memberList->typedefCount(); +} + +int MemberGroup::protoCount() const +{ + return memberList->protoCount(); +} + +int MemberGroup::defineCount() const +{ + return memberList->defineCount(); +} + +int MemberGroup::friendCount() const +{ + return memberList->friendCount(); +} + +int MemberGroup::numDecMembers() const +{ + return memberList->numDecMembers(); +} + +int MemberGroup::numDocMembers() const +{ + return memberList->numDocMembers(); +} + +void MemberGroup::setInGroup(bool b) +{ + memberList->setInGroup(b); +} diff --git a/src/membergroup.h b/src/membergroup.h index 8ddcb66..833350e 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -43,15 +43,28 @@ class MemberGroup /* : public Definition */ void insertMember(MemberDef *); void setAnchors(); void writePlainDeclarations(OutputList &ol, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup=TRUE); + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); void writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); + + void writeDocumentation(OutputList &ol,const char *scopeName, + Definition *container); QCString documentation() { return doc; } bool allMembersInSameSection() { return inSameSection; } void addToDeclarationSection(); - int countDecMembers(bool sectionPerType); + int countDecMembers(/*bool sectionPerType*/); void distributeMemberGroupDocumentation(); + int varCount() const; + int funcCount() const; + int enumCount() const; + int enumValueCount() const; + int typedefCount() const; + int protoCount() const; + int defineCount() const; + int friendCount() const; + int numDecMembers() const; + int numDocMembers() const; + void setInGroup(bool b); private: MemberList *memberList; // list of all members in the group @@ -62,7 +75,7 @@ class MemberGroup /* : public Definition */ QCString doc; MemberList *inDeclSection; bool inSameSection; - int numDeclMembers; + int m_numDecMembers; }; class MemberGroupList : public QList<MemberGroup> diff --git a/src/memberlist.cpp b/src/memberlist.cpp index d6d05e2..404c5a0 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -30,6 +30,9 @@ MemberList::MemberList() : QList<MemberDef>() { memberGroupList=0; + m_numDecMembers=-1; // special value indicating that computation is needed + m_numDocMembers=-1; // special value indicating that computation is needed + m_inGroup=FALSE; } MemberList::~MemberList() @@ -44,96 +47,98 @@ int MemberList::compareItems(GCI item1, GCI item2) return strcmp(c1->name(),c2->name()); } -void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPerType) +/*! Count the number of members in this list that are visible in + * the declaration part of a compound's documentation page. + */ +void MemberList::countDecMembers(/*bool inGroup,bool countSubGroups,bool sectionPerType*/) { - //printf("----- countDecMembers ----\n"); - varCnt=funcCnt=enumCnt=enumValCnt=typeCnt=protoCnt=defCnt=friendCnt=0; - m_count=0; - MemberDef *md=first(); - while (md) + if (m_numDecMembers!=-1) return; + + //printf("----- countDecMembers count=%d ----\n",count()); + m_varCnt=m_funcCnt=m_enumCnt=m_enumValCnt=0; + m_typeCnt=m_protoCnt=m_defCnt=m_friendCnt=0; + m_numDecMembers=0; + QListIterator<MemberDef> mli(*this); + MemberDef *md; + for (mli.toFirst();(md=mli.current());++mli) { - //printf("md=%p md->name()=`%s' inGroup=%d getMemberGroup()=%p\n", - // md,md->name().data(),inGroup,md->getMemberGroup()); - if (!(md->getClassDef()==0 && md->isStatic() && !Config_getBool("EXTRACT_STATIC")) && - (!Config_getBool("HIDE_UNDOC_MEMBERS") || md->hasDocumentation()) && - ( - (!Config_getBool("HIDE_UNDOC_MEMBERS") || !md->documentation().isEmpty() || - Config_getBool("BRIEF_MEMBER_DESC") || Config_getBool("REPEAT_BRIEF") - ) || Config_getBool("EXTRACT_ALL") || - (md->isEnumerate() && - md->hasDocumentedEnumValues() - ) - ) && - inGroup==md->visibleMemberGroup(sectionPerType) && - !(inGroup && md->protection()==Private && !Config_getBool("EXTRACT_PRIVATE")) - ) + if (md->isBriefSectionVisible()) { switch(md->memberType()) { case MemberDef::Variable: // fall through - case MemberDef::Property: varCnt++,m_count++; + case MemberDef::Property: m_varCnt++,m_numDecMembers++; break; case MemberDef::Function: // fall through case MemberDef::Signal: // fall through case MemberDef::DCOP: // fall through case MemberDef::Slot: if (!md->isRelated() || md->getClassDef()) - funcCnt++,m_count++; + m_funcCnt++,m_numDecMembers++; break; - case MemberDef::Enumeration: enumCnt++,m_count++; break; - case MemberDef::EnumValue: enumValCnt++,m_count++; break; - case MemberDef::Typedef: typeCnt++,m_count++; break; - case MemberDef::Prototype: protoCnt++,m_count++; break; + case MemberDef::Enumeration: m_enumCnt++,m_numDecMembers++; break; + case MemberDef::EnumValue: m_enumValCnt++,m_numDecMembers++; break; + case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break; + case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break; case MemberDef::Define: if (Config_getBool("EXTRACT_ALL") || md->argsString() || !md->initializer().isEmpty() || md->hasDocumentation() - ) defCnt++,m_count++; + ) m_defCnt++,m_numDecMembers++; break; - case MemberDef::Friend: friendCnt++,m_count++; break; + case MemberDef::Friend: m_friendCnt++,m_numDecMembers++; break; default: - err("Error: Unknown member type found!"); + err("Error: Unknown member type found for member `%s'\n!",md->name().data()); } } - md=next(); } - if (memberGroupList && countSubGroups) + if (memberGroupList /*&& countSubGroups*/) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { - int mgCount = mg->countDecMembers(sectionPerType); - //printf("memberGroupList adding %d inGroup=%d\n",mgCount,inGroup); - m_count+=mgCount; + mg->countDecMembers(); + m_varCnt+=mg->varCount(); + m_funcCnt+=mg->funcCount(); + m_enumCnt+=mg->enumCount(); + m_enumValCnt+=mg->enumValueCount(); + m_typeCnt+=mg->typedefCount(); + m_protoCnt+=mg->protoCount(); + m_defCnt+=mg->defineCount(); + m_friendCnt+=mg->friendCount(); + m_numDecMembers+=mg->numDecMembers(); } } //printf("----- end countDecMembers ----\n"); - //printf("MemberList::countDecMembers(%d)=%d\n",inGroup,m_count); + //printf("MemberList::countDecMembers()=%d\n",m_numDecMembers); } -void MemberList::countDocMembers(bool listOfGroup) +void MemberList::countDocMembers() { - /*varCnt=funcCnt=enumCnt=enumValCnt=typeCnt=protoCnt=defCnt=friendCnt=0;*/ - m_count=0; - MemberDef *md=first(); - while (md) + if (m_numDocMembers!=-1) return; // used cached value + m_numDocMembers=0; + QListIterator<MemberDef> mli(*this); + MemberDef *md; + for (mli.toFirst();(md=mli.current());++mli) { - //printf("%s MemberList::countDocMembers() details=%d\n", - // md->name().data(),md->detailsAreVisible()); - bool visibleIfStatic = - !(md->getClassDef()==0 && md->isStatic() && !Config_getBool("EXTRACT_STATIC")); - - bool inOwnGroup = (md->getGroupDef()!=0 && !listOfGroup); - - if (visibleIfStatic && !inOwnGroup && - (Config_getBool("EXTRACT_ALL") || md->detailsAreVisible()) - ) + if (md->isDetailedSectionVisible(m_inGroup)) + { + // do not count enum values, since they do not produce entries of their own + if (md->memberType()!=MemberDef::EnumValue) m_numDocMembers++; + } + } + if (memberGroupList) + { + MemberGroupListIterator mgli(*memberGroupList); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) { - if (md->memberType()!=MemberDef::EnumValue) m_count++; + mg->countDecMembers(); + m_numDocMembers+=mg->numDocMembers(); } - md=next(); } + //printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList); } bool MemberList::insert(uint index,const MemberDef *md) @@ -157,183 +162,88 @@ MemberListIterator::MemberListIterator(const QList<MemberDef> &l) : } void MemberList::writePlainDeclarations(OutputList &ol, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup,bool countSubGroups + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd ) { - bool sectionPerType = !inGroup && (fd || nd || gd); //printf("----- writePlainDeclaration() ----\n"); - countDecMembers(inGroup,countSubGroups,sectionPerType); - if (totalCount()==0) return; // no members in this list + countDecMembers(/*inGroup,countSubGroups,sectionPerType*/); + if (numDecMembers()==0) return; // no members in this list //printf("----> writePlainDeclaration() inGroup=%d totalCount()=%d\n",inGroup,totalCount()); ol.pushGeneratorState(); - //int prevGroupId = -1; - if (!sectionPerType) ol.startMemberList(); + ol.startMemberList(); MemberDef *md; - - if (defineCount()>0) - { - if (sectionPerType) - { - ol.startMemberHeader(); - parseText(ol,theTranslator->trDefines()); - ol.endMemberHeader(); - ol.startMemberList(); - } - MemberListIterator mli(*this); - for ( ; (md=mli.current()); ++mli ) - { - //printf("md->isDefined()=%d inGroup=%d md->getMemberGroup()=%p\n", - // md->isDefine(),inGroup,md->getMemberGroup()); - if (md->isDefine() && - (md->argsString() || md->hasDocumentation() || - !md->initializer().isEmpty() || - Config_getBool("EXTRACT_ALL")) && - inGroup==md->visibleMemberGroup(sectionPerType) - ) - { - md->writeDeclaration(ol,cd,nd,fd,gd,inGroup); - } - } - if (sectionPerType) - { - ol.endMemberList(); - } - } - - if (protoCount()>0) - { - //printf("There are %d prototypes\n",protoCount()); - if (sectionPerType) - { - ol.startMemberHeader(); - parseText(ol,theTranslator->trFuncProtos()); - ol.endMemberHeader(); - ol.startMemberList(); - } - MemberListIterator mli(*this); - for ( ; (md=mli.current()); ++mli ) - { - if (md->isPrototype() && inGroup==md->visibleMemberGroup(sectionPerType)) - { - md->writeDeclaration(ol,cd,nd,fd,gd,inGroup); - } - } - if (sectionPerType) - { - ol.endMemberList(); - } - } - - if (typedefCount()>0) - { - //printf("There are %d typedefs\n",typedefCount()); - if (sectionPerType) - { - ol.startMemberHeader(); - parseText(ol,theTranslator->trTypedefs()); - ol.endMemberHeader(); - //ol.writeMemberHeader("Typedefs"); - ol.startMemberList(); - } - MemberListIterator mli(*this); - for ( ; (md=mli.current()) ; ++mli ) - { - if (md->isTypedef() && inGroup==md->visibleMemberGroup(sectionPerType)) - { - md->writeDeclaration(ol,cd,nd,fd,gd,inGroup); - } - } - if (sectionPerType) ol.endMemberList(); - } - - // write enums - if (enumCount()>0) + MemberListIterator mli(*this); + for ( ; (md=mli.current()); ++mli ) { - //printf("There are %d enums\n",enumCount()); - if (sectionPerType) + //printf(">>> Member `%s' type=%d\n",md->name().data(),md->memberType()); + switch(md->memberType()) { - ol.startMemberHeader(); - parseText(ol,theTranslator->trEnumerations()); - ol.endMemberHeader(); - ol.startMemberList(); - } - MemberListIterator mli(*this); - for ( ; (md=mli.current()) ; ++mli ) // iterate through the members - { - // see if member is hidden by protection - if (md->protection()==Private && !Config_getBool("EXTRACT_PRIVATE")) continue; - - QCString type=md->typeString(); - type=type.stripWhiteSpace(); // TODO: is this really needed? - - // filter out enums that are in a group iff inGroup holds - if (md->isEnumerate() && inGroup==md->visibleMemberGroup(sectionPerType) /*&& (hasDocs || !Config_getBool("HIDE_UNDOC_MEMBERS"))*/) + case MemberDef::Define: // fall through + case MemberDef::Prototype: // fall through + case MemberDef::Typedef: // fall through + case MemberDef::Variable: // fall through + case MemberDef::Function: // fall through + case MemberDef::Signal: // fall through + case MemberDef::Slot: // fall through + case MemberDef::DCOP: // fall through + case MemberDef::Property: + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup); + break; + case MemberDef::Enumeration: { - // filter out invisible enums - if ( !Config_getBool("HIDE_UNDOC_MEMBERS") || // do not hide undocumented members or - !md->documentation().isEmpty() || // member has detailed descr. or - md->hasDocumentedEnumValues() || // member has documented enum vales. - ( - !md->briefDescription().isEmpty() && - Config_getBool("BRIEF_MEMBER_DESC") // brief descr. is shown or - ) - ) + OutputList typeDecl(&ol); + QCString name(md->name()); + int i=name.findRev("::"); + if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) + if (name[0]!='@') // not an anonymous enum { - OutputList typeDecl(&ol); - QCString name=md->name().copy(); - int i=name.findRev("::"); - if (i!=-1) name=name.right(name.length()-i-2); // strip scope - if (name[0]!='@') // not an anonymous enum + if (md->isLinkableInProject() || md->hasDocumentedEnumValues()) { - if (md->isLinkableInProject() || md->hasDocumentedEnumValues()) - { - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <member kind=\"enumeration\">" << endl; - Doxygen::tagFile << " <name>" << convertToXML(md->name()) << "</name>" << endl; - Doxygen::tagFile << " <anchor>" << convertToXML(md->anchor()) << "</anchor>" << endl; - Doxygen::tagFile << " <arglist>" << convertToXML(md->argsString()) << "</arglist>" << endl; - Doxygen::tagFile << " </member>" << endl; - } - md->writeLink(typeDecl,cd,nd,fd,gd); - } - else + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { - typeDecl.startBold(); - typeDecl.docify(name); - typeDecl.endBold(); + Doxygen::tagFile << " <member kind=\"enumeration\">" << endl; + Doxygen::tagFile << " <name>" << convertToXML(md->name()) << "</name>" << endl; + Doxygen::tagFile << " <anchor>" << convertToXML(md->anchor()) << "</anchor>" << endl; + Doxygen::tagFile << " <arglist>" << convertToXML(md->argsString()) << "</arglist>" << endl; + Doxygen::tagFile << " </member>" << endl; } - typeDecl.writeChar(' '); + md->writeLink(typeDecl,cd,nd,fd,gd); + } + else + { + typeDecl.startBold(); + typeDecl.docify(name); + typeDecl.endBold(); } + typeDecl.writeChar(' '); + } + + int enumMemCount=0; - int enumMemCount=0; - - uint enumValuesPerLine = - (uint)Config_getInt("ENUM_VALUES_PER_LINE"); - typeDecl.docify("{ "); - QList<MemberDef> *fmdl=md->enumFieldList(); - if (fmdl) + uint enumValuesPerLine = (uint)Config_getInt("ENUM_VALUES_PER_LINE"); + typeDecl.docify("{ "); + QList<MemberDef> *fmdl=md->enumFieldList(); + if (fmdl) + { + MemberDef *fmd=fmdl->first(); + while (fmd) { - MemberDef *fmd=fmdl->first(); - while (fmd) + /* in html we start a new line after a number of items */ + if (fmdl->count()>enumValuesPerLine + && (enumMemCount%enumValuesPerLine)==0 + ) { - /* in html we start a new line after a number of items */ - if (fmdl->count()>enumValuesPerLine - && (enumMemCount%enumValuesPerLine)==0 - ) - { - typeDecl.pushGeneratorState(); - typeDecl.disableAllBut(OutputGenerator::Html); - typeDecl.lineBreak(); - typeDecl.writeString(" "); - typeDecl.popGeneratorState(); - } + typeDecl.pushGeneratorState(); + typeDecl.disableAllBut(OutputGenerator::Html); + typeDecl.lineBreak(); + typeDecl.writeString(" "); + typeDecl.popGeneratorState(); + } - if (fmd->hasDocumentation()) // enum value has docs - { + if (fmd->hasDocumentation()) // enum value has docs + { if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { Doxygen::tagFile << " <member kind=\"enumvalue\">" << endl; @@ -342,130 +252,95 @@ void MemberList::writePlainDeclarations(OutputList &ol, Doxygen::tagFile << " <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl; Doxygen::tagFile << " </member>" << endl; } - fmd->writeLink(typeDecl,cd,nd,fd,gd); - } - else // no docs for this enum value - { - typeDecl.startBold(); - typeDecl.docify(fmd->name()); - typeDecl.endBold(); - } - if (!fmd->initializer().isEmpty()) // enum value has initializer - { - typeDecl.writeString(" = "); - parseText(typeDecl,fmd->initializer()); - } - - fmd=fmdl->next(); - if (fmd) typeDecl.writeString(", "); - typeDecl.disable(OutputGenerator::Man); - typeDecl.writeString("\n"); // to prevent too long lines in LaTeX - typeDecl.enable(OutputGenerator::Man); - enumMemCount++; + fmd->writeLink(typeDecl,cd,nd,fd,gd); } - if (fmdl->count()>enumValuesPerLine) + else // no docs for this enum value { - typeDecl.pushGeneratorState(); - typeDecl.disableAllBut(OutputGenerator::Html); - typeDecl.lineBreak(); - typeDecl.popGeneratorState(); + typeDecl.startBold(); + typeDecl.docify(fmd->name()); + typeDecl.endBold(); } + if (!fmd->initializer().isEmpty()) // enum value has initializer + { + typeDecl.writeString(" = "); + parseText(typeDecl,fmd->initializer()); + } + + fmd=fmdl->next(); + if (fmd) typeDecl.writeString(", "); + typeDecl.disable(OutputGenerator::Man); + typeDecl.writeString("\n"); // to prevent too long lines in LaTeX + typeDecl.enable(OutputGenerator::Man); + enumMemCount++; + } + if (fmdl->count()>enumValuesPerLine) + { + typeDecl.pushGeneratorState(); + typeDecl.disableAllBut(OutputGenerator::Html); + typeDecl.lineBreak(); + typeDecl.popGeneratorState(); } - typeDecl.docify(" }"); - md->setEnumDecl(typeDecl); - int enumVars=0; - MemberListIterator vmli(*this); - MemberDef *vmd; - if (name[0]=='@') // anonymous enum => append variables + } + typeDecl.docify(" }"); + md->setEnumDecl(typeDecl); + int enumVars=0; + MemberListIterator vmli(*this); + MemberDef *vmd; + if (name[0]=='@') // anonymous enum => append variables + { + for ( ; (vmd=vmli.current()) ; ++vmli) { - for ( ; (vmd=vmli.current()) ; ++vmli) + QCString vtype=vmd->typeString(); + if ((vtype.find(name))!=-1) { - QCString vtype=vmd->typeString(); - if ((vtype.find(name))!=-1) - { - enumVars++; - vmd->setAnonymousEnumType(md); - } + enumVars++; + vmd->setAnonymousEnumType(md); } } - // if this is an annoymous enum and there are variable of this - // enum type (i.e. enumVars>0), then we do not show the enum here. - if (enumVars==0) // show enum here + } + // if this is an anoymous enum and there are variable of this + // enum type (i.e. enumVars>0), then we do not show the enum here. + if (enumVars==0) // show enum here + { + ol.startMemberItem(0); + ol.writeString("enum "); + ol.insertMemberAlign(); + ol+=typeDecl; // append the enum values. + ol.endMemberItem(FALSE); + if (!md->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { - ol.startMemberItem(0); - ol.writeString("enum "); - ol.insertMemberAlign(); - ol+=typeDecl; // append the enum values. - ol.endMemberItem(FALSE); - if (!md->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + ol.startMemberDescription(); + parseDoc(ol, + md->getDefFileName(),md->getDefLine(), + cd?cd->name().data():0,md->name().data(), + md->briefDescription() + ); + if (!md->documentation().isEmpty() || md->hasDocumentedEnumValues()) { - ol.startMemberDescription(); - parseDoc(ol, - md->getDefFileName(),md->getDefLine(), - cd?cd->name().data():0,md->name().data(), - md->briefDescription() - ); - if (!md->documentation().isEmpty() || md->hasDocumentedEnumValues()) - { - ol.disableAllBut(OutputGenerator::Html); - ol.endEmphasis(); - ol.docify(" "); - ol.startTextLink(0,md->anchor()); - parseText(ol,theTranslator->trMore()); - ol.endTextLink(); - ol.startEmphasis(); - ol.enableAll(); - } - ol.endMemberDescription(); + ol.disableAllBut(OutputGenerator::Html); + ol.endEmphasis(); + ol.docify(" "); + ol.startTextLink(0,md->anchor()); + parseText(ol,theTranslator->trMore()); + ol.endTextLink(); + ol.startEmphasis(); + ol.enableAll(); } + ol.endMemberDescription(); } - md->warnIfUndocumented(); } - } // md->isEnumerate() - } // enum loop - if (sectionPerType) ol.endMemberList(); - } // write enums - - // write functions - if (funcCount()>0) - { - //printf("There are %d functions\n",funcCount()); - if (sectionPerType) - { - ol.startMemberHeader(); - parseText(ol,theTranslator->trFunctions()); - ol.endMemberHeader(); - ol.startMemberList(); - } - MemberListIterator mli(*this); - for ( ; (md=mli.current()) ; ++mli ) - { - if ( - ( md->isFunction() || md->isSignal() || md->isSlot() || md->isDCOP()) && - ( !md->isRelated() || md->getClassDef() ) && - inGroup==md->visibleMemberGroup(sectionPerType) - ) - { - md->writeDeclaration(ol,cd,nd,fd,gd,inGroup); + md->warnIfUndocumented(); + break; } - } - if (sectionPerType) ol.endMemberList(); - } - - if (friendCount()>0) - { - //printf("There are %d friends\n",friendCount()); - MemberListIterator mli(*this); - for ( ; (md=mli.current()) ; ++mli ) - { - if (md->isFriend() && inGroup==md->visibleMemberGroup(sectionPerType)) + case MemberDef::Friend: { + //printf("Writing friend `%s'\n",md->name().data()); QCString type=md->typeString(); //printf("Friend: type=%s name=%s\n",type.data(),md->name().data()); bool isFriendClass = type=="friend class"; if (!isFriendClass) { - md->writeDeclaration(ol,cd,nd,fd,gd,inGroup); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup); } else // isFriendClass // friend is undocumented as a member but it is a class, @@ -499,52 +374,31 @@ void MemberList::writePlainDeclarations(OutputList &ol, ol.endMemberItem(FALSE); } } + break; } + case MemberDef::EnumValue: + break; } } - // write variables - if (varCount()>0) - { - //printf("There are %d variables\n",varCount()); - if (sectionPerType) - { - ol.startMemberHeader(); - parseText(ol,theTranslator->trVariables()); - ol.endMemberHeader(); - ol.startMemberList(); - } - MemberListIterator mli(*this); - for ( ; (md=mli.current()) ; ++mli ) - { - if ((md->isVariable() || md->isProperty()) && - inGroup==md->visibleMemberGroup(sectionPerType)) - { - md->writeDeclaration(ol,cd,nd,fd,gd,inGroup); - } - } - if (sectionPerType) ol.endMemberList(); - } - - // handle members that are inside annonymous compounds and for which - // no variables of the annonymous compound type exist. + // handle members that are inside anonymous compounds and for which + // no variables of the anonymous compound type exist. if (cd) { MemberListIterator mli(*this); for ( ; (md=mli.current()) ; ++mli ) { - if (md->fromAnnonymousScope() && !md->annonymousDeclShown() - && inGroup==md->visibleMemberGroup(sectionPerType)) + if (md->fromAnonymousScope() && !md->anonymousDeclShown()) { - //printf("annonymous compound members\n"); - md->setFromAnnonymousScope(FALSE); - md->writeDeclaration(ol,cd,nd,fd,gd,inGroup); - md->setFromAnnonymousScope(TRUE); + //printf("anonymous compound members\n"); + md->setFromAnonymousScope(FALSE); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup); + md->setFromAnonymousScope(TRUE); } } } - if (!sectionPerType) { ol.endMemberList(); /*ol.writeChar('\n');*/ } + ol.endMemberList(); ol.popGeneratorState(); //printf("----- end writePlainDeclaration() ----\n"); @@ -552,24 +406,13 @@ void MemberList::writePlainDeclarations(OutputList &ol, void MemberList::writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const char *title,const char *subtitle, - bool inGroup,bool countSubGroups) + const char *title,const char *subtitle + /*, bool inGroup,bool countSubGroups*/) { //printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')\n",title,subtitle); //printf("----- writeDeclaration() ----\n"); - bool sectionPerType = !inGroup && (fd || nd || gd); - countDecMembers(FALSE,countSubGroups,sectionPerType); // count member not in group - int normalMembers = totalCount(); - int ingroupMembers = 0; - //printf("Normal members %d\n",normalMembers); - if (inGroup) - { - countDecMembers(TRUE,countSubGroups,sectionPerType); // count member inside group - ingroupMembers = totalCount(); - } - int totalMembers = normalMembers + ingroupMembers; - //printf("Total members %d\n",totalMembers); - if (totalMembers==0) return; + countDecMembers(); // count member not in group + if (numDecMembers()==0) return; if (title) { ol.startMemberHeader(); @@ -580,15 +423,16 @@ void MemberList::writeDeclarations(OutputList &ol, { //printf("subtitle=`%s'\n",subtitle); ol.startMemberSubtitle(); - if (inGroup) + if (m_inGroup) parseDoc(ol,"<generated>",1,0,0,subtitle); else parseText(ol,subtitle); ol.endMemberSubtitle(); } - writePlainDeclarations(ol,cd,nd,fd,gd,inGroup,FALSE); + writePlainDeclarations(ol,cd,nd,fd,gd); + //printf("memberGroupList=%p\n",memberGroupList); if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); @@ -611,8 +455,8 @@ void MemberList::writeDeclarations(OutputList &ol, } ol.startMemberGroup(); mg->writePlainDeclarations(ol,cd,nd,fd,gd); - ++mgli; ol.endMemberGroup(hasHeader); + ++mgli; } } //printf("----- end writeDeclaration() ----\n"); @@ -620,13 +464,37 @@ void MemberList::writeDeclarations(OutputList &ol, } void MemberList::writeDocumentation(OutputList &ol, - const char *scopeName, Definition *container) + const char *scopeName, Definition *container, + const char *title) { + //printf("MemberList::writeDocumentation()\n"); + + countDocMembers(); + if (numDocMembers()==0) return; + + if (title) + { + ol.writeRuler(); + ol.startGroupHeader(); + parseText(ol,title); + ol.endGroupHeader(); + } + MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { - md->writeDocumentation(this,ol,scopeName,container); + md->writeDocumentation(this,ol,scopeName,container,m_inGroup); + } + if (memberGroupList) + { + //printf("MemberList::writeDocumentation() -- member groups\n"); + MemberGroupListIterator mgli(*memberGroupList); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeDocumentation(ol,scopeName,container); + } } } diff --git a/src/memberlist.h b/src/memberlist.h index 417abfd..9b8410f 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -33,36 +33,35 @@ class MemberList : public QList<MemberDef> void inSort(const MemberDef *md); void append(const MemberDef *md); int compareItems(GCI item1,GCI item2); - int varCount() const { return varCnt; } - int funcCount() const { return funcCnt; } - int enumCount() const { return enumCnt; } - int enumValueCount() const { return enumValCnt; } - int typedefCount() const { return typeCnt; } - int protoCount() const { return protoCnt; } - int defineCount() const { return defCnt; } - int friendCount() const { return friendCnt; } - void countDecMembers(bool inGroup,bool countSubGroups,bool sectionPerType); - void countDocMembers(bool listOfGroup=FALSE); - int totalCount() const - { return //varCnt+funcCnt+enumCnt+enumValCnt+typeCnt+ - //protoCnt+defCnt+friendCnt; - m_count; - } + int varCount() const { ASSERT(m_numDecMembers!=-1); return m_varCnt; } + int funcCount() const { ASSERT(m_numDecMembers!=-1); return m_funcCnt; } + int enumCount() const { ASSERT(m_numDecMembers!=-1); return m_enumCnt; } + int enumValueCount() const { ASSERT(m_numDecMembers!=-1); return m_enumValCnt; } + int typedefCount() const { ASSERT(m_numDecMembers!=-1); return m_typeCnt; } + int protoCount() const { ASSERT(m_numDecMembers!=-1); return m_protoCnt; } + int defineCount() const { ASSERT(m_numDecMembers!=-1); return m_defCnt; } + int friendCount() const { ASSERT(m_numDecMembers!=-1); return m_friendCnt; } + int numDecMembers() const { ASSERT(m_numDecMembers!=-1); return m_numDecMembers; } + int numDocMembers() const { ASSERT(m_numDocMembers!=-1); return m_numDocMembers; } + void countDecMembers(/*bool inGroup,bool countSubGroups,bool sectionPerType*/); + void countDocMembers(); void writePlainDeclarations(OutputList &ol, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup=FALSE,bool countSubGroups=TRUE); + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); void writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const char *title,const char *subtitle, - bool inGroup=FALSE,bool countSubGroups=TRUE); + const char *title,const char *subtitle); void writeDocumentation(OutputList &ol,const char *scopeName, - Definition *container); + Definition *container,const char *title); void addMemberGroup(MemberGroup *mg); + void setInGroup(bool group) { m_inGroup=group; } private: - int varCnt,funcCnt,enumCnt,enumValCnt,typeCnt,protoCnt,defCnt,friendCnt; - int m_count; + int m_varCnt,m_funcCnt,m_enumCnt,m_enumValCnt,m_typeCnt; + int m_protoCnt,m_defCnt,m_friendCnt; + int m_numDecMembers; // number of members in the brief part of the memberlist + int m_numDocMembers; // number of members in the detailed part of the memberlist MemberGroupList *memberGroupList; + bool m_inGroup; // is this list part of a group }; class MemberListIterator : public QListIterator<MemberDef> diff --git a/src/message.cpp b/src/message.cpp index 5c9e783..285f1c3 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -85,6 +85,10 @@ void initWarningFormat() { warnFile = fopen(Config_getString("WARN_LOGFILE"),"w"); } + if (!warnFile) // point it to something valid, because warn() relies on it + { + warnFile = stderr; + } } diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index b214de6..efcd10f 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -87,6 +87,7 @@ void NamespaceDef::insertClass(ClassDef *cd) } } +#if 0 void NamespaceDef::addMemberListToGroup(MemberList *ml, bool (MemberDef::*func)() const) { @@ -114,14 +115,16 @@ void NamespaceDef::addMemberListToGroup(MemberList *ml, } } } +#endif void NamespaceDef::addMembersToMemberGroup() { - addMemberListToGroup(&allMemberList,&MemberDef::isTypedef); - addMemberListToGroup(&allMemberList,&MemberDef::isEnumerate); - addMemberListToGroup(&allMemberList,&MemberDef::isEnumValue); - addMemberListToGroup(&allMemberList,&MemberDef::isFunction); - addMemberListToGroup(&allMemberList,&MemberDef::isVariable); + ::addMembersToMemberGroup(&decDefineMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decProtoMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decTypedefMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decEnumMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decFuncMembers,memberGroupDict,memberGroupList); + ::addMembersToMemberGroup(&decVarMembers,memberGroupDict,memberGroupList); } void NamespaceDef::insertMember(MemberDef *md) @@ -131,49 +134,55 @@ void NamespaceDef::insertMember(MemberDef *md) switch(md->memberType()) { case MemberDef::Variable: + decVarMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - varMembers.inSort(md); + docVarMembers.inSort(md); else - varMembers.append(md); + docVarMembers.append(md); break; case MemberDef::Function: + decFuncMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - funcMembers.inSort(md); + docFuncMembers.inSort(md); else - funcMembers.append(md); + docFuncMembers.append(md); break; case MemberDef::Typedef: + decTypedefMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - typedefMembers.inSort(md); + docTypedefMembers.inSort(md); else - typedefMembers.append(md); + docTypedefMembers.append(md); break; case MemberDef::Enumeration: + decEnumMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - enumMembers.inSort(md); + docEnumMembers.inSort(md); else - enumMembers.append(md); + docEnumMembers.append(md); break; case MemberDef::EnumValue: - if (Config_getBool("SORT_MEMBER_DOCS")) - enumValMembers.inSort(md); - else - enumValMembers.append(md); break; case MemberDef::Prototype: + decProtoMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - protoMembers.inSort(md); + docProtoMembers.inSort(md); else - protoMembers.append(md); + docProtoMembers.append(md); break; case MemberDef::Define: + decDefineMembers.append(md); if (Config_getBool("SORT_MEMBER_DOCS")) - defineMembers.inSort(md); + docDefineMembers.inSort(md); else - defineMembers.append(md); + docDefineMembers.append(md); break; default: - err("NamespaceDef::insertMembers(): unexpected member inserted in namespace!\n"); + err("NamespaceDef::insertMembers(): " + "member `%s' with class scope `%s' inserted in namespace scope `%s'!\n", + md->name().data(), + md->getClassDef() ? md->getClassDef()->name().data() : "", + name().data()); } //addMemberToGroup(md,groupId); } @@ -238,7 +247,14 @@ void NamespaceDef::writeDocumentation(OutputList &ol) mg->writeDeclarations(ol,0,this,0,0); } - allMemberList.writeDeclarations(ol,0,this,0,0,0,0); + + //allMemberList.writeDeclarations(ol,0,this,0,0,0,0); + decDefineMembers.writeDeclarations(ol,0,this,0,0,theTranslator->trDefines(),0); + decProtoMembers.writeDeclarations(ol,0,this,0,0,theTranslator->trFuncProtos(),0); + decTypedefMembers.writeDeclarations(ol,0,this,0,0,theTranslator->trTypedefs(),0); + decEnumMembers.writeDeclarations(ol,0,this,0,0,theTranslator->trEnumerations(),0); + decFuncMembers.writeDeclarations(ol,0,this,0,0,theTranslator->trFunctions(),0); + decVarMembers.writeDeclarations(ol,0,this,0,0,theTranslator->trVariables(),0); ol.endMemberSections(); if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || @@ -273,76 +289,23 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ol.endTextBlock(); } - //memList->countDocMembers(); - defineMembers.countDocMembers(); - if ( defineMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trDefineDocumentation()); - ol.endGroupHeader(); - defineMembers.writeDocumentation(ol,name(),this); - } + docDefineMembers.writeDocumentation(ol,name(),this, + theTranslator->trDefineDocumentation()); - protoMembers.countDocMembers(); - if ( protoMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trFunctionPrototypeDocumentation()); - ol.endGroupHeader(); - protoMembers.writeDocumentation(ol,name(),this); - } + docProtoMembers.writeDocumentation(ol,name(),this, + theTranslator->trFunctionPrototypeDocumentation()); - typedefMembers.countDocMembers(); - if ( typedefMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trTypedefDocumentation()); - ol.endGroupHeader(); - typedefMembers.writeDocumentation(ol,name(),this); - } + docTypedefMembers.writeDocumentation(ol,name(),this, + theTranslator->trTypedefDocumentation()); - enumMembers.countDocMembers(); - if ( enumMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trEnumerationTypeDocumentation()); - ol.endGroupHeader(); - enumMembers.writeDocumentation(ol,name(),this); - } + docEnumMembers.writeDocumentation(ol,name(),this, + theTranslator->trEnumerationTypeDocumentation()); - //enumValMembers.countDocMembers(); - //if ( enumValMembers.totalCount()>0 ) - //{ - // ol.writeRuler(); - // ol.startGroupHeader(); - // parseText(ol,theTranslator->trEnumerationValueDocumentation()); - // ol.endGroupHeader(); - // enumValMembers.writeDocumentation(ol,name()); - //} - - funcMembers.countDocMembers(); - if ( funcMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trFunctionDocumentation()); - ol.endGroupHeader(); - funcMembers.writeDocumentation(ol,name(),this); - } + docFuncMembers.writeDocumentation(ol,name(),this, + theTranslator->trFunctionDocumentation()); - varMembers.countDocMembers(); - if ( varMembers.totalCount()>0 ) - { - ol.writeRuler(); - ol.startGroupHeader(); - parseText(ol,theTranslator->trVariableDocumentation()); - ol.endGroupHeader(); - varMembers.writeDocumentation(ol,name(),this); - } + docVarMembers.writeDocumentation(ol,name(),this, + theTranslator->trVariableDocumentation()); // write Author section (Man only) ol.pushGeneratorState(); @@ -365,7 +328,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) int NamespaceDef::countMembers() { allMemberList.countDocMembers(); - return allMemberList.totalCount()+classList->count(); + return allMemberList.numDocMembers()+classList->count(); } void NamespaceDef::addUsingDirective(NamespaceDef *nd) diff --git a/src/namespacedef.h b/src/namespacedef.h index 0e1d089..08a8701 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -66,8 +66,8 @@ class NamespaceDef : public Definition void addMembersToMemberGroup(); void distributeMemberGroupDocumentation(); - protected: - void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const); + //protected: + // void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const); private: //QCString reference; @@ -79,13 +79,23 @@ class NamespaceDef : public Definition ClassList *usingDeclList; MemberList allMemberList; - MemberList defineMembers; - MemberList protoMembers; - MemberList typedefMembers; - MemberList enumMembers; - MemberList enumValMembers; - MemberList funcMembers; - MemberList varMembers; + + // members in the declaration part of the documentation + MemberList decDefineMembers; + MemberList decProtoMembers; + MemberList decTypedefMembers; + MemberList decEnumMembers; + MemberList decFuncMembers; + MemberList decVarMembers; + + // members in the documentation part of the documentation + MemberList docAllMemberList; + MemberList docDefineMembers; + MemberList docProtoMembers; + MemberList docTypedefMembers; + MemberList docEnumMembers; + MemberList docFuncMembers; + MemberList docVarMembers; /* user defined member groups */ MemberGroupList *memberGroupList; diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 82f3396..be3b676 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -742,13 +742,17 @@ void RTFGenerator::beginRTFDocument() /* all the included RTF files should begin with the * same header */ - t <<"{\\rtf1\\ansi\\ansicpg1252\\uc1 \\deff0\\deflang1033\\deflangfe1033\n"; + t <<"{\\rtf1\\ansi\\ansicpg" << theTranslator->trRTFansicp(); + t <<"\\uc1 \\deff0\\deflang1033\\deflangfe1033\n"; DBG_RTF(t <<"{\\comment Begining font list}\n") t <<"{\\fonttbl "; - t <<"{\\f0\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\n"; - t <<"{\\f1\\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\n"; - t <<"{\\f2\\fmodern\\fcharset0\\fprq1{\\*\\panose 02070309020205020404}Courier New;}\n"; + t <<"{\\f0\\froman\\fcharset" << theTranslator->trRTFCharSet(); + t <<"\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\n"; + t <<"{\\f1\\fswiss\\fcharset" << theTranslator->trRTFCharSet(); + t <<"\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\n"; + t <<"{\\f2\\fmodern\\fcharset" << theTranslator->trRTFCharSet(); + t <<"\\fprq1{\\*\\panose 02070309020205020404}Courier New;}\n"; t <<"{\\f3\\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol;}\n"; t <<"}\n"; DBG_RTF(t <<"{\\comment begin colors}\n") @@ -1332,9 +1336,9 @@ void RTFGenerator::endIndexSection(IndexSections is) case isEndIndex: beginRTFChapter(); t << Rtf_Style["Heading1"]->reference; - t << "Index\\par "<< endl; + t << theTranslator->trRTFGeneralIndex() << "\\par "<< endl; t << Rtf_Style_Reset << endl; - t << "{\\tc \\v Index}" << endl; + t << "{\\tc \\v " << theTranslator->trRTFGeneralIndex() << "}" << endl; t << "{\\field\\fldedit {\\*\\fldinst INDEX \\\\c2 \\\\*MERGEFORMAT}{\\fldrslt INDEX}}\n"; break; diff --git a/src/scanner.l b/src/scanner.l index cf35630..2a38b43 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -1248,7 +1248,7 @@ TITLE [tT][iI][tT][lL][eE] BEGIN(AfterDoc); } } -<FindMembers,FindFields>"//"([!*]?){B}*{CMD}"{"|"/*"([!*]?){B}*{CMD}"{" { +<FindMembers,FindFields>"//"([!/]?){B}*{CMD}"{"|"/*"([!*]?){B}*{CMD}"{" { startGroup(); tmpDocType=-1; if (current_root->section & Entry::SCOPE_MASK) @@ -1267,7 +1267,7 @@ TITLE [tT][iI][tT][lL][eE] BEGIN( Doc ); } } -<FindMembers,FindFields,ReadInitializer>"//"([!*]?){B}*{CMD}"}"|"/*"([!*]?){B}*{CMD}"}"{B}*"*/" { +<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}"|"/*"([!*]?){B}*{CMD}"}"{B}*"*/" { endGroup(); } <FindMembers>"=" { @@ -1687,6 +1687,15 @@ TITLE [tT][iI][tT][lL][eE] varEntry->doc = current->doc.copy(); varEntry->brief = current->brief.copy(); varEntry->mGrpId = current->mGrpId; + + // deep copy group list + QListIterator<QCString> sli(*current->groups); + QCString *s; + for (;(s=sli.current());++sli) + { + varEntry->groups->append(new QCString(*s)); + } + //printf("Add: type=`%s',name=`%s',args=`%s'\n", // varEntry->type.data(),varEntry->name.data(),varEntry->args.data()); current_root->addSubEntry(varEntry); @@ -2313,7 +2322,6 @@ TITLE [tT][iI][tT][lL][eE] BEGIN( ClassVar ); } <ClassVar>{SCOPENAME}{BN}*/"(" { - err("Inside IDL = %d\n",insideIDL); if (insideIDL && strncmp(yytext,"switch",6)==0 && !isId(yytext[6])) { // Corba IDL style union @@ -3810,7 +3818,19 @@ static void parseCompounds(Entry *rt) mtype = Method; gstat = FALSE; virt = Normal; + + memberGroupId = NOGROUP; + + // rebuild compound's group context + QCString *s = ce->groups->first(); + if (s) + { + lastDefGroup=*s; + startGroup(); + } + current->mGrpId = memberGroupId = ce->mGrpId; + scanYYlex() ; delete current; current=0; ce->program.resize(0); diff --git a/src/translator.h b/src/translator.h index 9b6e413..d40e379 100644 --- a/src/translator.h +++ b/src/translator.h @@ -1276,6 +1276,24 @@ class Translator return "Bug List"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.? +////////////////////////////////////////////////////////////////////////// + /*! Used as ansicpg for RTF file */ + virtual QCString trRTFansicp() + { + return "1252"; + } + /*! Used as ansicpg for RTF fcharset */ + virtual QCString trRTFCharSet() + { + return "0"; + } + /*! Used as header RTF general index */ + virtual QCString trRTFGeneralIndex() + { + return "Index"; + } }; #endif diff --git a/src/translator_br.h b/src/translator_br.h index 4919737..ae8ed73 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -1,7 +1,4 @@ /****************************************************************************** - * - * - * * Copyright (C) 1997-2001 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its @@ -13,10 +10,9 @@ * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * - * The translation into Brasilian Portuguese was provided by + * Brazilian Portuguese version by * Fabio "FJTC" Jun Takada Chino <chino@grad.icmc.sc.usp.br> - * Based on the original translation to Portuguese provided by - * Rui Godinho Lopes <ruiglopes@yahoo.com> + * Version: 1.2.6.1 (2001/04/13) */ #ifndef TRANSLATOR_BR_H @@ -24,450 +20,557 @@ #include "translator.h" -/* -* I used the name brazilian in language.cpp. -*/ -class TranslatorBrazilianPortuguese : public Translator +class TranslatorBrazilian: public Translator { public: - QCString idLanguage() - { return "brazilian"; } + + // --- Language contol methods ------------------- + + /*! Used for identification of the language. May resemble + * the string returned by latexBabelPackage(), but it is not used + * for the same purpose. The identification should not be translated. + * It should be replaced by the name of the language in English + * (e.g. Czech, Japanese, Russian, etc.). It should be equal to + * the identification in language.h. + */ + virtual QCString idLanguage() + { + return "portuges"; + /* I'm not sure if it is correct. I did not found the documentation of BabelPackage*/ + } + + /*! Used to get the command(s) for the language support. This method + * was designed for languages which do not prefer babel package. + * If this methods returns empty string, then the latexBabelPackage() + * method is used to generate the command for using the babel package. + */ + virtual QCString latexLanguageSupportCommand() + { + return "Brazilian"; + } + /*! returns the name of the package that is included by LaTeX */ - QCString latexBabelPackage() - { return "portuguese_br"; } + virtual QCString latexBabelPackage() + { return ""; } + + /*! return the language charset. This will be used for the HTML output */ + virtual QCString idLanguageCharset() + { + return "iso-8859-1"; + } + + // --- Language translation methods ------------------- /*! used in the compound documentation before a list of related functions. */ - QCString trRelatedFunctions() - { return "FunГУes relacionadas"; } + virtual QCString trRelatedFunctions() + { return "FunГУes Relacionadas"; } /*! subscript for the related functions. */ - QCString trRelatedSubscript() - { return "(Note que nЦo sЦo funГУes membro)"; } + virtual QCString trRelatedSubscript() + { return "(Note que estes nЦo sЦo funГУes membros.)"; } /*! header that is put before the detailed description of files, classes and namespaces. */ - QCString trDetailedDescription() - { return "DescriГЦo"; } + virtual QCString trDetailedDescription() + { return "DescriГЦo Detalhada"; } /*! header that is put before the list of typedefs. */ - QCString trMemberTypedefDocumentation() - { return "Tipos definidos"; } + virtual QCString trMemberTypedefDocumentation() + { return "DefiniГУes de Tipos"; } /*! header that is put before the list of enumerations. */ - QCString trMemberEnumerationDocumentation() + virtual QCString trMemberEnumerationDocumentation() { return "EnumeraГУes"; } /*! header that is put before the list of member functions. */ - QCString trMemberFunctionDocumentation() + virtual QCString trMemberFunctionDocumentation() { return "MИtodos"; } /*! header that is put before the list of member attributes. */ - QCString trMemberDataDocumentation() - { return "Atributos"; } + virtual QCString trMemberDataDocumentation() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Campos e Atributos"; + } + else + { + return "Constantes"; + } + } /*! this is the text of a link put after brief descriptions. */ - QCString trMore() + virtual QCString trMore() { return "Mais..."; } /*! put in the class documentation */ - QCString trListOfAllMembers() - { return "Mostrar lista completa dos membros"; } + virtual QCString trListOfAllMembers() + { return "Lista de todos os Membros."; } /*! used as the title of the "list of all members" page of a class */ - QCString trMemberList() - { return "Lista dos membros"; } + virtual QCString trMemberList() + { return "Lista de Membros"; } /*! this is the first part of a sentence that is followed by a class name */ - QCString trThisIsTheListOfAllMembers() - { return "Esta И a lista de todos os membros de "; } + virtual QCString trThisIsTheListOfAllMembers() + { return "Esta И a lista completa dos membros da "; } /*! this is the remainder of the sentence after the class name */ - QCString trIncludingInheritedMembers() - { return ", incluindo os membros herdados."; } + virtual QCString trIncludingInheritedMembers() + { return ", incluindo todos os membros herdados."; } /*! 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) + virtual QCString trGeneratedAutomatically(const char *s) { QCString result="Gerado automaticamente por Doxygen"; if (s) result+=(QCString)" para "+s; - result+=" a partir do cСdigo fonte."; + result+=" a partir do cСdigo-fonte."; return result; } /*! put after an enum name in the list of all members */ - QCString trEnumName() - { return "enumeraГЦo"; } + virtual QCString trEnumName() + { return "Nome da enumeraГЦo"; } /*! put after an enum value in the list of all members */ - QCString trEnumValue() - { return "valor enumerado"; } + virtual QCString trEnumValue() + { return "Valor enumerado"; } /*! put after an undocumented member in the list of all members */ - QCString trDefinedIn() - { return "definido em"; } + virtual QCString trDefinedIn() + { return "definida em"; } /*! put as in introduction in the verbatim header file of a class. * parameter f is the name of the include file. */ - QCString trIncludeFile() - { return "Arquivo incluМdo"; } - QCString trVerbatimText(const char *f) - { return (QCString)"Este texto foi originado pelo arquivo incluМdo "+f+"."; } + virtual QCString trVerbatimText(const char *f) + { return (QCString)"Este И o texto original do arquivo "+f+"."; } // quick reference sections /*! This is put above each page as a link to the list of all groups of - * compounds or files (see the \group command). + * compounds or files (see the \\group command). */ - QCString trModules() - { return "MСdulos"; } + virtual QCString trModules() + { return "Modulos"; } /*! This is put above each page as a link to the class hierarchy */ - QCString trClassHierarchy() - { return "Hierarquia de classes"; } + virtual QCString trClassHierarchy() + { return "Hierarquia de Classes"; } /*! This is put above each page as a link to the list of annotated classes */ - QCString trCompoundList() - { return "Lista de componentes"; + virtual QCString trCompoundList() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Estrutura de Dados"; + } + else + { + return "Lista de Componentes"; + } + } - /*! This is put above each page as a link to the list of documented files */} - QCString trFileList() - { return "Lista de arquivos"; } + /*! This is put above each page as a link to the list of documented files */ + virtual QCString trFileList() + { return "Lista de Arquivos"; } /*! This is put above each page as a link to the list of all verbatim headers */ - QCString trHeaderFiles() - { return "Arquivos IncluМdos"; } + virtual QCString trHeaderFiles() + { return "Arquivos de CabeГalho (Headers)"; } /*! This is put above each page as a link to all members of compounds. */ - QCString trCompoundMembers() - { return "Componentes"; } + virtual QCString trCompoundMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Campos de Dados"; + } + else + { + return "Componentes Membros"; + } + } /*! This is put above each page as a link to all members of files. */ - QCString trFileMembers() - { return "DeclaraГУes"; } + virtual QCString trFileMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Globais"; + } + else + { + return "Arquivos Membros"; + } + } /*! This is put above each page as a link to all related pages. */ - QCString trRelatedPages() - { return "Paginas relacionadas"; } + virtual QCString trRelatedPages() + { return "PАginas relacionadas"; } /*! This is put above each page as a link to all examples. */ - QCString trExamples() + virtual QCString trExamples() { return "Exemplos"; } /*! This is put above each page as a link to the search engine. */ - QCString trSearch() - { return "Localizar"; } + virtual QCString trSearch() + { return "Busca"; } /*! This is an introduction to the class hierarchy. */ - QCString trClassHierarchyDescription() - { return "Esta lista de heranГas estА organizada, dentro do possМvel, por ordem alfabИtica:"; } + virtual QCString trClassHierarchyDescription() + { return "Esta lista de hierarquia И parcialmente ordenada em ordem alfabИtica:"; } /*! This is an introduction to the list with all files. */ - QCString trFileListDescription(bool extractAll) + virtual QCString trFileListDescription(bool extractAll) { - QCString result="Lista de todos os arquivos "; + QCString result="Aqui estА a lista de todos os arquivos "; if (!extractAll) result+="documentados "; - result+="com uma breve descriГЦo:"; + result+="com suas respectivas descriГУes:"; return result; } /*! This is an introduction to the annotated compound list. */ - QCString trCompoundListDescription() - { return "Lista de classes, estruturas, uniУes e interfaces com breves descriГУes:"; + virtual QCString trCompoundListDescription() + { + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Aqui estЦo as estruturas de dados e suas respectivas descriГУes:"; + } + else + { + return "Aqui estЦo as classes, estruturas, uniУes e interfaces e suas respectivas descriГУes:"; + } } /*! This is an introduction to the page with all class members. */ - QCString trCompoundMembersDescription(bool extractAll) + virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Lista de todos os membros "; + QCString result="Aqui estА a lista de todos os membros de classes "; if (!extractAll) result+="documentados "; result+="com links para "; - if (extractAll) result+="a documentaГЦo das respectivas classes:"; - else result+="o arquivo a que pertencem:"; + if (extractAll) + result+="a documentaГЦo de suas respectivas classes:"; + else + result+="suas respectivas classes:"; return result; } /*! This is an introduction to the page with all file members. */ - QCString trFileMembersDescription(bool extractAll) + virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="Lista de todos os membros "; - if (!extractAll) result+="documentados "; + QCString result="Aqui esta a lista de "; + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="tadas as funГУes, variАveis, definiГУes, enumeraГУes e definiГУes de tipos "; + if (!extractAll) result+="documentadas "; + } + else + { + result+="todos os membros dos arquivos "; + if (!extractAll) result+="documentados "; + } + + result+="com links para "; - if (extractAll) result+="a documentaГЦo correspondente:"; - else result+="os arquivos onde foram definidos:"; + if (extractAll) + result+="seus respectivos arquivos:"; + else + result+="suas respectivas documentaГУes:"; return result; } /*! This is an introduction to the page with the list of all header files. */ - QCString trHeaderFilesDescription() - { return "Lista de todos os arquivos cabeГalho que constituem a API:"; } + virtual QCString trHeaderFilesDescription() + { return "Aqui estЦo os arquivos de cabeГalho que compУe a API:"; } /*! This is an introduction to the page with the list of all examples */ - QCString trExamplesDescription() - { return "Lista de todos os exemplos:"; } + virtual QCString trExamplesDescription() + { return "Aqui estА a lista de todos os exemplos:"; } /*! This is an introduction to the page with the list of related pages */ - QCString trRelatedPagesDescription() - { return "Lista de documentaГЦo relacionada:"; } + virtual QCString trRelatedPagesDescription() + { return "Aqui estА a lista de toda a documentaГЦo relacionadas:"; } /*! This is an introduction to the page with the list of class/file groups */ - QCString trModulesDescription() - { return "Lista de todos os mСdulos:"; } + virtual QCString trModulesDescription() + { return "Aqui estА a lista de todos os mИdulos:"; } /*! This sentences is used in the annotated class/file lists if no brief * description is given. */ - QCString trNoDescriptionAvailable() - { return "Nenhuma descriГЦo disponМvel"; } + virtual QCString trNoDescriptionAvailable() + { return "Sem descriГЦodisponМvel"; } // index titles (the project name is prepended for these) /*! This is used in HTML as the title of index.html. */ - QCString trDocumentation() + virtual QCString trDocumentation() { return "DocumentaГЦo"; } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ - QCString trModuleIndex() - { return "мndice dos mСdulos"; } + virtual QCString trModuleIndex() + { return "мndice de MСdulos"; } /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ - QCString trHierarchicalIndex() - { return "мndice da hierarquia"; } + virtual QCString trHierarchicalIndex() + { return "мndice HierАrquico"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. */ - QCString trCompoundIndex() - { return "мndice dos componentes"; } + virtual QCString trCompoundIndex() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "мndice das Estruturas de Dados"; + } + else + { + return "мndice dos Componentes"; + } + } /*! This is used in LaTeX as the title of the chapter with the * list of all files. */ - QCString trFileIndex() - { return "мndice dos arquivos"; } + virtual QCString trFileIndex() + { return "мndice dos Arquivos"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all groups. */ - QCString trModuleDocumentation() - { return "DocumentaГЦo do mСdulo"; } + virtual QCString trModuleDocumentation() + { return "MСdulos"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. */ - QCString trClassDocumentation() - { return "DocumentaГЦo da classe"; } + virtual QCString trClassDocumentation() + { return "Classes"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all files. */ - QCString trFileDocumentation() - { return "DocumentaГЦo do arquivo"; } + virtual QCString trFileDocumentation() + { return "Arquivos"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all examples. */ - QCString trExampleDocumentation() - { return "DocumentaГЦo do exemplo"; } + virtual QCString trExampleDocumentation() + { return "Exemplos"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all related pages. */ - QCString trPageDocumentation() - { return "DocumentaГЦo da pАgina"; } + virtual QCString trPageDocumentation() + { return "DocumentaГЦo Relacionada"; } /*! This is used in LaTeX as the title of the document */ - QCString trReferenceManual() - { return "Manual de referЙncia"; } + virtual QCString trReferenceManual() + { return "Manual de ReferЙncia"; } /*! This is used in the documentation of a file as a header before the * list of defines */ - QCString trDefines() - { return "DefiniГЦo de macros"; } + virtual QCString trDefines() + { return "DefiniГУes e Macros"; } /*! This is used in the documentation of a file as a header before the * list of function prototypes */ - QCString trFuncProtos() - { return "ProtСtipos de funГУes"; } + virtual QCString trFuncProtos() + { return "ProtСtipos de FunГУes"; } /*! This is used in the documentation of a file as a header before the * list of typedefs */ - QCString trTypedefs() - { return "DefiniГУes de tipos"; } + virtual QCString trTypedefs() + { return "DefiniГУes de Tipos"; } /*! This is used in the documentation of a file as a header before the * list of enumerations */ - QCString trEnumerations() + virtual QCString trEnumerations() { return "EnumeraГУes"; } /*! This is used in the documentation of a file as a header before the * list of (global) functions */ - QCString trFunctions() + virtual QCString trFunctions() { return "FunГУes"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ - QCString trVariables() + virtual QCString trVariables() { return "VariАveis"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ - QCString trEnumerationValues() - { return "Valores da enumeraГЦo"; } + virtual QCString trEnumerationValues() + { return "Valores Enumerados"; } /*! This is used in man pages as the author section. */ - QCString trAuthor() + virtual QCString trAuthor() { return "Autor"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ - QCString trDefineDocumentation() - { return "Macros"; } + virtual QCString trDefineDocumentation() + { return "DeiniГУes e macros"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ - QCString trFunctionPrototypeDocumentation() - { return "ProtСtipos das funГУes"; } + virtual QCString trFunctionPrototypeDocumentation() + { return "ProtСtipos de funГУes"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ - QCString trTypedefDocumentation() - { return "Tipos"; } + virtual QCString trTypedefDocumentation() + { return "DefiniГУes de tipos"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ - QCString trEnumerationTypeDocumentation() + virtual QCString trEnumerationTypeDocumentation() { return "EnumeraГУes"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration values */ - QCString trEnumerationValueDocumentation() - { return "Elementos da enumeraГЦo"; } + virtual QCString trEnumerationValueDocumentation() + { return "Valores enumerados"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ - QCString trFunctionDocumentation() + virtual QCString trFunctionDocumentation() { return "FunГУes"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ - QCString trVariableDocumentation() + virtual QCString trVariableDocumentation() { return "VariАveis"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds */ - QCString trCompounds() - { return "Componentes"; } + virtual QCString trCompounds() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Estruturas de Dados"; + } + else + { + return "Componentes"; + } + } /*! This is used in the documentation of a group before the list of * links to documented files */ - QCString trFiles() + virtual QCString trFiles() { return "Arquivos"; } /*! 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) + virtual QCString trGeneratedAt(const char *date,const char *projName) { - QCString result=(QCString)"Criado em "+date; + QCString result=(QCString)"Gerado em "+date; if (projName) result+=(QCString)" para "+projName; result+=(QCString)" por"; return result; } /*! This is part of the sentence used in the standard footer of each page. */ - QCString trWrittenBy() + virtual QCString trWrittenBy() { return "escrito por"; } /*! this text is put before a class diagram */ - QCString trClassDiagram(const char *clName) + virtual QCString trClassDiagram(const char *clName) { - return (QCString)"Diagrama de heranГas da classe "+clName; + return (QCString)"Diagrama de Hierarquia para "+clName+":"; } - /*! this text is generated when the \internal command is used. */ - QCString trForInternalUseOnly() + /*! this text is generated when the \\internal command is used. */ + virtual QCString trForInternalUseOnly() { return "Apenas para uso interno."; } - /*! this text is generated when the \reimp command is used. */ - QCString trReimplementedForInternalReasons() - { return "Redefinido por razУes internas. A interface nЦo foi afetada."; - } + /*! this text is generated when the \\reimp command is used. */ + virtual QCString trReimplementedForInternalReasons() + { return "Reimplementado por razУes internas. A API nЦo foi modificada."; } - /*! this text is generated when the \warning command is used. */ - QCString trWarning() + /*! this text is generated when the \\warning command is used. */ + virtual QCString trWarning() { return "Aviso"; } - /*! this text is generated when the \bug command is used. */ - QCString trBugsAndLimitations() + /*! this text is generated when the \\bug command is used. */ + virtual QCString trBugsAndLimitations() { return "Bugs e limitaГУes"; } - /*! this text is generated when the \version command is used. */ - QCString trVersion() + /*! this text is generated when the \\version command is used. */ + virtual QCString trVersion() { return "VersЦo"; } - /*! this text is generated when the \date command is used. */ - QCString trDate() + /*! this text is generated when the \\date command is used. */ + virtual QCString trDate() { return "Data"; } - /*! this text is generated when the \author command is used. */ - QCString trAuthors() + /*! this text is generated when the \\author command is used. */ + virtual QCString trAuthors() { return "Autor(es)"; } - /*! this text is generated when the \return command is used. */ - QCString trReturns() + /*! this text is generated when the \\return command is used. */ + virtual QCString trReturns() { return "Retorna"; } - /*! this text is generated when the \sa command is used. */ - QCString trSeeAlso() + /*! this text is generated when the \\sa command is used. */ + virtual QCString trSeeAlso() { return "Veja tambИm"; } - /*! this text is generated when the \param command is used. */ - QCString trParameters() + /*! this text is generated when the \\param command is used. */ + virtual QCString trParameters() { return "ParБmetros"; } - /*! this text is generated when the \exception command is used. */ - QCString trExceptions() + /*! this text is generated when the \\exception command is used. */ + virtual QCString trExceptions() { return "ExceГУes"; } /*! this text is used in the title page of a LaTeX document. */ - QCString trGeneratedBy() - { return "Criado por"; } + virtual QCString trGeneratedBy() + { return "Gerado por"; } - // new since 0.49-990307 +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990307 +////////////////////////////////////////////////////////////////////////// + /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() - { return "Lista de namespaces"; } + { return "Lista de Namespaces"; } /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { - QCString result="Lista "; - if (!extractAll) result+="de toda a documentaГЦo "; - result+="dos namespaces com uma breve descriГЦo:"; + QCString result="Aqui esta a lista de todos os Namespaces "; + if (!extractAll) result+="documentados "; + result+="com suas respectivas descriГУes:"; return result; } @@ -485,7 +588,7 @@ class TranslatorBrazilianPortuguese : public Translator * related classes */ virtual QCString trRelatedFunctionDocumentation() - { return "FunГУes relacionadas e classes amigas"; } + { return "Amigos e FunГУes Relacionadas"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -496,19 +599,17 @@ class TranslatorBrazilianPortuguese : public Translator ClassDef::CompoundType compType, bool isTemplate) { - QCString result="Referencia "; + QCString result="ReferЙncia da"; + + if (isTemplate) result+=" Template de"; switch(compType) { - case ClassDef::Class: result+="Ю classe "; break; - case ClassDef::Struct: result+="Ю estrutura "; break; - case ClassDef::Union: result+="Ю uniЦo "; break; - case ClassDef::Interface: result+="Ю interface "; break; - case ClassDef::Exception: result+="Ю excepГЦo "; break; + case ClassDef::Class: result+=" Classe "; break; + case ClassDef::Struct: result+=" Estrutura "; break; + case ClassDef::Union: result+=" UniЦo "; break; + case ClassDef::Interface: result+=" Interface "; break; + case ClassDef::Exception: result+=" ExceГЦo "; break; } - - if (isTemplate) - result+="<template> "; - result+=(QCString)clName; return result; } @@ -516,7 +617,7 @@ class TranslatorBrazilianPortuguese : public Translator /*! used as the title of the HTML page of a file */ virtual QCString trFileReference(const char *fileName) { - QCString result= "Referencia ao arquivo "; + QCString result = "ReferЙncia do Arquivo "; result += fileName; return result; } @@ -524,7 +625,7 @@ class TranslatorBrazilianPortuguese : public Translator /*! used as the title of the HTML page of a namespace */ virtual QCString trNamespaceReference(const char *namespaceName) { - QCString result= "Referencia ao namespace "; + QCString result ="RefЙncia do Namespace "; result += namespaceName; return result; } @@ -533,25 +634,25 @@ class TranslatorBrazilianPortuguese : public Translator * these are for the member sections of a class, struct or union */ virtual QCString trPublicMembers() - { return "Membros pЗblicos"; } + { return "MИtodos PЗblicos"; } virtual QCString trPublicSlots() - { return "Slots pЗblicos"; } + { return "Slots PЗblicos"; } virtual QCString trSignals() - { return "Sinais"; } + { return "Signals"; } virtual QCString trStaticPublicMembers() - { return "Membros pЗblicos estАticos"; } + { return "MИtodos PЗblicos EstАticos"; } virtual QCString trProtectedMembers() - { return "Membros protegidos"; } + { return "MИtodos Protegidos"; } virtual QCString trProtectedSlots() - { return "Slots protegidos"; } + { return "Slots Protegidos"; } virtual QCString trStaticProtectedMembers() - { return "Membros protegidos estАticos"; } + { return "MИtodos Protegidos EstАticos"; } virtual QCString trPrivateMembers() - { return "Membros privados"; } + { return "MИtodos Privados"; } virtual QCString trPrivateSlots() - { return "Slots privados"; } + { return "Slots Privados"; } virtual QCString trStaticPrivateMembers() - { return "Membros privados estАticos"; } + { return "MИtodos Privados EstАticos"; } /*! \endmgroup */ /*! this function is used to produce a comma-separated list of items. @@ -573,7 +674,7 @@ class TranslatorBrazilianPortuguese : public Translator if (i<numEntries-2) // not the fore last entry result+=", "; else // the fore last entry - result+=", e "; + result+=" e "; } } return result; @@ -584,7 +685,7 @@ class TranslatorBrazilianPortuguese : public Translator */ virtual QCString trInheritsList(int numEntries) { - return "Derivada de "+trWriteList(numEntries)+"."; + return "Herdeiro de " + trWriteList(numEntries) + "."; } /*! used in class documentation to produce a list of super classes, @@ -592,7 +693,7 @@ class TranslatorBrazilianPortuguese : public Translator */ virtual QCString trInheritedByList(int numEntries) { - return "Herdado por "+trWriteList(numEntries)+"."; + return "Superclasse de "+trWriteList(numEntries)+"."; } /*! used in member documentation blocks to produce a list of @@ -613,25 +714,25 @@ class TranslatorBrazilianPortuguese : public Translator /*! This is put above each page as a link to all members of namespaces. */ virtual QCString trNamespaceMembers() - { return "Membros do namespace"; } + { return "Membros do Namespace"; } /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="Lista "; - if (extractAll) result+="de todos os "; - else result+="de toda a documentaГЦo dos "; - result+="membros do namespace com links para "; - if (extractAll) result+="a documentaГЦo de cada membro:"; - else result+="o namespace correspondente:"; + QCString result="Aqui estА a lista de todos os membros do Namespace "; + if (!extractAll) result+="documentados "; + result+="com links para "; + if (extractAll) + result+="a documentaГЦo de seus respectivos Namespaces:"; + else + result+="os seus respectivos namespaces:"; return result; } - - /*! This is used in LaTeX as the title of the chapter with the + /*! This is used in LaTeX as the title of the chapter with the * index of all namespaces. */ virtual QCString trNamespaceIndex() - { return "мndice dos namespaces"; } + { return "мndice de Namespaces"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all namespaces. @@ -660,18 +761,17 @@ class TranslatorBrazilianPortuguese : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"A documentaГЦo para "; + QCString result=(QCString)"A documentaГЦo para esta "; switch(compType) { - case ClassDef::Class: result+="esta classe"; break; - case ClassDef::Struct: result+="esta estrutura"; break; - case ClassDef::Union: result+="esta uniЦo"; break; - case ClassDef::Interface: result+="esta interface"; break; - case ClassDef::Exception: result+="esta exceГЦo"; break; + case ClassDef::Class: result+="classe "; break; + case ClassDef::Struct: result+="estrura "; break; + case ClassDef::Union: result+="uniЦo "; break; + case ClassDef::Interface: result+="interface "; break; + case ClassDef::Exception: result+="exceГЦo "; break; } result+=" foi gerada a partir "; - if (single) result+=" do seguinte arquivo:"; - else result+="dos seguintes arquivos:"; + if (single) result+="do seguinte arquivo:"; else result+="dos seguintes arquivos:"; return result; } @@ -679,10 +779,7 @@ class TranslatorBrazilianPortuguese : public Translator * list. */ virtual QCString trAlphabeticalList() - { - return "Lista em ordem alfabИtica"; - } - + { return "Lista AlfabИtica"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 @@ -690,18 +787,18 @@ class TranslatorBrazilianPortuguese : public Translator /*! This is used as the heading text for the retval command. */ virtual QCString trReturnValues() - { return "Valores retornados"; } + { return "Valores Retornados"; } /*! This is in the (quick) index as a link to the main page (index.html) */ virtual QCString trMainPage() - { return "PАgina principal"; } + { return "PАgina Principal"; } /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. */ virtual QCString trPageAbbreviation() - { return "p. "; } + { return "pag."; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-991003 @@ -713,11 +810,11 @@ class TranslatorBrazilianPortuguese : public Translator } virtual QCString trDefinedAtLineInSourceFile() { - return "Definido na linha @0 do arquivo @1."; + return "DefiniГЦo na linha @0 do arquivo @1."; } virtual QCString trDefinedInSourceFile() { - return "Definido no arquivo @0."; + return "DefiniГЦo no arquivo @0."; } ////////////////////////////////////////////////////////////////////////// @@ -726,7 +823,10 @@ class TranslatorBrazilianPortuguese : public Translator virtual QCString trDeprecated() { - return "Desaprovado"; + /* This note is for brazilians. + Esta И uma boa traduГЦo para "deprecated"? + */ + return "Descontinuada"; } ////////////////////////////////////////////////////////////////////////// @@ -741,42 +841,42 @@ class TranslatorBrazilianPortuguese : public Translator /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)"Diagrama de dependЙncias de inclusЦo para "+fName+":"; + return (QCString)"GrАfico de dependЙncia de inclusУes para "+fName+":"; } /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { - return "Construtores e Destrutores"; + return "Construtores & Destrutores"; } /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { - return "Ir para o cСdigo fonte deste arquivo."; + return "VА para o cСdigo-fonte deste arquivo."; } /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { - return "Ir para a documentaГЦo deste arquivo."; + return "VА para a documentaГЦo deste arquivo."; } /*! Text for the \pre command */ virtual QCString trPrecondition() { - return "PrecondiГЦo"; + return "PrИ-CondiГЦo"; } /*! Text for the \post command */ virtual QCString trPostcondition() { - return "PoscondiГЦo"; + return "PСs-CondiГЦo"; } /*! Text for the \invariant command */ virtual QCString trInvariant() { - return "Invariante"; + return "InvariАvel"; } /*! Text shown before a multi-line variable/enum initialization */ virtual QCString trInitialValue() { - return "Valor inicial:"; + return "Valor Inicial:"; } /*! Text used the source code in the file index */ virtual QCString trCode() @@ -785,25 +885,25 @@ class TranslatorBrazilianPortuguese : public Translator } virtual QCString trGraphicalHierarchy() { - return "RepresentaГЦo grАfica da hierarquia da classe"; + return "GrАfico de Hierarquia de Classes"; } virtual QCString trGotoGraphicalHierarchy() { - return "Ir para a representaГЦo grАfica da hierarquia da classe"; + return "VА para o GrАfico de Hierarquia de Classes"; } virtual QCString trGotoTextualHierarchy() { - return "Ir para a representaГЦo textual da hierarquia da classe"; + return "VА para a Hierarquia de Classes (texto)"; } virtual QCString trPageIndex() { - return "мndice da pАgina"; + return "мndice de PАgina"; } ////////////////////////////////////////////////////////////////////////// // new since 1.1.0 ////////////////////////////////////////////////////////////////////////// - + virtual QCString trNote() { return "Nota"; @@ -814,7 +914,14 @@ class TranslatorBrazilianPortuguese : public Translator } virtual QCString trPublicAttribs() { - return "Atributos PЗblicos"; + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Campos de Dados"; + } + else + { + return "Atributos PЗblicos"; + } } virtual QCString trStaticPublicAttribs() { @@ -852,12 +959,12 @@ class TranslatorBrazilianPortuguese : public Translator /*! Used as a marker that is put before a todo item */ virtual QCString trTodo() { - return "Tarefa"; + return "Tarefas Futuras"; } /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "Lista de tarefas"; + return "Lista de tarefas futuras"; } ////////////////////////////////////////////////////////////////////////// @@ -870,7 +977,7 @@ class TranslatorBrazilianPortuguese : public Translator } virtual QCString trRemarks() { - return "ObservaГУes"; + return "AnotaГУes"; } virtual QCString trAttention() { @@ -878,12 +985,193 @@ class TranslatorBrazilianPortuguese : public Translator } virtual QCString trInclByDepGraph() { - return "Este grАfico mostra quais sЦo os arquivos que incluem diretamente ou indiretamente este arquivo:"; + return "Este grafo mostra quais arquivos estЦo direta ou indiretamente " + "relacionados com este arquivo:"; } virtual QCString trSince() { return "Desde"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.1.5 +////////////////////////////////////////////////////////////////////////// + + /*! title of the graph legend page */ + virtual QCString trLegendTitle() + { + return "Legenda do Grafo"; + } + /*! page explaining how the dot graph's should be interpreted */ + virtual QCString trLegendDocs() + { + return + "Esta pАgina explica como interpretar os grafos gerados pelo doxygen.<p>\n" + "Considere o seguinte exemplo:\n" + "\\code\n" + "/*! Invisible class because of truncation */\n" + "class Invisible { };\n\n" + "/*! Truncated class, inheritance relation is hidden */\n" + "class Truncated : public Invisible { };\n\n" + "/* Class not documented with doxygen comments */\n" + "class Undocumented { };\n\n" + "/*! Class that is inherited using public inheritance */\n" + "class PublicBase : public Truncated { };\n\n" + "/*! Class that is inherited using protected inheritance */\n" + "class ProtectedBase { };\n\n" + "/*! Class that is inherited using private inheritance */\n" + "class PrivateBase { };\n\n" + "/*! Class that is used by the Inherited class */\n" + "class Used { };\n\n" + "/*! Super class that inherits a number of other classes */\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" + + "Se a tag \\c MAX_DOT_GRAPH_HEIGHT no arquivo de configuraГЦo tem o valor" + "200, o seguinte grАfo serА gerado:" + "<p><center><img src=\"graph_legend.gif\"></center>\n" + "<p>\n" + "As caixas no grafo acima tem as seguintes interpretaГУes:\n" + "<ul>\n" + "<li>Uma caixa inteiramente preta representa a estrutura ou a classe para qual " + "o grafo foi gerado.\n" + "<li>Uma caixa com bordas pretas denota uma estrutura ou classe documentada.\n" + "<li>Uma caixa com bordas cinzas denota uma estrutura ou classe nЦo documentada.\n" + + "<li>Uma caixa com bordas vermelhas denota uma estrutura ou classe documentada para\n" + "a qual nem todas as heranГas ou componentes sЦo mostradas no grafo. Um grafo И " + "truncado quando este И maior que o tamanho especificado." + "</ul>\n" + "As setas tem os seguintes significados:\n" + "<ul>\n" + "<li>Uma seta azul escura И utilizada para denotar uma relaГЦo de heranГa " + "pЗblica entre duas classes.\n" + "<li>Uma seta verde escura И utilizada para denotar uma heranГa protegida.\n" + "<li>Uma seta vermelho escura И utilizada para denotar uma heranГa privada.\n" + "<li>Uma seta pЗrpura pontilhada И usada se uma classe estА contida ou И utilizada" + "por outra classe. A seta И marcada com a(s) variАvel(eis) " + "atravИs das quais a classe ou estrutura apontada estА acessМvel. \n" + "</ul>\n"; + } + /*! text for the link to the legend page */ + virtual QCString trLegend() + { + return "legenda"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.0 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a test item */ + virtual QCString trTest() + { + return "Teste"; + } + /*! Used as the header of the test list */ + virtual QCString trTestList() + { + return "Lista de Teste"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.1 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for KDE-2 IDL methods */ + virtual QCString trDCOPMethods() + { + return "MИtodos DCOP"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.2 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for IDL properties */ + virtual QCString trProperties() + { + return "Propriedades"; + } + /*! Used as a section header for IDL property documentation */ + virtual QCString trPropertyDocumentation() + { + return "Propriedades"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.4 +////////////////////////////////////////////////////////////////////////// + + /*! Used for Java interfaces in the summary section of Java packages */ + virtual QCString trInterfaces() + { + return "Interfaces"; + } + /*! Used for Java classes in the summary section of Java packages */ + virtual QCString trClasses() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Estruturas de Dados"; + } + else + { + return "Classes"; + } + } + /*! Used as the title of a Java package */ + virtual QCString trPackage(const char *name) + { + return (QCString)"Pacote "+name; + } + /*! Title of the package index page */ + virtual QCString trPackageList() + { + return "Lista de Pacotes"; + } + /*! The description of the package index page */ + virtual QCString trPackageListDescription() + { + return "Aqui estА a lista de pacotes com suas respectivas descriГУes (se disponМveis):"; + } + /*! The link name in the Quick links header for each page */ + virtual QCString trPackages() + { + return "Pacotes"; + } + /*! Used as a chapter title for Latex & RTF output */ + virtual QCString trPackageDocumentation() + { + return "Pacotes"; + } + /*! Text shown before a multi-line define */ + virtual QCString trDefineValue() + { + return "Valor:"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.5 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a \\bug item */ + virtual QCString trBug() + { + return "Bug"; + } + /*! Used as the header of the bug list */ + virtual QCString trBugList() + { + return "Lista de Bug"; + } + }; #endif diff --git a/src/translator_cz.h b/src/translator_cz.h index 732d4e1..41187da 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -97,6 +97,11 @@ // - Minor correction of comments which copied the same // corrections in translator.h (doubled backslash) just after // 1.2.6 release. +// +// 2001/04/10 (Petr Prikryl) +// - Update for OPTIMIZE_OUTPUT_FOR_C (1.2.6-20010408). +// - Removed implementation of latexBabelPackage(). +// - Removed implementation of trVerbatimText(). // // Notices: // -------- @@ -113,7 +118,7 @@ class TranslatorCzech : public Translator { private: /*! The Decode() inline assumes the source written in the - Windows encoding (maintainer dependent). + Windows encoding (maintainer only dependent). */ inline QCString Decode(const QCString & sInput) { @@ -133,10 +138,6 @@ class TranslatorCzech : public Translator virtual QCString latexLanguageSupportCommand() { return "\\usepackage{czech}\n"; } - /*! returns the name of the package that is included by LaTeX */ - virtual QCString latexBabelPackage() - { return ""; } - /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { @@ -175,7 +176,16 @@ class TranslatorCzech : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() - { return Decode("Dokumentace k datovЩm ХlenЫm"); } + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return Decode("Dokumentace k polo·kАm"); + } + else + { + return Decode("Dokumentace k datovЩm ХlenЫm"); + } + } /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() @@ -220,12 +230,6 @@ class TranslatorCzech : public Translator virtual QCString trDefinedIn() { return Decode("definovАn v"); } - /*! put as in introduction in the verbatim header file of a class. - * parameter f is the name of the include file. - */ - virtual QCString trVerbatimText(const char *f) - { return Decode((QCString)"зplnЩ text vklАdanИho souboru "+f+"."); } - // quick reference sections /*! This is put above each page as a link to the list of all groups of @@ -240,8 +244,17 @@ class TranslatorCzech : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() - { return Decode("Seznam tЬМd"); } - + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return Decode("DatovИ struktury"); + } + else + { + return Decode("Seznam tЬМd"); + } + } + /*! This is put above each page as a link to the list of documented files */ virtual QCString trFileList() { return Decode("Seznam souborЫ"); } @@ -252,11 +265,29 @@ class TranslatorCzech : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() - { return Decode("Seznam ХlenЫ tЬМd"); } - + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return Decode("DatovИ polo·ky"); + } + else + { + return Decode("Seznam ХlenЫ tЬМd"); + } + } + /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() - { return Decode("Symboly v souborech"); } + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return Decode("GlobАlnМ symboly"); + } + else + { + return Decode("Symboly v souborech"); + } + } /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() @@ -287,22 +318,65 @@ class TranslatorCzech : public Translator /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() - { return Decode("NАsledujМcМ seznam obsahuje pЬedev Мm identifikace tЬМd, " - "ale nachАzМ se zde i dal М netriviАlnМ prvky, jako jsou " - "struktury (struct), unie (union) a rozhranМ (interface). " - "V seznamu jsou uvedeny jejich struХnИ popisy:"); + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return Decode("NАsledujМcМ seznam obsahuje identifikace datovЩch " + "struktur a jejich struХnИ popisy:"); + } + else + { + return Decode("NАsledujМcМ seznam obsahuje pЬedev Мm identifikace " + "tЬМd, ale nachАzejМ se zde i dal М netriviАlnМ prvky, " + "jako jsou struktury (struct), unie (union) a rozhranМ " + "(interface). V seznamu jsou uvedeny jejich struХnИ " + "popisy:"); + } } /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Zde naleznete seznam v ech "; - if (!extractAll) result+="dokumentovanЩch "; - result+="ХlenЫ tЬМd s odkazy na "; - if (extractAll) - result+="dokumentaci tЬМd, ke kterЩm pЬМslu ejМ:"; - else - result+="tЬМdy, ke kterЩm pЬМslu ejМ:"; + QCString result= "Zde naleznete seznam v ech "; + if (!extractAll) + { + result += "dokumentovanЩch "; + } + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result += "polo·ek struktur (struct) a uniМ (union) "; + } + else + { + result += "ХlenЫ tЬМd "; + } + + result += "s odkazy na "; + + if (extractAll) + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result += "dokumentaci struktur/uniМ, ke kterЩm pЬМslu ejМ:"; + } + else + { + result += "dokumentaci tЬМd, ke kterЩm pЬМslu ejМ:"; + } + } + else + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="struktury/unie, ke kterЩm pЬМslu ejМ:"; + } + else + { + result+="tЬМdy, ke kterЩm pЬМslu ejМ:"; + } + } + return Decode(result); } @@ -311,18 +385,22 @@ class TranslatorCzech : public Translator { QCString result="Zde naleznete seznam v ech "; if (!extractAll) result+="dokumentovanЩch "; - result+="symbolЫ, kterИ jsou definovАny na Зrovni svЩch souborЫ. " - "Pro ka·dЩ symbol je uveden odkaz na "; + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="funkcМ, promЛnnЩch, maker, vЩХtЫ a definic typЫ (typedef) " + "s odkazy na "; + } + else + { + result+="symbolЫ, kterИ jsou definovАny na Зrovni svЩch souborЫ. " + "Pro ka·dЩ symbol je uveden odkaz na "; + } + if (extractAll) - result+="dokumentaci pЬМslu nИho souboru"; + result+="soubory, ke kterЩm pЬМslu ejМ:"; else - result+="soubor, ve kterИm je symbol definovАn"; - result+=". Podle zpЫsobu definice mЫ·e bЩt symbol globАlnМm symbolem " - "nebo symbolem, kterЩ je viditelnЩ pouze z danИho souboru " - "(to se tЩkА napЬМklad statickЩch promЛnnЩch v C++). " - "Seznam neobsahuje symboly ХlenЫ tЬМd. " - "Symbol mЫ·e oznaХovat makro, typ, instanci tЬМdy, " - "promЛnnou, konstantu, funkci, vЩХet, hodnotu vЩХtu a podobnЛ:"; + result+="dokumentaci:"; return Decode(result); } @@ -374,8 +452,17 @@ class TranslatorCzech : public Translator * annotated compound index. */ virtual QCString trCompoundIndex() - { return Decode("RejstЬМk tЬМd"); } - + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return Decode("RejstЬМk datovЩch struktur"); + } + else + { + return Decode("RejstЬМk tЬМd"); + } + } + /*! This is used in LaTeX as the title of the chapter with the * list of all files. */ @@ -508,8 +595,17 @@ class TranslatorCzech : public Translator * the list of links to documented compounds */ virtual QCString trCompounds() - { return Decode("TЬМdy"); } - + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return Decode("DatovИ struktry"); + } + else + { + return Decode("TЬМdy"); + } + } + /*! This is used in the documentation of a group before the list of * links to documented files */ @@ -954,7 +1050,14 @@ class TranslatorCzech : public Translator } virtual QCString trPublicAttribs() { - return Decode("VeЬejnИ atributy"); + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return Decode("DatovИ polo·ky"); + } + else + { + return Decode("VeЬejnИ atributy"); + } } virtual QCString trStaticPublicAttribs() { diff --git a/src/translator_de.h b/src/translator_de.h index 8f0f75a..3d157ff 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -22,25 +22,30 @@ // RK (who are you?) // - Update for "new since 1.1.3" version // -// 2001/03/23 Jens Seidel (jens.seidel@mathematik.tu-chemnitz.de) +// 2001/03/23 Jens Seidel (jensseidel@users.sourceforge.net) // - fixed typos // - changed trPageDocumentation() "Seitenbeschreibung" to -// "Zusätzliche Informationen" +// "ZusДtzliche Informationen" // - removed old trGeneratedFrom() -// - /*! ==> /* (documentation is inherited from translator.h; -// INHERIT_DOCS = YES) +// - changed "/*!" to "/*" (documentation is inherited from translator.h +// (INHERIT_DOCS = YES), there's no need to make changes twice) // - Update for "new since 1.2.4" version // +// 2001/04/17 Jens Seidel (jensseidel@users.sourceforge.net) +// - fixed typos ("Vererbunsbeziehung", "geschützter") +// - use umlauts instead of html code ("ä",...) +// this makes it easier to read and fixes three problems (two in +// \code segment) +// // Todo: // - translation of all Config_getBool("OPTIMIZE_OUTPUT_FOR_C") // strings (see translator.h) // - translation of "compound" -// - see FIXME for further changes -// - use "Д",... (instead of "ä") in \code segments (or is there a bug -// in doxygen-1.2.6)? +// - see FIXME // - was ist richtig: "Liste aller dokumentierter Elemente" oder // "Liste aller dokumentierten Elemente" (aktuell) // (nach "aller" suchen) +// "Mithilfe" oder "Mit Hilfe" #ifndef TRANSLATOR_DE_H #define TRANSLATOR_DE_H @@ -67,7 +72,7 @@ class TranslatorGerman : public Translator QCString trDetailedDescription() // header that is put before the detailed description of files, classes and namespaces. - { return "Ausführliche Beschreibung"; } + { return "AusfЭhrliche Beschreibung"; } QCString trMemberTypedefDocumentation() // header that is put before the list of typedefs. @@ -75,7 +80,7 @@ class TranslatorGerman : public Translator QCString trMemberEnumerationDocumentation() // header that is put before the list of enumerations. - { return "Dokumentation der Aufzählungstypen"; } + { return "Dokumentation der AufzДhlungstypen"; } QCString trMemberFunctionDocumentation() // header that is put before the list of member functions. @@ -99,17 +104,17 @@ class TranslatorGerman : public Translator QCString trThisIsTheListOfAllMembers() // this is the first part of a sentence that is followed by a class name - { return "Vollständige Aufstellung aller Elemente für "; } + { return "VollstДndige Aufstellung aller Elemente fЭr "; } QCString trIncludingInheritedMembers() // this is the remainder of the sentence after the class name - { return " einschließlich aller geerbten Elemente."; } + { return " einschlieъlich aller geerbten Elemente."; } QCString trGeneratedAutomatically(const char *s) // this is put at the author sections at the bottom of man pages. // parameter s is name of the project name. { QCString result="Automatisch erzeugt von Doxygen"; - if (s) result+=(QCString)" für "+s; + if (s) result+=(QCString)" fЭr "+s; result+=" aus dem Quellcode."; return result; } @@ -129,7 +134,7 @@ class TranslatorGerman : public Translator QCString trVerbatimText(const char *f) // put as in introduction in the verbatim header file of a class. // parameter f is the name of the include file. - { return (QCString)"Dieses ist der unveränderte Text aus der " + { return (QCString)"Dieses ist der unverДnderte Text aus der " "Include-Datei "+f+"."; } // quick reference sections @@ -145,7 +150,7 @@ class TranslatorGerman : public Translator QCString trCompoundList() // This is put above each page as a link to the list of annotated classes - { return "Übersicht"; } + { return "эbersicht"; } QCString trFileList() // This is put above each page as a link to the list of documented files @@ -157,7 +162,7 @@ class TranslatorGerman : public Translator QCString trCompoundMembers() // This is put above each page as a link to all members of compounds. - { return "Elementübersicht"; } + { return "ElementЭbersicht"; } QCString trFileMembers() // This is put above each page as a link to all members of files. @@ -165,7 +170,7 @@ class TranslatorGerman : public Translator QCString trRelatedPages() // This is put above each page as a link to all related pages. - { return "Zusätzliche Informationen"; } + { return "ZusДtzliche Informationen"; } QCString trExamples() // This is put above each page as a link to all examples. @@ -177,14 +182,14 @@ class TranslatorGerman : public Translator QCString trClassHierarchyDescription() // This is an introduction to the class hierarchy. - { return "Die Liste der Ableitungen ist -mit Einschränkungen- " + { return "Die Liste der Ableitungen ist -mit EinschrДnkungen- " "alphabetisch sortiert:"; } QCString trFileListDescription(bool extractAll) // This is an introduction to the list with all files. { - QCString result="Hier folgt die Aufzählung aller "; + QCString result="Hier folgt die AufzДhlung aller "; if (!extractAll) result+="dokumentierten "; result+="Dateien mit einer Kurzbeschreibung:"; return result; @@ -194,17 +199,17 @@ class TranslatorGerman : public Translator // This is an introduction to the annotated compound list { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) - return "Hier folgt die Aufzählung aller Datenstrukturen " + return "Hier folgt die AufzДhlung aller Datenstrukturen " "mit einer Kurzbeschreibung:"; else - return "Hier folgt die Aufzählung aller Klassen, Strukturen " + return "Hier folgt die AufzДhlung aller Klassen, Strukturen " "und Varianten mit einer Kurzbeschreibung:"; // FIXME: "interfaces" = ?? } QCString trCompoundMembersDescription(bool extractAll) // This is an introduction to the page with all class members { - QCString result="Hier folgt die Aufzählung aller "; + QCString result="Hier folgt die AufzДhlung aller "; if (!extractAll) result+="dokumentierten "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) result+="Strukturen und Varianten mit Verweisen auf "; @@ -217,9 +222,9 @@ class TranslatorGerman : public Translator result+="die Klassendokumentation zu jedem Element:"; } else { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) - result+="die zugehörigen Elemente:"; + result+="die zugehЖrigen Elemente:"; else - result+="die zugehörigen Klassen:"; + result+="die zugehЖrigen Klassen:"; } return result; } @@ -227,11 +232,11 @@ class TranslatorGerman : public Translator QCString trFileMembersDescription(bool extractAll) // This is an introduction to the page with all file members { - QCString result="Hier folgt die Aufzählung aller "; + QCString result="Hier folgt die AufzДhlung aller "; if (!extractAll) result+="dokumentierten "; result+="Dateielemente mit Verweisen auf "; if (extractAll) result+="die Dateidokumentation zu jedem Element:"; - else result+="die zugehörigen Dateien:"; + else result+="die zugehЖrigen Dateien:"; return result; } @@ -245,16 +250,16 @@ class TranslatorGerman : public Translator QCString trRelatedPagesDescription() // This is an introduction to the page with the list of related pages - { return "Hier folgt eine Liste mit zusammengehörigen Themengebieten:"; } + { return "Hier folgt eine Liste mit zusammengehЖrigen Themengebieten:"; } QCString trModulesDescription() // This is an introduction to the page with the list of class/file groups - { return "Hier folgt die Aufzählung aller Module:"; } + { return "Hier folgt die AufzДhlung aller Module:"; } QCString trNoDescriptionAvailable() // This sentences is used in the annotated class/file lists if no brief // description is given. - { return "Keine Beschreibung verfügbar"; } + { return "Keine Beschreibung verfЭgbar"; } // index titles (the project name is prepended for these) @@ -310,7 +315,7 @@ class TranslatorGerman : public Translator QCString trPageDocumentation() // This is used in LaTeX as the title of the chapter containing // the documentation of all related pages. - { return "Zusätzliche Informationen"; } + { return "ZusДtzliche Informationen"; } QCString trReferenceManual() // This is used in LaTeX as the title of the document @@ -334,7 +339,7 @@ class TranslatorGerman : public Translator QCString trEnumerations() // This is used in the documentation of a file as a header before the // list of enumerations - { return "Aufzählungen"; } + { return "AufzДhlungen"; } QCString trFunctions() // This is used in the documentation of a file as a header before the @@ -349,7 +354,7 @@ class TranslatorGerman : public Translator QCString trEnumerationValues() // This is used in the documentation of a file as a header before the // list of (global) variables - { return "Aufzählungswerte"; } + { return "AufzДhlungswerte"; } QCString trAuthor() // This is used in man pages as the author section. @@ -373,12 +378,12 @@ class TranslatorGerman : public Translator QCString trEnumerationTypeDocumentation() // This is used in the documentation of a file/namespace before the list // of documentation blocks for enumeration types - { return "Dokumentation der Aufzählungstypen"; } + { return "Dokumentation der AufzДhlungstypen"; } QCString trEnumerationValueDocumentation() // This is used in the documentation of a file/namespace before the list // of documentation blocks for enumeration values - { return "Dokumentation des Wertebereiches der Aufzählungstypen"; } + { return "Dokumentation des Wertebereiches der AufzДhlungstypen"; } QCString trFunctionDocumentation() // This is used in the documentation of a file/namespace before the list @@ -393,7 +398,7 @@ class TranslatorGerman : public Translator QCString trCompounds() // This is used in the documentation of a file/namespace/group before // the list of links to documented compounds - { return "Übersicht"; } + { return "эbersicht"; } QCString trFiles() // This is used in the documentation of a group before the list of @@ -403,7 +408,7 @@ class TranslatorGerman : public Translator QCString trGeneratedAt(const char *date,const char *projName) { QCString result=(QCString)"Erzeugt am "+date; - if (projName) result+=(QCString)" für "+projName; + if (projName) result+=(QCString)" fЭr "+projName; result+=(QCString)" von"; return result; } @@ -416,17 +421,17 @@ class TranslatorGerman : public Translator QCString trClassDiagram(const char *clName) // this text is put before a class diagram { - return (QCString)"Klassendiagramm für "+clName; + return (QCString)"Klassendiagramm fЭr "+clName; } QCString trForInternalUseOnly() // this text is generated when the \internal command is used. - { return "Nur für den internen Gebrauch."; } + { return "Nur fЭr den internen Gebrauch."; } QCString trReimplementedForInternalReasons() // this text is generated when the \reimp command is used. - { return "Aus internen Gründen neu implementiert. " - "Das API wird davon nicht berührt."; } + { return "Aus internen GrЭnden neu implementiert. " + "Das API wird davon nicht berЭhrt."; } QCString trWarning() // this text is generated when the \warning command is used. @@ -434,7 +439,7 @@ class TranslatorGerman : public Translator QCString trBugsAndLimitations() // this text is generated when the \bug command is used. - { return "Fehler und Einschränkungen"; } + { return "Fehler und EinschrДnkungen"; } QCString trVersion() // this text is generated when the \version command is used. @@ -450,7 +455,7 @@ class TranslatorGerman : public Translator QCString trReturns() // this text is generated when the \return command is used. - { return "Rückgabe"; } + { return "RЭckgabe"; } QCString trSeeAlso() // this text is generated when the \sa command is used. @@ -539,25 +544,25 @@ class TranslatorGerman : public Translator // these are for the member sections of a class, struct or union QCString trPublicMembers() - { return "Öffentliche Datenelemente"; } + { return "жffentliche Datenelemente"; } QCString trPublicSlots() - { return "Öffentliche Slots"; } + { return "жffentliche Slots"; } QCString trSignals() { return "Signale"; } QCString trStaticPublicMembers() - { return "Öffentliche, statische Datenelemente"; } + { return "жffentliche, statische Datenelemente"; } QCString trProtectedMembers() - { return "Geschützte Datenelemente"; } + { return "GeschЭtzte Datenelemente"; } QCString trProtectedSlots() - { return "Geschützte Slots"; } + { return "GeschЭtzte Slots"; } QCString trStaticProtectedMembers() - { return "Geschützte, statische Datenelemente"; } + { return "GeschЭtzte, statische Datenelemente"; } QCString trPrivateMembers() { return "Private Datenelemente"; } @@ -605,7 +610,7 @@ class TranslatorGerman : public Translator // used in class documentation to produce a list of super classes, // if class diagrams are disabled. { - return "Basisklasse für "+trWriteList(numEntries)+"."; + return "Basisklasse fЭr "+trWriteList(numEntries)+"."; } QCString trReimplementedFromList(int numEntries) @@ -629,13 +634,13 @@ class TranslatorGerman : public Translator QCString trNamespaceMemberDescription(bool extractAll) // This is an introduction to the page with all namespace members { - QCString result="Hier folgt die Aufzählung aller "; + QCString result="Hier folgt die AufzДhlung aller "; if (!extractAll) result+="dokumentierten "; result+="Namensbereichselemente mit Verweisen auf "; if (extractAll) - result+="die Namensbereichsdokumentation für jedes Element:"; + result+="die Namensbereichsdokumentation fЭr jedes Element:"; else - result+="die zugehörigen Dateien:"; + result+="die zugehЖrigen Dateien:"; return result; } @@ -670,7 +675,7 @@ class TranslatorGerman : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"Die Dokumentation für diese"; + QCString result=(QCString)"Die Dokumentation fЭr diese"; switch(compType) { case ClassDef::Class: result+=" Klasse"; break; @@ -696,7 +701,7 @@ class TranslatorGerman : public Translator /* This is used as the heading text for the retval command. */ virtual QCString trReturnValues() - { return "Rückgabewerte"; } + { return "RЭckgabewerte"; } /* This is in the (quick) index as a link to the main page (index.html) */ @@ -744,14 +749,13 @@ class TranslatorGerman : public Translator /* this text is put before a collaboration diagram */ virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)"Zusammengehörigkeiten von "+clName+":"; + return (QCString)"ZusammengehЖrigkeiten von "+clName+":"; } - //RK: Apparently Jens missed the Umlaut here. Corrected that. /* this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)"Include-Abhängigkeitsdiagramm für "+fName+":"; + return (QCString)"Include-AbhДngigkeitsdiagramm fЭr "+fName+":"; } /* header that is put before the list of constructor/destructors. */ @@ -834,32 +838,32 @@ class TranslatorGerman : public Translator virtual QCString trPublicTypes() { - return "Öffentliche Typen"; + return "жffentliche Typen"; } virtual QCString trPublicAttribs() { - return "Öffentliche Attribute"; + return "жffentliche Attribute"; } virtual QCString trStaticPublicAttribs() { - return "Statische öffentliche Attribute"; + return "Statische Жffentliche Attribute"; } virtual QCString trProtectedTypes() { - return "Geschützte Typen"; + return "GeschЭtzte Typen"; } virtual QCString trProtectedAttribs() { - return "Geschützte Attribute"; + return "GeschЭtzte Attribute"; } virtual QCString trStaticProtectedAttribs() { - return "Statische geschützte Attribute"; + return "Statische geschЭtzte Attribute"; } virtual QCString trPrivateTypes() @@ -881,7 +885,6 @@ class TranslatorGerman : public Translator // new since 1.1.3 ////////////////////////////////////////////////////////////////////////// -//RK: Started from here /* Used as a marker that is put before a \todo item */ virtual QCString trTodo() { @@ -916,7 +919,7 @@ class TranslatorGerman : public Translator virtual QCString trInclByDepGraph() { return "Dieser Graph zeigt, welche Datei direkt oder " - "indirekt diese Datei enthält:"; + "indirekt diese Datei enthДlt:"; } virtual QCString trSince() @@ -931,26 +934,26 @@ class TranslatorGerman : public Translator /* title of the graph legend page */ virtual QCString trLegendTitle() { - return "Erklärung des Graphen"; + return "ErklДrung des Graphen"; } /* page explaining how the dot graph's should be interpreted */ virtual QCString trLegendDocs() { return - "Diese Seite erklärt die Interpretation der von doxygen " + "Diese Seite erklДrt die Interpretation der von doxygen " "erzeugten Graphen.<p>\n" "Beispiel:\n" "\\code\n" - "/*! Wegen Verkürzung unsichtbare Klasse */\n" + "/*! Wegen VerkЭrzung unsichtbare Klasse */\n" "class Invisible { };\n\n" - "/*! Klasse verkürzt dargestellt, Vererbunsbeziehung ist versteckt */\n" + "/*! Klasse verkЭrzt dargestellt, Vererbungsbeziehung ist versteckt */\n" "class Truncated : public Invisible { };\n\n" "/* Nicht mit doxygen-Kommentaren dokumentierte Klasse */\n" "class Undocumented { };\n\n" - "/*! Mithilfe öffentlicher Vererbung vererbte Klasse */\n" + "/*! Mithilfe Жffentlicher Vererbung vererbte Klasse */\n" "class PublicBase : public Truncated { };\n\n" - "/*! Mithilfe geschützter Vererbung vererbte Klasse */\n" + "/*! Mithilfe geschЭtzter Vererbung vererbte Klasse */\n" "class ProtectedBase { };\n\n" "/*! Mithilfe privater Vererbung vererbte Klasse */\n" "class PrivateBase { };\n\n" @@ -972,22 +975,22 @@ class TranslatorGerman : public Translator "<p>\n" "Die Rechtecke in obigem Graphen bedeuten:\n" "<ul>\n" - "<li>Ein schwarz gefülltes Rechteck stellt die Struktur oder " - "Klasse dar, für die der Graph erzeugt wurde.\n" + "<li>Ein schwarz gefЭlltes Rechteck stellt die Struktur oder " + "Klasse dar, fЭr die der Graph erzeugt wurde.\n" "<li>Ein Rechteck mit schwarzem Rahmen kennzeichnet eine dokumentierte " " Struktur oder Klasse.\n" "<li>Ein Rechteck mit grauem Rahmen kennzeichnet eine undokumentierte " " Struktur oder Klasse.\n" "<li>Ein Rechteck mit rotem Rahmen kennzeichnet eine dokumentierte " - " Struktur oder Klasse, für die nicht alle Vererbungs-/" - "Enthaltenseinsbeziehungen dargestellt werden. Ein Graph wird gekürzt, " + " Struktur oder Klasse, fЭr die nicht alle Vererbungs-/" + "Enthaltenseinsbeziehungen dargestellt werden. Ein Graph wird gekЭrzt, " "wenn er nicht in die angegebenen Schranken passt." "</ul>\n" "Die Pfeile bedeuten:\n" "<ul>\n" - "<li>Ein dunkelblauer Pfeil stellt eine öffentliche Vererbungsbeziehung " + "<li>Ein dunkelblauer Pfeil stellt eine Жffentliche Vererbungsbeziehung " "zwischen zwei Klassen dar.\n" - "<li>Ein dunkelgrüner Pfeil stellt geschützte Vererbung dar.\n" + "<li>Ein dunkelgrЭner Pfeil stellt geschЭtzte Vererbung dar.\n" "<li>Ein dunkelroter Pfeil stellt private Vererbung dar.\n" "<li>Ein gestrichelter violetter Pfeil bedeutet, dass eine Klasse in einer " "anderen enthalten ist oder von einer anderen benutzt wird. Am Pfeil " diff --git a/src/translator_ru.h b/src/translator_ru.h index e16596e..e13591c 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-1999 by Dimitri van Heesch. + * 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 @@ -10,13 +10,39 @@ * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * - * All output generated with Doxygen is not covered by this license. - * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. */ /* - * Russian translation by Andrey V. Stolyarov <crocodil<AT>croco.net> - * released Feb 14, 2001 + * + * Nickolay Semyonov + * Andrey V. Stolyarov released Feb 14, 2001 + * Alexandr V. Chelpanov <cav@cryptopro.ru> released Apr 21, 2001 + * + * Доступны так же перевод примеров на русский язык по email (см. выше) + * + * При переводе заголовков слова list и documentation убраны. + * + * Modules переведено как группы, так как модули чаще всего в русском + * переводе встречается в контексте модуля как единицы трансляции, файла + * и др., что в данном случае не совсем подходит, тем более что + * соответствующая команда в doxygen именуется \group. + * + * Просьба не оптимизировать decode обрамляя результат, это может привести + * к перекодировке входа в том числе русских имен файлов. + * + * Отдано предпочтение при переводе related functions - "относящиеся к классу + * функции", а не "связанные функции", что верно до тех пор пока есть только + * related to class, и нет related to template, package и т.д. Последнее + * замечание касается большинства member. + * + * По возможности при переводе members указывается членом чего этот member + * является. + * + * Compounds переведено как классы, см Строустрап. + * + * Определения помеченные ?? являются спорными. */ #ifndef TRANSLATOR_RU_H @@ -26,195 +52,343 @@ class TranslatorRussian : public Translator { - public: - QCString idLanguage() - { return "russian"; } - QCString latexBabelPackage() - { return "russian"; } - QCString idLanguageCharset() - { - return "koi8-r"; - } - QCString trRelatedFunctions() - { - return "Связанные функции"; - } - QCString trRelatedSubscript() - { - return "(Обратите внимание, что эти функции - не члены класса)"; - } - QCString trDetailedDescription() - { - return "Детальное описание"; - } - QCString trMemberTypedefDocumentation() - { - // Need additional translation - return "Описание typedef-членов"; - } - QCString trMemberEnumerationDocumentation() - { - return "Описание членов перечислимого типа"; - } - QCString trMemberFunctionDocumentation() - { - return "Описание функций-членов"; - } - QCString trMemberDataDocumentation() - { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) - { - return "Описание полей"; + protected: + /*! Returns the string converted from koi8-r to windows-1251. */ + /* The method was designed initially for translator_cz.h. + It is used for on-line encoding conversion related to conditional + compilation in Unix/MS Windows environments (both use different + encoding). + Encoding table got from QT:qtextcodec.cpp + */ + QCString Koi8RToWindows1251( const QCString sInput ) + { + static Q_UINT16 koi8_r[128] = + { 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, + 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, + 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219/**/, 0x221A, 0x2248, + 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, + 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, + 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, + 0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9, + 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, + 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, + 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, + 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A + }; + + QString result; + int len = sInput.length(); + + result.setUnicode(0, len); + QChar* uc = (QChar*)result.unicode(); // const_cast + const unsigned char * c = (const unsigned char *)(const char*)sInput; + for( int i=0; i<len; i++ ) { + if ( c[i] > 127 ) + uc[i] = koi8_r[c[i]-128]; + else + uc[i] = c[i]; } - else - { - return "Описание переменных-членов"; + return result.local8Bit(); + } + /*! returns the string converted from Windows-1251 to koi8-r */ + /* See the comments of the Koi8RToWindows1251() method for details. + Encoding table got from QT:qtextcodec.cpp */ + QCString Windows1251ToKoi8R( const QCString sInput ) + { + static Q_UINT16 windows_1251[128] = + { 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, + 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, + 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, + 0xFFFD, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, + 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, + 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, + 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, + 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F + }; + + QString result; + int len = sInput.length(); + + result.setUnicode(0, len); + QChar* uc = (QChar*)result.unicode(); // const_cast + const unsigned char * c = (const unsigned char *)(const char*)sInput; + for( int i=0; i<len; i++ ) { + if ( c[i] > 127 ) + uc[i] = windows_1251[c[i]-128]; + else + uc[i] = c[i]; } + return result.local8Bit(); } - QCString trMore() - { - return "Дальше..."; - } - QCString trListOfAllMembers() - { - return "Cписок всех членов класса."; - } - QCString trMemberList() - { - return "Список членов"; - } - QCString trThisIsTheListOfAllMembers() - { - return "Это полный список членов класса/структуры "; - } - QCString trIncludeIncludingInheritedMembers() - { - return ", включая все унаследованные члены."; - } - QCString trGeneratedAutomatically(const char *s) - { QCString result="Автоматически создано системой Doxygen"; - if (s) result+=(QCString)" для "+s; - result+=" по файлам исходного текста."; - return result; - } - QCString trEnumName() - { - return "имя перечисления"; - } - QCString trEnumValue() - { - return "значение перечисления"; - } - QCString trDefinedIn() - { - return "определено в"; - } - QCString trVerbatimText(const char* f) - { - return (QCString)"Это прямая вставка текста из включаемого файла"+f; - } - QCString trModules() - { - return "Модули"; - } - QCString trClassHierarchy() - { - return "Иерархия классов"; + + private: + /*! The Decode() inline assumes the source written in the + Koi8-R encoding (maintainer dependent). + */ + inline QCString decode(const QCString & sInput) + { +#ifdef _WIN32 + return Koi8RToWindows1251(sInput); +#else + return sInput; +#endif } - QCString trCompoundList() + + public: + /*! Used for identification of the language. */ + virtual QCString idLanguage() + { return "russian"; } + + /* Used to get the command(s) for the language support. */ + // virtual QCString latexLanguageSupportCommand() + + /*! Used to get the command(s) for the language support. This method + * was designed for languages which do not prefer babel package. + * If this methods returns empty string, then the latexBabelPackage() + * method is used to generate the command for using the babel package. + */ + virtual QCString latexBabelPackage() + { return "russianb"; } + + /*! return the language charset. This will be used for the HTML output */ + virtual QCString idLanguageCharset() +#ifdef _WIN32 + { return "Windows-1215"; } +#else + { return "koi8-r"; } +#endif + + // --- Language translation methods ------------------- + + /*! used in the compound documentation before a list of related functions. */ + virtual QCString trRelatedFunctions() + { return decode("Относящиеся к классу функции"); } + + /*! subscript for the related functions. */ + virtual QCString trRelatedSubscript() + { return decode("(не члены класса)"); } + + /*! header that is put before the detailed description of files, classes and namespaces. */ + virtual QCString trDetailedDescription() + { return decode("Подробное описание"); } + + /*! header that is put before the list of typedefs. */ + virtual QCString trMemberTypedefDocumentation() + { return decode("Определения типов"); } + + /*! header that is put before the list of enumerations. */ + virtual QCString trMemberEnumerationDocumentation() + { return decode("Перечисления"); } + + /*! header that is put before the list of member functions. */ + virtual QCString trMemberFunctionDocumentation() + { return decode("Методы"); } + + /*! header that is put before the list of member attributes. */ + virtual QCString trMemberDataDocumentation() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Структуры данных"; + return decode( "Поля" ); } else { - // doubtful translation; originally - "Compound List" - return "Список составных объектов"; + return decode( "Данные класса" ); } } - QCString trFileList() + + /*! this is the text of a link put after brief descriptions. */ + virtual QCString trMore() + { return decode("Подробнее..."); } + + /*! put in the class documentation */ + /* Dosn't use when optimization for C is on. */ + virtual QCString trListOfAllMembers() { - return "Список файлов"; + return decode( "Полный список членов класса" ); } - QCString trHeaderFiles() + + /*! used as the title of the "list of all members" page of a class */ + /* Dosn't use when optimization for C is on. */ + virtual QCString trMemberList() { - return "Заголовочные файлы"; + return decode( "Cписок членов класса" ); } - QCString trCompoundMembers() + + /*! this is the first part of a sentence that is followed by a class name */ + /* Dosn't use when optimization for C is on. */ + virtual QCString trThisIsTheListOfAllMembers() + { return decode("Полный список членов класса"); } + + /*! this is the remainder of the sentence after the class name */ + /* Dosn't use when optimization for C is on. */ + virtual QCString trIncludingInheritedMembers() + { return decode(", включая наследуемые из базового класса"); } + + /*! 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=decode("Автоматически создано Doxygen"); + if (s) result+=decode(" для ")+s; + result+=decode(" из исходного текста."); + return result; + } + + /*! put after an enum name in the list of all members */ + virtual QCString trEnumName() + { return decode("перечисление"); } + + /*! put after an enum value in the list of all members */ + virtual QCString trEnumValue() + { return decode("элементы перечисления"); } + + /*! put after an undocumented member in the list of all members */ + virtual QCString trDefinedIn() + { return decode("определено в"); } + + // TODO: trVerbatimText is no longer used => remove! + /*! put as in introduction in the verbatim header file of a class. + * parameter f is the name of the include file. + */ + virtual QCString trVerbatimText(const char *f) + { return decode( (QCString)"Это прямая вставка текста из включаемого файла")+f; } + + // quick reference sections + + /*! This is put above each page as a link to the list of all groups of + * compounds or files (see the \\group command). + */ + virtual QCString trModules() + { return decode("Группы"); } + + /*! This is put above each page as a link to the class hierarchy */ + virtual QCString trClassHierarchy() + { return decode("Иерархия классов"); } + + /*! 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 "Поля структур"; + return decode( "Структуры данных" ); } else { - return "Члены-данные"; + return decode( "Классы" ); } } - QCString trFileMembers() + + /*! This is put above each page as a link to the list of documented files */ + virtual QCString trFileList() + { return decode("Файлы"); } + + /*! This is put above each page as a link to the list of all verbatim headers */ + virtual QCString trHeaderFiles() + { return decode("Заголовочные файлы"); } + + /*! 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 "Глобальные имена"; + return decode( "Поля структур" ); } else { - // doubtful translation - // (originally - "File members", but not good for Russian) - return "Члены файла"; + return decode( "Члены классов" ); } } - QCString trRelatedPages() - { - // non-verbatim translation: originally "related pages" - return "См. также: "; - } - QCString trExamples() - { - return "Примеры"; - } - QCString trSearch() - { - return "Поиск"; - } - QCString trClassHierarchyDescription() + + /*! This is put above each page as a link to all members of files. */ + /*??*/ + virtual QCString trFileMembers() { - return "Это дерево наследования отсортировано приблизительно " - "(но не совсем) по алфавиту"; + return decode( "Члены файла" ); } - QCString trFileListDescription(bool extractAll) + + /*! This is put above each page as a link to all related pages. */ + virtual QCString trRelatedPages() + /* ?? Вариант перевода "См. также: " более удачный, но не в заголовке, + как в данном случае. */ + { return decode("Описания"); } + + /*! This is put above each page as a link to all examples. */ + virtual QCString trExamples() + { return decode("Примеры"); } + + /*! This is put above each page as a link to the search engine. */ + virtual QCString trSearch() + { return decode("Поиск"); } + + /*! This is an introduction to the class hierarchy. */ + virtual QCString trClassHierarchyDescription() + { return decode("Иерархия классов."); } + + /*! This is an introduction to the list with all files. */ + virtual QCString trFileListDescription(bool extractAll) { - QCString result="Список всех "; - if(!extractAll) result+="документированных "; - result+="файлов с кратким описанием:"; - return result; + QCString result="Полный список "; + if (!extractAll) result+="документированных "; + result+="файлов."; + return decode(result); } - QCString trCompoundListDescription() + + /*! This is an introduction to the annotated compound list. */ + virtual QCString trCompoundListDescription() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Структуры данных и их краткое описание: "; + return decode( "Структуры данных с их кратким описанием." ); } else { - return "Классы, структуры, объединения и интерфейсы " - "и их краткое описание: "; + return decode( "Классы с их кратким описанием." ); } } - QCString trCompoundMembersDescription(bool extractAll) + + /*! This is an introduction to the page with all class members. */ + virtual QCString trCompoundMembersDescription(bool extractAll) { - // Need additional translation QCString result="Список всех "; if(!extractAll) result+="документированных "; - result+="членов классов со ссылками на "; + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + result+="членов структур данных со ссылками на "; + else + result+="членов классов со ссылками на "; if(extractAll) - result+="документацию по классу для каждого члена:"; + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + result+="документацию по структуре для каждого члена."; + else + result+="документацию по классу для каждого члена."; + } else - result+="классы, к которым они принадлежат:"; - return result; + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + result += "структуры"; + else + result += "классы"; + result+=", к которым они принадлежат."; + } + return decode( result ); } - QCString trFileMembersDescription(bool extractAll) + + /*! This is an introduction to the page with all file members. */ + virtual QCString trFileMembersDescription(bool extractAll) { QCString result="Список всех "; if (!extractAll) result+="документированных "; @@ -230,598 +404,781 @@ class TranslatorRussian : public Translator } result+=" со ссылками на "; if (extractAll) - result+="файлы, к которым они принадлежат:"; + result+="файлы, к которым они принадлежат."; else - result+="документацию:"; - return result; - } - QCString trHeaderFilesDescription() - { - return "Список заголовочных файлов, составляющих API:"; - } - QCString trExamplesDescription() - { - return "Список всех примеров:"; - } - QCString trRelatedPagesDescription() - { - return "Список всех родственных страниц документации:"; + result+="документацию."; + return decode( result ); } - QCString trModulesDescription() - { - return "Список всех модулей:"; - } - QCString trNoDescriptionAvailable() - { - return "Описание отсутствует"; - } - QCString trDocumentation() - { - return "Документация"; - } - QCString trModuleIndex() - { - return "Указатель модулей"; - } - QCString trHierarchicalIndex() - { - return "Иерархический список"; - } - QCString trCompoundIndex() + + /*! This is an introduction to the page with the list of all header files. */ + virtual QCString trHeaderFilesDescription() + { return decode("Полный список заголовочных файлов."); } + + /*! This is an introduction to the page with the list of all examples */ + virtual QCString trExamplesDescription() + { return decode("Полный список примеров."); } + + /*! This is an introduction to the page with the list of related pages */ + virtual QCString trRelatedPagesDescription() + { return decode("Полный список дополнительных описаний."); } + + /*! This is an introduction to the page with the list of class/file groups */ + virtual QCString trModulesDescription() + { return decode("Полный список групп."); } + + /*! This sentences is used in the annotated class/file lists if no brief + * description is given. + */ + virtual QCString trNoDescriptionAvailable() + { return decode("Описание отсутсвует"); } + + // index titles (the project name is prepended for these) + + + /*! This is used in HTML as the title of index.html. */ + virtual QCString trDocumentation() + { return decode("Документация"); } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all groups. + */ + virtual QCString trModuleIndex() + { return decode("Алфавитный указатель групп"); } + + /*! This is used in LaTeX as the title of the chapter with the + * class hierarchy. + */ + virtual QCString trHierarchicalIndex() + { return decode("Иерархический список классов"); } + + /*! 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 "Список структур данных"; + return decode( "Алфавитный указатель структур данных" ); } else { - // originally "compound index" - return "Список классов и структур"; + return decode( "Алфавитный указатель классов" ); } } - QCString trFileIndex() - { - return "Список файлов"; - } - QCString trModuleDocumentation() - { - return "Документация по модулям"; - } - QCString trClassDocumentation() - { - return "Документация по классам"; - } - QCString trFileDocumentation() - { - return "Документация по файлам"; - } - QCString trExampleDocumentation() - { - return "Описания примеров"; - } - QCString trPageDocumentation() - { - return "Документация по страницам"; - } - QCString trReferenceManual() - { - // originally reference manual - return "Краткий справочник"; - } - QCString trDefines() - { - return "Определения"; - } - QCString trFunctionPrototypes() - { - return "Прототипы функций"; - } - QCString trTypedefs() - { - return "Определения типов"; - } - QCString trEnumerations() - { - return "Перечисления"; - } - QCString trFunctions() - { - return "Функции"; - } - QCString trVariables() - { - return "Переменные"; - } - QCString trEnumerationValues() - { - return "Значения перечислимого типа"; - } - QCString trAuthor() - { - return "Автор"; - } - QCString trDefineDocumentation() - { - return "Документация по определениям"; - } - QCString trFunctionPrototypeDocumentation() - { - return "Документация по прототипам функций"; - } - QCString trTypedefDocumentation() - { - return "Документация по определениям типов"; - } - QCString trEnumerationTypeDocumentation() - { - return "Документация по перечислимым типам"; - } - QCString trEnumerationValueDocumentation() - { - return "Документация по значениям перечислимых типов"; - } - QCString trFunctionDocumentation() - { - return "Документация по функциям"; - } - QCString trVariableDocumentation() + + /*! This is used in LaTeX as the title of the chapter with the + * list of all files. + */ + virtual QCString trFileIndex() + { return decode( "Список файлов" ); } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all groups. + */ + virtual QCString trModuleDocumentation() + { return decode("Группы"); } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all classes, structs and unions. + */ + virtual QCString trClassDocumentation() { - return "Документация по переменным"; + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode( "Структуры данных" ); + } + else + { + return decode( "Классы" ); + } } - QCString trCompounds() + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all files. + */ + virtual QCString trFileDocumentation() + { return decode("Файлы"); } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all examples. + */ + virtual QCString trExampleDocumentation() + { return decode("Примеры"); } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all related pages. + */ + virtual QCString trPageDocumentation() + { return decode("Тематические описания"); } + + /*! This is used in LaTeX as the title of the document */ + virtual QCString trReferenceManual() + { return decode("Оглавление"); } + + /*! This is used in the documentation of a file as a header before the + * list of defines + */ + virtual QCString trDefines() + { return decode("Макросы"); } + + /*! This is used in the documentation of a file as a header before the + * list of function prototypes + */ + virtual QCString trFuncProtos() + { return decode("Прототипы функций"); } + + /*! This is used in the documentation of a file as a header before the + * list of typedefs + */ + virtual QCString trTypedefs() + { return decode("Определения типов"); } + + /*! This is used in the documentation of a file as a header before the + * list of enumerations + */ + virtual QCString trEnumerations() + { return decode("Перечисления"); } + + /*! This is used in the documentation of a file as a header before the + * list of (global) functions + */ + virtual QCString trFunctions() + { return decode("Функции"); } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trVariables() + { return decode("Переменные"); } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trEnumerationValues() + { return decode("Элементы перечислений"); } + + /*! This is used in man pages as the author section. */ + virtual QCString trAuthor() + { return decode("Автор"); } + + /*! This is used in the documentation of a file before the list of + * documentation blocks for defines + */ + virtual QCString trDefineDocumentation() + { return decode("Макросы"); } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for function prototypes + */ + virtual QCString trFunctionPrototypeDocumentation() + { return decode("Прототипы функций"); } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for typedefs + */ + virtual QCString trTypedefDocumentation() + { return decode("Типы"); } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration types + */ + virtual QCString trEnumerationTypeDocumentation() + { return decode("Перечисления"); } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration values + */ + virtual QCString trEnumerationValueDocumentation() + { return decode("Элементы перечислений"); } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for functions + */ + virtual QCString trFunctionDocumentation() + { return decode("Функции"); } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for variables + */ + virtual QCString trVariableDocumentation() + { return decode("Переменные"); } + + /*! 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 "Структуры данных"; + return decode( "Структуры данных" ); } else { - // originally "compounds" - return "Составные типы"; + return decode( "Классы" ); } } - QCString trFiles() - { - return "Файлы"; - } - QCString trGeneratedAt(const char* date,const char* projName) - { - QCString result=(QCString)"Создано "+date; - if(projName) result+=(QCString)" для "+projName; - result+=(QCString)" с помощью "; - return result; - } - QCString trWrittenBy() - { - return "написанного"; - } - QCString trClassDiagram(const char* clName) - { - return (QCString)"Диаграмма наследования для "+clName+":"; - } - QCString trForInternalUseOnly() - { - return "Только для внутреннего использования."; - } - QCString trReimplementedForInternalREasons() - { - return "Реализация изменена по внутренним причинам;" - " Интерфейсная часть не изменилась."; - } - QCString trWarning() - { - return "Предупреждение"; - } - QCString trBugsAndLimitations() - { - return "Ошибки и ограничения"; - } - QCString trVersion() - { - return "Версия"; - } - QCString trDate() - { - return "Дата"; - } - QCString trAuthors() - { - return "Автор(ы)"; - } - QCString trReturns() - { - return "Возвращает"; - } - QCString trSeeAlso() - { - return "См. также"; - } - QCString trParameters() - { - return "Параметры"; - } - QCString trExceptions() - { - return "Исключения"; - } - QCString trGeneratedBy() - { - return "Создано при помощи"; + + /*! This is used in the documentation of a group before the list of + * links to documented files + */ + virtual QCString trFiles() + { return decode("Файлы"); } + + /*! 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=decode("Документация "); + if (projName) result+=decode("по ")+projName; + result+=decode(". Последние изменения: ")+date; + result+=decode(". Создано системой "); + return result; } - QCString trNamespaceList() + /*! This is part of the sentence used in the standard footer of each page. + */ + virtual QCString trWrittenBy() { - return "Список пространств имен (namespaces)"; + return decode("Автор:"); } - QCString trNamespaceListDescription(bool extractAll) + + /*! this text is put before a class diagram */ + virtual QCString trClassDiagram(const char *clName) { - QCString result="Список всех "; - if(!extractAll) result+="документированных "; - result+="пространств имен с кратким описанием:"; - return result; + return decode("Граф наследования:")+clName+":"; } - QCString trFriends() - { - return "Друзья"; + + /*! this text is generated when the \\internal command is used. */ + virtual QCString trForInternalUseOnly() + { return decode("Только для внутреннего использования"); } + + /*! this text is generated when the \\reimp command is used. */ + virtual QCString trReimplementedForInternalReasons() + /*??*/ + { return decode("Изменено по внутренним причинам"); } - QCString trRelatedFunctionDocumentation() + + /*! this text is generated when the \\warning command is used. */ + virtual QCString trWarning() + { return decode("Предупреждения"); } + + /*! this text is generated when the \\bug command is used. */ + virtual QCString trBugsAndLimitations() + { return decode("Ошибки и ограничения"); } + + /*! this text is generated when the \\version command is used. */ + virtual QCString trVersion() + { return decode("Версия"); } + + /*! this text is generated when the \\date command is used. */ + virtual QCString trDate() + { return decode("Дата"); } + + /*! this text is generated when the \\author command is used. */ + virtual QCString trAuthors() + { return decode("Автор(ы)"); } + + /*! this text is generated when the \\return command is used. */ + virtual QCString trReturns() + { return decode("Возвращает"); } + + /*! this text is generated when the \\sa command is used. */ + virtual QCString trSeeAlso() + { return decode("См. также"); } + + /*! this text is generated when the \\param command is used. */ + virtual QCString trParameters() + { return decode("Аргументы"); } + + /*! this text is generated when the \\exception command is used. */ + virtual QCString trExceptions() + { return decode("Исключения"); } + + /*! this text is used in the title page of a LaTeX document. */ + virtual QCString trGeneratedBy() + { return decode("Создано системой"); } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990307 +////////////////////////////////////////////////////////////////////////// + + /*! used as the title of page containing all the index of all namespaces. */ + virtual QCString trNamespaceList() + { return decode("Пространства имен"); } + + /*! used as an introduction to the namespace list */ + virtual QCString trNamespaceListDescription(bool extractAll) { - // need translation - return "Документация по друзьям класса и связанным функциям"; + QCString result="Полный список "; + if (!extractAll) result+="документированных "; + result+="пространств имен."; + return decode(result); } - QCString trCompoundReference(const char* clName, + + /*! used in the class documentation as a header before the list of all + * friends of a class + */ + virtual QCString trFriends() + { return decode("Друзья"); } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990405 +////////////////////////////////////////////////////////////////////////// + + /*! used in the class documentation as a header before the list of all + * related classes + */ + virtual QCString trRelatedFunctionDocumentation() + { return decode("Документация по друзьям класса и функциям отноносящихся" + "к классу"); } + +////////////////////////////////////////////////////////////////////////// +// 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)"Описание "; - if (isTemplate){ - switch(compType) - { - case ClassDef::Struct: result+="шаблонной "; break; - case ClassDef::Class: - case ClassDef::Union: - case ClassDef::Interface: - case ClassDef::Exception: - result+="шаблонного "; break; - } - } + QCString result; + 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::Exception: result+="исключения "; break; + case ClassDef::Class: result+="класса"; break; + case ClassDef::Struct: result+="структуры"; break; + case ClassDef::Union: result+="объединения"; break; + case ClassDef::Interface: result+="интерфейса"; break; + case ClassDef::Exception: result+="исключения"; break; } - result+=clName; - return result; - } - QCString trFileReference(const char* fileName) - { - QCString result; - result+=(QCString)"Описание файла "+fileName; - return result; - } - QCString trNamespaceReference(const char* namespaceName) - { - QCString result=(QCString)"Описание пространства имен "+namespaceName; - return result; - } - QCString trPublicMembers() - { - return "Открытые члены"; - } - QCString trPublicSlots() - { - return "Открытые слоты"; - } - QCString trSignals() - { - return "Сигналы"; - } - QCString trStaticPublicMembers() - { - return "Статические открытые члены"; - } - QCString trProtectedMembers() - { - return "Защищенные члены"; - } - QCString trProtectedSlots() - { - return "Защищенные слоты"; - } - QCString trStaticProtectedSlots() - { - return "Статические защищенные слоты"; - } - QCString trPrivateMembers() - { - return "Закрытые члены"; - } - QCString trPrivateSlots() - { - return "Закрытые слоты"; - } - QCString trStaticPrivateMembers() - { - return "Закрытые статические члены"; - } - QCString trWriteList(int numEntries) - { - QCString result; - int i; - for(i=0;i<numEntries;i++) + } + else + { + switch(compType) { - result+=generateMarker(i); - if(i!=numEntries-1) - { - if(i<numEntries-2) - result+=", "; - else - result+=" и "; - } + case ClassDef::Class: result+="Класс"; break; + case ClassDef::Struct: result+="Структура"; break; + case ClassDef::Union: result+="Объединение"; break; + case ClassDef::Interface: result+="Интерфейс"; break; + case ClassDef::Exception: result+="Исключение"; break; } - return result; - } - QCString trInheritsList(int numEntries) - { - return "Унаследован от "+trWriteList(numEntries)+"."; - } - QCString trInheritedByList(int numEntries) - { - return "Наследуется "+trWriteList(numEntries)+"."; + } + result+=" "; + return decode(result)+clName; } - QCString trReimplementedFromList(int numEntries) - { - // Originally: "reimplemented from" - // This translation assumes numEntries is always 1 - // which is true as of 1.2.5 and it's hard for me to - // imagine a situation when it could be wrong. - return "Переопределяет метод предка "+trWriteList(numEntries)+"."; - } - QCString trReimplementedInList(int numEntries) + /*! used as the title of the HTML page of a file */ + virtual QCString trFileReference(const char *fileName) { - return "Переопределяется в "+trWriteList(numEntries)+"."; + return decode("Файл ")+fileName; } - QCString trNamespaceMembers() - { - return "Члены пространств имен"; - } - QCString trNamespaceMemberDescription(bool extractAll) - { - QCString result="Список всех "; - if(!extractAll) result+="документированных "; - result+="членов пространств имен со ссылками на "; - if(extractAll) - result+="документацию по каждому члену:"; - else - result+="пространства имен, к которым они принадлежат:"; - return result; - } - QCString trNamespaceIndex() - { - return "Индекс пространств имен"; - } - QCString trNamespaceDocumentation() - { - return "Документация пространств имен"; + + /*! used as the title of the HTML page of a namespace */ + virtual QCString trNamespaceReference(const char *namespaceName) + { + return decode("Пространство имен ")+namespaceName; + } + + virtual QCString trPublicMembers() + { return decode("Публичные члены"); } + virtual QCString trPublicSlots() + { return decode("Публичные слоты"); } + virtual QCString trSignals() + { return decode("Сигналы"); } + virtual QCString trStaticPublicMembers() + { return decode("Публичные статические члены"); } + virtual QCString trProtectedMembers() + { return decode("Защищенные члены"); } + virtual QCString trProtectedSlots() + { return decode("Защищенные слоты"); } + virtual QCString trStaticProtectedMembers() + { return decode("Защищенные статические члены"); } + virtual QCString trPrivateMembers() + { return decode("Приватные члены"); } + virtual QCString trPrivateSlots() + { return decode("Приватные слоты"); } + virtual QCString trStaticPrivateMembers() + { return decode("Приватные статические члены"); } + + /*! 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<numEntries;i++) + { + // use generateMarker to generate placeholders for the class links! + result+=generateMarker(i); // generate marker for entry i in the list + // (order is left to right) + + if (i!=numEntries-1) // not the last entry, so we need a separator + { + if (i<numEntries-2) // not the fore last entry + result+=", "; + else // the fore last entry + result+=decode( " и " ); + } + } + return result; } - QCString trNamespaces() + + /*! used in class documentation to produce a list of base classes, + * if class diagrams are disabled. + */ + virtual QCString trInheritsList(int numEntries) { - return "Пространства имен"; + return decode("Базовые классы:")+trWriteList(numEntries)+"."; } - QCString trGeneratedFromFiles(ClassDef::CompoundType compType, bool single) + + /*! used in class documentation to produce a list of super classes, + * if class diagrams are disabled. + */ + virtual QCString trInheritedByList(int numEntries) { - 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::Exception: result+="го исключения"; break; - } - result+=" была создана из файл"; - if(single) - result+="а:"; - else - result+="ов:"; - return result; + return decode("Производные классы:")+trWriteList(numEntries)+"."; } - QCString trAlphabeticalList() + + /*! used in member documentation blocks to produce a list of + * members that are hidden by this one. + */ + virtual QCString trReimplementedFromList(int numEntries) { - return "Алфавитный список"; + return decode("Переопределяет метод предка ")+trWriteList(numEntries)+"."; } - QCString trReturnValues() + + /*! used in member documentation blocks to produce a list of + * all member that overwrite the implementation of this member. + */ + virtual QCString trReimplementedInList(int numEntries) { - return "Возвращаемые значения"; + return decode("Переопределяется в ")+trWriteList(numEntries)+"."; } - QCString trMainPage() + + /*! This is put above each page as a link to all members of namespaces. */ + virtual QCString trNamespaceMembers() + { return decode("Члены пространства имен"); } + + /*! This is an introduction to the page with all namespace members */ + virtual QCString trNamespaceMemberDescription(bool extractAll) { - return "Главная страница"; + QCString result="Полный список "; + if (!extractAll) result+="документированных "; + result+="членов простанства имен."; + return decode(result); } - QCString trPageAbbreviation() - { - return "стр."; + + /*! This is used in LaTeX as the title of the chapter with the + * index of all namespaces. + */ + virtual QCString trNamespaceIndex() + { return decode("Алфавитный указатель пространства имен"); } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all namespaces. + */ + virtual QCString trNamespaceDocumentation() + { return decode("Пространства имен"); } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990522 +////////////////////////////////////////////////////////////////////////// + + /*! This is used in the documentation before the list of all + * namespaces in a file. + */ + virtual QCString trNamespaces() + { return decode( "Пространства имен" ); } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990728 +////////////////////////////////////////////////////////////////////////// + + /*! This is put at the bottom of a class documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Class", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"Объявления и описания членов "; + switch(compType) + { + case ClassDef::Class: result+="класс"; + if (single) result+='а'; else result+="ов"; + break; + case ClassDef::Struct: result+="структур"; + if (single) result+='ы'; + break; + case ClassDef::Union: result+="объединени"; + if (single) result+='я'; else result+='й'; + break; + case ClassDef::Interface: result+="интерфейс"; + if (single) result+='а'; else result+="ов"; + break; + case ClassDef::Exception: result+="исключени"; + if (single) result+='я'; else result+='й'; + break; + } + result+=" находятся в файл"; + if (single) result+="е:"; else result+="ах:"; + return decode(result); } - QCString trSources() + + /*! This is in the (quick) index as a link to the alphabetical compound + * list. + */ + virtual QCString trAlphabeticalList() + { return decode("Алфавитный указатель"); } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990901 +////////////////////////////////////////////////////////////////////////// + + /*! This is used as the heading text for the retval command. */ + virtual QCString trReturnValues() + { return decode("Возвращаемые значения"); } + + /*! This is in the (quick) index as a link to the main page (index.html) + */ + virtual QCString trMainPage() + { return decode("Титульная страница"); } + + /*! This is used in references to page that are put in the LaTeX + * documentation. It should be an abbreviation of the word page. + */ + virtual QCString trPageAbbreviation() + { return decode("стр."); } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-991106 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trSources() { - return "Исходные тексты"; + return decode("Исходные тексты."); } - QCString trDefinedAtLineInSourceFile() + virtual QCString trDefinedAtLineInSourceFile() { - return "Определяется в строке @0 файла @1."; + return decode("См. определение в файле @1 строка @0"); } - QCString trDefinedInSourceFile() + virtual QCString trDefinedInSourceFile() { - return "Определяется в файле @0."; + return decode("См. определение в файле @0"); } - QCString trDeprecated() + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-991205 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trDeprecated() { - return "Устарело"; + return decode("Уст."); } - QCString trCollaborationDiagram(const char* clName) + +////////////////////////////////////////////////////////////////////////// +// new since 1.0.0 +////////////////////////////////////////////////////////////////////////// + + /*! this text is put before a collaboration diagram */ + virtual QCString trCollaborationDiagram(const char *clName) { - // originally "collaboration diagram" - return (QCString)"Диаграмма использования для "+clName+":"; + return (QCString)decode("Граф связей класса ")+clName+":"; } - QCString trInclDepGraph(const char* fName) + /*! this text is put before an include dependency graph */ + virtual QCString trInclDepGraph(const char *fName) { - return (QCString)"Граф зависимостей по включениям " - "файлов для "+fName+":"; + return decode("Граф включаемых заголовочных файлов для ")+fName+":"; } - QCString trConstructorDocumentation() + /*! header that is put before the list of constructor/destructors. */ + virtual QCString trConstructorDocumentation() { - return "Документация по конструктору и деструктору"; + return decode("Конструктор(ы)"); } - QCString trGotoSourceCode() + /*! Used in the file documentation to point to the corresponding sources. */ + virtual QCString trGotoSourceCode() { - return "Перейти к исходному тексту этого файла."; + return decode("См. исходные тексты."); } - QCString trGotoDocumentation() + /*! Used in the file sources to point to the corresponding documentation. */ + virtual QCString trGotoDocumentation() { - return "Перейти к документации на этот файл."; + return decode("См. документацию."); } - QCString trPrecondition() + /*! Text for the \pre command */ + virtual QCString trPrecondition() { - return "Предусловие"; + return decode("Предусловие"); } - QCString trPostcondition() + /*! Text for the \post command */ + virtual QCString trPostcondition() { - return "Постусловие"; + return decode("Постусловие"); } - QCString trInvariant() + /*! Text for the \invariant command */ + virtual QCString trInvariant() { - return "Инвариант"; + return decode("Инвариант"); } - QCString trInitialValue() + /*! Text shown before a multi-line variable/enum initialization */ + virtual QCString trInitialValue() { - return "Начальное значение:"; + return decode("Инициализатор"); } - QCString trCode() + /*! Text used the source code in the file index */ + virtual QCString trCode() { - return "исходный текст"; + return decode("Исходные тексты"); } - QCString trGraphicalHierarchy() + virtual QCString trGraphicalHierarchy() { - return "Графическая иерархия класса(ов)"; + return decode("Иерархия классов. Графический вид."); } - QCString trGotoGraphicalHierarchy() + virtual QCString trGotoGraphicalHierarchy() { - return "Перейти к графической иерархии"; + return decode("см. графический вид."); } - QCString trGotoTextualHierarchy() + virtual QCString trGotoTextualHierarchy() { - return "Перейти к текстовой иерархии"; + return decode("см. текстовый вид."); } - QCString trPageIndex() + virtual QCString trPageIndex() { - return "Индекс страниц"; + return decode("Алфавитный указатель тематических описаний"); } - QCString trNote() + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.0 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trNote() { - return "Примечание"; + return decode("Заметки"); } - QCString trPublicTypes() + virtual QCString trPublicTypes() { - return "Открытые типы"; + return decode("Публичные типы"); } - QCString trPublicAttribs() + virtual QCString trPublicAttribs() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Поля данных"; + return decode( "Поля данных" ); } else { - return "Открытые атрибуты"; + return decode( "Открытые атрибуты" ); } } - QCString trStaticPublicAttribs() + virtual QCString trStaticPublicAttribs() { - return "Открытые статические атрибуты"; + return decode("Статические публичные данные"); } - QCString trProtectedTypes() + virtual QCString trProtectedTypes() { - return "Защищенные типы"; + return decode("Защищенные типы"); } - QCString trProtectedAttribs() + virtual QCString trProtectedAttribs() { - return "Защищенные атрибуты"; + return decode("Защищенные данные"); } - QCString trStaticProtectedAttribs() + virtual QCString trStaticProtectedAttribs() { - return "Статические защищенные атрибуты"; + return decode("Статические защищенные данные"); } - QCString trPrivateTypes() + virtual QCString trPrivateTypes() { - return "Закрытые типы"; + return decode("Приватные типы"); } - QCString trPrivateAttribs() + virtual QCString trPrivateAttribs() { - return "Закрытые атрибуты"; + return decode("Приватные данные"); } - QCString trStaticPrivateAttribs() + virtual QCString trStaticPrivateAttribs() { - return "Закрытые статические атрибуты"; + return decode("Приватные статические данные"); } - QCString trTodo() + + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.3 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a todo item */ + virtual QCString trTodo() + /*??*/ { - return "Необходимо сделать:"; + return decode("Необходимо сделать"); } - QCString trTodoList() + /*! Used as the header of the todo list */ + virtual QCString trTodoList() + /*??*/ { - return "Список дел"; + return decode("Список задач"); } - QCString trReferencedBy() + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.4 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trReferencedBy() { - return "Упоминается в"; + return decode("Используется в"); } - QCString trRemarks() + virtual QCString trRemarks() { - return "Примечания"; + return decode("Прим."); } - QCString trAttention() + virtual QCString trAttention() { - return "Внимание"; + return decode("Внимание"); } - QCString trInclByDepGraph() + virtual QCString trInclByDepGraph() { - return "Этот граф показывает, какие файлы прямо или " - "косвенно включают данный файл:"; + return decode("Граф файлов, в которые включеется этот файл:"); } - QCString trSince() + virtual QCString trSince() + /*??*/ { - return "Начиная с"; + return decode("Начиная с"); } - QCString trLegendTitle() + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.5 +////////////////////////////////////////////////////////////////////////// + + /*! title of the graph legend page */ + virtual QCString trLegendTitle() { - return "Условные обозначения"; + return decode("Легенда"); } - QCString trLegendDocs() + /*! page explaining how the dot graph's should be interpreted */ + virtual QCString trLegendDocs() { - return - //"Условные обозначения на графах, генерируемых программой " - //"doxygen.<p>\n" + return decode( + "Обозначения, используемые в графах.<p>\n" "Рассмотрим следующий пример:\n" "\\code\n" "/*! Невидимый класс из-за усечения */\n" "class Invisible { };\n\n" "/*! Усеченный класс, отношение наследования скрыто */\n" "class Truncated : public Invisible { };\n\n" - "/* Класс, не документированный комментариями doxygen */\n" + "/* Недокументированный класс */\n" "class Undocumented { };\n\n" - "/*! Класс, использующий открытое наследование */\n" + "/*! Публичное наследование */\n" "class PublicBase : public Truncated { };\n\n" - "/*! Класс, использующий защищенное наследование */\n" + "/*! Защищенное наследование */\n" "class ProtectedBase { };\n\n" - "/*! Класс, использующий закрытое наследование */\n" + "/*! Приватное наследование */\n" "class PrivateBase { };\n\n" - "/*! Класс, используемый в классе Inherited */\n" + "/*! Класс, используемый классом Inherited */\n" "class Used { };\n\n" - "/*! Суперкласс, унаследованный от нескольких классов */\n" + "/*! Класс, порожденный от других классов */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -831,92 +1188,140 @@ class TranslatorRussian : public Translator " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Если тэг \\c MAX_DOT_GRAPH_HEIGHT в конфигурационном файле " - "имеет значение 200, получим следующий граф:" + "Если \\c MAX_DOT_GRAPH_HEIGHT в конфигурационном файле " + "установлен в 200, получится следующий граф:" "<p><center><img src=\"graph_legend.gif\"></center>\n" "<p>\n" - "Прямоугольники в этом графе имеют следующие значения:\n" + "Прямоугольники в этом графе имеют следующее значение:\n" "<ul>\n" - "<li>Заполненный черный прямоугольник представляет структуру или класс, " - "для которого создан данный граф.\n" + "<li>Заполненный чернный прямоугольник представляет структуру или класс, " + "для которого создан граф.\n" "<li>Прямоугольник с черной границей обозначает документированную структуру или класс.\n" "<li>Прямоугольник с серой границей обозначает недокументированную структуру или класс.\n" "<li>Прямоугольник с красной границей обозначает документированную структуру или класс, для которого\n" - " не все отношения наследования/содержания показаны. Граф усекается, " - "если он не поместился в указанные границы." + " не все отношения наследования/содержания показаны. Граф усечен, " + "если он не поместился в указанных границах." "</ul>\n" - "Стрелки имеют следующие значения:\n" + "Стрелки имеют следующее значение:\n" "<ul>\n" - "<li>Темносиняя стрелка используется для изображения отношения открытого наследования " + "<li>Темносиняя стрелка используется для изображения отношения публичного наследования " "между двумя классами.\n" "<li>Темнозеленая стрелка используется при защищенном наследовании.\n" - "<li>Темнокрасная стрелка используется при закрытом наследовании.\n" - "<li>Фиолетовая пунктирная стрелка используется, если класс содержится " - "в другом классе или используется другим классом. " - "Стрелка маркируется именем переменной, " + "<li>Темнокрасная стрелка используется при приватном наследовании.\n" + "<li>Фиолетовая стрелка используется, если класс содержится в" + "другом класе или используется другим классом." + "Со стрелкой указывается переменная, " "через которую доступен указываемый класс или структура. \n" - "</ul>\n"; + "</ul>\n"); } - QCString trLegend() + /*! text for the link to the legend page */ + virtual QCString trLegend() { - return "обозначения"; + return decode("см. легенду"); } - QCString trTest() + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.0 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a test item */ + virtual QCString trTest() { - return "Тест"; + return decode("Тест"); } - QCString trTestList() + /*! Used as the header of the test list */ + virtual QCString trTestList() { - return "Список тестов"; + return decode("Список тестов"); } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.1 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for KDE-2 IDL methods */ virtual QCString trDCOPMethods() { - return "Методы DCOP"; + return decode("DCOP Методы"); } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.2 +////////////////////////////////////////////////////////////////////////// + /*! Used as a section header for IDL properties */ virtual QCString trProperties() { - return "Свойства"; + return decode("Свойства"); } + /*! Used as a section header for IDL property documentation */ virtual QCString trPropertyDocumentation() { - return "Документация свойств"; + return decode("Полный список свойств"); } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.4 +////////////////////////////////////////////////////////////////////////// + /*! Used for Java interfaces in the summary section of Java packages */ virtual QCString trInterfaces() { - return "Интерфейсы"; + return decode("Интерфейсы"); } + /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - return "Классы"; + return decode("Классы"); } + /*! Used as the title of a Java package */ virtual QCString trPackage(const char *name) { - return (QCString)"Пакет "+name; + return decode("Пакет ")+name; } + /*! Title of the package index page */ virtual QCString trPackageList() { - return "Список пакетов"; + return decode("Полный список пакетов "); } + /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "Список пакетов с кратким описанием (если есть):"; + return decode("Полный список документированных пакетов."); } + /*! The link name in the Quick links header for each page */ virtual QCString trPackages() { - return "Пакеты"; + return decode("Пакеты"); } + /*! Used as a chapter title for Latex & RTF output */ virtual QCString trPackageDocumentation() { - return "Документация пакетов"; + return decode("Пакеты"); } + /*! Text shown before a multi-line define */ virtual QCString trDefineValue() { - return "Значение:"; + return decode("Макроопределение:"); + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.? +////////////////////////////////////////////////////////////////////////// + /*! Used as ansicpg for RTF file */ + virtual QCString trRTFansicp() + { + return "1251"; + } + /*! Used as ansicpg for RTF fcharset */ + virtual QCString trRTFCharSet() + { + return "204"; + } + /*! Used as header RTF general index */ + virtual QCString trRTFGeneralIndex() + { + return decode("Алфавитный указатель"); } }; diff --git a/src/util.cpp b/src/util.cpp index bcbf077..0add74d 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -179,21 +179,6 @@ bool isId(char c) return c=='_' || isalnum(c); } -// strip annonymous left hand side part of the scope -//QCString stripAnnonymousScope(const QCString &s) -//{ -// QCString result=s; -// int i=0; -// while (!result.isEmpty() && result.at(0)=='@' && (i=result.find("::"))!=-1) -// { -// result=result.right(result.length()-i-2); -// } -// //if (result.at(0)=='@') -// //{ -// // result.resize(0); -// //} -// return result; -//} /*! Removes all anoymous scopes from string s @@ -256,7 +241,7 @@ QCString replaceAnonymousScopes(const QCString &s) // strip annonymous left hand side part of the scope -QCString stripAnnonymousNamespaceScope(const QCString &s) +QCString stripAnonymousNamespaceScope(const QCString &s) { int oi=0,i=0,p=0; if (s.isEmpty()) return s; @@ -264,12 +249,12 @@ QCString stripAnnonymousNamespaceScope(const QCString &s) Doxygen::namespaceDict[s.left(i)]!=0) { oi=i; p=i+2; } if (oi==0) { - //printf("stripAnnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.data()); + //printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.data()); return s; } else { - //printf("stripAnnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.right(s.length()-oi-2).data()); + //printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.right(s.length()-oi-2).data()); return s.right(s.length()-oi-2); } } @@ -2537,39 +2522,6 @@ bool hasVisibleRoot(BaseClassList *bcl) //---------------------------------------------------------------------- -#if 0 -QCString convertFileName(const QCString &s) -{ - if (Config_getBool("SHORT_NAMES")) - { - printf("convertFileName(%s)\n",s.data()); - return convertNameToFile(s,FALSE); - } - QCString result; - int i,l=s.length(); - for (i=0;i<l;i++) - { - if (s.at(i)!='/' && s.at(i)!='.') - { - if (Config_getBool("CASE_SENSE_NAMES")) - { - result+=s[i]; - } - else - { - result+=tolower(s[i]); - } - } - else - { - result+="_"; - } - } - return result; -} -#endif - - /*! This function determines the file name on disk of an item * given its name, which could be a class name with templete * arguments, so special characters need to be escaped. @@ -2754,3 +2706,40 @@ const char *getOverloadDocs() "function only in what argument(s) it accepts."; } +void addMembersToMemberGroup(MemberList *ml,MemberGroupDict *memberGroupDict, + MemberGroupList *memberGroupList) +{ + MemberListIterator mli(*ml); + MemberDef *md; + uint index; + for (index=0;(md=mli.current());) + { + int groupId=md->getMemberGroupId(); + if (groupId!=-1) + { + QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId]; + QCString *pDocs = Doxygen::memberDocDict[groupId]; + if (pGrpHeader) + { + MemberGroup *mg = memberGroupDict->find(groupId); + if (mg==0) + { + mg = new MemberGroup(groupId,*pGrpHeader,pDocs ? pDocs->data() : 0); + memberGroupDict->insert(groupId,mg); + memberGroupList->append(mg); + } + md = ml->take(index); + mg->insertMember(md); + md->setMemberGroup(mg); + } + else + { + ++mli;++index; + } + } + else + { + ++mli;++index; + } + } +} @@ -38,6 +38,8 @@ class ClassList; class BaseClassList; class GroupDef; class NamespaceList; +class MemberGroupList; +class MemberGroupDict; //-------------------------------------------------------------------- @@ -123,8 +125,7 @@ QCString generateMarker(int id); void writeExample(OutputList &ol,ExampleList *el); //void setFileNameForSections(QList<QCString> *anchorList,const char *fileName, // PageInfo *pi=0); -QCString stripAnnonymousScope(const QCString &s); -QCString stripAnnonymousNamespaceScope(const QCString &s); +QCString stripAnonymousNamespaceScope(const QCString &s); QCString stripFromPath(const QCString &path); bool rightScopeMatch(const QCString &scope, const QCString &name); bool leftScopeMatch(const QCString &scope, const QCString &name); @@ -144,6 +145,8 @@ int iSystem(const char *command,const char *args,bool isBatchFile=FALSE); QCString convertToHtml(const char *s); QCString convertToXML(const char *s); const char * getOverloadDocs(); +void addMembersToMemberGroup(MemberList *ml,MemberGroupDict *memberGroupDict, + MemberGroupList *memberGroupList); #endif |