diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/classdef.cpp | 15 | ||||
-rw-r--r-- | src/code.l | 2 | ||||
-rw-r--r-- | src/commentcnv.l | 3 | ||||
-rw-r--r-- | src/commentscan.h | 3 | ||||
-rw-r--r-- | src/commentscan.l | 31 | ||||
-rw-r--r-- | src/config.l | 1 | ||||
-rw-r--r-- | src/doctokenizer.l | 2 | ||||
-rw-r--r-- | src/doxygen.cpp | 6 | ||||
-rw-r--r-- | src/groupdef.cpp | 19 | ||||
-rw-r--r-- | src/groupdef.h | 1 | ||||
-rw-r--r-- | src/index.cpp | 17 | ||||
-rw-r--r-- | src/memberdef.cpp | 29 | ||||
-rw-r--r-- | src/memberdef.h | 2 | ||||
-rw-r--r-- | src/memberlist.cpp | 27 | ||||
-rw-r--r-- | src/memberlist.h | 8 | ||||
-rw-r--r-- | src/pre.l | 4 | ||||
-rw-r--r-- | src/pycode.l | 2 | ||||
-rw-r--r-- | src/pyscanner.l | 1 | ||||
-rw-r--r-- | src/scanner.l | 29 | ||||
-rw-r--r-- | src/translator.h | 2 | ||||
-rw-r--r-- | src/translator_adapter.h | 4 | ||||
-rw-r--r-- | src/translator_br.h | 2 | ||||
-rw-r--r-- | src/translator_cz.h | 16 | ||||
-rw-r--r-- | src/translator_en.h | 14 | ||||
-rw-r--r-- | src/translator_es.h | 73 | ||||
-rw-r--r-- | src/translator_it.h | 13 |
26 files changed, 261 insertions, 65 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index cea3d69..5450b46 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -2055,22 +2055,27 @@ bool ClassDef::isLinkable() const /*! the class is visible in a class diagram, or class hierarchy */ bool ClassDef::isVisibleInHierarchy() { - return // show all classes or a subclass is visible - (Config_getBool("ALLEXTERNALS") || hasNonReferenceSuperClass()) && + static bool allExternals = Config_getBool("ALLEXTERNALS"); + static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); + static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES"); + static bool extractStatic = Config_getBool("EXTRACT_STATIC"); + + return // show all classes or a subclass is visible + (allExternals || hasNonReferenceSuperClass()) && // and not an annonymous compound name().find('@')==-1 && // not an artifically introduced class !m_artificial && // and not privately inherited - (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && + (m_prot!=Private || extractPrivate) && // documented or shown anyway or documentation is external (hasDocumentation() || - !Config_getBool("HIDE_UNDOC_CLASSES") || + !hideUndocClasses || (m_templateMaster && m_templateMaster->hasDocumentation()) || isReference() ) && // is not part of an unnamed namespace or shown anyway - (!m_isStatic || Config_getBool("EXTRACT_STATIC")); + (!m_isStatic || extractStatic); } bool ClassDef::hasDocumentation() const @@ -3152,7 +3152,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, extern "C" { // some bogus code to keep the compiler happy void codeYYdummy() { yy_flex_realloc(0,0); } } -#else +#elif YY_FLEX_SUBMINOR_VERSION<33 #error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)." #endif diff --git a/src/commentcnv.l b/src/commentcnv.l index cf22972..a64d66a 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -493,8 +493,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) BEGIN(g_condCtx); } <CondLine>[ \t]* -<CComment,ReadLine>[\\@]"cond"[ \t]*\n | +<CComment,ReadLine>[\\@]"cond"[ \t\r]*\n | <CondLine>. { // forgot section id? + if (YY_START!=CondLine) g_condCtx=YY_START; bool oldSkip=g_skip; startCondSection(" "); // fake section id causing the section to be hidden unconditionally if (g_condCtx==CComment && !oldSkip && g_skip) diff --git a/src/commentscan.h b/src/commentscan.h index b2d3d0d..a30ae61 100644 --- a/src/commentscan.h +++ b/src/commentscan.h @@ -42,6 +42,8 @@ class ParserInterface; * @param[in] isJavaDocStyle TRUE iff this comment block is in "JavaDoc" style. * This means that it starts as a brief description until the end of * the sentences is found and then proceeds as a detailed description. + * @param[in] isInbody TRUE iff this comment block is located in the body of + * a function. * @param[in,out] prot The protection level in which this comment block was * found. Commands in the comment block may override this. * @param[in,out] position The character position within \a comment where the @@ -63,6 +65,7 @@ bool parseCommentBlock(ParserInterface *parser, int lineNr, bool isBrief, bool isJavaDocStyle, + bool isInbody, Protection &prot, int &position, bool &newEntryNeeded diff --git a/src/commentscan.l b/src/commentscan.l index 47e8b5a..35f2566 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -261,7 +261,8 @@ enum OutputContext { OutputDoc, OutputBrief, - OutputXRef + OutputXRef, + OutputInbody }; enum GuardType @@ -299,7 +300,7 @@ static QCString inputString; // input string static int inputPosition; // read pointer static QCString yyFileName; // file name that is read from static int yyLineNr; // line number in the input -//static bool inBody; // was the comment found inside the body of a function? +static bool inBody; // was the comment found inside the body of a function? static OutputContext inContext; // are we inside the brief, details or xref part static bool briefEndsAtDot; // does the brief description stop at a dot? static QCString formulaText; // Running text of a formula @@ -479,7 +480,14 @@ static void addXRefItem(const char *listName,const char *itemTitle, docEntry->addSpecialListItem(listName,itemId); QCString cmdString; cmdString.sprintf("\\xrefitem %s %d\n",listName,itemId); - docEntry->doc += cmdString; + if (inBody) + { + docEntry->inbodyDocs += cmdString; + } + else + { + docEntry->doc += cmdString; + } SectionInfo *si=new SectionInfo(listName,anchorLabel, sectionTitle,SectionInfo::Anchor); Doxygen::sectionDict.insert(anchorLabel,si); @@ -605,6 +613,7 @@ static inline void setOutput(OutputContext ctx) } inContext = ctx; + if (inContext!=OutputXRef && inBody) inContext=OutputInbody; switch(inContext) { case OutputDoc: @@ -629,6 +638,9 @@ static inline void setOutput(OutputContext ctx) // first item found, so can't append to previous //xrefAppendFlag = FALSE; break; + case OutputInbody: + pOutputString = ¤t->inbodyDocs; + break; } } @@ -780,7 +792,7 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-] <Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!) addOutput(yytext); } -<Comment>{XREFCMD}/[^a-z_A-Z]* { // command that can end a brief description +<Comment>{XREFCMD}/[^a-z_A-Z]* { // xref command if (inContext!=OutputXRef) { briefEndsAtDot=FALSE; @@ -826,7 +838,12 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-] // yuk, this is probably not very portable across lex implementations, // but we need to know the position in the input buffer where this // rule matched. + // for flex 2.5.33+ we should use YY_CURRENT_BUFFER_LVALUE +#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33 + inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; +#else inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf; +#endif yyterminate(); } } @@ -2177,6 +2194,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, /* in */ int lineNr, /* in */ bool isBrief, /* in */ bool isJavaDocStyle, + /* in */ bool isInbody, /* in,out */ Protection &prot, /* in,out */ int &position, /* out */ bool &newEntryNeeded @@ -2202,10 +2220,15 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, xrefAppendFlag = FALSE; insidePre = FALSE; parseMore = FALSE; + inBody = isInbody; outputXRef.resize(0); setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc ); briefEndsAtDot = isJavaDocStyle; + if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments + { + current->inbodyDocs+="\n\n"; + } Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n" "input=[%s]\n",fileName.data(),lineNr,comment.data() diff --git a/src/config.l b/src/config.l index 9755fca..9ec2b75 100644 --- a/src/config.l +++ b/src/config.l @@ -311,6 +311,7 @@ static int yyread(char *buf,int max_size) if (includeStack.isEmpty()) { int c=0; + if (inputString==0) return c; while( c < max_size && inputString[inputPosition] ) { *buf = inputString[inputPosition++] ; diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 811127a..100dd11 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -325,7 +325,7 @@ OPMASK ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG}) LNKWORD1 ("::"|"#")?{SCOPEMASK} CVSPEC {BLANK}*("const"|"volatile") LNKWORD2 {SCOPEPRE}*"operator"{OPMASK} -LNKWORD3 [0-9a-z_A-Z]+("."[0-9a-z_A-Z]+)+ +LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+ CHARWORD [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,.] CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."] WORD1 "%"?{CHARWORD}+|"{"|"}"|("\""[^"\n]*"\"") diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 4a8015e..6932f1d 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -120,7 +120,7 @@ SearchIndex * Doxygen::searchIndex=0; SDict<DefinitionList> *Doxygen::symbolMap; bool Doxygen::outputToWizard=FALSE; QDict<int> * Doxygen::htmlDirMap = 0; -QCache<LookupInfo> Doxygen::lookupCache(20000,20000); +QCache<LookupInfo> Doxygen::lookupCache(50000,50000); DirSDict Doxygen::directories(17); SDict<DirRelation> Doxygen::dirRelations(257); ParserManager *Doxygen::parserManager = 0; @@ -4889,7 +4889,6 @@ static void findMember(Entry *root, else { scopeName = mergeScopes(root->parent->name,scopeName); - printf("joinedName=%s\n",scopeName.data()); } } else // see if we can prefix a namespace or class that is used from the file @@ -6131,7 +6130,7 @@ static void findEnumDocumentation(Entry *root) md->setMemberGroupId(root->mGrpId); GroupDef *gd=md->getGroupDef(); - if (gd==0 &&root->groups->first()!=0) // member not grouped but out-of-line documentation is + if (gd==0 && root->groups->first()!=0) // member not grouped but out-of-line documentation is { addMemberToGroups(root,md); } @@ -7894,6 +7893,7 @@ static int readFileOrDirectory(const char *s, { //printf("killDict=%p count=%d\n",killDict,killDict->count()); // strip trailing slashes + if (s==0) return 0; QCString fs = s; char lc = fs.at(fs.length()-1); if (lc=='/' || lc=='\\') fs = fs.left(fs.length()-1); diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 94df15f..d0ce1cc 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -71,6 +71,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t, docProtoMembers.setInGroup(TRUE); docTypedefMembers.setInGroup(TRUE); docEnumMembers.setInGroup(TRUE); + docEnumValMembers.setInGroup(TRUE); docFuncMembers.setInGroup(TRUE); docVarMembers.setInGroup(TRUE); @@ -302,6 +303,18 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly) docEnumMembers.append(md); break; case MemberDef::EnumValue: + if (!docOnly) + { + //printf("enum value %s!\n",md->name().data()); + if (Config_getBool("SORT_BRIEF_DOCS")) + decEnumValMembers.inSort(md); + else + decEnumValMembers.append(md); + } + if (Config_getBool("SORT_MEMBER_DOCS")) + docEnumValMembers.inSort(md); + else + docEnumValMembers.append(md); break; case MemberDef::Prototype: if (!docOnly) @@ -381,6 +394,8 @@ void GroupDef::removeMember(MemberDef *md) docEnumMembers.remove(md); break; case MemberDef::EnumValue: + decEnumValMembers.remove(md); + docEnumValMembers.remove(md); break; case MemberDef::Prototype: decProtoMembers.remove(md); @@ -654,6 +669,7 @@ void GroupDef::writeDocumentation(OutputList &ol) 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); + decEnumValMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerationValues(),0,TRUE); decFuncMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFunctions(),0); decVarMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trVariables(),0); } @@ -729,6 +745,9 @@ void GroupDef::writeMemberDocumentation(OutputList &ol) docEnumMembers.writeDocumentation(ol,name(),this, theTranslator->trEnumerationTypeDocumentation()); + docEnumValMembers.writeDocumentation(ol,name(),this, + theTranslator->trEnumerationValueDocumentation(),TRUE); + docFuncMembers.writeDocumentation(ol,name(),this, theTranslator->trFunctionDocumentation()); diff --git a/src/groupdef.h b/src/groupdef.h index ac939d8..2fe2302 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -106,6 +106,7 @@ class GroupDef : public Definition MemberList docProtoMembers; MemberList docTypedefMembers; MemberList docEnumMembers; + MemberList docEnumValMembers; MemberList docFuncMembers; MemberList docVarMembers; diff --git a/src/index.cpp b/src/index.cpp index 0aa76ac..0c8394c 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -625,7 +625,10 @@ static int countClassesInTreeList(const ClassSDict &cl) { if (cd->isVisibleInHierarchy()) // should it be visible { - count++; + if (cd->subClasses()->count()>0) // should have sub classes + { + count++; + } } } } @@ -634,17 +637,6 @@ static int countClassesInTreeList(const ClassSDict &cl) int countClassHierarchy() { -#if 0 -// TODO: let this function return the real number of items in the hierarchy. - initClassHierarchy(&Doxygen::classSDict); - int count=0; - ClassSDict::Iterator cli(Doxygen::classSDict); - for ( ; cli.current(); ++cli) - { - if (cli.current()->subClasses()->count()>0) count++; - } - return count; -#endif int count=0; initClassHierarchy(&Doxygen::classSDict); initClassHierarchy(&Doxygen::hiddenClasses); @@ -657,7 +649,6 @@ int countClassHierarchy() void writeHierarchicalIndex(OutputList &ol) { - //printf("writeHierarchicalIndex: %d classes\n",hierarchyClasses); if (hierarchyClasses==0) return; ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 87f620d..753e353 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -694,7 +694,18 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, } if (!onlyText) // write link { - ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n); + if (mtype==EnumValue && getGroupDef()==0 && // enum value is not grouped + getEnumScope() && getEnumScope()->getGroupDef()) // but its container is + { + GroupDef *enumValGroup = getEnumScope()->getGroupDef(); + ol.writeObjectLink(enumValGroup->getReference(), + enumValGroup->getOutputFileBase(), + anchor(),n); + } + else + { + ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n); + } } else // write only text { @@ -1029,6 +1040,10 @@ void MemberDef::writeDeclaration(OutputList &ol, } } } + else if (ltype=="@") // rename type from enum values + { + ltype=""; + } else { if (isObjCMethod()) @@ -1291,7 +1306,8 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, const char *scName, Definition *container, - bool inGroup + bool inGroup, + bool showEnumValues ) { // if this member is in a group find the real scope name. @@ -1301,7 +1317,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n", // name().data(),hasDocs,container->definitionType(),inGroup); if ( !hasDocs ) return; - if (isEnumValue()) return; + if (isEnumValue() && !showEnumValues) return; QCString scopeName = scName; QCString memAnchor = anchor(); @@ -1357,6 +1373,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ldef.prepend("enum "); } } + else if (isEnumValue()) + { + if (ldef.at(0)=='@') + { + ldef=ldef.mid(2); + } + } int i=0,l; static QRegExp r("@[0-9]+"); diff --git a/src/memberdef.h b/src/memberdef.h index dcfa401..d7da3db 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -194,7 +194,7 @@ class MemberDef : public Definition bool inGroup); void writeDocumentation(MemberList *ml,OutputList &ol, const char *scopeName,Definition *container, - bool inGroup); + bool inGroup,bool showEnumValues=FALSE); void warnIfUndocumented(); // relation to other members diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 2a2cef7..1fb225e 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -50,7 +50,7 @@ int MemberList::compareItems(GCI item1, GCI item2) /*! Count the number of members in this list that are visible in * the declaration part of a compound's documentation page. */ -void MemberList::countDecMembers() +void MemberList::countDecMembers(bool countEnumValues) { if (m_numDecMembers!=-1) return; @@ -77,7 +77,8 @@ void MemberList::countDecMembers() m_funcCnt++,m_numDecMembers++; break; case MemberDef::Enumeration: m_enumCnt++,m_numDecMembers++; break; - case MemberDef::EnumValue: //m_enumValCnt++,m_numDecMembers++; + case MemberDef::EnumValue: if (countEnumValues) + m_enumValCnt++,m_numDecMembers++; break; case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break; case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break; @@ -117,7 +118,7 @@ void MemberList::countDecMembers() //printf("MemberList::countDecMembers()=%d\n",m_numDecMembers); } -void MemberList::countDocMembers() +void MemberList::countDocMembers(bool countEnumValues) { if (m_numDocMembers!=-1) return; // used cached value m_numDocMembers=0; @@ -128,7 +129,8 @@ void MemberList::countDocMembers() if (md->isDetailedSectionVisible(m_inGroup,m_inFile)) { // do not count enum values, since they do not produce entries of their own - if (md->memberType()!=MemberDef::EnumValue) m_numDocMembers++; + if (countEnumValues || md->memberType()!=MemberDef::EnumValue) + m_numDocMembers++; } } if (memberGroupList) @@ -181,9 +183,10 @@ void MemberList::writePlainDeclarations(OutputList &ol, MemberListIterator mli(*this); for ( ; (md=mli.current()); ++mli ) { + //printf(">>> Member `%s' type=%d visible=%d\n", + // md->name().data(),md->memberType(),md->isBriefSectionVisible()); if (md->isBriefSectionVisible()) { - //printf(">>> Member `%s' type=%d\n",md->name().data(),md->memberType()); switch(md->memberType()) { case MemberDef::Define: // fall through @@ -264,6 +267,10 @@ void MemberList::writePlainDeclarations(OutputList &ol, break; } case MemberDef::EnumValue: + { + if (first) ol.startMemberList(),first=FALSE; + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup); + } break; } } @@ -298,11 +305,11 @@ void MemberList::writePlainDeclarations(OutputList &ol, void MemberList::writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const char *title,const char *subtitle + const char *title,const char *subtitle, bool showEnumValues /*, bool inGroup,bool countSubGroups*/) { //printf("----- writeDeclaration() ----\n"); - countDecMembers(); // count member not in group + countDecMembers(showEnumValues); // count member not in group if (numDecMembers()==0) return; //printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",title,subtitle,numDecMembers()); if (title) @@ -355,11 +362,11 @@ void MemberList::writeDeclarations(OutputList &ol, void MemberList::writeDocumentation(OutputList &ol, const char *scopeName, Definition *container, - const char *title) + const char *title,bool showEnumValues) { //printf("MemberList::writeDocumentation()\n"); - countDocMembers(); + countDocMembers(showEnumValues); if (numDocMembers()==0) return; if (title) @@ -375,7 +382,7 @@ void MemberList::writeDocumentation(OutputList &ol, MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { - md->writeDocumentation(this,ol,scopeName,container,m_inGroup); + md->writeDocumentation(this,ol,scopeName,container,m_inGroup,showEnumValues); } if (memberGroupList) { diff --git a/src/memberlist.h b/src/memberlist.h index 78a317b..c9f1fef 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -45,15 +45,15 @@ class MemberList : public QList<MemberDef> 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 countDecMembers(bool countEnumValues=FALSE); + void countDocMembers(bool countEnumValues=FALSE); void writePlainDeclarations(OutputList &ol, 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); + const char *title,const char *subtitle,bool showEnumValues=FALSE); void writeDocumentation(OutputList &ol,const char *scopeName, - Definition *container,const char *title); + Definition *container,const char *title,bool showEnumValues=FALSE); void writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container); void addMemberGroup(MemberGroup *mg); @@ -1872,7 +1872,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) outputArray(yytext,yyleng); BEGIN(g_condCtx); } -<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t]+\n | +<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*\n | <CondLine>. { outputArray(yytext,yyleng); startCondSection(" "); @@ -1943,7 +1943,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) <SkipCPPComment>"//" { outputChar('/');outputChar('/'); } -<SkipCPPComment>[^\x06\n]+ { +<SkipCPPComment>[^\x06\@\\\n]+ { outputArray(yytext,yyleng); } <SkipCPPComment>. { diff --git a/src/pycode.l b/src/pycode.l index cfa2da2..ae3c543 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -1431,7 +1431,7 @@ void parsePythonCode(CodeOutputInterface &od,const char *className, extern "C" { // some bogus code to keep the compiler happy void pycodeYYdummy() { yy_flex_realloc(0,0); } } -#else +#elif YY_FLEX_SUBMINOR_VERSION<33 #error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)." #endif diff --git a/src/pyscanner.l b/src/pyscanner.l index d3b4dcc..6420e40 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -308,6 +308,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) brief ? current->briefLine : current->docLine, // line of block start docBlockInBody ? FALSE : brief, docBlockJavaStyle, // javadoc style + docBlockInBody, protection, position, needsEntry) diff --git a/src/scanner.l b/src/scanner.l index 9001e80..d16c50f 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2006 by Dimitri van Heesch. + * Copyright (C) 1997-2005 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 @@ -2569,7 +2569,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) // see if the compound does not have a name or is inside another // annonymous compound. If so we insert a // special `annonymous' variable. - Entry *p=current_root; + //Entry *p=current_root; + Entry *p=current; while (p) { // only look for class scopes, not namespace scopes @@ -2586,7 +2587,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) break; } } - p=p->parent; + //p=p->parent; + if (p==current) p=current_root; else p=p->parent; } } //printf("msName=%s current->name=%s\n",msName.data(),current->name.data()); @@ -3416,6 +3418,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } else { +#if 0 if (!Config_getBool("HIDE_IN_BODY_DOCS") && !current->doc.isEmpty()) { @@ -3430,6 +3433,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) previous->inbodyDocs += current->doc; current->doc.resize(0); } +#endif if (current->sli) // copy special list items { QListIterator<ListItemInfo> li(*current->sli); @@ -3880,7 +3884,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } <Specialization>{BN}+ { lineCount(); *specName +=' '; } <Specialization>"<<" { *specName += yytext; } -<Specialization>">>" { *specName += yytext; } +<Specialization>">>" { + if (insideCS) // for C# >> ends a nested template + { + REJECT; + } + else // for C++ >> is a bitshift operator and > > would end a nested template + { + *specName += yytext; + } + } <Specialization>"typename"{BN}+ { lineCount(); } <Specialization>"(" { *specName += *yytext; roundCount++; } <Specialization>")" { *specName += *yytext; roundCount--; } @@ -3977,7 +3990,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) insideCode=FALSE; current->program += yytext ; } -<Comment>[^ \.\n\/\*]+ { current->program += yytext ; } +<Comment>[^ \.\t\r\n\/\*]+ { current->program += yytext ; } <Comment>"*/" { current->program += yytext ; if (!insideCode) BEGIN( lastContext ) ; } @@ -4405,6 +4418,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) int position=0; bool needsEntry=FALSE; if (docBlockInBody && hideInBodyDocs) return; +#if 0 if (docBlockInBody) { if (previous==0) @@ -4417,6 +4431,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) previous->doc=previous->doc.stripWhiteSpace()+"\n\n"; } } +#endif //printf("parseCommentBlock [%s]\n",doc.data()); while (parseCommentBlock( g_thisParser, @@ -4426,6 +4441,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) brief ? current->briefLine : current->docLine, // line of block start docBlockInBody ? FALSE : brief, docBlockInBody ? FALSE : docBlockJavaStyle, + docBlockInBody, protection, position, needsEntry @@ -4440,7 +4456,9 @@ static void handleCommentBlock(const QCString &doc,bool brief) newEntry(); } +#if 0 exit: +#endif if (docBlockTerm) { unput(docBlockTerm); @@ -4479,6 +4497,7 @@ static void handleParametersCommentBlocks() current->docLine, // line of block start FALSE, FALSE, + FALSE, protection, position, needsEntry diff --git a/src/translator.h b/src/translator.h index 93f33a8..449af81 100644 --- a/src/translator.h +++ b/src/translator.h @@ -135,7 +135,6 @@ class Translator virtual QCString trFunctionPrototypeDocumentation() = 0; virtual QCString trTypedefDocumentation() = 0; virtual QCString trEnumerationTypeDocumentation() = 0; - //virtual QCString trEnumerationValueDocumentation() = 0; virtual QCString trFunctionDocumentation() = 0; virtual QCString trVariableDocumentation() = 0; virtual QCString trCompounds() = 0; @@ -446,6 +445,7 @@ class Translator ////////////////////////////////////////////////////////////////////////// virtual QCString trCallerGraph() = 0; + virtual QCString trEnumerationValueDocumentation() = 0; }; diff --git a/src/translator_adapter.h b/src/translator_adapter.h index 1505918..e3a1119 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -51,6 +51,10 @@ class TranslatorAdapter_1_4_6 : public TranslatorAdapterBase { return english.trCallerGraph(); } + virtual QCString trEnumerationValueDocumentation() + { + return english.trEnumerationValueDocumentation(); + } }; class TranslatorAdapter_1_4_1 : public TranslatorAdapter_1_4_6 diff --git a/src/translator_br.h b/src/translator_br.h index db33976..8363795 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -469,7 +469,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_4_6 * documentation blocks for defines */ virtual QCString trDefineDocumentation() - { return "Deinições e macros"; } + { return "Definições e macros"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes diff --git a/src/translator_cz.h b/src/translator_cz.h index d85e554..2221469 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -65,6 +65,9 @@ // 2004/09/14 - The new methods "since 1.3.9" implemented. // 2005/02/11 - The "never used" methods removed. // 2005/03/08 - Update for "new since 1.4.1" (trOverloadText()) +// 2006/05/10 - Update for "new since 1.4.6" -- trCallerGraph(), +// modified trCallGraph() to make the meaning unambiguous +// and clear in the Czech language. // Todo // ---- @@ -1488,7 +1491,7 @@ class TranslatorCzech : public TranslatorAdapter_1_4_6 /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return decode("Graf volání pro tuto funkci:"); + return decode("Tato funkce volá..."); } ////////////////////////////////////////////////////////////////////////// @@ -1620,6 +1623,17 @@ class TranslatorCzech : public TranslatorAdapter_1_4_6 "která má usnadnit používání. Od výše uvedené metody se liší " "pouze jinak zadávanými argumenty."); } + +////////////////////////////////////////////////////////////////////////// +// new since 1.4.6 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trCallerGraph() + { + return decode("Tuto funkci volají..."); + } + + }; #endif // TRANSLATOR_CZ_H diff --git a/src/translator_en.h b/src/translator_en.h index 165bf4b..e365835 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -502,12 +502,6 @@ class TranslatorEnglish : public Translator { return "Enumeration Type Documentation"; } /*! This is used in the documentation of a file/namespace before the list - * of documentation blocks for enumeration values - */ - virtual QCString trEnumerationValueDocumentation() - { return "Enumerator Documentation"; } - - /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ virtual QCString trFunctionDocumentation() @@ -1624,11 +1618,19 @@ class TranslatorEnglish : public Translator // new since 1.4.6 ////////////////////////////////////////////////////////////////////////// + /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { return "Here is the caller graph for this function:"; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration values + */ + virtual QCString trEnumerationValueDocumentation() + { return "Enumerator Documentation"; } + + }; #endif diff --git a/src/translator_es.h b/src/translator_es.h index 1369637..10b2aa7 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -20,12 +20,13 @@ * Some notes: * - It's posible that some sentences haven't got meaning because * some words haven't got translate in spanish. + * Updated from 1.3.8 to 1.4.6 by Guillermo Ballester Valor (May-05-2006) */ #ifndef TRANSLATOR_ES_H #define TRANSLATOR_ES_H -class TranslatorSpanish : public TranslatorAdapter_1_3_8 +class TranslatorSpanish : public TranslatorAdapter_1_4_6 { public: virtual QCString idLanguage() @@ -1376,6 +1377,76 @@ class TranslatorSpanish : public TranslatorAdapter_1_3_8 return "Coincidencias:"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.3.8 +////////////////////////////////////////////////////////////////////////// + + /*! This is used in HTML as the title of page with source code for file filename + */ + virtual QCString trSourceFile(QCString& filename) + { + return "Fichero Fuente " + filename; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.9 +////////////////////////////////////////////////////////////////////////// + + /*! This is used as the name of the chapter containing the directory + * hierarchy. + */ + virtual QCString trDirIndex() + { return "Jerarquía de Directorio"; } + + /*! This is used as the name of the chapter containing the documentation + * of the directories. + */ + virtual QCString trDirDocumentation() + { return "Documentación de Directorio"; } + + /*! This is used as the title of the directory index and also in the + * Quick links of an HTML page, to link to the directory hierarchy. + */ + virtual QCString trDirectories() + { return "Directorios"; } + + /*! This returns a sentences that introduces the directory hierarchy. + * and the fact that it is sorted alphabetically per level + */ + virtual QCString trDirDescription() + { return "La jeraquía de este directorio está ordenada casi, " + "pero no completamente, de forma alfabética:"; + } + + /*! This returns the title of a directory page. The name of the + * directory is passed via \a dirName. + */ + virtual QCString trDirReference(const char *dirName) + { QCString result="Referencia del Directorio "; result+=dirName; return result; } + + /*! This returns the word directory with or without starting capital + * (\a first_capital) and in sigular or plural form (\a singular). + */ + virtual QCString trDir(bool first_capital, bool singular) + { + QCString result((first_capital ? "Directori" : "directori")); + if (singular) result+="o"; else result+="os"; + return result; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.4.1 +////////////////////////////////////////////////////////////////////////// + + /*! This text is added to the documentation when the \\overload command + * is used for a overloaded function. + */ + virtual QCString trOverloadText() + { + return "Esta es una función miembro sobrecargada que se " + "suministra por conveniencia. Difiere de la anterior " + "función solamente en los argumentos que acepta."; + } }; diff --git a/src/translator_it.h b/src/translator_it.h index f49381c..5515a89 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -19,6 +19,8 @@ * * Revision history * + * 2006/05: translated new items used since version 1.4.6 + * corrected typo in trPackageMembers method * 2005/03: translated new items used since version 1.4.1 * removed unused methods listed in Petr Prikryl February 28 translator report * 2004/09: translated new items used since version 1.3.9 @@ -1362,7 +1364,7 @@ class TranslatorItalian : public TranslatorAdapter_1_4_6 */ virtual QCString trPackageMembers() { - return "Funczioni con visibilità di package"; + return "Funzioni con visibilità di package"; } /*! Used as a heading for a list of static Java class functions with * package scope. @@ -1524,6 +1526,15 @@ class TranslatorItalian : public TranslatorAdapter_1_4_6 "unicamente per gli argomenti passati."; } +////////////////////////////////////////////////////////////////////////// +// new since 1.4.6 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trCallerGraph() + { + return "Questo è il grafo dei chiamanti di questa funzione:"; + } + }; #endif |