Commit 9c04d0ff authored by dimitri's avatar dimitri

Release-1.2.7-20010524

parent 9ca6896b
DOXYGEN Version 1.2.7-20010517 DOXYGEN Version 1.2.7-20010524
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (17 May 2001) Dimitri van Heesch (24 May 2001)
DOXYGEN Version 1.2.7_20010517 DOXYGEN Version 1.2.7_20010524
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (17 May 2001) Dimitri van Heesch (24 May 2001)
1.2.7-20010517 1.2.7-20010524
...@@ -493,10 +493,10 @@ void generateXML() ...@@ -493,10 +493,10 @@ void generateXML()
t << "<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?>" << endl; t << "<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?>" << endl;
t << "<!DOCTYPE doxygen SYSTEM \"doxygen.dtd\">" << endl; t << "<!DOCTYPE doxygen SYSTEM \"doxygen.dtd\">" << endl;
t << "<doxygen>" << endl; t << "<doxygen>" << endl;
if (Doxygen::classList.count()+Doxygen::inputNameList.count()>0) if (Doxygen::classSDict.count()+Doxygen::inputNameList.count()>0)
{ {
t << " <compoundlist>" << endl; t << " <compoundlist>" << endl;
ClassListIterator cli(Doxygen::classList); ClassSDict::Iterator cli(Doxygen::classSDict);
ClassDef *cd; ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli) for (cli.toFirst();(cd=cli.current());++cli)
{ {
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
# Documents produced by Doxygen are derivative works derived from the # Documents produced by Doxygen are derivative works derived from the
# input used in their production; they are not affected by this license. # input used in their production; they are not affected by this license.
all: language.doc FORCE all: FORCE
DOXYGEN_DOCDIR=$(DOXYDOCS); \ DOXYGEN_DOCDIR=$(DOXYDOCS); \
export DOXYGEN_DOCDIR; \ export DOXYGEN_DOCDIR; \
VERSION=$(VERSION) ; \ VERSION=$(VERSION) ; \
...@@ -28,6 +28,8 @@ all: language.doc FORCE ...@@ -28,6 +28,8 @@ all: language.doc FORCE
clean: clean:
rm -rf ../html ../latex language.doc rm -rf ../html ../latex language.doc
language: language.doc language.tpl translator.pl
language.doc: language.tpl FORCE language.doc: language.tpl FORCE
$(PERL) translator.pl $(PERL) translator.pl
......
...@@ -26,5 +26,11 @@ all: FORCE ...@@ -26,5 +26,11 @@ all: FORCE
clean: clean:
del /s /q ..\html ..\latex del /s /q ..\html ..\latex
del translator_report.txt *.bak
language: language.doc language.tpl translator.pl
language.doc: language.tpl FORCE
$(PERL) translator.pl
FORCE: FORCE:
...@@ -127,6 +127,7 @@ documentation: ...@@ -127,6 +127,7 @@ documentation:
<li> \refitem cmdverbinclude \verbinclude <li> \refitem cmdverbinclude \verbinclude
<li> \refitem cmdversion \version <li> \refitem cmdversion \version
<li> \refitem cmdwarning \warning <li> \refitem cmdwarning \warning
<li> \refitem cmdweakgroup \weakgroup
<li> \refitem cmddollar \$ <li> \refitem cmddollar \$
<li> \refitem cmdat \@ <li> \refitem cmdat \@
<li> \refitem cmdbackslash \\ <li> \refitem cmdbackslash \\
...@@ -150,10 +151,14 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -150,10 +151,14 @@ Doxygen. Unrecognized commands are treated as normal text.
Structural indicators Structural indicators
\htmlonly --- </center>\endhtmlonly</h2> \htmlonly --- </center>\endhtmlonly</h2>
\subsection cmdaddtogroup \addtogroup <name> \subsection cmdaddtogroup \addtogroup <name> [(title)]
\addindex \addtogroup \addindex \addtogroup
Add extra documentation to a group \<name\> that was previously defined Defines a group just like \ref cmddefgroup "\\defgroup", but in contrast to
using \\defgroup. This command can also be used to add a number of that command using the same \<name\> more than once will not result in a warning,
but rather one group with a merged documentation and the first title found in
any of the commands.
The title is optional, so this command can also be used to add a number of
entities to an existing group using \@{ and \@} like this: entities to an existing group using \@{ and \@} like this:
\verbatim \verbatim
...@@ -177,7 +182,8 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -177,7 +182,8 @@ Doxygen. Unrecognized commands are treated as normal text.
/*! @} */ /*! @} */
\endverbatim \endverbatim
See also \ref cmddefgroup "\\defgroup" and \ref cmdingroup "\\ingroup". \sa page \ref grouping "Grouping", sections \ref cmddefgroup "\\defgroup", \ref cmdingroup "\\ingroup" and
\ref cmdweakgroup "\\weakgroup".
\subsection cmdclass \class <name> [<header-file>] [<header-name>] \subsection cmdclass \class <name> [<header-file>] [<header-name>]
...@@ -225,9 +231,10 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -225,9 +231,10 @@ Doxygen. Unrecognized commands are treated as normal text.
categories. You can also use groups as members of other groups, categories. You can also use groups as members of other groups,
thus building a hierarchy of groups. thus building a hierarchy of groups.
The \<name\> argument should an single word identifier. The \<name\> argument should be a single word identifier.
\sa section \ref cmdingroup "\\ingroup" \sa page \ref grouping "Grouping", sections \ref cmdingroup "\\ingroup", \ref cmdaddtogroup "\\addtogroup",
\ref cmdweakgroup "\\weakgroup".
<hr> <hr>
...@@ -348,7 +355,8 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -348,7 +355,8 @@ Doxygen. Unrecognized commands are treated as normal text.
class, file or namespace, then it will be added to the group or class, file or namespace, then it will be added to the group or
groups identified by \<groupname\>. groups identified by \<groupname\>.
\sa section \ref cmddefgroup "\\defgroup". \sa page \ref grouping "Grouping", sections \ref cmddefgroup "\\defgroup",
\ref cmdaddtogroup "\\addtogroup" and \ref cmdweakgroup "\\weakgroup"
<hr> <hr>
\subsection cmdinterface \interface \subsection cmdinterface \interface
...@@ -555,6 +563,15 @@ Public/Protected/Private/... section. ...@@ -555,6 +563,15 @@ Public/Protected/Private/... section.
\sa section \ref cmdfn "\\fn" and \ref cmdtypedef "\\typedef". \sa section \ref cmdfn "\\fn" and \ref cmdtypedef "\\typedef".
<hr>
\subsection cmdweakgroup \weakgroup <name> [(title)]
\addindex \addtogroup
Can be used exactly like \ref cmdaddtogroup "\\addtogroup", but has
a lower priority when it comes to resolving conflicting grouping
definitions.
\sa page \ref grouping "Grouping" and \ref cmdaddtogroup "\\addtogroup".
<hr> <hr>
<h2>\htmlonly <center> --- \endhtmlonly <h2>\htmlonly <center> --- \endhtmlonly
......
...@@ -142,6 +142,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -142,6 +142,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_latex_output LATEX_OUTPUT <li> \refitem cfg_latex_output LATEX_OUTPUT
<li> \refitem cfg_macro_expansion MACRO_EXPANSION <li> \refitem cfg_macro_expansion MACRO_EXPANSION
<li> \refitem cfg_man_extension MAN_EXTENSION <li> \refitem cfg_man_extension MAN_EXTENSION
<li> \refitem cfg_man_links MAN_LINKS
<li> \refitem cfg_man_output MAN_OUTPUT <li> \refitem cfg_man_output MAN_OUTPUT
<li> \refitem cfg_max_dot_graph_height MAX_DOT_GRAPH_HEIGHT <li> \refitem cfg_max_dot_graph_height MAX_DOT_GRAPH_HEIGHT
<li> \refitem cfg_max_dot_graph_width MAX_DOT_GRAPH_WIDTH <li> \refitem cfg_max_dot_graph_width MAX_DOT_GRAPH_WIDTH
...@@ -997,6 +998,16 @@ EXTRA_PACKAGES = times ...@@ -997,6 +998,16 @@ EXTRA_PACKAGES = times
\addindex MAX_EXTENSION \addindex MAX_EXTENSION
The \c MAN_EXTENSION tag determines the extension that is added to The \c MAN_EXTENSION tag determines the extension that is added to
the generated man pages (default is the subroutine's section .3) the generated man pages (default is the subroutine's section .3)
\anchor cfg_man_links
<dt>\c MAN_LINKS <dd>
\addindex MAN_LINKS
If the \c MAN_LINKS tag is set to \c YES and Doxygen generates man output,
then it will generate one additional man file for each entity documented in
the real man page(s). These additional files only source the real man page,
but without them the man command would be unable to find the correct page.
The default is \c NO.
</dl> </dl>
\subsection config_prepro Preprocessor related options \subsection config_prepro Preprocessor related options
...@@ -1138,22 +1149,22 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre> ...@@ -1138,22 +1149,22 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
\anchor cfg_include_graph \anchor cfg_include_graph
<dt>\c INCLUDE_GRAPH <dd> <dt>\c INCLUDE_GRAPH <dd>
\addindex INCLUDE_GRAPH \addindex INCLUDE_GRAPH
If the \c ENABLE_PREPROCESSING, \c INCLUDE_GRAPH, and \c HAVE_DOT tags are If the \c ENABLE_PREPROCESSING, \c SEARCH_INCLUDES, \c INCLUDE_GRAPH, and \c HAVE_DOT
set to \c YES then doxygen will generate a graph for each documented file tags are set to \c YES then doxygen will generate a graph for each documented file
showing the direct and indirect include dependencies of the file with other showing the direct and indirect include dependencies of the file with other
documented files. documented files.
\anchor cfg_included_by_graph \anchor cfg_included_by_graph
<dt>\c INCLUDED_BY_GRAPH <dd> <dt>\c INCLUDED_BY_GRAPH <dd>
\addindex INCLUDED_BY_GRAPH \addindex INCLUDED_BY_GRAPH
If the \c ENABLE_PREPROCESSING, \c INCLUDED_BY_GRAPH, and \c HAVE_DOT tags are If the \c ENABLE_PREPROCESSING, \c SEARCH_INCLUDES, \c INCLUDED_BY_GRAPH, and
set to \c YES then doxygen will generate a graph for each documented header \c HAVE_DOT tags are set to \c YES then doxygen will generate a graph for each
file showing the documented files that directly or indirectly include this documented header file showing the documented files that directly or indirectly
file. include this file.
\anchor cfg_graphical_hierarchy \anchor cfg_graphical_hierarchy
<dt>\c GRAPHICAL_HIERARCHY <dd> <dt>\c GRAPHICAL_HIERARCHY <dd>
\addindex GRAPHICAL_HIERATCHY \addindex GRAPHICAL_HIERARCHY
If the \c GRAPHICAL_HIERARCHY and \c HAVE_DOT tags are set to \c YES then If the \c GRAPHICAL_HIERARCHY and \c HAVE_DOT tags are set to \c YES then
doxygen will graphical hierarchy of all classes instead of a textual one. doxygen will graphical hierarchy of all classes instead of a textual one.
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
/*! \page faq Frequently Asked Questions /*! \page faq Frequently Asked Questions
<ol> <ol>
<li><b>How do get information on the index page in HTML?</b> <li><b>How to get information on the index page in HTML?</b>
<p> <p>
You should use the \\mainpage command inside a comment block like this: You should use the \\mainpage command inside a comment block like this:
\verbatim \verbatim
......
...@@ -34,6 +34,7 @@ command in a special comment block. The first argument of the command ...@@ -34,6 +34,7 @@ command in a special comment block. The first argument of the command
is a label that should uniquely identify the group. You can make an is a label that should uniquely identify the group. You can make an
entity a member of a specific group by putting entity a member of a specific group by putting
a \ref cmdingroup "\\ingroup" command inside its documentation block. a \ref cmdingroup "\\ingroup" command inside its documentation block.
The second argument is the title of the group.
To avoid putting \ref cmdingroup "\\ingroup" commands in the documentation To avoid putting \ref cmdingroup "\\ingroup" commands in the documentation
of each member you can also group members together by the of each member you can also group members together by the
...@@ -44,11 +45,75 @@ documentation block. ...@@ -44,11 +45,75 @@ documentation block.
Groups can also be nested using these grouping markers. Groups can also be nested using these grouping markers.
You will get an error message when you use the same group label more than once.
If you don't want doxygen to enforce
unique labels, then you can use \ref cmdaddtogroup "\\addtogroup" instead of
\ref cmddefgroup "\\defgroup". It can be used exactly like \ref cmddefgroup "\\defgroup",
but when the group has been defined already, then it silently merges the existing documentation
with the new one.
The title of the group is optional for this command, so you can use
\verbatim
/** \addtogroup <label> */
/*\@{*/
/*\@}*/
\endverbatim
to add members to a group that is defined in more detail elsewhere.
Note that compound entities (like classes, files and namespaces) can Note that compound entities (like classes, files and namespaces) can
be put into multiple groups, but members (like variable, functions, typedefs be put into multiple groups, but members (like variable, functions, typedefs
and enums) can only be a member of one group and enums) can only be a member of one group
(this restriction is to avoid ambiguous linking targets). (this restriction is to avoid ambiguous linking targets).
Doxygen will put members into that group where the grouping definition had
the highest priority: f.i. \ref cmdingroup "\\ingroup" overrides any automatic
grouping definition via <code>\@{</code> <code>\@}</code>. Conflicting grouping
definitions with the same priority trigger a warning, unless one definition
was for a member without any explicit documentation. The following example
puts VarInA into group A and silently resolves the conflict for IntegerVariable by
putting it into group IntVariables, because the second instance of IntegerVariable
is undocumented:
\verbatim
/**
* \ingroup A
*/
extern int VarInA;
/**
* \defgroup IntVariables Global integer variables
*/
/*@{*/
/** an integer variable */
extern int IntegerVariable;
/*@}*/
....
/**
* \defgroup Variables Global variables
*/
/*@{*/
/** a variable in group A */
int VarInA;
int IntegerVariable;
/*@}*/
\endverbatim
The priorities of grouping definitions are (from highest to lowest):
\ref cmdingroup "\\ingroup", \ref cmddefgroup "\\defgroup",
\ref cmdaddtogroup "\\addtogroup", \ref cmdweakgroup "\\weakgroup".
The last command is exactly like \ref cmdaddtogroup "\\addtogroup"
with a lower priority. It was added to allow "lazy" grouping
definitions: you can use commands with a higher priority in your .h
files to define the hierarchy and \ref cmdweakgroup "\\weakgroup"
in .c files without having to duplicate the hierarchy exactly.
\par Example: \par Example:
\verbinclude group.cpp \verbinclude group.cpp
......
...@@ -421,6 +421,10 @@ Here is what is required: ...@@ -421,6 +421,10 @@ Here is what is required:
to produce PDF output instead of DVI, or the PDF can be produced to produce PDF output instead of DVI, or the PDF can be produced
from PostScript using the utility <code>ps2pdf</code>. from PostScript using the utility <code>ps2pdf</code>.
If you want to use MikTeX then you need to download the
fancyhdr package separately. You can find it at:
ftp://ftp.tex.ac.uk/tex-archive/macros/latex/contrib/supported/fancyhdr/
<li>If you want to generate compressed HTML help <li>If you want to generate compressed HTML help
(see \ref cfg_generate_htmlhelp "GENERATE_HTMLHELP") in the (see \ref cfg_generate_htmlhelp "GENERATE_HTMLHELP") in the
config file, then you need the Microsoft HTML help workshop. config file, then you need the Microsoft HTML help workshop.
......
/****************************************************************************** /******************************************************************************
* <notice>This is the template for generating language.doc. Edit this file, * <notice>This is the template for generating language.doc.
* not the language.doc.</notice> * Edit manually this file, not the language.doc!</notice>
* *
* *
* Copyright (C) 1997-2001 by Dimitri van Heesch. * Copyright (C) 1997-2001 by Dimitri van Heesch.
...@@ -23,7 +23,8 @@ Doxygen has support for multiple languages. This means ...@@ -23,7 +23,8 @@ Doxygen has support for multiple languages. This means
that the text fragments that doxygen generates can changed into languages that the text fragments that doxygen generates can changed into languages
other than English (the default) at configuration time. other than English (the default) at configuration time.
<p> <p>
Currently, $numlang languages are supported (sorted alphabetically): Currently (version $version), $numlang languages
are supported (sorted alphabetically):
$languages. $languages.
The table of information related to the supported languages follows. The table of information related to the supported languages follows.
...@@ -33,7 +34,6 @@ when the translator was updated. ...@@ -33,7 +34,6 @@ when the translator was updated.
<p> <p>
$information_table $information_table
Have a look at <code>doxygen/doc/translator.txt</code> for more details.
<p> <p>
Most people on the list have indicated that they were also busy Most people on the list have indicated that they were also busy
......
...@@ -15,7 +15,7 @@ Petr P&rcaron;ikryl: prikrylp@skil.cz ...@@ -15,7 +15,7 @@ Petr P&rcaron;ikryl: prikrylp@skil.cz
Vlastimil Havran: havran@fel.cvut.cz Vlastimil Havran: havran@fel.cvut.cz
Danish Danish
Erik Se Srensen: erik@mail.nu Erik S&oslash;e S&oslash;rensen: erik@mail.nu
Dutch Dutch
Dimitri van Heesch: dimitri@stack.nl Dimitri van Heesch: dimitri@stack.nl
......
:start @call perl -w translator.pl
call perl -w translator.pl
pause
goto start
\ No newline at end of file
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
# This is a Perl script for Doxygen developers. # This is a Perl script for Doxygen developers.
# Its main purpose is to extract the information from sources # Its main purpose is to extract the information from sources
# related to internationalization (the translator classes). # related to internationalization (the translator classes).
# It uses the information to generate documentation (language.doc,
# translator_report.txt) from templates (language.tpl, maintainers.txt).
# #
# Petr Prikryl (prikrylp@skil.cz) # Petr Prikryl (prikrylp@skil.cz)
# History: # History:
...@@ -11,10 +13,26 @@ ...@@ -11,10 +13,26 @@
# 2001/04/27 # 2001/04/27
# - First version of the script. # - First version of the script.
# #
# 2002/05/02 # 2001/05/02
# - Update to accept updateNeededMessage() in the Translator class. # - Update to accept updateNeededMessage() in the Translator class.
# - First version that generates doc/language.doc. # - First version that generates doc/language.doc.
# #
# 2001/05/07
# - Environment variable $doxygenrootdir now points to the
# Doxygen's root directory.
#
# 2001/05/11
# - Updated to reflect using TranslatorAdapterCVS as the base
# class for "almost up-to-date" translators.
# - $doxygenrootdir and other global variables for storing
# directories determined from DOXYGEN_DOCDIR environment
# variable. The change was done because the DOXYGEN_DOCDIR
# was already used before.
# - $version mark can be used in the language.tpl template.
#
# 2001/05/18
# - Character entity &oslash; recognized in maintainers.txt.
#
################################################################ ################################################################
require 5.005; require 5.005;
...@@ -23,14 +41,21 @@ use Carp; ...@@ -23,14 +41,21 @@ use Carp;
# Global variables # Global variables
# #
my $doxygenrootdir = ".."; my $doxygenrootdir = 'directory set at the beginning of the body';
my $srcdir = "$doxygenrootdir/src"; my $srcdir = 'directory set at the beginning of the body';
my $docdir = "$doxygenrootdir/doc"; my $docdir = 'directory set at the beginning of the body';
my $doxversion = 'set at the beginning of the body';
# Names of the output files. # Names of the output files.
# #
my $ftxt = "translator_report.txt"; my $ftranslatortxt = "translator_report.txt";
my $fdoc = "language.doc"; my $flangdoc = "language.doc";
# Names of the template files and other intput files.
#
my $flangtpl = "language.tpl"; # template for language.doc
my $fmaintainers = "maintainers.txt"; # database of local lang. maintainers
################################################################ ################################################################
...@@ -199,7 +224,7 @@ sub GetInfoFrom ##{{{ ...@@ -199,7 +224,7 @@ sub GetInfoFrom ##{{{
################################################################ ################################################################
# GenerateLanguageDoc takes document templates and code sources # GenerateLanguageDoc takes document templates and code sources
# generates the content as expected in the language.doc file (the # generates the content as expected in the $flangdoc file (the
# part of the Doxygen documentation), and returns the result as a # part of the Doxygen documentation), and returns the result as a
# string. # string.
# #
...@@ -250,7 +275,8 @@ xxxTABLE_FOOTxxx ...@@ -250,7 +275,8 @@ xxxTABLE_FOOTxxx
\latexonly \latexonly
\begin{tabular}{|l|l|l|l|} \begin{tabular}{|l|l|l|l|}
\hline \hline
{\bf Language} & {\bf Maintainer} & {Contact address} & {Status} \\ {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline
xxxTABLE_HEADxxx xxxTABLE_HEADxxx
my $latexTableRow = <<'xxxTABLE_ROWxxx'; my $latexTableRow = <<'xxxTABLE_ROWxxx';
...@@ -267,7 +293,7 @@ xxxTABLE_FOOTxxx ...@@ -267,7 +293,7 @@ xxxTABLE_FOOTxxx
# Read the template of the documentation, and join the content # Read the template of the documentation, and join the content
# to a single string. #{{{ # to a single string. #{{{
# #
my $fin = "$docdir/language.tpl"; my $fin = "$docdir/$flangtpl";
open(FIN, "< $fin") or die "\nError when open < $fin: $!"; open(FIN, "< $fin") or die "\nError when open < $fin: $!";
my @content = <FIN>; my @content = <FIN>;
close FIN; close FIN;
...@@ -304,7 +330,7 @@ xxxTABLE_FOOTxxx ...@@ -304,7 +330,7 @@ xxxTABLE_FOOTxxx
# Read the information related to maintainers into the # Read the information related to maintainers into the
# string using suitable separators -- one line, one language. #{{{ # string using suitable separators -- one line, one language. #{{{
# #
$fin = "$docdir/maintainers.txt"; $fin = "$docdir/$fmaintainers";
open(FIN, "< $fin") or die "\nError when open < $fin: $!"; open(FIN, "< $fin") or die "\nError when open < $fin: $!";
my @maintainers = <FIN>; my @maintainers = <FIN>;
close FIN; close FIN;
...@@ -374,13 +400,17 @@ xxxTABLE_FOOTxxx ...@@ -374,13 +400,17 @@ xxxTABLE_FOOTxxx
foreach my $lang (sort keys %language) { foreach my $lang (sort keys %language) {
# Read the line with info for the language and separate # Read the line with info for the language and separate
# the information of status. #{{{ # the status. #{{{
# #
my @list = split(/<msep\/>/, $language{$lang}); my @list = split(/<msep\/>/, $language{$lang});
my $status = shift @list; my $status = shift @list;
my $i = $status =~ s{^Translator$}{up-to-date}; my $i = $status =~ s{^Translator$}{up-to-date};
if ($i == 0) {
$i = $status =~ s{^TranslatorAdapterCVS}{almost up-to-date};
}
if ($i == 0) { if ($i == 0) {
$i = $status =~ s{^TranslatorAdapter_(\d)_(\d)_(\d)} $i = $status =~ s{^TranslatorAdapter_(\d)_(\d)_(\d)}
{$1.$2.$3}x; {$1.$2.$3}x;
...@@ -479,9 +509,9 @@ xxxTABLE_FOOTxxx ...@@ -479,9 +509,9 @@ xxxTABLE_FOOTxxx
##}}} ##}}}
# Finish the tables, and substitute the mark in the doc # Finish the tables, and substitute the mark in the doc
# template by the contatenation of the tables. Add NOSPAM to # template by the contatenation of the tables and the notice
# email addresses in the HTML table. Replace the special # about $ftranslatortxt. Add NOSPAM to email addresses in the
# character sequences. #{{{ # HTML table. Replace the special character sequences. #{{{
# #
$tableHTML .= $htmlTableFoot; $tableHTML .= $htmlTableFoot;
$tableLATEX .= $latexTableFoot; $tableLATEX .= $latexTableFoot;
...@@ -493,16 +523,26 @@ xxxTABLE_FOOTxxx ...@@ -493,16 +523,26 @@ xxxTABLE_FOOTxxx
$tableLATEX =~ s/&aacute;/\\'{a}/sg; $tableLATEX =~ s/&aacute;/\\'{a}/sg;
$tableLATEX =~ s/&auml;/\\"{a}/sg; $tableLATEX =~ s/&auml;/\\"{a}/sg;
$tableLATEX =~ s/&ouml;/\\"{o}/sg; $tableLATEX =~ s/&ouml;/\\"{o}/sg;
$tableLATEX =~ s/&oslash;/\\o{}/sg;
$tableLATEX =~ s/_/\\_/sg; $tableLATEX =~ s/_/\\_/sg;
$output =~ s{\$information_table}{$tableHTML$tableLATEX}; my $notice = "\nHave a look at <a href=\"../doc/$ftranslatortxt\"\n>"
. "<code>doxygen/doc/$ftranslatortxt</code></a> "
. "for more details.";
$output =~ s{\$information_table}{$tableHTML$tableLATEX$notice};
$output =~ s{\$version}{$doxversion};
##}}} ##}}}
# Replace the introduction notice in the output. #{{{ # Replace the introduction notice in the output. #{{{
# #
$output =~ s{<notice>.+?</notice>} $output =~ s{<notice>.+?</notice>}
{Warning: this file was generated from the language.tpl template {Warning: this file was generated from the $flangtpl template
* Do not edit this file. Edit the template!}sx; * and the $fmaintainers files by the $0 script.
*
* Do not edit this file. Edit the above mentioned files!}sx;
##}}} ##}}}
# Return the content of the generated output file. # Return the content of the generated output file.
...@@ -516,6 +556,24 @@ xxxTABLE_FOOTxxx ...@@ -516,6 +556,24 @@ xxxTABLE_FOOTxxx
# Body # Body
# #
{ {
# Set the content of global variables using the environment
# variables. #{{{
#
$docdir = (defined $ENV{'DOXYGEN_DOCDIR'})
? $ENV{'DOXYGEN_DOCDIR'} : '.';
$docdir =~ s{\\}{/}g;
$docdir =~ s{/$}{};
$doxygenrootdir = ($docdir eq '.') ? '..' : $docdir;
$doxygenrootdir =~ s{/doc$}{};
$srcdir = "$doxygenrootdir/src";
$doxversion = (defined $ENV{'VERSION'}) ? $ENV{'VERSION'} : 'unknown';
##}}}
# The translator base class must be present. Exit otherwise. #{{{ # The translator base class must be present. Exit otherwise. #{{{
# #
if (!-f "$srcdir/translator.h") if (!-f "$srcdir/translator.h")
...@@ -635,7 +693,7 @@ xxxTABLE_FOOTxxx ...@@ -635,7 +693,7 @@ xxxTABLE_FOOTxxx
# Generate the textual output file. # Generate the textual output file.
# #
my $fout = "$docdir/$ftxt"; my $fout = "$docdir/$ftranslatortxt";
# Open it first. # Open it first.
# #
...@@ -655,24 +713,37 @@ xxxTABLE_FOOTxxx ...@@ -655,24 +713,37 @@ xxxTABLE_FOOTxxx
# If there are up-to-date translators, list them. #{{{ # If there are up-to-date translators, list them. #{{{
# #
my @list = sort grep { $cb{$_} =~ m/^Translator$/ } keys %cb; my @list = sort grep { $cb{$_} =~ m/^Translator(AdapterCVS)?$/ } keys %cb;
if (@list) { if (@list) {
print FOUT "\n" .'-' x 70 . "\n"; print FOUT "\n" .'-' x 70 . "\n";
print FOUT "The following translator classes are up-to-date " print FOUT "The following translator classes are up-to-date "
. "(sorted alphabetically).\n" . "(sorted alphabetically).\n"
. "This means that they derive from the Translator class. " . "This means that they derive from the Translator class. "
. "However, there still\n" . "If the translator\n"
. "may be some details listed below " . "derives from TranslatorAdapterCVS, it is considered "
. "for them. Please, check it.\n\n"; . "to be almost up-to-date.\n"
. "In other words, it is newer than the last official "
. "release. Anyway, there\n"
. "still may be some details listed even for "
. "the up-to-date translators.\n"
. "Please, check the text below.\n\n";
foreach (@list) {
print FOUT " $_";
foreach (@list) { print FOUT " $_\n"; } # For almost up-to-date translators, show also the base class.
#
if ($cb{$_} ne 'Translator') { print FOUT "\t($cb{$_})"; }
print FOUT "\n";
}
} }
##}}} ##}}}
# If there are obsolete translators, list them. #{{{ # If there are obsolete translators, list them. #{{{
# #
@list = sort grep { $cb{$_} =~ m/^TranslatorAdapter/ } keys %cb; @list = sort grep { $cb{$_} =~ m/^TranslatorAdapter_/ } keys %cb;
if (@list) { if (@list) {
print FOUT "\n" .'-' x 70 . "\n"; print FOUT "\n" .'-' x 70 . "\n";
...@@ -732,7 +803,7 @@ xxxTABLE_FOOTxxx ...@@ -732,7 +803,7 @@ xxxTABLE_FOOTxxx
# Generate the language.doc file. # Generate the language.doc file.
# #
$fout = "$docdir/$fdoc"; $fout = "$docdir/$flangdoc";
# Open it first for the output. # Open it first for the output.
# #
......
Name: doxygen Name: doxygen
Version: 1.2.7_20010517 Version: 1.2.7_20010524
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 2 Release: 3
Source: doxygen_%{version}.src.tar.gz Source: doxygen-%{version}.src.tar.gz
Copyright: GPL Copyright: GPL
Group: unsorted Group: unsorted
URL: http://www.stack.nl/~dimitri/doxygen URL: http://www.stack.nl/~dimitri/doxygen
Packager: Matthias Andree <ma@dt.e-technik.uni-dortmund.de> Packager: Matthias Andree <ma@dt.e-technik.uni-dortmund.de>
BuildRoot: /var/tmp/doxygen_%{version}.root BuildRoot: /var/tmp/doxygen-%{version}.root
# requires Perl for tmake (Troll's make) # requires Perl for tmake (Troll's make)
BuildPrereq: perl tetex BuildPrereq: perl tetex
...@@ -33,7 +33,7 @@ den Quellen extrahiert. Doxygen wird auf einer Linux-Plattform ...@@ -33,7 +33,7 @@ den Quellen extrahiert. Doxygen wird auf einer Linux-Plattform
entwickelt, funktioniert aber genauso auf den meisten andern Unix entwickelt, funktioniert aber genauso auf den meisten andern Unix
Dialekten. Das Programm ist auch fr Windows 95/NT erhltlich. Dialekten. Das Programm ist auch fr Windows 95/NT erhltlich.
Author: Autor:
-------- --------
Dimitri van Heesch <dimitri@stack.nl> Dimitri van Heesch <dimitri@stack.nl>
...@@ -41,13 +41,14 @@ Author: ...@@ -41,13 +41,14 @@ Author:
%setup -n doxygen-%{version} %setup -n doxygen-%{version}
%build %build
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix /do_we_need_this_usr --with-doxywizard CFLAGS="$RPM_OPT_FLAGS" ./configure --with-doxywizard
make make
%install %install
rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_ROOT
make install INSTALL=$RPM_BUILD_ROOT/usr DOCDIR=$RPM_BUILD_ROOT%{_docdir}/doxygen make install INSTALL=$RPM_BUILD_ROOT/usr DOCDIR=$RPM_BUILD_ROOT%{_docdir}/doxygen
install -m 644 LICENSE LANGUAGE.HOWTO PLATFORMS README VERSION $RPM_BUILD_ROOT%{_docdir}/doxygen install -m 644 LICENSE LANGUAGE.HOWTO PLATFORMS README VERSION $RPM_BUILD_ROOT%{_docdir}/doxygen
find $RPM_BUILD_ROOT -name CVS -type d -depth -exec rm -r {} \;
%files %files
%defattr(-,root,root) %defattr(-,root,root)
......
...@@ -626,7 +626,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -626,7 +626,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
pageType+=cType; pageType+=cType;
pageTitle+=pageType+" Reference"; pageTitle+=pageType+" Reference";
if (outerTempArgList) pageTitle.prepend(" Template"); if (outerTempArgList) pageTitle.prepend(" Template");
startFile(ol,getOutputFileBase(),pageTitle); startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
parseText(ol,theTranslator->trCompoundReference(name(),m_compType,outerTempArgList!=0)); parseText(ol,theTranslator->trCompoundReference(name(),m_compType,outerTempArgList!=0));
endTitle(ol,getOutputFileBase(),name()); endTitle(ol,getOutputFileBase(),name());
...@@ -1096,7 +1096,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1096,7 +1096,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.disableAllBut(OutputGenerator::Man); ol.disableAllBut(OutputGenerator::Man);
ol.writeString("\n"); ol.writeString("\n");
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trAuthor()); parseText(ol,theTranslator->trAuthor(TRUE,TRUE));
ol.endGroupHeader(); ol.endGroupHeader();
parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
ol.popGeneratorState(); ol.popGeneratorState();
...@@ -1121,7 +1121,8 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -1121,7 +1121,8 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,m_memListFileName,theTranslator->trMemberList()); startFile(ol,m_memListFileName,m_memListFileName,
theTranslator->trMemberList());
startTitle(ol,0); startTitle(ol,0);
parseText(ol,name()+" "+theTranslator->trMemberList()); parseText(ol,name()+" "+theTranslator->trMemberList());
endTitle(ol,0,0); endTitle(ol,0,0);
...@@ -1891,7 +1892,7 @@ QCString ClassDef::getSourceFileBase() const ...@@ -1891,7 +1892,7 @@ QCString ClassDef::getSourceFileBase() const
return convertNameToFile(m_fileName+"-source"); return convertNameToFile(m_fileName+"-source");
} }
void ClassDef::setGroupDefForAllMembers(GroupDef *gd) void ClassDef::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
{ {
gd->addClass(this); gd->addClass(this);
//printf("ClassDef::setGroupDefForAllMembers(%s)\n",gd->name().data()); //printf("ClassDef::setGroupDefForAllMembers(%s)\n",gd->name().data());
...@@ -1904,10 +1905,10 @@ void ClassDef::setGroupDefForAllMembers(GroupDef *gd) ...@@ -1904,10 +1905,10 @@ void ClassDef::setGroupDefForAllMembers(GroupDef *gd)
for (mnii.toFirst();(mi=mnii.current());++mnii) for (mnii.toFirst();(mi=mnii.current());++mnii)
{ {
MemberDef *md=mi->memberDef; MemberDef *md=mi->memberDef;
md->setGroupDef(gd); md->setGroupDef(gd,pri,fileName,startLine,hasDocs);
gd->insertMember(md,TRUE); gd->insertMember(md,TRUE);
ClassDef *innerClass = md->getClassDefOfAnonymousType(); ClassDef *innerClass = md->getClassDefOfAnonymousType();
if (innerClass) innerClass->setGroupDefForAllMembers(gd); if (innerClass) innerClass->setGroupDefForAllMembers(gd,pri,fileName,startLine,hasDocs);
} }
} }
} }
......
...@@ -228,7 +228,7 @@ class ClassDef : public Definition ...@@ -228,7 +228,7 @@ class ClassDef : public Definition
void determineIntfUsageRelation(); void determineIntfUsageRelation();
void setSubGrouping(bool enabled) { m_subGrouping = enabled; } void setSubGrouping(bool enabled) { m_subGrouping = enabled; }
void setProtection(Protection p) { m_prot=p; } void setProtection(Protection p) { m_prot=p; }
void setGroupDefForAllMembers(GroupDef *g); void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
void addInnerCompound(Definition *d); void addInnerCompound(Definition *d);
void setIsTemplateBaseClass(int num) { m_isTemplBaseClass = num; } void setIsTemplateBaseClass(int num) { m_isTemplBaseClass = num; }
void initTemplateMapping(); void initTemplateMapping();
......
...@@ -8,16 +8,32 @@ ...@@ -8,16 +8,32 @@
#include <qlist.h> #include <qlist.h>
#include <qtextstream.h> #include <qtextstream.h>
/*! \brief Abstract base class for any configuration option. /*! \brief Abstract base class for any configuration option.
* *
*/ */
class ConfigOption class ConfigOption
{ {
friend class Config;
public: public:
enum OptionType { O_Info, O_List, O_Enum, O_String, O_Int, O_Bool }; /*! The type of option */
enum { MAX_OPTION_LENGTH = 23 }; enum OptionType
{
O_Info, //<! A section header
O_List, //<! A list of items
O_Enum, //<! A fixed set of items
O_String, //<! A single item
O_Int, //<! An integer value
O_Bool //<! A boolean value
};
enum
{
/*! Maximum length of an option in the config file. Used for
* alignment purposes.
*/
MAX_OPTION_LENGTH = 23
};
ConfigOption(OptionType t) : m_kind(t) ConfigOption(OptionType t) : m_kind(t)
{ {
m_spaces.fill(' ',40); m_spaces.fill(' ',40);
...@@ -25,20 +41,23 @@ class ConfigOption ...@@ -25,20 +41,23 @@ class ConfigOption
virtual ~ConfigOption() virtual ~ConfigOption()
{ {
} }
/*! returns the kind of option this is. */
OptionType kind() const { return m_kind; }
QCString name() const { return m_name; }
QCString docs() const { return m_doc; }
QCString dependsOn() const { return m_dependency; }
void addDependency(const char *dep) void addDependency(const char *dep)
{ {
m_dependency = dep; m_dependency = dep;
} }
OptionType kind() const { return m_kind; }
protected:
virtual void writeTemplate(QTextStream &t,bool sl) = 0; virtual void writeTemplate(QTextStream &t,bool sl) = 0;
virtual void convertStrToVal() {} virtual void convertStrToVal() {}
virtual void substEnvVars() {} virtual void substEnvVars() {}
virtual void init() {} virtual void init() {}
QCString name() const { return m_name; }
QCString docs() const { return m_doc; }
QCString dependsOn() const { return m_dependency; }
protected:
QCString convertToComment(const QCString &s) QCString convertToComment(const QCString &s)
{ {
...@@ -340,48 +359,90 @@ class ConfigBool : public ConfigOption ...@@ -340,48 +359,90 @@ class ConfigBool : public ConfigOption
* The static member instance() can be used to get * The static member instance() can be used to get
* a pointer to the one and only instance. * a pointer to the one and only instance.
*/ */
struct Config class Config
{ {
public: public:
/////////////////////////////
// public API
/////////////////////////////
/*! Returns the one and only instance of this class */
static Config *instance() static Config *instance()
{ {
if (m_instance==0) m_instance = new Config; if (m_instance==0) m_instance = new Config;
return m_instance; return m_instance;
} }
void writeTemplate(QFile *f,bool shortIndex); /*! Returns an iterator that can by used to iterate over the
void convertStrToVal(); * configuration options.
void substituteEnvironmentVars(); */
void check();
void init();
void parse(const QCString &config,const char *fn);
QListIterator<ConfigOption> iterator() QListIterator<ConfigOption> iterator()
{ {
return QListIterator<ConfigOption>(*m_options); return QListIterator<ConfigOption>(*m_options);
} }
//////////////////////// /*!
// get functions * @name Getting configuration values.
//////////////////////// * @{
*/
/*! Returns the value of the string option with name \a fileName.
* The arguments \a num and \a name are for debugging purposes only.
* There is a convenience function Config_getString() for this.
*/
QCString &getString(const char *fileName,int num,const char *name) const; QCString &getString(const char *fileName,int num,const char *name) const;
/*! Returns the value of the list option with name \a fileName.
* The arguments \a num and \a name are for debugging purposes only.
* There is a convenience function Config_getList() for this.
*/
QStrList &getList(const char *fileName,int num,const char *name) const; QStrList &getList(const char *fileName,int num,const char *name) const;
/*! Returns the value of the enum option with name \a fileName.
* The arguments \a num and \a name are for debugging purposes only.
* There is a convenience function Config_getEnum() for this.
*/
QCString &getEnum(const char *fileName,int num,const char *name) const; QCString &getEnum(const char *fileName,int num,const char *name) const;
/*! Returns the value of the integer option with name \a fileName.
* The arguments \a num and \a name are for debugging purposes only.
* There is a convenience function Config_getInt() for this.
*/
int &getInt(const char *fileName,int num,const char *name) const; int &getInt(const char *fileName,int num,const char *name) const;
/*! Returns the value of the boolean option with name \a fileName.
* The arguments \a num and \a name are for debugging purposes only.
* There is a convenience function Config_getBool() for this.
*/
bool &getBool(const char *fileName,int num,const char *name) const; bool &getBool(const char *fileName,int num,const char *name) const;
/*! Returns the ConfigOption corresponding with \a name or 0 if
* the option is not supported.
*/
ConfigOption *get(const char *name) const ConfigOption *get(const char *name) const
{ {
return m_dict->find(name); return m_dict->find(name);
} }
/* @} */
//////////////////////// /*!
// add functions * @name Adding configuration options.
//////////////////////// * @{
*/
/*! Starts a new configuration section with \a name and description \a doc.
* \returns An object representing the option.
*/
ConfigInfo *addInfo(const char *name,const char *doc) ConfigInfo *addInfo(const char *name,const char *doc)
{ {
ConfigInfo *result = new ConfigInfo(name,doc); ConfigInfo *result = new ConfigInfo(name,doc);
m_options->append(result); m_options->append(result);
return result; return result;
} }
/*! Adds a new string option with \a name and documentation \a doc.
* \returns An object representing the option.
*/
ConfigString *addString(const char *name, ConfigString *addString(const char *name,
const char *doc) const char *doc)
{ {
...@@ -390,6 +451,11 @@ struct Config ...@@ -390,6 +451,11 @@ struct Config
m_dict->insert(name,result); m_dict->insert(name,result);
return result; return result;
} }
/*! Adds a new enumeration option with \a name and documentation \a doc
* and initial value \a defVal.
* \returns An object representing the option.
*/
ConfigEnum *addEnum(const char *name, ConfigEnum *addEnum(const char *name,
const char *doc, const char *doc,
const char *defVal) const char *defVal)
...@@ -399,6 +465,10 @@ struct Config ...@@ -399,6 +465,10 @@ struct Config
m_dict->insert(name,result); m_dict->insert(name,result);
return result; return result;
} }
/*! Adds a new string option with \a name and documentation \a doc.
* \returns An object representing the option.
*/
ConfigList *addList(const char *name, ConfigList *addList(const char *name,
const char *doc) const char *doc)
{ {
...@@ -407,6 +477,12 @@ struct Config ...@@ -407,6 +477,12 @@ struct Config
m_dict->insert(name,result); m_dict->insert(name,result);
return result; return result;
} }
/*! Adds a new integer option with \a name and documentation \a doc.
* The integer has a range between \a minVal and \a maxVal and a
* default value of \a defVal.
* \returns An object representing the option.
*/
ConfigInt *addInt(const char *name, ConfigInt *addInt(const char *name,
const char *doc, const char *doc,
int minVal,int maxVal,int defVal) int minVal,int maxVal,int defVal)
...@@ -416,6 +492,11 @@ struct Config ...@@ -416,6 +492,11 @@ struct Config
m_dict->insert(name,result); m_dict->insert(name,result);
return result; return result;
} }
/*! Adds a new boolean option with \a name and documentation \a doc.
* The boolean has a default value of \a defVal.
* \returns An object representing the option.
*/
ConfigBool *addBool(const char *name, ConfigBool *addBool(const char *name,
const char *doc, const char *doc,
bool defVal) bool defVal)
...@@ -425,6 +506,23 @@ struct Config ...@@ -425,6 +506,23 @@ struct Config
m_dict->insert(name,result); m_dict->insert(name,result);
return result; return result;
} }
/*! @} */
/*! Writes a template configuration file to \a f. If \a shortIndex
* is \c TRUE the description of each configuration option will
* be omitted.
*/
void writeTemplate(QFile *f,bool shortIndex);
/////////////////////////////
// internal API
/////////////////////////////
void convertStrToVal();
void substituteEnvironmentVars();
void check();
void init();
void parse(const QCString &config,const char *fn);
protected: protected:
Config() Config()
{ {
......
...@@ -555,7 +555,8 @@ void Config::writeTemplate(QFile *f,bool sl) ...@@ -555,7 +555,8 @@ void Config::writeTemplate(QFile *f,bool sl)
#endif #endif
if (!sl) if (!sl)
{ {
t << "# This file describes the settings to be used by doxygen for a project\n"; t << "# This file describes the settings to be used by the documentation system\n";
t << "# doxygen (www.doxygen.org) for a project\n";
t << "#\n"; t << "#\n";
t << "# All text after a hash (#) is considered a comment and will be ignored\n"; t << "# All text after a hash (#) is considered a comment and will be ignored\n";
t << "# The format is:\n"; t << "# The format is:\n";
...@@ -1728,7 +1729,7 @@ void Config::create() ...@@ -1728,7 +1729,7 @@ void Config::create()
"If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n" "If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n"
"The RTF output is optimised for Word 97 and may not look very pretty with \n" "The RTF output is optimised for Word 97 and may not look very pretty with \n"
"other RTF readers or editors.\n", "other RTF readers or editors.\n",
TRUE FALSE
); );
cs = addString( cs = addString(
"RTF_OUTPUT", "RTF_OUTPUT",
...@@ -1781,7 +1782,7 @@ void Config::create() ...@@ -1781,7 +1782,7 @@ void Config::create()
"GENERATE_MAN", "GENERATE_MAN",
"If the GENERATE_MAN tag is set to YES (the default) Doxygen will \n" "If the GENERATE_MAN tag is set to YES (the default) Doxygen will \n"
"generate man pages \n", "generate man pages \n",
TRUE FALSE
); );
cs = addString( cs = addString(
"MAN_OUTPUT", "MAN_OUTPUT",
...@@ -1799,6 +1800,16 @@ void Config::create() ...@@ -1799,6 +1800,16 @@ void Config::create()
); );
cs->setDefaultValue(".3"); cs->setDefaultValue(".3");
cs->addDependency("GENERATE_MAN"); cs->addDependency("GENERATE_MAN");
cb = addBool(
"MAN_LINKS",
"If the MAN_LINKS tag is set to YES and Doxygen generates man output,\n"
"then it will generate one additional man file for each entity\n"
"documented in the real man page(s). These additional files\n"
"only source the real man page, but without them the man command\n"
"would be unable to find the correct page. The default is NO.\n",
FALSE
);
cb->addDependency("GENERATE_MAN");
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
//addInfo( "XML","configuration options related to the XML output"); //addInfo( "XML","configuration options related to the XML output");
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
...@@ -1938,18 +1949,19 @@ void Config::create() ...@@ -1938,18 +1949,19 @@ void Config::create()
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"INCLUDE_GRAPH", "INCLUDE_GRAPH",
"If the ENABLE_PREPROCESSING, INCLUDE_GRAPH, and HAVE_DOT tags are set to \n" "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n"
"YES then doxygen will generate a graph for each documented file showing \n" "tags are set to YES then doxygen will generate a graph for each documented \n"
"the direct and indirect include dependencies of the file with other \n" "file showing the direct and indirect include dependencies of the file with \n"
"documented files. \n", "other documented files. \n",
TRUE TRUE
); );
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"INCLUDED_BY_GRAPH", "INCLUDED_BY_GRAPH",
"If the ENABLE_PREPROCESSING, INCLUDED_BY_GRAPH, and HAVE_DOT tags are set to \n" "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \n"
"YES then doxygen will generate a graph for each documented header file showing \n" "HAVE_DOT tags are set to YES then doxygen will generate a graph for each \n"
"the documented files that directly or indirectly include this file \n", "documented header file showing the documented files that directly or \n"
"indirectly include this file. \n",
TRUE TRUE
); );
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
......
...@@ -1432,7 +1432,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1432,7 +1432,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
outDoc->endDescList(); outDoc->endDescList();
currentListIndent.pop(); currentListIndent.pop();
} }
<DocScan>{CMD}"author"{BN}+ { <DocScan>{CMD}"author"[s]?{BN}+ {
endArgumentList(); endArgumentList();
if (!inAuthorBlock) if (!inAuthorBlock)
{ {
...@@ -1441,7 +1441,8 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1441,7 +1441,8 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
currentListIndent.push("D"); currentListIndent.push("D");
outDoc->startDescList(); outDoc->startDescList();
outDoc->startBold(); outDoc->startBold();
scanString(theTranslator->trAuthors()+": "); bool singular = ((QString)yytext).find('s')==-1;
scanString(theTranslator->trAuthor(TRUE,singular)+": ");
outDoc->endBold(); outDoc->endBold();
outDoc->endDescTitle(); outDoc->endDescTitle();
outDoc->writeDescItem(); outDoc->writeDescItem();
......
...@@ -270,11 +270,11 @@ static void addRelatedPage(const char *name,const QCString &ptitle, ...@@ -270,11 +270,11 @@ static void addRelatedPage(const char *name,const QCString &ptitle,
static void addRelatedPage(Entry *root) static void addRelatedPage(Entry *root)
{ {
GroupDef *gd=0; GroupDef *gd=0;
QListIterator<QCString> sli(*root->groups); QListIterator<Grouping> gli(*root->groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
if (!s->isEmpty() && (gd=Doxygen::groupDict[*s])) break; if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname])) break;
} }
addRelatedPage(root->name,root->args,root->doc,root->anchors, addRelatedPage(root->name,root->args,root->doc,root->anchors,
root->fileName,root->startLine,root->todoId, root->fileName,root->startLine,root->todoId,
...@@ -392,6 +392,8 @@ static void buildGroupList(Entry *root) ...@@ -392,6 +392,8 @@ static void buildGroupList(Entry *root)
GroupDef *gd; GroupDef *gd;
if ((gd=Doxygen::groupDict[root->name])) if ((gd=Doxygen::groupDict[root->name]))
{
if ( root->groupdoctype==Entry::GROUPDOC_NORMAL )
{ {
warn(root->fileName,root->startLine, warn(root->fileName,root->startLine,
"Warning: group %s already documented. " "Warning: group %s already documented. "
...@@ -399,6 +401,24 @@ static void buildGroupList(Entry *root) ...@@ -399,6 +401,24 @@ static void buildGroupList(Entry *root)
root->name.data()); root->name.data());
} }
else else
{
if ( !gd->hasGroupTitle() )
gd->setGroupTitle( root->type );
else if ( root->type.length() > 0 && root->name != root->type && gd->groupTitle() != root->type )
warn( root->fileName,root->startLine,
"group %s: ignoring title \"%s\" that does not match old title \"%s\"\n",
root->name.data(), root->type.data(), gd->groupTitle() );
if ( gd->briefDescription().isEmpty() )
gd->setBriefDescription(root->brief);
if ( !root->doc.stripWhiteSpace().isEmpty() )
gd->setDocumentation( gd->documentation().isEmpty() ? root->doc :
gd->documentation() + "\n\n" + root->doc );
gd->addSectionsToDefinition(root->anchors);
gd->setRefItems(root->todoId,root->testId,root->bugId);
addGroupToGroups(root,gd);
}
}
else
{ {
gd = new GroupDef(root->fileName,root->startLine,root->name,root->type); gd = new GroupDef(root->fileName,root->startLine,root->name,root->type);
if (root->tagInfo) if (root->tagInfo)
...@@ -440,30 +460,6 @@ static void organizeSubGroups(Entry *root) ...@@ -440,30 +460,6 @@ static void organizeSubGroups(Entry *root)
} }
} }
static void addToGroupSections(Entry *root)
{
if (root->section==Entry::ADDGRPDOC_SEC && !root->name.isEmpty())
{
GroupDef *gd = Doxygen::groupDict[root->name];
if (gd)
{
gd->setDocumentation(gd->documentation()+"<p>"+root->brief+root->doc);
}
else
{
warn(root->fileName,root->startLine,
"Warning: ignoring addtogroup command for undefined "
"group `%s'.",root->name.data());
}
}
EntryListIterator eli(*root->sublist);
Entry *e;
for (;(e=eli.current());++eli)
{
addToGroupSections(e);
}
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
static void buildFileList(Entry *root) static void buildFileList(Entry *root)
...@@ -496,12 +492,12 @@ static void buildFileList(Entry *root) ...@@ -496,12 +492,12 @@ static void buildFileList(Entry *root)
fd->setBriefDescription(root->brief); fd->setBriefDescription(root->brief);
fd->addSectionsToDefinition(root->anchors); fd->addSectionsToDefinition(root->anchors);
fd->setRefItems(root->todoId,root->testId,root->bugId); fd->setRefItems(root->todoId,root->testId,root->bugId);
QListIterator<QCString> sli(*root->groups); QListIterator<Grouping> gli(*root->groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!s->isEmpty() && (gd=Doxygen::groupDict[*s])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]))
{ {
gd->addFile(fd); gd->addFile(fd);
//printf("File %s: in group %s\n",fd->name().data(),s->data()); //printf("File %s: in group %s\n",fd->name().data(),s->data());
...@@ -709,7 +705,7 @@ static void buildClassList(Entry *root) ...@@ -709,7 +705,7 @@ static void buildClassList(Entry *root)
!root->name.isEmpty() !root->name.isEmpty()
) )
{ {
QCString fullName=root->name.copy(); QCString fullName=removeRedundantWhiteSpace(root->name);
if (fullName.isEmpty()) if (fullName.isEmpty())
{ {
// this should not be called // this should not be called
...@@ -1103,12 +1099,12 @@ static void findUsingDirectives(Entry *root) ...@@ -1103,12 +1099,12 @@ static void findUsingDirectives(Entry *root)
nd->setBriefDescription(root->brief); nd->setBriefDescription(root->brief);
nd->addSectionsToDefinition(root->anchors); nd->addSectionsToDefinition(root->anchors);
QListIterator<QCString> sli(*root->groups); QListIterator<Grouping> gli(*root->groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!s->isEmpty() && (gd=Doxygen::groupDict[*s])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]))
gd->addNamespace(nd); gd->addNamespace(nd);
} }
...@@ -1448,12 +1444,12 @@ static MemberDef *addVariableToFile( ...@@ -1448,12 +1444,12 @@ static MemberDef *addVariableToFile(
// merge ingroup specifiers // merge ingroup specifiers
if (md->getGroupDef()==0 && root->groups->first()) if (md->getGroupDef()==0 && root->groups->first())
{ {
GroupDef *gd=Doxygen::groupDict[root->groups->first()->data()]; GroupDef *gd=Doxygen::groupDict[root->groups->first()->groupname.data()];
md->setGroupDef(gd); md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, root->doc.length() != 0);
} }
else if (md->getGroupDef()!=0 && root->groups->count()==0) else if (md->getGroupDef()!=0 && root->groups->count()==0)
{ {
root->groups->append(new QCString(md->getGroupDef()->name())); root->groups->append(new Grouping(md->getGroupDef()->name(), md->getGroupPri()));
} }
} }
} }
...@@ -1999,12 +1995,12 @@ static void buildMemberList(Entry *root) ...@@ -1999,12 +1995,12 @@ static void buildMemberList(Entry *root)
// merge ingroup specifiers // merge ingroup specifiers
if (md->getGroupDef()==0 && root->groups->first()) if (md->getGroupDef()==0 && root->groups->first())
{ {
GroupDef *gd=Doxygen::groupDict[root->groups->first()->data()]; GroupDef *gd=Doxygen::groupDict[root->groups->first()->groupname.data()];
md->setGroupDef(gd); md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, root->doc.length() != 0);
} }
else if (md->getGroupDef()!=0 && root->groups->count()==0) else if (md->getGroupDef()!=0 && root->groups->count()==0)
{ {
root->groups->append(new QCString(md->getGroupDef()->name())); root->groups->append(new Grouping(md->getGroupDef()->name(), md->getGroupPri()));
} }
} }
} }
...@@ -5103,9 +5099,7 @@ static void generatePageDocs() ...@@ -5103,9 +5099,7 @@ static void generatePageDocs()
else else
pageName=pi->name.lower(); pageName=pi->name.lower();
startFile(*outputList,pageName,pi->title); startFile(*outputList,pageName,pageName,pi->title);
startFile(*outputList,pageName,pi->title);
// save old generator state and write title only to Man generator // save old generator state and write title only to Man generator
outputList->pushGeneratorState(); outputList->pushGeneratorState();
...@@ -5190,7 +5184,7 @@ static void generateExampleDocs() ...@@ -5190,7 +5184,7 @@ static void generateExampleDocs()
{ {
msg("Generating docs for example %s...\n",pi->name.data()); msg("Generating docs for example %s...\n",pi->name.data());
QCString n=convertNameToFile(pi->name+"-example"); QCString n=convertNameToFile(pi->name+"-example");
startFile(*outputList,n,"Example Documentation"); startFile(*outputList,n,n,"Example Documentation");
startTitle(*outputList,n); startTitle(*outputList,n);
outputList->docify(pi->name); outputList->docify(pi->name);
endTitle(*outputList,n,0); endTitle(*outputList,n,0);
...@@ -5380,7 +5374,7 @@ static void generateSearchIndex() ...@@ -5380,7 +5374,7 @@ static void generateSearchIndex()
//outputList->generateExternalIndex(); //outputList->generateExternalIndex();
outputList->pushGeneratorState(); outputList->pushGeneratorState();
outputList->disableAllBut(OutputGenerator::Html); outputList->disableAllBut(OutputGenerator::Html);
startFile(*outputList,"header.html","Search Engine",TRUE); startFile(*outputList,"header.html",0,"Search Engine",TRUE);
outputList->endPlainFile(); outputList->endPlainFile();
outputList->startPlainFile("footer.html"); outputList->startPlainFile("footer.html");
endFile(*outputList,TRUE); endFile(*outputList,TRUE);
...@@ -6483,7 +6477,6 @@ void parseInput() ...@@ -6483,7 +6477,6 @@ void parseInput()
msg("Building group list...\n"); msg("Building group list...\n");
buildGroupList(root); buildGroupList(root);
organizeSubGroups(root); organizeSubGroups(root);
addToGroupSections(root);
msg("Building namespace list...\n"); msg("Building namespace list...\n");
buildNamespaceList(root); buildNamespaceList(root);
......
...@@ -29,7 +29,7 @@ Entry::Entry() ...@@ -29,7 +29,7 @@ Entry::Entry()
sublist->setAutoDelete(TRUE); sublist->setAutoDelete(TRUE);
extends = new QList<BaseInfo>; extends = new QList<BaseInfo>;
extends->setAutoDelete(TRUE); extends->setAutoDelete(TRUE);
groups = new QList<QCString>; groups = new QList<Grouping>;
groups->setAutoDelete(TRUE); groups->setAutoDelete(TRUE);
anchors = new QList<QCString>; anchors = new QList<QCString>;
anchors->setAutoDelete(TRUE); anchors->setAutoDelete(TRUE);
...@@ -40,6 +40,7 @@ Entry::Entry() ...@@ -40,6 +40,7 @@ Entry::Entry()
mtArgList = 0; mtArgList = 0;
mGrpId = -1; mGrpId = -1;
tagInfo = 0; tagInfo = 0;
groupdoctype = GROUPDOC_NORMAL;
reset(); reset();
} }
...@@ -82,7 +83,7 @@ Entry::Entry(const Entry &e) ...@@ -82,7 +83,7 @@ Entry::Entry(const Entry &e)
sublist->setAutoDelete(TRUE); sublist->setAutoDelete(TRUE);
extends = new QList<BaseInfo>; extends = new QList<BaseInfo>;
extends->setAutoDelete(TRUE); extends->setAutoDelete(TRUE);
groups = new QList<QCString>; groups = new QList<Grouping>;
groups->setAutoDelete(TRUE); groups->setAutoDelete(TRUE);
anchors = new QList<QCString>; anchors = new QList<QCString>;
anchors->setAutoDelete(TRUE); anchors->setAutoDelete(TRUE);
...@@ -91,6 +92,7 @@ Entry::Entry(const Entry &e) ...@@ -91,6 +92,7 @@ Entry::Entry(const Entry &e)
//printf("Entry::Entry(copy) tArgList=0\n"); //printf("Entry::Entry(copy) tArgList=0\n");
tArgList = 0; tArgList = 0;
mtArgList = 0; mtArgList = 0;
groupdoctype = e.groupdoctype;
// deep copy of the child entry list // deep copy of the child entry list
QListIterator<Entry> eli(*e.sublist); QListIterator<Entry> eli(*e.sublist);
...@@ -109,14 +111,15 @@ Entry::Entry(const Entry &e) ...@@ -109,14 +111,15 @@ Entry::Entry(const Entry &e)
} }
// deep copy group list // deep copy group list
QListIterator<QCString> sli(*e.groups); QListIterator<Grouping> gli(*e.groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
groups->append(new QCString(*s)); groups->append(new Grouping(*g));
} }
QListIterator<QCString> sli2(*e.anchors); QListIterator<QCString> sli2(*e.anchors);
QCString *s;
for (;(s=sli2.current());++sli2) for (;(s=sli2.current());++sli2)
{ {
anchors->append(new QCString(*s)); anchors->append(new QCString(*s));
...@@ -234,6 +237,7 @@ void Entry::reset() ...@@ -234,6 +237,7 @@ void Entry::reset()
memSpec = 0; memSpec = 0;
subGrouping = TRUE; subGrouping = TRUE;
protection = Public; protection = Public;
groupdoctype = GROUPDOC_NORMAL;
sublist->clear(); sublist->clear();
extends->clear(); extends->clear();
groups->clear(); groups->clear();
...@@ -270,14 +274,15 @@ int Entry::getSize() ...@@ -270,14 +274,15 @@ int Entry::getSize()
size+=bi->name.length()+1+sizeof(bi->prot)+sizeof(bi->virt); size+=bi->name.length()+1+sizeof(bi->prot)+sizeof(bi->virt);
bi=extends->next(); bi=extends->next();
} }
QCString *s=groups->first(); Grouping *g=groups->first();
while (s) while (g)
{ {
size+=sizeof(QLNode); size+=sizeof(QLNode);
size+=s->length()+1; size+=g->groupname.length()+1;
s=groups->next(); size+=sizeof(g->pri);
g=groups->next();
} }
s=anchors->first(); QCString *s=anchors->first();
while (s) while (s)
{ {
size+=sizeof(QLNode); size+=sizeof(QLNode);
......
...@@ -121,6 +121,53 @@ struct TagInfo ...@@ -121,6 +121,53 @@ struct TagInfo
QCString anchor; QCString anchor;
}; };
struct Grouping {
typedef enum {
GROUPING_LOWEST,
GROUPING_AUTO_WEAK =
GROUPING_LOWEST, //!< membership in group was defined via @weakgroup @{ @}
GROUPING_AUTO_ADD, //!< membership in group was defined via @add[to]group @{ @}
GROUPING_AUTO_DEF, //!< membership in group was defined via @defgroup @{ @}
GROUPING_AUTO_HIGHEST =
GROUPING_AUTO_DEF,
GROUPING_INGROUP, //!< membership in group was defined by @ingroup
GROUPING_HIGHEST =
GROUPING_INGROUP
} GroupPri_t;
static const char *getGroupPriName( GroupPri_t priority )
{
switch( priority )
{
case GROUPING_AUTO_WEAK:
return "@weakgroup";
break;
case GROUPING_AUTO_ADD:
return "@addtogroup";
break;
case GROUPING_AUTO_DEF:
return "@defgroup";
break;
case GROUPING_INGROUP:
return "@ingroup";
break;
default:
return "???";
break;
}
}
Grouping( const char *gn, GroupPri_t p ) :
groupname(gn),
pri(p) {}
Grouping( const Grouping &g ) :
groupname(g.groupname),
pri(g.pri) {}
QCString groupname; //!< name of the group
GroupPri_t pri; //!< priority of this definition
};
/*! \brief Represents an unstructured piece of information, about an /*! \brief Represents an unstructured piece of information, about an
* entity found in the sources. * entity found in the sources.
* *
...@@ -176,8 +223,7 @@ class Entry ...@@ -176,8 +223,7 @@ class Entry
MAINPAGEDOC_SEC = 0x01200000, MAINPAGEDOC_SEC = 0x01200000,
MEMBERGRP_SEC = 0x01300000, MEMBERGRP_SEC = 0x01300000,
USINGDECL_SEC = 0x01400000, USINGDECL_SEC = 0x01400000,
PACKAGE_SEC = 0x01500000, PACKAGE_SEC = 0x01500000
ADDGRPDOC_SEC = 0x01600000
}; };
enum MemberSpecifier enum MemberSpecifier
{ {
...@@ -232,7 +278,7 @@ class Entry ...@@ -232,7 +278,7 @@ class Entry
int mGrpId; //!< member group id int mGrpId; //!< member group id
QList<Entry> *sublist; //!< entries that are children of this one QList<Entry> *sublist; //!< entries that are children of this one
QList<BaseInfo> *extends; //!< list of base classes QList<BaseInfo> *extends; //!< list of base classes
QList<QCString> *groups; //!< list of groups this entry belongs to QList<Grouping> *groups; //!< list of groups this entry belongs to
QList<QCString> *anchors; //!< list of anchors defined in this entry QList<QCString> *anchors; //!< list of anchors defined in this entry
QCString fileName; //!< file this entry was extracted from QCString fileName; //!< file this entry was extracted from
int startLine; //!< start line of entry in the source int startLine; //!< start line of entry in the source
...@@ -241,6 +287,47 @@ class Entry ...@@ -241,6 +287,47 @@ class Entry
int bugId; //!< id of the bug list item of this entry int bugId; //!< id of the bug list item of this entry
TagInfo *tagInfo; //!< tag file info TagInfo *tagInfo; //!< tag file info
static int num; //!< counts the total number of entries static int num; //!< counts the total number of entries
enum {
GROUPDOC_NORMAL, //<! @defgroup
GROUPDOC_ADD, //<! @addgroup
GROUPDOC_WEAK //<! @weakgroup
} groupdoctype; //!< kind of group
/// return the command name used to define GROUPDOC_SEC
const char *groupdoccmd() const
{
switch( this->groupdoctype ) {
case GROUPDOC_NORMAL:
return "\\defgroup";
break;
case GROUPDOC_ADD:
return "\\addgroup";
break;
case GROUPDOC_WEAK:
return "\\weakgroup";
break;
default:
return "unknown group command";
}
}
Grouping::GroupPri_t groupingpri() const
{
if( this->section != GROUPDOC_SEC ) {
return Grouping::GROUPING_LOWEST;
}
switch( this->groupdoctype ) {
case GROUPDOC_NORMAL:
return Grouping::GROUPING_AUTO_DEF;
break;
case GROUPDOC_ADD:
return Grouping::GROUPING_AUTO_ADD;
break;
case GROUPDOC_WEAK:
return Grouping::GROUPING_AUTO_WEAK;
break;
default:
return Grouping::GROUPING_LOWEST;
}
}
private: private:
Entry &operator=(const Entry &); Entry &operator=(const Entry &);
} ; } ;
......
...@@ -117,7 +117,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -117,7 +117,7 @@ void FileDef::writeDocumentation(OutputList &ol)
//printf("WriteDocumentation diskname=%s\n",diskname.data()); //printf("WriteDocumentation diskname=%s\n",diskname.data());
QCString pageTitle=name()+" File Reference"; QCString pageTitle=name()+" File Reference";
startFile(ol,getOutputFileBase(),pageTitle); startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
parseText(ol,theTranslator->trFileReference(docname)); parseText(ol,theTranslator->trFileReference(docname));
endTitle(ol,getOutputFileBase(),docName()); endTitle(ol,getOutputFileBase(),docName());
...@@ -393,7 +393,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -393,7 +393,7 @@ void FileDef::writeDocumentation(OutputList &ol)
// write Author section (Man only) // write Author section (Man only)
ol.disableAllBut(OutputGenerator::Man); ol.disableAllBut(OutputGenerator::Man);
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trAuthor()); parseText(ol,theTranslator->trAuthor(TRUE,TRUE));
ol.endGroupHeader(); ol.endGroupHeader();
parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
ol.enableAll(); ol.enableAll();
...@@ -411,7 +411,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -411,7 +411,7 @@ void FileDef::writeDocumentation(OutputList &ol)
void FileDef::writeSource(OutputList &ol) void FileDef::writeSource(OutputList &ol)
{ {
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,getSourceFileBase(),docname+" Source File"); startFile(ol,getSourceFileBase(),0,docname+" Source File");
startTitle(ol,0); startTitle(ol,0);
parseText(ol,docname); parseText(ol,docname);
endTitle(ol,0,0); endTitle(ol,0,0);
......
...@@ -174,7 +174,7 @@ void FormulaList::generateBitmaps(const char *path) ...@@ -174,7 +174,7 @@ void FormulaList::generateBitmaps(const char *path)
#ifdef _WIN32 #ifdef _WIN32
char gsArgs[256]; char gsArgs[256];
sprintf(gsArgs,"-q -g%dx%d -r%dx%dx -sDEVICE=ppmraw " sprintf(gsArgs,"-q -g%dx%d -r%dx%dx -sDEVICE=ppmraw "
"-sOutputFile=%s.pnm -DNOPAUSE -- %s.ps", "-sOutputFile=%s.pnm -dNOPAUSE -dBATCH -- %s.ps",
gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72), gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72),
formBase.data(),formBase.data() formBase.data(),formBase.data()
); );
...@@ -210,7 +210,7 @@ void FormulaList::generateBitmaps(const char *path) ...@@ -210,7 +210,7 @@ void FormulaList::generateBitmaps(const char *path)
#else #else
char gsArgs[4096]; char gsArgs[4096];
sprintf(gsArgs,"-q -g%dx%d -r%dx%dx -sDEVICE=ppmraw " sprintf(gsArgs,"-q -g%dx%d -r%dx%dx -sDEVICE=ppmraw "
"-sOutputFile=%s.pnm -DNOPAUSE -- %s.ps", "-sOutputFile=%s.pnm -dNOPAUSE -dBATCH -- %s.ps",
gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72), gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72),
formBase.data(),formBase.data() formBase.data(),formBase.data()
); );
......
...@@ -44,14 +44,8 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) : ...@@ -44,14 +44,8 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) :
exampleDict = new PageSDict(257); exampleDict = new PageSDict(257);
allMemberList = new MemberList; allMemberList = new MemberList;
allMemberNameInfoDict = new MemberNameInfoDict(1009); allMemberNameInfoDict = new MemberNameInfoDict(1009);
if (t)
title = t;
else
{
title = na;
title.at(0)=toupper(title.at(0));
}
fileName = (QCString)"group_"+na; fileName = (QCString)"group_"+na;
setGroupTitle( t );
memberGroupList = new MemberGroupList; memberGroupList = new MemberGroupList;
memberGroupList->setAutoDelete(TRUE); memberGroupList->setAutoDelete(TRUE);
memberGroupDict = new MemberGroupDict(1009); memberGroupDict = new MemberGroupDict(1009);
...@@ -90,6 +84,22 @@ GroupDef::~GroupDef() ...@@ -90,6 +84,22 @@ GroupDef::~GroupDef()
delete memberGroupDict; delete memberGroupDict;
} }
void GroupDef::setGroupTitle( const char *t )
{
if ( t && strlen(t) )
{
title = t;
titleSet = TRUE;
}
else
{
title = name();
title.at(0)=toupper(title.at(0));
titleSet = FALSE;
}
}
void GroupDef::distributeMemberGroupDocumentation() void GroupDef::distributeMemberGroupDocumentation()
{ {
MemberGroupListIterator mgli(*memberGroupList); MemberGroupListIterator mgli(*memberGroupList);
...@@ -158,7 +168,7 @@ void GroupDef::addMembersToMemberGroup() ...@@ -158,7 +168,7 @@ void GroupDef::addMembersToMemberGroup()
void GroupDef::insertMember(MemberDef *md,bool docOnly) void GroupDef::insertMember(MemberDef *md,bool docOnly)
{ {
//printf("GroupDef::insertMember(%s)\n",md->name().data()); // fprintf(stderr, "GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
MemberNameInfo *mni=0; MemberNameInfo *mni=0;
if ((mni=(*allMemberNameInfoDict)[md->name()])) if ((mni=(*allMemberNameInfoDict)[md->name()]))
{ // member with this name already found { // member with this name already found
...@@ -237,6 +247,70 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -237,6 +247,70 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
//addMemberToGroup(md,groupId); //addMemberToGroup(md,groupId);
} }
void GroupDef::removeMember(MemberDef *md)
{
// fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data());
MemberNameInfo *mni = allMemberNameInfoDict->find(md->name());
if (mni)
{
MemberNameInfoIterator mnii(*mni);
while( mnii.current() )
{
if( mnii.current()->memberDef == md )
{
mni->remove(mnii.current());
break;
}
++mnii;
}
if( mni->isEmpty() )
{
allMemberNameInfoDict->remove(md->name());
delete mni;
}
allMemberList->remove(md);
switch(md->memberType())
{
case MemberDef::Variable:
decVarMembers.remove(md);
docVarMembers.remove(md);
break;
case MemberDef::Function:
decFuncMembers.remove(md);
docFuncMembers.remove(md);
break;
case MemberDef::Typedef:
decTypedefMembers.remove(md);
docTypedefMembers.remove(md);
break;
case MemberDef::Enumeration:
decEnumMembers.remove(md);
docEnumMembers.remove(md);
break;
case MemberDef::EnumValue:
decEnumValMembers.remove(md);
docEnumValMembers.remove(md);
break;
case MemberDef::Prototype:
decProtoMembers.remove(md);
docProtoMembers.remove(md);
break;
case MemberDef::Define:
decDefineMembers.remove(md);
docDefineMembers.remove(md);
break;
default:
err("GroupDef::removeMember(): unexpected member remove in file!\n");
}
}
}
bool GroupDef::containsGroup(const GroupDef *def)
{
return groupList->find(def) >= 0;
}
void GroupDef::addGroup(const GroupDef *def) void GroupDef::addGroup(const GroupDef *def)
{ {
if (Config_getBool("SORT_MEMBER_DOCS")) if (Config_getBool("SORT_MEMBER_DOCS"))
...@@ -280,7 +354,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -280,7 +354,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
//ol.disable(OutputGenerator::Man); //ol.disable(OutputGenerator::Man);
startFile(ol,getOutputFileBase(),title); startFile(ol,getOutputFileBase(),name(),title);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
ol.docify(title); ol.docify(title);
endTitle(ol,getOutputFileBase(),title); endTitle(ol,getOutputFileBase(),title);
...@@ -510,12 +584,12 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -510,12 +584,12 @@ void GroupDef::writeDocumentation(OutputList &ol)
void addClassToGroups(Entry *root,ClassDef *cd) void addClassToGroups(Entry *root,ClassDef *cd)
{ {
QListIterator<QCString> sli(*root->groups); QListIterator<Grouping> gli(*root->groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!s->isEmpty() && (gd=Doxygen::groupDict[*s])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]))
{ {
gd->addClass(cd); gd->addClass(cd);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data()); //printf("Compound %s: in group %s\n",cd->name().data(),s->data());
...@@ -526,13 +600,13 @@ void addClassToGroups(Entry *root,ClassDef *cd) ...@@ -526,13 +600,13 @@ void addClassToGroups(Entry *root,ClassDef *cd)
void addNamespaceToGroups(Entry *root,NamespaceDef *nd) void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
{ {
//printf("root->groups->count()=%d\n",root->groups->count()); //printf("root->groups->count()=%d\n",root->groups->count());
QListIterator<QCString> sli(*root->groups); QListIterator<Grouping> gli(*root->groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
//printf("group `%s'\n",s->data()); //printf("group `%s'\n",s->data());
if (!s->isEmpty() && (gd=Doxygen::groupDict[*s])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]))
{ {
gd->addNamespace(nd); gd->addNamespace(nd);
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data()); //printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
...@@ -542,12 +616,13 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd) ...@@ -542,12 +616,13 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
void addGroupToGroups(Entry *root,GroupDef *subGroup) void addGroupToGroups(Entry *root,GroupDef *subGroup)
{ {
QListIterator<QCString> sli(*root->groups); QListIterator<Grouping> gli(*root->groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!s->isEmpty() && (gd=Doxygen::groupDict[*s])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]) &&
!gd->containsGroup(subGroup) )
{ {
gd->addGroup(subGroup); gd->addGroup(subGroup);
subGroup->addParentGroup(gd); subGroup->addParentGroup(gd);
...@@ -555,34 +630,87 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup) ...@@ -555,34 +630,87 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
} }
} }
/*! Add a member to all groups it is contained in */ /*! Add a member to the group with the highest priority */
void addMemberToGroups(Entry *root,MemberDef *md) void addMemberToGroups(Entry *root,MemberDef *md)
{ {
QListIterator<QCString> sli(*root->groups); //printf(" Root 0x%p = %s, md 0x%p %s\n", root, root->name.data(), md, md->name().data() );
QCString *s; QListIterator<Grouping> gli(*root->groups);
for (;(s=sli.current());++sli) Grouping *g;
{
//printf("addMemberToGroups(group=%s,member=%s)\n",s->data(),md->name().data()); // Search entry's group list for group with highest pri.
GroupDef *gd=0; Grouping::GroupPri_t pri = Grouping::GROUPING_LOWEST;
if (!s->isEmpty() && (gd=Doxygen::groupDict[*s])) GroupDef *fgd=0;
for (;(g=gli.current());++gli)
{
GroupDef *gd;
if (!g->groupname.isEmpty() &&
(gd=Doxygen::groupDict[g->groupname]) &&
g->pri >= pri)
{
if( fgd && g->pri == pri ) {
warn(root->fileName.data(), root->startLine,
"Warning: Member %s found in multiple %s groups! "
"The member will be put in group %s, and not in group %s",
md->name().data(), Grouping::getGroupPriName( pri ),
gd->name().data(), fgd->name().data()
);
}
fgd = gd;
pri = g->pri;
}
}
// put member into group defined by this entry?
if( fgd )
{ {
GroupDef *mgd = md->getGroupDef(); GroupDef *mgd = md->getGroupDef();
bool insertit = FALSE;
if (mgd==0) if (mgd==0)
insertit = TRUE;
else if (mgd!=fgd)
{ {
gd->insertMember(md); bool moveit = FALSE;
md->setGroupDef(gd);
ClassDef *cd = md->getClassDefOfAnonymousType(); // move member from one group to another if
if (cd) cd->setGroupDefForAllMembers(gd); // - the new one has a higher priority
} // - the new entry has the same priority, but with docs where the old one had no docs
else if (mgd!=gd) if( md->getGroupPri() < pri )
moveit = TRUE;
else
{ {
warn(mgd->getDefFileName(),mgd->getDefLine(), if( md->getGroupPri() == pri )
"Warning: Member %s found in multiple groups.!\n" {
"The member will be put in group %s, and not in group %s",
md->name().data(),mgd->name().data(),gd->name().data() if( root->doc.length() != 0 && !md->getGroupHasDocs() )
moveit = TRUE;
else if( root->doc.length() != 0 && md->getGroupHasDocs() )
{
warn(md->getGroupFileName(),md->getGroupStartLine(),
"Warning: Member documentation for %s found several times in %s groups!\n"
"%s:%d: The member will remain in group %s, and won't be put into group %s",
md->name().data(), Grouping::getGroupPriName( pri ),
root->fileName.data(), root->startLine,
mgd->name().data(),
fgd->name().data()
); );
} }
//printf("Member %s: in group %s\n",md->name().data(),s->data()); }
}
if( moveit )
{
mgd->removeMember(md);
insertit = TRUE;
}
}
if( insertit )
{
fgd->insertMember(md);
md->setGroupDef(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
ClassDef *cd = md->getClassDefOfAnonymousType();
if (cd) cd->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
} }
} }
} }
...@@ -590,12 +718,12 @@ void addMemberToGroups(Entry *root,MemberDef *md) ...@@ -590,12 +718,12 @@ void addMemberToGroups(Entry *root,MemberDef *md)
void addExampleToGroups(Entry *root,PageInfo *eg) void addExampleToGroups(Entry *root,PageInfo *eg)
{ {
QListIterator<QCString> sli(*root->groups); QListIterator<Grouping> gli(*root->groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!s->isEmpty() && (gd=Doxygen::groupDict[*s])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]))
{ {
gd->addExample(eg); gd->addExample(eg);
//printf("Example %s: in group %s\n",eg->name().data(),s->data()); //printf("Example %s: in group %s\n",eg->name().data(),s->data());
......
...@@ -48,6 +48,8 @@ class GroupDef : public Definition ...@@ -48,6 +48,8 @@ class GroupDef : public Definition
DefType definitionType() { return TypeGroup; } DefType definitionType() { return TypeGroup; }
QCString getOutputFileBase() const; QCString getOutputFileBase() const;
const char *groupTitle() const { return title; } const char *groupTitle() const { return title; }
void setGroupTitle( const char *newtitle );
bool hasGroupTitle( ) { return titleSet; }
void addFile(const FileDef *def); void addFile(const FileDef *def);
void addClass(const ClassDef *def); void addClass(const ClassDef *def);
void addNamespace(const NamespaceDef *def); void addNamespace(const NamespaceDef *def);
...@@ -56,6 +58,8 @@ class GroupDef : public Definition ...@@ -56,6 +58,8 @@ class GroupDef : public Definition
void addPage(PageInfo *def); // pages in this group void addPage(PageInfo *def); // pages in this group
void addExample(const PageInfo *def); // examples in this group void addExample(const PageInfo *def); // examples in this group
void insertMember(MemberDef *def,bool docOnly=FALSE); void insertMember(MemberDef *def,bool docOnly=FALSE);
void removeMember(MemberDef *md);
bool containsGroup(const GroupDef *def); // true if def is already a subgroup
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
int countMembers() const; int countMembers() const;
bool isLinkableInProject() bool isLinkableInProject()
...@@ -82,6 +86,7 @@ class GroupDef : public Definition ...@@ -82,6 +86,7 @@ class GroupDef : public Definition
private: private:
QCString title; // title of the group QCString title; // title of the group
bool titleSet; // true if title is not the same as the name
QCString fileName; // base name of the generated file QCString fileName; // base name of the generated file
FileList *fileList; // list of files in the group FileList *fileList; // list of files in the group
ClassSDict *classSDict; // list of classes in the group ClassSDict *classSDict; // list of classes in the group
...@@ -115,7 +120,6 @@ class GroupDef : public Definition ...@@ -115,7 +120,6 @@ class GroupDef : public Definition
/* user defined member groups */ /* user defined member groups */
MemberGroupList *memberGroupList; // list of member groups in this group MemberGroupList *memberGroupList; // list of member groups in this group
MemberGroupDict *memberGroupDict; MemberGroupDict *memberGroupDict;
}; };
class GroupList : public QList<GroupDef> class GroupList : public QList<GroupDef>
......
...@@ -101,7 +101,7 @@ static void writeDefaultHeaderFile(QTextStream &t,const char *title, ...@@ -101,7 +101,7 @@ static void writeDefaultHeaderFile(QTextStream &t,const char *title,
bool external) bool external)
{ {
t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
"<html><head><meta name=\"robots\" content=\"noindex\">\n" "<html><head>" /*"<meta name=\"robots\" content=\"noindex\">\n"*/
"<meta http-equiv=\"Content-Type\" content=\"text/html;charset=" "<meta http-equiv=\"Content-Type\" content=\"text/html;charset="
<< theTranslator->idLanguageCharset() << "\">\n" << theTranslator->idLanguageCharset() << "\">\n"
"<title>" << title << "</title>\n"; "<title>" << title << "</title>\n";
...@@ -151,7 +151,8 @@ void HtmlGenerator::writeFooterFile(QFile &file) ...@@ -151,7 +151,8 @@ void HtmlGenerator::writeFooterFile(QFile &file)
} }
void HtmlGenerator::startFile(const char *name,const char *title,bool external) void HtmlGenerator::startFile(const char *name,const char *,
const char *title,bool external)
{ {
QCString fileName=name; QCString fileName=name;
lastTitle=title; lastTitle=title;
......
...@@ -45,7 +45,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -45,7 +45,8 @@ class HtmlGenerator : public OutputGenerator
OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; } OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; }
//void generateExternalIndex(); //void generateExternalIndex();
void startFile(const char *name,const char *title,bool external); void startFile(const char *name,const char *manName,
const char *title,bool external);
void writeFooter(int,bool); void writeFooter(int,bool);
void endFile(); void endFile();
void clearBuffer(); void clearBuffer();
......
...@@ -300,9 +300,10 @@ void endTitle(OutputList &ol,const char *fileName,const char *name) ...@@ -300,9 +300,10 @@ void endTitle(OutputList &ol,const char *fileName,const char *name)
ol.endTitleHead(fileName,name); ol.endTitleHead(fileName,name);
} }
void startFile(OutputList &ol,const char *name,const char *title,bool external) void startFile(OutputList &ol,const char *name,const char *manName,
const char *title,bool external)
{ {
ol.startFile(name,title,external); ol.startFile(name,manName,title,external);
if (!Config_getBool("DISABLE_INDEX")) writeQuickLinks(ol,TRUE,external); if (!Config_getBool("DISABLE_INDEX")) writeQuickLinks(ol,TRUE,external);
} }
...@@ -634,7 +635,7 @@ void writeHierarchicalIndex(OutputList &ol) ...@@ -634,7 +635,7 @@ void writeHierarchicalIndex(OutputList &ol)
if (hierarchyClasses==0) return; if (hierarchyClasses==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"hierarchy","Hierarchical Index"); startFile(ol,"hierarchy",0,"Hierarchical Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trClassHierarchy(); QCString title = theTranslator->trClassHierarchy();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -684,7 +685,7 @@ void writeGraphicalClassHierarchy(OutputList &ol) ...@@ -684,7 +685,7 @@ void writeGraphicalClassHierarchy(OutputList &ol)
{ {
if (hierarchyClasses==0) return; if (hierarchyClasses==0) return;
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"inherits","Graphical Class Hierarchy"); startFile(ol,"inherits",0,"Graphical Class Hierarchy");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trGraphicalHierarchy(); QCString title = theTranslator->trGraphicalHierarchy();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -763,7 +764,7 @@ void writeFileIndex(OutputList &ol) ...@@ -763,7 +764,7 @@ void writeFileIndex(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
if (documentedFiles==0) ol.disableAllBut(OutputGenerator::Html); if (documentedFiles==0) ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"files","File Index"); startFile(ol,"files",0,"File Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trFileList(); QCString title = theTranslator->trFileList();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -982,7 +983,7 @@ void writeNamespaceIndex(OutputList &ol) ...@@ -982,7 +983,7 @@ void writeNamespaceIndex(OutputList &ol)
if (documentedNamespaces==0) return; if (documentedNamespaces==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"namespaces","Namespace Index"); startFile(ol,"namespaces",0,"Namespace Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trNamespaceList(); QCString title = theTranslator->trNamespaceList();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -1324,7 +1325,7 @@ void writeAlphabeticalIndex(OutputList &ol) ...@@ -1324,7 +1325,7 @@ void writeAlphabeticalIndex(OutputList &ol)
if (annotatedClasses==0) return; if (annotatedClasses==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"classes.html","Alphabetical index"); startFile(ol,"classes.html",0,"Alphabetical index");
startTitle(ol,0); startTitle(ol,0);
parseText(ol,Config_getString("PROJECT_NAME")+" "+theTranslator->trCompoundIndex()); parseText(ol,Config_getString("PROJECT_NAME")+" "+theTranslator->trCompoundIndex());
endTitle(ol,0,0); endTitle(ol,0,0);
...@@ -1345,7 +1346,7 @@ void writeAnnotatedIndex(OutputList &ol) ...@@ -1345,7 +1346,7 @@ void writeAnnotatedIndex(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"annotated","Annotated Index"); startFile(ol,"annotated",0,"Annotated Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trCompoundList(); QCString title = theTranslator->trCompoundList();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -1396,7 +1397,7 @@ void writePackageIndex(OutputList &ol) ...@@ -1396,7 +1397,7 @@ void writePackageIndex(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"packages","Package Index"); startFile(ol,"packages",0,"Package Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trPackageList(); QCString title = theTranslator->trPackageList();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -1588,7 +1589,7 @@ void writeMemberIndex(OutputList &ol) ...@@ -1588,7 +1589,7 @@ void writeMemberIndex(OutputList &ol)
if (documentedMembers==0) return; if (documentedMembers==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"functions","Compound Member Index"); startFile(ol,"functions",0,"Compound Member Index");
QCString title = theTranslator->trCompoundMembers(); QCString title = theTranslator->trCompoundMembers();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title; QCString ftvHelpTitle = title;
...@@ -1845,7 +1846,7 @@ void writeFileMemberIndex(OutputList &ol) ...@@ -1845,7 +1846,7 @@ void writeFileMemberIndex(OutputList &ol)
if (documentedFunctions==0) return; if (documentedFunctions==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"globals","File Member Index"); startFile(ol,"globals",0,"File Member Index");
QCString title = theTranslator->trFileMembers(); QCString title = theTranslator->trFileMembers();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title; QCString ftvHelpTitle = title;
...@@ -1884,7 +1885,7 @@ void writeNamespaceMemberIndex(OutputList &ol) ...@@ -1884,7 +1885,7 @@ void writeNamespaceMemberIndex(OutputList &ol)
if (documentedNamespaceMembers==0) return; if (documentedNamespaceMembers==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"namespacemembers","Namespace Member Index"); startFile(ol,"namespacemembers",0,"Namespace Member Index");
QCString title = theTranslator->trNamespaceMembers(); QCString title = theTranslator->trNamespaceMembers();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title; QCString ftvHelpTitle = title;
...@@ -1923,7 +1924,7 @@ void writeExampleIndex(OutputList &ol) ...@@ -1923,7 +1924,7 @@ void writeExampleIndex(OutputList &ol)
if (Doxygen::exampleSDict->count()==0) return; if (Doxygen::exampleSDict->count()==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"examples","Example Index"); startFile(ol,"examples",0,"Example Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trExamples(); QCString title = theTranslator->trExamples();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -2028,7 +2029,7 @@ void writePageIndex(OutputList &ol) ...@@ -2028,7 +2029,7 @@ void writePageIndex(OutputList &ol)
if (indexedPages==0) return; if (indexedPages==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"pages","Page Index"); startFile(ol,"pages",0,"Page Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trRelatedPages(); QCString title = theTranslator->trRelatedPages();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -2132,7 +2133,7 @@ void writeGraphInfo(OutputList &ol) ...@@ -2132,7 +2133,7 @@ void writeGraphInfo(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
generateGraphLegend(Config_getString("HTML_OUTPUT")); generateGraphLegend(Config_getString("HTML_OUTPUT"));
startFile(ol,"graph_legend","Graph Legend"); startFile(ol,"graph_legend",0,"Graph Legend");
startTitle(ol,0); startTitle(ol,0);
parseText(ol,theTranslator->trLegendTitle()); parseText(ol,theTranslator->trLegendTitle());
endTitle(ol,0,0); endTitle(ol,0,0);
...@@ -2523,7 +2524,7 @@ void writeGroupIndex(OutputList &ol) ...@@ -2523,7 +2524,7 @@ void writeGroupIndex(OutputList &ol)
if (documentedGroups==0) return; if (documentedGroups==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"modules","Module Index"); startFile(ol,"modules",0,"Module Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trModules(); QCString title = theTranslator->trModules();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
...@@ -2607,7 +2608,7 @@ void writeIndex(OutputList &ol) ...@@ -2607,7 +2608,7 @@ void writeIndex(OutputList &ol)
QCString indexName="index"; QCString indexName="index";
if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"; if (Config_getBool("GENERATE_TREEVIEW")) indexName="main";
ol.startFile(indexName,title,FALSE); ol.startFile(indexName,0,title,FALSE);
bool &generateHtml = Config_getBool("GENERATE_HTML") ; bool &generateHtml = Config_getBool("GENERATE_HTML") ;
bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP"); bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
...@@ -2655,7 +2656,7 @@ void writeIndex(OutputList &ol) ...@@ -2655,7 +2656,7 @@ void writeIndex(OutputList &ol)
ol.enable(OutputGenerator::Latex); ol.enable(OutputGenerator::Latex);
ol.enable(OutputGenerator::RTF); ol.enable(OutputGenerator::RTF);
ol.startFile("refman",0,FALSE); ol.startFile("refman",0,0,FALSE);
ol.startIndexSection(isTitlePageStart); ol.startIndexSection(isTitlePageStart);
if (!Config_getString("LATEX_HEADER").isEmpty()) if (!Config_getString("LATEX_HEADER").isEmpty())
{ {
...@@ -2780,7 +2781,7 @@ void writeIndex(OutputList &ol) ...@@ -2780,7 +2781,7 @@ void writeIndex(OutputList &ol)
if (Doxygen::mainPage) if (Doxygen::mainPage)
{ {
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,Doxygen::mainPage->name,Doxygen::mainPage->title); startFile(ol,Doxygen::mainPage->name,0,Doxygen::mainPage->title);
//SectionInfo *si=0; //SectionInfo *si=0;
//if (!Doxygen::mainPage->title.isEmpty() && !Doxygen::mainPage->name.isEmpty() && //if (!Doxygen::mainPage->title.isEmpty() && !Doxygen::mainPage->name.isEmpty() &&
// (si=Doxygen::sectionDict[Doxygen::mainPage->name])!=0) // (si=Doxygen::sectionDict[Doxygen::mainPage->name])!=0)
......
...@@ -86,7 +86,8 @@ extern int documentedPackages; ...@@ -86,7 +86,8 @@ extern int documentedPackages;
void startTitle(OutputList &ol,const char *fileName); void startTitle(OutputList &ol,const char *fileName);
void endTitle(OutputList &ol,const char *fileName,const char *name); void endTitle(OutputList &ol,const char *fileName,const char *name);
void startFile(OutputList &ol,const char *name,const char *title,bool external=FALSE); void startFile(OutputList &ol,const char *name,const char *manName,
const char *title,bool external=FALSE);
void endFile(OutputList &ol,bool external=FALSE); void endFile(OutputList &ol,bool external=FALSE);
#endif #endif
...@@ -17,8 +17,10 @@ ...@@ -17,8 +17,10 @@
#include "message.h" #include "message.h"
#include "language.h" #include "language.h"
#include "translator.h"
#include "translator_en.h" #include "translator_en.h"
#if !defined(ENGLISH_ONLY) #if !defined(ENGLISH_ONLY)
#include "translator_adapter.h"
#include "translator_nl.h" #include "translator_nl.h"
#include "translator_se.h" #include "translator_se.h"
#include "translator_cz.h" #include "translator_cz.h"
......
...@@ -408,7 +408,7 @@ void LatexGenerator::writeStyleSheetFile(QFile &f) ...@@ -408,7 +408,7 @@ void LatexGenerator::writeStyleSheetFile(QFile &f)
writeDefaultStyleSheetPart3(t); writeDefaultStyleSheetPart3(t);
} }
void LatexGenerator::startFile(const char *name,const char *,bool) void LatexGenerator::startFile(const char *name,const char *,const char *,bool)
{ {
QCString fileName=name; QCString fileName=name;
if (fileName.right(4)!=".tex" && fileName.right(4)!=".sty") fileName+=".tex"; if (fileName.right(4)!=".tex" && fileName.right(4)!=".sty") fileName+=".tex";
......
...@@ -42,7 +42,8 @@ class LatexGenerator : public OutputGenerator ...@@ -42,7 +42,8 @@ class LatexGenerator : public OutputGenerator
bool isEnabled(OutputType o) { return (o==Latex && active); } bool isEnabled(OutputType o) { return (o==Latex && active); }
OutputGenerator *get(OutputType o) { return (o==Latex) ? this : 0; } OutputGenerator *get(OutputType o) { return (o==Latex) ? this : 0; }
void startFile(const char *name,const char *title, bool external); void startFile(const char *name,const char *manName,
const char *title, bool external);
void writeFooter(int,bool) {} void writeFooter(int,bool) {}
void endFile(); void endFile();
void clearBuffer(); void clearBuffer();
......
...@@ -142,9 +142,10 @@ SOURCES = ce_lex.cpp \ ...@@ -142,9 +142,10 @@ SOURCES = ce_lex.cpp \
util.cpp \ util.cpp \
version.cpp version.cpp
win32:TMAKE_CXXFLAGS += -DQT_NODLL win32:TMAKE_CXXFLAGS += -DQT_NODLL -Zm200
INCLUDEPATH += ../qtools INCLUDEPATH += ../qtools
win32:INCLUDEPATH += . win32:INCLUDEPATH += .
DESTDIR = ../lib DESTDIR = ../lib
TARGET = doxygen TARGET = doxygen
OBJECTS_DIR = ../objects OBJECTS_DIR = ../objects
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "config.h" #include "config.h"
#include "util.h" #include "util.h"
#include "doxygen.h" #include "doxygen.h"
#include <string.h>
static QCString getExtension() static QCString getExtension()
{ {
...@@ -94,10 +95,11 @@ void ManGenerator::init() ...@@ -94,10 +95,11 @@ void ManGenerator::init()
} }
} }
void ManGenerator::startFile(const char *name,const char *,bool) static QCString buildFileName(const char *name)
{ {
QCString fileName=name; QCString fileName=name;
#if 0
// TODO: do something sensible here. // TODO: do something sensible here.
if (fileName.left(6)=="class_") if (fileName.left(6)=="class_")
{ {
...@@ -129,11 +131,20 @@ void ManGenerator::startFile(const char *name,const char *,bool) ...@@ -129,11 +131,20 @@ void ManGenerator::startFile(const char *name,const char *,bool)
{ {
fileName=fileName.left(i); fileName=fileName.left(i);
} }
#endif
if (convertToQCString(fileName.right(2))!=Config_getString("MAN_EXTENSION")) if (convertToQCString(fileName.right(2))!=Config_getString("MAN_EXTENSION"))
{ {
fileName+=Config_getString("MAN_EXTENSION"); fileName+=Config_getString("MAN_EXTENSION");
} }
startPlainFile(fileName);
return fileName;
}
void ManGenerator::startFile(const char *,const char *manName,
const char *,bool)
{
startPlainFile( buildFileName( manName ) );
firstCol=TRUE; firstCol=TRUE;
} }
...@@ -361,6 +372,46 @@ void ManGenerator::startMemberDoc(const char *,const char *,const char *,const c ...@@ -361,6 +372,46 @@ void ManGenerator::startMemberDoc(const char *,const char *,const char *,const c
paragraph=FALSE; paragraph=FALSE;
} }
void ManGenerator::startDoxyAnchor(const char *fname,const char *,
const char *name)
{
const char *basename;
// something to be done?
if( !Config_getBool("MAN_LINKS") )
{
return; // no
}
// truncate after an (optional) ::
basename = strrchr( name, ':' );
if ( !basename )
{
basename = name;
}
else
{
basename++;
}
// only create file when it doesn't exist
QCString fileName=dir+"/"+buildFileName( basename );
QFile linkfile( fileName );
if ( !linkfile.open( IO_ReadOnly ) )
{
if ( linkfile.open( IO_WriteOnly ) )
{
QTextStream linkstream;
linkstream.setDevice(&linkfile);
#if QT_VERSION >= 200
linkstream.setEncoding(QTextStream::Latin1);
#endif
linkstream << ".so man" << getExtension() << "/" << buildFileName( fname ) << endl;
}
}
linkfile.close();
}
void ManGenerator::endMemberDoc() void ManGenerator::endMemberDoc()
{ {
t << "\""; t << "\"";
......
...@@ -40,7 +40,8 @@ class ManGenerator : public OutputGenerator ...@@ -40,7 +40,8 @@ class ManGenerator : public OutputGenerator
OutputGenerator *get(OutputType o) { return (o==Man) ? this : 0; } OutputGenerator *get(OutputType o) { return (o==Man) ? this : 0; }
static void init(); static void init();
void startFile(const char *name,const char *title,bool external); void startFile(const char *name,const char *manName,
const char *title,bool external);
void writeFooter(int,bool) {} void writeFooter(int,bool) {}
void endFile(); void endFile();
void clearBuffer(); void clearBuffer();
...@@ -125,7 +126,7 @@ class ManGenerator : public OutputGenerator ...@@ -125,7 +126,7 @@ class ManGenerator : public OutputGenerator
void writeChar(char c); void writeChar(char c);
void startMemberDoc(const char *,const char *,const char *,const char *); void startMemberDoc(const char *,const char *,const char *,const char *);
void endMemberDoc(); void endMemberDoc();
void startDoxyAnchor(const char *,const char *,const char *) {} void startDoxyAnchor(const char *,const char *,const char *);
void endDoxyAnchor(const char *,const char *) {} void endDoxyAnchor(const char *,const char *) {}
void startCodeAnchor(const char *) {} void startCodeAnchor(const char *) {}
void endCodeAnchor() {} void endCodeAnchor() {}
......
...@@ -1468,8 +1468,12 @@ QCString MemberDef::anchor() const ...@@ -1468,8 +1468,12 @@ QCString MemberDef::anchor() const
return anc; return anc;
} }
void MemberDef::setGroupDef(GroupDef *gd) void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
{ {
printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data()); //printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data());
group=gd; group=gd;
grouppri=pri;
groupFileName=fileName;
groupStartLine=startLine;
groupHasDocs=hasDocs;
} }
...@@ -84,11 +84,17 @@ class MemberDef : public Definition ...@@ -84,11 +84,17 @@ class MemberDef : public Definition
// scope query members // scope query members
ClassDef *getClassDef() const { return classDef; } ClassDef *getClassDef() const { return classDef; }
GroupDef *getGroupDef() const { return group; }
FileDef *getFileDef() const { return fileDef; } FileDef *getFileDef() const { return fileDef; }
NamespaceDef* getNamespaceDef() const { return nspace; } NamespaceDef* getNamespaceDef() const { return nspace; }
//Definition *getCompoundDef() const; //Definition *getCompoundDef() const;
// querying the grouping definition
GroupDef *getGroupDef() const { return group; }
Grouping::GroupPri_t getGroupPri() const { return grouppri; }
const char *getGroupFileName() const { return groupFileName; }
int getGroupStartLine() const { return groupStartLine; }
bool getGroupHasDocs() const { return groupHasDocs; }
// direct kind info // direct kind info
Protection protection() const { return prot; } Protection protection() const { return prot; }
Specifier virtualness() const { return virt; } Specifier virtualness() const { return virt; }
...@@ -137,7 +143,7 @@ class MemberDef : public Definition ...@@ -137,7 +143,7 @@ class MemberDef : public Definition
void setMaxInitLines(int lines) { userInitLines=lines; } void setMaxInitLines(int lines) { userInitLines=lines; }
void setMemberClass(ClassDef *cd) { classDef=cd; } void setMemberClass(ClassDef *cd) { classDef=cd; }
void setSectionList(MemberList *sl) { section=sl; } void setSectionList(MemberList *sl) { section=sl; }
void setGroupDef(GroupDef *gd); void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
void setExplicitExternal(bool b) { explExt=b; } void setExplicitExternal(bool b) { explExt=b; }
void makeRelated() { related=TRUE; } void makeRelated() { related=TRUE; }
...@@ -274,6 +280,11 @@ class MemberDef : public Definition ...@@ -274,6 +280,11 @@ class MemberDef : public Definition
// as its type then this is computed by // as its type then this is computed by
// getClassDefOfAnonymousType() and // getClassDefOfAnonymousType() and
// cached here. // cached here.
Grouping::GroupPri_t grouppri; // priority of this definition
QCString groupFileName; // file where this grouping was defined
int groupStartLine; // line " " " " "
bool groupHasDocs; // true if the entry that caused the grouping was documented
// disable copying of member defs // disable copying of member defs
......
...@@ -75,7 +75,7 @@ void MemberGroup::insertMember(MemberDef *md) ...@@ -75,7 +75,7 @@ void MemberGroup::insertMember(MemberDef *md)
GroupDef *gd; GroupDef *gd;
if (firstMd && (gd=firstMd->getGroupDef())) if (firstMd && (gd=firstMd->getGroupDef()))
{ {
md->setGroupDef(gd); md->setGroupDef(gd, firstMd->getGroupPri(), firstMd->getGroupFileName(), firstMd->getGroupStartLine(), firstMd->getGroupHasDocs());
gd->insertMember(md); gd->insertMember(md);
} }
} }
......
...@@ -210,7 +210,7 @@ void NamespaceDef::computeAnchors() ...@@ -210,7 +210,7 @@ void NamespaceDef::computeAnchors()
void NamespaceDef::writeDocumentation(OutputList &ol) void NamespaceDef::writeDocumentation(OutputList &ol)
{ {
QCString pageTitle=name()+" Namespace Reference"; QCString pageTitle=name()+" Namespace Reference";
startFile(ol,getOutputFileBase(),pageTitle); startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
//ol.docify(pageTitle); //ol.docify(pageTitle);
parseText(ol,theTranslator->trNamespaceReference(name())); parseText(ol,theTranslator->trNamespaceReference(name()));
...@@ -320,7 +320,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -320,7 +320,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Man); ol.disableAllBut(OutputGenerator::Man);
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trAuthor()); parseText(ol,theTranslator->trAuthor(TRUE,TRUE));
ol.endGroupHeader(); ol.endGroupHeader();
parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); parseText(ol,theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
......
...@@ -289,7 +289,8 @@ class OutputGenerator : public BaseOutputDocInterface ...@@ -289,7 +289,8 @@ class OutputGenerator : public BaseOutputDocInterface
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// structural output interface // structural output interface
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
virtual void startFile(const char *name,const char *title,bool ext) = 0; virtual void startFile(const char *name,const char *manName,
const char *title,bool ext) = 0;
virtual void writeFooter(int,bool) = 0; virtual void writeFooter(int,bool) = 0;
virtual void endFile() = 0; virtual void endFile() = 0;
virtual void startIndexSection(IndexSections) = 0; virtual void startIndexSection(IndexSections) = 0;
......
...@@ -275,6 +275,7 @@ FORALL3(const char *a1,const char *a2,const char *a3,a1,a2,a3) ...@@ -275,6 +275,7 @@ FORALL3(const char *a1,const char *a2,const char *a3,a1,a2,a3)
FORALL3(const char *a1,const char *a2,bool a3,a1,a2,a3) FORALL3(const char *a1,const char *a2,bool a3,a1,a2,a3)
FORALL3(uchar a1,uchar a2,uchar a3,a1,a2,a3) FORALL3(uchar a1,uchar a2,uchar a3,a1,a2,a3)
FORALL4(const char *a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4) FORALL4(const char *a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4)
FORALL4(const char *a1,const char *a2,const char *a3,bool a4,a1,a2,a3,a4)
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -82,8 +82,9 @@ class OutputList : public OutputDocInterface ...@@ -82,8 +82,9 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::endProjectNumber); } { forall(&OutputGenerator::endProjectNumber); }
void writeStyleInfo(int part) void writeStyleInfo(int part)
{ forall(&OutputGenerator::writeStyleInfo,part); } { forall(&OutputGenerator::writeStyleInfo,part); }
void startFile(const char *name,const char *title,bool external) void startFile(const char *name,const char *manName,
{ forall(&OutputGenerator::startFile,name,title,external); } const char *title,bool external)
{ forall(&OutputGenerator::startFile,name,manName,title,external); }
void writeFooter(int fase,bool external) void writeFooter(int fase,bool external)
{ forall(&OutputGenerator::writeFooter,fase,external); } { forall(&OutputGenerator::writeFooter,fase,external); }
void endFile() void endFile()
...@@ -458,6 +459,7 @@ class OutputList : public OutputDocInterface ...@@ -458,6 +459,7 @@ class OutputList : public OutputDocInterface
FORALLPROTO3(const char *,const char *,const char *); FORALLPROTO3(const char *,const char *,const char *);
FORALLPROTO3(ClassDiagram &,const char *,const char *); FORALLPROTO3(ClassDiagram &,const char *,const char *);
FORALLPROTO4(const char *,const char *,const char *,const char *); FORALLPROTO4(const char *,const char *,const char *,const char *);
FORALLPROTO4(const char *,const char *,const char *,bool);
OutputList(const OutputList &ol); OutputList(const OutputList &ol);
QList<OutputGenerator> *outputs; QList<OutputGenerator> *outputs;
......
...@@ -53,7 +53,7 @@ void PackageDef::writeDocumentation(OutputList &ol) ...@@ -53,7 +53,7 @@ void PackageDef::writeDocumentation(OutputList &ol)
QCString title = theTranslator->trPackage(name()); QCString title = theTranslator->trPackage(name());
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,getOutputFileBase(),title); startFile(ol,getOutputFileBase(),name(),title);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
ol.docify(title); ol.docify(title);
endTitle(ol,getOutputFileBase(),title); endTitle(ol,getOutputFileBase(),title);
......
...@@ -857,7 +857,8 @@ void RTFGenerator::beginRTFSection() ...@@ -857,7 +857,8 @@ void RTFGenerator::beginRTFSection()
t << Rtf_Style["Heading2"]->reference << "\n"; t << Rtf_Style["Heading2"]->reference << "\n";
} }
void RTFGenerator::startFile(const char *name,const char *, bool ) void RTFGenerator::startFile(const char *name,const char *,
const char *, bool )
{ {
QCString fileName=name; QCString fileName=name;
......
...@@ -42,7 +42,8 @@ class RTFGenerator : public OutputGenerator ...@@ -42,7 +42,8 @@ class RTFGenerator : public OutputGenerator
bool isEnabled(OutputType o) { return (o==RTF && active); } bool isEnabled(OutputType o) { return (o==RTF && active); }
OutputGenerator *get(OutputType o) { return (o==RTF) ? this : 0; } OutputGenerator *get(OutputType o) { return (o==RTF) ? this : 0; }
void startFile(const char *name,const char *title, bool external); void startFile(const char *name,const char *manName,
const char *title, bool external);
void writeFooter(int,bool) {} void writeFooter(int,bool) {}
void endFile(); void endFile();
void clearBuffer(); void clearBuffer();
......
...@@ -142,8 +142,8 @@ static QCString *pCopyRoundString; ...@@ -142,8 +142,8 @@ static QCString *pCopyRoundString;
static QCString *pCopyCurlyString; static QCString *pCopyCurlyString;
static QCString *pCopyQuotedString; static QCString *pCopyQuotedString;
static QCString *pSkipDoc; static QCString *pSkipDoc;
static QStack<QCString> autoGroupNameStack; static QStack<Grouping> autoGroupStack;
static QCString lastDefGroup; static Grouping lastDefGroup( "", Grouping::GROUPING_LOWEST );
static bool insideFormula; static bool insideFormula;
static bool insideTryBlock=FALSE; static bool insideTryBlock=FALSE;
...@@ -168,7 +168,7 @@ static void initParser() ...@@ -168,7 +168,7 @@ static void initParser()
virt = Normal; virt = Normal;
baseVirt = Normal; baseVirt = Normal;
isTypedef = FALSE; isTypedef = FALSE;
autoGroupNameStack.clear(); autoGroupStack.clear();
insideTryBlock = FALSE; insideTryBlock = FALSE;
insideIDL = FALSE; insideIDL = FALSE;
} }
...@@ -180,38 +180,35 @@ static void initEntry() ...@@ -180,38 +180,35 @@ static void initEntry()
current->virt = virt; current->virt = virt;
current->stat = gstat; current->stat = gstat;
current->mGrpId = memberGroupId; current->mGrpId = memberGroupId;
if (!autoGroupNameStack.isEmpty()) if (!autoGroupStack.isEmpty())
{ {
current->groups->append(new QCString(*autoGroupNameStack.top())); current->groups->append(new Grouping(*autoGroupStack.top()));
} }
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/// remove old group name (if given) and add new one (if given) /// remove any automatic grouping and add new one (if given)
static void setCurrentGroup( QCString *oldgroup, QCString *newgroup ) static void setCurrentGroup( QCString *newgroup, Grouping::GroupPri_t pri )
{ {
if (oldgroup)
{
/* remove auto group name from current entry and discard it */ /* remove auto group name from current entry and discard it */
QCString *s = current->groups->first(); Grouping *g = current->groups->first();
int i=0; int i=0;
while (s) while (g)
{ {
if (*s==*oldgroup) if (g->pri <= Grouping::GROUPING_AUTO_DEF)
{ {
current->groups->remove(i); current->groups->remove(i);
break; i--;
} }
s=current->groups->next(); g=current->groups->next();
i++; i++;
} }
}
/* use new group name instead? */ /* use new group name instead? */
if ( newgroup ) if ( newgroup )
{ {
current->groups->append(new QCString(*newgroup)); current->groups->append(new Grouping(*newgroup, pri));
} }
} }
...@@ -474,7 +471,6 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -474,7 +471,6 @@ TITLE [tT][iI][tT][lL][eE]
%x DocBaseClass %x DocBaseClass
%x CppQuote %x CppQuote
%x EndCppQuote %x EndCppQuote
%x AddGroupDocArg1
%x GroupDocArg1 %x GroupDocArg1
%x GroupDocArg2 %x GroupDocArg2
%x GroupName %x GroupName
...@@ -1689,11 +1685,11 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1689,11 +1685,11 @@ TITLE [tT][iI][tT][lL][eE]
varEntry->mGrpId = current->mGrpId; varEntry->mGrpId = current->mGrpId;
// deep copy group list // deep copy group list
QListIterator<QCString> sli(*current->groups); QListIterator<Grouping> gli(*current->groups);
QCString *s; Grouping *g;
for (;(s=sli.current());++sli) for (;(g=gli.current());++gli)
{ {
varEntry->groups->append(new QCString(*s)); varEntry->groups->append(new Grouping(*g));
} }
//printf("Add: type=`%s',name=`%s',args=`%s'\n", //printf("Add: type=`%s',name=`%s',args=`%s'\n",
...@@ -2684,13 +2680,22 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -2684,13 +2680,22 @@ TITLE [tT][iI][tT][lL][eE]
current->section = Entry::GROUPDOC_SEC; current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
current->groupdoctype = Entry::GROUPDOC_NORMAL;
BEGIN( GroupDocArg1 ); BEGIN( GroupDocArg1 );
} }
<Doc,JavaDoc>{B}*{CMD}"addtogroup"{B}+ { <Doc,JavaDoc>{B}*{CMD}"addtogroup"{B}+ {
current->section = Entry::ADDGRPDOC_SEC; current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->groupdoctype = Entry::GROUPDOC_ADD;
BEGIN( GroupDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"weakgroup"{B}+ {
current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
BEGIN( AddGroupDocArg1 ); current->groupdoctype = Entry::GROUPDOC_WEAK;
BEGIN( GroupDocArg1 );
} }
<Doc,JavaDoc>{B}*{CMD}"namespace"{B}+ { <Doc,JavaDoc>{B}*{CMD}"namespace"{B}+ {
current->section = Entry::NAMESPACEDOC_SEC; current->section = Entry::NAMESPACEDOC_SEC;
...@@ -2753,7 +2758,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -2753,7 +2758,7 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN( ExampleDocArg1 ); BEGIN( ExampleDocArg1 );
} }
<LineDoc>{CMD}"name"[^\n]*\n { <LineDoc>{CMD}"name"[^\n]*\n {
lastDefGroup.resize(0); lastDefGroup.groupname.resize(0);
memberGroupHeader=&yytext[5]; memberGroupHeader=&yytext[5];
memberGroupHeader=memberGroupHeader.stripWhiteSpace(); memberGroupHeader=memberGroupHeader.stripWhiteSpace();
current->section = Entry::MEMBERGRP_SEC; current->section = Entry::MEMBERGRP_SEC;
...@@ -2763,7 +2768,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -2763,7 +2768,7 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN( lastDocContext ); BEGIN( lastDocContext );
} }
<Doc,JavaDoc>{CMD}"name"{B}+ { <Doc,JavaDoc>{CMD}"name"{B}+ {
lastDefGroup.resize(0); lastDefGroup.groupname.resize(0);
current->section = Entry::MEMBERGRP_SEC; current->section = Entry::MEMBERGRP_SEC;
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
...@@ -2946,30 +2951,10 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -2946,30 +2951,10 @@ TITLE [tT][iI][tT][lL][eE]
yyLineNr++; yyLineNr++;
} }
<AddGroupDocArg1>{ID} {
current->name = yytext;
lastDefGroup = yytext;
newDocState();
}
<AddGroupDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\addtogroup."
);
yyLineNr++;
BEGIN( Doc );
}
<GroupDocArg2>"*/" {
unput('/');unput('*');
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\addtogroup."
);
BEGIN( Doc );
}
<GroupDocArg1>{ID}(".html"?) { <GroupDocArg1>{ID}(".html"?) {
current->name = yytext; current->name = yytext;
lastDefGroup = yytext; lastDefGroup.groupname = yytext;
lastDefGroup.pri = current->groupingpri();
// the .html stuff is for Qt compatibility // the .html stuff is for Qt compatibility
if (current->name.right(5)==".html") if (current->name.right(5)==".html")
current->name=current->name.left(current->name.length()-5); current->name=current->name.left(current->name.length()-5);
...@@ -2978,25 +2963,29 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -2978,25 +2963,29 @@ TITLE [tT][iI][tT][lL][eE]
<GroupDocArg1>"\\"{B}*"\n" { yyLineNr++; } <GroupDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<GroupDocArg1>"\n" { <GroupDocArg1>"\n" {
warn(yyFileName,yyLineNr, warn(yyFileName,yyLineNr,
"Warning: missing argument after " "Warning: missing group name after %s",
"\\defgroup." current->groupdoccmd()
); );
yyLineNr++; yyLineNr++;
BEGIN( Doc ); BEGIN( Doc );
} }
<GroupDocArg2>{B}*"*/" {
// fake input for end of title rule
yyLineNr--;
unput('/');unput('*');unput('\n');
}
<GroupDocArg2>"\\"{B}*"\n" { yyLineNr++; }
<GroupDocArg2>[^\n\*]+ { <GroupDocArg2>[^\n\*]+ {
current->type += yytext; current->type += yytext;
current->type = current->type.stripWhiteSpace(); current->type = current->type.stripWhiteSpace();
} }
<GroupDocArg2>. {
current->type += yytext;
}
<GroupDocArg2>"\\"{B}*"\n" { yyLineNr++; }
<GroupDocArg2>"*/" {
unput('/');unput('*');
newDocState();
}
<GroupDocArg2>"\n" { <GroupDocArg2>"\n" {
if( current->groupdoctype == Entry::GROUPDOC_NORMAL &&
current->type.length() == 0 )
warn(yyFileName,yyLineNr,
"Warning: missing title after "
"\\defgroup %s", current->name.data()
);
yyLineNr++; yyLineNr++;
newDocState(); newDocState();
} }
...@@ -3240,11 +3229,11 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -3240,11 +3229,11 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN( GroupName ); BEGIN( GroupName );
} }
<ClassDoc,Doc,JavaDoc>{CMD}"{" { <ClassDoc,Doc,JavaDoc>{CMD}"{" {
if (current->section==Entry::GROUPDOC_SEC || if (current->section==Entry::GROUPDOC_SEC )
current->section==Entry::ADDGRPDOC_SEC
)
{ {
autoGroupNameStack.push(new QCString(current->name)); autoGroupStack.push(new Grouping(current->name,
current->groupingpri()
));
} }
else if (current->section == Entry::MEMBERGRP_SEC) else if (current->section == Entry::MEMBERGRP_SEC)
{ {
...@@ -3392,7 +3381,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -3392,7 +3381,7 @@ TITLE [tT][iI][tT][lL][eE]
} }
<GroupName>{ID} { <GroupName>{ID} {
current->groups->append( current->groups->append(
new QCString(yytext) new Grouping(yytext, Grouping::GROUPING_INGROUP)
); );
} }
<GroupName>\n { <GroupName>\n {
...@@ -3745,18 +3734,17 @@ static void startGroup() ...@@ -3745,18 +3734,17 @@ static void startGroup()
warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. " warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. "
"Previous command was found at line %d.",lastMemberGroupLine); "Previous command was found at line %d.",lastMemberGroupLine);
} }
else if (!lastDefGroup.isEmpty()) else if (!lastDefGroup.groupname.isEmpty())
{ {
setCurrentGroup( autoGroupNameStack.top(), &lastDefGroup); setCurrentGroup( &lastDefGroup.groupname, lastDefGroup.pri );
autoGroupNameStack.push(new QCString(lastDefGroup)); autoGroupStack.push(new Grouping(lastDefGroup));
lastDefGroup.resize(0); lastDefGroup.groupname.resize(0);
} }
else else
{ {
if (memberGroupHeader.isEmpty()) if (memberGroupHeader.isEmpty())
{ {
//warn("Warning: member group does not have a header " // warn( yyFileName, yyLineNr, "Warning: member group does not have a header" );
// "at line %d of %s.\n",yyLineNr,yyFileName);
memberGroupHeader="[NOHEADER]"; memberGroupHeader="[NOHEADER]";
} }
memberGroupId = newMemberGroupId(); memberGroupId = newMemberGroupId();
...@@ -3767,7 +3755,7 @@ static void startGroup() ...@@ -3767,7 +3755,7 @@ static void startGroup()
static void endGroup() static void endGroup()
{ {
if (memberGroupId==NOGROUP && autoGroupNameStack.isEmpty()) if (memberGroupId==NOGROUP && autoGroupStack.isEmpty())
{ {
warn(yyFileName,yyLineNr, warn(yyFileName,yyLineNr,
"Warning: end of group without matching begin."); "Warning: end of group without matching begin.");
...@@ -3788,11 +3776,16 @@ static void endGroup() ...@@ -3788,11 +3776,16 @@ static void endGroup()
memberGroupHeader.resize(0); memberGroupHeader.resize(0);
memberGroupDocs.resize(0); memberGroupDocs.resize(0);
} }
else if (!autoGroupNameStack.isEmpty()) // end of group else if (!autoGroupStack.isEmpty()) // end of group
{ {
QCString *oldName = autoGroupNameStack.pop(); Grouping *current = autoGroupStack.pop();
setCurrentGroup(oldName,autoGroupNameStack.top()); Grouping *parent = autoGroupStack.top();
delete oldName; if( parent ) {
setCurrentGroup( &parent->groupname, parent->pri );
} else {
setCurrentGroup( NULL, Grouping::GROUPING_LOWEST );
}
delete current;
} }
} }
......
...@@ -431,9 +431,6 @@ class Translator ...@@ -431,9 +431,6 @@ class Translator
*/ */
virtual QCString trEnumerationValues() = 0; virtual QCString trEnumerationValues() = 0;
/*! This is used in man pages as the author section. */
virtual QCString trAuthor() = 0;
/*! This is used in the documentation of a file before the list of /*! This is used in the documentation of a file before the list of
* documentation blocks for defines * documentation blocks for defines
*/ */
...@@ -504,9 +501,6 @@ class Translator ...@@ -504,9 +501,6 @@ class Translator
/*! this text is generated when the \\date command is used. */ /*! this text is generated when the \\date command is used. */
virtual QCString trDate() = 0; virtual QCString trDate() = 0;
/*! this text is generated when the \\author command is used. */
virtual QCString trAuthors() = 0;
/*! this text is generated when the \\return command is used. */ /*! this text is generated when the \\return command is used. */
virtual QCString trReturns() = 0; virtual QCString trReturns() = 0;
...@@ -688,13 +682,13 @@ class Translator ...@@ -688,13 +682,13 @@ class Translator
/*! Used in the file sources to point to the corresponding documentation. */ /*! Used in the file sources to point to the corresponding documentation. */
virtual QCString trGotoDocumentation() = 0; virtual QCString trGotoDocumentation() = 0;
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() = 0; virtual QCString trPrecondition() = 0;
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() = 0; virtual QCString trPostcondition() = 0;
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() = 0; virtual QCString trInvariant() = 0;
/*! Text shown before a multi-line variable/enum initialization */ /*! Text shown before a multi-line variable/enum initialization */
...@@ -846,6 +840,17 @@ class Translator ...@@ -846,6 +840,17 @@ class Translator
virtual QCString trMember(bool first_capital, bool singular) = 0; virtual QCString trMember(bool first_capital, bool singular) = 0;
virtual QCString trField(bool first_capital, bool singular) = 0; virtual QCString trField(bool first_capital, bool singular) = 0;
virtual QCString trGlobal(bool first_capital, bool singular) = 0; virtual QCString trGlobal(bool first_capital, bool singular) = 0;
//////////////////////////////////////////////////////////////////////////
// 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) = 0;
}; };
#endif #endif
This diff is collapsed.
...@@ -24,7 +24,7 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6 ...@@ -24,7 +24,7 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6
{ {
public: public:
// --- Language contol methods ------------------- // --- Language control methods -------------------
/*! Used for identification of the language. May resemble /*! Used for identification of the language. May resemble
* the string returned by latexBabelPackage(), but it is not used * the string returned by latexBabelPackage(), but it is not used
...@@ -630,9 +630,7 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6 ...@@ -630,9 +630,7 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6
return result; 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() virtual QCString trPublicMembers()
{ return "Métodos Públicos"; } { return "Métodos Públicos"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
...@@ -653,7 +651,6 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6 ...@@ -653,7 +651,6 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6
{ return "Slots Privados"; } { return "Slots Privados"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Métodos Privados Estáticos"; } { return "Métodos Privados Estáticos"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -858,17 +855,17 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6 ...@@ -858,17 +855,17 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_6
{ {
return "Vá para a documentação deste arquivo."; return "Vá para a documentação deste arquivo.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return "Pré-Condição"; return "Pré-Condição";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ {
return "Pós-Condição"; return "Pós-Condição";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ {
return "Invariável"; return "Invariável";
......
...@@ -504,17 +504,17 @@ class TranslatorChinese : public TranslatorAdapter_1_2_1 ...@@ -504,17 +504,17 @@ class TranslatorChinese : public TranslatorAdapter_1_2_1
{ {
return "浏览该文件的文档。"; return "浏览该文件的文档。";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "前置条件"; return "前置条件";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "后置条件"; return "后置条件";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "不变性"; return "不变性";
......
This diff is collapsed.
This diff is collapsed.
...@@ -37,9 +37,7 @@ ...@@ -37,9 +37,7 @@
#ifndef TRANSLATOR_DK_H #ifndef TRANSLATOR_DK_H
#define TRANSLATOR_DK_H #define TRANSLATOR_DK_H
#include "translator.h" class TranslatorDanish : public TranslatorAdapterCVS
class TranslatorDanish : public Translator
{ {
public: public:
...@@ -879,17 +877,17 @@ class TranslatorDanish : public Translator ...@@ -879,17 +877,17 @@ class TranslatorDanish : public Translator
{ {
return "Hop til denne fils dokumentation."; return "Hop til denne fils dokumentation.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return "Precondition"; return "Precondition";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ {
return "Postcondition"; return "Postcondition";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ {
return "Invariant"; return "Invariant";
......
...@@ -18,7 +18,26 @@ ...@@ -18,7 +18,26 @@
#ifndef TRANSLATOR_EN_H #ifndef TRANSLATOR_EN_H
#define TRANSLATOR_EN_H #define TRANSLATOR_EN_H
#include "translator.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 TranslatorEnglish : public Translator class TranslatorEnglish : public Translator
{ {
...@@ -35,8 +54,19 @@ class TranslatorEnglish : public Translator ...@@ -35,8 +54,19 @@ class TranslatorEnglish : public Translator
virtual QCString idLanguage() virtual QCString idLanguage()
{ return "english"; } { return "english"; }
/*! Used to get the LaTeX command(s) for the language support. This method /*! Used to get the LaTeX command(s) for the language support.
* was designed for languages which do wish to use a babel package. * This method should return string with commands that switch
* LaTeX to the desired language. For example
* <pre>"\\usepackage[german]{babel}\n"
* </pre>
* or
* <pre>"\\usepackage{polski}\n"
* "\\usepackage[latin2]{inputenc}\n"
* "\\usepackage[T1]{fontenc}\n"
* </pre>
*
* The English LaTeX does not use such commands. Because of this
* the empty string is returned in this implementation.
*/ */
virtual QCString latexLanguageSupportCommand() virtual QCString latexLanguageSupportCommand()
{ {
...@@ -434,9 +464,6 @@ class TranslatorEnglish : public Translator ...@@ -434,9 +464,6 @@ class TranslatorEnglish : public Translator
{ return "Enumeration values"; } { return "Enumeration values"; }
/*! This is used in man pages as the author section. */ /*! This is used in man pages as the author section. */
virtual QCString trAuthor()
{ return "Author"; }
/*! This is used in the documentation of a file before the list of /*! This is used in the documentation of a file before the list of
* documentation blocks for defines * documentation blocks for defines
*/ */
...@@ -542,9 +569,6 @@ class TranslatorEnglish : public Translator ...@@ -542,9 +569,6 @@ class TranslatorEnglish : public Translator
{ return "Date"; } { return "Date"; }
/*! this text is generated when the \\author command is used. */ /*! this text is generated when the \\author command is used. */
virtual QCString trAuthors()
{ return "Author(s)"; }
/*! this text is generated when the \\return command is used. */ /*! this text is generated when the \\return command is used. */
virtual QCString trReturns() virtual QCString trReturns()
{ return "Returns"; } { return "Returns"; }
...@@ -1179,6 +1203,7 @@ class TranslatorEnglish : public Translator ...@@ -1179,6 +1203,7 @@ class TranslatorEnglish : public Translator
/*! Used as ansicpg for RTF file /*! Used as ansicpg for RTF file
* *
* The following table shows the correlation of Charset name, Charset Value and * The following table shows the correlation of Charset name, Charset Value and
* <pre>
* Codepage number: * Codepage number:
* Charset Name Charset Value(hex) Codepage number * Charset Name Charset Value(hex) Codepage number
* ------------------------------------------------------ * ------------------------------------------------------
...@@ -1197,6 +1222,7 @@ class TranslatorEnglish : public Translator ...@@ -1197,6 +1222,7 @@ class TranslatorEnglish : public Translator
* HANGEUL_CHARSET 129 (x81) 949 * HANGEUL_CHARSET 129 (x81) 949
* GB2313_CHARSET 134 (x86) 936 * GB2313_CHARSET 134 (x86) 936
* CHINESEBIG5_CHARSET 136 (x88) 950 * CHINESEBIG5_CHARSET 136 (x88) 950
* </pre>
* *
*/ */
virtual QCString trRTFansicp() virtual QCString trRTFansicp()
...@@ -1204,6 +1230,7 @@ class TranslatorEnglish : public Translator ...@@ -1204,6 +1230,7 @@ class TranslatorEnglish : public Translator
return "1252"; return "1252";
} }
/*! Used as ansicpg for RTF fcharset /*! Used as ansicpg for RTF fcharset
* \see trRTFansicp() for a table of possible values. * \see trRTFansicp() for a table of possible values.
*/ */
...@@ -1225,7 +1252,6 @@ class TranslatorEnglish : public Translator ...@@ -1225,7 +1252,6 @@ class TranslatorEnglish : public Translator
virtual QCString trClass(bool first_capital, bool singular) virtual QCString trClass(bool first_capital, bool singular)
{ {
QCString result((first_capital ? "Class" : "class")); QCString result((first_capital ? "Class" : "class"));
if (first_capital) toupper(result.at(0));
if (!singular) result+="es"; if (!singular) result+="es";
return result; return result;
} }
...@@ -1307,6 +1333,19 @@ class TranslatorEnglish : public Translator ...@@ -1307,6 +1333,19 @@ class TranslatorEnglish : public Translator
return result; 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 ? "Author" : "author"));
if (!singular) result+="s";
return result;
}
}; };
#endif #endif
...@@ -530,9 +530,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_1_5 ...@@ -530,9 +530,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_1_5
return result; 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() virtual QCString trPublicMembers()
{ return "Métodos públicos"; } { return "Métodos públicos"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
...@@ -553,7 +551,6 @@ class TranslatorSpanish : public TranslatorAdapter_1_1_5 ...@@ -553,7 +551,6 @@ class TranslatorSpanish : public TranslatorAdapter_1_1_5
{ return "Slots privados"; } { return "Slots privados"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Métodos privados estáticos"; } { return "Métodos privados estáticos"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -756,17 +753,17 @@ class TranslatorSpanish : public TranslatorAdapter_1_1_5 ...@@ -756,17 +753,17 @@ class TranslatorSpanish : public TranslatorAdapter_1_1_5
{ {
return "Ir a la documentación de este archivo."; return "Ir a la documentación de este archivo.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return "Precondición"; return "Precondición";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ {
return "Postcondicón"; return "Postcondicón";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ {
return "Invariante"; return "Invariante";
......
...@@ -532,9 +532,7 @@ class TranslatorFrench : public TranslatorAdapter_1_2_0 ...@@ -532,9 +532,7 @@ class TranslatorFrench : public TranslatorAdapter_1_2_0
return result; 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() virtual QCString trPublicMembers()
{ return "Membres publics"; } { return "Membres publics"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
...@@ -555,7 +553,6 @@ class TranslatorFrench : public TranslatorAdapter_1_2_0 ...@@ -555,7 +553,6 @@ class TranslatorFrench : public TranslatorAdapter_1_2_0
{ return "Connecteurs privés"; } { return "Connecteurs privés"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Membres privés statiques"; } { return "Membres privés statiques"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -760,17 +757,17 @@ class TranslatorFrench : public TranslatorAdapter_1_2_0 ...@@ -760,17 +757,17 @@ class TranslatorFrench : public TranslatorAdapter_1_2_0
{ {
return "Aller à la documentation de ce fichier."; return "Aller à la documentation de ce fichier.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return "Précondition"; return "Précondition";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ {
return "Postcondition"; return "Postcondition";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ {
return "Invariant"; return "Invariant";
......
...@@ -535,17 +535,17 @@ class TranslatorCroatian : public TranslatorAdapter_1_2_6 ...@@ -535,17 +535,17 @@ class TranslatorCroatian : public TranslatorAdapter_1_2_6
{ {
return "Dokumenacija za ovu datoteku."; return "Dokumenacija za ovu datoteku.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "Preduvjeti"; return "Preduvjeti";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "Postuvjeti"; return "Postuvjeti";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "Invarijanta"; return "Invarijanta";
......
...@@ -24,7 +24,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1 ...@@ -24,7 +24,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1
{ {
public: public:
// --- Language contol methods ------------------- // --- Language control methods -------------------
QCString idLanguage() QCString idLanguage()
{ return "hungarian"; } { return "hungarian"; }
/*! Used to get the command(s) for the language support. This method /*! Used to get the command(s) for the language support. This method
...@@ -543,9 +543,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1 ...@@ -543,9 +543,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1
return result; 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
*/
QCString trPublicMembers() QCString trPublicMembers()
{ return "Publikus metódusok"; } { return "Publikus metódusok"; }
QCString trPublicSlots() QCString trPublicSlots()
...@@ -566,7 +564,6 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1 ...@@ -566,7 +564,6 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1
{ return "Privát adatok"; } { return "Privát adatok"; }
QCString trStaticPrivateMembers() QCString trStaticPrivateMembers()
{ return "Statikus privát metódusok"; } { return "Statikus privát metódusok"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -769,17 +766,17 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1 ...@@ -769,17 +766,17 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1
{ {
return "Ugrás a fájl dokumentációjához."; return "Ugrás a fájl dokumentációjához.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "Elõfeltétel"; return "Elõfeltétel";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "Utófeltétel"; return "Utófeltétel";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "Invariáns"; return "Invariáns";
......
...@@ -57,9 +57,7 @@ ...@@ -57,9 +57,7 @@
#ifndef TRANSLATOR_IT_H #ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H #define TRANSLATOR_IT_H
#include "translator.h" class TranslatorItalian : public TranslatorAdapterCVS
class TranslatorItalian : public Translator
{ {
public: public:
...@@ -676,9 +674,7 @@ class TranslatorItalian : public Translator ...@@ -676,9 +674,7 @@ class TranslatorItalian : public Translator
return result; 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
*/
QCString trPublicMembers() QCString trPublicMembers()
{ return "Membri pubblici"; } { return "Membri pubblici"; }
QCString trPublicSlots() QCString trPublicSlots()
...@@ -699,7 +695,6 @@ class TranslatorItalian : public Translator ...@@ -699,7 +695,6 @@ class TranslatorItalian : public Translator
{ return "Slot privati"; } { return "Slot privati"; }
QCString trStaticPrivateMembers() QCString trStaticPrivateMembers()
{ return "Membri privati statici"; } { return "Membri privati statici"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -903,17 +898,17 @@ class TranslatorItalian : public Translator ...@@ -903,17 +898,17 @@ class TranslatorItalian : public Translator
{ {
return "Vai alla documentazione di questo file."; return "Vai alla documentazione di questo file.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "Precondizione"; return "Precondizione";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "Postcondizione"; return "Postcondizione";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "Invariante"; return "Invariante";
......
...@@ -520,9 +520,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ...@@ -520,9 +520,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5
return result; 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
*/
QCString trPublicMembers() QCString trPublicMembers()
{ return "公開メンバ"; } { return "公開メンバ"; }
QCString trPublicSlots() QCString trPublicSlots()
...@@ -543,7 +541,6 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ...@@ -543,7 +541,6 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5
{ return "非公開スロット"; } { return "非公開スロット"; }
QCString trStaticPrivateMembers() QCString trStaticPrivateMembers()
{ return "静的非公開メンバ"; } { return "静的非公開メンバ"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -745,17 +742,17 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ...@@ -745,17 +742,17 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5
{ {
return "このファイルの解説を見る。"; return "このファイルの解説を見る。";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "事前条件"; return "事前条件";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "事後条件"; return "事後条件";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "Invariant"; return "Invariant";
......
...@@ -530,9 +530,7 @@ class TranslatorKorean : public TranslatorAdapter_1_1_0 ...@@ -530,9 +530,7 @@ class TranslatorKorean : public TranslatorAdapter_1_1_0
return result; 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
*/
QCString trPublicMembers() QCString trPublicMembers()
{ return "공용 메소드"; } { return "공용 메소드"; }
QCString trPublicSlots() QCString trPublicSlots()
...@@ -553,7 +551,6 @@ class TranslatorKorean : public TranslatorAdapter_1_1_0 ...@@ -553,7 +551,6 @@ class TranslatorKorean : public TranslatorAdapter_1_1_0
{ return "Private Slots"; } { return "Private Slots"; }
QCString trStaticPrivateMembers() QCString trStaticPrivateMembers()
{ return "정적 프라이베이트 메소드"; } { return "정적 프라이베이트 메소드"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -757,17 +754,17 @@ class TranslatorKorean : public TranslatorAdapter_1_1_0 ...@@ -757,17 +754,17 @@ class TranslatorKorean : public TranslatorAdapter_1_1_0
{ {
return "이 파일의 문서화로 가시오"; return "이 파일의 문서화로 가시오";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "전제 조건"; return "전제 조건";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "후미 조건"; // "후치조건" return "후미 조건"; // "후치조건"
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "변하지 않는"; return "변하지 않는";
......
...@@ -501,17 +501,17 @@ class TranslatorDutch : public TranslatorAdapter_1_2_6 ...@@ -501,17 +501,17 @@ class TranslatorDutch : public TranslatorAdapter_1_2_6
{ {
return "Ga naar de documentatie van deze file."; return "Ga naar de documentatie van deze file.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "Preconditie"; return "Preconditie";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "Postconditie"; return "Postconditie";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "Invariant"; return "Invariant";
......
...@@ -571,17 +571,17 @@ class TranslatorNorwegian : public TranslatorAdapter_1_2_2 ...@@ -571,17 +571,17 @@ class TranslatorNorwegian : public TranslatorAdapter_1_2_2
{ {
return "G til dokumentasjonen for denne filen."; return "G til dokumentasjonen for denne filen.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return "Fr-kondisjon"; return "Fr-kondisjon";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ {
return "Etter-kondisjon"; return "Etter-kondisjon";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ {
return "Invariant"; return "Invariant";
......
...@@ -24,7 +24,7 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1 ...@@ -24,7 +24,7 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1
{ {
public: public:
// --- Language contol methods ------------------- // --- Language control methods -------------------
/*! Used for identification of the language. May resemble /*! Used for identification of the language. May resemble
* the string returned by latexBabelPackage(), but it is not used * the string returned by latexBabelPackage(), but it is not used
...@@ -545,9 +545,7 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1 ...@@ -545,9 +545,7 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1
return result; 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
*/
QCString trPublicMembers() QCString trPublicMembers()
{ return "Metody Publiczne"; } { return "Metody Publiczne"; }
QCString trPublicSlots() QCString trPublicSlots()
...@@ -568,7 +566,6 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1 ...@@ -568,7 +566,6 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1
{ return "Sloty Prywatne"; } { return "Sloty Prywatne"; }
QCString trStaticPrivateMembers() QCString trStaticPrivateMembers()
{ return "Statyczne Metody Prywatne"; } { return "Statyczne Metody Prywatne"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -770,17 +767,17 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1 ...@@ -770,17 +767,17 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1
{ {
return "Id¼ do dokumentacji tego pliku."; return "Id¼ do dokumentacji tego pliku.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "Warunek wstêpny"; return "Warunek wstêpny";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "Warunek koñcowy"; return "Warunek koñcowy";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "Inwariant"; return "Inwariant";
......
...@@ -524,9 +524,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_1_5 ...@@ -524,9 +524,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_1_5
return result; 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() virtual QCString trPublicMembers()
{ return "Membros públicos"; } { return "Membros públicos"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
...@@ -547,7 +545,6 @@ class TranslatorPortuguese : public TranslatorAdapter_1_1_5 ...@@ -547,7 +545,6 @@ class TranslatorPortuguese : public TranslatorAdapter_1_1_5
{ return "Slots privados"; } { return "Slots privados"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Membros privados estáticos"; } { return "Membros privados estáticos"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -753,17 +750,17 @@ class TranslatorPortuguese : public TranslatorAdapter_1_1_5 ...@@ -753,17 +750,17 @@ class TranslatorPortuguese : public TranslatorAdapter_1_1_5
{ {
return "Ir para a documentação deste ficheiro."; return "Ir para a documentação deste ficheiro.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return "Precondição"; return "Precondição";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ {
return "Poscondição"; return "Poscondição";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ {
return "Invariante"; return "Invariante";
......
...@@ -38,7 +38,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_1 ...@@ -38,7 +38,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_1
{ {
public: public:
// --- Language contol methods ------------------- // --- Language control methods -------------------
/*! Used for identification of the language. May resemble /*! Used for identification of the language. May resemble
* the string returned by latexBabelPackage(), but it is not used * the string returned by latexBabelPackage(), but it is not used
...@@ -571,9 +571,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_1 ...@@ -571,9 +571,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_1
return result; 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() virtual QCString trPublicMembers()
{ return "Metode Publice"; } { return "Metode Publice"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
...@@ -594,7 +592,6 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_1 ...@@ -594,7 +592,6 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_1
{ return "Sloturi Private"; } { return "Sloturi Private"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Metode Statice Private"; } { return "Metode Statice Private"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! 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.
...@@ -797,17 +794,17 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_1 ...@@ -797,17 +794,17 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_1
{ {
return "Vezi documentaþia."; return "Vezi documentaþia.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return "Precondiþie"; return "Precondiþie";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ {
return "Postcondiþie"; return "Postcondiþie";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ {
return "Invariant"; return "Invariant";
......
...@@ -48,9 +48,7 @@ ...@@ -48,9 +48,7 @@
#ifndef TRANSLATOR_RU_H #ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H #define TRANSLATOR_RU_H
#include "translator.h" class TranslatorRussian : public TranslatorAdapterCVS
class TranslatorRussian : public Translator
{ {
private: private:
/*! The Decode() inline assumes the source written in the /*! The Decode() inline assumes the source written in the
...@@ -921,17 +919,17 @@ class TranslatorRussian : public Translator ...@@ -921,17 +919,17 @@ class TranslatorRussian : public Translator
{ {
return decode(". ."); return decode(". .");
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return decode(""); return decode("");
} }
/*! Text for the \post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ {
return decode(""); return decode("");
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ {
return decode(""); return decode("");
......
...@@ -528,17 +528,17 @@ class TranslatorSlovene : public TranslatorAdapter_1_1_5 ...@@ -528,17 +528,17 @@ class TranslatorSlovene : public TranslatorAdapter_1_1_5
{ {
return "dokumenacija tekoe datoteke."; return "dokumenacija tekoe datoteke.";
} }
/*! Text for the \pre command */ /*! Text for the \\pre command */
QCString trPrecondition() QCString trPrecondition()
{ {
return "Predpogoji (preconditions)"; return "Predpogoji (preconditions)";
} }
/*! Text for the \post command */ /*! Text for the \\post command */
QCString trPostcondition() QCString trPostcondition()
{ {
return "Naknadni pogoji (posconditions)"; return "Naknadni pogoji (posconditions)";
} }
/*! Text for the \invariant command */ /*! Text for the \\invariant command */
QCString trInvariant() QCString trInvariant()
{ {
return "Invarianta"; return "Invarianta";
......
...@@ -460,7 +460,7 @@ QCString removeRedundantWhiteSpace(const QCString &s) ...@@ -460,7 +460,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
result+=' '; result+=' ';
result+=s.at(i); result+=s.at(i);
} }
else if (c!=' ' || else if (!isspace(c) ||
( i!=0 && i!=l-1 && ( i!=0 && i!=l-1 &&
(isId(s.at(i-1)) || s.at(i-1)==')' || s.at(i-1)==',' || s.at(i-1)=='>' || s.at(i-1)==']') && (isId(s.at(i-1)) || s.at(i-1)==')' || s.at(i-1)==',' || s.at(i-1)=='>' || s.at(i-1)==']') &&
isId(s.at(i+1)) isId(s.at(i+1))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment