From df80e2787c543a3b48f775fbd5c18723abe64a07 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 10 Jun 2001 14:32:16 +0000 Subject: Release-1.2.8.1 --- INSTALL | 4 +- Makefile.in | 4 +- README | 16 +- VERSION | 2 +- addon/doxywizard/doxywizard.cpp | 8 +- configure | 2 +- doc/Makefile.in | 4 +- doc/commands.doc | 4 +- doc/config.doc | 2 - doc/diagrams.doc | 4 +- doc/docblocks.doc | 11 +- doc/doxysearch_usage.doc | 4 +- doc/features.doc | 2 - doc/index.doc | 2 +- doc/install.doc | 8 +- doc/language.doc | 342 ++++++++++++++++++++-------------------- doc/translator.pl | 132 +++++++++++++--- examples/autolink.cpp | 2 +- packages/rpm/doxygen.spec | 2 +- src/config.l | 20 ++- src/defargs.l | 1 - src/diagram.cpp | 2 +- src/doc.l | 66 +++----- src/dot.cpp | 8 +- src/doxygen.cpp | 48 +++++- src/formula.cpp | 2 +- src/index.cpp | 26 +-- src/mangen.cpp | 61 ++++--- src/memberdef.cpp | 39 +++-- src/memberdef.h | 3 +- src/memberlist.cpp | 12 +- src/rtfgen.cpp | 2 +- src/scanner.l | 6 +- src/translator.h | 2 +- src/translator_adapter.h | 17 +- src/translator_br.h | 159 ++++++++++++++++++- src/translator_cz.h | 8 +- src/translator_de.h | 8 +- src/translator_dk.h | 2 +- src/translator_es.h | 13 +- src/translator_it.h | 2 +- src/translator_nl.h | 188 ++++++++++++++++++++-- src/translator_sk.h | 13 +- src/util.cpp | 20 +-- 44 files changed, 866 insertions(+), 417 deletions(-) diff --git a/INSTALL b/INSTALL index 7cde105..7873399 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.8 +DOXYGEN Version 1.2.8.1 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (04 June 2001) +Dimitri van Heesch (10 June 2001) diff --git a/Makefile.in b/Makefile.in index 68479d9..4164a86 100644 --- a/Makefile.in +++ b/Makefile.in @@ -47,10 +47,12 @@ distclean: clean install: doxywizard_install $(INSTTOOL) -d $(INSTALL)/bin - $(INSTTOOL) -d $(DOCDIR) $(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin $(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin $(INSTTOOL) -m 755 bin/doxysearch $(INSTALL)/bin + +install_docs: + $(INSTTOOL) -d $(DOCDIR) cp -r doc $(DOCDIR) cp -r examples $(DOCDIR) echo "DOXYGEN = $(INSTALL)" > $(DOCDIR)/doc/Makefile diff --git a/README b/README index feb2212..ef42103 100644 --- a/README +++ b/README @@ -1,10 +1,20 @@ -DOXYGEN Version 1.2.8 +DOXYGEN Version 1.2.8.1 Please read INSTALL for compilation instructions. The latest version of doxygen can be obtained at - http://www.stack.nl/~dimitri/doxygen + http://www.doxygen.org/ + +There are two mailing lists + doxygen-users@lists.sourceforge.net + doxygen-develop@lists.sourceforge.net + +please follow the link in + + http://sourceforge.net/projects/doxygen + +to subscribe to the lists or to visit the archives. Enjoy, -Dimitri van Heesch (04 June 2001) +Dimitri van Heesch (dimitri@stack.nl) (10 June 2001) diff --git a/VERSION b/VERSION index db6fb4a..444572e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.8 +1.2.8.1 diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp index 8ceecbb..2495d87 100644 --- a/addon/doxywizard/doxywizard.cpp +++ b/addon/doxywizard/doxywizard.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * $Id$ + * * * Copyright (C) 1997-2001 by Dimitri van Heesch. * @@ -98,7 +98,7 @@ static bool saveConfig( QString saveFile ) return FALSE; // failure } - Config::instance()->writeTemplate(&f,TRUE); // write brief config file + Config::instance()->writeTemplate(&f,TRUE,TRUE); // write brief config file return TRUE; // success } @@ -358,7 +358,7 @@ ConfigFile::ConfigFile( QWidget *parent ) : QWidget( parent ) case ConfigOption::O_String: { ASSERT(page!=0); - InputString::StringMode sm; + InputString::StringMode sm=InputString::StringFree; switch(((ConfigString *)option)->widgetType()) { case ConfigString::String: sm=InputString::StringFree; break; @@ -400,7 +400,7 @@ ConfigFile::ConfigFile( QWidget *parent ) : QWidget( parent ) case ConfigOption::O_List: { ASSERT(page!=0); - InputStrList::ListMode lm; + InputStrList::ListMode lm=InputStrList::ListString; switch(((ConfigList *)option)->widgetType()) { case ConfigList::String: lm=InputStrList::ListString; break; diff --git a/configure b/configure index b201aba..0ecb8ba 100755 --- a/configure +++ b/configure @@ -24,7 +24,7 @@ f_dot=NO f_perl=NO f_plf_auto=NO f_prefix=/usr -f_insttool=install +f_insttool=ginstall f_english=NO f_wizard=NO f_xmlgen=NO diff --git a/doc/Makefile.in b/doc/Makefile.in index c330d4f..db61bf9 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -1,5 +1,5 @@ # -# $Id$ +# # # Copyright (C) 1997-2001 by Dimitri van Heesch. # @@ -30,7 +30,7 @@ clean: language: language.doc -language.doc: maintainers.txt language.tpl translator.pl +language.doc: $(wildcard ../src/translator*.h) maintainers.txt language.tpl translator.pl $(PERL) translator.pl FORCE: diff --git a/doc/commands.doc b/doc/commands.doc index 087fad0..bfee043 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -1439,9 +1439,9 @@ Public/Protected/Private/... section. \warning The image format for HTML is limited to what your browser supports. For \f$\mbox{\LaTeX}\f$ the image format - must be Encapsulated PostScipt (eps). + must be Encapsulated PostScript (eps).

- doxygen does not check if the image is in the correct format. + Doxygen does not check if the image is in the correct format. So \e you have to make sure this is the case!
diff --git a/doc/config.doc b/doc/config.doc index 13d3991..8a4a2f3 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -16,8 +16,6 @@ */ /*! \page config Configuration -\section config Configuration - \subsection config_format Format A configuration file is a free-form ASCII text file with a structure that diff --git a/doc/diagrams.doc b/doc/diagrams.doc index 3217800..a89b878 100644 --- a/doc/diagrams.doc +++ b/doc/diagrams.doc @@ -90,8 +90,8 @@
  • A \b white box indicates a class or struct or file.
  • A box with a \b red border indicates a node that has \e more arrows than are shown! - In order words: the graph is \e truncated with respect to this node. - The reason a graph is sometimes truncated is to prevent images + In other words: the graph is \e truncated with respect to this node. + The reason why a graph is sometimes truncated is to prevent images from becoming too large. For the graphs generated with dot doxygen tries to limit the width of the resulting image to 1024 pixels. diff --git a/doc/docblocks.doc b/doc/docblocks.doc index bb73ccb..611f0ee 100644 --- a/doc/docblocks.doc +++ b/doc/docblocks.doc @@ -180,16 +180,19 @@ additional comment blocks: \verbatim /*!< ... */ \endverbatim -This block can be used to put a Qt style documentation blocks after a member. -The one line version look as follows: +This block can be used to put a Qt style detailed +documentation block after a member. +The one line brief description looks as follows: \verbatim //!< ... \endverbatim -There are also JavaDoc versions: +There are also JavaDoc versions for detailed documentation: \verbatim /**< ... */ \endverbatim -and +(where the first sentence is the brief description +if \c JAVADOC_AUTOBRIEF is set to \c YES) +and there is a separate brief description as well: \verbatim ///< ... \endverbatim diff --git a/doc/doxysearch_usage.doc b/doc/doxysearch_usage.doc index 6d6ad29..e878a9c 100644 --- a/doc/doxysearch_usage.doc +++ b/doc/doxysearch_usage.doc @@ -98,7 +98,7 @@ follow these steps: Consult the manual of your HTTP daemon or your system administrator to find out where this directory resides on your system. -
  • Goto the directory where the generated HTML files are located and run +
  • Go to the directory where the generated HTML files are located and run doxytag as follows:
    doxytag -s search.idx
    This will create a search index with the name search.idx. @@ -120,7 +120,7 @@ Using doxytag and doxysearch it is possible to create the Qt documentation, without needing the sources! This can be done by carefully following these steps:
      -
    1. Goto the html directory of the Qt-distribution: +
    2. Go to the html directory of the Qt-distribution:
      cd $QTDIR/html
    3. Generate the search index by typing:
      doxytag -s search.idx
      diff --git a/doc/features.doc b/doc/features.doc index 053a9db..71c2a1f 100644 --- a/doc/features.doc +++ b/doc/features.doc @@ -16,8 +16,6 @@ */ /*! \page features Features -\section features Features - \addindex features
      • Requires very little overhead from the writer of the documentation. diff --git a/doc/index.doc b/doc/index.doc index a66df37..c260a81 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -14,7 +14,7 @@ * input used in their production; they are not affected by this license. * */ -/*! \page index Index +/*! \page index \if logo_on
        \htmlonly diff --git a/doc/install.doc b/doc/install.doc index 79743b9..abdf020 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -164,7 +164,7 @@ Compilation is now done by performing the following steps: Binaries are installed in the directory \/bin, documentation and examples in the directory \/share/doc/packages/doxygen (use - DOCDIR\\ after make to change this). + make install DOCDIR=\ to change this). \ defaults to /usr but can be changed with the --prefix option of the configure script. @@ -274,7 +274,7 @@ ce_parse.cpp: I tried compiling doxygen only with Sun's C++ WorkShop Compiler version 5.0 (I used ./configure --platform solaris-cc) -Qt-2.x.x is required for this compiler (Qt-1.44 has problems with the bool +Qt-2.x.y is required for this compiler (Qt-1.44 has problems with the bool type). Compiling the \c doxygen binary went ok, but while linking doxytag I got a @@ -386,7 +386,7 @@ Here is what is required: steps.
      • From Doxygen-1.2.2-20001015 onwards, the distribution includes the part - of Qt-2.x.x that is needed for to compile doxygen, doxytag, + of Qt-2.x.y that is needed for to compile doxygen, doxytag, and doxysearch. The Windows specific part were also created. As a result doxygen can be compiled on systems without X11 or the commerical version of Qt. @@ -497,7 +497,7 @@ Compilation is now done by performing the following steps: \subsection install_bin_windows Installating the binaries on Windows -There is no fancy installation procedure at the moment (If anyone wants +There is no fancy installation procedure at the moment (if anyone wants to add it please let me know). To install doxygen, just copy the binaries from the bin directory diff --git a/doc/language.doc b/doc/language.doc index 41e346e..9f9911f 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -1,5 +1,8 @@ /****************************************************************************** + * Warning: this file was generated from the language.tpl template + * and the maintainers.txt files by the translator.pl script. * + * Do not edit this file. Edit the above mentioned files! * * * Copyright (C) 1997-2001 by Dimitri van Heesch. @@ -22,9 +25,18 @@ Doxygen has support for multiple languages. This means that the text fragments that doxygen generates can changed into languages other than English (the default) at configuration time.

        -Currently, supported for over 20 languages is available. +Currently (version unknown), 23 languages +are supported (sorted alphabetically): +Brazilian Portuguese, Chinese, Croatian, Czech, Danish, +Dutch, English, Finnish, French, German, +Hungarian, Italian, Japanese, Korean, Norwegian, +Polish, Portuguese, Romanian, Russian, Slovak, +Slovene, Spanish, and Swedish. -Here is a list of the languages and their current maintainers: +The table of information related to the supported languages follows. +It is sorted by language alphabetically. The Status column +was generated from sources and shows approximately the last version +when the translator was updated.

        \htmlonly @@ -37,184 +49,145 @@ Here is a list of the languages and their current maintainers: Maintainer Contact address (remove the NOSPAM.) + Status + - - German - - - Jens Breitenstein - - - - Jens.Breitenstein@NOSPAM.tlc.de - + Brazilian + Fabio "FJTC" Jun Takada Chino + chino@NOSPAM.grad.icmc.sc.usp.br + up-to-date - - French - - - Christophe Bordeux - - - - bordeux@NOSPAM.lig.di.epfl.ch - + Chinese + Wang Weihan + wangweihan@NOSPAM.capinfo.com.cn + 1.2.1 - - Swedish - - - Samuel Hägglund
        - XeT Erixon - - - - sahag96@NOSPAM.nts.mh.se
        - - xet@NOSPAM.hem.passagen.se - + Croatian + Boris Bralo + boris.bralo@NOSPAM.zg.tel.hr + up-to-date - - Czech - - - Petr Prikryl
        - Vlastimil Havran - - - - prikrylp@NOSPAM.skil.cz - - havran@NOSPAM.fel.cvut.cz - + Czech + Petr Přikryl
        Vlastimil Havran + prikrylp@NOSPAM.skil.cz
        havran@NOSPAM.fel.cvut.cz + up-to-date - - Italian - - - Ahmed Aldo Faisal
        - Alessandro Falappa - - - - aaf23@NOSPAM.cam.ac.uk
        - - a.falappa@NOSPAM.flashnet.it - + Danish + Erik Søe Sørensen + erik@NOSPAM.mail.nu + 1.2.7 - - Japanese - - - Kenji Nagamatsu - - - - naga@NOSPAM.joyful.club.ne.jp - + Dutch + Dimitri van Heesch + dimitri@NOSPAM.stack.nl + up-to-date - - Spanish - - - Francisco Oltra Thennet - - - - foltra@NOSPAM.puc.cl - + English + Dimitri van Heesch + dimitri@NOSPAM.stack.nl + up-to-date - - Finnish - - - Olli Korhonen - - - - Olli.Korhonen@NOSPAM.ccc.fi - + Finnish + Olli Korhonen + Olli.Korhonen@NOSPAM.ccc.fi + 1.0.0 - - Russian - - - Alexandr Chelpanov - - - - cav@NOSPAM.cryptopro.ru - + French + Christophe Bordeux + bordeux@NOSPAM.lig.di.epfl.ch + 1.2.0 - - Korean - - - Richard Kim - - - - ryk@NOSPAM.dspwiz.com - + German + Jens Seidel
        Jens Breitenstein + jensseidel@NOSPAM.users.sourceforge.net
        Jens.Breitenstein@NOSPAM.tlc.de + up-to-date - - Hungarian - - - Földvári György - - - - foldvari@NOSPAM.diatronltd.com - + Hungarian + Földvári György + foldvari@NOSPAM.diatronltd.com + 1.2.1 - - Croatian - - - Boris Bralo - - - - boris.bralo@NOSPAM.zg.tel.hr - + Italian + Ahmed Aldo Faisal
        Alessandro Falappa + aaf23@NOSPAM.cam.ac.uk
        a.falappa@NOSPAM.flashnet.it + 1.2.7 - - Polish - - - Grzegorz Kowal - - - - g_kowal@NOSPAM.poczta.onet.pl - + Japanese + Kenji Nagamatsu + naga@NOSPAM.joyful.club.ne.jp + 1.2.5 + + + Korean + Richard Kim + ryk@NOSPAM.dspwiz.com + 1.1.0 + + + Norwegian + Lars Erik Jordet + larsej@NOSPAM.stud.ifd.hibu.no + 1.2.2 + + + Polish + Grzegorz Kowal + g_kowal@NOSPAM.poczta.onet.pl + 1.2.1 + + + Portuguese + Rui Godinho Lopes + ruiglopes@NOSPAM.yahoo.com + 1.1.5 + + + Romanian + Alexandru Iosup + aiosup@NOSPAM.yahoo.com + 1.2.1 + + + Russian + Alexandr Chelpanov + cav@NOSPAM.cryptopro.ru + up-to-date - - - - Dutch - - - Dimitri van Heesch - - - - dimitri@NOSPAM.stack.nl - + Slovak + Stanislav Kudlac + qwerty1@NOSPAM.pobox.sk + 1.2.7 + + + Slovene + Matjaz Ostroversnik + matjaz.ostroversnik@NOSPAM.zrs-tk.si + 1.1.5 + + + Spanish + Francisco Oltra Thennet + foltra@NOSPAM.puc.cl + 1.2.7 + + + Swedish + Samuel Häagglund
        XeT Erixon + sahag96@NOSPAM.nts.mh.se
        xet@NOSPAM.hem.passagen.se + 1.0.0 @@ -222,43 +195,66 @@ Here is a list of the languages and their current maintainers: \endhtmlonly \latexonly -\begin{tabular}{|l|l|l|} +\begin{tabular}{|l|l|l|l|} + \hline + {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\ + \hline + \hline + Brazilian & Fabio "FJTC" Jun Takada Chino & {\tt chino@grad.icmc.sc.usp.br} & up-to-date \\ + \hline + Chinese & Wang Weihan & {\tt wangweihan@capinfo.com.cn} & 1.2.1 \\ \hline - {\bf Language} & {\bf Maintainer} & {Contact address} \\ + Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\ \hline - German & Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} \\ + Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\ + & Vlastimil Havran & {\tt havran@fel.cvut.cz} & \\ \hline - French & Christophe Bordeux & {\tt bordeux@lig.di.epfl.ch} \\ + Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & 1.2.7 \\ \hline - Swedish & Samuel H\"agglund & {\tt sahag96@nts.mh.se} \\ - & XeT Erixon & {\tt xet@hem.passagen.se} \\ + Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\ \hline - Czech & Petr Prikryl & {\tt prikrylp@skil.cz} \\ - & Vlastimil Havran & {\tt havran@fel.cvut.cz} \\ + English & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\ \hline - Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} \\ - & Alessandro Falappa & {\tt a.falappa@flashnet.it} \\ + Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & 1.0.0 \\ \hline - Japanese & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} \\ + French & Christophe Bordeux & {\tt bordeux@lig.di.epfl.ch} & 1.2.0 \\ \hline - Spanish & Francisco Oltra Thennet & {\tt foltra@puc.cl} \\ + German & Jens Seidel & {\tt jensseidel@users.sourceforge.net} & up-to-date \\ + & Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} & \\ \hline - Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} \\ + Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\ \hline - Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} \\ + Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & 1.2.7 \\ + & Alessandro Falappa & {\tt a.falappa@flashnet.it} & \\ \hline - Korean & Richard Kim & {\tt ryk@dspwiz.com} \\ + Japanese & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & 1.2.5 \\ \hline - Hungarian & Földvári György & {\tt foldvari@diatronltd.com} \\ + Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.1.0 \\ \hline - Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} \\ + Norwegian & Lars Erik Jordet & {\tt larsej@stud.ifd.hibu.no} & 1.2.2 \\ \hline - Polish & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} \\ + Polish & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & 1.2.1 \\ \hline - Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} \\ + Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.1.5 \\ + \hline + Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.1 \\ + \hline + Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\ + \hline + Slovak & Stanislav Kudlac & {\tt qwerty1@pobox.sk} & 1.2.7 \\ + \hline + Slovene & Matjaz Ostroversnik & {\tt matjaz.ostroversnik@zrs-tk.si} & 1.1.5 \\ + \hline + Spanish & Francisco Oltra Thennet & {\tt foltra@puc.cl} & 1.2.7 \\ + \hline + Swedish & Samuel H\"{a}agglund & {\tt sahag96@nts.mh.se} & 1.0.0 \\ + & XeT Erixon & {\tt xet@hem.passagen.se} & \\ \hline \end{tabular} \endlatexonly + +Have a look at doxygen/doc/translator_report.txt for more details.

        Most people on the list have indicated that they were also busy @@ -348,7 +344,7 @@ maintenance is needed. By looking at the adapter class itself (and its base classes) you can easily see which methods need to be updated. To update a language simply make your translator class derive from -TranslatorAdapterBase and provide translations for the methods that +the abstract class Translator and provide translations for the methods that were previously provided by the adapter class (and its base classes). */ diff --git a/doc/translator.pl b/doc/translator.pl index 375fe2b..b0bb9e3 100644 --- a/doc/translator.pl +++ b/doc/translator.pl @@ -33,6 +33,11 @@ # 2001/05/18 # - Character entity ø recognized in maintainers.txt. # +# 2001/06/06 +# - Implementation of the methods recognized even when the +# argument list does not contain argument identifiers +# (i.e., when it contains type information only). +# ################################################################ require 5.005; @@ -59,9 +64,9 @@ my $fmaintainers = "maintainers.txt"; # database of local lang. maintainers ################################################################ -# GetPureVirtual returns a hash of pure virtual method prototypes -# in a hash where the key is the method prototype, and the value -# is 1. The input argument is the full name of the source file. +# GetPureVirtual returns the list of pure virtual method prototypes +# as separate strings (one prototype, one line, one list item). +# The input argument is the full name of the source file. # sub GetPureVirtualFrom ##{{{ { @@ -120,15 +125,59 @@ sub GetPureVirtualFrom ##{{{ # $cont =~ s{^virtual\s+}{}mg; - # Split the string into array of lines and fill the output hash. + # Split the string into array of lines and return it as + # the output list. # - my %result = (); + return split(/\n/, $cont); +} +##}}} + + +################################################################ +# StripArgIdentifiers takes a method prototype (one line string), +# removes the argument identifiers, and returns only the necessary +# form of the prototype. +# +sub StripArgIdentifiers ##{{{ +{ + my $prototype = shift; # Get the prototype string. - foreach (split(/\n/, $cont)) { - $result{$_} = 1; + # Extract the list of arguments from the prototype. + # + $prototype =~ s{^(.+\()(.*)(\).*)$}{$1#ARGS#$3}; + my $a = (defined $2) ? $2 : ''; + + # Split the list of arguments. + # + my @a = split(/,/, $a); + + # Strip each of the arguments. + # + my @stripped = (); + + foreach my $arg (@a) { + + $arg =~ s{^(\s* # there can be spaces behind comma, + (const\s+)? # possibly const at the beginning + [A-Za-z0-9_:]+ # type identifier can be qualified + (\s*[*&])? # could be reference or pointer + ) # ... the above is important, + .*$ # the rest contains the identifier + } + {$1}x; # remember only the important things + + push(@stripped, $arg); } - return %result; + # Join the stripped arguments into one line again, and + # insert it back. + # + $a = join(',', @stripped); + $prototype =~ s{#ARGS#}{$a}; + + # Finally, return the stripped prototype. + # + return $prototype; } ##}}} @@ -599,9 +648,22 @@ xxxTABLE_FOOTxxx # Get only the pure virtual methods from the Translator class # into a hash structure for later testing present/not present. # - my %required = GetPureVirtualFrom("$srcdir/translator.h"); + my @expected = GetPureVirtualFrom("$srcdir/translator.h"); - # Collect base classes of translators the hash. + # Remove the argument identifiers from the method prototypes + # to get only the required form of the prototype. Fill the + # hash with them. #{{{ + # + my %required = (); + + foreach (@expected) { + my $prototype = StripArgIdentifiers($_); + $required{$prototype} = 1; + } + ##}}} + + # Collect base classes of translators in the hash. CB stands + # for Class and Base. # my %cb = (); @@ -638,21 +700,46 @@ xxxTABLE_FOOTxxx # my @old_methods = (); - foreach my $method (@info) { - if (defined $required{$method}) { $required{$method} = 0; } - else {push(@old_methods, $method); } + foreach my $implemented (@info) { + + # Get only the necessary form of the prototype. + # + my $prototype = StripArgIdentifiers($implemented); + + # Mark as recognized when the prototype is required. + # Otherwise, remember it as old method which is + # implemented, but not required. + # + if (defined $required{$prototype}) { + $required{$prototype} = 0; + } + else { + push(@old_methods, $implemented); + } } ##}}} - # Loop through the required hash and collect the missing - # (new) methods. Do this only when it derives from - # Translator or TranslatorAdapter classes. #{{{ + # Loop through the list of expected methods and collect + # the missing (new) methods. Do this only when it derives + # from Translator or TranslatorAdapter classes (i.e. ignore + # any unusual kind of TranslatorXxxx implementation). #{{{ # my @missing_methods = (); if ($base =~ m/^Translator(Adapter.*)?$/) { - foreach (keys %required) { - if ($required{$_}) { push(@missing_methods, $_); } + foreach my $method (@expected) { + + # Get the stripped version of the prototype. + # + my $prototype = StripArgIdentifiers($method); + + # If the prototype is stored in the %required + # table, and if it was not marked as implemented, + # then it should be. It is a missing method. + # + if (defined $required{$prototype} && $required{$prototype}) { + push(@missing_methods, $method); + } } } ##}}} @@ -775,12 +862,13 @@ xxxTABLE_FOOTxxx ##}}} # List the methods that are expected to be implemented. #{{{ + # print FOUT "\n\n" .'-' x 70 . "\n"; print FOUT "Localized translators are expected to implement " . "the following methods\n" . "(prototypes sorted aplhabetically):\n\n"; - foreach (sort keys(%required)) { + foreach (sort @expected) { print FOUT "$_\n"; } ##}}} @@ -788,10 +876,8 @@ xxxTABLE_FOOTxxx # If there are some details for the translators, show them. #{{{ # if ($output !~ m/^\s*$/) { - print FOUT "\n\n" .'-' x 70 . "\n"; - print FOUT "Details related to specific translator classes follows.\n" - . "Notice that the prototypes are recognized only when they\n" - . "are the same as in the Translator class."; + print FOUT "\n\n" .'=' x 70 . "\n"; + print FOUT "Details related to specific translator classes follow.\n"; print FOUT $output . "\n"; } diff --git a/examples/autolink.cpp b/examples/autolink.cpp index 924256b..e028f22 100644 --- a/examples/autolink.cpp +++ b/examples/autolink.cpp @@ -46,7 +46,7 @@ A link to the enumeration type #EType. - A link to some enumeration values: ::Val1 and ::GVal1. + A link to some enumeration values: \link Test::Val1 Val1 \endlink and ::GVal1. And last but not least a link to a file: autolink.cpp. diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index ec266de..e9f3df2 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ Name: doxygen -Version: 1.2.8 +Version: 1.2.8.1 Summary: documentation system for C, C++ and IDL Release: 3 Source: doxygen-%{version}.src.tar.gz diff --git a/src/config.l b/src/config.l index 061aa93..dd704b0 100644 --- a/src/config.l +++ b/src/config.l @@ -453,6 +453,7 @@ static void readIncludeFile(const char *incName) break; case ConfigOption::O_Bool: s = ((ConfigBool *)option)->valueStringRef(); + s->resize(0); BEGIN(GetString); break; } @@ -1212,28 +1213,31 @@ void Config::create() "documentation generated by doxygen is written. Doxygen will use this \n" "information to generate all constant output in the proper language. \n" "The default language is English, other supported languages are: \n" - "Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n" - "Korean, Hungarian, Norwegian, Spanish, Romanian, Russian, Croatian, \n" - "Polish, Portuguese, Brazilian and Slovene.\n", - "English" + "Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, \n" + "German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, \n" + "Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.\n", + "English" ); ce->addValue("Brazilian"); + ce->addValue("Chinese"); ce->addValue("Croatian"); ce->addValue("Czech"); + ce->addValue("Danish"); ce->addValue("Dutch"); ce->addValue("English"); - ce->addValue("French"); ce->addValue("Finnish"); + ce->addValue("French"); ce->addValue("German"); ce->addValue("Hungarian"); ce->addValue("Italian"); ce->addValue("Japanese"); ce->addValue("Korean"); ce->addValue("Norwegian"); - ce->addValue("Romanian"); - ce->addValue("Russian"); ce->addValue("Polish"); ce->addValue("Portuguese"); + ce->addValue("Romanian"); + ce->addValue("Russian"); + ce->addValue("Slovak"); ce->addValue("Slovene"); ce->addValue("Spanish"); ce->addValue("Swedish"); @@ -1857,7 +1861,7 @@ void Config::create() "If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \n" "will contain hyperlink fields. The RTF file will \n" "contain links (just like the HTML output) instead of page references. \n" - "This makes the output suitable for online browsing using WORD or other. \n" + "This makes the output suitable for online browsing using WORD or other \n" "programs which support those fields. \n" "Note: wordpad (write) and others do not support links. \n", FALSE diff --git a/src/defargs.l b/src/defargs.l index e04d2ec..68eaa91 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -272,7 +272,6 @@ ID [a-z_A-Z][a-z_A-Z0-9]* a->array = removeRedundantWhiteSpace(g_curArgArray); a->defval = g_curArgDefValue.copy(); a->docs = g_curArgDocs.stripWhiteSpace(); - a->docs += "\n"; // for commands that need termination in doc.l (like \verbatim) //printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data()); g_argList->append(a); } diff --git a/src/diagram.cpp b/src/diagram.cpp index aeb78df..e50766e 100644 --- a/src/diagram.cpp +++ b/src/diagram.cpp @@ -1008,7 +1008,7 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path, //printf("writeEPS() rows=%d cols=%d\n",rows,cols); - // generate EPS header and postscipt variables and procedures + // generate EPS header and postscript variables and procedures t << "%!PS-Adobe-2.0 EPSF-2.0\n"; t << "%%Title: ClassName\n"; diff --git a/src/doc.l b/src/doc.l index 7638fdd..af84c07 100644 --- a/src/doc.l +++ b/src/doc.l @@ -817,6 +817,7 @@ static int yyread(char *buf,int max_size) CMD ("\\"|"@") BN [ \t\n\r] BL [ \t\r]*"\n" +BSEP [ \t\r]*([ \t\r]|"\n")({BL}{0,100}) B [ \t] BS ^(({B}*"//")?)(({B}*"*"+)?){B}* FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+] @@ -946,7 +947,11 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) addListItemMarker(yytext+1,dashPos,isEnumerated); } "©" { outDoc->writeCopyright(); } -""" { outDoc->writeQuote(); } +"<" { outDoc->docify("<"); } +">" { outDoc->docify(">"); } +"&" { outDoc->docify("&"); } +"'" { outDoc->docify("'"); } +""" { outDoc->docify("\""); } "&"[AEIOUYaeiouy]"uml;" { outDoc->writeUmlaut(yytext[1]); } "&"[AEIOUYaeiouy]"acute;" { outDoc->writeAcute(yytext[1]); } "&"[AEIOUaeiou]"grave;" { outDoc->writeGrave(yytext[1]); } @@ -1115,7 +1120,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) } BEGIN(DocPar); } -[^\n]*{BN}+ { +[^\n]*{BSEP} { QCString title=QCString(yytext).stripWhiteSpace(); bool b = inBlock(); if (!title.isEmpty()) @@ -1137,7 +1142,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) } BEGIN(DocScan); } -{CMD}"warning"{BN}+ { +{CMD}"warning"{BSEP} { endArgumentList(); if (!inWarningBlock) { @@ -1156,7 +1161,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}"remark"[s]?{BN}+ { +{CMD}"remark"[s]?{BSEP} { endArgumentList(); if (!inRemarkBlock) { @@ -1175,7 +1180,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}"attention"{BN}+ { +{CMD}"attention"{BSEP} { endArgumentList(); if (!inAttentionBlock) { @@ -1194,28 +1199,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } - /* -{CMD}"bug"[s]?{BN}+ { - endArgumentList(); - if (!inBugBlock) - { - if (inBlock()) endBlock(); - inBugBlock=TRUE; - currentListIndent.push("D"); - outDoc->startDescList(); - outDoc->startBold(); - scanString(theTranslator->trBugsAndLimitations()+": "); - outDoc->endBold(); - outDoc->endDescTitle(); - outDoc->writeDescItem(); - } - else - { - outDoc->writeDescItem(); - } - } - */ -{CMD}"note"[s]?{BN}+ { +{CMD}"note"[s]?{BSEP} { endArgumentList(); if (!inNoteBlock) { @@ -1234,7 +1218,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}"pre"{BN}+ { +{CMD}"pre"{BSEP} { endArgumentList(); if (!inPreBlock) { @@ -1253,7 +1237,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}"post"{BN}+ { +{CMD}"post"{BSEP} { endArgumentList(); if (!inPostBlock) { @@ -1272,7 +1256,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}"invariant"{BN}+ { +{CMD}"invariant"{BSEP} { endArgumentList(); if (!inInvarBlock) { @@ -1291,7 +1275,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}"version"{BN}+ { +{CMD}"version"{BSEP} { endArgumentList(); if (!inVersionBlock) { @@ -1310,7 +1294,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}"since"{BN}+ { +{CMD}"since"{BSEP} { endArgumentList(); if (!inSinceBlock) { @@ -1329,7 +1313,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}"date"{BN}+ { +{CMD}"date"{BSEP} { endArgumentList(); if (!inDateBlock) { @@ -1414,7 +1398,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) currentListIndent.pop(); } } -{CMD}"deprecated"{BN}+ { +{CMD}"deprecated"{BSEP} { endArgumentList(); if (!inDeprecatedBlock) { @@ -1452,7 +1436,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->endDescList(); currentListIndent.pop(); } -{CMD}"author"[s]?{BN}+ { +{CMD}"author"[s]?{BSEP} { endArgumentList(); if (!inAuthorBlock) { @@ -1472,7 +1456,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->docify(", "); } } -{CMD}("return"([s])?|"result"){BN}+ { +{CMD}("return"([s])?|"result"){BSEP} { endArgumentList(); if (!inReturnBlock) { @@ -1487,7 +1471,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->writeDescItem(); } } -{CMD}("sa"|"see"){BN}+ { +{CMD}("sa"|"see"){BSEP} { endArgumentList(); if (!inSeeBlock) { @@ -1506,7 +1490,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) outDoc->docify(", "); } } -(({B}*"\n"){2,}{B}*)?{CMD}"param"{BN}+ { +(({B}*"\n"){2,}{B}*)?{CMD}"param"{BSEP} { QCString t=yytext; if (t.contains('\n')>1 && insideItemList) { @@ -1532,7 +1516,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) } BEGIN(DocParam); } -(({B}*"\n"){2,}{B}*)?{CMD}"retval"{BN}+ { +(({B}*"\n"){2,}{B}*)?{CMD}"retval"{BSEP} { QCString t=yytext; if (t.contains('\n')>1 && insideItemList) { @@ -1558,7 +1542,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) } BEGIN(DocParam); } -(({B}*"\n"){2,}{B}*)?{CMD}("exception"|"throw")s?{BN}+ { +(({B}*"\n"){2,}{B}*)?{CMD}("exception"|"throw")s?{BSEP} { QCString t=yytext; if (t.contains('\n')>1 && insideItemList) { @@ -1585,7 +1569,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) BEGIN(DocException); } "\\capt".* -({DOCPARAM}{BN}*","{BN}*)*{DOCPARAM}{BN}* { +({DOCPARAM}{BN}*","{BN}*)*{DOCPARAM}{BSEP}* { outDoc->startDescTableTitle(); outDoc->startEmphasis(); outDoc->docify(substitute(yytext,"\"","").stripWhiteSpace()); diff --git a/src/dot.cpp b/src/dot.cpp index 69dc041..d5b6b96 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -685,7 +685,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) err("Error: Output dir %s does not exist!\n",path); exit(1); } QCString oldDir = convertToQCString(QDir::currentDirPath()); - // goto the html output directory (i.e. path) + // go to the html output directory (i.e. path) QDir::setCurrent(d.absPath()); QDir thisDir; @@ -1263,7 +1263,7 @@ void DotClassGraph::writeGraph(QTextStream &out, err("Error: Output dir %s does not exist!\n",path); exit(1); } QCString oldDir = convertToQCString(QDir::currentDirPath()); - // goto the html output directory (i.e. path) + // go to the html output directory (i.e. path) QDir::setCurrent(d.absPath()); QDir thisDir; @@ -1474,7 +1474,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out, err("Error: Output dir %s does not exist!\n",path); exit(1); } QCString oldDir = convertToQCString(QDir::currentDirPath()); - // goto the html output directory (i.e. path) + // go to the html output directory (i.e. path) QDir::setCurrent(d.absPath()); QDir thisDir; @@ -1615,7 +1615,7 @@ void generateGraphLegend(const char *path) err("Error: Output dir %s does not exist!\n",path); exit(1); } QCString oldDir = convertToQCString(QDir::currentDirPath()); - // goto the html output directory (i.e. path) + // go to the html output directory (i.e. path) QDir::setCurrent(d.absPath()); // run dot to generate the a .gif image from the graph diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 1ae907e..070a088 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1204,6 +1204,7 @@ static void findUsingDeclarations(Entry *root) } else if (fd) { + //printf("Inside file %s\n",nd->name().data()); fd->addUsingDeclaration(usingCd); } } @@ -3231,6 +3232,35 @@ static void substituteTemplateArgNames(ArgumentList *src, } +static QCString mergeScopes(const QCString &leftScope,const QCString &rightScope) +{ + // case leftScope=="A" rightScope=="A::B" => result = "A::B" + if (leftScopeMatch(rightScope,leftScope)) return rightScope; + QCString result; + int i=0,p=leftScope.length(); + + // case leftScope=="A::B" rightScope=="B::C" => result = "A::B::C" + // case leftScope=="A::B" rightScope=="B" => result = "A::B" + bool found=FALSE; + while ((i=leftScope.findRev("::",p))!=-1) + { + if (leftScopeMatch(rightScope,leftScope.right(leftScope.length()-i-2))) + { + result = leftScope.left(i+2)+rightScope; + found=TRUE; + } + p=i-1; + } + if (found) return result; + + // case leftScope=="A" rightScope=="B" => result = "A::B" + result=leftScope.copy(); + if (!result.isEmpty() && !rightScope.isEmpty()) result+="::"; + result+=rightScope; + return result; +} + + /*! This function tries to find a member (in a documented class/file/namespace) * that corresponds to the function/variable declaration given in \a funcDecl. * @@ -3366,11 +3396,17 @@ static void findMember(Entry *root, scopeName=related.copy(); } + if (related.isEmpty() && root->parent && !root->parent->name.isEmpty()) + { + scopeName = mergeScopes(root->parent->name,scopeName); + } + // split scope into a namespace and a class part extractNamespaceName(scopeName,className,namespaceName); //printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n", // scopeName.data(),className.data(),namespaceName.data()); +#if 0 if (related.isEmpty() && root->parent && !root->parent->name.isEmpty() @@ -3423,6 +3459,7 @@ static void findMember(Entry *root, //printf("3. scopeName=`%s'\n",scopeName.data()); //printf("result: scope=%s\n",scopeName.data()); } +#endif namespaceName=removeAnonymousScopes(namespaceName); //printf("namespaceName=`%s' className=`%s'\n",namespaceName.data(),className.data()); @@ -3691,13 +3728,18 @@ static void findMember(Entry *root, bool ambig; FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig); // list of namespaces using in the file that this member definition is part of - NamespaceList *nl = fd ? fd->getUsedNamespaces() : 0; - ClassList *cl = fd ? fd->getUsedClasses() : 0; + NamespaceList *nl = 0; + if (nd) nl = nd->getUsedNamespaces(); + else if (fd) nl = fd->getUsedNamespaces(); + ClassList *cl = 0; + if (nd) cl = nd->getUsedClasses(); + else if (fd) cl = fd->getUsedClasses(); bool matching= md->isVariable() || md->isTypedef() || // needed for function pointers (md->argumentList()==0 && root->argList->count()==0) || - matchArguments(argList, root->argList,className,namespaceName,TRUE,nl,cl); + matchArguments(argList, root->argList,className,namespaceName, + TRUE,nl,cl); Debug::print(Debug::FindMembers,0, diff --git a/src/formula.cpp b/src/formula.cpp index 1c1bfc7..f7c77b8 100644 --- a/src/formula.cpp +++ b/src/formula.cpp @@ -56,7 +56,7 @@ void FormulaList::generateBitmaps(const char *path) // store the original directory if (!d.exists()) { err("Error: Output dir %s does not exist!\n",path); exit(1); } QCString oldDir = convertToQCString(QDir::currentDirPath()); - // goto the html output directory (i.e. path) + // go to the html output directory (i.e. path) QDir::setCurrent(d.absPath()); QDir thisDir; // generate a latex file containing one formula per page. diff --git a/src/index.cpp b/src/index.cpp index 5fc1431..9ce2f94 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -145,13 +145,9 @@ QCString abbreviate(const char *s,const char *name) void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE) { ol.pushGeneratorState(); - //bool manEnabled = ol.isEnabled(OutputGenerator::Man); - //bool texEnabled = ol.isEnabled(OutputGenerator::Latex); ol.disableAllBut(OutputGenerator::Html); QCString extLink; if (ext) { extLink="_doc"; } - //if (manEnabled) ol.disable(OutputGenerator::Man); - //if (texEnabled) ol.disable(OutputGenerator::Latex); if (compact) ol.startCenter(); else ol.startItemList(); if (!compact) ol.writeListItem(); @@ -280,23 +276,19 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE) { ol.endItemList(); } - //if (manEnabled) ol.enable(OutputGenerator::Man); - //if (texEnabled) ol.enable(OutputGenerator::Latex); ol.popGeneratorState(); } -static bool manIsEnabled; - void startTitle(OutputList &ol,const char *fileName) { ol.startTitleHead(fileName); - manIsEnabled=ol.isEnabled(OutputGenerator::Man); - if (manIsEnabled) ol.disable(OutputGenerator::Man); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Man); } void endTitle(OutputList &ol,const char *fileName,const char *name) { - if (manIsEnabled) ol.enable(OutputGenerator::Man); + ol.popGeneratorState(); ol.endTitleHead(fileName,name); } @@ -675,7 +667,6 @@ void writeHierarchicalIndex(OutputList &ol) ol.endTextBlock(); writeClassHierarchy(ol); endFile(ol); - //ol.enable(OutputGenerator::Man); ol.popGeneratorState(); } @@ -959,7 +950,6 @@ void writeFileIndex(OutputList &ol) ftvHelp->decContentsDepth(); } endFile(ol); - //ol.enable(OutputGenerator::Man); ol.popGeneratorState(); } @@ -1059,7 +1049,6 @@ void writeNamespaceIndex(OutputList &ol) ftvHelp->decContentsDepth(); } endFile(ol); - //ol.enable(OutputGenerator::Man); ol.popGeneratorState(); } @@ -1984,7 +1973,6 @@ void writeExampleIndex(OutputList &ol) ftvHelp->decContentsDepth(); } endFile(ol); - //ol.enable(OutputGenerator::Man); ol.popGeneratorState(); } @@ -2102,7 +2090,6 @@ void writePageIndex(OutputList &ol) ftvHelp->decContentsDepth(); } endFile(ol); - //ol.enable(OutputGenerator::Man); ol.popGeneratorState(); } @@ -2797,13 +2784,6 @@ void writeIndex(OutputList &ol) ol.enable(OutputGenerator::Man); } - // restore generator state - //if (manEnabled) ol.enable(OutputGenerator::Man); - // else ol.disable(OutputGenerator::Man); - //if (texEnabled) ol.enable(OutputGenerator::Latex); - // else ol.disable(OutputGenerator::Latex); - //if (htmEnabled) ol.enable(OutputGenerator::Html); - // else ol.disable(OutputGenerator::Html); ol.popGeneratorState(); } diff --git a/src/mangen.cpp b/src/mangen.cpp index ad3e63a..d4bd0aa 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -97,45 +97,38 @@ void ManGenerator::init() static QCString buildFileName(const char *name) { - QCString fileName=name; + QCString fileName; -#if 0 - // TODO: do something sensible here. - if (fileName.left(6)=="class_") + const char *p=name; + char c; + while ((c=*p++)) { - fileName=fileName.right(fileName.length()-6); - } - else if (fileName.left(10)=="interface_") - { - fileName=fileName.right(fileName.length()-10); - } - else if (fileName.left(7)=="struct_") - { - fileName=fileName.right(fileName.length()-7); - } - else if (fileName.left(6)=="union_") - { - fileName=fileName.right(fileName.length()-6); - } - else if (fileName.left(10)=="exception_") - { - fileName=fileName.right(fileName.length()-10); - } - else if (fileName.left(6)=="group_") - { - fileName=fileName.right(fileName.length()-6); - } - - int i; - if ((i=fileName.findRev('.'))!=-1) - { - fileName=fileName.left(i); + switch (c) + { + case ':': + fileName+="_"; + if (*p==':') p++; + break; + case '<': + case '>': + case '&': + case '*': + case '!': + case '^': + case '~': + case '%': + case '+': + fileName+="_"; + break; + default: + fileName+=c; + } } -#endif - if (convertToQCString(fileName.right(2))!=Config_getString("MAN_EXTENSION")) + QCString &manExtension = Config_getString("MAN_EXTENSION"); + if (convertToQCString(fileName.right(2))!=manExtension) { - fileName+=Config_getString("MAN_EXTENSION"); + fileName+=manExtension; } return fileName; diff --git a/src/memberdef.cpp b/src/memberdef.cpp index cff02af..519e65c 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -504,7 +504,7 @@ bool MemberDef::isBriefSectionVisible() const hasDocumentation() ); - // hide members with no detailed desciption and brief descriptions + // hide members with no detailed description and brief descriptions // explicitly disabled. bool visibleIfEnabled = !(Config_getBool("HIDE_UNDOC_MEMBERS") && documentation().isEmpty() && @@ -592,7 +592,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ol.startMemberItem((annoClassDef || annMemb || annEnumType) ? 1 : 0); // If there is no detailed description we need to write the anchor here. - bool detailsVisible = isDetailedSectionVisible(); + bool detailsVisible = isDetailedSectionLinkable(); if (!detailsVisible && !annMemb) { QCString doxyName=name().copy(); @@ -779,7 +779,9 @@ void MemberDef::writeDeclaration(OutputList &ol, //ol.endMemberItem(gId!=-1,gFile,gHeader,annoClassDef || annMemb); // write brief description - if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC") && !annMemb) + if (!briefDescription().isEmpty() && + Config_getBool("BRIEF_MEMBER_DESC") && + !annMemb) { ol.startMemberDescription(); parseDoc(ol,m_defFileName,m_defLine,cname,name(),briefDescription()); @@ -808,7 +810,7 @@ void MemberDef::writeDeclaration(OutputList &ol, warnIfUndocumented(); } -bool MemberDef::isDetailedSectionVisible(bool inGroup) const +bool MemberDef::isDetailedSectionLinkable() const { // the member has details documentation for any of the following reasons bool docFilter = @@ -835,16 +837,19 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup) const // this is not a global static or global statics should be extracted bool staticFilter = getClassDef()!=0 || !isStatic() || Config_getBool("EXTRACT_STATIC"); - // details are not part of a group or this is for a group documentation page - // TODO: FIX THIS!!! This should made such that it is always TRUE. - bool groupFilter = getGroupDef()==0 || inGroup; - // member is part of an anonymous scope that is the type of // another member in the list. // bool inAnonymousScope = !briefDescription().isEmpty() && annUsed; - return ((docFilter && staticFilter) || inAnonymousScope) && groupFilter; + return ((docFilter && staticFilter) || inAnonymousScope); +} + +bool MemberDef::isDetailedSectionVisible(bool inGroup) const +{ + bool groupFilter = getGroupDef()==0 || inGroup; + + return isDetailedSectionLinkable() && groupFilter; } /*! Writes the "detailed documentation" section of this member to @@ -1147,7 +1152,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ol.endEmphasis(); ol.endDescTableTitle(); ol.startDescTableData(); - parseDoc(ol,m_defFileName,m_defLine,scopeName,name(),a->docs); + parseDoc(ol,m_defFileName,m_defLine,scopeName,name(),a->docs+"\n"); ol.endDescTableData(); } } @@ -1477,3 +1482,17 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString groupStartLine=startLine; groupHasDocs=hasDocs; } + +void MemberDef::setEnumScope(MemberDef *md) +{ + enumScope=md; + if (md->group) + { + group=md->group; + grouppri=md->grouppri; + groupFileName=md->groupFileName; + groupStartLine=md->groupStartLine; + groupHasDocs=md->groupHasDocs; + } +} + diff --git a/src/memberdef.h b/src/memberdef.h index bf8b446..45713a0 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -126,6 +126,7 @@ class MemberDef : public Definition bool hasDocumentation() const; // overrides hasDocumentation in definition.h bool isBriefSectionVisible() const; bool isDetailedSectionVisible(bool inGroup=FALSE) const; + bool isDetailedSectionLinkable() const; // set functions void setMemberType(MemberType t) { mtype=t; } @@ -167,7 +168,7 @@ class MemberDef : public Definition // enumeration specific members void insertEnumField(MemberDef *md); - void setEnumScope(MemberDef *md) { enumScope=md; } + void setEnumScope(MemberDef *md); MemberDef *getEnumScope() const { return enumScope; } void setEnumDecl(OutputList &ed); //void setEnumUsed() { eUsed=TRUE; } diff --git a/src/memberlist.cpp b/src/memberlist.cpp index bc8ee03..715effd 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -320,12 +320,20 @@ void MemberList::writePlainDeclarations(OutputList &ol, cd?cd->name().data():0,md->name().data(), md->briefDescription() ); - if (!md->documentation().isEmpty() || md->hasDocumentedEnumValues()) + if (md->isDetailedSectionLinkable()) { ol.disableAllBut(OutputGenerator::Html); ol.endEmphasis(); ol.docify(" "); - ol.startTextLink(0,md->anchor()); + if (md->getGroupDef()!=0 && gd==0) // forward link to group + { + ol.startTextLink(md->getGroupDef()->getOutputFileBase(), + md->anchor()); + } + else + { + ol.startTextLink(0,md->anchor()); + } parseText(ol,theTranslator->trMore()); ol.endTextLink(); ol.startEmphasis(); diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 9e2213e..441c1f3 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -2588,7 +2588,7 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name) } QCString oldDir = convertToQCString(QDir::currentDirPath()); - // goto the html output directory (i.e. path) + // go to the html output directory (i.e. path) QDir::setCurrent(d.absPath()); QDir thisDir; diff --git a/src/scanner.l b/src/scanner.l index cb158bb..087c258 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -3388,6 +3388,10 @@ TITLE [tT][iI][tT][lL][eE] yyLineNr++; BEGIN( lastGroupContext ); } +"*/" { + unput('/');unput('*'); + BEGIN( lastGroupContext ); + } {B}*{CMD}("brief"|"short") { lastBriefContext=YY_START; BEGIN( ClassDocBrief ); @@ -3628,7 +3632,7 @@ TITLE [tT][iI][tT][lL][eE] unput(afterDocTerminator); BEGIN(lastAfterDocContext); } -"*/" { +"*/" { // defer "*/" to a later time unput('/'); unput('*'); diff --git a/src/translator.h b/src/translator.h index a77bd28..1119118 100644 --- a/src/translator.h +++ b/src/translator.h @@ -567,7 +567,7 @@ class Translator virtual QCString trStaticPrivateMembers() = 0; /*! this function is used to produce a comma-separated list of items. - * use generateMarker(i) to indicate where item i should be put. + * Use generateMarker(i) to indicate where item i should be put. */ virtual QCString trWriteList(int numEntries) = 0; diff --git a/src/translator_adapter.h b/src/translator_adapter.h index 4ef420a..a38307e 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -45,12 +45,24 @@ class TranslatorAdapterCVS : public Translator // The first five lines below should be uncommented, and the // release number at the fifth of those lines should be set. -// class TranslatorAdapter_1_2_7 : public TranslatorAdapterCVS +// class TranslatorAdapter_1_2_8 : public TranslatorAdapterCVS // { // public: // virtual QCString updateNeededMessage() // { return createUpdateNeededMessage(idLanguage(),"release 1.2.7"); } + // Put new adapter methods below... + // + +}; + + +class TranslatorAdapter_1_2_7 : public TranslatorAdapterCVS +{ + public: + virtual QCString updateNeededMessage() + { return createUpdateNeededMessage(idLanguage(),"release 1.2.7"); } + /*! These are the default implementations of the obsolete methods * for introducing author/authors (possibly localized). */ @@ -72,12 +84,13 @@ class TranslatorAdapterCVS : public Translator } }; + /*! \brief Translator adapter class for release 1.2.6 * * Translator adapter for dealing with translator changes since * release 1.2.6 */ -class TranslatorAdapter_1_2_6 : public TranslatorAdapterCVS +class TranslatorAdapter_1_2_6 : public TranslatorAdapter_1_2_7 { public: virtual QCString updateNeededMessage() diff --git a/src/translator_br.h b/src/translator_br.h index 2bb1855..3d1e30f 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -18,9 +18,7 @@ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -#include "translator_adapter.h" - -class TranslatorBrazilian: public TranslatorAdapter_1_2_6 +class TranslatorBrazilian: public Translator { public: @@ -1170,5 +1168,160 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6 return "Lista de Bug"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.6 +////////////////////////////////////////////////////////////////////////// + + /*! Used as ansicpg for RTF file + * + * The following table shows the correlation of Charset name, Charset Value +and + *

        +     * Codepage number:
        +     * Charset Name       Charset Value(hex)  Codepage number
        +     * ------------------------------------------------------
        +     * DEFAULT_CHARSET           1 (x01)
        +     * SYMBOL_CHARSET            2 (x02)
        +     * OEM_CHARSET             255 (xFF)
        +     * ANSI_CHARSET              0 (x00)            1252
        +     * RUSSIAN_CHARSET         204 (xCC)            1251
        +     * EE_CHARSET              238 (xEE)            1250
        +     * GREEK_CHARSET           161 (xA1)            1253
        +     * TURKISH_CHARSET         162 (xA2)            1254
        +     * BALTIC_CHARSET          186 (xBA)            1257
        +     * HEBREW_CHARSET          177 (xB1)            1255
        +     * ARABIC _CHARSET         178 (xB2)            1256
        +     * SHIFTJIS_CHARSET        128 (x80)             932
        +     * HANGEUL_CHARSET         129 (x81)             949
        +     * GB2313_CHARSET          134 (x86)             936
        +     * CHINESEBIG5_CHARSET     136 (x88)             950
        +     * 
        + * + */ + virtual QCString trRTFansicp() + { + return "1252"; + } + + + /*! Used as ansicpg for RTF fcharset + * \see trRTFansicp() for a table of possible values. + */ + virtual QCString trRTFCharSet() + { + return "0"; + } + + /*! Used as header RTF general index */ + virtual QCString trRTFGeneralIndex() + { + return "Índice"; + } + + /*! 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 trClass(bool first_capital, bool singular) + { + QCString result((first_capital ? "Classe" : "classe")); + 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 trFile(bool first_capital, bool singular) + { + QCString result((first_capital ? "Arquivo": "arquivo")); + 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 trNamespace(bool first_capital, bool singular) + { + QCString result((first_capital ? "Namespace" : "namespace")); + 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 trGroup(bool first_capital, bool singular) + { + QCString result((first_capital ? "Grupo" : "grupo")); + 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 trPage(bool first_capital, bool singular) + { + QCString result((first_capital ? "Página" : "página")); + 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 trMember(bool first_capital, bool singular) + { + QCString result((first_capital ? "Membro" : "membro")); + 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 trField(bool first_capital, bool singular) + { + QCString result((first_capital ? "Campo" : "campo")); + 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 trGlobal(bool first_capital, bool singular) + { + QCString result((first_capital ? "Globa" : "globa")); + if (!singular){ + result+="is"; + }else{ + result+="l"; + } + return result; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.7 +////////////////////////////////////////////////////////////////////////// + + /*! This text is generated when the \\author command is used and + * for the author section in man pages. */ + virtual QCString trAuthor(bool first_capital, bool singular) + { + QCString result((first_capital ? "Autor" : "autor")); + if (!singular) result+="es"; + return result; + } + }; #endif diff --git a/src/translator_cz.h b/src/translator_cz.h index 551b6e8..7fc8f1a 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -769,7 +769,7 @@ class TranslatorCzech : public Translator return decode(result); } - /*! + /* * these are for the member sections of a class, struct or union */ virtual QCString trPublicMembers() @@ -1006,17 +1006,17 @@ class TranslatorCzech : public Translator { return decode("Zobrazit dokumentaci tohoto souboru."); } - /*! Text for the \pre command */ + /*! Text for the \\pre command */ virtual QCString trPrecondition() { return decode("Precondition"); } - /*! Text for the \post command */ + /*! Text for the \\post command */ virtual QCString trPostcondition() { return decode("Postcondition"); } - /*! Text for the \invariant command */ + /*! Text for the \\invariant command */ virtual QCString trInvariant() { return decode("Invariant"); diff --git a/src/translator_de.h b/src/translator_de.h index b3d26dd..65a5fe6 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -51,7 +51,7 @@ // // Todo: // - translation of all Config_getBool("OPTIMIZE_OUTPUT_FOR_C") -// strings (see translator.h) +// strings (see translator_en.h) // - translation of "compound" // - see FIXME // - was ist richtig: "Liste aller dokumentierter Elemente" oder @@ -1287,9 +1287,9 @@ class TranslatorGerman : public Translator return result; } - ////////////////////////////////////////////////////////////////////////// - // new since 1.2.7-20010524 - ////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +// new since 1.2.7-20010524 +////////////////////////////////////////////////////////////////////////// /* This text is generated when the \author command is used and * for the author section in man pages. diff --git a/src/translator_dk.h b/src/translator_dk.h index b5a14d2..9eda890 100644 --- a/src/translator_dk.h +++ b/src/translator_dk.h @@ -37,7 +37,7 @@ #ifndef TRANSLATOR_DK_H #define TRANSLATOR_DK_H -class TranslatorDanish : public TranslatorAdapterCVS +class TranslatorDanish : public TranslatorAdapter_1_2_7 { public: diff --git a/src/translator_es.h b/src/translator_es.h index 7ba37f4..88f4fb7 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -25,7 +25,7 @@ #ifndef TRANSLATOR_ES_H #define TRANSLATOR_ES_H -class TranslatorSpanish : public TranslatorAdapterCVS +class TranslatorSpanish : public TranslatorAdapter_1_2_7 { public: virtual QCString idLanguage() @@ -554,9 +554,7 @@ class TranslatorSpanish : public TranslatorAdapterCVS return result; } - /*! \mgroup Class sections - * these are for the member sections of a class, struct or union - */ + /* these are for the member sections of a class, struct or union */ virtual QCString trPublicMembers() { return "Métodos públicos"; } virtual QCString trPublicSlots() @@ -577,7 +575,6 @@ class TranslatorSpanish : public TranslatorAdapterCVS { return "Slots privados"; } virtual QCString trStaticPrivateMembers() { return "Métodos privados estáticos"; } - /*! \endmgroup */ /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -779,17 +776,17 @@ class TranslatorSpanish : public TranslatorAdapterCVS { return "Ir a la documentación de este archivo."; } - /*! Text for the \pre command */ + /*! Text for the \\pre command */ virtual QCString trPrecondition() { return "Precondición"; } - /*! Text for the \post command */ + /*! Text for the \\post command */ virtual QCString trPostcondition() { return "Postcondición"; } - /*! Text for the \invariant command */ + /*! Text for the \\invariant command */ virtual QCString trInvariant() { return "Invariante"; diff --git a/src/translator_it.h b/src/translator_it.h index 33e9eac..169998f 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -57,7 +57,7 @@ #ifndef TRANSLATOR_IT_H #define TRANSLATOR_IT_H -class TranslatorItalian : public TranslatorAdapterCVS +class TranslatorItalian : public TranslatorAdapter_1_2_7 { public: diff --git a/src/translator_nl.h b/src/translator_nl.h index c5f9372..7f014ea 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -18,15 +18,35 @@ #ifndef TRANSLATOR_NL_H #define TRANSLATOR_NL_H -#include "translator_adapter.h" - -class TranslatorDutch : public TranslatorAdapter_1_2_6 +class TranslatorDutch : public Translator { public: QCString idLanguage() { return "dutch"; } - QCString latexBabelPackage() - { return "dutch"; } + /*! Used to get the LaTeX command(s) for the language support. + * This method should return string with commands that switch + * LaTeX to the desired language. For example + *
        "\\usepackage[german]{babel}\n"
        +     *  
        + * or + *
        "\\usepackage{polski}\n"
        +     *  "\\usepackage[latin2]{inputenc}\n"
        +     *  "\\usepackage[T1]{fontenc}\n"
        +     *  
        + * + * The Dutch LaTeX does not use such commands. Because of this + * the empty string is returned in this implementation. + */ + QCString latexLanguageSupportCommand() + { + return "\\usepackage[dutch]{babel}\n"; + } + /*! return the language charset. This will be used for the HTML output */ + QCString idLanguageCharset() + { + return "iso-8859-1"; + } + QCString trRelatedFunctions() { return "Gerelateerde functies"; } QCString trRelatedSubscript() @@ -63,8 +83,6 @@ class TranslatorDutch : public TranslatorAdapter_1_2_6 { return "enum waarde"; } QCString trDefinedIn() { return "gedefinieerd in"; } - QCString trVerbatimText(const char *f) - { return (QCString)"Dit is de letterlijke tekst van de include file "+f+"."; } QCString trModules() { return "Modules"; } QCString trClassHierarchy() @@ -166,8 +184,6 @@ class TranslatorDutch : public TranslatorAdapter_1_2_6 { return "Variabelen"; } QCString trEnumerationValues() { return "Enumeratie waarden"; } - QCString trAuthor() - { return "auteur"; } QCString trDefineDocumentation() { return "Documentatie van defines"; } QCString trFunctionPrototypeDocumentation() @@ -184,8 +200,6 @@ class TranslatorDutch : public TranslatorAdapter_1_2_6 { return "Documentatie van variabelen"; } QCString trCompounds() { return "Compounds"; } - QCString trFiles() - { return "Files"; } QCString trGeneratedAt(const char *date,const char *projName) { QCString result=(QCString)"Gegenereerd op "+date; @@ -215,8 +229,6 @@ class TranslatorDutch : public TranslatorAdapter_1_2_6 { return "Versie"; } QCString trDate() { return "Datum"; } - QCString trAuthors() - { return "Auteur(s)"; } QCString trReturns() { return "Retourneert"; } QCString trSeeAlso() @@ -802,6 +814,156 @@ class TranslatorDutch : public TranslatorAdapter_1_2_6 return "Bug Lijst"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.6 +////////////////////////////////////////////////////////////////////////// + + /*! Used as ansicpg for RTF file + * + * The following table shows the correlation of Charset name, Charset Value and + *
        +     * Codepage number:
        +     * Charset Name       Charset Value(hex)  Codepage number
        +     * ------------------------------------------------------
        +     * DEFAULT_CHARSET           1 (x01)
        +     * SYMBOL_CHARSET            2 (x02)
        +     * OEM_CHARSET             255 (xFF)
        +     * ANSI_CHARSET              0 (x00)            1252
        +     * RUSSIAN_CHARSET         204 (xCC)            1251
        +     * EE_CHARSET              238 (xEE)            1250
        +     * GREEK_CHARSET           161 (xA1)            1253
        +     * TURKISH_CHARSET         162 (xA2)            1254
        +     * BALTIC_CHARSET          186 (xBA)            1257
        +     * HEBREW_CHARSET          177 (xB1)            1255
        +     * ARABIC _CHARSET         178 (xB2)            1256
        +     * SHIFTJIS_CHARSET        128 (x80)             932
        +     * HANGEUL_CHARSET         129 (x81)             949
        +     * GB2313_CHARSET          134 (x86)             936
        +     * CHINESEBIG5_CHARSET     136 (x88)             950
        +     * 
        + * + */ + virtual QCString trRTFansicp() + { + return "1252"; + } + + + /*! Used as ansicpg for RTF fcharset + * \see trRTFansicp() for a table of possible values. + */ + virtual QCString trRTFCharSet() + { + return "0"; + } + + /*! Used as header RTF general index */ + virtual QCString trRTFGeneralIndex() + { + return "Index"; + } + + /*! 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 trClass(bool first_capital, bool singular) + { + QCString result((first_capital ? "Klasse" : "klass")); + if (!singular) result+="n"; + 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 trFile(bool first_capital, bool singular) + { + QCString result((first_capital ? "File" : "file")); + 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 trNamespace(bool first_capital, bool singular) + { + QCString result((first_capital ? "Namespace" : "namespace")); + 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 trGroup(bool first_capital, bool singular) + { + QCString result((first_capital ? "Groep" : "groep")); + if (!singular) result+="en"; + 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 trPage(bool first_capital, bool singular) + { + QCString result((first_capital ? "Pagina" : "pagina")); + 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 trMember(bool first_capital, bool singular) + { + QCString result((first_capital ? "Member" : "member")); + 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 trField(bool first_capital, bool singular) + { + QCString result((first_capital ? "Veld" : "veld")); + if (!singular) result+="en"; + 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 trGlobal(bool first_capital, bool singular) + { + QCString result((first_capital ? "Globale member" : "globale member")); + if (!singular) result+="s"; + return result; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.7 +////////////////////////////////////////////////////////////////////////// + + /*! This text is generated when the \\author command is used and + * for the author section in man pages. */ + virtual QCString trAuthor(bool first_capital, bool singular) + { + QCString result((first_capital ? "Auteur" : "auteur")); + if (!singular) result+="s"; + return result; + } + }; #endif diff --git a/src/translator_sk.h b/src/translator_sk.h index 2f1b2b1..4cb840f 100644 --- a/src/translator_sk.h +++ b/src/translator_sk.h @@ -18,7 +18,7 @@ #ifndef TRANSLATOR_SK_H #define TRANSLATOR_SK_H -class TranslatorSlovak : public TranslatorAdapterCVS +class TranslatorSlovak : public TranslatorAdapter_1_2_7 { private: /*! The Decode() inline assumes the source written in the @@ -659,9 +659,7 @@ class TranslatorSlovak : public TranslatorAdapterCVS return Decode(result); } - /*! \mgroup Class sections - * these are for the member sections of a class, struct or union - */ + /* these are for the member sections of a class, struct or union */ virtual QCString trPublicMembers() { return Decode("Verejné metódy"); } virtual QCString trPublicSlots() @@ -682,7 +680,6 @@ class TranslatorSlovak : public TranslatorAdapterCVS { return Decode("Privátne sloty"); } virtual QCString trStaticPrivateMembers() { return Decode("Statické privátne metódy"); } - /*! \endmgroup */ /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -899,17 +896,17 @@ class TranslatorSlovak : public TranslatorAdapterCVS { return Decode("Zobrazi dokumentáciu tohoto súboru."); } - /*! Text for the \pre command */ + /*! Text for the \\pre command */ virtual QCString trPrecondition() { return Decode("Prepodmienka"); } - /*! Text for the \post command */ + /*! Text for the \\post command */ virtual QCString trPostcondition() { return Decode("Postpodmienka"); } - /*! Text for the \invariant command */ + /*! Text for the \\invariant command */ virtual QCString trInvariant() { return Decode("Invariant"); diff --git a/src/util.cpp b/src/util.cpp index cf8ab4c..c4b2606 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1830,7 +1830,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, return TRUE; /* found match */ } } - /* goto the parent scope */ + /* go to the parent scope */ if (scopeOffset==0) { @@ -2650,18 +2650,16 @@ QCString convertNameToFile(const char *name,bool allowDots) void extractNamespaceName(const QCString &scopeName, QCString &className,QCString &namespaceName) { - QCString clName=scopeName.copy(); - //QCString nsName; + int i,p; + QCString clName=scopeName; NamespaceDef *nd = 0; if (!clName.isEmpty() && (nd=getResolvedNamespace(clName)) && getClass(clName)==0) { // the whole name is a namespace (and not a class) namespaceName=nd->name().copy(); className.resize(0); - //printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(), - // className.data(),namespaceName.data()); - return; + goto done; } - int i,p=clName.length()-2; + p=clName.length()-2; while (p>=0 && (i=clName.findRev("::",p))!=-1) // see if the first part is a namespace (and not a class) { @@ -2669,14 +2667,16 @@ void extractNamespaceName(const QCString &scopeName, { namespaceName=nd->name().copy(); className=clName.right(clName.length()-i-2); - //printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(), - // className.data(),namespaceName.data()); - return; + goto done; } p=i-2; // try a smaller piece of the scope } + + // not found, so we just have to guess. className=scopeName.copy(); namespaceName.resize(0); + +done: //printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(), // className.data(),namespaceName.data()); return; -- cgit v0.12