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 | |
parent | d384b6c7459cffcbb30bdd0ab06bde6f0cd12688 (diff) | |
download | Doxygen-d2d57f02eabbe81ea976f31e2af66c80c01a2a0b.zip Doxygen-d2d57f02eabbe81ea976f31e2af66c80c01a2a0b.tar.gz Doxygen-d2d57f02eabbe81ea976f31e2af66c80c01a2a0b.tar.bz2 |
Release-1.5.1-20061202
172 files changed, 1578 insertions, 1181 deletions
@@ -1,7 +1,7 @@ -DOXYGEN Version 1.5.1 +DOXYGEN Version 1.5.1-20061202 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (29 October 2006) +Dimitri van Heesch (02 December 2006) diff --git a/Makefile.in b/Makefile.in index 68aa1f5..6dabd87 100644 --- a/Makefile.in +++ b/Makefile.in @@ -60,19 +60,20 @@ install: doxywizard_install install_docs: $(INSTTOOL) -d $(DOCDIR) - cp -r doc $(DOCDIR) + $(MAKE) -C examples + $(MAKE) -C doc + $(MAKE) -C latex + cp latex/doxygen_manual.pdf $(DOCDIR) + #cp -r doc $(DOCDIR) cp -r examples $(DOCDIR) - echo "DOXYGEN = $(INSTALL)" > $(DOCDIR)/doc/Makefile - echo "DOXYDOCS = .." >> $(DOCDIR)/doc/Makefile - echo "VERSION = $(VERSION)" >> $(DOCDIR)/doc/Makefile - echo "PERL = $(PERL)" >> $(DOCDIR)/doc/Makefile - cat doc/Makefile.in >> $(DOCDIR)/doc/Makefile - cd $(DOCDIR)/examples ; $(MAKE) - cd $(DOCDIR)/doc ; $(MAKE) - rm -rf $(DOCDIR)/doc - cd $(DOCDIR)/latex ; $(MAKE) - cp $(DOCDIR)/latex/doxygen_manual.pdf $(DOCDIR) - rm -rf $(DOCDIR)/latex + cp -r html $(DOCDIR) + #echo "DOXYGEN = $(INSTALL)" > $(DOCDIR)/doc/Makefile + #echo "DOXYDOCS = .." >> $(DOCDIR)/doc/Makefile + #echo "VERSION = $(VERSION)" >> $(DOCDIR)/doc/Makefile + #echo "PERL = $(PERL)" >> $(DOCDIR)/doc/Makefile + #cat doc/Makefile.in >> $(DOCDIR)/doc/Makefile + #rm -rf $(DOCDIR)/doc + #rm -rf $(DOCDIR)/latex docs: FORCE cd examples ; $(MAKE) @@ -1,4 +1,4 @@ -DOXYGEN Version 1.5.1 +DOXYGEN Version 1.5.1_20061202 Please read INSTALL for compilation instructions. @@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. Enjoy, -Dimitri van Heesch (dimitri@stack.nl) (29 October 2006) +Dimitri van Heesch (dimitri@stack.nl) (02 December 2006) diff --git a/addon/doxywizard/Makefile.in b/addon/doxywizard/Makefile.in index 2be7628..e81c5c5 100644 --- a/addon/doxywizard/Makefile.in +++ b/addon/doxywizard/Makefile.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/addon/doxywizard/Makefile.win_nmake.in b/addon/doxywizard/Makefile.win_nmake.in index e48e05e..74a67a5 100644 --- a/addon/doxywizard/Makefile.win_nmake.in +++ b/addon/doxywizard/Makefile.win_nmake.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/addon/doxywizard/doxywizard.pro.in b/addon/doxywizard/doxywizard.pro.in index 1562b51..ea1f3de 100644 --- a/addon/doxywizard/doxywizard.pro.in +++ b/addon/doxywizard/doxywizard.pro.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2006 by Dimitri van Heesch. # diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp index 10a2e04..e2552a6 100644 --- a/addon/doxywizard/expert.cpp +++ b/addon/doxywizard/expert.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/expert.h b/addon/doxywizard/expert.h index 3e13b47..e210253 100644 --- a/addon/doxywizard/expert.h +++ b/addon/doxywizard/expert.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputbool.cpp b/addon/doxywizard/inputbool.cpp index a2208f5..ffb2e76 100644 --- a/addon/doxywizard/inputbool.cpp +++ b/addon/doxywizard/inputbool.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputbool.h b/addon/doxywizard/inputbool.h index ed7861d..b7de7ed 100644 --- a/addon/doxywizard/inputbool.h +++ b/addon/doxywizard/inputbool.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputint.cpp b/addon/doxywizard/inputint.cpp index 6489f60..e926b5e 100644 --- a/addon/doxywizard/inputint.cpp +++ b/addon/doxywizard/inputint.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputint.h b/addon/doxywizard/inputint.h index 50e4b61..094f03c 100644 --- a/addon/doxywizard/inputint.h +++ b/addon/doxywizard/inputint.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputstring.cpp b/addon/doxywizard/inputstring.cpp index 754e045..a132ff1 100644 --- a/addon/doxywizard/inputstring.cpp +++ b/addon/doxywizard/inputstring.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputstring.h b/addon/doxywizard/inputstring.h index 7e7b639..b1b2a7a 100644 --- a/addon/doxywizard/inputstring.h +++ b/addon/doxywizard/inputstring.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputstrlist.cpp b/addon/doxywizard/inputstrlist.cpp index 2dc80ab..3d26f21 100644 --- a/addon/doxywizard/inputstrlist.cpp +++ b/addon/doxywizard/inputstrlist.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputstrlist.h b/addon/doxywizard/inputstrlist.h index 7c79adb..b3c8909 100644 --- a/addon/doxywizard/inputstrlist.h +++ b/addon/doxywizard/inputstrlist.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/qtbc.h b/addon/doxywizard/qtbc.h index b1baec4..029b84d 100644 --- a/addon/doxywizard/qtbc.h +++ b/addon/doxywizard/qtbc.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * diff --git a/addon/doxywizard/version.h b/addon/doxywizard/version.h index 226de7e..b86bb2e 100644 --- a/addon/doxywizard/version.h +++ b/addon/doxywizard/version.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2006 by Dimitri van Heesch. * @@ -20,7 +20,7 @@ doxygen_version_minor=5 doxygen_version_revision=1 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. -doxygen_version_mmn=NO +doxygen_version_mmn=20061202 bin_dirs=`echo $PATH | sed -e "s/:/ /g"` @@ -217,6 +217,9 @@ if test -z "$f_platform"; then Cygwin:*) f_platform=win32-g++ ;; + CYGWIN:*) + f_platform=win32-g++ + ;; *MiNT:*) f_platform=m68k-atari-mint-g++ ;; @@ -432,15 +435,13 @@ fi test -f .makeconfig && rm .makeconfig test -f .tmakeconfig && rm .tmakeconfig -if test -z $PWD; then - PWD=`pwd` -fi +configPWD=`pwd` cat > .makeconfig <<EOF -DOXYGEN = $PWD -TMAKEPATH = $PWD/tmake/lib/$f_platform +DOXYGEN = $configPWD +TMAKEPATH = $configPWD/tmake/lib/$f_platform ENV = env TMAKEPATH=\$(TMAKEPATH) -TMAKE = $PWD/tmake/bin/tmake +TMAKE = $configPWD/tmake/bin/tmake MAKE = $f_make PERL = $f_perl RM = rm -f @@ -513,6 +514,11 @@ EOF EOF fi fi +if test "$f_platform" = "hpux-g++"; then + cat >> .tmakeconfig <<EOF + TMAKE_CXXFLAGS += -D_LARGEFILE_SOURCE +EOF +fi if test "$f_wizard" = YES; then cat >> .tmakeconfig <<EOF TMAKE_MOC = $QTDIR/bin/moc diff --git a/doc/config.doc b/doc/config.doc index 928691e..2ebb6a5 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -73,6 +73,7 @@ followed by the descriptions of the tags grouped by category. \refitem cfg_cols_in_alpha_index COLS_IN_ALPHA_INDEX \refitem cfg_compact_latex COMPACT_LATEX \refitem cfg_compact_rtf COMPACT_RTF +\refitem cfg_cpp_cli_support CPP_CLI_SUPPORT \refitem cfg_create_subdirs CREATE_SUBDIRS \refitem cfg_details_at_top DETAILS_AT_TOP \refitem cfg_directory_graph DIRECTORY_GRAPH @@ -393,6 +394,12 @@ followed by the descriptions of the tags grouped by category. func(std::string) {}). This also make the inheritance and collaboration diagrams that involve STL classes more complete and accurate. +\anchor cfg_cpp_cli_support +<dt>\c CPP_CLI_SUPPORT <dd> + \addindex CPP_CLI_SUPPORT + If you use Microsoft's C++/CLI language, you should set this option to YES to + enable parsing support. + \anchor cfg_distribute_group_doc <dt>\c DISTRIBUTE_GROUP_DOC <dd> \addindex DISTRIBUTE_GROUP_DOC diff --git a/doc/language.doc b/doc/language.doc index 73316d4..ed9cf6f 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other than English (the default). The output language is chosen through the configuration file (with default name and known as Doxyfile). -Currently (version 1.4.7), 33 languages +Currently (version 1.5.1), 33 languages are supported (sorted alphabetically): Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, @@ -136,9 +136,9 @@ when the translator was updated. </tr> <tr bgcolor="#ffffff"> <td>Greek</td> - <td>Harry Kalogirou</td> - <td>harkal at rainbow dot cs dot unipi dot gr</td> - <td>1.2.11</td> + <td>Paul Gessos</td> + <td>nickreserved at yahoo dot com</td> + <td>up-to-date</td> </tr> <tr bgcolor="#ffffff"> <td>Hungarian</td> @@ -306,7 +306,7 @@ when the translator was updated. \hline German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & up-to-date \\ \hline - Greek & Harry Kalogirou & {\tt\tiny harkal@rainbow.cs.unipi.gr} & 1.2.11 \\ + Greek & Paul Gessos & {\tt\tiny nickreserved@yahoo.com} & up-to-date \\ \hline Hungarian & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & 1.4.6 \\ ~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & ~ \\ diff --git a/doc/maintainers.txt b/doc/maintainers.txt index 3687a02..5ce55f1 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -55,7 +55,7 @@ TranslatorGerman Jens Seidel: jensseidel@users.sf.net TranslatorGreek -Harry Kalogirou: harkal@rainbow.cs.unipi.gr +Paul Gessos: nickreserved@yahoo.com TranslatorHungarian Ákos Kiss: akiss@users.sourceforge.net diff --git a/doc/translator_report.txt b/doc/translator_report.txt index 6d46178..9df007e 100644 --- a/doc/translator_report.txt +++ b/doc/translator_report.txt @@ -1,4 +1,4 @@ -(1.4.7) +(1.5.1) Doxygen supports the following 33 languages (sorted alphabetically): @@ -8,7 +8,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean (+En), Lithuanian, Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. -Of them, 13 translators are up-to-date, 20 translators are based on +Of them, 14 translators are up-to-date, 19 translators are based on some adapter class, and 2 are English based. ---------------------------------------------------------------------- @@ -27,6 +27,7 @@ still may be some details listed even for them: TranslatorEnglish TranslatorFrench TranslatorGerman + TranslatorGreek -- Remove the obsolete methods (never used). TranslatorItalian TranslatorJapanese -- Remove the obsolete methods (never used). TranslatorRussian @@ -55,9 +56,12 @@ must be implemented to become up-to-date: TranslatorRomanian 1.4.1 2 methods to implement TranslatorPortuguese 1.3.3 13 methods to implement TranslatorSlovak 1.2.18 22 methods to implement - TranslatorGreek 1.2.11 27 methods to implement TranslatorFinnish obsolete 96 methods to implement +Note: The adapter classes TranslatorAdapter_1_2_11, +TranslatorAdapter_1_2_13, TranslatorAdapter_1_2_16, +TranslatorAdapter_1_2_17 are not used and can be removed. + ---------------------------------------------------------------------- The following translator classes derive directly from the TranslatorEnglish. The class identifier has the suffix 'En' that says @@ -243,40 +247,10 @@ TranslatorFinnish (TranslatorEnglish) 96 methods to implement QCString trNoDescriptionAvailable() -TranslatorGreek (TranslatorAdapter_1_2_11) 27 methods to implement +TranslatorGreek (Translator) --------------- - Implements 167 of the required methods. - - Missing methods (should be implemented): - - virtual QCString trOverloadText() - virtual QCString trEventDocumentation() - virtual QCString trDirIndex() - virtual QCString trImplementedFromList(int numEntries) - virtual QCString trPackageMembers() - virtual QCString trStaticPackageMembers() - virtual QCString trDirDocumentation() - virtual QCString trSearchResultsTitle() - virtual QCString trDirectories() - virtual QCString trDeprecatedList() - virtual QCString trDirDescription() - virtual QCString trStaticPackageAttribs() - virtual QCString trCallGraph() - virtual QCString trPackageTypes() - virtual QCString trImplementedInList(int numEntries) - virtual QCString trSearchResults(int numDocuments) - virtual QCString trPackageAttribs() - virtual QCString trSearchMatches() - virtual QCString trEvents() - virtual QCString trCallerGraph() - virtual QCString trReferences() - virtual QCString trSourceFile(QCString & filename) - virtual QCString trDirReference(const char * dirName) - virtual QCString trDir(bool first_capital, bool singular) - virtual QCString trSearchForIndex() - virtual QCString trAll() - virtual QCString trRTFTableOfContents() + Implements 194 of the required methods. Obsolete methods (should be removed, never used): 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. * diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj index e5cfc6f..43855ba 100644 --- a/winbuild/Doxygen.vcproj +++ b/winbuild/Doxygen.vcproj @@ -46,7 +46,7 @@ AdditionalOptions="/Zm200 " Optimization="0" AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5" - PreprocessorDefinitions="ENGLISH_ONLY;_CONSOLE;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE" + PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" @@ -144,7 +144,7 @@ OmitFramePointers="true" WholeProgramOptimization="true" AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5" - PreprocessorDefinitions="ENGLISH_ONLY;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" |