diff options
author | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2006-12-02 14:54:35 (GMT) |
---|---|---|
committer | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2006-12-02 14:54:35 (GMT) |
commit | d2d57f02eabbe81ea976f31e2af66c80c01a2a0b (patch) | |
tree | 0af428e60324ef94f5e04cee664374d5907c36ac /src | |
parent | d384b6c7459cffcbb30bdd0ab06bde6f0cd12688 (diff) | |
download | Doxygen-d2d57f02eabbe81ea976f31e2af66c80c01a2a0b.zip Doxygen-d2d57f02eabbe81ea976f31e2af66c80c01a2a0b.tar.gz Doxygen-d2d57f02eabbe81ea976f31e2af66c80c01a2a0b.tar.bz2 |
Release-1.5.1-20061202
Diffstat (limited to 'src')
148 files changed, 1509 insertions, 1100 deletions
diff --git a/src/Makefile.in b/src/Makefile.in index e9decc4..86298ce 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,6 +1,6 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/src/bufstr.h b/src/bufstr.h index 3fcdd1d..995211a 100644 --- a/src/bufstr.h +++ b/src/bufstr.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/classdef.cpp b/src/classdef.cpp index 9ed8c1f..ed4a603 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -2086,6 +2086,7 @@ void ClassDef::mergeMembers() bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB" ); if (baseClasses()) { + //printf(" => has base classes!\n"); BaseClassListIterator bcli(*baseClasses()); BaseClassDef *bcd; for ( ; (bcd=bcli.current()) ; ++bcli ) @@ -2096,17 +2097,17 @@ void ClassDef::mergeMembers() bClass->mergeMembers(); MemberNameInfoSDict *srcMnd = bClass->memberNameInfoSDict(); - MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict; + MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict; - if (srcMnd && dstMnd) + if (srcMnd) { MemberNameInfoSDict::Iterator srcMnili(*srcMnd); MemberNameInfo *srcMni; for ( ; (srcMni=srcMnili.current()) ; ++srcMnili) { - //printf("Base member name %s\n",srcMni->memberName()); + //printf(" Base member name %s\n",srcMni->memberName()); MemberNameInfo *dstMni; - if ((dstMni=dstMnd->find(srcMni->memberName()))) + if (dstMnd!=0 && (dstMni=dstMnd->find(srcMni->memberName()))) // a member with that name is already in the class. // the member may hide or reimplement the one in the sub class // or there may be another path to the base class that is already @@ -2298,6 +2299,12 @@ void ClassDef::mergeMembers() } } + if (dstMnd==0) + { + m_impl->allMemberNameInfoSDict = new MemberNameInfoSDict(17); + m_impl->allMemberNameInfoSDict->setAutoDelete(TRUE); + dstMnd = m_impl->allMemberNameInfoSDict; + } // add it to the dictionary dstMnd->append(newMni->memberName(),newMni); } @@ -2317,7 +2324,7 @@ void ClassDef::mergeCategory(ClassDef *category) category->setCategoryOf(this); MemberNameInfoSDict *srcMnd = category->memberNameInfoSDict(); - MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict; + MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict; if (srcMnd && dstMnd) { diff --git a/src/classdef.h b/src/classdef.h index 3646d9b..7152d84 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -23,7 +23,7 @@ #include <qdict.h> #include <qstrlist.h> -#include "entry.h" +//#include "entry.h" #include "memberlist.h" #include "definition.h" #include "sortdict.h" @@ -56,13 +56,13 @@ class ClassDef : public Definition { public: /*! The various compound types */ - enum CompoundType { Class=Entry::CLASS_SEC, - Struct=Entry::STRUCT_SEC, - Union=Entry::UNION_SEC, - Interface=Entry::INTERFACE_SEC, - Protocol=Entry::PROTOCOL_SEC, - Category=Entry::CATEGORY_SEC, - Exception=Entry::EXCEPTION_SEC + enum CompoundType { Class, //=Entry::CLASS_SEC, + Struct, //=Entry::STRUCT_SEC, + Union, //=Entry::UNION_SEC, + Interface, //=Entry::INTERFACE_SEC, + Protocol, //=Entry::PROTOCOL_SEC, + Category, //=Entry::CATEGORY_SEC, + Exception //=Entry::EXCEPTION_SEC }; /*! Creates a new compound definition. diff --git a/src/classlist.cpp b/src/classlist.cpp index 67507d6..aac8f95 100644 --- a/src/classlist.cpp +++ b/src/classlist.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/classlist.h b/src/classlist.h index 0b74b03..3621e3b 100644 --- a/src/classlist.h +++ b/src/classlist.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -55,9 +55,6 @@ static ClassSDict *g_codeClassSDict = 0; static QCString g_curClassName; static QStrList g_curClassBases; -// TODO: is this still needed? if so, make it work -static bool g_inClass; - static QCString g_parmType; static QCString g_parmName; @@ -95,7 +92,9 @@ static int g_bracketCount = 0; static int g_curlyCount = 0; static int g_sharpCount = 0; static bool g_inFunctionTryBlock = FALSE; +static bool g_inForEachExpression = FALSE; +static int g_lastTemplCastContext; static int g_lastSpecialCContext; static int g_lastStringContext; static int g_lastSkipCppContext; @@ -108,6 +107,8 @@ static bool g_insideProtocolList; static bool g_lexInit = FALSE; +static QStack<int> g_classScopeLengthStack; + // context for an Objective-C method call struct ObjCCallCtx { @@ -377,6 +378,7 @@ static CallContext g_theCallContext; /*! add class/namespace name s to the scope */ static void pushScope(const char *s) { + g_classScopeLengthStack.push(new int(g_classScope.length())); if (g_classScope.isEmpty()) { g_classScope = s; @@ -392,17 +394,11 @@ static void pushScope(const char *s) /*! remove the top class/namespace name from the scope */ static void popScope() { - if (!g_classScope.isEmpty()) + if (!g_classScopeLengthStack.isEmpty()) { - int i=g_classScope.findRev("::"); - if (i==-1) // last name, strip all - { - g_classScope.resize(0); - } - else // strip name - { - g_classScope = g_classScope.left(i); - } + int *pLength = g_classScopeLengthStack.pop(); + g_classScope.truncate(*pLength); + delete pLength; } else { @@ -1624,9 +1620,10 @@ TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">" SCOPETNAME ((({ID}{TEMPLIST}?){BN}*"::"{BN}*)*)((~{BN}*)?{ID}) SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*"::"{BN}*)+ KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol") -KEYWORD ("asm"|"auto"|"class"|"const"|"const_cast"|"delete"|"dynamic_cast"|"enum"|"explicit"|"extern"|"false"|"friend"|"inline"|"mutable"|"namespace"|"new"|"operator"|"private"|"protected"|"public"|"register"|"reinterpret_cast"|"sizeof"|"static"|"static_cast"|"struct"|"template"|"this"|"self"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|KEYWORD_OBJC) -FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"for"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while") -TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"boolean"|"id"|"SEL") +KEYWORD ("add"|"asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|KEYWORD_OBJC) +FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while") +TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string") +CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast") CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ARITHOP "+"|"-"|"/"|"*"|"%"|"--"|"++" ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|=" @@ -1650,10 +1647,12 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} %x ClassName %x PackageName %x ClassVar +%x CppCliTypeModifierFollowup %x Bases %x SkipSharp %x ReadInclude %x TemplDecl +%x TemplCast %x CallEnd %x ObjCMethod %x ObjCParams @@ -1680,7 +1679,20 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} if (!g_insideTemplate) BEGIN( ClassName ); } -<Body>("class"|"struct"|"union"|"namespace")[ \t\n]+ { +<Body>(("public"|"private"){B}+)?("ref"|"value"|"interface"|"enum"){B}+("class"|"struct") { + if (g_insideTemplate) REJECT; + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + BEGIN( ClassName ); + } +<Body>"property"|"event"/{BN}* { + if (g_insideTemplate) REJECT; + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } +<Body>(KEYWORD_CPPCLI_DATATYPE|("partial"{B}+)?"class"|"struct"|"union"|"namespace"){B}+ { startFontClass("keyword"); codifyLines(yytext); endFontClass(); @@ -1723,7 +1735,6 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} if (*yytext=='{') { g_curlyCount++; - g_inClass=TRUE; if (g_searchingForBody) { g_searchingForBody=FALSE; @@ -1869,8 +1880,6 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} g_code->codify(yytext); - g_inClass=FALSE; - //fprintf(stderr,"g_bodyCurlyCount=%d\n",g_bodyCurlyCount); if (--g_bodyCurlyCount<=0) { @@ -1910,8 +1919,6 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} g_code->codify(yytext); endFontClass(); - g_inClass=FALSE; - g_currentMemberDef=0; if (g_currentDefinition) g_currentDefinition=g_currentDefinition->getOuterScope(); @@ -1922,12 +1929,17 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} g_searchingForBody=FALSE; BEGIN( Body ); } -<ClassName,ClassVar>[*&]+ { +<ClassName,ClassVar>[*&^%]+ { g_type=g_curClassName.copy(); g_name.resize(0); g_code->codify(yytext); BEGIN( Body ); // variable of type struct * } +<ClassName>"__declspec"{B}*"("{B}*{ID}{B}*")" { + startFontClass("keyword"); + g_code->codify(yytext); + endFontClass(); + } <ClassName>{ID}("::"{ID})* { g_curClassName=yytext; addType(); @@ -1952,23 +1964,29 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} g_curClassBases.clear(); BEGIN( Bases ); } +<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") { + //fprintf(stderr,"***** C++/CLI modifier %s on g_curClassName=%s\n",yytext,g_curClassName.data()); + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + BEGIN( CppCliTypeModifierFollowup ); + } <ClassVar>{ID} { g_type = g_curClassName.copy(); g_name = yytext; g_theVarContext.addVariable(g_type,g_name); generateClassOrGlobalLink(*g_code,yytext); } -<ClassName,ClassVar>[ \t\n]*":"[ \t\n]* { +<ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*":"{B}* { codifyLines(yytext); g_curClassBases.clear(); BEGIN( Bases ); } <PackageName>[ \t]*";" | -<Bases,ClassName,ClassVar>[ \t]*"{"[ \t]* { +<Bases,ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*"{"{B}* { g_theVarContext.pushScope(); g_code->codify(yytext); g_curlyCount++; - g_inClass=TRUE; if (YY_START==ClassVar && g_curClassName.isEmpty()) { g_curClassName = g_name.copy(); @@ -2086,7 +2104,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} g_name+=yytext; BEGIN( FuncCall ); } -<Body,TemplDecl>"template"/([^a-zA-Z0-9]) { +<Body,TemplDecl>("template"|"generic")/([^a-zA-Z0-9]) { startFontClass("keyword"); codifyLines(yytext); endFontClass(); @@ -2126,18 +2144,26 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} endFontClass(); g_name.resize(0);g_type.resize(0); } +<FuncCall>"in"/{BN}* { + if (!g_inForEachExpression) REJECT; + startFontClass("keywordflow"); + codifyLines(yytext); + endFontClass(); + g_name.resize(0);g_type.resize(0); + } <Body>{FLOWKW}/{BN}*"(" { startFontClass("keywordflow"); codifyLines(yytext); endFontClass(); g_name.resize(0);g_type.resize(0); + g_inForEachExpression = (strcmp(yytext,"for each")==0 || strcmp(yytext, "foreach")==0); BEGIN(FuncCall); } <Body>{FLOWKW}/([^a-z_A-Z0-9]) { startFontClass("keywordflow"); codifyLines(yytext); endFontClass(); - if (g_inFunctionTryBlock && strcmp(yytext,"catch")==0) + if (g_inFunctionTryBlock && (strcmp(yytext,"catch")==0 || strcmp(yytext,"finally")==0)) { g_inFunctionTryBlock=FALSE; } @@ -2163,6 +2189,13 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} addType(); g_name+=yytext; } +<Body>"generic"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* { + startFontClass("keyword"); + g_code->codify(yytext); + endFontClass(); + g_sharpCount=0; + BEGIN(TemplDecl); + } <Body>"template"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* { // template<...> startFontClass("keyword"); g_code->codify(yytext); @@ -2187,7 +2220,37 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} BEGIN(Body); } } -<Body>{SCOPENAME}{B}*"<"[^\n\/\-\.\{\"\>]*">"("::"{ID})*/{B}* { // A<T> *pt; +<TemplCast>">" { + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + BEGIN( g_lastTemplCastContext ); + } +<TemplCast>{ID}("::"{ID})* { + generateClassOrGlobalLink(*g_code,yytext); + } +<TemplCast>("const"|"volatile"){B}* { + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } +<TemplCast>[*^]* { + codifyLines(yytext); + } +<Body,FuncCall>{CASTKW}"<" { // static_cast<T>( + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + g_lastTemplCastContext = YY_START; + BEGIN(TemplCast); + } +<Body,TemplCast>{SCOPENAME}{B}*"<"[^\n\/\-\.\{\"\>]*">"("::"{ID})*/{B}* { // A<T> *pt; + int i=QCString(yytext).find('<'); + QCString kw = QCString(yytext).left(i).stripWhiteSpace(); + if (kw.right(5)=="_cast" && YY_START==Body) + { + REJECT; + } addType(); generateClassOrGlobalLink(*g_code,yytext); g_name+=yytext; @@ -2223,6 +2286,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} startFontClass("stringliteral"); g_code->codify(yytext); g_lastStringContext=YY_START; + g_inForEachExpression = FALSE; BEGIN( SkipString ); } <SkipString>[^\"\\\r\n]* { @@ -2525,7 +2589,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} g_code->codify(yytext); endFontClass(); } -<MemberCall2,FuncCall,OldStyleArgs>{TYPEKW}/([^a-z_A-Z0-9]) { +<MemberCall2,FuncCall,OldStyleArgs,TemplCast>{TYPEKW}/([^a-z_A-Z0-9]) { addParmType(); g_parmName=yytext; startFontClass("keywordtype"); @@ -2546,6 +2610,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} } <FuncCall>";" { // probably a cast, not a function call g_code->codify(yytext); + g_inForEachExpression = FALSE; BEGIN( Body ); } <MemberCall2,FuncCall>, { @@ -2563,9 +2628,12 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} } } <MemberCall2,FuncCall>{OPERATOR} { // operator - if (strcmp(yytext,"*") && strcmp(yytext,"&")) // typically a pointer or reference + if (strcmp(yytext,"*") && + strcmp(yytext,"&") && + strcmp(yytext,"^") && + strcmp(yytext,"%")) // typically a pointer or reference { - // not a * or & + // not a * or &, or C++/CLI's ^ or % g_parmType.resize(0);g_parmName.resize(0); } g_code->codify(yytext); @@ -2573,6 +2641,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} <MemberCall,MemberCall2,FuncCall>")" { g_theVarContext.addVariable(g_parmType,g_parmName); g_theCallContext.popScope(); + g_inForEachExpression = FALSE; //g_theCallContext.setClass(0); // commented out, otherwise a()->b() does not work for b(). g_code->codify(yytext); if (--g_bracketCount<=0) @@ -2595,7 +2664,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} codifyLines(yytext); g_bracketCount=0; if (*yytext==';') g_searchingForBody=FALSE; - if (!g_inClass && !g_type.isEmpty()) + if (!g_type.isEmpty()) { //fprintf(stderr,"add variable g_type=%s g_name=%s)\n",g_type.data(),g_name.data()); g_theVarContext.addVariable(g_type,g_name); @@ -2617,12 +2686,12 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} BEGIN( SkipInits ); } } -<CallEnd>("const"|"volatile")({BN}+("const"|"volatile"))*{BN}*/[;=] { +<CallEnd>("const"|"volatile"|"sealed"|"override")({BN}+("const"|"volatile"|"sealed"|"override"))*/{BN}*(";"|"="|"throw"{BN}*"(") { startFontClass("keyword"); codifyLines(yytext); endFontClass(); } -<CallEnd,OldStyleArgs>("const"|"volatile")*({BN}+("const"|"volatile"))*{BN}*"{" { +<CallEnd,OldStyleArgs>("const"|"volatile"|"sealed"|"override")*({BN}+("const"|"volatile"|"sealed"|"override"))*{BN}*"{" { if (g_insideBody) { g_theVarContext.pushScope(); @@ -3139,6 +3208,8 @@ void resetCCodeParserState() { //printf("***initParseCodeContext()\n"); g_theVarContext.clear(); + g_classScopeLengthStack.setAutoDelete(TRUE); + g_classScopeLengthStack.clear(); delete g_codeClassSDict; g_codeClassSDict = new ClassSDict(17); g_codeClassSDict->setAutoDelete(TRUE); diff --git a/src/commentcnv.h b/src/commentcnv.h index 7ccbc4f..5924135 100644 --- a/src/commentcnv.h +++ b/src/commentcnv.h @@ -1,6 +1,6 @@ /***************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/commentcnv.l b/src/commentcnv.l index c26334e..b988c67 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -1,6 +1,6 @@ /***************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/commentscan.l b/src/commentscan.l index dc80846..82178d4 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -656,24 +656,31 @@ static inline void setOutput(OutputContext ctx) } } + int oldContext = inContext; inContext = ctx; if (inContext!=OutputXRef && inBody) inContext=OutputInbody; switch(inContext) { case OutputDoc: - stripTrailingWhiteSpace(current->doc); - if (current->docFile.isEmpty()) + if (oldContext!=inContext) { - current->docFile = yyFileName; - current->docLine = yyLineNr; + stripTrailingWhiteSpace(current->doc); + if (current->docFile.isEmpty()) + { + current->docFile = yyFileName; + current->docLine = yyLineNr; + } } pOutputString = ¤t->doc; break; case OutputBrief: - if (current->briefFile.isEmpty()) + if (oldContext!=inContext) { - current->briefFile = yyFileName; - current->briefLine = yyLineNr; + if (current->briefFile.isEmpty()) + { + current->briefFile = yyFileName; + current->briefLine = yyLineNr; + } } pOutputString = ¤t->brief; break; diff --git a/src/compound.xsd b/src/compound.xsd index f08e5e6..a407210 100644 --- a/src/compound.xsd +++ b/src/compound.xsd @@ -147,8 +147,22 @@ <xsd:attribute name="virt" type="DoxVirtualKind" /> <xsd:attribute name="volatile" type="DoxBool" /> <xsd:attribute name="mutable" type="DoxBool" /> + <!-- Qt property --> <xsd:attribute name="readable" type="DoxBool" use="optional"/> <xsd:attribute name="writable" type="DoxBool" use="optional"/> + <!-- C++/CLI variable --> + <xsd:attribute name="initonly" type="DoxBool" use="optional"/> + <!-- C++/CLI and C# property --> + <xsd:attribute name="settable" type="DoxBool" use="optional"/> + <xsd:attribute name="gettable" type="DoxBool" use="optional"/> + <!-- C++/CLI function --> + <xsd:attribute name="final" type="DoxBool" use="optional"/> + <xsd:attribute name="sealed" type="DoxBool" use="optional"/> + <xsd:attribute name="new" type="DoxBool" use="optional"/> + <!-- C++/CLI event --> + <xsd:attribute name="add" type="DoxBool" use="optional"/> + <xsd:attribute name="remove" type="DoxBool" use="optional"/> + <xsd:attribute name="raise" type="DoxBool" use="optional"/> </xsd:complexType> <xsd:complexType name="descriptionType" mixed="true"> diff --git a/src/compound_xsd.h b/src/compound_xsd.h index 9a73283..ded516c 100644 --- a/src/compound_xsd.h +++ b/src/compound_xsd.h @@ -147,8 +147,22 @@ " <xsd:attribute name=\"virt\" type=\"DoxVirtualKind\" />\n" " <xsd:attribute name=\"volatile\" type=\"DoxBool\" />\n" " <xsd:attribute name=\"mutable\" type=\"DoxBool\" />\n" +" <!-- Qt property -->\n" " <xsd:attribute name=\"readable\" type=\"DoxBool\" use=\"optional\"/>\n" " <xsd:attribute name=\"writable\" type=\"DoxBool\" use=\"optional\"/>\n" +" <!-- C++/CLI variable -->\n" +" <xsd:attribute name=\"initonly\" type=\"DoxBool\" use=\"optional\"/>\n" +" <!-- C++/CLI and C# property -->\n" +" <xsd:attribute name=\"settable\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"gettable\" type=\"DoxBool\" use=\"optional\"/>\n" +" <!-- C++/CLI function -->\n" +" <xsd:attribute name=\"final\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"sealed\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"new\" type=\"DoxBool\" use=\"optional\"/>\n" +" <!-- C++/CLI event -->\n" +" <xsd:attribute name=\"add\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"remove\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"raise\" type=\"DoxBool\" use=\"optional\"/>\n" " </xsd:complexType>\n" "\n" " <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n" diff --git a/src/config.l b/src/config.l index 59f42f3..1c1dae7 100644 --- a/src/config.l +++ b/src/config.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -1557,6 +1557,12 @@ void Config::create() FALSE ); cb = addBool( + "CPP_CLI_SUPPORT", + "If you use Microsoft's C++/CLI language, you should set this option to YES to\n" + "enable parsing support.\n", + FALSE + ); + cb = addBool( "DISTRIBUTE_GROUP_DOC", "If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n" "tag is set to YES, then doxygen will reuse the documentation of the first \n" diff --git a/src/constexp.h b/src/constexp.h index 1a6c37b..67a7446 100644 --- a/src/constexp.h +++ b/src/constexp.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/constexp.l b/src/constexp.l index 3a09242..9b1409f 100644 --- a/src/constexp.l +++ b/src/constexp.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/constexp.y b/src/constexp.y index 81282dc..68b1ee9 100644 --- a/src/constexp.y +++ b/src/constexp.y @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/cppvalue.cpp b/src/cppvalue.cpp index f1df666..4a59661 100644 --- a/src/cppvalue.cpp +++ b/src/cppvalue.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/cppvalue.h b/src/cppvalue.h index 0a8d638..17ca81a 100644 --- a/src/cppvalue.h +++ b/src/cppvalue.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/debug.cpp b/src/debug.cpp index 258980e..7e8f9a2 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/debug.h b/src/debug.h index 777b8fe..179e309 100644 --- a/src/debug.h +++ b/src/debug.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/declinfo.h b/src/declinfo.h index 28c8add..4e83840 100644 --- a/src/declinfo.h +++ b/src/declinfo.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/declinfo.l b/src/declinfo.l index c269700..f580edf 100644 --- a/src/declinfo.l +++ b/src/declinfo.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/defargs.h b/src/defargs.h index aeb8175..87c5990 100644 --- a/src/defargs.h +++ b/src/defargs.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/defargs.l b/src/defargs.l index e5a2de4..ec24ba0 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/defgen.cpp b/src/defgen.cpp index 428cef4..529b913 100644 --- a/src/defgen.cpp +++ b/src/defgen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/defgen.h b/src/defgen.h index 0e03064..1bb562f 100644 --- a/src/defgen.h +++ b/src/defgen.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/define.cpp b/src/define.cpp index 12846b9..fbce9b9 100644 --- a/src/define.cpp +++ b/src/define.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/define.h b/src/define.h index fc32bfe..9779ca5 100644 --- a/src/define.h +++ b/src/define.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/definition.cpp b/src/definition.cpp index 3c00fbb..528a8d1 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/definition.h b/src/definition.h index 9e2790d..f13a8b8 100644 --- a/src/definition.h +++ b/src/definition.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/diagram.cpp b/src/diagram.cpp index d169617..15d2971 100644 --- a/src/diagram.cpp +++ b/src/diagram.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/diagram.h b/src/diagram.h index bf95ef7..ad8caac 100644 --- a/src/diagram.h +++ b/src/diagram.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/dirdef.h b/src/dirdef.h index d8d7cf1..21aaa5f 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/docparser.cpp b/src/docparser.cpp index d28164f..a2a7ef0 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. @@ -2037,6 +2037,34 @@ DocRef::DocRef(DocNode *parent,const QString &target) : target.data()); } +static void flattenParagraphs(QList<DocNode> &children) +{ + QListIterator<DocNode> li(children); + QList<DocNode> newChildren; + DocNode *dn; + for (li.toFirst();(dn=li.current());++li) + { + if (dn->kind()==DocNode::Kind_Para) + { + DocPara *para = (DocPara*)dn; + QList<DocNode> ¶Children = para->children(); + paraChildren.setAutoDelete(FALSE); // unlink children from paragraph node + QListIterator<DocNode> li2(paraChildren); + DocNode *dn2; + for (li2.toFirst();(dn2=li2.current());++li2) + { + newChildren.append(dn2); // add them to new node + } + } + } + children.clear(); + QListIterator<DocNode> li3(newChildren); + for (li3.toFirst();(dn=li3.current());++li3) + { + children.append(dn); + } +} + void DocRef::parse() { g_nodeStack.push(this); @@ -2072,6 +2100,7 @@ void DocRef::parse() internalValidatingParseDoc(this,m_children,m_text); docParserPopContext(); g_insideHtmlLink=FALSE; + flattenParagraphs(m_children); } handlePendingStyleCommands(this,m_children); @@ -4799,6 +4828,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag { DocRef *ref = new DocRef(this,cref); m_children.append(ref); + ref->parse(); } else { diff --git a/src/docparser.h b/src/docparser.h index faa3d58..89c85fe 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. @@ -971,6 +971,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode bool isFirst() const { return m_isFirst; } bool isLast() const { return m_isLast; } const QList<DocNode> &children() const { return m_children; } + QList<DocNode> &children() { return m_children; } int handleCommand(const QString &cmdName); int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs); diff --git a/src/doctokenizer.h b/src/doctokenizer.h index ffa8ad3..f283fc7 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/doctokenizer.l b/src/doctokenizer.l index c3aafba..374b4e4 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/docvisitor.h b/src/docvisitor.h index 5a5200c..1bfd660 100644 --- a/src/docvisitor.h +++ b/src/docvisitor.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/dot.cpp b/src/dot.cpp index 1e1b3c5..37268ee 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 2aff8fd..15e56dc 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. @@ -1000,32 +1000,45 @@ ArgumentList *getTemplateArgumentsFromName( return ali.current(); } -static ClassDef::CompoundType convertToCompoundType(int section) +static ClassDef::CompoundType convertToCompoundType(int section,int specifier) { ClassDef::CompoundType sec=ClassDef::Class; + if (specifier&Entry::Struct) + sec=ClassDef::Struct; + else if (specifier&Entry::Union) + sec=ClassDef::Union; + else if (specifier&Entry::Interface) + sec=ClassDef::Interface; + else if (specifier&Entry::Protocol) + sec=ClassDef::Protocol; + else if (specifier&Entry::Category) + sec=ClassDef::Category; + else if (specifier&Entry::Exception) + sec=ClassDef::Exception; + switch(section) { - case Entry::UNION_SEC: + //case Entry::UNION_SEC: case Entry::UNIONDOC_SEC: sec=ClassDef::Union; break; - case Entry::STRUCT_SEC: + //case Entry::STRUCT_SEC: case Entry::STRUCTDOC_SEC: sec=ClassDef::Struct; break; - case Entry::INTERFACE_SEC: + //case Entry::INTERFACE_SEC: case Entry::INTERFACEDOC_SEC: sec=ClassDef::Interface; break; - case Entry::PROTOCOL_SEC: + //case Entry::PROTOCOL_SEC: case Entry::PROTOCOLDOC_SEC: sec=ClassDef::Protocol; break; - case Entry::CATEGORY_SEC: + //case Entry::CATEGORY_SEC: case Entry::CATEGORYDOC_SEC: sec=ClassDef::Category; break; - case Entry::EXCEPTION_SEC: + //case Entry::EXCEPTION_SEC: case Entry::EXCEPTIONDOC_SEC: sec=ClassDef::Exception; break; @@ -1123,11 +1136,11 @@ static void addClassToContext(EntryNav *rootNav) cd->setTemplateArguments(tArgList); } - cd->setCompoundType(convertToCompoundType(root->section)); + cd->setCompoundType(convertToCompoundType(root->section,root->spec)); } else // new class { - ClassDef::CompoundType sec = convertToCompoundType(root->section); + ClassDef::CompoundType sec = convertToCompoundType(root->section,root->spec); Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n", fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1); @@ -1960,7 +1973,7 @@ static MemberDef *addVariableToClass( md->setInitializer(root->initializer); md->setMaxInitLines(root->initLines); md->setMemberGroupId(root->mGrpId); - md->setMemberSpecifiers(root->memSpec); + md->setMemberSpecifiers(root->spec); md->setReadAccessor(root->read); md->setWriteAccessor(root->write); md->enableCallGraph(root->callGraph); @@ -2606,7 +2619,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine); - md->setMemberSpecifiers(root->memSpec); + md->setMemberSpecifiers(root->spec); md->setMemberGroupId(root->mGrpId); FileDef *fd=rootNav->fileDef(); md->setBodyDef(fd); @@ -2722,7 +2735,7 @@ static void buildFunctionList(EntryNav *rootNav) Debug::print(Debug::Functions,0, "FUNCTION_SEC:\n" - " `%s' `%s'::`%s' `%s' relates=`%s' relatesDup=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d memSpec=%d proto=%d docFile=%s\n", + " `%s' `%s'::`%s' `%s' relates=`%s' relatesDup=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d spec=%d proto=%d docFile=%s\n", root->type.data(), rootNav->parent()->name().data(), root->name.data(), @@ -2734,7 +2747,7 @@ static void buildFunctionList(EntryNav *rootNav) root->bodyLine, root->tArgLists ? (int)root->tArgLists->count() : -1, root->mGrpId, - root->memSpec, + root->spec, root->proto, root->docFile.data() ); @@ -2955,7 +2968,7 @@ static void buildFunctionList(EntryNav *rootNav) FileDef *fd=rootNav->fileDef(); md->setBodyDef(fd); md->addSectionsToDefinition(root->anchors); - md->setMemberSpecifiers(root->memSpec); + md->setMemberSpecifiers(root->spec); md->setMemberGroupId(root->mGrpId); // see if the function is inside a namespace that was not part of @@ -4065,6 +4078,20 @@ static bool findClassRelation( // baseClass,baseClassName.data(),templSpec.data()); } } + else if (baseClass && !templSpec.isEmpty()) // we have a known class, but also + // know it is a template, so see if + // we can also link to the explicit + // instance (for instance if a class + // derived from a template argument) + { + ClassDef *templClass=getClass(baseClass->name()+templSpec); + if (templClass) + { + // use the template instance instead of the template base. + baseClass = templClass; + templSpec.resize(0); + } + } //printf("cd=%p baseClass=%p\n",cd,baseClass); bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances); @@ -4102,7 +4129,7 @@ static bool findClassRelation( if (found) { - Debug::print(Debug::Classes,0," Documented class `%s' templSpec=%s\n",biName.data(),templSpec.isEmpty()?"":templSpec.data()); + Debug::print(Debug::Classes,0," Documented base class `%s' templSpec=%s\n",biName.data(),templSpec.isEmpty()?"":templSpec.data()); // add base class to this class // if templSpec is not empty then we should "instantiate" @@ -4116,10 +4143,12 @@ static bool findClassRelation( // relations. if (!templSpec.isEmpty() && mode==TemplateInstances) { + //printf(" => findTemplateInstanceRelation\n"); findTemplateInstanceRelation(root,context,baseClass,templSpec,templateNames,isArtificial); } else if (mode==DocumentedOnly || mode==Undocumented) { + //printf(" => insert base class\n"); QCString usedName; if (baseClassTypeDef) { @@ -4267,7 +4296,7 @@ static void findInheritedTemplateInstances() // strip any annonymous scopes first QCString bName=stripAnonymousNamespaceScope(rootNav->name()); bName=stripTemplateSpecifiersFromScope(bName); - Debug::print(Debug::Classes,0," Class %s : \n",bName.data()); + Debug::print(Debug::Classes,0," Inheritance: Class %s : \n",bName.data()); if ((cd=getClass(bName))) { rootNav->loadEntry(g_storage); @@ -4290,7 +4319,7 @@ static void findUsedTemplateInstances() // strip any annonymous scopes first QCString bName=stripAnonymousNamespaceScope(rootNav->name()); bName=stripTemplateSpecifiersFromScope(bName); - Debug::print(Debug::Classes,0," Class %s : \n",bName.data()); + Debug::print(Debug::Classes,0," Usage: Class %s : \n",bName.data()); if ((cd=getClass(bName))) { rootNav->loadEntry(g_storage); @@ -4316,7 +4345,7 @@ static void computeClassRelations() // strip any annonymous scopes first QCString bName=stripAnonymousNamespaceScope(rootNav->name()); bName=stripTemplateSpecifiersFromScope(bName); - Debug::print(Debug::Classes,0," Class %s : \n",bName.data()); + Debug::print(Debug::Classes,0," Relations: Class %s : \n",bName.data()); if ((cd=getClass(bName))) { findBaseClassesForClass(rootNav,cd,cd,cd,DocumentedOnly,FALSE); @@ -4542,8 +4571,8 @@ static void addMemberDocs(EntryNav *rootNav, ) { Entry *root = rootNav->entry(); - //printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s' memSpec=%d\n", - // root->parent->name.data(),md->name().data(),md->argsString(),funcDecl,root->memSpec); + //printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s' mSpec=%d\n", + // root->parent->name.data(),md->name().data(),md->argsString(),funcDecl,root->spec); QCString fDecl=funcDecl; // strip extern specifier fDecl.stripPrefix("extern "); @@ -4664,7 +4693,7 @@ static void addMemberDocs(EntryNav *rootNav, md->enableCallGraph(md->hasCallGraph() || root->callGraph); md->enableCallerGraph(md->hasCallerGraph() || root->callerGraph); - md->mergeMemberSpecifiers(root->memSpec); + md->mergeMemberSpecifiers(root->spec); md->addSectionsToDefinition(root->anchors); addMemberToGroups(root,md); if (cd) cd->insertUsedFile(root->fileName); @@ -4964,10 +4993,10 @@ static void findMember(EntryNav *rootNav, Debug::print(Debug::FindMembers,0, "findMember(root=%p,funcDecl=`%s',related=`%s',overload=%d," "isFunc=%d mGrpId=%d tArgList=%p (#=%d) " - "memSpec=%d isObjC=%d\n", + "spec=%d isObjC=%d\n", root,funcDecl.data(),root->relates.data(),overloaded,isFunc,root->mGrpId, root->tArgLists,root->tArgLists ? root->tArgLists->count() : 0, - root->memSpec,root->objc + root->spec,root->objc ); QCString scopeName; @@ -4992,17 +5021,17 @@ static void findMember(EntryNav *rootNav, } if (funcDecl.stripPrefix("inline ")) { - root->memSpec|=Entry::Inline; + root->spec|=Entry::Inline; done=FALSE; } if (funcDecl.stripPrefix("explicit ")) { - root->memSpec|=Entry::Explicit; + root->spec|=Entry::Explicit; done=FALSE; } if (funcDecl.stripPrefix("mutable ")) { - root->memSpec|=Entry::Mutable; + root->spec|=Entry::Mutable; done=FALSE; } if (funcDecl.stripPrefix("virtual ")) @@ -5504,7 +5533,7 @@ static void findMember(EntryNav *rootNav, md->setBodySegment(root->bodyLine,root->endBodyLine); FileDef *fd=rootNav->fileDef(); md->setBodyDef(fd); - md->setMemberSpecifiers(root->memSpec); + md->setMemberSpecifiers(root->spec); md->setMemberGroupId(root->mGrpId); mn->append(md); cd->insertMember(md); @@ -5568,7 +5597,7 @@ static void findMember(EntryNav *rootNav, md->setBodySegment(root->bodyLine,root->endBodyLine); FileDef *fd=rootNav->fileDef(); md->setBodyDef(fd); - md->setMemberSpecifiers(root->memSpec); + md->setMemberSpecifiers(root->spec); md->setMemberGroupId(root->mGrpId); mn->append(md); cd->insertMember(md); @@ -5714,7 +5743,7 @@ static void findMember(EntryNav *rootNav, // md->setMemberGroup(memberGroupDict[root->mGrpId]); //} md->setMemberClass(cd); - md->setMemberSpecifiers(root->memSpec); + md->setMemberSpecifiers(root->spec); md->setDefinition(funcDecl); md->enableCallGraph(root->callGraph); md->enableCallerGraph(root->callerGraph); @@ -5790,7 +5819,7 @@ localObjCMethod: md->setBodySegment(root->bodyLine,root->endBodyLine); FileDef *fd=rootNav->fileDef(); md->setBodyDef(fd); - md->setMemberSpecifiers(root->memSpec); + md->setMemberSpecifiers(root->spec); md->setMemberGroupId(root->mGrpId); cd->insertMember(md); cd->insertUsedFile(root->fileName); @@ -5847,8 +5876,8 @@ static void filterMemberDocumentation(EntryNav *rootNav) Entry *root = rootNav->entry(); int i=-1,l; Debug::print(Debug::FindMembers,0, - "findMemberDocumentation(): root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d root->mGrpId=%d\n", - root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->memSpec,root->mGrpId + "findMemberDocumentation(): root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->spec=%d root->mGrpId=%d\n", + root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->spec,root->mGrpId ); //printf("rootNav->parent()->name()=%s\n",rootNav->parent()->name().data()); bool isFunc=TRUE; @@ -7184,6 +7213,30 @@ static void flushCachedTemplateRelations() } } +//---------------------------------------------------------------------------- + +static void flushUnresolvedRelations() +{ + // Remove all unresolved references to classes from the cache. + // This is needed before resolving the inheritance relations, since + // it would otherwise not find the inheritance relation + // for C in the example below, as B::I was already found to be unresolvable + // (which is correct if you igore the inheritance relation between A and B). + // + // class A { class I {} }; + // class B : public A {}; + // class C : public B::I {}; + // + QCacheIterator<LookupInfo> ci(Doxygen::lookupCache); + LookupInfo *li=0; + for (ci.toFirst();(li=ci.current());++ci) + { + if (li->classDef==0 && li->typeDef==0) + { + Doxygen::lookupCache.remove(ci.currentKey()); + } + } +} //---------------------------------------------------------------------------- @@ -9416,9 +9469,10 @@ void parseInput() msg("Searching for documented defines...\n"); findDefineDocumentation(rootNav); - msg("Computing template instances...\n"); findClassEntries(rootNav); + msg("Computing class inheritance relations...\n"); findInheritedTemplateInstances(); + msg("Computing class usage relations...\n"); findUsedTemplateInstances(); msg("Flushing cached template relations that have become invalid...\n"); @@ -9429,6 +9483,7 @@ void parseInput() msg("Computing class relations...\n"); computeTemplateClassRelations(); + flushUnresolvedRelations(); computeClassRelations(); classEntries.clear(); diff --git a/src/doxygen.h b/src/doxygen.h index c52829c..4227f4a 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/doxygen.pro.in b/src/doxygen.pro.in index 7d1e812..99e241f 100644 --- a/src/doxygen.pro.in +++ b/src/doxygen.pro.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/src/doxytag.l b/src/doxytag.l index 53e89a3..2a1f0a1 100644 --- a/src/doxytag.l +++ b/src/doxytag.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/doxytag.pro.in b/src/doxytag.pro.in index 8df2777..3d4e9f8 100644 --- a/src/doxytag.pro.in +++ b/src/doxytag.pro.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/src/doxytag.t b/src/doxytag.t index 82cf04b..5a5fbc1 100644 --- a/src/doxytag.t +++ b/src/doxytag.t @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/src/entry.cpp b/src/entry.cpp index 1aa6b6d..0d0cb4f 100644 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -89,7 +89,7 @@ Entry::Entry(const Entry &e) mGrpId = e.mGrpId; bodyLine = e.bodyLine; endBodyLine = e.endBodyLine; - memSpec = e.memSpec; + spec = e.spec; initializer = e.initializer; initLines = e.initLines; callGraph = e.callGraph; @@ -241,7 +241,7 @@ void Entry::reset() stat = FALSE; proto = FALSE; explicitExternal = FALSE; - memSpec = 0; + spec = 0; objc = FALSE; hidden = FALSE; subGrouping = TRUE; @@ -343,7 +343,7 @@ static bool saveEntry(Entry *e,FileStorage *f) marshalUInt(f,HEADER); marshalInt(f,(int)e->protection); marshalInt(f,(int)e->mtype); - marshalInt(f,e->memSpec); + marshalInt(f,e->spec); marshalInt(f,e->initLines); marshalBool(f,e->stat); marshalBool(f,e->explicitExternal); @@ -401,7 +401,7 @@ static bool loadEntry(Entry *e,FileStorage *f) } e->protection = (Protection)unmarshalInt(f); e->mtype = (MethodTypes)unmarshalInt(f); - e->memSpec = unmarshalInt(f); + e->spec = unmarshalInt(f); e->initLines = unmarshalInt(f); e->stat = unmarshalBool(f); e->explicitExternal = unmarshalBool(f); diff --git a/src/entry.h b/src/entry.h index 50100ae..ba1abaf 100644 --- a/src/entry.h +++ b/src/entry.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -113,7 +113,8 @@ class ArgumentList : public QList<Argument> ArgumentList() : QList<Argument>(), constSpecifier(FALSE), volatileSpecifier(FALSE), - pureSpecifier(FALSE) { setAutoDelete(TRUE); } + pureSpecifier(FALSE) + { setAutoDelete(TRUE); } /*! Destroys the argument list */ ~ArgumentList() {} bool hasDocumentation() const; @@ -187,16 +188,17 @@ class Entry /*! Kind of entries that are supported */ enum Sections { CLASS_SEC = 0x00000001, - STRUCT_SEC = 0x00000002, - UNION_SEC = 0x00000004, - EXCEPTION_SEC = 0x00000008, + //STRUCT_SEC = 0x00000002, + //UNION_SEC = 0x00000004, + //EXCEPTION_SEC = 0x00000008, NAMESPACE_SEC = 0x00000010, - INTERFACE_SEC = 0x00000020, - PROTOCOL_SEC = 0x00000040, - CATEGORY_SEC = 0x00000080, - COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC | - INTERFACE_SEC | EXCEPTION_SEC | - PROTOCOL_SEC | CATEGORY_SEC, + //INTERFACE_SEC = 0x00000020, + //PROTOCOL_SEC = 0x00000040, + //CATEGORY_SEC = 0x00000080, + COMPOUND_MASK = CLASS_SEC //| STRUCT_SEC | UNION_SEC | + //INTERFACE_SEC | EXCEPTION_SEC | + //PROTOCOL_SEC | CATEGORY_SEC + , SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC, CLASSDOC_SEC = 0x00000800, @@ -251,6 +253,28 @@ class Entry Writable = 0x0040, Final = 0x0080, Abstract = 0x0100, + Addable = 0x0200, + Removable = 0x0400, + Raisable = 0x0800, + Override = 0x1000, + New = 0x2000, + Sealed = 0x4000, + Initonly = 0x8000 + }; + enum ClassSpecifier + { + Template = 0x0001, + Generic = 0x0002, + Ref = 0x0004, + Value = 0x0008, + Interface = 0x0010, + Struct = 0x0020, + Union = 0x0040, + Exception = 0x0080, + Protocol = 0x0100, + Category = 0x0200, + SealedClass = 0x0400, + AbstractClass = 0x0800 }; enum GroupDocType { @@ -290,7 +314,7 @@ class Entry // content Protection protection; //!< class protection MethodTypes mtype; //!< signal, slot, (dcop) method, or property? - int memSpec; //!< member specifiers + int spec; //!< class/member specifiers int initLines; //!< define/variable initializer lines to show bool stat; //!< static ? bool explicitExternal; //!< explicitly defined as external? diff --git a/src/example.h b/src/example.h index 4b6e06e..4b795c3 100644 --- a/src/example.h +++ b/src/example.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/filedef.cpp b/src/filedef.cpp index 0a3c814..4968f50 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/filedef.h b/src/filedef.h index c5b99ab..cda5730 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/filename.cpp b/src/filename.cpp index 2399124..3126811 100644 --- a/src/filename.cpp +++ b/src/filename.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/filename.h b/src/filename.h index c1b30b6..749bf4e 100644 --- a/src/filename.h +++ b/src/filename.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/formula.cpp b/src/formula.cpp index 07d60d2..fbe02ee 100644 --- a/src/formula.cpp +++ b/src/formula.cpp @@ -1,6 +1,6 @@ /****************************************************************************** i - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/formula.h b/src/formula.h index a4c0f53..9438f37 100644 --- a/src/formula.h +++ b/src/formula.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 13a5681..c429780 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/groupdef.h b/src/groupdef.h index 25bc79d..b4c31bf 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/htmlattrib.h b/src/htmlattrib.h index 9a1609b..cc87b23 100644 --- a/src/htmlattrib.h +++ b/src/htmlattrib.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 17e6dd6..4eb6a8a 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h index f70d367..069d3f9 100644 --- a/src/htmldocvisitor.h +++ b/src/htmldocvisitor.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 0f4d242..90184f2 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -431,13 +431,13 @@ static const char tabs_css[] = " background-position: 0% -150px;\n" "}\n" "\n" -"DIV.tabs LI#current A\n" +"DIV.tabs LI.current A\n" "{\n" " background-position: 100% -150px;\n" " border-width : 0px;\n" "}\n" "\n" -"DIV.tabs LI#current SPAN\n" +"DIV.tabs LI.current SPAN\n" "{\n" " background-position: 0% -150px;\n" " padding-bottom : 6px;\n" @@ -1580,7 +1580,7 @@ static void endQuickIndexList(QTextStream &t,bool compact) { if (compact) { - t << " </ul>"; + t << " </ul>\n"; t << "</div>\n"; } else @@ -1593,7 +1593,7 @@ static void startQuickIndexItem(QTextStream &t,const char *l, bool hl,bool /*compact*/, const QCString &relPath) { - t << " <li"; if (hl) t << " id=\"current\""; + t << " <li"; if (hl) t << " class=\"current\""; t << "><a "; t << "href=\"" << relPath << l << "\">"; t << "<span>"; diff --git a/src/htmlgen.h b/src/htmlgen.h index 88a8841..a8a3225 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index c9328e6..598ed6a 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/htmlhelp.h b/src/htmlhelp.h index 67e0e20..f323894 100644 --- a/src/htmlhelp.h +++ b/src/htmlhelp.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/image.cpp b/src/image.cpp index ee00835..e769c76 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/image.h b/src/image.h index 49ba9ba..998b93d 100644 --- a/src/image.h +++ b/src/image.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/index.cpp b/src/index.cpp index 49a8609..7345347 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -15,6 +15,10 @@ * */ +/** @file + * @brief This file contains functions for the various index pages. + */ + #include <stdlib.h> #include <qtextstream.h> @@ -211,7 +215,7 @@ static void startQuickIndexItem(OutputList &ol,const char *l, if (fancyTabs) { ol.writeString(" <li"); - if (hl) ol.writeString(" id=\"current\""); + if (hl) ol.writeString(" class=\"current\""); ol.writeString("><a "); } else @@ -1151,7 +1155,7 @@ void writeAnnotatedClassList(OutputList &ol) { if (cd->isLinkableInProject() && cd->templateMaster()==0) { - int c = cd->displayName().at(0); + int c = cd->displayName().at(getPrefixIndex(cd->displayName())); g_classIndexLetterUsed[CHL_All][c]=TRUE; switch(cd->compoundType()) { @@ -1559,17 +1563,21 @@ static void writeNamespaceLinkForMember(OutputList &ol,MemberDef *md,const char } } -typedef void (*writeLinkForMember_t)(OutputList &ol,MemberDef *md,const char *separator, - QCString &prevNamespaceName); - static void writeMemberList(OutputList &ol,bool useSections,int page, MemberIndexList memberLists[MEMBER_INDEX_ENTRIES], DefinitionIntf::DefType type) { int pi; + // page==-1 => write all member indices to one page (used when total members is small) + // page!=-1 => write all member for this page only (used when total member is large) int startIndex = page==-1 ? 0 : page; int endIndex = page==-1 ? MEMBER_INDEX_ENTRIES-1 : page; ASSERT((int)type<3); + + typedef void (*writeLinkForMember_t)(OutputList &ol,MemberDef *md,const char *separator, + QCString &prevNamespaceName); + + // each index tab has its own write function static writeLinkForMember_t writeLinkForMemberMap[3] = { &writeClassLinkForMember, @@ -1593,13 +1601,16 @@ static void writeMemberList(OutputList &ol,bool useSections,int page, bool isFunc=!md->isObjCMethod() && (md->isFunction() || md->isSlot() || md->isSignal()); QCString name=md->name(); - if (name!=prevName) // same entry + int startIndex = getPrefixIndex(name); + if (QCString(name.data()+startIndex)!=prevName) // new entry { - if ((prevName.isEmpty() || tolower(name.at(0))!=tolower(prevName.at(0))) && useSections) // new section + if ((prevName.isEmpty() || + tolower(name.at(startIndex))!=tolower(prevName.at(0))) && + useSections) // new section { if (!firstSection) ol.endItemList(); char cs[2]; - cs[0]=tolower(name.at(0));cs[1]='\0'; + cs[0]=tolower(name.at(startIndex));cs[1]='\0'; QCString anchor=(QCString)"index_"+cs; QCString title=(QCString)"- "+cs+" -"; ol.startSection(anchor,title,SectionInfo::Subsection); @@ -1623,118 +1634,18 @@ static void writeMemberList(OutputList &ol,bool useSections,int page, // link to class prevDefName=""; sep = ": "; - prevName = name; + prevName = name.data()+startIndex; } else // same entry { sep = ", "; // link to class for other members with the same name } + // write the link for the specific list type writeLinkForMemberMap[(int)type](ol,md,sep,prevDefName); } } ol.endItemList(); - -#if 0 - bool first = TRUE; - char lastChar = 0; - static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS"); - - MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict); - MemberName *mn=0; - for (mnli.toFirst();(mn=mnli.current());++mnli) - { - if (sectionFilter==0 || tolower(sectionFilter)==tolower(mn->memberName()[0])) - { - MemberDef *md=mn->first(); - bool found=FALSE; - bool isFunc=FALSE; - while (md && !found) - { - ClassDef *cd; - bool isFriendToHide = hideFriendCompounds && - (QCString(md->typeString())=="friend class" || - QCString(md->typeString())=="friend struct" || - QCString(md->typeString())=="friend union"); - if ( - md->isLinkableInProject() && - (cd=md->getClassDef()) && - cd->isLinkableInProject() && cd->templateMaster()==0 && - ( (filter==CMHL_All && !(md->isFriend() && isFriendToHide)) || - (filter==CMHL_Functions && (md->isFunction() || md->isSlot() || md->isSignal())) || - (filter==CMHL_Variables && md->isVariable()) || - (filter==CMHL_Typedefs && md->isTypedef()) || - (filter==CMHL_Enums && md->isEnumerate()) || - (filter==CMHL_EnumValues && md->isEnumValue()) || - (filter==CMHL_Properties && md->isProperty()) || - (filter==CMHL_Events && md->isEvent()) || - (filter==CMHL_Related && (md->isRelated() || (md->isFriend() && !isFriendToHide))) - ) - ) - { - found=TRUE; - isFunc=!md->isObjCMethod() && - (md->isFunction() || md->isSlot() || md->isSignal()); - } - md=mn->next(); - } - if (found) - { - if (useSections) - { - QCString name = mn->memberName(); - if (tolower(name.at(0))!=lastChar) - { - if (!first) ol.endItemList(); - char cs[2]; - lastChar=cs[0]=tolower(name.at(0));cs[1]='\0'; - QCString anchor=(QCString)"index_"+cs; - QCString title=(QCString)"- "+cs+" -"; - ol.startSection(anchor,title,SectionInfo::Subsection); - ol.docify(title); - ol.endSection(anchor,SectionInfo::Subsection); - ol.startItemList(); - first=FALSE; - } - } - else if (first) - { - first=FALSE; - ol.startItemList(); - } - ol.writeListItem(); - ol.docify(mn->memberName()); - if (isFunc) ol.docify("()"); - ol.writeString("\n"); - - int count=0; - md=mn->last(); - QCString prevName; - while (md) - { - ClassDef *cd=md->getClassDef(); - if ( - md->isLinkableInProject() && - prevName!=cd->displayName() && - cd->templateMaster()==0 - ) - { - if (count==0) - ol.docify(": "); - else - ol.docify(", "); - ol.writeObjectLink(md->getReference(),md->getOutputFileBase(),md->anchor(), - cd->displayName()); - count++; - prevName=cd->displayName(); - } - md=mn->prev(); - } - } - } - } - ol.endItemList(); -#endif } //---------------------------------------------------------------------------- @@ -1763,7 +1674,8 @@ void addClassMemberNameToIndex(MemberDef *md) cd->templateMaster()==0) { QCString n = md->name(); - int letter = tolower(n.at(0)) & 0x7f; + int index = getPrefixIndex(n); + int letter = tolower(n.at(index)) & 0x7f; if (!n.isEmpty()) { bool isFriendToHide = hideFriendCompounds && @@ -1819,56 +1731,6 @@ void addClassMemberNameToIndex(MemberDef *md) } } -#if 0 -int countClassMembers(int filter) -{ - static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS"); - int i=0;for (i=0;i<256;i++) g_memberIndexLetterUsed[filter][i]=FALSE; - int count=0; - MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict); - MemberName *mn=0; - for (mnli.toFirst();(mn=mnli.current());++mnli) - { - MemberDef *md=mn->first(); - bool found=FALSE; - ClassDef *cd; - while (md && !found) - { - bool isFriendToHide = hideFriendCompounds && - (QCString(md->typeString())=="friend class" || - QCString(md->typeString())=="friend struct" || - QCString(md->typeString())=="friend union"); - if ( - md->isLinkableInProject() && - (cd=md->getClassDef()) && - cd->isLinkableInProject() && - ( filter==CMHL_All && !(md->isFriend() && isFriendToHide) || - (filter==CMHL_Functions && (md->isFunction() || md->isSlot() || md->isSignal())) || - (filter==CMHL_Variables && md->isVariable()) || - (filter==CMHL_Typedefs && md->isTypedef()) || - (filter==CMHL_Enums && md->isEnumerate()) || - (filter==CMHL_EnumValues && md->isEnumValue()) || - (filter==CMHL_Properties && md->isProperty()) || - (filter==CMHL_Events && md->isEvent()) || - (filter==CMHL_Related && (md->isRelated() || (md->isFriend() && !isFriendToHide))) - ) - ) - { - found=TRUE; - } - md=mn->next(); - } - if (found) - { - QCString n = mn->memberName(); - if (!n.isEmpty()) g_memberIndexLetterUsed[filter][tolower(n.at(0))]=TRUE; - count++; - } - } - return count; -} -#endif - //---------------------------------------------------------------------------- void initNamespaceMemberIndices() @@ -1891,7 +1753,8 @@ void addNamespaceMemberNameToIndex(MemberDef *md) if (nd && nd->isLinkableInProject() && md->isLinkableInProject()) { QCString n = md->name(); - int letter = tolower(n.at(0)); + int index = getPrefixIndex(n); + int letter = tolower(n.at(index)); if (!n.isEmpty()) { g_namespaceIndexLetterUsed[NMHL_All][letter].append(md); @@ -1926,43 +1789,6 @@ void addNamespaceMemberNameToIndex(MemberDef *md) } } -#if 0 -int countNamespaceMembers(int filter) -{ - int i=0;for (i=0;i<256;i++) g_namespaceIndexLetterUsed[filter][i]=FALSE; - int count=0; - MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict); - MemberName *mn=0; - for (mnli.toFirst();(mn=mnli.current());++mnli) - { - MemberDef *md=mn->first(); - bool found=FALSE; - while (md && !found) - { - NamespaceDef *nd=md->getNamespaceDef(); - if (nd && nd->isLinkableInProject() && md->isLinkableInProject() && - ( filter==NMHL_All || - (filter==NMHL_Functions && md->isFunction()) || - (filter==NMHL_Variables && md->isVariable()) || - (filter==NMHL_Typedefs && md->isTypedef()) || - (filter==NMHL_Enums && md->isEnumerate()) || - (filter==NMHL_EnumValues && md->isEnumValue()) - ) - ) - { - QCString n = mn->memberName(); - if (!n.isEmpty()) g_namespaceIndexLetterUsed[filter][tolower(n.at(0))]=TRUE; - found=TRUE; - } - else - md=mn->next(); - } - if (found) count++; - } - return count; -} -#endif - //---------------------------------------------------------------------------- void initFileMemberIndices() @@ -1985,7 +1811,8 @@ void addFileMemberNameToIndex(MemberDef *md) if (fd && fd->isLinkableInProject() && md->isLinkableInProject()) { QCString n = md->name(); - int letter = tolower(n.at(0)); + int index = getPrefixIndex(n); + int letter = tolower(n.at(index)); if (!n.isEmpty()) { g_fileIndexLetterUsed[FMHL_All][letter].append(md); @@ -2025,49 +1852,6 @@ void addFileMemberNameToIndex(MemberDef *md) } } -#if 0 -int countFileMembers(int filter) -{ - int i=0;for (i=0;i<256;i++) g_fileIndexLetterUsed[filter][i]=FALSE; - int count=0; - MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict); - MemberName *mn=0; - for (mnli.toFirst();(mn=mnli.current());++mnli) - { - MemberDef *md=mn->first(); - FileDef *fd; - bool found=FALSE; - while (md && !found) - { - if (md->isLinkableInProject() && - (fd=md->getFileDef()) && - fd->isLinkableInProject() && - ( filter==FMHL_All || - (filter==FMHL_Functions && md->isFunction()) || - (filter==FMHL_Variables && md->isVariable()) || - (filter==FMHL_Typedefs && md->isTypedef()) || - (filter==FMHL_Enums && md->isEnumerate()) || - (filter==FMHL_EnumValues && md->isEnumValue()) || - (filter==FMHL_Defines && md->isDefine()) - ) - ) - { - QCString n = mn->memberName(); - if (!n.isEmpty()) - { - g_fileIndexLetterUsed[filter][tolower(n.at(0))]=TRUE; - } - found=TRUE; - } - else - md=mn->next(); - } - if (found) count++; - } - return count; -} -#endif - //---------------------------------------------------------------------------- void writeQuickMemberIndex(OutputList &ol, @@ -2240,200 +2024,6 @@ void writeClassMemberIndex(OutputList &ol) //---------------------------------------------------------------------------- -#if 0 -static void writeFileMemberList(OutputList &ol, - bool useSections, - FileMemberHighlight filter, - char sectionFilter) -{ - char lastChar=0; - bool first=TRUE; - MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict); - MemberName *mn=0; - for (mnli.toFirst();(mn=mnli.current());++mnli) - { - if (sectionFilter==0 || tolower(sectionFilter)==tolower(mn->memberName()[0])) - { - MemberDef *md=mn->first(); - bool found=FALSE; - while (md && !found) - { - FileDef *fd=md->getFileDef(); - bool hasDocs = md->getFileDef() && - md->getFileDef()->isLinkableInProject(); - - if (fd && hasDocs && - md->isLinkableInProject() && - ( filter==FMHL_All || - (filter==FMHL_Functions && md->isFunction()) || - (filter==FMHL_Variables && md->isVariable()) || - (filter==FMHL_Typedefs && md->isTypedef()) || - (filter==FMHL_Enums && md->isEnumerate()) || - (filter==FMHL_EnumValues && md->isEnumValue()) || - (filter==FMHL_Defines && md->isDefine()) - ) - ) - { - found=TRUE; - } - else - { - md=mn->next(); - } - } - if (found) // function is documented - { - if (useSections) - { - QCString name = mn->memberName(); - if (tolower(name.at(0))!=lastChar) - { - if (!first) ol.endItemList(); - char cs[2]; - lastChar=cs[0]=tolower(name.at(0));cs[1]='\0'; - QCString anchor=(QCString)"index_"+cs; - QCString title=(QCString)"- "+cs+" -"; - ol.startSection(anchor,title,SectionInfo::Subsection); - ol.docify(title); - ol.endSection(anchor,SectionInfo::Subsection); - ol.startItemList(); - first=FALSE; - } - } - else if (first) - { - first=FALSE; - ol.startItemList(); - } - ol.writeListItem(); - ol.docify(md->name()); - if (md->isFunction()) ol.docify("()"); - ol.writeString("\n"); - - int count=0; - md=mn->last(); - QCString prevName; - while (md) - { - FileDef *fd=md->getFileDef(); - if (fd && fd->isLinkableInProject() && - md->isLinkableInProject() && - prevName!=fd->name()) - { - if (count==0) - ol.docify(": "); - else - ol.docify(", "); - QCString baseName=fd->name(); - ol.writeObjectLink(md->getReference(), - md->getOutputFileBase(),md->anchor(), baseName); - count++; - prevName=fd->name(); - } - md=mn->prev(); - } - } - } - } - ol.endItemList(); -} - -//---------------------------------------------------------------------------- - -void writeNamespaceMemberList(OutputList &ol,bool useSections, - NamespaceMemberHighlight filter, - char sectionFilter) -{ - char lastChar=0; - bool first=TRUE; - MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict); - MemberName *mn=0; - for (mnli.toFirst();(mn=mnli.current());++mnli) - { - if (sectionFilter==0 || tolower(sectionFilter)==tolower(mn->memberName()[0])) - { - MemberDef *md=mn->first(); - bool found=FALSE; - while (md && !found) - { - NamespaceDef *nd=md->getNamespaceDef(); - if (nd && nd->isLinkableInProject() && md->isLinkableInProject() && - ( filter==NMHL_All || - (filter==NMHL_Functions && md->isFunction()) || - (filter==NMHL_Variables && md->isVariable()) || - (filter==NMHL_Typedefs && md->isTypedef()) || - (filter==NMHL_Enums && md->isEnumerate()) || - (filter==NMHL_EnumValues && md->isEnumValue()) - ) - ) - { - found=TRUE; - } - else - { - md=mn->next(); - } - } - if (found) // member is documented and in a documented namespace - { - if (useSections) - { - QCString name = mn->memberName(); - if (tolower(name.at(0))!=lastChar) - { - if (!first) ol.endItemList(); - char cs[2]; - lastChar=cs[0]=tolower(name.at(0));cs[1]='\0'; - QCString anchor=(QCString)"index_"+cs; - QCString title=(QCString)"- "+cs+" -"; - ol.startSection(anchor,title,SectionInfo::Subsection); - ol.docify(title); - ol.endSection(anchor,SectionInfo::Subsection); - ol.startItemList(); - first=FALSE; - } - } - else if (first) - { - ol.startItemList(); - first=FALSE; - } - ol.writeListItem(); - ol.docify(md->name()); - if (md->isFunction()) ol.docify("()"); - ol.writeString("\n"); - - int count=0; - md=mn->last(); - QCString prevName; - while (md) - { - NamespaceDef *nd=md->getNamespaceDef(); - if (nd && nd->isLinkableInProject() && md->isLinkableInProject() && - prevName!=nd->name() - ) - { - if (count==0) - ol.docify(": "); - else - ol.docify(", "); - ol.writeObjectLink(md->getReference(),md->getOutputFileBase(), - md->anchor(),nd->name()); - count++; - prevName=nd->name(); - } - md=mn->prev(); - } - } - } - } - if (!first) ol.endItemList(); -} -#endif - -//---------------------------------------------------------------------------- - - static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) { if (documentedFileMembers[hl]==0) return; @@ -3164,71 +2754,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) theTranslator->trVariables(),htmlHelp,ftvHelp); writeGroupIndexItem(gd,gd->getMemberList(MemberList::docProtoMembers), theTranslator->trFuncProtos(),htmlHelp,ftvHelp); -#if 0 - - // write members - struct MemInfo - { - MemInfo(MemberList *l,const QCString &n) { list=l; name=n; } - MemberList *list; - QCString name; - }; - MemInfo memberLists[] = - { - MemInfo(&gd->docDefineMembers, theTranslator->trDefines()), - MemInfo(&gd->docTypedefMembers, theTranslator->trTypedefs()), - MemInfo(&gd->docEnumMembers, theTranslator->trEnumerations()), - MemInfo(&gd->docFuncMembers, theTranslator->trFunctions()), - MemInfo(&gd->docVarMembers, theTranslator->trVariables()), - MemInfo(&gd->docProtoMembers, theTranslator->trFuncProtos()), - MemInfo(0,0) - }; - - MemberList *members; - MemInfo *pMemInfo; - for (pMemInfo=&memberLists[0]; (members=pMemInfo->list) ; pMemInfo++) - { - if (members->count()>0) - { - bool first=TRUE; - MemberDef *md=members->first(); - while (md) - { - if (md->isDetailedSectionVisible(TRUE,FALSE)) - { - if (first) - { - first=FALSE; - if (htmlHelp) - { - htmlHelp->addContentsItem(TRUE, convertToHtml(pMemInfo->name), gd->getOutputFileBase(),0); - htmlHelp->incContentsDepth(); - } - if (ftvHelp) - { - - ftvHelp->addContentsItem(TRUE, gd->getReference(), gd->getOutputFileBase(), 0, pMemInfo->name); - ftvHelp->incContentsDepth(); - } - } - if (htmlHelp) - { - htmlHelp->addContentsItem(FALSE,md->name(),md->getOutputFileBase(),md->anchor()); - } - if (ftvHelp) - { - ftvHelp->addContentsItem(FALSE,md->getReference(),md->getOutputFileBase(),md->anchor(),md->name()); - } - } - md=members->next(); - } - - if (htmlHelp && !first) htmlHelp->decContentsDepth(); - if (ftvHelp && !first) ftvHelp->decContentsDepth(); - - } - } -#endif // write namespaces NamespaceSDict *namespaceSDict=gd->namespaceSDict; diff --git a/src/index.h b/src/index.h index 90dc11f..cda0678 100644 --- a/src/index.h +++ b/src/index.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -22,6 +22,7 @@ #include <qfile.h> class MemberDef; +class OutputList; enum IndexSections { @@ -45,37 +46,6 @@ enum IndexSections isEndIndex }; -class OutputList; - -void writeIndex(OutputList &ol); -void writeHierarchicalIndex(OutputList &ol); -void writeAlphabeticalIndex(OutputList &ol); -void writeClassHierarchy(OutputList &ol); -void writeAnnotatedIndex(OutputList &ol); -void writeAnnotatedClassList(OutputList &ol); -void writeMemberList(OutputList &ol,bool useSections); - -void writeSourceIndex(OutputList &ol); -void writeHeaderIndex(OutputList &ol); -void writeHeaderFileList(OutputList &ol); - -void writeExampleIndex(OutputList &ol); -void writePageIndex(OutputList &ol); -void writeFileIndex(OutputList &ol); -void writeNamespaceIndex(OutputList &ol); -void writeGroupIndex(OutputList &ol); -void writeDirIndex(OutputList &ol); -void writePackageIndex(OutputList &ol); - -void writeClassMemberIndex(OutputList &ol); -void writeFileMemberIndex(OutputList &ol); -void writeNamespaceMemberIndex(OutputList &ol); - -void writeGraphicalClassHierarchy(OutputList &ol); -void writeGraphInfo(OutputList &ol); - -void countDataStructures(); - enum HighlightedItem { HLI_None=0, @@ -149,6 +119,31 @@ enum ClassHighlight CHL_Total = CHL_Exceptions+1 }; +void writeIndex(OutputList &ol); +void writeHierarchicalIndex(OutputList &ol); +void writeAlphabeticalIndex(OutputList &ol); +void writeClassHierarchy(OutputList &ol); +void writeAnnotatedIndex(OutputList &ol); +void writeAnnotatedClassList(OutputList &ol); +void writeMemberList(OutputList &ol,bool useSections); +void writeSourceIndex(OutputList &ol); +void writeHeaderIndex(OutputList &ol); +void writeHeaderFileList(OutputList &ol); +void writeExampleIndex(OutputList &ol); +void writePageIndex(OutputList &ol); +void writeFileIndex(OutputList &ol); +void writeNamespaceIndex(OutputList &ol); +void writeGroupIndex(OutputList &ol); +void writeDirIndex(OutputList &ol); +void writePackageIndex(OutputList &ol); +void writeClassMemberIndex(OutputList &ol); +void writeFileMemberIndex(OutputList &ol); +void writeNamespaceMemberIndex(OutputList &ol); +void writeGraphicalClassHierarchy(OutputList &ol); +void writeGraphInfo(OutputList &ol); + +void countDataStructures(); + extern int annotatedClasses; extern int hierarchyClasses; extern int documentedFiles; diff --git a/src/instdox.cpp b/src/instdox.cpp index 3f814d4..5fc89a5 100644 --- a/src/instdox.cpp +++ b/src/instdox.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/instdox.h b/src/instdox.h index ede8e8f..82d2910 100644 --- a/src/instdox.h +++ b/src/instdox.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/language.h b/src/language.h index 22932eb..06aef66 100644 --- a/src/language.h +++ b/src/language.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index a780434..c58315a 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h index 2241f06..2625a7c 100644 --- a/src/latexdocvisitor.h +++ b/src/latexdocvisitor.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 98891f4..5088b7c 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -962,7 +962,7 @@ void LatexGenerator::endIndexValue(const char *name,bool hasBrief) //void LatexGenerator::writeClassLink(const char *,const char *, // const char *,const char *name) //{ -// t << "{\\bf"; +// t << "{\\bf "; // docify(name); // t << "}"; //} diff --git a/src/latexgen.h b/src/latexgen.h index 2a502e4..a5fbd1d 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/libdoxycfg.pro.in b/src/libdoxycfg.pro.in index cf4454e..6cff964 100644 --- a/src/libdoxycfg.pro.in +++ b/src/libdoxycfg.pro.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/src/libdoxycfg.t b/src/libdoxycfg.t index aa75498..3a63100 100644 --- a/src/libdoxycfg.t +++ b/src/libdoxycfg.t @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in index 957e056..20fd265 100644 --- a/src/libdoxygen.pro.in +++ b/src/libdoxygen.pro.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/src/libdoxygen.t b/src/libdoxygen.t index 7910d01..ff31523 100644 --- a/src/libdoxygen.t +++ b/src/libdoxygen.t @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/src/lockingptr.h b/src/lockingptr.h index 99a1772..64217f5 100644 --- a/src/lockingptr.h +++ b/src/lockingptr.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/logos.cpp b/src/logos.cpp index 861e942..12a1e86 100644 --- a/src/logos.cpp +++ b/src/logos.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/logos.h b/src/logos.h index b4c95ad..dd45a0c 100644 --- a/src/logos.h +++ b/src/logos.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/main.cpp b/src/main.cpp index 232bf0e..1b69973 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 530b272..d9c35d6 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h index 93e2eb1..ad2beff 100644 --- a/src/mandocvisitor.h +++ b/src/mandocvisitor.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/mangen.cpp b/src/mangen.cpp index 6eeb184..4f7ed3f 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/mangen.h b/src/mangen.h index 9908977..ad6a59d 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 56c8013..32c6b4c 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -1463,14 +1463,34 @@ void MemberDef::writeDeclaration(OutputList &ol, ol.endTypewriter(); } - if (isProperty()) + if (isProperty() && (isSettable() || isGettable())) { ol.writeLatexSpacing(); ol.startTypewriter(); ol.docify(" ["); QStrList sl; - if (isGettable()) sl.append("get"); - if (isSettable()) sl.append("set"); + if (isGettable()) sl.append("get"); + if (isSettable()) sl.append("set"); + const char *s=sl.first(); + while (s) + { + ol.docify(s); + s=sl.next(); + if (s) ol.docify(", "); + } + ol.docify("]"); + ol.endTypewriter(); + } + + if (isEvent() && (isAddable() || isRemovable() || isRaisable())) + { + ol.writeLatexSpacing(); + ol.startTypewriter(); + ol.docify(" ["); + QStrList sl; + if (isAddable()) sl.append("add"); + if (isRemovable()) sl.append("remove"); + if (isRaisable()) sl.append("raise"); const char *s=sl.first(); while (s) { @@ -1840,15 +1860,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, } Specifier lvirt=virtualness(); - + if (!isObjCMethod() && (protection()!=Public || lvirt!=Normal || - isFriend() || isRelated() || isExplicit() || - isMutable() || (isInline() && Config_getBool("INLINE_INFO")) || + isFriend() || isRelated() || + (isInline() && Config_getBool("INLINE_INFO")) || isSignal() || isSlot() || isStatic() || (m_impl->classDef && m_impl->classDef!=container) || - isSettable() || isGettable() || isReadable() || isWritable() || - isFinal() || isAbstract() + (m_impl->memSpec & ~Entry::Inline)!=0 ) ) { @@ -1861,17 +1880,23 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, else if (isRelated()) sl.append("related"); else { - if (Config_getBool("INLINE_INFO") && isInline()) - sl.append("inline"); + if (Config_getBool("INLINE_INFO") && isInline()) sl.append("inline"); if (isExplicit()) sl.append("explicit"); if (isMutable()) sl.append("mutable"); if (isStatic()) sl.append("static"); if (isGettable()) sl.append("get"); if (isSettable()) sl.append("set"); + if (isAddable()) sl.append("add"); + if (isRemovable()) sl.append("remove"); + if (isRaisable()) sl.append("raise"); if (isReadable()) sl.append("read"); if (isWritable()) sl.append("write"); if (isFinal()) sl.append("final"); if (isAbstract()) sl.append("abstract"); + if (isOverride()) sl.append("override"); + if (isInitonly()) sl.append("initonly"); + if (isSealed()) sl.append("sealed"); + if (isNew()) sl.append("new"); if (protection()==Protected) sl.append("protected"); else if (protection()==Private) sl.append("private"); else if (protection()==Package) sl.append("package"); @@ -3181,6 +3206,24 @@ bool MemberDef::isSettable() const return (m_impl->memSpec&Entry::Settable)!=0; } +bool MemberDef::isAddable() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Addable)!=0; +} + +bool MemberDef::isRemovable() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Removable)!=0; +} + +bool MemberDef::isRaisable() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Raisable)!=0; +} + bool MemberDef::isReadable() const { makeResident(); @@ -3199,6 +3242,30 @@ bool MemberDef::isFinal() const return (m_impl->memSpec&Entry::Final)!=0; } +bool MemberDef::isNew() const +{ + makeResident(); + return (m_impl->memSpec&Entry::New)!=0; +} + +bool MemberDef::isSealed() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Sealed)!=0; +} + +bool MemberDef::isOverride() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Override)!=0; +} + +bool MemberDef::isInitonly() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Initonly)!=0; +} + bool MemberDef::isAbstract() const { makeResident(); @@ -3394,6 +3461,7 @@ QCString MemberDef::getCachedTypedefTemplSpec() const QCString MemberDef::getCachedResolvedTypedef() const { makeResident(); + //printf("MemberDef::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl); return m_impl->cachedResolvedType; } @@ -3620,6 +3688,7 @@ void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const m_impl->cachedTypedefValue=val; m_impl->cachedTypedefTemplSpec=templSpec; m_impl->cachedResolvedType=resolvedType; + //printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl); } void MemberDef::flushToDisk() const diff --git a/src/memberdef.h b/src/memberdef.h index f0935a4..f6d1a0b 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -140,8 +140,15 @@ class MemberDef : public Definition bool isSettable() const; bool isReadable() const; bool isWritable() const; + bool isAddable() const; + bool isRemovable() const; + bool isRaisable() const; bool isFinal() const; bool isAbstract() const; + bool isOverride() const; + bool isInitonly() const; + bool isNew() const; + bool isSealed() const; bool isImplementation() const; bool isExternal() const; bool isTemplateSpecialization() const; diff --git a/src/membergroup.cpp b/src/membergroup.cpp index 900a6e0..0c6c050 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/membergroup.h b/src/membergroup.h index 885341a..4f7cb4c 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 8864488..f684cbd 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/memberlist.h b/src/memberlist.h index 1467835..be2e38e 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/membername.cpp b/src/membername.cpp index 9a32f3e..5c3fff4 100644 --- a/src/membername.cpp +++ b/src/membername.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -72,34 +72,12 @@ MemberNameIterator::MemberNameIterator(const MemberName &mnlist) : { } -#if 0 - -MemberNameList::MemberNameList() : QList<MemberName>() -{ -} - -MemberNameList::~MemberNameList() -{ -} - -int MemberNameList::compareItems(GCI item1, GCI item2) -{ - MemberName *n1=(MemberName *)item1; - MemberName *n2=(MemberName *)item2; - return stricmp(n1->memberName(),n2->memberName()); -} - -MemberNameListIterator::MemberNameListIterator(const MemberNameList &mnlist) : - QListIterator<MemberName>(mnlist) -{ -} - -#endif - int MemberNameSDict::compareItems(GCI item1, GCI item2) { MemberName *n1=(MemberName *)item1; MemberName *n2=(MemberName *)item2; - return stricmp(n1->memberName(),n2->memberName()); + return stricmp(n1->memberName()+getPrefixIndex(n1->memberName()), + n2->memberName()+getPrefixIndex(n2->memberName()) + ); } diff --git a/src/membername.h b/src/membername.h index 8c71af0..ee227e8 100644 --- a/src/membername.h +++ b/src/membername.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/message.cpp b/src/message.cpp index 572542a..02bf52d 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/message.h b/src/message.h index 12af48c..af9eecc 100644 --- a/src/message.h +++ b/src/message.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 54278b1..419ba2c 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/namespacedef.h b/src/namespacedef.h index 827ace3..098cfee 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/objcache.cpp b/src/objcache.cpp index f45a0e7..4c53ade 100644 --- a/src/objcache.cpp +++ b/src/objcache.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/objcache.h b/src/objcache.h index 3516534..33dfbfe 100644 --- a/src/objcache.h +++ b/src/objcache.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/outputgen.cpp b/src/outputgen.cpp index 4a5c54a..28878f3 100644 --- a/src/outputgen.cpp +++ b/src/outputgen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/outputgen.h b/src/outputgen.h index dbe6807..69390ba 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/outputlist.cpp b/src/outputlist.cpp index dac4972..993f321 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/outputlist.h b/src/outputlist.h index bdc0f01..376bb28 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/pagedef.h b/src/pagedef.h index 2d4c59d..3c7e74e 100644 --- a/src/pagedef.h +++ b/src/pagedef.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/parserintf.h b/src/parserintf.h index 477958a..57409c0 100644 --- a/src/parserintf.h +++ b/src/parserintf.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/pngenc.cpp b/src/pngenc.cpp index 79a83ac..7251bb3 100644 --- a/src/pngenc.cpp +++ b/src/pngenc.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/pngenc.h b/src/pngenc.h index f32248e..8d0219c 100644 --- a/src/pngenc.h +++ b/src/pngenc.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -1158,6 +1158,10 @@ static void readIncludeFile(const QCString &inc) msg("#include %s: not found or already included! skipping...\n",incFileName.data()); //printf("Error: include file %s not found\n",yytext); } + if (g_curlyCount>0) // failed to find #include inside { ... } + { + warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data()); + } } } } diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index fa1ab26..c02a4f5 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/pycode.h b/src/pycode.h index b3007d4..326441c 100644 --- a/src/pycode.h +++ b/src/pycode.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/pycode.l b/src/pycode.l index 13e79cd..96b805a 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -715,7 +715,7 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName) return; } -static void findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *symName) +static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *symName) { //printf("sym %s outerScope=%s equal=%d\n", // sym->name().data(),sym->getOuterScope()->name().data(), @@ -741,8 +741,10 @@ static void findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s sym->getOutputFileBase(), anchor, symName); + return TRUE; } } + return FALSE; } static void findMemberLink(CodeOutputInterface &ol,char *symName) @@ -763,12 +765,12 @@ static void findMemberLink(CodeOutputInterface &ol,char *symName) Definition *sym; for (dli.toFirst();(sym=dli.current());++dli) { - findMemberLink(ol,sym,symName); + if (findMemberLink(ol,sym,symName)) return; } } else // single symbol { - findMemberLink(ol,(Definition*)di,symName); + if (findMemberLink(ol,(Definition*)di,symName)) return; } } } diff --git a/src/pyscanner.h b/src/pyscanner.h index 03dce0b..a5aa2aa 100644 --- a/src/pyscanner.h +++ b/src/pyscanner.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/pyscanner.l b/src/pyscanner.l index db39ff4..6d33aef 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -695,6 +695,8 @@ STARTDOCSYMS ^{B}"##"/[^#] initSpecialBlock(); BEGIN(SpecialComment); } + {POUNDCOMMENT} { // # + } "'" { // start of a single quoted string g_stringContext=YY_START; g_copyString=0; @@ -705,8 +707,8 @@ STARTDOCSYMS ^{B}"##"/[^#] g_copyString=0; BEGIN( DoubleQuoteString ); } - . \n { yyLineNr++; } + . // anything else } <FunctionBody>{ @@ -1223,6 +1225,8 @@ STARTDOCSYMS ^{B}"##"/[^#] current->program+=docBlock; current->program+=yytext; } + if (g_hideClassDocs) + current->startLine = yyLineNr; g_hideClassDocs=FALSE; BEGIN(docBlockContext); } @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/reflist.cpp b/src/reflist.cpp index 99d94cd..2055e33 100644 --- a/src/reflist.cpp +++ b/src/reflist.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/reflist.h b/src/reflist.h index bc2b52f..90b60b9 100644 --- a/src/reflist.h +++ b/src/reflist.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 2cebd40..356af3c 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h index 5462480..57ce53b 100644 --- a/src/rtfdocvisitor.h +++ b/src/rtfdocvisitor.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 0194de9..51035b7 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Parker Waechter & Dimitri van Heesch. * diff --git a/src/rtfgen.h b/src/rtfgen.h index b0edb10..d1dcd95 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Parker Waechter & Dimitri van Heesch. * diff --git a/src/rtfstyle.cpp b/src/rtfstyle.cpp index 430ed37..b52b37d 100644 --- a/src/rtfstyle.cpp +++ b/src/rtfstyle.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/rtfstyle.h b/src/rtfstyle.h index 6f4af29..bc1a3bb 100644 --- a/src/rtfstyle.h +++ b/src/rtfstyle.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/scanner.h b/src/scanner.h index e82daf8..d0f384b 100644 --- a/src/scanner.h +++ b/src/scanner.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/scanner.l b/src/scanner.l index 3e8da49..c0189e3 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -1,6 +1,6 @@ /***************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2005 by Dimitri van Heesch. * @@ -104,13 +104,16 @@ static QCString* specName; static QCString formulaText; static QCString formulaEnd; static bool useOverrideCommands = FALSE; -static bool insideIDL = FALSE; //!< processing IDL code? -static bool insideJava = FALSE; //!< processing Java code? -static bool insideCS = FALSE; //!< processing C# code? -static bool insideD = FALSE; //!< processing D code? -static bool insidePHP = FALSE; //!< processing PHP code? + +static bool insideIDL = FALSE; //!< processing IDL code? +static bool insideJava = FALSE; //!< processing Java code? +static bool insideCS = FALSE; //!< processing C# code? +static bool insideD = FALSE; //!< processing D code? +static bool insidePHP = FALSE; //!< processing PHP code? +static bool insideObjC = FALSE; //!< processing Objective C code? +static bool insideCli = FALSE; //!< processing C++/CLI code? + static bool insideCppQuote = FALSE; -static bool insideObjC = FALSE; //!< processing Objective C code? static bool insideProtocolList = FALSE; static int argRoundCount; @@ -195,6 +198,7 @@ static void initParser() autoGroupStack.setAutoDelete(TRUE); insideFormula = FALSE; insideCode=FALSE; + insideCli=Config_getBool("CPP_CLI_SUPPORT"); previous = 0; } @@ -202,7 +206,7 @@ static void initEntry() { if (insideJava) { - protection = current_root->section==Entry::INTERFACE_SEC ? Public : Package; + protection = (current_root->spec & Entry::Interface) ? Public : Package; } current->protection = protection ; current->mtype = mtype; @@ -570,6 +574,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) %x CSConstraint %x ClassCategory %x ClassTemplSpec +%x CliPropertyType +%x CliOverride %x Bases %x BasesProt %x NextSemi @@ -829,7 +835,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current->argList->clear(); lineCount() ; } -<FindMembers>{B}*"protected"{BN}*":"{BN}* { +<FindMembers>{B}*"internal"{BN}*":"{BN}* { // for now treat C++/CLI's internal as package... + current->protection = protection = Package ; + current->mtype = mtype = Method; + current->type.resize(0); + current->name.resize(0); + current->args.resize(0); + current->argList->clear(); + lineCount() ; + } +<FindMembers>{B}*"protected"{BN}*":"{BN}* { current->protection = protection = Protected ; current->mtype = mtype = Method; current->type.resize(0); @@ -847,6 +862,69 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current->argList->clear(); lineCount() ; } +<FindMembers>{B}*"event"{BN}* { + if (insideCli) + { + // C++/CLI event + lineCount() ; + current->mtype = mtype = Event; + current->bodyLine = yyLineNr; + curlyCount=0; + BEGIN( CliPropertyType ); + } + else + { + REJECT; + } + } +<FindMembers>{B}*"property"{BN}* { + if (insideCli) + { + // C++/CLI property + lineCount() ; + current->mtype = mtype = Property; + current->bodyLine = yyLineNr; + curlyCount=0; + BEGIN( CliPropertyType ); + } + else + { + REJECT; + } + } +<CliPropertyType>{ID} { + addType( current ); + current->name = yytext; + } +<CliPropertyType>"{" { + curlyCount=0; + printf("event: '%s' '%s'\n",current->type.data(),current->name.data()); + BEGIN( CSAccessorDecl ); + } +<CliPropertyType>";" { + unput(*yytext); + BEGIN( FindMembers ); + } +<CliPropertyType>\n { + yyLineNr++; + } +<CliPropertyType>{B}* { + } +<CliPropertyType>. { + addType( current ); + current->type += yytext; + } +<FindMembers>{B}*"property"{BN}* { + if (!current->type.isEmpty()) + { + REJECT; + } + else + { + current->mtype = mtype = Property; + lineCount(); + } + } <FindMembers>{B}*"@private"{BN}+ { current->protection = protection = Private ; current->mtype = mtype = Method; @@ -1012,6 +1090,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <PackageName>";" { BEGIN(FindMembers); } +<FindMembers>{B}*"initonly"{BN}+ { + current->type += " initonly "; + if (insideCli) current->spec |= Entry::Initonly; + lineCount(); + } <FindMembers>{B}*"static"{BN}+ { current->type += " static "; current->stat = TRUE; lineCount(); @@ -1033,17 +1116,17 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } else { - current->memSpec|=Entry::Abstract; + current->spec|=Entry::Abstract; } lineCount(); } -<FindMembers>{B}*"inline"{BN}+ { current->memSpec|=Entry::Inline; +<FindMembers>{B}*"inline"{BN}+ { current->spec|=Entry::Inline; lineCount(); } -<FindMembers>{B}*"mutable"{BN}+ { current->memSpec|=Entry::Mutable; +<FindMembers>{B}*"mutable"{BN}+ { current->spec|=Entry::Mutable; lineCount(); } -<FindMembers>{B}*"explicit"{BN}+ { current->memSpec|=Entry::Explicit; +<FindMembers>{B}*"explicit"{BN}+ { current->spec|=Entry::Explicit; lineCount(); } /* @@ -1108,7 +1191,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) if (insideIDL || insideJava || insideCS || insideD || insidePHP) { isTypedef=FALSE; - current->section = Entry::INTERFACE_SEC; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Interface; addType( current ) ; current->type += " interface" ; current->fileName = yyFileName; @@ -1138,7 +1222,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <FindMembers>{B}*"@interface"{BN}+ { // Objective-C class interface lineCount(); isTypedef=FALSE; - current->section = Entry::INTERFACE_SEC; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Interface; current->objc = insideObjC = TRUE; current->protection = protection = Public ; addType( current ) ; @@ -1151,7 +1236,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <FindMembers>{B}*"@protocol"{BN}+ { // Objective-C protocol definition lineCount(); isTypedef=FALSE; - current->section = Entry::PROTOCOL_SEC; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Protocol; current->objc = insideObjC = TRUE; current->protection = protection = Public ; addType( current ) ; @@ -1163,7 +1249,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } <FindMembers>{B}*"exception"{BN}+ { // Corba IDL exception isTypedef=FALSE; - current->section = Entry::EXCEPTION_SEC; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Exception; addType( current ) ; current->type += " exception" ; current->fileName = yyFileName; @@ -1186,6 +1273,48 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) if (yytext[yyleng-1]=='{') unput('{'); BEGIN( CompoundName ) ; } +<FindMembers>{B}*"value class{" | // C++/CLI extension +<FindMembers>{B}*"value class"{BN}+ { + isTypedef=FALSE; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Value; + addType( current ) ; + current->type += " value class" ; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + lineCount() ; + if (yytext[yyleng-1]=='{') unput('{'); + BEGIN( CompoundName ) ; + } +<FindMembers>{B}*"ref class{" | // C++/CLI extension +<FindMembers>{B}*"ref class"{BN}+ { + isTypedef=FALSE; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Ref; + addType( current ) ; + current->type += " ref class" ; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + lineCount() ; + if (yytext[yyleng-1]=='{') unput('{'); + BEGIN( CompoundName ) ; + } +<FindMembers>{B}*"interface class{" | // C++/CLI extension +<FindMembers>{B}*"interface class"{BN}+ { + isTypedef=FALSE; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Interface; + addType( current ) ; + current->type += " interface class" ; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + lineCount() ; + if (yytext[yyleng-1]=='{') unput('{'); + BEGIN( CompoundName ) ; + } <FindMembers>{B}*"coclass"{BN}+ { if (insideIDL) { @@ -1210,7 +1339,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <FindMembers>{B}*{TYPEDEFPREFIX}"struct{" | <FindMembers>{B}*{TYPEDEFPREFIX}"struct"/{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; - current->section = Entry::STRUCT_SEC ; + current->section = Entry::CLASS_SEC ; + current->spec = Entry::Struct; addType( current ) ; current->type += " struct" ; current->fileName = yyFileName; @@ -1220,10 +1350,53 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) if (yytext[yyleng-1]=='{') unput('{'); BEGIN( CompoundName ) ; } +<FindMembers>{B}*"value struct{" | // C++/CLI extension +<FindMembers>{B}*"value struct"{BN}+ { + isTypedef=FALSE; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Struct | Entry::Value; + addType( current ) ; + current->type += " value struct" ; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + lineCount() ; + if (yytext[yyleng-1]=='{') unput('{'); + BEGIN( CompoundName ) ; + } +<FindMembers>{B}*"ref struct{" | // C++/CLI extension +<FindMembers>{B}*"ref struct"{BN}+ { + isTypedef=FALSE; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Struct | Entry::Ref; + addType( current ) ; + current->type += " ref struct" ; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + lineCount() ; + if (yytext[yyleng-1]=='{') unput('{'); + BEGIN( CompoundName ) ; + } +<FindMembers>{B}*"interface struct{" | // C++/CLI extension +<FindMembers>{B}*"interface struct"{BN}+ { + isTypedef=FALSE; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Struct | Entry::Interface; + addType( current ) ; + current->type += " interface struct"; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + lineCount() ; + if (yytext[yyleng-1]=='{') unput('{'); + BEGIN( CompoundName ) ; + } <FindMembers>{B}*{TYPEDEFPREFIX}"union{" | <FindMembers>{B}*{TYPEDEFPREFIX}"union"{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; - current->section = Entry::UNION_SEC ; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Union; addType( current ) ; current->type += " union" ; current->fileName = yyFileName; @@ -1233,8 +1406,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) if (yytext[yyleng-1]=='{') unput('{'); BEGIN( CompoundName ) ; } -<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum{" | -<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"{BN}+ { // for IDL: typedef [something] enum +<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?"{" | +<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?{BN}+ { // for IDL: typedef [something] enum isTypedef=((QCString)yytext).find("typedef")!=-1; current->section = Entry::ENUM_SEC ; addType( current ) ; @@ -1271,7 +1444,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) unput(*yytext); BEGIN( FindMembers ) ; } -<FindMembers>"template"({BN}*)"<"/[>]? { +<FindMembers>("template"|"generic")({BN}*)"<"/[>]? { // generic is a C++/CLI extension lineCount(); if (current->tArgLists==0) { @@ -1280,6 +1453,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } ArgumentList *al = new ArgumentList; al->setAutoDelete(TRUE); + current->spec |= (yytext[0]=='g') ? Entry::Generic : Entry::Template; current->tArgLists->append(al); currentArgumentList = al; templateStr="<"; @@ -1501,11 +1675,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) BEGIN(QtPropAttr); } <QtPropAttr>"READ" { - current->memSpec |= Entry::Readable; + current->spec |= Entry::Readable; BEGIN(QtPropRead); } <QtPropAttr>"WRITE" { - current->memSpec |= Entry::Writable; + current->spec |= Entry::Writable; BEGIN(QtPropWrite); } <QtPropAttr>"RESET"{B}+{ID} { // reset method => not supported yet @@ -1762,7 +1936,19 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) BEGIN( CopyRound ); } -<FindMembers>[*&]+ { current->name += yytext ; +<FindMembers>[\^%] { // ^ and % are C++/CLI extensions + if (insideCli) + { + addType( current ); + current->name = yytext ; + } + else + { + REJECT; + } + } +<FindMembers>[*&]+ { + current->name += yytext ; addType( current ); } <FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer,OldStyleArgs>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" { @@ -2335,7 +2521,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } <FindMembers>"[" { - if (!insideCS && + if (!insideCS && current->name.isEmpty() || current->name=="typedef" ) // IDL function property @@ -2367,11 +2553,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } <IDLAttribute>"propput" { current->mtype = Property; - current->memSpec |= Entry::Settable; + current->spec |= Entry::Settable; } <IDLAttribute>"propget" { current->mtype = Property; - current->memSpec |= Entry::Gettable; + current->spec |= Entry::Gettable; } <IDLAttribute>. { } @@ -2588,7 +2774,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current->name = current->name.stripWhiteSpace(); //printf("adding `%s' `%s' `%s' brief=%s insideObjC=%d %x\n",current->type.data(),current->name.data(),current->args.data(),current->brief.data(),insideObjC,current->section); if (insideObjC && - (current->section==Entry::INTERFACE_SEC || current->section==Entry::CATEGORY_SEC) + ((current->spec&Entry::Interface) || (current->spec==Entry::Category)) ) // method definition follows { BEGIN( ReadBodyIntf ) ; @@ -2598,7 +2784,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current_root->addSubEntry( current ) ; current = new Entry(*current); if (current->section==Entry::NAMESPACE_SEC || - current->section==Entry::INTERFACE_SEC || + (current->spec==Entry::Interface) || insideJava || insidePHP || insideCS || insideD ) { // namespaces and interfaces and java classes ends with a closing bracket without semicolon @@ -2684,11 +2870,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) // handle *pName in: typedef { ... } name, *pName; if (firstTypedefEntry) { - if (firstTypedefEntry->section==Entry::STRUCT_SEC) + if (firstTypedefEntry->spec&Entry::Struct) { msType.prepend("struct "+firstTypedefEntry->name); } - else if (firstTypedefEntry->section==Entry::UNION_SEC) + else if (firstTypedefEntry->spec&Entry::Union) { msType.prepend("union "+firstTypedefEntry->name); } @@ -3272,6 +3458,26 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) unput(*yytext); BEGIN( Function ); } } +<FuncQual>{BN}*"abstract"{BN}* { // pure virtual member function + lineCount() ; + current->virt = Pure; + current->args += " override "; + } +<FuncQual>{BN}*"override"{BN}* { // overridden virtual member function + lineCount() ; + current->spec |= Entry::Override; + current->args += " override "; + } +<FuncQual>{BN}*"sealed"{BN}* { // sealed member function + lineCount() ; + current->spec |= Entry::Sealed; + current->args += " sealed "; + } +<FuncQual>{BN}*"new"{BN}* { // new member function + lineCount() ; + current->spec |= Entry::New; + current->args += " new "; + } <FuncQual>{BN}*"const"{BN}* { // const member function lineCount() ; current->args += " const "; @@ -3301,12 +3507,31 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) lastCPPContext = YY_START; BEGIN(SkipCPP); } -<FuncQual>"=" { // typically an initialized function pointer - //current->args += *yytext; - //BEGIN(FuncPtrInit); - lastInitializerContext=YY_START; - initBracketCount=0; - BEGIN(ReadInitializer); +<FuncQual>"=" { + if (insideCli && + (current_root->section&Entry::COMPOUND_MASK) + ) + { + BEGIN(CliOverride); + } + else + { + // typically an initialized function pointer + lastInitializerContext=YY_START; + initBracketCount=0; + BEGIN(ReadInitializer); + } + } +<CliOverride>{ID} { + } +<CliOverride>"{" { + unput(*yytext); + BEGIN(FuncQual); + } +<CliOverride>\n { + yyLineNr++; + } +<CliOverride>. { } <FuncPtrInit>[{;] { unput(*yytext); @@ -3494,11 +3719,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) { if (findAndRemoveWord(current->type,"final")) { - current->memSpec |= Entry::Final; + current->spec |= Entry::Final; } if (findAndRemoveWord(current->type,"abstract")) { - current->memSpec |= Entry::Abstract; + current->spec |= Entry::Abstract; } } if ( insidePHP && !containsWord(current->type,"function")) @@ -3524,7 +3749,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) { if ( !insidePHP && (current_root->section & Entry::COMPOUND_MASK) ) { - previous->memSpec |= Entry::Inline; + previous->spec |= Entry::Inline; } //addToBody(yytext); curlyCount=0; @@ -3739,7 +3964,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <CompoundName>{SCOPENAME}{BN}*/"<" { sharpCount = 0; current->name = yytext ; - if (current->section==Entry::PROTOCOL_SEC) + if (current->spec & Entry::Protocol) { current->name+="-p"; } @@ -3764,7 +3989,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) if (--sharpCount<=0) { current->name = removeRedundantWhiteSpace(current->name); - if (current->section == Entry::PROTOCOL_SEC) + if (current->spec & Entry::Protocol) { // Objective-C protocol unput('{'); // fake start of body BEGIN( ClassVar ); @@ -3794,11 +4019,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <CompoundName>{SCOPENAME} { current->name = yytext ; lineCount(); - if (current->section == Entry::PROTOCOL_SEC) + if (current->spec & Entry::Protocol) { current->name += "-p"; } - if (current->section == Entry::PROTOCOL_SEC || + if ((current->section & Entry::Protocol) || current->section == Entry::OBJCIMPL_SEC) { unput('{'); // fake start of body @@ -3839,6 +4064,20 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) // Multiple class forward declaration } } +<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") { + if (insideCli) + { + if (yytext[0]=='s') // sealed + current->spec |= Entry::SealedClass; + else // abstract + current->spec |= Entry::AbstractClass; + BEGIN( ClassVar ); + } + else + { + REJECT; + } + } <ClassVar>{ID} { if (insideIDL && strcmp(yytext,"switch")==0) { @@ -3880,7 +4119,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current->name+='('; if (current->section!=Entry::OBJCIMPL_SEC) { - current->section=Entry::CATEGORY_SEC; + current->spec|=Entry::Category; } BEGIN( ClassCategory ); } @@ -3912,8 +4151,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } <ClassVar>":" { current->type.resize(0); - if (current->section == Entry::INTERFACE_SEC || - current->section == Entry::STRUCT_SEC || + if ((current->spec & Entry::Interface) || + (current->spec & Entry::Struct) || insidePHP || insideCS || insideD || insideObjC ) baseProt=Public; @@ -3981,11 +4220,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } curlyCount=0; if (current_root && // not a nested struct inside an @interface section - current_root->section!=Entry::INTERFACE_SEC && - (current->section==Entry::INTERFACE_SEC || - current->section==Entry::OBJCIMPL_SEC || - current->section==Entry::PROTOCOL_SEC || - current->section==Entry::CATEGORY_SEC) && + !(current_root->spec & Entry::Interface) && + ((current->spec & (Entry::Interface | Entry::Protocol | Entry::Category) || + current->section==Entry::OBJCIMPL_SEC) + ) && insideObjC ) { // ObjC body that ends with @end @@ -4108,7 +4346,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) new BaseInfo(baseName,baseProt,baseVirt) ); } - if (current->section==Entry::INTERFACE_SEC || + if ((current->spec & Entry::Interface) || insideJava || insidePHP || insideCS || insideD || insideObjC) { @@ -4292,7 +4530,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) lineCount(); } <FindMembers>"{" { - if (insideCS && !current->name.isEmpty() && !current->type.isEmpty()) + if (insideCS && + !current->name.isEmpty() && + !current->type.isEmpty()) { if (containsWord(current->type,"event")) // event { @@ -4304,7 +4544,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } current->bodyLine = yyLineNr; curlyCount=0; - BEGIN(CSAccessorDecl); + BEGIN( CSAccessorDecl ); } else { @@ -4351,8 +4591,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) BEGIN(FindMembers); } } -<CSAccessorDecl>"set" { if (curlyCount==0) current->memSpec |= Entry::Settable; } -<CSAccessorDecl>"get" { if (curlyCount==0) current->memSpec |= Entry::Gettable; } +<CSAccessorDecl>"set" { if (curlyCount==0) current->spec |= Entry::Settable; } +<CSAccessorDecl>"get" { if (curlyCount==0) current->spec |= Entry::Gettable; } +<CSAccessorDecl>"add" { if (curlyCount==0) current->spec |= Entry::Addable; } +<CSAccessorDecl>"remove" { if (curlyCount==0) current->spec |= Entry::Removable; } +<CSAccessorDecl>"raise" { if (curlyCount==0) current->spec |= Entry::Raisable; } <CSAccessorDecl>. {} <CSAccessorDecl>\n { yyLineNr++; } @@ -4364,9 +4607,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) /**********************************************************************************/ /* ---- Single line comments ------ */ - +<DocLine>[^\n]*"\n"[ \t]*"//"[/!] { // continuation of multiline C++-style comment + docBlock+=yytext; + docBlock.resize(docBlock.size() - 3); + } <DocLine>[^\n]*/"\n" { // whole line - handleCommentBlock(yytext,TRUE); + docBlock+=yytext; + handleCommentBlock(docBlock,TRUE); BEGIN( docBlockContext ); } @@ -4429,12 +4676,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) BEGIN(DocBlock); } } -<DocCopyBlock>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode"|"f$"|"f]"|"f}")/[^a-z_A-Z0-9] { // end of verbatim block +<DocCopyBlock>[\\@]("f$"|"f]"|"f}") { + docBlock+=yytext; + BEGIN(DocBlock); + } +<DocCopyBlock>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block docBlock+=yytext; - if (yytext[1]=='f') // end of formula - { - BEGIN(DocBlock); - } if (&yytext[4]==docBlockName) { BEGIN(DocBlock); @@ -4446,7 +4693,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) REJECT; } } -<DocCopyBlock>[^@/*\\\n]+ { // any character that is not special +<DocCopyBlock>[^@/*\]\$\\\n]+ { // any character that is not special docBlock+=yytext; } <DocCopyBlock>"/*"|"*/"|"//" { @@ -4734,11 +4981,28 @@ static void parseCompounds(Entry *rt) ce->fileName.right(4)==".inc" || ce->fileName.right(2)==".d" ) + { current->protection = protection = Public ; + } else if (ce->fileName.right(5)==".java") + { current->protection = protection = Package ; + } + else if (ce->spec&(Entry::Interface | Entry::Ref | Entry::Value | Entry::Struct | Entry::Union)) + { + if (ce->objc) + { + current->protection = protection = Protected ; + } + else + { + current->protection = protection = Public ; + } + } else + { current->protection = protection = Private ; + } } else if (ce->section == Entry::ENUM_SEC ) // enum { @@ -4752,17 +5016,6 @@ static void parseCompounds(Entry *rt) } current->protection = protection = ce->protection; } - else if (ce->section==Entry::INTERFACE_SEC) - { - if (ce->objc) - { - current->protection = protection = Protected ; - } - else - { - current->protection = protection = Public ; - } - } else // named struct, union, protocol, category { current->protection = protection = Public ; diff --git a/src/searchindex.cpp b/src/searchindex.cpp index 2610c52..89e8106 100644 --- a/src/searchindex.cpp +++ b/src/searchindex.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/searchindex.h b/src/searchindex.h index e5c9387..5293b94 100644 --- a/src/searchindex.h +++ b/src/searchindex.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/section.h b/src/section.h index 70dd5e1..ae79b2e 100644 --- a/src/section.h +++ b/src/section.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/sortdict.h b/src/sortdict.h index 07c450a..4a423c3 100644 --- a/src/sortdict.h +++ b/src/sortdict.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/store.h b/src/store.h index 3fc3ac0..eda055e 100644 --- a/src/store.h +++ b/src/store.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/tagreader.cpp b/src/tagreader.cpp index a8a74bb..7c807f3 100644 --- a/src/tagreader.cpp +++ b/src/tagreader.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. @@ -1169,15 +1169,16 @@ void TagFileParser::buildLists(Entry *root) while (tci) { Entry *ce = new Entry; + ce->section = Entry::CLASS_SEC; switch (tci->kind) { - case TagClassInfo::Class: ce->section = Entry::CLASS_SEC; break; - case TagClassInfo::Struct: ce->section = Entry::STRUCT_SEC; break; - case TagClassInfo::Union: ce->section = Entry::UNION_SEC; break; - case TagClassInfo::Interface: ce->section = Entry::INTERFACE_SEC; break; - case TagClassInfo::Exception: ce->section = Entry::EXCEPTION_SEC; break; - case TagClassInfo::Protocol: ce->section = Entry::PROTOCOL_SEC; break; - case TagClassInfo::Category: ce->section = Entry::CATEGORY_SEC; break; + case TagClassInfo::Class: break; + case TagClassInfo::Struct: ce->spec = Entry::Struct; break; + case TagClassInfo::Union: ce->spec = Entry::Union; break; + case TagClassInfo::Interface: ce->spec = Entry::Interface; break; + case TagClassInfo::Exception: ce->spec = Entry::Exception; break; + case TagClassInfo::Protocol: ce->spec = Entry::Protocol; break; + case TagClassInfo::Category: ce->spec = Entry::Category; break; } ce->name = tci->name; addDocAnchors(ce,tci->docAnchors); diff --git a/src/tagreader.h b/src/tagreader.h index d52b3df..b8d89db 100644 --- a/src/tagreader.h +++ b/src/tagreader.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/translator_en.h b/src/translator_en.h index fda338d..877f861 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -1052,7 +1052,7 @@ class TranslatorEnglish : public Translator "<p>\n" "The boxes in the above graph have the following meaning:\n" "<ul>\n" - "<li>%A filled black box represents the struct or class for which the " + "<li>%A filled gray box represents the struct or class for which the " "graph is generated.\n" "<li>%A box with a black border denotes a documented struct or class.\n" "<li>%A box with a grey border denotes an undocumented struct or class.\n" diff --git a/src/translator_gr.h b/src/translator_gr.h index f076769..3833185 100644 --- a/src/translator_gr.h +++ b/src/translator_gr.h @@ -1,12 +1,12 @@ /****************************************************************************** * - * * - * 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 - * granted. No representations are made about the suitability of this software + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * @@ -15,24 +15,30 @@ * */ -/* - * 15 Dec 2001 : Translation to greek by - * Harry Kalogirou <harkal@rainbow.cs.unipi.gr> - */ +/* + * 15 Dec 2001 : Translation to greek by + * Harry Kalogirou <no email> + * + * 04 Feb 2006 : Greek maintainance by + * Paul Gessos <nickreserved@yahoo.com> + */ #ifndef TRANSLATOR_GR_H #define TRANSLATOR_GR_H -class TranslatorGreek : public TranslatorAdapter_1_2_11 +class TranslatorGreek : public Translator { + protected: + friend class TranslatorAdapterBase; + public: // --- Language control methods ------------------- - - /*! Used for identification of the language. The identification - * should not be translated. It should be replaced by the name + + /*! Used for identification of the language. The identification + * should not be translated. It should be replaced by the name * of the language in English using lower-case characters only - * (e.g. "czech", "japanese", "russian", etc.). It should be equal to + * (e.g. "czech", "japanese", "russian", etc.). It should be equal to * the identification used in language.cpp. */ virtual QCString idLanguage() @@ -61,35 +67,35 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() - { return "Λεπτομερή Περιγραφή"; } + { return "Λεπτομερής Περιγραφή"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() { return "Τεκμηρίωση Μελών Typedef"; } - + /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() { return "Τεκμηρίωση Απαριθμήσεων Μελών"; } - + /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() { return "Τεκμηρίωση Συναρτήσεων Μελών"; } - + /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() - { + { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Τεκμηρίωση Πεδίων"; + return "Τεκμηρίωση Πεδίων"; } else { - return "Τεκμηρίωση Δεδομένων Μελών"; + return "Τεκμηρίωση Δεδομένων Μελών"; } } /*! this is the text of a link put after brief descriptions. */ - virtual QCString trMore() + virtual QCString trMore() { return "Περισσότερα..."; } /*! put in the class documentation */ @@ -107,54 +113,54 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() { return ", περιλαμβανομένων όλων των κληρονομημένων μελών."; } - + /*! this is put at the author sections at the bottom of man pages. * parameter s is name of the project name. */ virtual QCString trGeneratedAutomatically(const char *s) { QCString result="Δημιουργήθηκε αυτόματα από το Doxygen"; if (s) result+=(QCString)" για "+s; - result+=" από τον πηγαίο κώδικα."; + result+=" από τον πηγαίο κώδικα."; return result; } /*! put after an enum name in the list of all members */ virtual QCString trEnumName() { return "όνομα απαρύθμισης"; } - + /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() - { return "τιμή απαρύθμισης"; } - + { return "τιμή απαρίθμησης"; } + /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() { return "ορισμένο στο "; } // quick reference sections - /*! This is put above each page as a link to the list of all groups of + /*! This is put above each page as a link to the list of all groups of * compounds or files (see the \\group command). */ virtual QCString trModules() { return "Κομμάτια"; } - + /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() { return "Ιεραρχία Κλάσεων"; } - + /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() - { + { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { return "Δομές Δεδομένων"; } else { - return "Λίστα Συσσωματωμάτων"; + return "Λίστα Συσσωματωμάτων"; } } - + /*! This is put above each page as a link to the list of documented files */ virtual QCString trFileList() { return "Λίστα Αρχείων"; } @@ -165,27 +171,27 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! 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 "Πεδία Δεδομένων"; } else { - return "Μέλη Συσσωματώματα"; + return "Μέλη Συσσωματώματα"; } } /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() - { + { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Καθολικοί ορισμοί"; + return "Καθολικοί ορισμοί"; } else { - return "Μέλη Αρχείων"; + return "Μέλη Αρχείων"; } } @@ -218,16 +224,16 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() - { - + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Ακολουθούνε οι δομές δεδομένων με σύντομες περιγραφές:"; + return "Ακολουθούνε οι δομές δεδομένων με σύντομες περιγραφές:"; } else { return "Ακολουθούνε οι κλάσεις, οι δομές, " - "τα σώματα και οι διαπροσωπίες με σύντομες περιγραφές:"; + "τα σώματα και οι διαπροσωπίες με σύντομες περιγραφές:"; } } @@ -248,7 +254,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 result+="κλάσεων"; } result+=" με συνδέσμους "; - if (!extractAll) + if (!extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { @@ -259,7 +265,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 result+="στην τεκμηρίωση των κλάσεων για κάθε πεδίο:"; } } - else + else { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { @@ -278,7 +284,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { QCString result="Ακολουθεί η λίστα όλων των "; if (!extractAll) result+="τεκμηριωμένων "; - + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { result+="συναρτήσεων, μεταβλητών, ορισμών, απαριθμήσεων, και ορισμών τύπων"; @@ -288,9 +294,9 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 result+="μελών αρχείων"; } result+=" με συνδέσμους "; - if (extractAll) + if (extractAll) result+="στα αρχεία που ανήκουν:"; - else + else result+="στην τεκμηρίωση:"; return result; } @@ -312,49 +318,49 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { return "Ακολουθεί η λίστα όλων των μονάδων:"; } /*! This sentences is used in the annotated class/file lists if no brief - * description is given. + * description is given. */ virtual QCString trNoDescriptionAvailable() { return "Δεν υπάρχει περιγραφή διαθέσιμη"; } - - // index titles (the project name is prepended for these) + + // index titles (the project name is prepended for these) /*! This is used in HTML as the title of index.html. */ virtual QCString trDocumentation() { return "Τεκμηρίωση"; } - /*! This is used in LaTeX as the title of the chapter with the + /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ virtual QCString trModuleIndex() { return "Ευρετήριο μονάδων"; } - /*! This is used in LaTeX as the title of the chapter with the + /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ virtual QCString trHierarchicalIndex() { return "Ιεραρχικό Ευρετήριο"; } - /*! This is used in LaTeX as the title of the chapter with the + /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. */ virtual QCString trCompoundIndex() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) - { + { return "Ευρετήριο δομών δεδομένων"; } else { - return "Συμπαγές Ευρετήριο"; + return "Συμπαγές Ευρετήριο"; } } /*! This is used in LaTeX as the title of the chapter with the * list of all files. */ - virtual QCString trFileIndex() + virtual QCString trFileIndex() { return "Ευρετήτιο Αρχείων"; } /*! This is used in LaTeX as the title of the chapter containing @@ -367,14 +373,14 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 * the documentation of all classes, structs and unions. */ virtual QCString trClassDocumentation() - { + { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Τεκμηρίωση Δομών Δεδομένων"; + return "Τεκμηρίωση Δομών Δεδομένων"; } else { - return "Τεκμηρίωση Κλάσεων"; + return "Τεκμηρίωση Κλάσεων"; } } @@ -399,111 +405,105 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() { return "Ενχειρίδιο Αναφοράς"; } - - /*! This is used in the documentation of a file as a header before the + + /*! This is used in the documentation of a file as a header before the * list of defines */ virtual QCString trDefines() { return "Ορισμοί"; } - /*! This is used in the documentation of a file as a header before the + /*! This is used in the documentation of a file as a header before the * list of function prototypes */ virtual QCString trFuncProtos() { return "Πρωτοτυπήσεις Συναρτήσεων"; } - /*! This is used in the documentation of a file as a header before the + /*! This is used in the documentation of a file as a header before the * list of typedefs */ virtual QCString trTypedefs() { return "Ορισμοί Τύπων"; } - /*! This is used in the documentation of a file as a header before the + /*! This is used in the documentation of a file as a header before the * list of enumerations */ virtual QCString trEnumerations() { return "Απαριθμήσεις"; } - /*! This is used in the documentation of a file as a header before the + /*! This is used in the documentation of a file as a header before the * list of (global) functions */ virtual QCString trFunctions() { return "Συναρτήσεις"; } - /*! This is used in the documentation of a file as a header before the + /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trVariables() { return "Μεταβλητές"; } - /*! This is used in the documentation of a file as a header before the + /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trEnumerationValues() { return "Τιμές Απαριθμήσεων"; } - + /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ virtual QCString trDefineDocumentation() { return "Τεκμηρίωση Ορισμών"; } - /*! This is used in the documentation of a file/namespace before the list + /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ virtual QCString trFunctionPrototypeDocumentation() { return "Τεκμηρίωση Πρωτοτυπήσεων των Συναρτήσεων"; } - /*! This is used in the documentation of a file/namespace before the list + /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() { return "Τεκμηρίωση Ορισμών Τύπων"; } - /*! This is used in the documentation of a file/namespace before the list + /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ virtual QCString trEnumerationTypeDocumentation() { return "Τεκμηρίωση Απαριθμήσεων"; } - /*! This is used in the documentation of a file/namespace before the list - * of documentation blocks for enumeration values - */ - virtual QCString trEnumerationValueDocumentation() - { return "Τεκμηρίωση Τιμών των Απαριθμήσεων"; } - - /*! This is used in the documentation of a file/namespace before the list + /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ virtual QCString trFunctionDocumentation() { return "Τεκμηρίωση Συναρτήσεων"; } - /*! This is used in the documentation of a file/namespace before the list + /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ virtual QCString trVariableDocumentation() { return "Τεκμηρίωση Μεταβλητών"; } - /*! This is used in the documentation of a file/namespace/group before + /*! 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 "Δομές Δεδομένων"; } else { - return "Συσσωματώματα"; + return "Συσσωματώματα"; } } - /*! This is used in the standard footer of each page and indicates when - * the page was generated + /*! This is used in the standard footer of each page and indicates when + * the page was generated */ virtual QCString trGeneratedAt(const char *date,const char *projName) - { + { QCString result=(QCString)"Δημιουργήθηκε στις "+date; if (projName) result+=(QCString)" για "+projName; result+=(QCString)" από"; @@ -521,7 +521,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { return (QCString)"Διάγραμμα κληρονομικότητας για την "+clName+":"; } - + /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() { return "Μόνο για εσωτερική χρήση."; } @@ -561,7 +561,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! this text is generated when the \\exception command is used. */ virtual QCString trExceptions() { return "Εξαίρεση"; } - + /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() { return "Δημιουργήθηκε από "; } @@ -569,17 +569,17 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 ////////////////////////////////////////////////////////////////////////// - + /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() - { return "Λίστα Χώρων Ονομάτων"; } + { return "Λίστα Namespace"; } /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { QCString result="Ακολουθέι η λίστα όλων των "; if (!extractAll) result+="τεκμηριωμένων "; - result+="χώρων ονομάτων με σύντομες περιγραφές:"; + result+="Namespace με σύντομες περιγραφές:"; return result; } @@ -588,17 +588,17 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 */ virtual QCString trFriends() { return "Φίλοι"; } - + ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 ////////////////////////////////////////////////////////////////////////// - + /*! used in the class documentation as a header before the list of all - * related classes + * related classes */ virtual QCString trRelatedFunctionDocumentation() - { return "Τεκμηρίωση Φίλικών και Συσχετιζόμενων Συναρτήσεων"; } - + { return "Τεκμηρίωση Φιλικών και Συσχετιζόμενων Συναρτήσεων"; } + ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 ////////////////////////////////////////////////////////////////////////// @@ -616,12 +616,12 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 case ClassDef::Struct: result+=" Δομής"; break; case ClassDef::Union: result+=" Ένωσης"; break; case ClassDef::Interface: result+=" Διαπροσωπίας"; break; - case ClassDef::Protocol: result+=" Protocol"; break; // translate me! - case ClassDef::Category: result+=" Category"; break; // translate me! + case ClassDef::Protocol: result+=" Πρωτοκόλλου"; break; + case ClassDef::Category: result+=" Κατηγορίας"; break; case ClassDef::Exception: result+=" Εξαίρεσης"; break; } if (isTemplate) result+=" Template"; - + return result; } @@ -629,7 +629,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 virtual QCString trFileReference(const char *fileName) { QCString result=fileName; - result+=" Αναφορά Αρχείου"; + result+=" Αναφορά Αρχείου"; return result; } @@ -637,10 +637,10 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 virtual QCString trNamespaceReference(const char *namespaceName) { QCString result=namespaceName; - result+=" Αναφορά Χώρου Ονομάτων"; + result+=" Αναφορά Namespace"; return result; } - + virtual QCString trPublicMembers() { return "Δημόσιες Μέθοδοι"; } virtual QCString trPublicSlots() @@ -661,7 +661,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { return "Ιδιοτικά Slots"; } virtual QCString trStaticPrivateMembers() { return "Στατικές Ιδιοτικές Μέδοδοι"; } - + /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. */ @@ -670,23 +670,23 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 QCString result; int i; // the inherits list contain `numEntries' classes - for (i=0;i<numEntries;i++) + 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 + 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 + if (i<numEntries-2) // not the fore last entry result+=", "; else // the fore last entry result+=", και "; } } - return result; + return result; } - + /*! used in class documentation to produce a list of base classes, * if class diagrams are disabled. */ @@ -703,12 +703,12 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 return "Κληρονομείται από "+trWriteList(numEntries)+"."; } - /*! used in member documentation blocks to produce a list of + /*! used in member documentation blocks to produce a list of * members that are hidden by this one. */ virtual QCString trReimplementedFromList(int numEntries) { - return "Επαναυλοποιείται από "+trWriteList(numEntries)+"."; + return "Επαναϋλοποιείται από "+trWriteList(numEntries)+"."; } /*! used in member documentation blocks to produce a list of @@ -716,7 +716,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 */ virtual QCString trReimplementedInList(int numEntries) { - return "Επαναυλοποιείται στην "+trWriteList(numEntries)+"."; + return "Επαναϋλοποιείται στην "+trWriteList(numEntries)+"."; } /*! This is put above each page as a link to all members of namespaces. */ @@ -725,17 +725,17 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) - { + { QCString result="Ακολουθεί η λίστα όλων των "; if (!extractAll) result+="τεκμηριωμένων "; result+="μελών χώρων ονομάτων με συνδέσμους "; - if (extractAll) + if (extractAll) result+="στην τεκμηρίωση του χώρου ονομάτων για κάθε μέλος:"; - else + else result+="στους χώρους ονομάτων που ανήκουν:"; 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() @@ -803,7 +803,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 virtual QCString trMainPage() { return "Κύρια Σελίδα"; } - /*! This is used in references to page that are put in the LaTeX + /*! 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() @@ -852,7 +852,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { - return "Τεκμηρίωση Constructor & Destructor"; + return "Τεκμηρίωση Constructor & Destructor"; } /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() @@ -909,7 +909,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 ////////////////////////////////////////////////////////////////////////// // new since 1.1.0 ////////////////////////////////////////////////////////////////////////// - + virtual QCString trNote() { return "Σημείωση"; @@ -998,7 +998,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { return "Από"; } - + ////////////////////////////////////////////////////////////////////////// // new since 1.1.5 ////////////////////////////////////////////////////////////////////////// @@ -1008,7 +1008,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { return "Υπόμνημα Διαγραμμάτων"; } - /*! page explaining how the dot graph's should be interpreted + /*! page explaining how the dot graph's should be interpreted * The %A in the text below are to prevent link to classes called "A". */ virtual QCString trLegendDocs() @@ -1072,11 +1072,11 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { return "υπόμνημα"; } - + ////////////////////////////////////////////////////////////////////////// // new since 1.2.0 ////////////////////////////////////////////////////////////////////////// - + /*! Used as a marker that is put before a test item */ virtual QCString trTest() { @@ -1164,11 +1164,11 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { return "Τιμή:"; } - + ////////////////////////////////////////////////////////////////////////// // new since 1.2.5 ////////////////////////////////////////////////////////////////////////// - + /*! Used as a marker that is put before a \\bug item */ virtual QCString trBug() { @@ -1184,9 +1184,9 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 // new since 1.2.6 ////////////////////////////////////////////////////////////////////////// - /*! Used as ansicpg for RTF file - * - * The following table shows the correlation of Charset name, Charset Value and + /*! Used as ansicpg for RTF file + * + * The following table shows the correlation of Charset name, Charset Value and * <pre> * Codepage number: * Charset Name Charset Value(hex) Codepage number @@ -1207,15 +1207,15 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 * GB2313_CHARSET 134 (x86) 936 * CHINESEBIG5_CHARSET 136 (x88) 950 * </pre> - * + * */ virtual QCString trRTFansicp() { return "1253"; } - - /*! Used as ansicpg for RTF fcharset + + /*! Used as ansicpg for RTF fcharset * \see trRTFansicp() for a table of possible values. */ virtual QCString trRTFCharSet() @@ -1228,93 +1228,93 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 { return "Ευρετήριο"; } - + /*! This is used for translation of the word that will possibly - * be followed by a single name or by a list of names + * be followed by a single name or by a list of names * of the category. */ virtual QCString trClass(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Κλάση" : "κλάση")); if (!singular) result+=""; - return result; + return result; } /*! This is used for translation of the word that will possibly - * be followed by a single name or by a list of names + * be followed by a single name or by a list of names * of the category. */ virtual QCString trFile(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Αρχεί" : "αρχεί")); if (!singular) result+="α"; else result+="ο"; - return result; + return result; } /*! This is used for translation of the word that will possibly - * be followed by a single name or by a list of names + * be followed by a single name or by a list of names * of the category. */ virtual QCString trNamespace(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Namespace" : "namespace")); if (!singular) result+="s"; - return result; + return result; } /*! This is used for translation of the word that will possibly - * be followed by a single name or by a list of names + * be followed by a single name or by a list of names * of the category. */ virtual QCString trGroup(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Ομάδ" : "ομάδ")); if (!singular) result+="ες"; else result+="α"; - return result; + return result; } /*! This is used for translation of the word that will possibly - * be followed by a single name or by a list of names + * be followed by a single name or by a list of names * of the category. */ virtual QCString trPage(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Σελίδ" : "σελίδ")); if (!singular) result+="ες"; else result+="α"; - return result; + return result; } /*! This is used for translation of the word that will possibly - * be followed by a single name or by a list of names + * be followed by a single name or by a list of names * of the category. */ virtual QCString trMember(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Μέλ" : "μέλ")); if (!singular) result+="η"; else result+="ος"; - return result; + return result; } - + /*! This is used for translation of the word that will possibly - * be followed by a single name or by a list of names + * be followed by a single name or by a list of names * of the category. */ virtual QCString trField(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Πεδί" : "πεδί")); if (!singular) result+="α"; else result+="ο"; - return result; + return result; } /*! This is used for translation of the word that will possibly - * be followed by a single name or by a list of names + * be followed by a single name or by a list of names * of the category. */ virtual QCString trGlobal(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Καθολικ" : "καθολικ")); if (!singular) result+="ές"; else result+="ή"; - return result; + return result; } ////////////////////////////////////////////////////////////////////////// @@ -1324,12 +1324,278 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11 /*! This text is generated when the \\author command is used and * for the author section in man pages. */ virtual QCString trAuthor(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Συγραφ" : "συγραφ")); if (!singular) result+=""; else result+="έας"; - return result; + return result; } -}; +////////////////////////////////////////////////////////////////////////// +// new since 1.2.11 +////////////////////////////////////////////////////////////////////////// + + /*! This text is put before the list of members referenced by a member + */ + virtual QCString trReferences() + { + return "Αναφορές"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.13 +////////////////////////////////////////////////////////////////////////// + + /*! used in member documentation blocks to produce a list of + * members that are implemented by this one. + */ + virtual QCString trImplementedFromList(int numEntries) + { + return "Υλοποιεί "+trWriteList(numEntries)+"."; + } + + /*! used in member documentation blocks to produce a list of + * all members that implement this abstract member. + */ + virtual QCString trImplementedInList(int numEntries) + { + return "Υλοποιείται από "+trWriteList(numEntries)+"."; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.16 +////////////////////////////////////////////////////////////////////////// + + /*! used in RTF documentation as a heading for the Table + * of Contents. + */ + virtual QCString trRTFTableOfContents() + { + return "Πίνακας Περιεχομένων"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.17 +////////////////////////////////////////////////////////////////////////// + + /*! Used as the header of the list of item that have been + * flagged deprecated + */ + virtual QCString trDeprecatedList() + { + return "Λίστα Καταργημένων"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.18 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a header for declaration section of the events found in + * a C# program + */ + virtual QCString trEvents() + { + return "Συμβάντα"; + } + /*! Header used for the documentation section of a class' events. */ + virtual QCString trEventDocumentation() + { + return "Τεκμηρίωση Συμβάντων"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a heading for a list of Java class types with package scope. + */ + virtual QCString trPackageTypes() + { + return "Τύποι Πακέτων"; + } + /*! Used as a heading for a list of Java class functions with package + * scope. + */ + virtual QCString trPackageMembers() + { + return "Συναρτήσεις Πακέτου"; + } + /*! Used as a heading for a list of static Java class functions with + * package scope. + */ + virtual QCString trStaticPackageMembers() + { + return "Στατικές Συναρτήσεις Πακέτου"; + } + /*! Used as a heading for a list of Java class variables with package + * scope. + */ + virtual QCString trPackageAttribs() + { + return "Μεταβλητές Πακέτου"; + } + /*! Used as a heading for a list of static Java class variables with + * package scope. + */ + virtual QCString trStaticPackageAttribs() + { + return "Στατικές Μεταβλητές Πακέτου"; + } +////////////////////////////////////////////////////////////////////////// +// new since 1.3.1 +////////////////////////////////////////////////////////////////////////// + + /*! Used in the quick index of a class/file/namespace member list page + * to link to the unfiltered list of all members. + */ + virtual QCString trAll() + { + return "Όλα"; + } + /*! Put in front of the call graph for a function. */ + virtual QCString trCallGraph() + { + return "Το γράφημα δείχνει ποιές συναρτήσεις καλούνται από αυτή:"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.3 +////////////////////////////////////////////////////////////////////////// + + /*! When the search engine is enabled this text is put in the header + * of each page before the field where one can enter the text to search + * for. + */ + virtual QCString trSearchForIndex() + { + return "Αναζήτηση για"; + } + /*! This string is used as the title for the page listing the search + * results. + */ + virtual QCString trSearchResultsTitle() + { + return "Αποτελέσματα Αναζήτησης"; + } + /*! This string is put just before listing the search results. The + * text can be different depending on the number of documents found. + * Inside the text you can put the special marker $num to insert + * the number representing the actual number of search results. + * The @a numDocuments parameter can be either 0, 1 or 2, where the + * value 2 represents 2 or more matches. HTML markup is allowed inside + * the returned string. + */ + virtual QCString trSearchResults(int numDocuments) + { + if (numDocuments==0) + { + return "Συγγνώμη, δεν υπάρχει κείμενο που να ταιριάζει με την αίτησή σας."; + } + else if (numDocuments==1) + { + return "Βρέθηκε <b>1</b> κείμενο που ταιριάζει με την αίτησή σας."; + } + else + { + return "Βρέθηκαν <b>$num</b> κείμενα που ταιριάζουν με την αίτησή σας. " + "Πρώτα εμφανίζονται τα κείμενα που ταιριάζουν πιο πολύ."; + } + } + /*! This string is put before the list of matched words, for each search + * result. What follows is the list of words that matched the query. + */ + virtual QCString trSearchMatches() + { + return "Ταίριαξαν:"; + } + +////////////////////////////////////////////////////////////////////////// +// 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 "Αρχείο κώδικα " + filename; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.9 +////////////////////////////////////////////////////////////////////////// + + /*! This is used as the name of the chapter containing the directory + * hierarchy. + */ + virtual QCString trDirIndex() + { return "Ιεραρχία Καταλόγου"; } + + /*! This is used as the name of the chapter containing the documentation + * of the directories. + */ + virtual QCString trDirDocumentation() + { return "Τεκμηρίωση Καταλόγου"; } + + /*! 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 "Κατάλογοι"; } + + /*! This returns a sentences that introduces the directory hierarchy. + * and the fact that it is sorted alphabetically per level + */ + virtual QCString trDirDescription() + { + return "Η ιεραρχία καταλόγων ταξινομήθηκε αλφαβητικά, αλλά όχι πολύ αυστηρά:"; + } + + /*! 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=QCString("Αναφορά του Καταλόγου ") + 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 ? "Κατάλογο" : "κατάλογο")); + if (singular) result+="ς"; else result+="ι"; + 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 "Αυτή είναι μια υπερφορτωμένη συνάρτηση-μέλος, " + "που παρέχεται για ευκολία. Διαφέρει από την παραπάνω " + "συνάρτηση μόνο στον τύπο των παραμέτρων που δέχεται."; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.4.6 +////////////////////////////////////////////////////////////////////////// + + /*! This is used to introduce a caller (or called-by) graph */ + virtual QCString trCallerGraph() + { + return "Το γράφημα δείχνει από ποιές συναρτήσεις καλείται αυτή η συνάρτηση:"; + } + + /*! 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_nl.h b/src/translator_nl.h index 5bad0ee..42d48e6 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -677,7 +677,7 @@ class TranslatorDutch : public Translator "<p>\n" "De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:\n" "<ul>\n" - "<li>Een gevulde zwarte rechthoek representeert de structure of klasse waarvoor " + "<li>Een gevulde grijze rechthoek representeert de structure of klasse waarvoor " "de graaf is gegeneerd.\n" "<li>Een rechthoek met een zwarte rand representeert een gedocumenteerde structure of klasse.\n" "<li>Een rechthoek met een grijze rand representeert een ongedocumenteerde structure of klasse.\n" diff --git a/src/translator_pt.h b/src/translator_pt.h index e53efdd..711fa52 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/translator_ro.h b/src/translator_ro.h index fe12908..a2ca363 100644 --- a/src/translator_ro.h +++ b/src/translator_ro.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/translator_si.h b/src/translator_si.h index 005ffc7..8bb16cc 100644 --- a/src/translator_si.h +++ b/src/translator_si.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/util.cpp b/src/util.cpp index 1cef237..dac8532 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -626,13 +626,16 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, bool isCached = md->isTypedefValCached(); // value already cached if (isCached) { - //printf("Already cached %s->%s\n", + //printf("Already cached %s->%s [%s]\n", // md->name().data(), - // md->getCachedTypedefVal()?md->getCachedTypedefVal()->name().data():"<none>"); + // md->getCachedTypedefVal()?md->getCachedTypedefVal()->name().data():"<none>", + // md->getCachedResolvedTypedef()?md->getCachedResolvedTypedef().data():"<none>"); + if (pTemplSpec) *pTemplSpec = md->getCachedTypedefTemplSpec(); if (pResolvedType) *pResolvedType = md->getCachedResolvedTypedef(); return md->getCachedTypedefVal(); } + //printf("new typedef\n"); QCString qname = md->qualifiedName(); if (g_resolvedTypedefs.find(qname)) return 0; // typedef already done @@ -648,9 +651,9 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, } type=type.left(ip+1); int sp=0; - if (type.stripPrefix("const ")) sp+=6; // strip leading "const" + if (type.stripPrefix("const ")) sp+=6; // strip leading "const" if (type.stripPrefix("struct ")) sp+=7; // strip leading "struct" - if (type.stripPrefix("union ")) sp+=6; // strip leading "union" + if (type.stripPrefix("union ")) sp+=6; // strip leading "union" while (sp<tl && type.at(sp)==' ') sp++; MemberDef *memTypeDef = 0; ClassDef *result = getResolvedClassRec(md->getOuterScope(), @@ -677,6 +680,8 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, if (pTemplSpec) *pTemplSpec = type.mid(i); result = getResolvedClassRec(md->getOuterScope(),fileScope, type.left(i),0,0,pResolvedType); + //printf("result=%p pRresolvedType=%s sp=%d ip=%d tl=%d\n", + // result,pResolvedType?pResolvedType->data():"<none>",sp,ip,tl); } else if (si!=-1) // A::B { @@ -694,7 +699,7 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, pResolvedType); } - if (result) ip=si+sp+1; + //if (result) ip=si+sp+1; } done: @@ -703,6 +708,7 @@ done: if (result) { *pResolvedType=result->qualifiedName(); + //printf("*pResolvedType=%s\n",pResolvedType->data()); if (sp>0) pResolvedType->prepend(typedefValue.left(sp)); if (ip<tl-1) pResolvedType->append(typedefValue.right(tl-ip-1)); } @@ -719,6 +725,7 @@ done: { //printf("setting cached typedef %p in result %p\n",md,result); //printf("==> %s (%s,%d)\n",result->name().data(),result->getDefFileName().data(),result->getDefLine()); + //printf("*pResolvedType=%s\n",pResolvedType?pResolvedType->data():"<none>"); md->cacheTypedefVal(result, pTemplSpec ? *pTemplSpec : QCString(), pResolvedType ? *pResolvedType : QCString() @@ -840,6 +847,7 @@ static Definition *followPath(Definition *start,FileDef *fileScope,const QCStrin } } Definition *next = current->findInnerCompound(qualScopePart); + //printf("++ Looking for %s inside %s result %p\n",qualScopePart.data(),current->name().data(),next?next->name().data():"<null>"); if (next==0) // failed to follow the path { if (current->definitionType()==Definition::TypeNamespace) @@ -1015,7 +1023,18 @@ done: /* Returns the "distance" (=number of levels up) from item to scope, or -1 * if item in not in this scope. The explicitScopePart limits the search - * to scopes that match \a scope plus the explicit part. + * to scopes that match \a scope (or its parent scope(s)) plus the explicit part. + * Example: + * + * class A { public: class I {}; }; + * class B { public: class J {}; }; + * + * - Looking for item=='J' inside scope=='B' will return 0. + * - Looking for item=='I' inside scope=='B' will return -1 + * (as it is not found in B nor in the global scope). + * - Looking for item=='A::I' inside scope=='B', first the match B::A::I is tried but + * not found and then A::I is searched in the global scope, which matches and + * thus the result is 1. */ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope, Definition *item,const QCString &explicitScopePart) @@ -1039,11 +1058,30 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope, Definition *newScope = followPath(scope,fileScope,explicitScopePart); if (newScope) // explicitScope is inside scope => newScope is the result { + Definition *itemScope = item->getOuterScope(); //printf("scope traversal successful %s<->%s!\n",item->getOuterScope()->name().data(),newScope->name().data()); - if (item->getOuterScope()==newScope) + if (newScope && newScope->definitionType()==Definition::TypeClass) + { + //ClassDef *cd = (ClassDef *)newScope; + //printf("---> Class %s: bases=%p\n",cd->name().data(),cd->baseClasses()); + } + if (itemScope==newScope) // exact match of scopes => distance==0 { //printf("> found it\n"); } + else if (itemScope && newScope && + itemScope->definitionType()==Definition::TypeClass && + newScope->definitionType()==Definition::TypeClass && + ((ClassDef*)newScope)->isBaseClass((ClassDef*)itemScope,TRUE,0) + ) + { + // inheritance is also ok. Example: looking for B::I, where + // class A { public: class I {} }; + // class B : public A {} + + //printf("outerScope(%s) is base class of newScope(%s)\n", + // outerScope->name().data(),newScope->name().data()); + } else { int i=-1; @@ -1134,19 +1172,6 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope, //printf("> result=%d\n",i); result= (i==-1) ? -1 : i+1; } -#if 0 - if (scope!=Doxygen::globalScope) - { - int i=isAccessibleFromWithExpScope(scope->getOuterScope(),fileScope, - item,explicitScopePart); - //printf("> result=%d\n",i); - result= (i==-1) ? -1 : i+1; - } - else - { - result = -1; - } -#endif } done: //printf("> result=%d\n",result); @@ -1175,7 +1200,7 @@ static void getResolvedSymbol(Definition *scope, //printf(" found type %x name=%s d=%p\n", // d->definitionType(),d->name().data(),d); - // only look at classes and members + // only look at classes and members that are enums or typedefs if (d->definitionType()==Definition::TypeClass || (d->definitionType()==Definition::TypeMember && (((MemberDef*)d)->isTypedef() || ((MemberDef*)d)->isEnumerate()) @@ -1418,7 +1443,7 @@ ClassDef *getResolvedClassRec(Definition *scope, QCString bestResolvedType; int minDistance=10000; // init at "infinite" - if (di->definitionType()==DefinitionIntf::TypeSymbolList) + if (di->definitionType()==DefinitionIntf::TypeSymbolList) // not a unique name { DefinitionListIterator dli(*(DefinitionList*)di); Definition *d; @@ -1430,7 +1455,7 @@ ClassDef *getResolvedClassRec(Definition *scope, bestResolvedType); } } - else + else // unique name { Definition *d = (Definition *)di; getResolvedSymbol(scope,fileScope,d,explicitScopePart, @@ -1540,6 +1565,7 @@ static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' }; QCString removeRedundantWhiteSpace(const QCString &s) { + static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT"); if (s.isEmpty()) return s; QCString result; uint i; @@ -1644,6 +1670,7 @@ nextChar: if (rl>0 && (isId(result.at(rl-1)) || result.at(rl-1)=='>')) result+=' '; } result+=c; + if (cliSupport && (c=='^' || c=='%') && i>1 && isId(s.at(i-1))) result+=' '; // C++/CLI: Type^ name and Type% name } } //printf("removeRedundantWhiteSpace(`%s')=`%s'\n",s.data(),result.data()); @@ -2183,7 +2210,7 @@ int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level) if (level==256) { err("Error: Internal inconsistency: found class %s seem to have a recursive " - "inheritance relation! Please send a bug report to dimitri@stack.nl",cd->name().data()); + "inheritance relation! Please send a bug report to dimitri@stack.nl\n",cd->name().data()); return -1; } int m=maxInheritanceDepth; @@ -2948,12 +2975,20 @@ static QCString stripDeclKeywords(const QCString &s) // forward decl for circular dependencies static QCString extractCanonicalType(Definition *d,FileDef *fs,QCString type); -QCString getCanonicalTemplateSpec(Definition *d,FileDef *fs,const QCString& spec) +QCString getCanonicalTemplateSpec(Definition *d,FileDef *,const QCString& spec) { - //printf("getCanonicalTemplateSpec(%s)\n",spec.data()); QCString templSpec = spec.stripWhiteSpace(); - if (templSpec.isEmpty() || templSpec.at(0) != '<') return templSpec; - return "< " + extractCanonicalType(d,fs,templSpec.right(templSpec.length()-1).stripWhiteSpace()); + //if (!templSpec.isEmpty() && templSpec.at(0) == '<') + //{ + // templSpec = "< " + extractCanonicalType(d,fs,templSpec.right(templSpec.length()-1).stripWhiteSpace()); + //} + QCString resolvedType = resolveTypeDef(d,spec); + if (!resolvedType.isEmpty()) // not known as a typedef either + { + templSpec = resolvedType; + } + //printf("getCanonicalTemplateSpec(%s)=%s\n",spec.data(),templSpec.data()); + return templSpec; } @@ -3096,14 +3131,14 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,QCString type) // foreach identifier in the type { //printf(" i=%d p=%d\n",i,p); - canType += type.mid(pp,i-pp); + if (i>pp) canType += type.mid(pp,i-pp); - //printf(" word=%s templSpec=%s\n",word.data(),templSpec.data()); canType += getCanonicalTypeForIdentifier(d,fs,word,&templSpec); + //printf(" word=%s templSpec=%s canType=%s\n",word.data(),templSpec.data(),canType.data()); if (!templSpec.isEmpty()) // if we didn't use up the templSpec already - // (i.e. type is not a template specialization) - // then resolve any identifiers inside. + // (i.e. type is not a template specialization) + // then resolve any identifiers inside. { static QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*"); int tp=0,tl,ti; @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/version.h b/src/version.h index 226de7e..b86bb2e 100644 --- a/src/version.h +++ b/src/version.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index 3beb861..514d681 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. @@ -721,7 +721,7 @@ void XmlDocVisitor::visitPost(DocRef *ref) { if (m_hide) return; if (!ref->file().isEmpty()) endLink(); - m_t << " "; + //m_t << " "; } void XmlDocVisitor::visitPre(DocSecRefItem *ref) diff --git a/src/xmldocvisitor.h b/src/xmldocvisitor.h index c347e0e..dcb879f 100644 --- a/src/xmldocvisitor.h +++ b/src/xmldocvisitor.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 3b416d0..5d0763c 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. @@ -636,6 +636,21 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De if (md->isInline()) t << "yes"; else t << "no"; t << "\""; + if (md->isFinal()) + { + t << " final=\"yes\""; + } + + if (md->isSealed()) + { + t << " sealed=\"yes\""; + } + + if (md->isNew()) + { + t << " new=\"yes\""; + } + t << " virt=\""; switch (md->virtualness()) { @@ -657,6 +672,11 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De if (md->isMutable()) t << "yes"; else t << "no"; t << "\""; + if (md->isInitonly()) + { + t << " initonly=\"yes\""; + } + } else if (md->memberType() == MemberDef::Property) { @@ -667,8 +687,29 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De t << " writable=\""; if (md->isWritable()) t << "yes"; else t << "no"; t << "\""; + + t << " gettable=\""; + if (md->isGettable()) t << "yes"; else t << "no"; + t << "\""; + + t << " settable=\""; + if (md->isSettable()) t << "yes"; else t << "no"; + t << "\""; } + else if (md->memberType() == MemberDef::Event) + { + t << " add=\""; + if (md->isAddable()) t << "yes"; else t << "no"; + t << "\""; + + t << " remove=\""; + if (md->isRemovable()) t << "yes"; else t << "no"; + t << "\""; + t << " raise=\""; + if (md->isRaisable()) t << "yes"; else t << "no"; + t << "\""; + } t << ">" << endl; @@ -1394,7 +1435,7 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti) MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { - if ((ml->listType()&MemberList::declarationLists)==0) + if ((ml->listType()&MemberList::declarationLists)!=0) { generateXMLSection(nd,ti,t,ml,g_xmlSectionMapper.find(ml->listType())); } @@ -1537,7 +1578,7 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti) MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { - if ((ml->listType()&MemberList::declarationLists)==0) + if ((ml->listType()&MemberList::declarationLists)!=0) { generateXMLSection(fd,ti,t,ml,g_xmlSectionMapper.find(ml->listType())); } @@ -1627,7 +1668,7 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti) MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { - if ((ml->listType()&MemberList::declarationLists)==0) + if ((ml->listType()&MemberList::declarationLists)!=0) { generateXMLSection(gd,ti,t,ml,g_xmlSectionMapper.find(ml->listType())); } diff --git a/src/xmlgen.h b/src/xmlgen.h index 5193b76..c714903 100644 --- a/src/xmlgen.h +++ b/src/xmlgen.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * |