From 6bf92c5d7efffb6a04c3ccbfc144ad944200fed2 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 27 Jul 2008 14:59:10 +0000 Subject: Release-1.5.6-20080727 --- Doxyfile | 6 +- INSTALL | 4 +- README | 4 +- configure | 2 +- doc/commands.doc | 70 ++++- doc/config.doc | 45 +++- doc/docblocks.doc | 16 +- doc/language.doc | 8 +- doc/translator_report.txt | 82 +----- examples/Makefile.in | 8 +- examples/Makefile.win.in | 8 +- examples/manual.c | 87 +++++++ examples/manual.cfg | 15 ++ src/classdef.cpp | 87 ++++--- src/classdef.h | 2 +- src/commentscan.l | 61 +++-- src/config.l | 43 ++++ src/doxygen.cpp | 94 ++++--- src/doxygen.css | 617 ++++++++++++++++++++++---------------------- src/doxygen_css.h | 635 ++++++++++++++++++++++------------------------ src/entry.cpp | 6 +- src/entry.h | 4 +- src/groupdef.cpp | 10 +- src/increasebuffer.pl | 1 + src/index.cpp | 6 +- src/language.cpp | 2 +- src/marshal.cpp | 4 +- src/memberdef.cpp | 36 ++- src/memberdef.h | 4 +- src/pagedef.cpp | 20 +- src/pre.l | 2 +- src/scanner.l | 5 +- src/translator_br.h | 6 +- src/translator_ca.h | 523 ++++++++++++++++++++++++++------------ src/util.cpp | 3 +- src/vhdlcode.l | 2 +- src/vhdldocgen.cpp | 29 +-- src/vhdldocgen.h | 1 - src/vhdlscanner.l | 155 +++++++---- 39 files changed, 1614 insertions(+), 1099 deletions(-) create mode 100644 examples/manual.c create mode 100644 examples/manual.cfg diff --git a/Doxyfile b/Doxyfile index 0de2079..c9143e3 100644 --- a/Doxyfile +++ b/Doxyfile @@ -7,7 +7,7 @@ DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = Doxygen PROJECT_NUMBER = OUTPUT_DIRECTORY = doxygen_docs -CREATE_SUBDIRS = YES +CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES @@ -144,7 +144,7 @@ HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = NO +GENERATE_HTMLHELP = YES GENERATE_DOCSET = YES DOCSET_FEEDNAME = "Doxygen docs" DOCSET_BUNDLE_ID = org.doxygen.Doxygen @@ -161,7 +161,7 @@ TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- -GENERATE_LATEX = YES +GENERATE_LATEX = NO LATEX_OUTPUT = LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex diff --git a/INSTALL b/INSTALL index a1e564d..abe6f0a 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ -DOXYGEN Version 1.5.6-20080626 +DOXYGEN Version 1.5.6-20080727 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (26 June 2008) +Dimitri van Heesch (27 July 2008) diff --git a/README b/README index 60f0b02..b2d8671 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.5.6_20080626 +DOXYGEN Version 1.5.6_20080727 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) (26 June 2008) +Dimitri van Heesch (dimitri@stack.nl) (27 July 2008) diff --git a/configure b/configure index 0b1e2fa..efc8c8f 100755 --- a/configure +++ b/configure @@ -20,7 +20,7 @@ doxygen_version_minor=5 doxygen_version_revision=6 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. -doxygen_version_mmn=20080626 +doxygen_version_mmn=20080727 bin_dirs=`echo $PATH | sed -e "s/:/ /g"` diff --git a/doc/commands.doc b/doc/commands.doc index f61022a..7450d91 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -83,6 +83,7 @@ documentation: \refitem cmdenum \\enum \refitem cmdexample \\example \refitem cmdexception \\exception +\refitem cmdextends \\extends \refitem cmdfdollar \\f\$ \refitem cmdfbropen \\f[ \refitem cmdfbrclose \\f] @@ -97,6 +98,7 @@ documentation: \refitem cmdif \\if \refitem cmdifnot \\ifnot \refitem cmdimage \\image +\refitem cmdimplements \\implements \refitem cmdinclude \\include \refitem cmdincludelineno \\includelineno \refitem cmdingroup \\ingroup @@ -109,6 +111,7 @@ documentation: \refitem cmdlink \\link \refitem cmdmainpage \\mainpage \refitem cmdmanonly \\manonly +\refitem cmdmemberof \\memberof \refitem cmdmsc \\msc \refitem cmdn \\n \refitem cmdname \\name @@ -372,6 +375,23 @@ doxygen. Unrecognized commands are treated as normal text. \sa section \ref cmdinclude "\\include".
+\section cmdextends \\extends + + \addindex \\extends + This command can be used to manually indicate an inheritance relation, + when the programming language does not support this concept natively + (e.g. C). + + The file \c manual.c in the example directory shows how to use this command. + \htmlonly + Click here + for the corresponding HTML documentation that is generated by doxygen. + \endhtmlonly + + \sa section \ref cmdimplements "\\implements" and section + \ref cmdmemberof "\\memberof" + +
\section cmdfile \\file [] \addindex \\file @@ -456,6 +476,23 @@ doxygen. Unrecognized commands are treated as normal text. \sa section \ref cmdshowinitializer "\\showinitializer".
+\section cmdimplements \\implements + + \addindex \\implements + This command can be used to manually indicate an inheritance relation, + when the programming language does not support this concept natively + (e.g. C). + + The file \c manual.c in the example directory shows how to use this command. + \htmlonly + Click here + for the corresponding HTML documentation that is generated by doxygen. + \endhtmlonly + + \sa section \ref cmdextends "\\extends" and section + \ref cmdmemberof "\\memberof" + +
\section cmdingroup \\ingroup ( [ ]) \addindex \\ingroup @@ -530,15 +567,36 @@ doxygen. Unrecognized commands are treated as normal text. section \ref cmdpage "\\page".
+\section cmdmemberof \\memberof + + \addindex \\memberof + This command make a function a member of a class in a similar way + as \ref cmdrelates "\\relates" does, only with this command the function + is represented as a real member of the class. + This can be useful when the programming language does not support + the concept of member functions natively (e.g. C). + + The file \c manual.c in the example directory shows how to use this command. + \htmlonly + Click here + for the corresponding HTML documentation that is generated by doxygen. + \endhtmlonly + + \sa section \ref cmdextends "\\extends" and section + \ref cmdmemberof "\\memberof" + +
\section cmdname \\name (header) -This command turns a comment block into a header -definition of a member group. The -comment block should be followed by a -//\@{ ... //\@} block containing the -members of the group. + \addindex \\name + + This command turns a comment block into a header + definition of a member group. The + comment block should be followed by a + //\@{ ... //\@} block containing the + members of the group. -See section \ref memgroup for an example. + See section \ref memgroup for an example.
\section cmdnamespace \\namespace diff --git a/doc/config.doc b/doc/config.doc index 1f3905a..31ff5a4 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -90,6 +90,7 @@ followed by the descriptions of the tags grouped by category. \refitem cfg_dot_transparent DOT_TRANSPARENT \refitem cfg_dotfile_dirs DOTFILE_DIRS \refitem cfg_doxyfile_encoding DOXYFILE_ENCODING +\refitem cfg_doxygen2qthelp_loc DOXYGEN2QTHELP_LOC \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING \refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE \refitem cfg_enabled_sections ENABLED_SECTIONS @@ -192,6 +193,8 @@ followed by the descriptions of the tags grouped by category. \refitem cfg_project_name PROJECT_NAME \refitem cfg_project_number PROJECT_NUMBER \refitem cfg_qt_autobrief QT_AUTOBRIEF +\refitem cfg_qthelp_config QTHELP_CONFIG +\refitem cfg_qthelp_file QTHELP_FILE \refitem cfg_quiet QUIET \refitem cfg_recursive RECURSIVE \refitem cfg_referenced_by_relation REFERENCED_BY_RELATION @@ -222,6 +225,7 @@ followed by the descriptions of the tags grouped by category. \refitem cfg_strip_from_inc_path STRIP_FROM_INC_PATH \refitem cfg_strip_from_path STRIP_FROM_PATH \refitem cfg_subgrouping SUBGROUPING +\refitem cfg_symbol_cache_size SYMBOL_CACHE_SIZE \refitem cfg_tab_size TAB_SIZE \refitem cfg_tagfiles TAGFILES \refitem cfg_template_relations TEMPLATE_RELATIONS @@ -569,6 +573,23 @@ sources. Doxygen will then generate output that is tailored for VHDL. be useful for C code in case the coding convention dictates that all compound types are typedef'ed and only the typedef is referenced, never the tag name. +\anchor cfg_symbol_cache_size +
\c SYMBOL_CACHE_SIZE
+ \addindex SYMBOL_CACHE_SIZE + The \c SYMBOL_CACHE_SIZE determines the size of the internal cache use to + determine which symbols to keep in memory and which to flush to disk. + When the cache is full, less often used symbols will be written to disk. + For small to medium size projects (<1000 input files) the default value is + probably good enough. For larger projects a too small cache size can cause + doxygen to be busy swapping symbols to and from disk most of the time + causing a significant performance penality. + If the system has enough physical memory increasing the cache will improve the + performance by keeping more symbols in memory. Note that the value works on + a logarithmic scale so increasing the size by one will rougly double the + memory usage. The cache size is given by this formula: + \f$2^{(16+\mbox{SYMBOL\_CACHE\_SIZE})}\f$. The valid range is 0..9, the default is 0, + corresponding to a cache size of \f$2^{16} = 65536\f$ symbols. + \section config_build Build related options @@ -1302,9 +1323,31 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" \addindex HHC_LOCATION If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c HHC_LOCATION tag can be used to specify the location (absolute path including file name) of - the HTML help compiler (hhc.exe). If non empty doxygen will try to run + the HTML help compiler (hhc.exe). If non-empty doxygen will try to run the HTML help compiler on the generated index.hhp. +\anchor cfg_qthelp_file +
\c QTHELP_FILE
+ \addindex QTHELP_FILE + If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c QTHELP_FILE tag can + be used to specify the file name of the resulting .(qch|qhp) file. + You can add a path in front of the file if the result should not be + written to the html output directory. + +\anchor cfg_qthelp_config +
\c QTHELP_CONFIG
+ \addindex QTHELP_CONFIG + If \c DOXYGEN2QTHELP_LOC is set, \c QTHELP_CONFIG must specify the file name + of a config file to pass to doxygen2qthelp. + +\anchor cfg_doxygen2qthelp_loc +
\c DOXYGEN2QTHELP_LOC
+ \addindex DOXYGEN2QTHELP_LOC + If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c DOXYGEN2QTHELP_LOC tag + can be used to specify the location (absolute path including file name) of + the doxygen2qthelp tool. If non-empty doxygen will try to run doxygen2qthelp + on the generated index.hhp. + \anchor cfg_generate_chi
\c GENERATE_CHI
\addindex GENERATE_CHI diff --git a/doc/docblocks.doc b/doc/docblocks.doc index 5ebdf7b..0e9f38e 100644 --- a/doc/docblocks.doc +++ b/doc/docblocks.doc @@ -166,23 +166,19 @@ for this case. -As you can see doxygen is quite flexible. The following however is -not legal +As you can see doxygen is quite flexible. If you have multiple +detailed descriptions, like in the following example: \verbatim //! Brief description, which is //! really a detailed description since it spans multiple lines. -/*! Oops, another detailed description! +/*! Another detailed description! */ \endverbatim -because doxygen only allows one brief and one detailed description. - -Furthermore, if there is one brief description before a declaration -and one before a definition of a code item, only the one before -the \e declaration will be used. If the same situation occurs for a -detailed description, the one before the \e definition is preferred -and the one before the declaration will be ignored. +They will be joined. Note that this is also the case if the descriptions +are at different places in the code! In this case the order will depend +on the order in which doxygen parses the code. Here is an example of a documented piece of C++ code using the Qt style: \include qtstyle.cpp diff --git a/doc/language.doc b/doc/language.doc index d991d65..bb6caeb 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -73,7 +73,7 @@ when the translator was updated. Catalan Maximiliano Pin
Albert Mora max.pin at bitroit dot com
amora at iua dot upf dot es - 1.5.4 + up-to-date Chinese @@ -235,7 +235,7 @@ when the translator was updated. Serbian Dejan Milosavljevic dmilos at email dot com - 1.4.1 + up-to-date SerbianCyrilic @@ -294,7 +294,7 @@ when the translator was updated. \hline Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\ \hline - Catalan & Maximiliano Pin & {\tt\tiny max.pin@bitroit.com} & 1.5.4 \\ + Catalan & Maximiliano Pin & {\tt\tiny max.pin@bitroit.com} & up-to-date \\ ~ & Albert Mora & {\tt\tiny amora@iua.upf.es} & ~ \\ \hline Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & up-to-date \\ @@ -360,7 +360,7 @@ when the translator was updated. \hline Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\ \hline - Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.4.1 \\ + Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & up-to-date \\ \hline SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo@yahoo.com} & up-to-date \\ \hline diff --git a/doc/translator_report.txt b/doc/translator_report.txt index 8598404..4c6b192 100644 --- a/doc/translator_report.txt +++ b/doc/translator_report.txt @@ -9,7 +9,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, and Ukrainian. -Of them, 16 translators are up-to-date, 19 translators are based on +Of them, 18 translators are up-to-date, 17 translators are based on some adapter class, and 2 are English based. ---------------------------------------------------------------------- @@ -19,6 +19,7 @@ and they implement all 216 of the required methods. Anyway, there still may be some details listed even for them: TranslatorBrazilian + TranslatorCatalan TranslatorChinesetraditional TranslatorChinese TranslatorCroatian @@ -33,6 +34,7 @@ still may be some details listed even for them: TranslatorPersian TranslatorRussian TranslatorSerbianCyrilic + TranslatorSerbian TranslatorSpanish -- Change the base class to Translator. ---------------------------------------------------------------------- @@ -45,7 +47,6 @@ must be implemented to become up-to-date: TranslatorGreek 1.5.4 22 methods to implement TranslatorFrench 1.5.4 22 methods to implement TranslatorDanish 1.5.4 22 methods to implement - TranslatorCatalan 1.5.4 22 methods to implement TranslatorSwedish 1.4.6 24 methods to implement TranslatorSlovene 1.4.6 24 methods to implement TranslatorPolish 1.4.6 23 methods to implement @@ -56,7 +57,6 @@ must be implemented to become up-to-date: TranslatorArabic 1.4.6 23 methods to implement TranslatorAfrikaans 1.4.6 24 methods to implement TranslatorUkrainian 1.4.1 24 methods to implement - TranslatorSerbian 1.4.1 24 methods to implement TranslatorRomanian 1.4.1 24 methods to implement TranslatorPortuguese 1.3.3 35 methods to implement TranslatorSlovak 1.2.18 44 methods to implement @@ -152,37 +152,6 @@ TranslatorArabic (TranslatorAdapter_1_4_6) 23 methods to implement virtual QCString trNoDescriptionAvailable() -TranslatorCatalan (TranslatorAdapter_1_5_4) 22 methods to implement ------------------ - - Implements 194 of the required methods. - - Missing methods (should be implemented): - - virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) - virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single) - virtual QCString trSubprograms() - virtual QCString trModulesListDescription(bool extractAll) - virtual QCString trModulesList() - virtual QCString trTypeConstraints() - virtual QCString trMemberFunctionDocumentationFortran() - virtual QCString trCompoundListDescriptionFortran() - virtual QCString trTypeDocumentation() - virtual QCString trModuleReference(const char * namespaceName) - virtual QCString trModulesMemberDescription(bool extractAll) - virtual QCString trModulesMembers() - virtual QCString trModulesIndex() - virtual QCString trCompoundListFortran() - virtual QCString trDataTypes() - virtual QCString trCompoundIndexFortran() - virtual QCString trSubprogram(bool first_capital, bool singular) - virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate) - virtual QCString trType(bool first_capital, bool singular) - virtual QCString trModule(bool first_capital, bool singular) - virtual QCString trCompoundMembersFortran() - virtual QCString trSubprogramDocumentation() - - TranslatorDanish (TranslatorAdapter_1_5_4) 22 methods to implement ---------------- @@ -658,51 +627,6 @@ TranslatorRomanian (TranslatorAdapter_1_4_1) 24 methods to implement virtual QCString trNoDescriptionAvailable() -TranslatorSerbian (TranslatorAdapter_1_4_1) 24 methods to implement ------------------ - - Implements 192 of the required methods. - - Missing methods (should be implemented): - - virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) - virtual QCString trOverloadText() - virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single) - virtual QCString trSubprograms() - virtual QCString trModulesListDescription(bool extractAll) - virtual QCString trModulesList() - virtual QCString trTypeConstraints() - virtual QCString trMemberFunctionDocumentationFortran() - virtual QCString trCompoundListDescriptionFortran() - virtual QCString trTypeDocumentation() - virtual QCString trModuleReference(const char * namespaceName) - virtual QCString trModulesMemberDescription(bool extractAll) - virtual QCString trModulesMembers() - virtual QCString trModulesIndex() - virtual QCString trCompoundListFortran() - virtual QCString trDataTypes() - virtual QCString trCompoundIndexFortran() - virtual QCString trSubprogram(bool first_capital, bool singular) - virtual QCString trCallerGraph() - virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate) - virtual QCString trType(bool first_capital, bool singular) - virtual QCString trModule(bool first_capital, bool singular) - virtual QCString trCompoundMembersFortran() - virtual QCString trSubprogramDocumentation() - - Obsolete methods (should be removed, never used): - - virtual QCString trHeaderFilesDescription() - virtual QCString trField(bool first_capital, bool singular) - virtual QCString trPackageDocumentation() - virtual QCString trSources() - virtual QCString trReimplementedForInternalReasons() - virtual QCString trInterfaces() - virtual QCString trHeaderFiles() - virtual QCString trBugsAndLimitations() - virtual QCString trNoDescriptionAvailable() - - TranslatorSlovak (TranslatorAdapter_1_2_18) 44 methods to implement ---------------- diff --git a/examples/Makefile.in b/examples/Makefile.in index 1176e6d..6db4f01 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -24,13 +24,14 @@ all: class/html/index.html \ memgrp/html/index.html \ docstring/html/index.html \ pyexample/html/index.html \ - mux/html/index.html + mux/html/index.html \ + manual/html/index.html clean: rm -rf class define enum file func page relates author \ par overload example include qtstyle jdstyle structcmd \ autolink tag restypedef afterdoc template tag group diagrams \ - memgrp docstring pyexample mux + memgrp docstring pyexample mux manual class/html/index.html: class.h class.cfg $(DOXYGEN)/bin/doxygen class.cfg @@ -106,6 +107,9 @@ pyexample/html/index.html: pyexample.py pyexample.cfg mux/html/index.html: mux.vhdl mux.cfg $(DOXYGEN)/bin/doxygen mux.cfg +manual/html/index.html: manual.c manual.cfg + $(DOXYGEN)/bin/doxygen manual.cfg + docstring/html/index.html: docstring.py docstring.cfg $(DOXYGEN)/bin/doxygen docstring.cfg diff --git a/examples/Makefile.win.in b/examples/Makefile.win.in index a6c6956..0d5e64e 100644 --- a/examples/Makefile.win.in +++ b/examples/Makefile.win.in @@ -25,13 +25,14 @@ all: class/html/index.html \ memgrp/html/index.html \ docstring/html/index.html \ pyexample/html/index.html \ - mux/html/index.html + mux/html/index.html \ + manual/html/index.html clean: del /s/y class define enum file pyexample docstring del /s/y func page relates author del /s/y par overload example include qtstyle - del /s/y jdstyle structcmd autolink resdefine mux + del /s/y jdstyle structcmd autolink resdefine mux manual del /s/y restypedef afterdoc template tag group diagrams memgrp class/html/index.html: class.h class.cfg @@ -106,6 +107,9 @@ pyexample/html/index.html: pyexample.py pyexample.cfg mux/html/index.html: mux.vhdl mux.cfg $(DOXYDIR)\doxygen mux.cfg +manual/html/index.html: manual.c manual.cfg + $(DOXYDIR)\doxygen manual.cfg + docstring/html/index.html: docstring.py docstring.cfg $(DOXYDIR)\doxygen docstring.cfg diff --git a/examples/manual.c b/examples/manual.c new file mode 100644 index 0000000..fac6832 --- /dev/null +++ b/examples/manual.c @@ -0,0 +1,87 @@ +/** + * \file manual.c + */ + +typedef struct Object Object; //!< Object type +typedef struct Vehicle Vehicle; //!< Vehicle type +typedef struct Car Car; //!< Car type +typedef struct Truck Truck; //!< Truck type + +/*! + * Base object class. + */ +struct Object +{ + int ref; //!< \private Reference count. +}; + + +/*! + * Increments object reference count by one. + * \public \memberof Object + */ +static Object * objRef(Object *obj); + + +/*! + * Decrements object reference count by one. + * \public \memberof Object + */ +static Object * objUnref(Object *obj); + + +/*! + * Vehicle class. + * \extends Object + */ +struct Vehicle +{ + Object base; //!< \protected Base class. +}; + + +/*! + * Starts the vehicle. + * \public \memberof Vehicle + */ +void vehicleStart(Vehicle *obj); + + +/*! + * Stops the vehicle. + * \public \memberof Vehicle + */ +void vehicleStop(Vehicle *obj); + + +/*! + * Car class. + * \extends Vehicle + */ +struct Car +{ + Vehicle base; //!< \protected Base class. +}; + + +/*! + * Truck class. + * \extends Vehicle + */ +struct Truck +{ + Vehicle base; //!< \protected Base class. +}; + + +/*! + * Main function. + * + * Ref vehicleStart(), objRef(), objUnref(). + */ +int main(void) +{ + Car c; + vehicleStart((Vehicle*) &c); +} + diff --git a/examples/manual.cfg b/examples/manual.cfg new file mode 100644 index 0000000..0b9f798 --- /dev/null +++ b/examples/manual.cfg @@ -0,0 +1,15 @@ +PROJECT_NAME = "Manual inheritance and membership" +OUTPUT_DIRECTORY = manual +GENERATE_LATEX = NO +GENERATE_MAN = NO +GENERATE_RTF = NO +CASE_SENSE_NAMES = NO +INPUT = manual.c +QUIET = YES +JAVADOC_AUTOBRIEF = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +TYPEDEF_HIDES_STRUCT = YES +INLINE_SOURCES = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES diff --git a/src/classdef.cpp b/src/classdef.cpp index cf4b4be..d30ee62 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -374,40 +374,40 @@ void ClassDef::internalInsertMember(MemberDef *md, /********************************************/ if (md->isRelated() && (extractPrivate || prot!=Private)) { - addMemberToList(MemberList::related,md); + addMemberToList(MemberList::related,md,true); } else if (md->isFriend()) { - addMemberToList(MemberList::friends,md); + addMemberToList(MemberList::friends,md,true); } else { switch (md->memberType()) { case MemberDef::Signal: // Qt specific - addMemberToList(MemberList::signals,md); + addMemberToList(MemberList::signals,md,true); break; case MemberDef::DCOP: // KDE2 specific - addMemberToList(MemberList::dcopMethods,md); + addMemberToList(MemberList::dcopMethods,md,true); break; case MemberDef::Property: - addMemberToList(MemberList::properties,md); + addMemberToList(MemberList::properties,md,true); break; case MemberDef::Event: - addMemberToList(MemberList::events,md); + addMemberToList(MemberList::events,md,true); break; case MemberDef::Slot: // Qt specific switch (prot) { case Protected: case Package: // slots in packages are not possible! - addMemberToList(MemberList::proSlots,md); + addMemberToList(MemberList::proSlots,md,true); break; case Public: - addMemberToList(MemberList::pubSlots,md); + addMemberToList(MemberList::pubSlots,md,true); break; case Private: - addMemberToList(MemberList::priSlots,md); + addMemberToList(MemberList::priSlots,md,true); break; } break; @@ -419,16 +419,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proStaticAttribs,md); + addMemberToList(MemberList::proStaticAttribs,md,true); break; case Package: - addMemberToList(MemberList::pacStaticAttribs,md); + addMemberToList(MemberList::pacStaticAttribs,md,true); break; case Public: - addMemberToList(MemberList::pubStaticAttribs,md); + addMemberToList(MemberList::pubStaticAttribs,md,true); break; case Private: - addMemberToList(MemberList::priStaticAttribs,md); + addMemberToList(MemberList::priStaticAttribs,md,true); break; } } @@ -437,16 +437,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proStaticMethods,md); + addMemberToList(MemberList::proStaticMethods,md,true); break; case Package: - addMemberToList(MemberList::pacStaticMethods,md); + addMemberToList(MemberList::pacStaticMethods,md,true); break; case Public: - addMemberToList(MemberList::pubStaticMethods,md); + addMemberToList(MemberList::pubStaticMethods,md,true); break; case Private: - addMemberToList(MemberList::priStaticMethods,md); + addMemberToList(MemberList::priStaticMethods,md,true); break; } } @@ -458,16 +458,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proAttribs,md); + addMemberToList(MemberList::proAttribs,md,true); break; case Package: - addMemberToList(MemberList::pacAttribs,md); + addMemberToList(MemberList::pacAttribs,md,true); break; case Public: - addMemberToList(MemberList::pubAttribs,md); + addMemberToList(MemberList::pubAttribs,md,true); break; case Private: - addMemberToList(MemberList::priAttribs,md); + addMemberToList(MemberList::priAttribs,md,true); break; } } @@ -476,16 +476,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proTypes,md); + addMemberToList(MemberList::proTypes,md,true); break; case Package: - addMemberToList(MemberList::pacTypes,md); + addMemberToList(MemberList::pacTypes,md,true); break; case Public: - addMemberToList(MemberList::pubTypes,md); + addMemberToList(MemberList::pubTypes,md,true); break; case Private: - addMemberToList(MemberList::priTypes,md); + addMemberToList(MemberList::priTypes,md,true); break; } } @@ -494,16 +494,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proMethods,md); + addMemberToList(MemberList::proMethods,md,true); break; case Package: - addMemberToList(MemberList::pacMethods,md); + addMemberToList(MemberList::pacMethods,md,true); break; case Public: - addMemberToList(MemberList::pubMethods,md); + addMemberToList(MemberList::pubMethods,md,true); break; case Private: - addMemberToList(MemberList::priMethods,md); + addMemberToList(MemberList::priMethods,md,true); break; } } @@ -517,21 +517,21 @@ void ClassDef::internalInsertMember(MemberDef *md, /*******************************************************/ if ((md->isRelated() && (extractPrivate || prot!=Private)) || md->isFriend()) { - addMemberToList(MemberList::relatedMembers,md); + addMemberToList(MemberList::relatedMembers,md,false); } else { switch (md->memberType()) { case MemberDef::Property: - addMemberToList(MemberList::propertyMembers,md); + addMemberToList(MemberList::propertyMembers,md,false); break; case MemberDef::Event: - addMemberToList(MemberList::eventMembers,md); + addMemberToList(MemberList::eventMembers,md,false); break; case MemberDef::Signal: // fall through case MemberDef::DCOP: - addMemberToList(MemberList::functionMembers,md); + addMemberToList(MemberList::functionMembers,md,false); break; case MemberDef::Slot: switch (prot) @@ -539,12 +539,12 @@ void ClassDef::internalInsertMember(MemberDef *md, case Protected: case Package: case Public: - addMemberToList(MemberList::functionMembers,md); + addMemberToList(MemberList::functionMembers,md,false); break; case Private: if (extractPrivate) { - addMemberToList(MemberList::functionMembers,md); + addMemberToList(MemberList::functionMembers,md,false); } break; } @@ -555,13 +555,13 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (md->memberType()) { case MemberDef::Typedef: - addMemberToList(MemberList::typedefMembers,md); + addMemberToList(MemberList::typedefMembers,md,false); break; case MemberDef::Enumeration: - addMemberToList(MemberList::enumMembers,md); + addMemberToList(MemberList::enumMembers,md,false); break; case MemberDef::EnumValue: - addMemberToList(MemberList::enumValMembers,md); + addMemberToList(MemberList::enumValMembers,md,false); break; case MemberDef::Function: if (md->isConstructor() || md->isDestructor()) @@ -571,11 +571,11 @@ void ClassDef::internalInsertMember(MemberDef *md, } else { - addMemberToList(MemberList::functionMembers,md); + addMemberToList(MemberList::functionMembers,md,false); } break; case MemberDef::Variable: - addMemberToList(MemberList::variableMembers,md); + addMemberToList(MemberList::variableMembers,md,false); break; default: err("Unexpected member type %d found!\n",md->memberType()); @@ -3168,11 +3168,14 @@ MemberList *ClassDef::getMemberList(MemberList::ListType lt) return 0; } -void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md) +void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md,bool isBrief) { static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); + static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); MemberList *ml = createMemberList(lt); - if (sortBriefDocs) + if (( isBrief && sortBriefDocs ) || + (!isBrief && sortMemberDocs) + ) ml->inSort(md); else ml->append(md); diff --git a/src/classdef.h b/src/classdef.h index 69e7368..8659449 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -327,7 +327,7 @@ class ClassDef : public Definition private: void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList); QCString getMemberListFileName() const; - void addMemberToList(MemberList::ListType lt,MemberDef *md); + void addMemberToList(MemberList::ListType lt,MemberDef *md,bool isBrief); MemberList *createMemberList(MemberList::ListType lt); void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title, const char *subTitle=0); diff --git a/src/commentscan.l b/src/commentscan.l index cfbc050..8351407 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -79,6 +79,7 @@ static bool handleDeprecated(const QCString &); static bool handleXRefItem(const QCString &); static bool handleRelated(const QCString &); static bool handleRelatedAlso(const QCString &); +static bool handleMemberOf(const QCString &); static bool handleRefItem(const QCString &); static bool handleSection(const QCString &); static bool handleAnchor(const QCString &); @@ -106,6 +107,7 @@ static bool handleProtectedSection(const QCString &); static bool handlePublic(const QCString &s); static bool handlePublicSection(const QCString &s); static bool handleInherit(const QCString &); +static bool handleExtends(const QCString &); typedef bool (*DocCmdFunc)(const QCString &name); @@ -197,6 +199,9 @@ static DocCmdMap docCmdMap[] = { "public", &handlePublic, FALSE }, { "publicsection", &handlePublicSection, FALSE }, { "inherit", &handleInherit, TRUE }, + { "extends", &handleExtends, TRUE }, + { "implements", &handleExtends, TRUE }, + { "memberof", &handleMemberOf, TRUE }, { "arg", 0, TRUE }, { "attention", 0, TRUE }, { "author", 0, TRUE }, @@ -840,6 +845,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" %x FnParam %x OverloadParam %x InheritParam +%x ExtendsParam %x ReadFormulaShort %x ReadFormulaLong %x AnchorLabel @@ -920,7 +926,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" { if (cmdPtr->endsBrief) { - briefEndsAtDot=FALSE; + briefEndsAtDot=FALSE; // this command forces the end of brief description setOutput(OutputDoc); } @@ -1366,7 +1372,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" } - /* --------- handle arguments of the relates(also) command ------------ */ + /* ----- handle arguments of the relates(also)/memberof command ------- */ ({ID}("::"|"."))*{ID} { // argument current->relates = yytext; @@ -1382,7 +1388,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" } {DOCNL} { // missing argument warn(yyFileName,yyLineNr, - "Warning: Missing argument of \\relates command" + "Warning: Missing argument of \\relates or \\memberof command" ); if (*yytext=='\n') yyLineNr++; addOutput('\n'); @@ -1800,6 +1806,25 @@ RCSTAG "$"{ID}":"[^\n$]+"$" BEGIN(Comment); } + /* ----- handle argument of extends and implements commands ------- */ + +({ID}("::"|"."))*{ID} { // found argument + current->extends->append( + new BaseInfo(removeRedundantWhiteSpace(yytext),Public,Normal) + ); + BEGIN( Comment ); + } +{DOCNL} { // missing argument + warn(yyFileName,yyLineNr, + "Warning: \\extends or \\implements command has no argument" + ); + if (*yytext=='\n') yyLineNr++; + addOutput('\n'); + BEGIN( Comment ); + } +. { // ignore other stuff + } + /* ----- handle language specific sections ------- */ [\\@]"~"[a-zA-Z]* { /* language switch */ @@ -2060,7 +2085,14 @@ static bool handleRelated(const QCString &) static bool handleRelatedAlso(const QCString &) { - current->relatesDup = TRUE; + current->relatesType = Duplicate; + BEGIN(RelatesParam1); + return FALSE; +} + +static bool handleMemberOf(const QCString &) +{ + current->relatesType = MemberOf; BEGIN(RelatesParam1); return FALSE; } @@ -2257,53 +2289,52 @@ static bool handlePure(const QCString &) static bool handlePrivate(const QCString &) { - endBrief(); - current->protection = Private; + current->protection = Private; return FALSE; } static bool handlePrivateSection(const QCString &) { - endBrief(); - current->protection = protection = Private; + current->protection = protection = Private; return FALSE; } static bool handleProtected(const QCString &) { - endBrief(); - current->protection = Protected; + current->protection = Protected; return FALSE; } static bool handleProtectedSection(const QCString &) { - endBrief(); current->protection = protection = Protected ; return FALSE; } static bool handlePublic(const QCString &) { - endBrief(); current->protection = Public; return FALSE; } static bool handlePublicSection(const QCString &) { - endBrief(); - current->protection = protection = Public; + current->protection = protection = Public; return FALSE; } static bool handleInherit(const QCString &) { - endBrief(); BEGIN(InheritParam); return FALSE; } +static bool handleExtends(const QCString &) +{ + BEGIN(ExtendsParam); + return FALSE; +} + //---------------------------------------------------------------------------- static void checkFormula() diff --git a/src/config.l b/src/config.l index ee1ebab..9fffc0b 100644 --- a/src/config.l +++ b/src/config.l @@ -1779,6 +1779,24 @@ void Config::create() "types are typedef'ed and only the typedef is referenced, never the tag name.\n", FALSE ); + ci = addInt( + "SYMBOL_CACHE_SIZE", + "The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \n" + "determine which symbols to keep in memory and which to flush to disk.\n" + "When the cache is full, less often used symbols will be written to disk.\n" + "For small to medium size projects (<1000 input files) the default value is \n" + "probably good enough. For larger projects a too small cache size can cause \n" + "doxygen to be busy swapping symbols to and from disk most of the time \n" + "causing a significant performance penality. \n" + "If the system has enough physical memory increasing the cache will improve the \n" + "performance by keeping more symbols in memory. Note that the value works on \n" + "a logarithmic scale so increasing the size by one will rougly double the \n" + "memory usage. The cache size is given by this formula: \n" + "2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \n" + "corresponding to a cache size of 2^16 = 65536 symbols\n", + 0,9,0 + ); + //----------------------------------------------------------------------------------------------- addInfo("Build","Build related configuration options"); //----------------------------------------------------------------------------------------------- @@ -2410,6 +2428,31 @@ void Config::create() ); cs->setWidgetType(ConfigString::File); cs->addDependency("GENERATE_HTML"); + cs = addString( + "QTHELP_FILE", + "If the GENERATE_HTMLHELP tag is set to YES, the QTHELP_FILE tag can \n" + "be used to specify the file name of the resulting .(qch|qhp) file. \n" + "You can add a path in front of the file if the result should not be \n" + "written to the html output directory. \n" + ); + cs->setWidgetType(ConfigString::File); + cs->addDependency("GENERATE_HTML"); + cs = addString( + "QTHELP_CONFIG", + "If DOXYGEN2QTHELP_LOC is set, QTHELP_CONFIG must specify the file name \n" + "of a config file to pass to doxygen2qthelp. \n" + ); + cs->setWidgetType(ConfigString::File); + cs->addDependency("GENERATE_HTML"); + cs = addString( + "DOXYGEN2QTHELP_LOC", + "If the GENERATE_HTMLHELP tag is set to YES, the DOXYGEN2QTHELP_LOC tag \n" + "can be used to specify the location (absolute path including file name) of \n" + "the doxygen2qthelp tool. If non-empty doxygen will try to run doxygen2qthelp \n" + "on the generated index.hhp.\n" + ); + cs->setWidgetType(ConfigString::File); + cs->addDependency("GENERATE_HTML"); cb = addBool( "GENERATE_CHI", "If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \n" diff --git a/src/doxygen.cpp b/src/doxygen.cpp index c2cd624..826b86d 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1794,7 +1794,7 @@ static void findUsingDeclImports(EntryNav *rootNav) root->fileName,root->startLine, md->typeString(),memName,md->argsString(), md->excpString(),root->protection,root->virt, - md->isStatic(),FALSE,md->memberType(), + md->isStatic(),Member,md->memberType(), templAl.pointer(),al.pointer() ); } @@ -1880,7 +1880,7 @@ static MemberDef *addVariableToClass( bool fromAnnScope, MemberDef *fromAnnMemb, Protection prot, - bool related) + Relationship related) { Entry *root = rootNav->entry(); @@ -2145,7 +2145,7 @@ static MemberDef *addVariableToFile( MemberDef *md=new MemberDef( root->fileName,root->startLine, root->type,name,root->args,0, - Public, Normal,root->stat,FALSE, + Public, Normal,root->stat,Member, mtype,0,0); md->setTagInfo(rootNav->tagInfo()); md->setDocumentation(root->doc,root->docFile,root->docLine); @@ -2427,6 +2427,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) QCString type=root->type.stripWhiteSpace(); ClassDef *cd=0; bool isRelated=FALSE; + bool isMemberOf=FALSE; QCString classScope=stripAnonymousNamespaceScope(scope); classScope=stripTemplateSpecifiersFromScope(classScope,FALSE); @@ -2447,7 +2448,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) FALSE, // from Anonymous scope 0, // anonymous member Public, // protection - FALSE // related to a class + Member // related to a class ); } } @@ -2476,6 +2477,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) if (!root->relates.isEmpty()) // related variable { isRelated=TRUE; + isMemberOf=(root->relatesType == MemberOf); if (getClass(root->relates)==0 && !scope.isEmpty()) scope=mergeScopes(scope,root->relates); else @@ -2517,7 +2519,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) TRUE, // from anonymous scope 0, // from anonymous member root->protection, - isRelated + isMemberOf ? Foreign : isRelated ? Related : Member ); added=TRUE; } @@ -2541,7 +2543,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) FALSE, // from anonymous scope md, // from anonymous member root->protection, - isRelated); + isMemberOf ? Foreign : isRelated ? Related : Member); } else if (!name.isEmpty()) // global variable { @@ -2662,7 +2664,10 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, MemberDef *md=new MemberDef( root->fileName,root->startLine, root->type,name,root->args,root->exception, - root->protection,root->virt,root->stat,!root->relates.isEmpty(), + root->protection,root->virt, + root->stat && root->relatesType != MemberOf, + root->relates.isEmpty() ? Member : + root->relatesType == MemberOf ? Foreign : Related, mtype,root->tArgLists ? root->tArgLists->last() : 0,root->argList); md->setTagInfo(rootNav->tagInfo()); md->setMemberClass(cd); @@ -2787,13 +2792,13 @@ 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 spec=%d proto=%d docFile=%s\n", + " `%s' `%s'::`%s' `%s' relates=`%s' relatesType=`%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(), root->args.data(), root->relates.data(), - root->relatesDup, + root->relatesType, root->fileName.data(), root->startLine, root->bodyLine, @@ -2870,7 +2875,7 @@ static void buildFunctionList(EntryNav *rootNav) || rootNav->parent()->section()==Entry::OBJCIMPL_SEC ) && !isMember && - (root->relates.isEmpty() || root->relatesDup) && + (root->relates.isEmpty() || root->relatesType == Duplicate) && root->type.left(7)!="extern " && root->type.left(8)!="typedef " ) // no member => unrelated function @@ -3013,7 +3018,7 @@ static void buildFunctionList(EntryNav *rootNav) md=new MemberDef( root->fileName,root->startLine, root->type,name,root->args,root->exception, - root->protection,root->virt,root->stat,FALSE, + root->protection,root->virt,root->stat,Member, MemberDef::Function,tArgList,root->argList); md->setTagInfo(rootNav->tagInfo()); @@ -3127,8 +3132,8 @@ static void buildFunctionList(EntryNav *rootNav) Doxygen::functionNameSDict->append(name,mn); } addMemberToGroups(root,md); - if (!root->relatesDup) // if this is a relatesalso command, allow find - // Member to pick it up + if (root->relatesType == Simple) // if this is a relatesalso command, + // allow find Member to pick it up { rootNav->changeSection(Entry::EMPTY_SEC); // Otherwise we have finished // with this entry. @@ -3551,7 +3556,7 @@ static void transferRelatedFunctionDocumentation() LockingPtr mdAl = md->argumentList(); LockingPtr rmdAl = rmd->argumentList(); //printf(" Member found: related=`%d'\n",rmd->isRelated()); - if (rmd->isRelated() && // related function + if ((rmd->isRelated() || rmd->isForeign()) && // related function matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl.pointer(), rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(), TRUE @@ -3561,6 +3566,8 @@ static void transferRelatedFunctionDocumentation() //printf(" Found related member `%s'\n",md->name().data()); if (rmd->relatedAlso()) md->setRelatedAlso(rmd->relatedAlso()); + else if (rmd->isForeign()) + md->makeForeign(); else md->makeRelated(); } @@ -4928,7 +4935,7 @@ static bool findGlobalMember(EntryNav *rootNav, } } } - if (!found && !root->relatesDup) // no match + if (!found && root->relatesType != Duplicate) // no match { QCString fullFuncDecl=decl; if (root->argList) fullFuncDecl+=argListToString(root->argList,TRUE); @@ -5114,6 +5121,7 @@ static void findMember(EntryNav *rootNav, QCString exceptions; QCString funcSpec; bool isRelated=FALSE; + bool isMemberOf=FALSE; bool isFriend=FALSE; bool done; do @@ -5195,6 +5203,7 @@ static void findMember(EntryNav *rootNav, if (!root->relates.isEmpty()) { // related member, prefix user specified scope isRelated=TRUE; + isMemberOf=(root->relatesType == MemberOf); if (getClass(root->relates)==0 && !scopeName.isEmpty()) scopeName= mergeScopes(scopeName,root->relates); else @@ -5375,11 +5384,12 @@ static void findMember(EntryNav *rootNav, " related=`%s'\n" " exceptions=`%s'\n" " isRelated=%d\n" + " isMemberOf=%d\n" " isFriend=%d\n" " isFunc=%d\n\n", namespaceName.data(),className.data(), funcType.data(),funcSpec.data(),funcName.data(),funcArgs.data(),funcTempList.data(), - funcDecl.data(),root->relates.data(),exceptions.data(),isRelated,isFriend, + funcDecl.data(),root->relates.data(),exceptions.data(),isRelated,isMemberOf,isFriend, isFunc ); @@ -5621,7 +5631,7 @@ static void findMember(EntryNav *rootNav, MemberDef *md=new MemberDef( root->fileName,root->startLine, funcType,funcName,funcArgs,exceptions, - root->protection,root->virt,root->stat,FALSE, + root->protection,root->virt,root->stat,Member, mtype,tArgList,root->argList); //printf("new specialized member %s args=`%s'\n",md->name().data(),funcArgs.data()); md->setTagInfo(rootNav->tagInfo()); @@ -5685,7 +5695,7 @@ static void findMember(EntryNav *rootNav, MemberDef *md=new MemberDef( root->fileName,root->startLine, funcType,funcName,funcArgs,exceptions, - root->protection,root->virt,root->stat,TRUE, + root->protection,root->virt,root->stat,Related, mtype,tArgList,root->argList); md->setTagInfo(rootNav->tagInfo()); md->setTypeConstraints(root->typeConstr); @@ -5814,7 +5824,9 @@ static void findMember(EntryNav *rootNav, MemberDef *md=new MemberDef( root->fileName,root->startLine, funcType,funcName,funcArgs,exceptions, - root->protection,root->virt,root->stat,TRUE, + root->protection,root->virt, + root->stat && !isMemberOf, + isMemberOf ? Foreign : isRelated ? Related : Member, mtype, (root->tArgLists ? root->tArgLists->last() : 0), funcArgs.isEmpty() ? 0 : root->argList); @@ -5897,7 +5909,7 @@ static void findMember(EntryNav *rootNav, cd->insertMember(md); cd->insertUsedFile(root->fileName); md->setRefItems(root->sli); - if (root->relatesDup) md->setRelatedAlso(cd); + if (root->relatesType == Duplicate) md->setRelatedAlso(cd); addMemberToGroups(root,md); //printf("Adding member=%s\n",md->name().data()); if (newMemberName) @@ -5907,7 +5919,7 @@ static void findMember(EntryNav *rootNav, Doxygen::memberNameSDict->append(funcName,mn); } } - if (root->relatesDup) + if (root->relatesType == Duplicate) { if (!findGlobalMember(rootNav,namespaceName,funcName,funcTempList,funcArgs,funcDecl)) { @@ -5940,7 +5952,7 @@ localObjCMethod: MemberDef *md=new MemberDef( root->fileName,root->startLine, funcType,funcName,funcArgs,exceptions, - root->protection,root->virt,root->stat,FALSE, + root->protection,root->virt,root->stat,Member, MemberDef::Function,0,root->argList); md->setTagInfo(rootNav->tagInfo()); md->makeImplementationDetail(); @@ -6020,7 +6032,7 @@ static void filterMemberDocumentation(EntryNav *rootNav) //printf("rootNav->parent()->name()=%s\n",rootNav->parent()->name().data()); bool isFunc=TRUE; - if (root->relatesDup && !root->relates.isEmpty()) + if (root->relatesType == Duplicate && !root->relates.isEmpty()) { QCString tmp = root->relates; root->relates.resize(0); @@ -6205,6 +6217,7 @@ static void findEnums(EntryNav *rootNav) MemberNameSDict *mnsd=0; bool isGlobal; bool isRelated=FALSE; + bool isMemberOf=FALSE; //printf("Found enum with name `%s' relates=%s\n",root->name.data(),root->relates.data()); int i; @@ -6232,6 +6245,7 @@ static void findEnums(EntryNav *rootNav) if (!root->relates.isEmpty()) { // related member, prefix user specified scope isRelated=TRUE; + isMemberOf=(root->relatesType == MemberOf); if (getClass(root->relates)==0 && !scope.isEmpty()) scope=mergeScopes(scope,root->relates); else @@ -6264,7 +6278,9 @@ static void findEnums(EntryNav *rootNav) md = new MemberDef( root->fileName,root->startLine, 0,name,0,0, - root->protection,Normal,FALSE,isRelated,MemberDef::Enumeration, + root->protection,Normal,FALSE, + isMemberOf ? Foreign : isRelated ? Related : Member, + MemberDef::Enumeration, 0,0); md->setTagInfo(rootNav->tagInfo()); if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd); @@ -7463,7 +7479,7 @@ static void findDefineDocumentation(EntryNav *rootNav) { MemberDef *md=new MemberDef("",1, "#define",root->name,root->args,0, - Public,Normal,FALSE,FALSE,MemberDef::Define,0,0); + Public,Normal,FALSE,Member,MemberDef::Define,0,0); md->setTagInfo(rootNav->tagInfo()); //printf("Searching for `%s' fd=%p\n",filePathName.data(),fd); md->setFileDef(rootNav->parent()->fileDef()); @@ -8925,10 +8941,9 @@ extern void commentScanTest(); void initDoxygen() { -#if QT_VERSION >= 200 setlocale(LC_ALL,""); + setlocale(LC_CTYPE,"C"); // to get isspace(0xA0)==0, needed for UTF-8 setlocale(LC_NUMERIC,"C"); -#endif //Doxygen::symbolMap->setAutoDelete(TRUE); @@ -9400,8 +9415,11 @@ void parseInput() **************************************************************************/ Doxygen::symbolMap = new QDict(1000); - Doxygen::symbolCache = new ObjCache(16); // 16 -> room for 65536 elements, - // ~2.0 MByte "overhead" + int cacheSize = Config_getInt("SYMBOL_CACHE_SIZE"); + if (cacheSize<0) cacheSize=0; + if (cacheSize>9) cacheSize=9; + Doxygen::symbolCache = new ObjCache(16+cacheSize); // 16 -> room for 65536 elements, + // ~2.0 MByte "overhead" Doxygen::symbolStorage = new Store; #ifdef HAS_SIGNALS @@ -10196,6 +10214,24 @@ void generateOutput() } QDir::setCurrent(oldDir); } + if ( Config_getBool("GENERATE_HTMLHELP") && + !Config_getString("DOXYGEN2QTHELP_LOC").isEmpty() && + !Config_getString("QTHELP_CONFIG").isEmpty()) + { + msg("Running doxygen2qthelp...\n"); + const QCString qtHelpFile = Config_getString("QTHELP_FILE"); + const QCString args = QCString().sprintf("--config=%s index.hhp%s%s", + Config_getString("QTHELP_CONFIG").data(), + (qtHelpFile.isEmpty() ? "" : " "), (qtHelpFile.isEmpty() ? "" : qtHelpFile.data())); + + const QString oldDir = QDir::currentDirPath(); + QDir::setCurrent(Config_getString("HTML_OUTPUT")); + if (portable_system(Config_getString("DOXYGEN2QTHELP_LOC"), args.data(), FALSE)) + { + err("Error: failed to run doxygen2qthelp on index.hhp\n"); + } + QDir::setCurrent(oldDir); + } if (Config_getBool("SEARCHENGINE")) { msg("Generating search index\n"); diff --git a/src/doxygen.css b/src/doxygen.css index 74c22a2..c8356a2 100644 --- a/src/doxygen.css +++ b/src/doxygen.css @@ -1,363 +1,287 @@ -BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { - font-family: Geneva, Arial, Helvetica, sans-serif; +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 12px; } -BODY,TD { - font-size: 90%; -} -H1 { + +/* @group Heading Levels */ + +h1 { text-align: center; - font-size: 160%; + font-size: 150%; } -H2 { + +h2 { font-size: 120%; } -H3 { + +h3 { font-size: 100%; } -CAPTION { - font-weight: bold + +/* @end */ + +caption { + font-weight: bold; } -DIV.qindex { - width: 100%; + +div.qindex, div.navpath, div.navtab{ background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; - line-height: 140%; } -DIV.navpath { + +div.qindex, div.navpath { width: 100%; - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - padding: 2px; line-height: 140%; } -DIV.navtab { - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; + +div.navtab { + margin-right: 15px; } -TD.navtab { - font-size: 70%; + +/* @group Link Styling */ + +a { + color: #153788; + font-weight: normal; + text-decoration: none; } -A.qindex { - text-decoration: none; - font-weight: bold; - color: #1A419D; + +.contents a:visited { + color: #1b77c5; } -A.qindex:visited { - text-decoration: none; - font-weight: bold; - color: #1A419D + +a:hover { + text-decoration: underline; } -A.qindex:hover { - text-decoration: none; - background-color: #ddddff; + +a.qindex { + font-weight: bold; } -A.qindexHL { - text-decoration: none; + +a.qindexHL { font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } -A.qindexHL:hover { - text-decoration: none; - background-color: #6666cc; - color: #ffffff; -} -A.qindexHL:visited { - text-decoration: none; - background-color: #6666cc; - color: #ffffff + +a.el { + font-weight: bold; } -A.el { - text-decoration: none; - font-weight: bold + +a.elRef { } -A.elRef { - font-weight: bold + +a.code { } -A.code:link { - text-decoration: none; - font-weight: normal; - color: #0000FF + +a.codeRef { } -A.code:visited { - text-decoration: none; - font-weight: normal; - color: #0000FF + +/* @end */ + +dl.el { + margin-left: -1cm; } -A.codeRef:link { - font-weight: normal; - color: #0000FF + +.fragment { + font-family: monospace, fixed; + font-size: 105%; } -A.codeRef:visited { - font-weight: normal; - color: #0000FF + +pre.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + padding: 4px 6px; + margin: 4px 8px 4px 2px; } -A:hover { - text-decoration: none; - background-color: #f2f2ff + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px } -DL.el { - margin-left: -1cm + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; } -.fragment { - font-family: monospace, fixed; - font-size: 95%; + +div.groupText { + margin-left: 16px; + font-style: italic; } -PRE.fragment { - border: 1px solid #CCCCCC; - background-color: #f5f5f5; - margin-top: 4px; - margin-bottom: 4px; - margin-left: 2px; - margin-right: 8px; - padding-left: 6px; - padding-right: 6px; - padding-top: 4px; - padding-bottom: 4px; -} -DIV.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px -} - -DIV.groupHeader { - margin-left: 16px; - margin-top: 12px; - margin-bottom: 6px; - font-weight: bold; -} -DIV.groupText { - margin-left: 16px; - font-style: italic; - font-size: 90% -} -BODY { + +body { background: white; color: black; margin-right: 20px; margin-left: 20px; } -TD.indexkey { + +td.indexkey { background-color: #e8eef2; font-weight: bold; - padding-right : 10px; - padding-top : 2px; - padding-left : 10px; - padding-bottom : 2px; - margin-left : 0px; - margin-right : 0px; - margin-top : 2px; - margin-bottom : 2px; border: 1px solid #CCCCCC; + margin: 2px 0px 2px 0; + padding: 2px 10px; } -TD.indexvalue { + +td.indexvalue { background-color: #e8eef2; - font-style: italic; - padding-right : 10px; - padding-top : 2px; - padding-left : 10px; - padding-bottom : 2px; - margin-left : 0px; - margin-right : 0px; - margin-top : 2px; - margin-bottom : 2px; +// font-style: italic; border: 1px solid #CCCCCC; + padding: 2px 10px; + margin: 2px 0px; } -TR.memlist { - background-color: #f0f0f0; + +tr.memlist { + background-color: #f0f0f0; } -P.formulaDsp { - text-align: center; + +p.formulaDsp { + text-align: center; } -IMG.formulaDsp { + +img.formulaDsp { + } -IMG.formulaInl { - vertical-align: middle; + +img.formulaInl { + vertical-align: middle; } -SPAN.keyword { color: #008000 } -SPAN.keywordtype { color: #604020 } -SPAN.keywordflow { color: #e08000 } -SPAN.comment { color: #800000 } -SPAN.preprocessor { color: #806020 } -SPAN.stringliteral { color: #002080 } -SPAN.charliteral { color: #008080 } -SPAN.vhdldigit { color: #ff00ff } -SPAN.vhdlchar { color: #000000 } -SPAN.vhdlkeyword { color: #700070 } -SPAN.vhdllogic { color: #ff0000 } -.mdescLeft { - padding: 0px 8px 4px 8px; - font-size: 80%; - font-style: italic; - background-color: #FAFAFA; - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; +/* @group Code Colorization */ + +span.keyword { + color: #008000 } -.mdescRight { - padding: 0px 8px 4px 8px; - font-size: 80%; - font-style: italic; - background-color: #FAFAFA; - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; + +span.keywordtype { + color: #604020 } -.memItemLeft { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 80%; + +span.keywordflow { + color: #e08000 } -.memItemRight { - padding: 1px 8px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 80%; + +span.comment { + color: #800000 } -.memTemplItemLeft { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: none; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 80%; + +span.preprocessor { + color: #806020 } -.memTemplItemRight { - padding: 1px 8px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: none; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 80%; + +span.stringliteral { + color: #002080 } -.memTemplParams { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - color: #606060; - background-color: #FAFAFA; - font-size: 80%; + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 } -.search { + +span.vhdllogic { + color: #ff0000 +} + +/* @end */ + +.search { color: #003399; font-weight: bold; } -FORM.search { + +form.search { margin-bottom: 0px; margin-top: 0px; } -INPUT.search { + +input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } -TD.tiny { + +td.tiny { font-size: 75%; } -a { - color: #1A41A8; -} -a:visited { - color: #2A3798; -} -.dirtab { + +.dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } -TH.dirtab { + +th.dirtab { background: #e8eef2; font-weight: bold; } -HR { - height: 1px; + +hr { + height: 0; border: none; - border-top: 1px solid black; + border-top: 1px solid #666; } -/* Style for detailed member documentation */ +/* @group Member Descriptions */ + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #FAFAFA; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #ccc; +} + +.memTemplParams { + color: #606060; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; -} -.memnav { +} + +.memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; @@ -365,69 +289,154 @@ HR { margin-right: 15px; padding: 2px; } + .memitem { - padding: 4px; - background-color: #eef3f5; - border-width: 1px; - border-style: solid; - border-color: #dedeee; - -moz-border-radius: 8px 8px 8px 8px; + padding: 0; } + .memname { white-space: nowrap; font-weight: bold; } -.memdoc{ - padding-left: 10px; + +.memproto, .memdoc { + border: 1px solid #84b0c7; } + .memproto { + padding: 0; background-color: #d5e1e8; - width: 100%; - border-width: 1px; - border-style: solid; - border-color: #84b0c7; font-weight: bold; - -moz-border-radius: 8px 8px 8px 8px; + -webkit-border-top-left-radius: 8px; + -webkit-border-top-right-radius: 8px; + -moz-border-radius-topleft: 8px; + -moz-border-radius-topright: 8px; } + +.memdoc { + padding: 2px 5px; + background-color: #eef3f5; + border-top-width: 0; + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; +} + +.memdoc p, .memdoc dl, .memdoc ul { + margin: 6px 0; +} + .paramkey { text-align: right; } + .paramtype { white-space: nowrap; } + .paramname { color: #602020; - font-style: italic; white-space: nowrap; } -/* End Styling for detailed member documentation */ +.paramname em { + font-style: normal; +} + +/* @end */ + +/* @group Directory (tree) */ /* for the tree view */ + .ftvtree { font-family: sans-serif; - margin:0.5em; + margin: 0.5em; +} + +/* these are for tree view when used as main index */ + +.directory { + font-size: 9pt; + font-weight: bold; +} + +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* +The following two styles can be used to replace the root node title +with an image of your choice. Simply uncomment the next two styles, +specify the name of your image and be sure to set 'height' to the +proper pixel height of your image. +*/ + +/* +.directory h3.swap { + height: 61px; + background-repeat: no-repeat; + background-image: url("yourimage.gif"); +} +.directory h3.swap span { + display: none; +} +*/ + +.directory > h3 { + margin-top: 0; } -.directory { - font-size: 9pt; - font-weight: bold; + +.directory p { + margin: 0px; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0px; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ + +.directory-alt { + font-size: 100%; + font-weight: bold; } -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; + +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; } -.directory > h3 { - margin-top: 0; + +.directory-alt > h3 { + margin-top: 0; } -.directory p { - margin: 0px; - white-space: nowrap; + +.directory-alt p { + margin: 0px; + white-space: nowrap; } -.directory div { - display: none; - margin: 0px; + +.directory-alt div { + display: none; + margin: 0px; } -.directory img { - vertical-align: -30%; + +.directory-alt img { + vertical-align: -30%; } +/* @end */ + +address { + font-style: normal; + color: #333; +} diff --git a/src/doxygen_css.h b/src/doxygen_css.h index 2c42fd5..d9d381e 100644 --- a/src/doxygen_css.h +++ b/src/doxygen_css.h @@ -1,363 +1,287 @@ -"BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {\n" -" font-family: Geneva, Arial, Helvetica, sans-serif;\n" +"body, table, div, p, dl {\n" +" font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;\n" +" font-size: 12px;\n" "}\n" -"BODY,TD {\n" -" font-size: 90%;\n" -"}\n" -"H1 {\n" +"\n" +"/* @group Heading Levels */\n" +"\n" +"h1 {\n" " text-align: center;\n" -" font-size: 160%;\n" +" font-size: 150%;\n" "}\n" -"H2 {\n" +"\n" +"h2 {\n" " font-size: 120%;\n" "}\n" -"H3 {\n" +"\n" +"h3 {\n" " font-size: 100%;\n" "}\n" -"CAPTION { \n" -" font-weight: bold \n" +"\n" +"/* @end */\n" +"\n" +"caption {\n" +" font-weight: bold;\n" "}\n" -"DIV.qindex {\n" -" width: 100%;\n" +"\n" +"div.qindex, div.navpath, div.navtab{\n" " background-color: #e8eef2;\n" " border: 1px solid #84b0c7;\n" " text-align: center;\n" " margin: 2px;\n" " padding: 2px;\n" -" line-height: 140%;\n" "}\n" -"DIV.navpath {\n" +"\n" +"div.qindex, div.navpath {\n" " width: 100%;\n" -" background-color: #e8eef2;\n" -" border: 1px solid #84b0c7;\n" -" text-align: center;\n" -" margin: 2px;\n" -" padding: 2px;\n" " line-height: 140%;\n" "}\n" -"DIV.navtab {\n" -" background-color: #e8eef2;\n" -" border: 1px solid #84b0c7;\n" -" text-align: center;\n" -" margin: 2px;\n" -" margin-right: 15px;\n" -" padding: 2px;\n" +"\n" +"div.navtab {\n" +" margin-right: 15px;\n" "}\n" -"TD.navtab {\n" -" font-size: 70%;\n" +"\n" +"/* @group Link Styling */\n" +"\n" +"a {\n" +" color: #153788;\n" +" font-weight: normal;\n" +" text-decoration: none;\n" "}\n" -"A.qindex {\n" -" text-decoration: none;\n" -" font-weight: bold;\n" -" color: #1A419D;\n" +"\n" +".contents a:visited {\n" +" color: #1b77c5;\n" "}\n" -"A.qindex:visited {\n" -" text-decoration: none;\n" -" font-weight: bold;\n" -" color: #1A419D\n" +"\n" +"a:hover {\n" +" text-decoration: underline;\n" "}\n" -"A.qindex:hover {\n" -" text-decoration: none;\n" -" background-color: #ddddff;\n" +"\n" +"a.qindex {\n" +" font-weight: bold;\n" "}\n" -"A.qindexHL {\n" -" text-decoration: none;\n" +"\n" +"a.qindexHL {\n" " font-weight: bold;\n" " background-color: #6666cc;\n" " color: #ffffff;\n" " border: 1px double #9295C2;\n" "}\n" -"A.qindexHL:hover {\n" -" text-decoration: none;\n" -" background-color: #6666cc;\n" -" color: #ffffff;\n" -"}\n" -"A.qindexHL:visited { \n" -" text-decoration: none; \n" -" background-color: #6666cc; \n" -" color: #ffffff \n" +"\n" +"a.el {\n" +" font-weight: bold;\n" "}\n" -"A.el { \n" -" text-decoration: none; \n" -" font-weight: bold \n" +"\n" +"a.elRef {\n" "}\n" -"A.elRef { \n" -" font-weight: bold \n" +"\n" +"a.code {\n" "}\n" -"A.code:link { \n" -" text-decoration: none; \n" -" font-weight: normal; \n" -" color: #0000FF\n" +"\n" +"a.codeRef {\n" "}\n" -"A.code:visited { \n" -" text-decoration: none; \n" -" font-weight: normal; \n" -" color: #0000FF\n" +"\n" +"/* @end */\n" +"\n" +"dl.el {\n" +" margin-left: -1cm;\n" "}\n" -"A.codeRef:link { \n" -" font-weight: normal; \n" -" color: #0000FF\n" +"\n" +".fragment {\n" +" font-family: monospace, fixed;\n" +" font-size: 105%;\n" "}\n" -"A.codeRef:visited { \n" -" font-weight: normal; \n" -" color: #0000FF\n" +"\n" +"pre.fragment {\n" +" border: 1px solid #CCCCCC;\n" +" background-color: #f5f5f5;\n" +" padding: 4px 6px;\n" +" margin: 4px 8px 4px 2px;\n" "}\n" -"A:hover { \n" -" text-decoration: none; \n" -" background-color: #f2f2ff \n" +"\n" +"div.ah {\n" +" background-color: black;\n" +" font-weight: bold;\n" +" color: #ffffff;\n" +" margin-bottom: 3px;\n" +" margin-top: 3px\n" "}\n" -"DL.el { \n" -" margin-left: -1cm \n" +"\n" +"div.groupHeader {\n" +" margin-left: 16px;\n" +" margin-top: 12px;\n" +" margin-bottom: 6px;\n" +" font-weight: bold;\n" "}\n" -".fragment {\n" -" font-family: monospace, fixed;\n" -" font-size: 95%;\n" +"\n" +"div.groupText {\n" +" margin-left: 16px;\n" +" font-style: italic;\n" "}\n" -"PRE.fragment {\n" -" border: 1px solid #CCCCCC;\n" -" background-color: #f5f5f5;\n" -" margin-top: 4px;\n" -" margin-bottom: 4px;\n" -" margin-left: 2px;\n" -" margin-right: 8px;\n" -" padding-left: 6px;\n" -" padding-right: 6px;\n" -" padding-top: 4px;\n" -" padding-bottom: 4px;\n" -"}\n" -"DIV.ah { \n" -" background-color: black; \n" -" font-weight: bold; \n" -" color: #ffffff; \n" -" margin-bottom: 3px; \n" -" margin-top: 3px \n" -"}\n" -"\n" -"DIV.groupHeader {\n" -" margin-left: 16px;\n" -" margin-top: 12px;\n" -" margin-bottom: 6px;\n" -" font-weight: bold;\n" -"}\n" -"DIV.groupText { \n" -" margin-left: 16px; \n" -" font-style: italic; \n" -" font-size: 90% \n" -"}\n" -"BODY {\n" +"\n" +"body {\n" " background: white;\n" " color: black;\n" " margin-right: 20px;\n" " margin-left: 20px;\n" "}\n" -"TD.indexkey {\n" +"\n" +"td.indexkey {\n" " background-color: #e8eef2;\n" " font-weight: bold;\n" -" padding-right : 10px;\n" -" padding-top : 2px;\n" -" padding-left : 10px;\n" -" padding-bottom : 2px;\n" -" margin-left : 0px;\n" -" margin-right : 0px;\n" -" margin-top : 2px;\n" -" margin-bottom : 2px;\n" " border: 1px solid #CCCCCC;\n" +" margin: 2px 0px 2px 0;\n" +" padding: 2px 10px;\n" "}\n" -"TD.indexvalue {\n" +"\n" +"td.indexvalue {\n" " background-color: #e8eef2;\n" -" font-style: italic;\n" -" padding-right : 10px;\n" -" padding-top : 2px;\n" -" padding-left : 10px;\n" -" padding-bottom : 2px;\n" -" margin-left : 0px;\n" -" margin-right : 0px;\n" -" margin-top : 2px;\n" -" margin-bottom : 2px;\n" +"// font-style: italic;\n" " border: 1px solid #CCCCCC;\n" +" padding: 2px 10px;\n" +" margin: 2px 0px;\n" "}\n" -"TR.memlist {\n" -" background-color: #f0f0f0; \n" +"\n" +"tr.memlist {\n" +" background-color: #f0f0f0;\n" "}\n" -"P.formulaDsp { \n" -" text-align: center; \n" +"\n" +"p.formulaDsp {\n" +" text-align: center;\n" "}\n" -"IMG.formulaDsp {\n" +"\n" +"img.formulaDsp {\n" +" \n" "}\n" -"IMG.formulaInl { \n" -" vertical-align: middle; \n" +"\n" +"img.formulaInl {\n" +" vertical-align: middle;\n" "}\n" -"SPAN.keyword { color: #008000 }\n" -"SPAN.keywordtype { color: #604020 }\n" -"SPAN.keywordflow { color: #e08000 }\n" -"SPAN.comment { color: #800000 }\n" -"SPAN.preprocessor { color: #806020 }\n" -"SPAN.stringliteral { color: #002080 }\n" -"SPAN.charliteral { color: #008080 }\n" -"SPAN.vhdldigit { color: #ff00ff }\n" -"SPAN.vhdlchar { color: #000000 }\n" -"SPAN.vhdlkeyword { color: #700070 }\n" -"SPAN.vhdllogic { color: #ff0000 }\n" "\n" -".mdescLeft {\n" -" padding: 0px 8px 4px 8px;\n" -" font-size: 80%;\n" -" font-style: italic;\n" -" background-color: #FAFAFA;\n" -" border-top: 1px none #E0E0E0;\n" -" border-right: 1px none #E0E0E0;\n" -" border-bottom: 1px none #E0E0E0;\n" -" border-left: 1px none #E0E0E0;\n" -" margin: 0px;\n" +"/* @group Code Colorization */\n" +"\n" +"span.keyword {\n" +" color: #008000\n" "}\n" -".mdescRight {\n" -" padding: 0px 8px 4px 8px;\n" -" font-size: 80%;\n" -" font-style: italic;\n" -" background-color: #FAFAFA;\n" -" border-top: 1px none #E0E0E0;\n" -" border-right: 1px none #E0E0E0;\n" -" border-bottom: 1px none #E0E0E0;\n" -" border-left: 1px none #E0E0E0;\n" -" margin: 0px;\n" +"\n" +"span.keywordtype {\n" +" color: #604020\n" "}\n" -".memItemLeft {\n" -" padding: 1px 0px 0px 8px;\n" -" margin: 4px;\n" -" border-top-width: 1px;\n" -" border-right-width: 1px;\n" -" border-bottom-width: 1px;\n" -" border-left-width: 1px;\n" -" border-top-color: #E0E0E0;\n" -" border-right-color: #E0E0E0;\n" -" border-bottom-color: #E0E0E0;\n" -" border-left-color: #E0E0E0;\n" -" border-top-style: solid;\n" -" border-right-style: none;\n" -" border-bottom-style: none;\n" -" border-left-style: none;\n" -" background-color: #FAFAFA;\n" -" font-size: 80%;\n" +"\n" +"span.keywordflow {\n" +" color: #e08000\n" "}\n" -".memItemRight {\n" -" padding: 1px 8px 0px 8px;\n" -" margin: 4px;\n" -" border-top-width: 1px;\n" -" border-right-width: 1px;\n" -" border-bottom-width: 1px;\n" -" border-left-width: 1px;\n" -" border-top-color: #E0E0E0;\n" -" border-right-color: #E0E0E0;\n" -" border-bottom-color: #E0E0E0;\n" -" border-left-color: #E0E0E0;\n" -" border-top-style: solid;\n" -" border-right-style: none;\n" -" border-bottom-style: none;\n" -" border-left-style: none;\n" -" background-color: #FAFAFA;\n" -" font-size: 80%;\n" +"\n" +"span.comment {\n" +" color: #800000\n" "}\n" -".memTemplItemLeft {\n" -" padding: 1px 0px 0px 8px;\n" -" margin: 4px;\n" -" border-top-width: 1px;\n" -" border-right-width: 1px;\n" -" border-bottom-width: 1px;\n" -" border-left-width: 1px;\n" -" border-top-color: #E0E0E0;\n" -" border-right-color: #E0E0E0;\n" -" border-bottom-color: #E0E0E0;\n" -" border-left-color: #E0E0E0;\n" -" border-top-style: none;\n" -" border-right-style: none;\n" -" border-bottom-style: none;\n" -" border-left-style: none;\n" -" background-color: #FAFAFA;\n" -" font-size: 80%;\n" +"\n" +"span.preprocessor {\n" +" color: #806020\n" "}\n" -".memTemplItemRight {\n" -" padding: 1px 8px 0px 8px;\n" -" margin: 4px;\n" -" border-top-width: 1px;\n" -" border-right-width: 1px;\n" -" border-bottom-width: 1px;\n" -" border-left-width: 1px;\n" -" border-top-color: #E0E0E0;\n" -" border-right-color: #E0E0E0;\n" -" border-bottom-color: #E0E0E0;\n" -" border-left-color: #E0E0E0;\n" -" border-top-style: none;\n" -" border-right-style: none;\n" -" border-bottom-style: none;\n" -" border-left-style: none;\n" -" background-color: #FAFAFA;\n" -" font-size: 80%;\n" +"\n" +"span.stringliteral {\n" +" color: #002080\n" "}\n" -".memTemplParams {\n" -" padding: 1px 0px 0px 8px;\n" -" margin: 4px;\n" -" border-top-width: 1px;\n" -" border-right-width: 1px;\n" -" border-bottom-width: 1px;\n" -" border-left-width: 1px;\n" -" border-top-color: #E0E0E0;\n" -" border-right-color: #E0E0E0;\n" -" border-bottom-color: #E0E0E0;\n" -" border-left-color: #E0E0E0;\n" -" border-top-style: solid;\n" -" border-right-style: none;\n" -" border-bottom-style: none;\n" -" border-left-style: none;\n" -" color: #606060;\n" -" background-color: #FAFAFA;\n" -" font-size: 80%;\n" +"\n" +"span.charliteral {\n" +" color: #008080\n" +"}\n" +"\n" +"span.vhdldigit { \n" +" color: #ff00ff \n" +"}\n" +"\n" +"span.vhdlchar { \n" +" color: #000000 \n" +"}\n" +"\n" +"span.vhdlkeyword { \n" +" color: #700070 \n" "}\n" -".search { \n" +"\n" +"span.vhdllogic { \n" +" color: #ff0000 \n" +"}\n" +"\n" +"/* @end */\n" +"\n" +".search {\n" " color: #003399;\n" " font-weight: bold;\n" "}\n" -"FORM.search {\n" +"\n" +"form.search {\n" " margin-bottom: 0px;\n" " margin-top: 0px;\n" "}\n" -"INPUT.search { \n" +"\n" +"input.search {\n" " font-size: 75%;\n" " color: #000080;\n" " font-weight: normal;\n" " background-color: #e8eef2;\n" "}\n" -"TD.tiny { \n" +"\n" +"td.tiny {\n" " font-size: 75%;\n" "}\n" -"a {\n" -" color: #1A41A8;\n" -"}\n" -"a:visited {\n" -" color: #2A3798;\n" -"}\n" -".dirtab { \n" +"\n" +".dirtab {\n" " padding: 4px;\n" " border-collapse: collapse;\n" " border: 1px solid #84b0c7;\n" "}\n" -"TH.dirtab { \n" +"\n" +"th.dirtab {\n" " background: #e8eef2;\n" " font-weight: bold;\n" "}\n" -"HR { \n" -" height: 1px;\n" +"\n" +"hr {\n" +" height: 0;\n" +" border: none;\n" +" border-top: 1px solid #666;\n" +"}\n" +"\n" +"/* @group Member Descriptions */\n" +"\n" +".mdescLeft, .mdescRight,\n" +".memItemLeft, .memItemRight,\n" +".memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n" +" background-color: #FAFAFA;\n" " border: none;\n" -" border-top: 1px solid black;\n" +" margin: 4px;\n" +" padding: 1px 0 0 8px;\n" +"}\n" +"\n" +".mdescLeft, .mdescRight {\n" +" padding: 0px 8px 4px 8px;\n" +" color: #555;\n" +"}\n" +"\n" +".memItemLeft, .memItemRight, .memTemplParams {\n" +" border-top: 1px solid #ccc;\n" "}\n" "\n" -"/* Style for detailed member documentation */\n" +".memTemplParams {\n" +" color: #606060;\n" +"}\n" +"\n" +"/* @end */\n" +"\n" +"/* @group Member Details */\n" +"\n" +"/* Styles for detailed member documentation */\n" +"\n" ".memtemplate {\n" " font-size: 80%;\n" " color: #606060;\n" " font-weight: normal;\n" " margin-left: 3px;\n" -"} \n" -".memnav { \n" +"}\n" +"\n" +".memnav {\n" " background-color: #e8eef2;\n" " border: 1px solid #84b0c7;\n" " text-align: center;\n" @@ -365,109 +289,154 @@ " margin-right: 15px;\n" " padding: 2px;\n" "}\n" +"\n" ".memitem {\n" -" padding: 4px;\n" -" background-color: #eef3f5;\n" -" border-width: 1px;\n" -" border-style: solid;\n" -" border-color: #dedeee;\n" -" -moz-border-radius: 8px 8px 8px 8px;\n" +" padding: 0;\n" "}\n" +"\n" ".memname {\n" " white-space: nowrap;\n" " font-weight: bold;\n" "}\n" -".memdoc{\n" -" padding-left: 10px;\n" +"\n" +".memproto, .memdoc {\n" +" border: 1px solid #84b0c7; \n" "}\n" +"\n" ".memproto {\n" +" padding: 0;\n" " background-color: #d5e1e8;\n" -" width: 100%;\n" -" border-width: 1px;\n" -" border-style: solid;\n" -" border-color: #84b0c7;\n" " font-weight: bold;\n" -" -moz-border-radius: 8px 8px 8px 8px;\n" +" -webkit-border-top-left-radius: 8px;\n" +" -webkit-border-top-right-radius: 8px;\n" +" -moz-border-radius-topleft: 8px;\n" +" -moz-border-radius-topright: 8px;\n" +"}\n" +"\n" +".memdoc {\n" +" padding: 2px 5px;\n" +" background-color: #eef3f5;\n" +" border-top-width: 0;\n" +" -webkit-border-bottom-left-radius: 8px;\n" +" -webkit-border-bottom-right-radius: 8px;\n" +" -moz-border-radius-bottomleft: 8px;\n" +" -moz-border-radius-bottomright: 8px;\n" +"}\n" +"\n" +".memdoc p, .memdoc dl, .memdoc ul {\n" +" margin: 6px 0;\n" "}\n" +"\n" ".paramkey {\n" " text-align: right;\n" "}\n" +"\n" ".paramtype {\n" " white-space: nowrap;\n" "}\n" +"\n" ".paramname {\n" " color: #602020;\n" -" font-style: italic;\n" " white-space: nowrap;\n" "}\n" -"/* End Styling for detailed member documentation */\n" +".paramname em {\n" +" font-style: normal;\n" +"}\n" +"\n" +"/* @end */\n" +"\n" +"/* @group Directory (tree) */\n" "\n" "/* for the tree view */\n" +"\n" ".ftvtree {\n" " font-family: sans-serif;\n" -" margin:0.5em;\n" +" margin: 0.5em;\n" "}\n" +"\n" "/* these are for tree view when used as main index */\n" -".directory { \n" -" font-size: 9pt; \n" -" font-weight: bold; \n" +"\n" +".directory {\n" +" font-size: 9pt;\n" +" font-weight: bold;\n" "}\n" -".directory h3 { \n" -" margin: 0px; \n" -" margin-top: 1em; \n" -" font-size: 11pt; \n" +"\n" +".directory h3 {\n" +" margin: 0px;\n" +" margin-top: 1em;\n" +" font-size: 11pt;\n" "}\n" "\n" -"/* The following two styles can be used to replace the root node title */\n" -"/* with an image of your choice. Simply uncomment the next two styles, */\n" -"/* specify the name of your image and be sure to set \'height\' to the */\n" -"/* proper pixel height of your image. */\n" +"/*\n" +"The following two styles can be used to replace the root node title\n" +"with an image of your choice. Simply uncomment the next two styles,\n" +"specify the name of your image and be sure to set 'height' to the\n" +"proper pixel height of your image.\n" +"*/\n" "\n" -"/* .directory h3.swap { */\n" -"/* height: 61px; */\n" -"/* background-repeat: no-repeat; */\n" -"/* background-image: url(\"yourimage.gif\"); */\n" -"/* } */\n" -"/* .directory h3.swap span { */\n" -"/* display: none; */\n" -"/* } */\n" +"/*\n" +".directory h3.swap {\n" +" height: 61px;\n" +" background-repeat: no-repeat;\n" +" background-image: url(\"yourimage.gif\");\n" +"}\n" +".directory h3.swap span {\n" +" display: none;\n" +"}\n" +"*/\n" "\n" -".directory > h3 { \n" -" margin-top: 0; \n" +".directory > h3 {\n" +" margin-top: 0;\n" "}\n" -".directory p { \n" -" margin: 0px; \n" -" white-space: nowrap; \n" +"\n" +".directory p {\n" +" margin: 0px;\n" +" white-space: nowrap;\n" "}\n" -".directory div { \n" -" display: none; \n" -" margin: 0px; \n" +"\n" +".directory div {\n" +" display: none;\n" +" margin: 0px;\n" "}\n" -".directory img { \n" -" vertical-align: -30%; \n" +"\n" +".directory img {\n" +" vertical-align: -30%;\n" "}\n" +"\n" "/* these are for tree view when not used as main index */\n" -".directory-alt { \n" -" font-size: 100%; \n" -" font-weight: bold; \n" +"\n" +".directory-alt {\n" +" font-size: 100%;\n" +" font-weight: bold;\n" "}\n" -".directory-alt h3 { \n" -" margin: 0px; \n" -" margin-top: 1em; \n" -" font-size: 11pt; \n" +"\n" +".directory-alt h3 {\n" +" margin: 0px;\n" +" margin-top: 1em;\n" +" font-size: 11pt;\n" "}\n" -".directory-alt > h3 { \n" -" margin-top: 0; \n" +"\n" +".directory-alt > h3 {\n" +" margin-top: 0;\n" "}\n" -".directory-alt p { \n" -" margin: 0px; \n" -" white-space: nowrap; \n" +"\n" +".directory-alt p {\n" +" margin: 0px;\n" +" white-space: nowrap;\n" "}\n" -".directory-alt div { \n" -" display: none; \n" -" margin: 0px; \n" +"\n" +".directory-alt div {\n" +" display: none;\n" +" margin: 0px;\n" "}\n" -".directory-alt img { \n" -" vertical-align: -30%; \n" +"\n" +".directory-alt img {\n" +" vertical-align: -30%;\n" "}\n" "\n" +"/* @end */\n" +"\n" +"address {\n" +" font-style: normal;\n" +" color: #333;\n" +"}\n" diff --git a/src/entry.cpp b/src/entry.cpp index d0ba5cb..fb45e5f 100644 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -69,7 +69,7 @@ Entry::Entry() mGrpId = -1; tagInfo = 0; sli = 0; - relatesDup = FALSE; + relatesType = Simple; hidden = FALSE; groupDocType = GROUPDOC_NORMAL; reset(); @@ -98,7 +98,7 @@ Entry::Entry(const Entry &e) docLine = e.docLine; docFile = e.docFile.copy(); relates = e.relates.copy(); - relatesDup = e.relatesDup; + relatesType = e.relatesType; read = e.read.copy(); write = e.write.copy(); brief = e.brief.copy(); @@ -255,7 +255,7 @@ void Entry::reset() docFile.resize(0); docLine=-1; relates.resize(0); - relatesDup=FALSE; + relatesType=Simple; brief.resize(0); briefFile.resize(0); briefLine=-1; diff --git a/src/entry.h b/src/entry.h index f87182c..10c3319 100644 --- a/src/entry.h +++ b/src/entry.h @@ -33,6 +33,8 @@ class StorageIntf; enum Protection { Public, Protected, Private, Package } ; enum Specifier { Normal, Virtual, Pure } ; enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event }; +enum RelatesType { Simple, Duplicate, MemberOf }; +enum Relationship { Member, Related, Foreign }; struct ListItemInfo { @@ -350,7 +352,7 @@ class Entry int inbodyLine; //!< line number at which the body doc was found QCString inbodyFile; //!< file in which the body doc was found QCString relates; //!< related class (doc block) - bool relatesDup; //!< keep duplicate doc in original file also + RelatesType relatesType; //!< how relates is handled QCString read; //!< property read accessor QCString write; //!< property write accessor QCString inside; //!< name of the class in which documents are found diff --git a/src/groupdef.cpp b/src/groupdef.cpp index e193a17..984bb4f 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -1162,8 +1162,16 @@ MemberList *GroupDef::getMemberList(MemberList::ListType lt) const void GroupDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title) { + static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + MemberList * ml = getMemberList(lt); - if (ml) ml->writeDeclarations(ol,0,0,0,this,title,0); + if (optimizeVhdl && ml) + { + VhdlDocGen::writeVhdlDeclarations(ml,ol,this,0); + return; + } + if (ml) + ml->writeDeclarations(ol,0,0,0,this,title,0); } void GroupDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title) diff --git a/src/increasebuffer.pl b/src/increasebuffer.pl index 056a6b5..109f9ad 100755 --- a/src/increasebuffer.pl +++ b/src/increasebuffer.pl @@ -4,5 +4,6 @@ while (<>) { s/YY_BUF_SIZE 16384/YY_BUF_SIZE 262144/g; + s/YY_READ_BUF_SIZE 8192/YY_READ_BUF_SIZE 262144/g; print $_; } diff --git a/src/index.cpp b/src/index.cpp index 2b4c895..79240ce 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -1577,7 +1577,8 @@ void addClassMemberNameToIndex(MemberDef *md) g_memberIndexLetterUsed[CMHL_Events][letter].append(md); documentedClassMembers[CMHL_Events]++; } - else if (md->isRelated() || (md->isFriend() && !isFriendToHide)) + else if (md->isRelated() || md->isForeign() || + (md->isFriend() && !isFriendToHide)) { g_memberIndexLetterUsed[CMHL_Related][letter].append(md); documentedClassMembers[CMHL_Related]++; @@ -2954,7 +2955,8 @@ void writeIndex(OutputList &ol) for (pdi.toFirst();(pd=pdi.current());++pdi) { if (!pd->getGroupDef() && !pd->isReference() && - !pd->hasParentPage() + (!pd->hasParentPage() || // not inside other page + (Doxygen::mainPage==pd->getOuterScope())) // or inside main page ) { QCString title = pd->title(); diff --git a/src/language.cpp b/src/language.cpp index ebe6c84..e1bd947 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -340,7 +340,7 @@ bool setTranslator(const char *langName) #ifdef LANG_CA else if (L_EQUAL("catalan")) { - theTranslator=new TranslatorDecoder(new TranslatorCatalan); + theTranslator=new TranslatorCatalan; } #endif #ifdef LANG_LT diff --git a/src/marshal.cpp b/src/marshal.cpp index 8983e27..803c53b 100644 --- a/src/marshal.cpp +++ b/src/marshal.cpp @@ -395,7 +395,7 @@ void marshalEntry(StorageIntf *s,Entry *e) marshalInt(s,e->inbodyLine); marshalQCString(s,e->inbodyFile); marshalQCString(s,e->relates); - marshalBool(s,e->relatesDup); + marshalInt(s,e->relatesType); marshalQCString(s,e->read); marshalQCString(s,e->write); marshalQCString(s,e->inside); @@ -788,7 +788,7 @@ Entry * unmarshalEntry(StorageIntf *s) e->inbodyLine = unmarshalInt(s); e->inbodyFile = unmarshalQCString(s); e->relates = unmarshalQCString(s); - e->relatesDup = unmarshalBool(s); + e->relatesType = (RelatesType)unmarshalInt(s); e->read = unmarshalQCString(s); e->write = unmarshalQCString(s); e->inside = unmarshalQCString(s); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 824d8e9..a57238b 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -306,8 +306,9 @@ class MemberDefImpl MemberDefImpl(); ~MemberDefImpl(); void init(Definition *def,const char *t,const char *a,const char *e, - Protection p,Specifier v,bool s,bool r,MemberDef::MemberType mt, - const ArgumentList *tal,const ArgumentList *al + Protection p,Specifier v,bool s,Relationship r, + MemberDef::MemberType mt,const ArgumentList *tal, + const ArgumentList *al ); ClassDef *classDef; // member of or related to @@ -395,7 +396,7 @@ class MemberDefImpl bool hasDocumentedParams; bool hasDocumentedReturnType; bool isDMember; - bool related; // is this a member that is only related to a class + Relationship related; // relationship of this to the class bool stat; // is it a static function? bool proto; // is it a prototype; bool docEnumValues; // is an enum with documented enum values. @@ -439,8 +440,9 @@ MemberDefImpl::~MemberDefImpl() void MemberDefImpl::init(Definition *def, const char *t,const char *a,const char *e, - Protection p,Specifier v,bool s,bool r,MemberDef::MemberType mt, - const ArgumentList *tal,const ArgumentList *al + Protection p,Specifier v,bool s,Relationship r, + MemberDef::MemberType mt,const ArgumentList *tal, + const ArgumentList *al ) { classDef=0; @@ -572,7 +574,7 @@ void MemberDefImpl::init(Definition *def, * \param v The degree of `virtualness' of the member, possible values are: * \c Normal, \c Virtual, \c Pure. * \param s A boolean that is true iff the member is static. - * \param r A boolean that is true iff the member is only related. + * \param r The relationship between the class and the member. * \param mt The kind of member. See #MemberDef::MemberType for a list of * all types. * \param tal The template arguments of this member. @@ -582,7 +584,7 @@ void MemberDefImpl::init(Definition *def, MemberDef::MemberDef(const char *df,int dl, const char *t,const char *na,const char *a,const char *e, - Protection p,Specifier v,bool s,bool r,MemberType mt, + Protection p,Specifier v,bool s,Relationship r,MemberType mt, const ArgumentList *tal,const ArgumentList *al ) : Definition(df,dl,removeRedundantWhiteSpace(na)) { @@ -3201,7 +3203,13 @@ bool MemberDef::isEvent() const bool MemberDef::isRelated() const { makeResident(); - return m_impl->related; + return m_impl->related == Related; +} + +bool MemberDef::isForeign() const +{ + makeResident(); + return m_impl->related == Foreign; } bool MemberDef::isStatic() const @@ -3638,7 +3646,13 @@ void MemberDef::setTemplateSpecialization(bool b) void MemberDef::makeRelated() { makeResident(); - m_impl->related=TRUE; + m_impl->related = Related; +} + +void MemberDef::makeForeign() +{ + makeResident(); + m_impl->related = Foreign; } void MemberDef::setHasDocumentedParams(bool b) @@ -3838,7 +3852,7 @@ void MemberDef::flushToDisk() const marshalBool (Doxygen::symbolStorage,m_impl->hasDocumentedParams); marshalBool (Doxygen::symbolStorage,m_impl->hasDocumentedReturnType); marshalBool (Doxygen::symbolStorage,m_impl->isDMember); - marshalBool (Doxygen::symbolStorage,m_impl->related); + marshalInt (Doxygen::symbolStorage,(int)m_impl->related); marshalBool (Doxygen::symbolStorage,m_impl->stat); marshalBool (Doxygen::symbolStorage,m_impl->proto); marshalBool (Doxygen::symbolStorage,m_impl->docEnumValues); @@ -3938,7 +3952,7 @@ void MemberDef::loadFromDisk() const m_impl->hasDocumentedParams = unmarshalBool (Doxygen::symbolStorage); m_impl->hasDocumentedReturnType = unmarshalBool (Doxygen::symbolStorage); m_impl->isDMember = unmarshalBool (Doxygen::symbolStorage); - m_impl->related = unmarshalBool (Doxygen::symbolStorage); + m_impl->related = (Relationship)unmarshalInt(Doxygen::symbolStorage); m_impl->stat = unmarshalBool (Doxygen::symbolStorage); m_impl->proto = unmarshalBool (Doxygen::symbolStorage); m_impl->docEnumValues = unmarshalBool (Doxygen::symbolStorage); diff --git a/src/memberdef.h b/src/memberdef.h index 6336269..8dbcf0e 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -69,7 +69,7 @@ class MemberDef : public Definition MemberDef(const char *defFileName,int defLine, const char *type,const char *name,const char *args, const char *excp,Protection prot,Specifier virt,bool stat, - bool related,MemberType t,const ArgumentList *tal, + Relationship related,MemberType t,const ArgumentList *tal, const ArgumentList *al); ~MemberDef(); DefType definitionType() const { return TypeMember; } @@ -133,6 +133,7 @@ class MemberDef : public Definition bool isProperty() const; bool isEvent() const; bool isRelated() const; + bool isForeign() const; bool isStatic() const; bool isInline() const; bool isExplicit() const; @@ -257,6 +258,7 @@ class MemberDef : public Definition void setTemplateSpecialization(bool b); void makeRelated(); + void makeForeign(); void setHasDocumentedParams(bool b); void setHasDocumentedReturnType(bool b); void setInheritsDocsFrom(MemberDef *md); diff --git a/src/pagedef.cpp b/src/pagedef.cpp index 9168d82..2f59f2a 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -49,7 +49,14 @@ void PageDef::addInnerCompound(Definition *def) PageDef *pd = (PageDef*)def; m_subPageDict->append(pd->name(),pd); def->setOuterScope(this); - pd->setNestingLevel(m_nestingLevel+1); + if (this==Doxygen::mainPage) + { + pd->setNestingLevel(m_nestingLevel); + } + else + { + pd->setNestingLevel(m_nestingLevel+1); + } } } @@ -71,8 +78,12 @@ void PageDef::writeDocumentation(OutputList &ol) startFile(ol,pageName,pageName,title(),HLI_None,TRUE); ol.pushGeneratorState(); + //1.{ - if (m_nestingLevel>0) // a sub page + if (m_nestingLevel>0 + //&& // a sub page + //(Doxygen::mainPage==0 || getOuterScope()!=Doxygen::mainPage) // and not a subpage of the mainpage + ) { // do not generate sub page output for RTF and LaTeX, as these are // part of their parent page @@ -91,13 +102,16 @@ void PageDef::writeDocumentation(OutputList &ol) // save old generator state and write title only to Man generator ol.pushGeneratorState(); + //2.{ ol.disableAllBut(OutputGenerator::Man); ol.startTitleHead(pageName); ol.endTitleHead(pageName, pageName); ol.popGeneratorState(); + //2.} // for Latex the section is already generated as a chapter in the index! ol.pushGeneratorState(); + //2.{ ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::RTF); SectionInfo *si=0; @@ -112,10 +126,12 @@ void PageDef::writeDocumentation(OutputList &ol) ol.endSection(si->label,si->type); } ol.popGeneratorState(); + //2.} writePageDocumentation(ol); ol.popGeneratorState(); + //1.} endFile(ol); diff --git a/src/pre.l b/src/pre.l index 8fd51e6..5d5a79c 100644 --- a/src/pre.l +++ b/src/pre.l @@ -1040,7 +1040,7 @@ void addDefine() MemberDef *md=new MemberDef( g_yyFileName,g_yyLineNr, "#define",g_defName,g_defArgsStr,0, - Public,Normal,FALSE,FALSE,MemberDef::Define,0,0); + Public,Normal,FALSE,Member,MemberDef::Define,0,0); if (!g_defArgsStr.isEmpty()) { ArgumentList *argList = new ArgumentList; diff --git a/src/scanner.l b/src/scanner.l index 4557ac1..b102853 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -1594,7 +1594,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current->tArgLists->append(al); currentArgumentList = al; templateStr="<"; - fullArgString = templateStr.copy(); + fullArgString = templateStr; copyArgString = &templateStr; currentArgumentContext = FindMembers; BEGIN( ReadTempArgs ); @@ -4326,9 +4326,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current->spec |= Entry::Template; current->tArgLists->append(al); currentArgumentList = al; + current->name+="<"; templateStr="<"; fullArgString = templateStr; - copyArgString = &templateStr; + copyArgString = ¤t->name; currentArgumentContext = CompoundName; BEGIN( ReadTempArgs ); } diff --git a/src/translator_br.h b/src/translator_br.h index 56708cf..7012f40 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -15,6 +15,8 @@ * Thanks to Jorge Ramos and others for their contributions. * * History: + * 20080709: + * - References to MAX_DOT_GRAPH_HEIGHT removed from trLegendDocs(). * 20080206: * - Method trTypeContraints() renamed to trTypeConstraints(). * 20071216: @@ -1028,9 +1030,7 @@ class TranslatorBrazilian : public Translator " Used *m_usedClass;\n" "};\n" "\\endcode\n" - - "Se a tag \\c MAX_DOT_GRAPH_HEIGHT no arquivo de configuração tem o valor" - "200, o seguinte gráfo será gerado:" + "Isto irá gerar o seguinte gráfo:" "

\n" "

\n" "As caixas no grafo acima tem as seguintes interpretações:\n" diff --git a/src/translator_ca.h b/src/translator_ca.h index 38e5dcf..da3940e 100644 --- a/src/translator_ca.h +++ b/src/translator_ca.h @@ -18,28 +18,29 @@ #ifndef TRANSLATOR_CA_H #define TRANSLATOR_CA_H -// When defining a translator class for the new language, follow -// the description in the documentation. One of the steps says -// that you should copy the translator_en.h (this) file to your -// translator_xx.h new file. Your new language should use the -// Translator class as the base class. This means that you need to -// implement exactly the same (pure virtual) methods as the -// TranslatorEnglish does. Because of this, it is a good idea to -// start with the copy of TranslatorEnglish and replace the strings -// one by one. -// -// It is not necessary to include "translator.h" or -// "translator_adapter.h" here. The files are included in the -// language.cpp correctly. Not including any of the mentioned -// files frees the maintainer from thinking about whether the -// first, the second, or both files should be included or not, and -// why. This holds namely for localized translators because their -// base class is changed occasionaly to adapter classes when the -// Translator class changes the interface, or back to the -// Translator class (by the local maintainer) when the localized -// translator is made up-to-date again. - -class TranslatorCatalan : public TranslatorAdapter_1_5_4 +/*! + When defining a translator class for the new language, follow + the description in the documentation. One of the steps says + that you should copy the translator_en.h (this) file to your + translator_xx.h new file. Your new language should use the + Translator class as the base class. This means that you need to + implement exactly the same (pure virtual) methods as the + TranslatorEnglish does. Because of this, it is a good idea to + start with the copy of TranslatorEnglish and replace the strings + one by one. + + It is not necessary to include "translator.h" or + "translator_adapter.h" here. The files are included in the + language.cpp correctly. Not including any of the mentioned + files frees the maintainer from thinking about whether the + first, the second, or both files should be included or not, and + why. This holds namely for localized translators because their + base class is changed occasionaly to adapter classes when the + Translator class changes the interface, or back to the + Translator class (by the local maintainer) when the localized + translator is made up-to-date again. +*/ +class TranslatorCatalan : public Translator { public: @@ -77,7 +78,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { - return "iso-8859-1"; + return "utf-8"; } // --- Language translation methods ------------------- @@ -88,40 +89,40 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() - { return "(Remarcar que aquestes funcions no sn funcions membre.)"; } + { return "(Remarcar que aquestes funcions no són funcions membre.)"; } /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() - { return "Descripci Detallada"; } + { return "Descripció Detallada"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() - { return "Documentaci de les Definicions de Tipus Membre"; } + { return "Documentació de les Definicions de Tipus Membre"; } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() - { return "Documentaci de les Enumeracions Membre"; } + { return "Documentació de les Enumeracions Membre"; } /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() - { return "Documentaci de les Funcions Membre"; } + { return "Documentació de les Funcions Membre"; } /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Documentaci dels Camps"; + return "Documentació dels Camps"; } else { - return "Documentaci de les Dades Membre"; + return "Documentació de les Dades Membre"; } } /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() - { return "Ms..."; } + { return "Més..."; } /*! put in the class documentation */ virtual QCString trListOfAllMembers() @@ -133,7 +134,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() - { return "Aquesta s la llista complerta dels membres de "; } + { return "Aquesta és la llista complerta dels membres de "; } /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() @@ -143,7 +144,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * parameter s is name of the project name. */ virtual QCString trGeneratedAutomatically(const char *s) - { QCString result="Generat automticament per Doxygen"; + { QCString result="Generat automàticament per Doxygen"; if (s) result+=(QCString)" per a "+s; result+=" a partir del codi font."; return result; @@ -167,7 +168,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * compounds or files (see the \\group command). */ virtual QCString trModules() - { return "Mduls"; } + { return "Mòduls"; } /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() @@ -218,7 +219,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { return "Pgines Relacionades"; } + { return "Pàgines Relacionades"; } /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() @@ -230,14 +231,14 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() - { return "Aquesta llista d'herncia est ordenada toscament, " - "per no completa, de forma alfabtica:"; + { return "Aquesta llista d'herència està ordenada toscament, " + "però no completa, de forma alfabètica:"; } /*! This is an introduction to the list with all files. */ virtual QCString trFileListDescription(bool extractAll) { - QCString result="Aquesta s la llista de tots els fitxers "; + QCString result="Aquesta és la llista de tots els fitxers "; if (!extractAll) result+="documentats "; result+="acompanyats amb breus descripcions:"; return result; @@ -249,19 +250,19 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Aquestes sn les estructures de dades acompanyades amb breus descripcions:"; + return "Aquestes són les estructures de dades acompanyades amb breus descripcions:"; } else { - return "Aquestes sn les classes, estructures, " - "unions i interfcies acompanyades amb breus descripcions:"; + return "Aquestes són les classes, estructures, " + "unions i interfícies acompanyades amb breus descripcions:"; } } /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Aquesta s la llista de tots els "; + QCString result="Aquesta és la llista de tots els "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { result+="camps d'estructures i unions"; @@ -274,16 +275,16 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 { result+=" documentats"; } - result+=" amb enllaos a "; + result+=" amb enllaços a "; if (!extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="la documentaci de l'estructura/uni per a cada camp:"; + result+="la documentació de l'estructura/unió per a cada camp:"; } else { - result+="la documentaci de la classe per a cada membre:"; + result+="la documentació de la classe per a cada membre:"; } } else @@ -302,7 +303,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="Aquesta s la llista de "; + QCString result="Aquesta és la llista de "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { result+="totes les funcions, variables, definicions, enumeracions, i definicions de tipus"; @@ -313,44 +314,44 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 result+="tots els membres de fitxers"; if (!extractAll) result+=" documentats"; } - result+=" amb enllaos "; + result+=" amb enllaços "; if (extractAll) result+="als fitxers als quals corresponen:"; else - result+="a la documentaci:"; + result+="a la documentació:"; return result; } /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() - { return "Aquesta s la llista de tots els exemples:"; } + { return "Aquesta és la llista de tots els exemples:"; } /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return "Aquesta s la llista de totes les pgines de documentaci associades:"; } + { return "Aquesta és la llista de totes les pàgines de documentació associades:"; } /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() - { return "Aquesta s la llista de mduls:"; } + { return "Aquesta és la llista de mòduls:"; } // index titles (the project name is prepended for these) /*! This is used in HTML as the title of index.html. */ virtual QCString trDocumentation() - { return ": Documentaci"; } + { return ": Documentació"; } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ virtual QCString trModuleIndex() - { return "ndex de Mduls"; } + { return "Índex de Mòduls"; } /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ virtual QCString trHierarchicalIndex() - { return "ndex Jerrquic"; } + { return "Índex Jeràrquic"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. @@ -359,11 +360,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ndex d'Estructures de Dades"; + return "Índex d'Estructures de Dades"; } else { - return "ndex de Classes"; + return "Índex de Classes"; } } @@ -371,13 +372,13 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * list of all files. */ virtual QCString trFileIndex() - { return "ndex de Fitxers"; } + { return "Índex de Fitxers"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all groups. */ virtual QCString trModuleDocumentation() - { return "Documentaci dels Mduls"; } + { return "Documentació dels Mòduls"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. @@ -386,11 +387,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Documentaci de les Estructures de Dades"; + return "Documentació de les Estructures de Dades"; } else { - return "Documentaci de les Classes"; + return "Documentació de les Classes"; } } @@ -398,23 +399,23 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * the documentation of all files. */ virtual QCString trFileDocumentation() - { return "Documentaci dels Fitxers"; } + { return "Documentació dels Fitxers"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all examples. */ virtual QCString trExampleDocumentation() - { return "Documentaci dels Exemples"; } + { return "Documentació dels Exemples"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all related pages. */ virtual QCString trPageDocumentation() - { return "Documentaci de les Pgines"; } + { return "Documentació de les Pàgines"; } /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() - { return "Manual de Referncia"; } + { return "Manual de Referència"; } /*! This is used in the documentation of a file as a header before the * list of defines @@ -462,37 +463,37 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * documentation blocks for defines */ virtual QCString trDefineDocumentation() - { return "Documentaci de les Definicions"; } + { return "Documentació de les Definicions"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ virtual QCString trFunctionPrototypeDocumentation() - { return "Documentaci de les Funcions Prototipus"; } + { return "Documentació de les Funcions Prototipus"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() - { return "Documentaci de les Definicions de Tipus"; } + { return "Documentació de les Definicions de Tipus"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ virtual QCString trEnumerationTypeDocumentation() - { return "Documentaci dels Tipus de les Enumeracions"; } + { return "Documentació dels Tipus de les Enumeracions"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ virtual QCString trFunctionDocumentation() - { return "Documentaci de les Funcions"; } + { return "Documentació de les Funcions"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ virtual QCString trVariableDocumentation() - { return "Documentaci de les Variables"; } + { return "Documentació de les Variables"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds @@ -529,20 +530,20 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! this text is put before a class diagram */ virtual QCString trClassDiagram(const char *clName) { - return (QCString)"Diagrama d'Herncia per a "+clName+":"; + return (QCString)"Diagrama d'Herència per a "+clName+":"; } /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() - { return "Tan sols per a s intern."; } + { return "Tan sols per a ús intern."; } /*! this text is generated when the \\warning command is used. */ virtual QCString trWarning() - { return "Atenci"; } + { return "Atenció"; } /*! this text is generated when the \\version command is used. */ virtual QCString trVersion() - { return "Versi"; } + { return "Versió"; } /*! this text is generated when the \\date command is used. */ virtual QCString trDate() @@ -554,11 +555,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! this text is generated when the \\sa command is used. */ virtual QCString trSeeAlso() - { return "Mireu tamb"; } + { return "Mireu també"; } /*! this text is generated when the \\param command is used. */ virtual QCString trParameters() - { return "Parmetres"; } + { return "Paràmetres"; } /*! this text is generated when the \\exception command is used. */ virtual QCString trExceptions() @@ -579,7 +580,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { - QCString result="Aquests sn tots els espais de noms "; + QCString result="Aquests són tots els espais de noms "; if (!extractAll) result+="documentats "; result+="amb breus descripcions:"; return result; @@ -599,7 +600,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * related classes */ virtual QCString trRelatedFunctionDocumentation() - { return "Documentaci de funcions amigues i relacionades"; } + { return "Documentació de funcions amigues i relacionades"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -610,16 +611,16 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 ClassDef::CompoundType compType, bool isTemplate) { - QCString result="Referncia de"; + QCString result="Referència de"; switch(compType) { case ClassDef::Class: result+=" la Classe "; break; case ClassDef::Struct: result+=" l'Estructura "; break; - case ClassDef::Union: result+=" la Uni "; break; - case ClassDef::Interface: result+=" la Interfcie "; break; + case ClassDef::Union: result+=" la Unió "; break; + case ClassDef::Interface: result+=" la Interfície "; break; case ClassDef::Protocol: result+="l Protocol "; break; case ClassDef::Category: result+=" la Categoria "; break; - case ClassDef::Exception: result+=" l'Excepci "; break; + case ClassDef::Exception: result+=" l'Excepció "; break; } if (isTemplate) result+="Template "; result+=(QCString)clName; @@ -629,7 +630,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! used as the title of the HTML page of a file */ virtual QCString trFileReference(const char *fileName) { - QCString result="Referncia del Fitxer "; + QCString result="Referència del Fitxer "; result+=fileName; return result; } @@ -637,31 +638,31 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! used as the title of the HTML page of a namespace */ virtual QCString trNamespaceReference(const char *namespaceName) { - QCString result="Referncia de l'Espai de Noms "; + QCString result="Referència de l'Espai de Noms "; result+=namespaceName; return result; } virtual QCString trPublicMembers() - { return "Mtodes pblics"; } + { return "Mètodes públics"; } virtual QCString trPublicSlots() - { return "Slots pblics"; } + { return "Slots públics"; } virtual QCString trSignals() { return "Senyals"; } virtual QCString trStaticPublicMembers() - { return "Mtodes Pblics Esttics"; } + { return "Mètodes Públics Estàtics"; } virtual QCString trProtectedMembers() - { return "Mtodes Protegits"; } + { return "Mètodes Protegits"; } virtual QCString trProtectedSlots() { return "Slots Protegits"; } virtual QCString trStaticProtectedMembers() - { return "Mtodes Protegits Esttics"; } + { return "Mètodes Protegits Estàtics"; } virtual QCString trPrivateMembers() - { return "Mtodes Privats"; } + { return "Mètodes Privats"; } virtual QCString trPrivateSlots() { return "Slots Privats"; } virtual QCString trStaticPrivateMembers() - { return "Mtodes Privats Esttics"; } + { return "Mètodes Privats Estàtics"; } /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -727,11 +728,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="Aquesta s la llista de tots els membres de l'espai de noms "; + QCString result="Aquesta és la llista de tots els membres de l'espai de noms "; if (!extractAll) result+="documentats "; - result+="amb enllaos a "; + result+="amb enllaços a "; if (extractAll) - result+="la documentaci de l'espai de noms de cada membre:"; + result+="la documentació de l'espai de noms de cada membre:"; else result+="l'espai de noms al qual corresponen:"; return result; @@ -740,13 +741,13 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * index of all namespaces. */ virtual QCString trNamespaceIndex() - { return "ndex d'Espais de Noms"; } + { return "Índex d'Espais de Noms"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all namespaces. */ virtual QCString trNamespaceDocumentation() - { return "Documentaci de l'Espai de Noms"; } + { return "Documentació de l'Espai de Noms"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 @@ -769,20 +770,20 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"La documentaci d'aquest"; + QCString result=(QCString)"La documentació d'aquest"; switch(compType) { case ClassDef::Class: result+="a classe"; break; case ClassDef::Struct: result+="a estructura"; break; - case ClassDef::Union: result+="a uni"; break; - case ClassDef::Interface: result+="a interfcie"; break; + case ClassDef::Union: result+="a unió"; break; + case ClassDef::Interface: result+="a interfície"; break; case ClassDef::Protocol: result+=" protocol"; break; case ClassDef::Category: result+="a categoria"; break; - case ClassDef::Exception: result+="a excepci"; break; + case ClassDef::Exception: result+="a excepció"; break; } result+=" es va generar a partir del"; if (!single) result+="s"; - result+=" segent"; + result+=" següent"; if (!single) result+="s"; result+=" fitxer"; if (!single) result+="s:"; else result+=":"; @@ -793,7 +794,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * list. */ virtual QCString trAlphabeticalList() - { return "Llista Alfabtica"; } + { return "Llista Alfabètica"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 @@ -806,7 +807,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! This is in the (quick) index as a link to the main page (index.html) */ virtual QCString trMainPage() - { return "Pgina principal"; } + { return "Pàgina principal"; } /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. @@ -820,11 +821,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 virtual QCString trDefinedAtLineInSourceFile() { - return "Definici a la lnia @0 del fitxer @1."; + return "Definició a la línia @0 del fitxer @1."; } virtual QCString trDefinedInSourceFile() { - return "Definici al fitxer @0."; + return "Definició al fitxer @0."; } ////////////////////////////////////////////////////////////////////////// @@ -843,17 +844,17 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! this text is put before a collaboration diagram */ virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)"Diagrama de collaboraci per a "+clName+":"; + return (QCString)"Diagrama de col·laboració per a "+clName+":"; } /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)"Inclou el graf de dependncies per a "+fName+":"; + return (QCString)"Inclou el graf de dependències per a "+fName+":"; } /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { - return "Documentaci del Constructor i el Destructor"; + return "Documentació del Constructor i el Destructor"; } /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() @@ -863,17 +864,17 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { - return "Veure la documentaci d'aquest fitxer."; + return "Veure la documentació d'aquest fitxer."; } /*! Text for the \\pre command */ virtual QCString trPrecondition() { - return "Precondici"; + return "Precondició"; } /*! Text for the \\post command */ virtual QCString trPostcondition() { - return "Postcondici"; + return "Postcondició"; } /*! Text for the \\invariant command */ virtual QCString trInvariant() @@ -892,11 +893,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 } virtual QCString trGraphicalHierarchy() { - return "Jerarquia Grfica de la Classe"; + return "Jerarquia Gràfica de la Classe"; } virtual QCString trGotoGraphicalHierarchy() { - return "Veure la jerarquia grfica de la classe"; + return "Veure la jerarquia gràfica de la classe"; } virtual QCString trGotoTextualHierarchy() { @@ -904,7 +905,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 } virtual QCString trPageIndex() { - return "ndex de Pgines"; + return "Índex de Pàgines"; } ////////////////////////////////////////////////////////////////////////// @@ -917,7 +918,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 } virtual QCString trPublicTypes() { - return "Tipus Pblics"; + return "Tipus Públics"; } virtual QCString trPublicAttribs() { @@ -927,12 +928,12 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 } else { - return "Atributs Pblics"; + return "Atributs Públics"; } } virtual QCString trStaticPublicAttribs() { - return "Atributs Pblics Esttics"; + return "Atributs Públics Estàtics"; } virtual QCString trProtectedTypes() { @@ -944,7 +945,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 } virtual QCString trStaticProtectedAttribs() { - return "Atributs Protegits Esttics"; + return "Atributs Protegits Estàtics"; } virtual QCString trPrivateTypes() { @@ -956,7 +957,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 } virtual QCString trStaticPrivateAttribs() { - return "Atributs Privats Esttics"; + return "Atributs Privats Estàtics"; } ////////////////////////////////////////////////////////////////////////// @@ -988,11 +989,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 } virtual QCString trAttention() { - return "Atenci"; + return "Atenció"; } virtual QCString trInclByDepGraph() { - return "Aquest grfic mostra quins fitxers inclouen, " + return "Aquest gràfic mostra quins fitxers inclouen, " "de forma directa o indirecta, aquest fitxer:"; } virtual QCString trSince() @@ -1007,7 +1008,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! title of the graph legend page */ virtual QCString trLegendTitle() { - return "Llegenda del Grfic"; + return "Llegenda del Gràfic"; } /*! page explaining how the dot graph's should be interpreted * The %A in the text below are to prevent link to classes called "A". @@ -1015,22 +1016,22 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 virtual QCString trLegendDocs() { return - "Aquesta pgina explica com s'interpreten els grfics generats per doxygen.

\n" + "Aquesta pàgina explica com s'interpreten els gràfics generats per doxygen.

\n" "Considera aquest exemple:\n" "\\code\n" "/*! Classe invisible per culpa del retall */\n" "class Invisible { };\n\n" - "/*! Classe truncada, l'herncia est amagada */\n" + "/*! Classe truncada, l'herència està amagada */\n" "class Truncated : public Invisible { };\n\n" "/* Classe no documentada amb comentaris doxygen */\n" "class Undocumented { };\n\n" - "/*! Classe heredada amb herncia pblica */\n" + "/*! Classe heredada amb herència pública */\n" "class PublicBase : public Truncated { };\n\n" "/*! Una classe Template */\n" "template class Templ { };\n\n" - "/*! Classe heredada utilitzant herncia protegida */\n" + "/*! Classe heredada utilitzant herència protegida */\n" "class ProtectedBase { };\n\n" - "/*! Classe heredada utiltzant herncia privada */\n" + "/*! Classe heredada utiltzant herència privada */\n" "class PrivateBase { };\n\n" "/*! Classe usada per la classe heretada */\n" "class Used { };\n\n" @@ -1045,26 +1046,26 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Si l'etiqueta \\c MAX_DOT_GRAPH_HEIGHT est igualada a 24a0 al fitxer de configuraci, resultar el grfic segent:" + "Resultarà el gràfic següent:" "

\"\"
\n" "

\n" - "Les caixes del grfic superior tenen aquesta interpretaci:\n" + "Les caixes del gràfic superior tenen aquesta interpretació:\n" "

    \n" - "
  • Una caixa negra plena represent l'estructura o classe per la qual el grfic s'ha generat.\n" + "
  • Una caixa negra plena represent l'estructura o classe per la qual el gràfic s'ha generat.\n" "
  • Una caixa de vora negra representa una estructura o classe documentada.\n" "
  • Una caixa de vora verda representa una estructura o classe indocumentada.\n" "
  • Una caixa de vora vermalla representa una estructura o classe documentada de la qual " - "no es mostren totes les relacions d'herncia/inclusi. Un grfic s truncat si no s'ajusta als lmits.\n" + "no es mostren totes les relacions d'herència/inclusió. Un gràfic és truncat si no s'ajusta als límits.\n" "
\n" "Les sagetes tenen aquest significat:\n" "
    \n" - "
  • Una sageta blau fosc remarca una relaci d'herncia de tipus pblica entre dues classes.\n" - "
  • Una sageta verd fosc remarca una relaci d'herncia de tipus protegida entre dues classes.\n" - "
  • Una sageta roig fosc remarca una relaci d'herncia de tipus privada entre dues classes.\n" - "
  • Una sageta puntejada de color porpra indica que una classe s continguda o usada per una altra classe." - " La sageta s'etiqueta amb la variable o variables a travs de les quals la classe o estructura apuntada s accessible.\n" - "
  • Una sageta puntejada de color groc indica la relaci entre una instncia template i la classe template de qu ha set instanciada." - " La sageta s'etiqueta amb els parmetres template de la instncia.\n" + "
  • Una sageta blau fosc remarca una relació d'herència de tipus pública entre dues classes.\n" + "
  • Una sageta verd fosc remarca una relació d'herència de tipus protegida entre dues classes.\n" + "
  • Una sageta roig fosc remarca una relació d'herència de tipus privada entre dues classes.\n" + "
  • Una sageta puntejada de color porpra indica que una classe és continguda o usada per una altra classe." + " La sageta s'etiqueta amb la variable o variables a través de les quals la classe o estructura apuntada és accessible.\n" + "
  • Una sageta puntejada de color groc indica la relació entre una instància template i la classe template de què ha set instanciada." + " La sageta s'etiqueta amb els paràmetres template de la instància.\n" "
\n"; } /*! text for the link to the legend page */ @@ -1095,7 +1096,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! Used as a section header for KDE-2 IDL methods */ virtual QCString trDCOPMethods() { - return "Mtodes DCOP"; + return "Mètodes DCOP"; } ////////////////////////////////////////////////////////////////////////// @@ -1110,7 +1111,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! Used as a section header for IDL property documentation */ virtual QCString trPropertyDocumentation() { - return "Documentaci de les Propietats"; + return "Documentació de les Propietats"; } ////////////////////////////////////////////////////////////////////////// @@ -1142,7 +1143,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "Aquesta s la llista de paquets, amb una breu descripci (si se'n disposa):"; + return "Aquesta és la llista de paquets, amb una breu descripció (si se'n disposa):"; } /*! The link name in the Quick links header for each page */ virtual QCString trPackages() @@ -1216,7 +1217,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! Used as header RTF general index */ virtual QCString trRTFGeneralIndex() { - return "ndex"; + return "Índex"; } /*! This is used for translation of the word that will possibly @@ -1269,7 +1270,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 */ virtual QCString trPage(bool first_capital, bool singular) { - QCString result((first_capital ? "Pgin" : "pgin")); + QCString result((first_capital ? "Pàgin" : "pàgin")); if (!singular) result+="es"; else result+="a"; return result; } @@ -1317,7 +1318,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 */ virtual QCString trReferences() { - return "Referncies"; + return "Referències"; } ////////////////////////////////////////////////////////////////////////// @@ -1378,7 +1379,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! Header used for the documentation section of a class' events. */ virtual QCString trEventDocumentation() { - return "Documentaci dels Esdeveniments"; + return "Documentació dels Esdeveniments"; } ////////////////////////////////////////////////////////////////////////// @@ -1403,7 +1404,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 */ virtual QCString trStaticPackageMembers() { - return "Funcions Esttiques de Paquet"; + return "Funcions Estàtiques de Paquet"; } /*! Used as a heading for a list of Java class variables with package * scope. @@ -1417,7 +1418,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 */ virtual QCString trStaticPackageAttribs() { - return "Atributs Esttics de Paquet"; + return "Atributs Estàtics de Paquet"; } ////////////////////////////////////////////////////////////////////////// @@ -1434,7 +1435,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "Grfic de crides d'aquesta funci:"; + return "Gràfic de crides d'aquesta funció:"; } ////////////////////////////////////////////////////////////////////////// @@ -1454,7 +1455,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 */ virtual QCString trSearchResultsTitle() { - return "Resultats de la Bsqueda"; + return "Resultats de la Búsqueda"; } /*! This string is put just before listing the search results. The * text can be different depending on the number of documents found. @@ -1513,7 +1514,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * of the directories. */ virtual QCString trDirDocumentation() - { return "Documentaci dels Directoris"; } + { return "Documentació dels Directoris"; } /*! This is used as the title of the directory index and also in the * Quick links of a HTML page, to link to the directory hierarchy. @@ -1525,15 +1526,15 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 * and the fact that it is sorted alphabetically per level */ virtual QCString trDirDescription() - { return "Aquesta jerarquia de directoris est ordenada toscament, " - "per no completa, de forma alfabtica:"; + { return "Aquesta jerarquia de directoris està ordenada toscament, " + "però no completa, de forma alfabètica:"; } /*! This returns the title of a directory page. The name of the * directory is passed via \a dirName. */ virtual QCString trDirReference(const char *dirName) - { QCString result="Referncia del Directori "; result+=dirName; return result; } + { QCString result="Referència del Directori "; result+=dirName; return result; } /*! This returns the word directory with or without starting capital * (\a first_capital) and in sigular or plural form (\a singular). @@ -1554,9 +1555,9 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 */ virtual QCString trOverloadText() { - return "Aquesta s una funci membre sobrecarregada, " - "proveda per convenincia. Es diferencia de la funci " - "anterior noms en els arguments que accepta."; + return "Aquesta és una funció membre sobrecarregada, " + "proveïda per conveniència. Es diferencia de la funció " + "anterior només en els arguments que accepta."; } ////////////////////////////////////////////////////////////////////////// @@ -1566,15 +1567,221 @@ class TranslatorCatalan : public TranslatorAdapter_1_5_4 /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "Grfic de crides a aquesta funci:"; + return "Gràfic de crides a aquesta funció:"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration values */ virtual QCString trEnumerationValueDocumentation() - { return "Documentaci de les Enumeracions"; } + { return "Documentació de les Enumeracions"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Documentació de les Funcions/Subrutines Membre"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Llista de Tipus de Dades"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Camps de Dades"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Aquests són els tipus de dades acompanyats amb breus descripcions:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Aquesta és la llista de tots els membres de tipus de dades"; + if (!extractAll) + { + result+=" documentats"; + } + result+=" amb enllaços a "; + if (!extractAll) + { + result+="la documentació del tipus de dades per a cada membre:"; + } + else + { + result+="els tipus de dades a que pertanyen:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Índex de Tipus de Dades"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Documentació dels Tipus de Dades"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Funcions/Subrutines"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Documentació de les Funcions/Subrutines"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Tipus de Dades"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Llista de Mòduls"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Aquesta és la llista de tots els mòduls "; + if (!extractAll) result+="documentats "; + result+="amb breus descripcions:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result="Referència de"; + switch(compType) + { + case ClassDef::Class: result+=" el Mòdul "; break; + case ClassDef::Struct: result+=" el Tipus "; break; + case ClassDef::Union: result+=" la Unió "; break; + case ClassDef::Interface: result+=" la Interfície "; break; + case ClassDef::Protocol: result+="l Protocol "; break; + case ClassDef::Category: result+=" la Categoria "; break; + case ClassDef::Exception: result+=" l'Excepció "; break; + } + if (isTemplate) result+="Template "; + result+=(QCString)clName; + return result; + } + + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result="Referència del Mòdul "; + result+=namespaceName; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Membres del Mòdul"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Aquesta és la llista de tots els membres del mòdul"; + if (!extractAll) + { + result+=" documentats"; + } + result+=" amb enllaços a "; + if (!extractAll) + { + result+="la documentació del mòdul per a cada membre:"; + } + else + { + result+="els mòduls a que pertanyen:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Índex de Mòduls"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Mòdul" : "mòdul")); + if (!singular) result+="s"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"La documentació d'aquest"; + switch(compType) + { + case ClassDef::Class: result+=" mòdul"; break; + case ClassDef::Struct: result+=" tipus"; break; + case ClassDef::Union: result+="a unió"; break; + case ClassDef::Interface: result+="a interfície"; break; + case ClassDef::Protocol: result+=" protocol"; break; + case ClassDef::Category: result+="a categoria"; break; + case ClassDef::Exception: result+="a excepció"; break; + } + result+=" es va generar a partir del"; + if (!single) result+="s"; + result+=" següent"; + if (!single) result+="s"; + result+=" fitxer"; + if (!single) result+="s:"; else result+=":"; + return result; + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool) + { + QCString result((first_capital ? "Tipus" : "tipus")); + //if (!singular) result+="s"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Subprogram" : "subprogram")); + if (!singular) result+="es"; + else result+="a"; + return result; + } + + /*! C# Type Constraint list */ + virtual QCString trTypeConstraints() + { + return "Restriccions de Tipus"; + } }; diff --git a/src/util.cpp b/src/util.cpp index 500b1af..4c2e628 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -3715,7 +3715,8 @@ bool getDefs(const QCString &scName,const QCString &memberName, for (mmli.toFirst(); (mmd = mmli.current()); ++mmli) { - if (!mmd->isLinkable() || !mmd->isRelated() || !mmd->getClassDef()) + if (!mmd->isLinkable() || (!mmd->isRelated() && !mmd->isForeign()) || + !mmd->getClassDef()) continue; if (!args) break; diff --git a/src/vhdlcode.l b/src/vhdlcode.l index 7e72d84..bbce4e9 100644 --- a/src/vhdlcode.l +++ b/src/vhdlcode.l @@ -974,7 +974,7 @@ MAPPORT {BN}*("port"|"generic"){BN}*("map"){BN}*("("){1} } } -[_a-zA_Z"]["_a-zA-Z0-9]* { +["_a-zA-Z0-9]* { QCString val(yytext); g_FuncProto.append(yytext); appStringLower(g_PrevString,yytext); diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index 4e027e0..5535a90 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -160,24 +160,6 @@ QCString* VhdlDocGen::findKeyWord(const QCString& word) * returns the parsed entry at line xxx */ -Entry* VhdlDocGen::getEntryAtLine(const Entry* ce,int line) -{ - EntryListIterator eli(*ce->children()); - Entry *found=0; - Entry *rt; - for (;(rt=eli.current());++eli) - { - if (rt->bodyLine==line) - { - found=rt; - } // if - if (!found) - { - found=getEntryAtLine(rt,line); - } - } - return found; -}// getEntryAtLine void VhdlDocGen::debugClassName(ClassSDict* mDict) { @@ -1360,7 +1342,7 @@ void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* md { temp+=" "; } - temp+=QCString(&c,1); + temp+=c; temp+=" "; } else if (c=='=') @@ -1373,13 +1355,13 @@ void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* md else // = operator { temp+=" "; - temp+=QCString(&c,1); + temp+=c; temp+=" "; } } else { - temp+=QCString(&c,1); + temp+=c; } index=temp.length(); @@ -1670,19 +1652,20 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml, OutputList& ol,GroupDef* gd,ClassDef* cd) { static ClassDef *cdef; - static GroupDef* gdef; + //static GroupDef* gdef; if (cd && cdef!=cd) { // only one inline link VhdlDocGen::writeInlineClassLink(cd,ol); cdef=cd; } + /* if (gd && gdef==gd) return; if (gd && gdef!=gd) { gdef=gd; } - +*/ VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::LIBRARY,FALSE),0,FALSE,VhdlDocGen::LIBRARY); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::USE,FALSE),0,FALSE,VhdlDocGen::USE); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::FUNCTION,FALSE),0,FALSE,VhdlDocGen::FUNCTION); diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h index 2c530a4..f8952a7 100644 --- a/src/vhdldocgen.h +++ b/src/vhdldocgen.h @@ -80,7 +80,6 @@ class VhdlDocGen static void init(); // --- used by vhdlscanner.l ----------- - static Entry* getEntryAtLine(const Entry* e,int line); static QCString getIndexWord(const char* ,int index); static bool foundInsertedComponent(const QCString& name,Entry* root); static bool deleteCharRev(QCString &s,char c); diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l index 0eeb426..1fd68d4 100644 --- a/src/vhdlscanner.l +++ b/src/vhdlscanner.l @@ -141,7 +141,7 @@ static void getBufText(QCString& qc,int start) static void lineCount() { - for ( const char* c = vhdlscanYYtext ; *c ; ++c ) + for ( const char* c = yytext ; *c ; ++c ) { yyLineNr += (*c == '\n') ; } @@ -446,6 +446,24 @@ static void parseFunctionProto() bufferClear(); }//parseFunctionProto +static Entry* getEntryAtLine(const Entry* ce,int line) +{ + EntryListIterator eli(*ce->children()); + Entry *found=0; + Entry *rt; + for (;(rt=eli.current());++eli) + { + if (rt->bodyLine==line) + { + found=rt; + } // if + if (!found) + { + found=getEntryAtLine(rt,line); + } + } + return found; +}// getEntryAtLine //------------------------------------------------------------------------- @@ -534,7 +552,7 @@ static void addOneTextLine(QCString& ss ) //else if (pEntry && pEntry->bodyLine==yyLineNr) // pTemp=pEntry; else - pTemp=VhdlDocGen::getEntryAtLine(current_root,yyLineNr) ; + pTemp=getEntryAtLine(current_root,yyLineNr) ; if (pTemp) { @@ -622,7 +640,7 @@ ALLID [^;()\t ] bufferClear(); //pEntry=current; - getType(current,vhdlscanYYtext); + getType(current,yytext); current->bodyLine=yyLineNr; if (current->spec==VhdlDocGen::UNITS) { @@ -645,7 +663,7 @@ ALLID [^;()\t ] bufferClear(); isBody=0; lastCompound = current; - QCString curName=VhdlDocGen::getIndexWord(vhdlscanYYtext,1); + QCString curName=VhdlDocGen::getIndexWord(yytext,1); current->section=Entry::CLASS_SEC; //Entry::CLASS_SEC; current->spec=VhdlDocGen::ARCHITECTURE; current->protection=Private; @@ -684,7 +702,7 @@ ALLID [^;()\t ] bropen=0; bufferClear(); isBody=0; - QCString qcs=QCString(vhdlscanYYtext); + QCString qcs=QCString(yytext); // lowerString(qcs); qcs=qcs.stripWhiteSpace(); if (stricmp(qcs.data(),"use")==0) @@ -709,7 +727,7 @@ ALLID [^;()\t ] bropen=0; bufferClear(); isFunc=1; - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); BEGIN(FindFuncName); } @@ -719,7 +737,7 @@ ALLID [^;()\t ] bropen=0; bufferClear(); - QCString word(vhdlscanYYtext); + QCString word(yytext); word=word.lower(); word=word.stripWhiteSpace(); @@ -764,7 +782,7 @@ ALLID [^;()\t ] lineCount(); QCString type; - QCString tt(vhdlscanYYtext); + QCString tt(yytext); tt = tt.stripWhiteSpace(); //printf(" tt=%s\n",tt.data()); //VhdlDocGen::deleteAllChars(tt,'\n'); @@ -821,7 +839,7 @@ ALLID [^;()\t ] {CR}* { lineCount(); - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); BEGIN(Start); } @@ -855,7 +873,7 @@ ALLID [^;()\t ] {B}*[a-z_][^\n;]* { // parse record|unit body lineCount(); - QCString zz(vhdlscanYYtext); + QCString zz(yytext); addSignals(zz.data(),yyLineNr,current); BEGIN(ParseUnits); } @@ -863,8 +881,8 @@ ALLID [^;()\t ] {NAME} { // found entity|architecture|component name lineCount(); - QCString qcs(vhdlscanYYtext); - QCString qreal=QCString(vhdlscanYYtext); + QCString qcs(yytext); + QCString qreal=QCString(yytext); qcs=qcs.stripWhiteSpace(); if (current->spec==VhdlDocGen::USE) { @@ -910,13 +928,13 @@ ALLID [^;()\t ] {FUNCNAME} { // found name of a process|function|procedure lineCount(); - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); BEGIN(ParseType); } {NAME}{BR}* { lineCount(); - current->name=QCString(vhdlscanYYtext); + current->name=QCString(yytext); BEGIN(ParseType); } @@ -930,7 +948,7 @@ ALLID [^;()\t ] genPort=2; current->section=Entry::VARIABLE_SEC; current->spec=VhdlDocGen::RECORD; - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); newEntry(); // adds the record to the last compound BEGIN(ParseRecord); } @@ -949,21 +967,26 @@ ALLID [^;()\t ] [a-z_A-Z0-9][^\n;]*";"({B}*{COMMENT})* { // parse record body lineCount(); QCString comment; - QCString zz(vhdlscanYYtext); + QCString zz(yytext); if (zz.contains("--!")) { QStringList ql=QStringList::split("--!",zz,FALSE); comment = ql[1]; zz = ql[0]; } + else if (zz.contains("--")) + { + QStringList ql=QStringList::split("--",zz,FALSE); + zz = ql[0]; + } initEntry(current); addSignals(zz,yyLineNr,current,comment); - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); BEGIN(ParseRecord); } {B}+("is"){B}*{CR}|{B}+("is"){B}*"--" { // found a new function in an architecture ? - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); lineCount(); QCString ttt; bool bb=TRUE; @@ -1024,21 +1047,21 @@ ALLID [^;()\t ] [^;()\t ] { lineCount(); - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); BEGIN(ParseType); } {BRACEOPEN} { lineCount(); bropen++; - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); BEGIN(ParseType); } {BRACECLOSE} { lineCount(); bropen--; - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); if (bropen==0 && scantype==2) // process { ::parseProcessProto(); @@ -1072,7 +1095,7 @@ ALLID [^;()\t ] {ENDE3} { lineCount(); - QCString tt(vhdlscanYYtext); + QCString tt(yytext); tt=tt.lower(); VhdlDocGen::deleteAllChars(tt,';'); tt.stripWhiteSpace(); @@ -1101,7 +1124,7 @@ ALLID [^;()\t ] ";" { lineCount(); - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); if (bropen==0 && !(isFunc==1 && isBody==1) ) { if (isFunc) @@ -1194,13 +1217,13 @@ ALLID [^;()\t ] {BR}* { lineCount(); - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); BEGIN(ParseType); } {NAME} { // found name of an entity/architecture/package lineCount(); - QCString qcs(vhdlscanYYtext); + QCString qcs(yytext); qcs=qcs.stripWhiteSpace(); qcs=qcs.lower(); if (strcmp(qcs.data(),"body")==0) // found package body @@ -1214,7 +1237,7 @@ ALLID [^;()\t ] } else if (scantype==1) // found a component { - QCString qq(vhdlscanYYtext); + QCString qq(yytext); qq=qq.stripWhiteSpace(); //qq=qq.lower(); @@ -1242,18 +1265,18 @@ ALLID [^;()\t ] } else { - QCString qq(vhdlscanYYtext); + QCString qq(yytext); qq=qq.stripWhiteSpace(); current->name=qq; newEntry(); - //QCString qreal=QCString(vhdlscanYYtext); + //QCString qreal=QCString(yytext); BEGIN(Start); } } {B}*("generic"|"port"){BR}*[(]+ { // found generic|port in entity - QCString genp(vhdlscanYYleng+1); - deleteSpecChars(vhdlscanYYtext,genp.data()); + QCString genp(yyleng+1); + deleteSpecChars(yytext,genp.data()); VhdlDocGen::deleteCharRev(genp,'('); if (stricmp(genp.data(),"port" )==0) @@ -1274,7 +1297,7 @@ ALLID [^;()\t ] {BRACECLOSE} { lineCount(); bropen--; - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); if (bropen==0) { bufferClear(); @@ -1287,7 +1310,7 @@ ALLID [^;()\t ] } {LABELID} { // found signals in entity - QCString line(vhdlscanYYtext); + QCString line(yytext); // note that line can be something like: // "var1, var2, var3 : in std_logic_vector(8 downto 0); --! Some comment" @@ -1307,9 +1330,14 @@ ALLID [^;()\t ] int openCount=line.contains('('); int closeCount=line.contains(')'); int semi = line.find(';'); - int pos; + int pos = line.find("--"); + int pos1 = line.find("--!"); + if (pos!=-1 && pos signal: line='%s'\n",line.data()); - if (semi!=-1 && (pos=line.find("--"))!=-1) + if (semi!=-1 && pos!=-1) { int eol = line.findRev('\n'); //printf("pos=%d eol=%d\n",pos,eol); @@ -1348,7 +1376,7 @@ ALLID [^;()\t ] if (scantype!=1) // not a component { - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); addSignals(line,yyLineNr,lastEntity,comment); } @@ -1365,24 +1393,24 @@ ALLID [^;()\t ] {BRACEOPEN} { lineCount(); bropen++; - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); } {CR} { lineCount(); - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); //BEGIN(FindSigName); } <*>^{B}*("for ")[^;]* { - //printf("\n found for[%s] [%d]",vhdlscanYYtext,yyLineNr); + //printf("\n found for[%s] [%d]",yytext,yyLineNr); lineCount(); } <*>{DIGITS} { // found digit - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); lineCount(); } @@ -1412,20 +1440,39 @@ ALLID [^;()\t ] <*>{BR}*"--!"[^{}\n][^\n]*\n/{B}*"--!" { // multi line comment if (iDocLine==-1) iDocLine=yyLineNr; + // signal clk :in std_logic; --!@brief global clock + // --!@brief global reset + // signal reset:in std_logic; + // these two comments are detected as a multi line comment + QCString qc(yytext); + int len=qc.contains('\n')+yyLineNr-1; + if (YY_START!=Comment) // Start of the comment block { - iTextCounter=iCounter; + bufferClear(); + iTextCounter=0; startComment=yyLineNr; g_lastCommentContext=YY_START; } - addText(vhdlscanYYtext,vhdlscanYYleng); + + Entry* pTemp=getEntryAtLine(current_root,len); + if (pTemp) + { // found one line comment, add it to the entry on this line + pTemp->briefLine=yyLineNr; + pTemp->brief+=yytext; + VhdlDocGen::prepareComment(pTemp->brief); + } + else + { + addText(yytext,yyleng); + } lineCount(); BEGIN(Comment); } ^{B}*"--!"[^\n]* { if (iDocLine==-1) iDocLine=yyLineNr; - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); lineCount(); } @@ -1436,17 +1483,27 @@ ALLID [^;()\t ] VhdlDocGen::prepareComment(qcs); handleCommentBlock(qcs,FALSE); bufferClear(); - unput(*vhdlscanYYtext); + unput(*yytext); BEGIN(g_lastCommentContext); } -<*>^{B}*"--!"[^\n]* { // one line comment +<*>"--!"[^\n]* { // one line comment if (iDocLine==-1) iDocLine=yyLineNr; QCString qcs(yytext); int j=qcs.find("--!"); qcs=qcs.right(qcs.length()-3-j); //printf("--> handleCommentBlock line %d\n",yyLineNr); - handleCommentBlock(qcs,TRUE); + Entry* pTemp=getEntryAtLine(current_root,yyLineNr); + if (pTemp) + { + pTemp->briefLine=yyLineNr; + pTemp->brief+=qcs; + iDocLine=-1; + } + else + { + handleCommentBlock(qcs,TRUE); + } //printf("--> end: handleCommentBlock line %d\n",yyLineNr); bufferClear(); } @@ -1456,23 +1513,23 @@ ALLID [^;()\t ] <*>\n { lineCount(); - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); // printf("\n new-line [%d]",yyLineNr); BEGIN(Start); } <*>{NAME} { - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); lineCount(); } <*>{B}* { - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); lineCount(); } <*>. { - addText(vhdlscanYYtext,vhdlscanYYleng); + addText(yytext,yyleng); lineCount(); } -- cgit v0.12