Commit df5aeefd authored by Dimitri van Heesch's avatar Dimitri van Heesch

mods for doxygen-0.49-991205

parent dc2968f7
DOXYGEN Version 0.49-991117 DOXYGEN Version 0.49-991205
CONTENTS CONTENTS
-------- --------
...@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX: ...@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have: 1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-991117.src.tar.gz # uncompress the archive gunzip doxygen-0.49-991205.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-991117.src.tar # unpack it tar xf doxygen-0.49-991205.src.tar # unpack it
2. Run the configure script: 2. Run the configure script:
...@@ -234,4 +234,4 @@ The latest version of doxygen can be obtained at ...@@ -234,4 +234,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (17 November 1999) Dimitri van Heesch (05 December 1999)
DOXYGEN Version 0.49-991117 DOXYGEN Version 0.49-991205
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 November 1999) Dimitri van Heesch (05 December 1999)
0.49-991117 0.49-991205
...@@ -93,6 +93,7 @@ documentation: ...@@ -93,6 +93,7 @@ documentation:
<li> \refitem cmdskipline \skipline <li> \refitem cmdskipline \skipline
<li> \refitem cmdstruct \struct <li> \refitem cmdstruct \struct
<li> \refitem cmdsubsection \subsection <li> \refitem cmdsubsection \subsection
<li> \refitem cmdthrow \throw
<li> \refitem cmdtypedef \typedef <li> \refitem cmdtypedef \typedef
<li> \refitem cmdunion \union <li> \refitem cmdunion \union
<li> \refitem cmduntil \until <li> \refitem cmduntil \until
...@@ -229,6 +230,12 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -229,6 +230,12 @@ Doxygen. Unrecognized commands are treated as normal text.
documentation contained in the comment block. All examples are placed documentation contained in the comment block. All examples are placed
in a list. The source code is scanned for documented members and classes. in a list. The source code is scanned for documented members and classes.
If any are found, the names are cross-referenced with the documentation. If any are found, the names are cross-referenced with the documentation.
Source files or directories can be specified using the
\c EXAMPLE_PATH tag of Doxygen's configuration file.
If \<file-name\> itself is not unique for the set of example files specified
by the \c EXAMPLE_PATH tag, you can include part of the absolute path
to disambiguate it.
If more that one source file is needed for the example, If more that one source file is needed for the example,
the \\include command can be used. the \\include command can be used.
...@@ -583,8 +590,20 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -583,8 +590,20 @@ Doxygen. Unrecognized commands are treated as normal text.
sectioning command is encountered. See section \ref cmdfn "\\fn" for an sectioning command is encountered. See section \ref cmdfn "\\fn" for an
example. example.
\par Note:
the tag \\exceptions is a synonym for this tag.
\sa Section \ref cmdjdexception "@exception". \sa Section \ref cmdjdexception "@exception".
<hr>
\subsection cmdthrow \throw <exception-object> { exception description }
\addindex \throw
Equivalent to \\exception (see section \ref cmdexception "\\exception").
\par Note:
the tag \\throws is a synonym for this tag.
<hr> <hr>
\subsection cmdreturn \return { description of the return value } \subsection cmdreturn \return { description of the return value }
...@@ -799,6 +818,10 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -799,6 +818,10 @@ Doxygen. Unrecognized commands are treated as normal text.
Source files or directories can be specified using the Source files or directories can be specified using the
\c EXAMPLE_PATH tag of Doxygen's configuration file. \c EXAMPLE_PATH tag of Doxygen's configuration file.
If \<file-name\> itself is not unique for the set of example files specified
by the \c EXAMPLE_PATH tag, you can include part of the absolute path
to disambiguate it.
Using the \\include command is equivalent to inserting the file into Using the \\include command is equivalent to inserting the file into
the documentation block and surrounding it the documentation block and surrounding it
with \\code and \\endcode commands. with \\code and \\endcode commands.
...@@ -1199,6 +1222,10 @@ The following command JavaDoc command are support. ...@@ -1199,6 +1222,10 @@ The following command JavaDoc command are support.
\subsection cmdjdexception @exception <exception-object> { exception-description } \subsection cmdjdexception @exception <exception-object> { exception-description }
\addindex @exception \addindex @exception
Equivalent to \\exception (see section \ref cmdexception "\\exception"). Equivalent to \\exception (see section \ref cmdexception "\\exception").
Also synonymous to \@exceptions and \\exceptions.
\subsection cmdjdthrows @throw <exception-object> { exception-description }
Equivalent to \\throw (see section \ref cmdthrow "\\throw").
Also synonymous to \@exception and \\exception.
\subsection cmdjdreturn @return { description of the return value } \subsection cmdjdreturn @return { description of the return value }
\addindex @return \addindex @return
Equivalent to \\return (see section \ref cmdreturn "\\return"). Equivalent to \\return (see section \ref cmdreturn "\\return").
......
...@@ -91,6 +91,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -91,6 +91,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_include_path INCLUDE_PATH <li> \refitem cfg_include_path INCLUDE_PATH
<li> \refitem cfg_inherit_docs INHERIT_DOCS <li> \refitem cfg_inherit_docs INHERIT_DOCS
<li> \refitem cfg_inline_info INLINE_INFO <li> \refitem cfg_inline_info INLINE_INFO
<li> \refitem cfg_inline_sources INLINE_SOURCES
<li> \refitem cfg_input INPUT <li> \refitem cfg_input INPUT
<li> \refitem cfg_input_filter INPUT_FILTER <li> \refitem cfg_input_filter INPUT_FILTER
<li> \refitem cfg_internal_docs INTERNAL_DOCS <li> \refitem cfg_internal_docs INTERNAL_DOCS
...@@ -273,9 +274,14 @@ followed by the descriptions of the tags grouped by category. ...@@ -273,9 +274,14 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_source_browser \anchor cfg_source_browser
<dt>\c SOURCE_BROWSER <dd> <dt>\c SOURCE_BROWSER <dd>
\addindex SOURCE_BROWSER \addindex SOURCE_BROWSER
If the \c SOURCE_BROWSER tag is set to \c YES than the body of a member or If the \c SOURCE_BROWSER tag is set to \c YES then a list of source files will
function will be appended as a block of code to the documentation of. be generated. Documented entities will be cross-referenced with these sources.
that member or function.
\anchor cfg_inline_sources
<dt>\c INLINE_SOURCES <dd>
\addindex INLINE_SOURCES
Setting the \c INLINE_SOURCES tag to \c YES will include the body
of functions, classes and enums directly into the documentation.
\anchor cfg_case_sense_names \anchor cfg_case_sense_names
<dt>\c CASE_SENSE_NAMES <dd> <dt>\c CASE_SENSE_NAMES <dd>
...@@ -698,9 +704,23 @@ EXTRA_PACKAGES = times ...@@ -698,9 +704,23 @@ EXTRA_PACKAGES = times
<dt>\c TAGFILES <dd> <dt>\c TAGFILES <dd>
\addindex TAGFILES \addindex TAGFILES
The \c TAGFILES tag can be used to specify one or more tagfiles. The \c TAGFILES tag can be used to specify one or more tagfiles.
See section \ref doxytag_usage for more information about the usage of See section \ref doxytag_usage for more information about the usage of
tag files. tag files.
Optionally an initial location of the external documentation
can be added for each tagfile.
The format of a tag file without this location is as follows:
<pre>
TAGFILES = file1 file2 ... </pre>
Adding location for the tag files is done as follows:
<pre>
TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
where \c loc1 and \c loc2 can be relative or absolute paths or URLs,
If a location is present for each tag, the installdox tool (see
section \ref installdox_usage for more information) does not
have to be run to correct the links.
\par Note: \par Note:
Each tag file most have a unique name and if a tag file is not located Each tag file most have a unique name and if a tag file is not located
in the directory in which doxygen is run, you must also specify the in the directory in which doxygen is run, you must also specify the
......
...@@ -85,7 +85,7 @@ doxytag -t example.tag example/html ...@@ -85,7 +85,7 @@ doxytag -t example.tag example/html
documentation. Because the tag file does not specify where the documentation. Because the tag file does not specify where the
documentation is located, you will have to specify that by running the documentation is located, you will have to specify that by running the
installdox script that doxygen generates installdox script that doxygen generates
(See \ref installdox_usage for more information). (See section \ref installdox_usage for more information).
Note that this is actually a feature because if you (or someone else) Note that this is actually a feature because if you (or someone else)
moves the external documentation to a different moves the external documentation to a different
......
...@@ -75,6 +75,33 @@ To make doxygen put <br><br> ...@@ -75,6 +75,33 @@ To make doxygen put <br><br>
in the documentation of the class MyClassName regardless of the name of the actual in the documentation of the class MyClassName regardless of the name of the actual
header file in which the definition of MyClassName is contained. header file in which the definition of MyClassName is contained.
<li><b>How can I use tag files in combination with compressed HTML</b>
If you want to refer from one compressed HTML file
\c a.chm to another compressed HTML file
called \c b.chm, the
link in \c a.chm must have the following format:
\verbatim
<a href="b.chm::/file.html">
\endverbatim
Unfortunately this only works if both compressed HTML files are in the same
directory.
As a result you must rename the generated \c index.chm files for all projects
into something unique and put all \c .chm files in one directory.
Suppose you have a project \e a referring to a project \e b using tag file
\c b.tag, then you could rename the \c index.chm for project \e a into
\c a.chm and the \c index.chm for project \e b into \c b.chm. In the
configuration file for project \e a you write:
\verbatim
TAGFILES = b.tag=b.chm::
\endverbatim
or you can use \c installdox to set the links as follows:
\verbatim
installdox -lb.tag@b.chm::
\endverbatim
</ol> </ol>
*/ */
...@@ -33,7 +33,10 @@ Permission to use, copy, modify, and distribute this software and its ...@@ -33,7 +33,10 @@ Permission to use, copy, modify, and distribute this software and its
documentation under the terms of the GNU General Public License is hereby documentation under the terms of the GNU General Public License is hereby
granted. No representations are made about the suitability of this software granted. No representations are made about the suitability of this software
for any purpose. It is provided "as is" without express or implied warranty. for any purpose. It is provided "as is" without express or implied warranty.
See the GNU General Public License for more details. See the
<a href="http://www.gnu.org/copyleft/gpl.html">
GNU General Public License</a>
for more details.
<p> <p>
All output generated by Doxygen is not covered by this license. All output generated by Doxygen is not covered by this license.
...@@ -41,11 +44,13 @@ All output generated by Doxygen is not covered by this license. ...@@ -41,11 +44,13 @@ All output generated by Doxygen is not covered by this license.
Doxygen is a documentation system for C and C++. It can generate an on-line Doxygen is a documentation system for C and C++. It can generate an on-line
class browser (in HTML) and/or an off-line reference manual class browser (in HTML) and/or an off-line reference manual
(in \f$\mbox{\LaTeX}\f$) from a set (in \f$\mbox{\LaTeX}\f$) from a set
of documented source files. There is also some support for generating of documented source files. There is also support for generating
man pages. The documentation is extracted directly from the man pages and for converting the generated output into
Postscript, hyperlinked PDF or compressed HTML.
The documentation is extracted directly from the
sources. Doxygen is developed on a <a href="http://www.linux.org">Linux</a> sources. Doxygen is developed on a <a href="http://www.linux.org">Linux</a>
platform, but it runs on most other UNIX flavors as well. platform, but it runs on most other UNIX flavors as well.
An executable for Windows 95/NT is also available. An executable for Windows 9x/NT is also available.
Doxygen can also be configured to extract the code-structure from undocumented Doxygen can also be configured to extract the code-structure from undocumented
source files. This can be very useful to quickly find your way in large source files. This can be very useful to quickly find your way in large
...@@ -106,6 +111,17 @@ list of projects that use doxygen (see {\tt http://www.stack.nl/$\sim$dimitri/do ...@@ -106,6 +111,17 @@ list of projects that use doxygen (see {\tt http://www.stack.nl/$\sim$dimitri/do
\endlatexonly \endlatexonly
If you know other projects, let me know and I'll add them. If you know other projects, let me know and I'll add them.
<h2>Future work</h2>
Although doxygen is used successfully by a lot of people already,
there is always room for improvement. Therefore, I have compiled a
\htmlonly
<a href="http://www.stack.nl/~dimitri/doxygen/todo.html">todo/wish list</a>
\endhtmlonly
\latexonly
todo/wish list (see {\tt http://www.stack.nl/$\sim$dimitri/doxygen/todo.html})
\endlatexonly
of possible and/or requested enhancements.
<h2>Acknowledgements</h2> <h2>Acknowledgements</h2>
\addindex acknowledgements \addindex acknowledgements
Thanks go to: Thanks go to:
......
...@@ -29,7 +29,6 @@ following to build the executable: ...@@ -29,7 +29,6 @@ following to build the executable:
\addindex Qt \addindex Qt
<LI>The <a href="ftp://prep.ai.mit.edu/pub/gnu">GNU</a> tools <LI>The <a href="ftp://prep.ai.mit.edu/pub/gnu">GNU</a> tools
flex, bison and make flex, bison and make
\latexonly(see {\tt ftp://prep.ai.mit.edu/pub/gnu})\endlatexonly.
\addindex flex \addindex flex
\addindex bison \addindex bison
\addindex make \addindex make
...@@ -38,6 +37,8 @@ following to build the executable: ...@@ -38,6 +37,8 @@ following to build the executable:
\latexonly(see {\tt http://www.perl.com})\endlatexonly. \latexonly(see {\tt http://www.perl.com})\endlatexonly.
\addindex perl \addindex perl
</UL> </UL>
For platform specific installation instructions see the \c INSTALL file
that is included in the package.
\addindex HTTP \addindex HTTP
\addindex CGI \addindex CGI
...@@ -45,17 +46,25 @@ To use the search engine \c doxysearch, you will also need ...@@ -45,17 +46,25 @@ To use the search engine \c doxysearch, you will also need
a HTTP daemon running on the target system and permission to execute a a HTTP daemon running on the target system and permission to execute a
CGI binary. CGI binary.
Once you have Qt installed correctly, you can simply enter: If you are running Unix, and have Qt installed correctly, you can simply enter
\verbatim \verbatim
make configure
\endverbatim \endverbatim
to get a list of all supported platforms/compilers. to set up the makefiles for your platform. For Windows this step can be
Typing <tt>make</tt> followed by your platform will compile doxygen. skipped.
For Linux you can enter the following:
To override the auto detected platform you can specify
\verbatim \verbatim
make linux-g++ configure --platform platform-type
\endverbatim \endverbatim
See the \c PLATFORMS file for a list of possible platforms.
For more configuration options use <code>configure --help</code>
To compile and link the sources enter
\verbatim
make
\endverbatim
in the root of the distribution.
Doxygen should compile without errors or warnings. Doxygen should compile without errors or warnings.
If it does not, please send the compilation errors or warnings along If it does not, please send the compilation errors or warnings along
with a description of your platform to with a description of your platform to
...@@ -67,6 +76,11 @@ You may want to copy these files to a location in your path ...@@ -67,6 +76,11 @@ You may want to copy these files to a location in your path
(\c /usr/local/bin for instance) or add the \c bin (\c /usr/local/bin for instance) or add the \c bin
directory of the distribution to your search path. directory of the distribution to your search path.
On Unix you can also type:
\verbatim
make install
\endverbatim
The following binaries should now be available: The following binaries should now be available:
<UL> <UL>
<LI>\c doxygen: for generating the class browser. <LI>\c doxygen: for generating the class browser.
...@@ -85,8 +99,8 @@ Doxygen was developed and tested under Linux using the following tools: ...@@ -85,8 +99,8 @@ Doxygen was developed and tested under Linux using the following tools:
<li>GNU make version 3.76.1 <li>GNU make version 3.76.1
<li>Perl version 5.005_02 <li>Perl version 5.005_02
<li>VIM version 5.4 <li>VIM version 5.4
<li>Netscape 4.04 & 4.5 <li>Netscape 4.61
<li>Troll Tech's tmake version 1.2 (included in the distribution) <li>Troll Tech's tmake version 1.3 (included in the distribution)
<li>teTeX version 0.9 <li>teTeX version 0.9
</ul> </ul>
......
...@@ -22,11 +22,11 @@ ...@@ -22,11 +22,11 @@
The following output formats are \e directly supported by doxygen: The following output formats are \e directly supported by doxygen:
<dl> <dl>
<dt><b>HTML</b> <dt><b>HTML</b>
<dd>Generated if GENERATE_HTML is set to YES in the configuration file. <dd>Generated if \c GENERATE_HTML is set to \c YES in the configuration file.
<dt>\f$\mbox{\LaTeX}\f$ <dt>\f$\mbox{\LaTeX}\f$
<dd>Generated if GENERATE_LATEX is set to YES in the configuration file. <dd>Generated if \c GENERATE_LATEX is set to \c YES in the configuration file.
<dt><b>Man pages</b> <dt><b>Man pages</b>
<dd>Generated if GENERATE_MAN is set to YES in the configuration file. <dd>Generated if \c GENERATE_MAN is set to \c YES in the configuration file.
</dl> </dl>
The following output formats are \e indirectly supported by doxygen: The following output formats are \e indirectly supported by doxygen:
...@@ -42,7 +42,7 @@ The following output formats are \e indirectly supported by doxygen: ...@@ -42,7 +42,7 @@ The following output formats are \e indirectly supported by doxygen:
<dd>Generated from the \f$\mbox{\LaTeX}\f$ output by <dd>Generated from the \f$\mbox{\LaTeX}\f$ output by
running <code>make pdf</code> in the output directory. running <code>make pdf</code> in the output directory.
In order to get hyperlinks in the pdf file, In order to get hyperlinks in the pdf file,
\c PDF_HYPERLINKS should be set to \c YES. \c PDF_HYPERLINKS should be set to \c YES in the configuration file.
</dl> </dl>
*/ */
...@@ -46,8 +46,9 @@ where \<config-file\> is the name of the configuration file. If you omit ...@@ -46,8 +46,9 @@ where \<config-file\> is the name of the configuration file. If you omit
the file name, a file named \c Doxyfile will be created. If a file with the the file name, a file named \c Doxyfile will be created. If a file with the
name \<config-file\> already exists, doxygen will rename it to name \<config-file\> already exists, doxygen will rename it to
\<config-file\>.bak before generating the configuration template. \<config-file\>.bak before generating the configuration template.
If you use <code>-</code> as the file name then doxygen will try to read If you use <code>-</code> (i.e. the minus sign) as the file name then
the configuration file from standard input (<code>stdin</code>). doxygen will try to read the configuration file from standard
input (<code>stdin</code>).
The configuration file has a format that is similar to that of a (simple) The configuration file has a format that is similar to that of a (simple)
Makefile. It contains of a number of assignments (tags) of the form: Makefile. It contains of a number of assignments (tags) of the form:
...@@ -82,7 +83,9 @@ to \c YES. ...@@ -82,7 +83,9 @@ to \c YES.
To analyse an existing piece of software it is useful to cross-reference To analyse an existing piece of software it is useful to cross-reference
a (documented) entity with its definition in the source files. Doxygen will a (documented) entity with its definition in the source files. Doxygen will
generate such cross-references if you set the SOURCE_BROWSER tag to YES. generate such cross-references if you set the \c SOURCE_BROWSER tag to \c YES.
It can also include the sources directly into the documentation by setting
\c INLINE_SOURCES to \c YES (this can be handly for code reviews for instance).
\subsection step2 Step 2: Running doxygen \subsection step2 Step 2: Running doxygen
...@@ -120,10 +123,11 @@ By typing \c make in the \c latex directory the dvi file \c refman.dvi ...@@ -120,10 +123,11 @@ By typing \c make in the \c latex directory the dvi file \c refman.dvi
will be generated (provided that you have a make tool called will be generated (provided that you have a make tool called
<code>make</code> ofcourse). This file can then be viewed using \c xdvi or <code>make</code> ofcourse). This file can then be viewed using \c xdvi or
converted into a postscript file \c refman.ps by typing <code>make ps</code> converted into a postscript file \c refman.ps by typing <code>make ps</code>
(this requires \c dvips ). Conversion to PDF is also possible; just type (this requires \c dvips ). The Postscript file can be send to a postscript
<code>make pdf</code>. The Postscript file can be send to a postscript
printer. If you do not have a postscript printer, you can try to use printer. If you do not have a postscript printer, you can try to use
ghostscript to convert postscript into something your printer understands. ghostscript to convert postscript into something your printer understands.
Conversion to PDF is also possible; just type
<code>make pdf</code>.
To get the best results for PDF output you should set the To get the best results for PDF output you should set the
\c PDF_HYPERLINKS tag to \c YES. \c PDF_HYPERLINKS tag to \c YES.
...@@ -436,7 +440,7 @@ Then by default doxygen will feed the following to its parser: ...@@ -436,7 +440,7 @@ Then by default doxygen will feed the following to its parser:
#define VERSION #define VERSION
#define CONST_STRING #define CONST_STRING
static CONST_STRING version = "1.xx"; static CONST_STRING version = "2.xx";
\endverbatim \endverbatim
You can disable all preprocessing by setting \c ENABLE_PREPROCESSING to \c You can disable all preprocessing by setting \c ENABLE_PREPROCESSING to \c
...@@ -541,8 +545,8 @@ PREDEFINED = QListT:=QList ...@@ -541,8 +545,8 @@ PREDEFINED = QListT:=QList
\endverbatim \endverbatim
As you can see doxygen's preprocessor is quite powerful, but if you want As you can see doxygen's preprocessor is quite powerful, but if you want
even more flexibility you can always write an input filter and specify it on even more flexibility you can always write an input filter and specify it
the \c INPUT_FILTER flag. after the \c INPUT_FILTER tag.
\subsection moreinfo More information \subsection moreinfo More information
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>Annotated Index</title> <title>Annotated Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>Grouping Compound List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<ul> <hr><h1>Grouping Compound List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<ul>
<li><a class="el" href="class_c1.html">C1</a> (Class C1 in group 1) <li><a class="el" href="class_c1.html">C1</a> (Class C1 in group 1)
<li><a class="el" href="class_c2.html">C2</a> (Class C2 in group 1) <li><a class="el" href="class_c2.html">C2</a> (Class C2 in group 1)
...@@ -14,10 +14,10 @@ ...@@ -14,10 +14,10 @@
<li><a class="el" href="class_c5.html">C5</a> (Class C5 in <a href="group_group3.html"> the third group</a>) <li><a class="el" href="class_c5.html">C5</a> (Class C5 in <a href="group_group3.html"> the third group</a>)
<li><a class="el" href="class_c6.html">C6</a> (Class C6 in all groups) <li><a class="el" href="class_c6.html">C6</a> (Class C6 in all groups)
</ul> </ul>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>C1 Class Reference</title> <title>C1 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>C1 Class Reference</h1>class C1 in group 1. <hr><h1>C1 Class Reference</h1>class C1 in group 1.
<a href="#_details">More...</a> <a href="#_details">More...</a>
<p> <p>
...@@ -16,10 +16,10 @@ class C1 in group 1. ...@@ -16,10 +16,10 @@ class C1 in group 1.
<p> <p>
<hr>The documentation for this class was generated from the following file:<ul> <hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="group.cpp.html">group.cpp</a></ul> <li><a class="el" href="group.cpp.html">group.cpp</a></ul>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>C2 Class Reference</title> <title>C2 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>C2 Class Reference</h1>class C2 in group 1. <hr><h1>C2 Class Reference</h1>class C2 in group 1.
<a href="#_details">More...</a> <a href="#_details">More...</a>
<p> <p>
...@@ -16,10 +16,10 @@ class C2 in group 1. ...@@ -16,10 +16,10 @@ class C2 in group 1.
<p> <p>
<hr>The documentation for this class was generated from the following file:<ul> <hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="group.cpp.html">group.cpp</a></ul> <li><a class="el" href="group.cpp.html">group.cpp</a></ul>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>C3 Class Reference</title> <title>C3 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>C3 Class Reference</h1>class C3 in group 2. <hr><h1>C3 Class Reference</h1>class C3 in group 2.
<a href="#_details">More...</a> <a href="#_details">More...</a>
<p> <p>
...@@ -16,10 +16,10 @@ class C3 in group 2. ...@@ -16,10 +16,10 @@ class C3 in group 2.
<p> <p>
<hr>The documentation for this class was generated from the following file:<ul> <hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="group.cpp.html">group.cpp</a></ul> <li><a class="el" href="group.cpp.html">group.cpp</a></ul>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>C4 Class Reference</title> <title>C4 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>C4 Class Reference</h1>class C4 in group 2. <hr><h1>C4 Class Reference</h1>class C4 in group 2.
<a href="#_details">More...</a> <a href="#_details">More...</a>
<p> <p>
...@@ -16,10 +16,10 @@ class C4 in group 2. ...@@ -16,10 +16,10 @@ class C4 in group 2.
<p> <p>
<hr>The documentation for this class was generated from the following file:<ul> <hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="group.cpp.html">group.cpp</a></ul> <li><a class="el" href="group.cpp.html">group.cpp</a></ul>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>C5 Class Reference</title> <title>C5 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>C5 Class Reference</h1>class C5 in <a href="group_group3.html"> the third group</a>. <hr><h1>C5 Class Reference</h1>class C5 in <a href="group_group3.html"> the third group</a>.
<a href="#_details">More...</a> <a href="#_details">More...</a>
<p> <p>
...@@ -16,10 +16,10 @@ class C5 in <a href="group_group3.html"> the third group</a>. ...@@ -16,10 +16,10 @@ class C5 in <a href="group_group3.html"> the third group</a>.
<p> <p>
<hr>The documentation for this class was generated from the following file:<ul> <hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="group.cpp.html">group.cpp</a></ul> <li><a class="el" href="group.cpp.html">group.cpp</a></ul>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>C6 Class Reference</title> <title>C6 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>C6 Class Reference</h1>class C6 in all groups. <hr><h1>C6 Class Reference</h1>class C6 in all groups.
<a href="#_details">More...</a> <a href="#_details">More...</a>
<p> <p>
...@@ -18,10 +18,10 @@ class C6 in all groups. ...@@ -18,10 +18,10 @@ class C6 in all groups.
<b>See also: </b><dd> <b>See also: </b><dd>
<a href="group_group1.html"> The first group</a>, <a href="group_group2.html">The Second Group</a>, <a href="group_group3.html">The Third Group</a> </dl><hr>The documentation for this class was generated from the following file:<ul> <a href="group_group1.html"> The first group</a>, <a href="group_group2.html">The Second Group</a>, <a href="group_group3.html">The Third Group</a> </dl><hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="group.cpp.html">group.cpp</a></ul> <li><a class="el" href="group.cpp.html">group.cpp</a></ul>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
H1 { text-align: center } H1 { text-align: center }
A.qindex {}
A.qindexRef {}
A.el { text-decoration: none; font-weight: bold } A.el { text-decoration: none; font-weight: bold }
A.elRef { font-weight: bold }
A.code { text-decoration: none; font-weight: normal; color: #4444ee }
A.codeRef { font-weight: normal; color: #4444ee }
A.gl:link { color: #ffffff }
A.gl:visited { color: #ffffff }
A.gl { text-decoration: none; font-weight: bold; background-color: #ff8080 }
DL.el { margin-left: -1cm } DL.el { margin-left: -1cm }
DIV.fragment { width: 100%; border: none; background-color: #eeeeee } DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
DIV.in { margin-left: 16 } DIV.in { margin-left: 16 }
DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 } DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }
A.gl:link { color: #ffffff }
A.gl:visited { color: #ffffff }
A.gl { text-decoration: none; font-weight: bold; background-color: #ff8080 }
TD.md { background-color: #f2f2ff } TD.md { background-color: #f2f2ff }
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>File Index</title> <title>File Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>Grouping File List</h1> <hr><h1>Grouping File List</h1>
<p> <p>
Here is a list of all documented files with brief descriptions: Here is a list of all documented files with brief descriptions:
...@@ -13,10 +13,10 @@ Here is a list of all documented files with brief descriptions: ...@@ -13,10 +13,10 @@ Here is a list of all documented files with brief descriptions:
<ul> <ul>
<li><a class="el" href="group.cpp.html">group.cpp</a> (This file in group 3) <li><a class="el" href="group.cpp.html">group.cpp</a> (This file in group 3)
</ul> </ul>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>group.cpp File Reference</title> <title>group.cpp File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>group.cpp File Reference</h1>this file in group 3. <hr><h1>group.cpp File Reference</h1>this file in group 3.
<a href="#_details">More...</a> <a href="#_details">More...</a>
<p> <p>
...@@ -19,10 +19,10 @@ ...@@ -19,10 +19,10 @@
<tr><td><img src="null.gif"></td><td><img src="null.gif"></td><td nowrap align=right valign=top>class &nbsp;</td><td valign=top><a class="el" href="class_c6.html">C6</a></td></tr> <tr><td><img src="null.gif"></td><td><img src="null.gif"></td><td nowrap align=right valign=top>class &nbsp;</td><td valign=top><a class="el" href="class_c6.html">C6</a></td></tr>
</table> </table>
<hr><a name="_details"></a><h2>Detailed Description</h2> <hr><a name="_details"></a><h2>Detailed Description</h2>
this file in group 3.<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by this file in group 3.<hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>The First Group</title> <title>The First Group</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>The First Group</h1><tr><td colspan=4><br><h2>Compounds</h2></td></tr> <hr><h1>The First Group</h1><tr><td colspan=4><br><h2>Compounds</h2></td></tr>
<ul> <ul>
<li><a class="el" href="class_c1.html">C1</a> <li><a class="el" href="class_c1.html">C1</a>
...@@ -13,10 +13,10 @@ ...@@ -13,10 +13,10 @@
<li><a class="el" href="class_c6.html">C6</a> <li><a class="el" href="class_c6.html">C6</a>
</ul> </ul>
<hr><a name="_details"></a><h2>Detailed Description</h2> <hr><a name="_details"></a><h2>Detailed Description</h2>
This is the first group <hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by This is the first group <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>The Second Group</title> <title>The Second Group</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>The Second Group</h1><tr><td colspan=4><br><h2>Compounds</h2></td></tr> <hr><h1>The Second Group</h1><tr><td colspan=4><br><h2>Compounds</h2></td></tr>
<ul> <ul>
<li><a class="el" href="class_c3.html">C3</a> <li><a class="el" href="class_c3.html">C3</a>
...@@ -13,10 +13,10 @@ ...@@ -13,10 +13,10 @@
<li><a class="el" href="class_c6.html">C6</a> <li><a class="el" href="class_c6.html">C6</a>
</ul> </ul>
<hr><a name="_details"></a><h2>Detailed Description</h2> <hr><a name="_details"></a><h2>Detailed Description</h2>
This is the second group <hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by This is the second group <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>The Third Group</title> <title>The Third Group</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>The Third Group</h1><tr><td colspan=4><br><h2>Files</h2></td></tr> <hr><h1>The Third Group</h1><tr><td colspan=4><br><h2>Files</h2></td></tr>
<ul> <ul>
<li><a class="el" href="group.cpp.html">group.cpp</a> <li><a class="el" href="group.cpp.html">group.cpp</a>
...@@ -16,10 +16,10 @@ ...@@ -16,10 +16,10 @@
<li><a class="el" href="class_c6.html">C6</a> <li><a class="el" href="class_c6.html">C6</a>
</ul> </ul>
<hr><a name="_details"></a><h2>Detailed Description</h2> <hr><a name="_details"></a><h2>Detailed Description</h2>
This is the third group <hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by This is the third group <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,15 +3,15 @@ ...@@ -3,15 +3,15 @@
<title>Main Index</title> <title>Main Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>Grouping Documentation</h1> <hr><h1>Grouping Documentation</h1>
<p> <p>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<title>Module Index</title> <title>Module Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff"> </head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 0.49-990728 on Fri Nov 5 20:43:30 1999 --> <!-- Generated by Doxygen 0.49-991106 on Sat Dec 4 22:01:06 1999 -->
<center> <center>
<a href="index.html">Main Page</a> &nbsp; <a href="modules.html">Modules</a> &nbsp; <a href="annotated.html">Compound List</a> &nbsp; <a href="files.html">File List</a> &nbsp; </center> <a class="qindex"href="index.html">Main Page</a> &nbsp; <a class="qindex"href="modules.html">Modules</a> &nbsp; <a class="qindex"href="annotated.html">Compound List</a> &nbsp; <a class="qindex"href="files.html">File List</a> &nbsp; </center>
<hr><h1>Grouping Modules</h1>Here is a list of all modules: <hr><h1>Grouping Modules</h1>Here is a list of all modules:
<dl compact> <dl compact>
<dt><a href="group_group1.html">The First Group</a><dd> <dt><a href="group_group1.html">The First Group</a><dd>
...@@ -16,10 +16,10 @@ ...@@ -16,10 +16,10 @@
<p> <p>
</dl> </dl>
<hr><address><small>Generated at Fri Nov 5 20:43:30 1999 for Grouping by <hr><address><small>Generated at Sat Dec 4 22:01:06 1999 for Grouping by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html"> <a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0 <img src="doxygen.gif" alt="doxygen" align=center border=0
width=118 height=53></a> 0.49-990728 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, width=118 height=53></a> 0.49-991106 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
&copy; 1997-1999</small></address> &copy; 1997-1999</small></address>
</body> </body>
</html> </html>
...@@ -262,7 +262,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -262,7 +262,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (incFile) if (incFile)
{ {
QCString nm=incName.copy(); QCString nm=incName.copy();
if (incName.isNull()) nm=incFile->name(); if (incName.isEmpty()) nm=incFile->name();
ol.startTypewriter(); ol.startTypewriter();
ol.docify("#include <"); ol.docify("#include <");
ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html);
...@@ -418,7 +418,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -418,7 +418,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
bool exampleFlag=hasExamples(); bool exampleFlag=hasExamples();
if (!briefDescription().isEmpty() || if (!briefDescription().isEmpty() ||
!documentation().isEmpty() || !documentation().isEmpty() ||
(bodyLine!=-1 && bodyDef) || (startBodyLine!=-1 && bodyDef) ||
exampleFlag) exampleFlag)
{ {
ol.writeRuler(); ol.writeRuler();
...@@ -494,7 +494,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -494,7 +494,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
//ol.endDescItem(); //ol.endDescItem();
ol.endDescList(); ol.endDescList();
} }
writeSourceRef(ol); writeSourceRef(ol,name());
} }
pubMembers.countDocMembers(); pubMembers.countDocMembers();
...@@ -837,7 +837,7 @@ void ClassDef::writeIncludeFile(OutputList &ol) ...@@ -837,7 +837,7 @@ void ClassDef::writeIncludeFile(OutputList &ol)
startFile(ol,fileName+"-include",name()+" Include File"); startFile(ol,fileName+"-include",name()+" Include File");
startTitle(ol,0); startTitle(ol,0);
QCString n=incName.copy(); QCString n=incName.copy();
if (incName.isNull()) n=incFile->name(); if (incName.isEmpty()) n=incFile->name();
parseText(ol,n); parseText(ol,n);
endTitle(ol,0,0); endTitle(ol,0,0);
parseText(ol,theTranslator->trVerbatimText(incFile->name())); parseText(ol,theTranslator->trVerbatimText(incFile->name()));
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -24,6 +24,7 @@ class OutputList; ...@@ -24,6 +24,7 @@ class OutputList;
class FileDef; class FileDef;
extern void parseCode(OutputList &,const char *,const QCString &, extern void parseCode(OutputList &,const char *,const QCString &,
bool ,const char *,FileDef *fd=0); bool ,const char *,FileDef *fd=0,
int startLine=-1,int endLine=-1,bool inlineFragment=FALSE);
extern void initParseCodeContext(); extern void initParseCodeContext();
#endif #endif
...@@ -72,65 +72,65 @@ typedef QList<CodeClassDef> CodeClassList; ...@@ -72,65 +72,65 @@ typedef QList<CodeClassDef> CodeClassList;
typedef QDict<CodeClassDef> CodeClassDict; typedef QDict<CodeClassDef> CodeClassDict;
typedef QList<CodeVarDef> CodeVarList; typedef QList<CodeVarDef> CodeVarList;
static CodeClassList codeClassList;
static CodeClassDict codeClassDict(17);
static CodeVarList codeVarList;
static CodeVarList codeParmList;
/* ----------------------------------------------------------------- /* -----------------------------------------------------------------
*
* statics * statics
*/ */
static const char * inputString; //!< the code fragment as text static CodeClassList g_codeClassList;
static int inputPosition; //!< read offset during parsing static CodeClassDict g_codeClassDict(17);
static int inputLines; //!< number of line in the code fragment static CodeVarList g_codeVarList;
static int yyLineNr; //!< current line number static CodeVarList g_codeParmList;
static int lastCContext; static const char * g_inputString; //!< the code fragment as text
static int lastSpecialCContext; static int g_inputPosition; //!< read offset during parsing
static int lastStringContext; static int g_inputLines; //!< number of line in the code fragment
static int bracketCount = 0; static int g_yyLineNr; //!< current line number
static int curlyCount = 0; static int g_lastCContext;
static int sharpCount = 0; static int g_lastSpecialCContext;
static QCString type; static int g_lastStringContext;
static QCString name; static int g_bracketCount = 0;
static QCString args; static int g_curlyCount = 0;
static QCString parmType; static int g_sharpCount = 0;
static QCString parmName; static QCString g_type;
static bool inClass; static QCString g_name;
static QCString classScope; static QCString g_args;
static OutputList *code; static QCString g_parmType;
static CodeClassDef ccd; static QCString g_parmName;
static CodeVarDef cvd; static bool g_inClass;
static bool exampleBlock; static QCString g_classScope;
static QCString exampleName; static OutputList * g_code;
static QCString exampleFile; static CodeClassDef g_ccd;
static int anchorCount; static CodeVarDef g_cvd;
static FileDef *sourceFileDef; static bool g_exampleBlock;
static QCString lastVariable; static QCString g_exampleName;
static QCString g_exampleFile;
// start a new line of code, inserting a line number if sourceFileDef static int g_anchorCount;
static FileDef * g_sourceFileDef;
static bool g_includeCodeFragment;
// start a new line of code, inserting a line number if g_sourceFileDef
// is TRUE. If a definition starts at the current line, then the line // is TRUE. If a definition starts at the current line, then the line
// number is linked to the documentation of that definition. // number is linked to the documentation of that definition.
static void startCodeLine(OutputList &ol) static void startCodeLine(OutputList &ol)
{ {
if (sourceFileDef) if (g_sourceFileDef)
{ {
QCString lineNumber,lineAnchor; QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d ",yyLineNr); lineNumber.sprintf("%05d",g_yyLineNr);
lineAnchor.sprintf("l%05d",yyLineNr); lineAnchor.sprintf("l%05d",g_yyLineNr);
Definition *d = sourceFileDef->getSourceDefinition(yyLineNr); Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr); QCString anchor = g_sourceFileDef->getSourceAnchor(g_yyLineNr);
if (d && d->isLinkableInProject()) if (!g_includeCodeFragment && d && d->isLinkableInProject())
{ {
ol.startCodeAnchor(lineAnchor); ol.startCodeAnchor(lineAnchor);
ol.writeCodeLink(d->getReference(),d->getOutputFileBase(), ol.writeCodeLink(d->getReference(),d->getOutputFileBase(),
anchor,lineNumber); anchor,lineNumber);
ol.endCodeAnchor(); ol.endCodeAnchor();
ol.codify(" ");
} }
else else
{ {
ol.codify(lineNumber); ol.codify(lineNumber);
ol.codify(" ");
} }
} }
ol.startCodeLine(); ol.startCodeLine();
...@@ -149,18 +149,18 @@ static void codifyLines(char *text) ...@@ -149,18 +149,18 @@ static void codifyLines(char *text)
while ((c=*p++) && c!='\n'); while ((c=*p++) && c!='\n');
if (c=='\n') if (c=='\n')
{ {
yyLineNr++; g_yyLineNr++;
*(p-1)='\0'; *(p-1)='\0';
code->codify(sp); g_code->codify(sp);
code->endCodeLine(); g_code->endCodeLine();
if (yyLineNr<inputLines) if (g_yyLineNr<g_inputLines)
{ {
startCodeLine(*code); startCodeLine(*g_code);
} }
} }
else else
{ {
code->codify(sp); g_code->codify(sp);
done=TRUE; done=TRUE;
} }
} }
...@@ -183,11 +183,11 @@ static void writeMultiLineCodeLink(OutputList &ol, ...@@ -183,11 +183,11 @@ static void writeMultiLineCodeLink(OutputList &ol,
while ((c=*p++) && c!='\n'); while ((c=*p++) && c!='\n');
if (c=='\n') if (c=='\n')
{ {
yyLineNr++; g_yyLineNr++;
*(p-1)='\0'; *(p-1)='\0';
ol.writeCodeLink(ref,file,anchor,sp); ol.writeCodeLink(ref,file,anchor,sp);
ol.endCodeLine(); ol.endCodeLine();
if (yyLineNr<inputLines) if (g_yyLineNr<g_inputLines)
{ {
startCodeLine(ol); startCodeLine(ol);
} }
...@@ -202,58 +202,59 @@ static void writeMultiLineCodeLink(OutputList &ol, ...@@ -202,58 +202,59 @@ static void writeMultiLineCodeLink(OutputList &ol,
static void addType() static void addType()
{ {
if (name=="const") { name.resize(0); return; } if (g_name=="const") { g_name.resize(0); return; }
if (type.length()) type += ' ' ; if (g_type.length()) g_type += ' ' ;
type += name ; g_type += g_name ;
name.resize(0) ; g_name.resize(0) ;
if (type.length()) type += ' ' ; if (g_type.length()) g_type += ' ' ;
type += args ; g_type += g_args ;
args.resize(0) ; g_args.resize(0) ;
} }
static void addParmType() static void addParmType()
{ {
if (parmName=="const") { parmName.resize(0); return; } if (g_parmName=="const") { g_parmName.resize(0); return; }
if (parmType.length()) parmType += ' ' ; if (g_parmType.length()) g_parmType += ' ' ;
parmType += parmName ; g_parmType += g_parmName ;
parmName.resize(0) ; g_parmName.resize(0) ;
} }
static void setClassScope(const QCString &name) static void setClassScope(const QCString &name)
{ {
//printf("setClassScope(%s)\n",name.data());
QCString n=name; QCString n=name;
n=n.simplifyWhiteSpace(); n=n.simplifyWhiteSpace();
int index; int index;
if ((index=n.find("::"))!=-1) if ((index=n.find("::"))!=-1)
classScope=n.left(index); g_classScope=n.left(index);
else else
classScope.resize(0); g_classScope.resize(0);
//printf("--->New class scope `%s'\n",classScope.data()); //printf("--->New class scope `%s'\n",g_classScope.data());
} }
static void addVariable() static void addVariable()
{ {
cvd.name=name.copy().simplifyWhiteSpace(); g_cvd.name=g_name.copy().simplifyWhiteSpace();
cvd.type=type.copy().simplifyWhiteSpace(); g_cvd.type=g_type.copy().simplifyWhiteSpace();
if (type.length()==0) if (g_type.length()==0)
return; return;
else if ((getClass(cvd.type)) || (codeClassDict[cvd.type])) else if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{ {
cvd.classScope=classScope; g_cvd.classScope=g_classScope;
codeVarList.append(new CodeVarDef(cvd)); // add it to a list g_codeVarList.append(new CodeVarDef(g_cvd)); // add it to a list
} }
} }
static void addParameter() static void addParameter()
{ {
cvd.name=parmName.copy().simplifyWhiteSpace(); g_cvd.name=g_parmName.copy().simplifyWhiteSpace();
cvd.type=parmType.copy().simplifyWhiteSpace(); g_cvd.type=g_parmType.copy().simplifyWhiteSpace();
if (cvd.type.length()==0) if (g_cvd.type.length()==0)
return; return;
else if ((getClass(cvd.type)) || (codeClassDict[cvd.type])) else if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{ {
cvd.classScope=classScope; g_cvd.classScope=g_classScope;
codeParmList.append(new CodeVarDef(cvd)); // add it to a list g_codeParmList.append(new CodeVarDef(g_cvd)); // add it to a list
} }
} }
...@@ -264,19 +265,19 @@ static void generateClassLink(OutputList &ol,char *clName) ...@@ -264,19 +265,19 @@ static void generateClassLink(OutputList &ol,char *clName)
ClassDef *cd; ClassDef *cd;
if ((cd=getClass(className)) && cd->isLinkable()) if ((cd=getClass(className)) && cd->isLinkable())
{ {
if (exampleBlock) if (g_exampleBlock)
{ {
QCString anchor; QCString anchor;
anchor.sprintf("_a%d",anchorCount); anchor.sprintf("_a%d",g_anchorCount);
//printf("addExampleClass(%s,%s,%s)\n",anchor.data(),exampleName.data(), //printf("addExampleClass(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
// exampleFile.data()); // g_exampleFile.data());
if (cd->addExample(anchor,exampleName,exampleFile)) if (cd->addExample(anchor,g_exampleName,g_exampleFile))
{ {
bool latexOn = ol.isEnabled(OutputGenerator::Latex); bool latexOn = ol.isEnabled(OutputGenerator::Latex);
if (latexOn) ol.disable(OutputGenerator::Latex); if (latexOn) ol.disable(OutputGenerator::Latex);
ol.writeAnchor(anchor); ol.writeAnchor(anchor);
if (latexOn) ol.enable(OutputGenerator::Latex); if (latexOn) ol.enable(OutputGenerator::Latex);
anchorCount++; g_anchorCount++;
} }
} }
//ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className); //ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
...@@ -302,19 +303,19 @@ static bool getLink(const char *className, ...@@ -302,19 +303,19 @@ static bool getLink(const char *className,
if (getDefs(c,m,"()",md,cd,fd,nd) && md->isLinkable()) if (getDefs(c,m,"()",md,cd,fd,nd) && md->isLinkable())
{ {
//printf("Found!\n"); //printf("Found!\n");
if (exampleBlock) if (g_exampleBlock)
{ {
QCString anchor; QCString anchor;
anchor.sprintf("a%d",anchorCount); anchor.sprintf("a%d",g_anchorCount);
//printf("addExampleFile(%s,%s,%s)\n",anchor.data(),exampleName.data(), //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
// exampleFile.data()); // g_exampleFile.data());
if (md->addExample(anchor,exampleName,exampleFile)) if (md->addExample(anchor,g_exampleName,g_exampleFile))
{ {
bool latexEnabled = result.isEnabled(OutputGenerator::Latex); bool latexEnabled = result.isEnabled(OutputGenerator::Latex);
if (latexEnabled) result.disable(OutputGenerator::Latex); if (latexEnabled) result.disable(OutputGenerator::Latex);
result.writeAnchor(anchor); result.writeAnchor(anchor);
if (latexEnabled) result.enable(OutputGenerator::Latex); if (latexEnabled) result.enable(OutputGenerator::Latex);
anchorCount++; g_anchorCount++;
} }
} }
Definition *d=0; Definition *d=0;
...@@ -352,17 +353,17 @@ static void generateMemberLink(OutputList &ol,const char *varName, ...@@ -352,17 +353,17 @@ static void generateMemberLink(OutputList &ol,const char *varName,
{ {
//printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n", //printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n",
// varName,memName,classScope.data()); // varName,memName,classScope.data());
CodeVarDef *cvd=codeParmList.last(); CodeVarDef *cvd=g_codeParmList.last();
while (cvd && cvd->name!=varName) cvd=codeParmList.prev(); while (cvd && cvd->name!=varName) cvd=g_codeParmList.prev();
if (!cvd) if (!cvd)
{ {
cvd=codeVarList.last(); cvd=g_codeVarList.last();
while (cvd && cvd->name!=varName) cvd=codeVarList.prev(); while (cvd && cvd->name!=varName) cvd=g_codeVarList.prev();
} }
if (cvd) // variable found if (cvd) // variable found
{ {
//printf("variable found type=%s!\n",cvd->type.data()); //printf("variable found type=%s!\n",cvd->type.data());
CodeClassDef *ccd=codeClassDict[cvd->type]; CodeClassDef *ccd=g_codeClassDict[cvd->type];
if (ccd) if (ccd)
{ {
//printf("Class found!\n"); //printf("Class found!\n");
...@@ -402,7 +403,7 @@ static void generateMemberLink(OutputList &ol,const char *varName, ...@@ -402,7 +403,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
} }
else else
{ {
ClassDef *vcd = getClass(classScope); ClassDef *vcd = getClass(g_classScope);
if (vcd) if (vcd)
{ {
//printf("Found class for variable `%s'\n",varName); //printf("Found class for variable `%s'\n",varName);
...@@ -465,7 +466,7 @@ static void generateFunctionLink(OutputList &ol,char *funcName) ...@@ -465,7 +466,7 @@ static void generateFunctionLink(OutputList &ol,char *funcName)
{ {
OutputList result(&ol); OutputList result(&ol);
CodeClassDef *ccd=0; CodeClassDef *ccd=0;
QCString locScope=classScope.copy(); QCString locScope=g_classScope.copy();
QCString locFunc=removeWhiteSpace(funcName); QCString locFunc=removeWhiteSpace(funcName);
int i=locFunc.findRev("::"); int i=locFunc.findRev("::");
if (i>0) if (i>0)
...@@ -474,9 +475,9 @@ static void generateFunctionLink(OutputList &ol,char *funcName) ...@@ -474,9 +475,9 @@ static void generateFunctionLink(OutputList &ol,char *funcName)
locFunc=locFunc.right(locFunc.length()-i-2); locFunc=locFunc.right(locFunc.length()-i-2);
} }
//printf("generateFunctionLink(%s) classScope=%s\n",locFunc.data(),locScope.data()); //printf("generateFunctionLink(%s) classScope=%s\n",locFunc.data(),locScope.data());
if (locScope.length()>0 && (ccd=codeClassDict[locScope])) if (locScope.length()>0 && (ccd=g_codeClassDict[locScope]))
{ {
//printf("using classScope %s\n",classScope.data()); //printf("using classScope %s\n",g_classScope.data());
char *s=ccd->bases.first(); char *s=ccd->bases.first();
while (s) while (s)
{ {
...@@ -502,7 +503,7 @@ static void generateFunctionLink(OutputList &ol,char *funcName) ...@@ -502,7 +503,7 @@ static void generateFunctionLink(OutputList &ol,char *funcName)
/*! counts the number of lines in the input */ /*! counts the number of lines in the input */
static int countLines() static int countLines()
{ {
const char *p=inputString; const char *p=g_inputString;
char c; char c;
int count=1; int count=1;
while ((c=*p++)) if (c=='\n') count++; while ((c=*p++)) if (c=='\n') count++;
...@@ -517,9 +518,9 @@ static int countLines() ...@@ -517,9 +518,9 @@ static int countLines()
static int yyread(char *buf,int max_size) static int yyread(char *buf,int max_size)
{ {
int c=0; int c=0;
while( c < max_size && inputString[inputPosition] ) while( c < max_size && g_inputString[g_inputPosition] )
{ {
*buf = inputString[inputPosition++] ; *buf = g_inputString[g_inputPosition++] ;
c++; buf++; c++; buf++;
} }
return c; return c;
...@@ -554,12 +555,12 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -554,12 +555,12 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<*>\x0d <*>\x0d
<Body>^([ \t]*"#"[ \t]"include"[ \t]*)("<"|"\"") { <Body>^([ \t]*"#"[ \t]"include"[ \t]*)("<"|"\"") {
code->codify(yytext); g_code->codify(yytext);
BEGIN( ReadInclude ); BEGIN( ReadInclude );
} }
<Body>("class"|"struct"|"union")[ \t\n]+ { <Body>("class"|"struct"|"union")[ \t\n]+ {
codifyLines(yytext); codifyLines(yytext);
//code->codify(yytext); //g_code->codify(yytext);
BEGIN( ClassName ); BEGIN( ClassName );
} }
<ReadInclude>[a-z_A-Z0-9.]+(("/"[a-z_A-Z0-9.]+)*)/(">"|"\"") { <ReadInclude>[a-z_A-Z0-9.]+(("/"[a-z_A-Z0-9.]+)*)/(">"|"\"") {
...@@ -569,24 +570,24 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -569,24 +570,24 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
if ((fd=findFileDef(&inputNameDict,yytext,ambig)) && if ((fd=findFileDef(&inputNameDict,yytext,ambig)) &&
fd->isLinkable()) fd->isLinkable())
{ {
code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext); g_code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext);
} }
else else
{ {
code->codify(yytext); g_code->codify(yytext);
} }
char c=yyinput(); char c=yyinput();
QCString text; QCString text;
text+=c; text+=c;
code->codify(text); g_code->codify(text);
BEGIN( Body ); BEGIN( Body );
} }
<Body>^[ \t]*"#" { <Body>^[ \t]*"#" {
code->codify(yytext); g_code->codify(yytext);
BEGIN( SkipCPP ) ; BEGIN( SkipCPP ) ;
} }
<SkipCPP>. { <SkipCPP>. {
code->codify(yytext); g_code->codify(yytext);
} }
<SkipCPP>\\\n { <SkipCPP>\\\n {
codifyLines(yytext); codifyLines(yytext);
...@@ -596,283 +597,285 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -596,283 +597,285 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN( Body ) ; BEGIN( Body ) ;
} }
<SkipCPP>"//" { <SkipCPP>"//" {
code->codify(yytext); g_code->codify(yytext);
} }
<Body>"{" { <Body>"{" {
code->codify(yytext); g_code->codify(yytext);
curlyCount++; g_curlyCount++;
type.resize(0); name.resize(0); g_type.resize(0);
g_name.resize(0);
} }
<Body>"}" { <Body>"}" {
code->codify(yytext); g_code->codify(yytext);
inClass=FALSE; g_inClass=FALSE;
if (--curlyCount<=0) if (--g_curlyCount<=0)
{ {
classScope.resize(0); g_classScope.resize(0);
codeParmList.clear(); g_codeParmList.clear();
} }
} }
<ClassName>";" { <ClassName>";" {
code->codify(yytext); g_code->codify(yytext);
BEGIN( Body ); BEGIN( Body );
} }
<ClassName>[*&]+ { <ClassName>[*&]+ {
addType(); addType();
code->codify(yytext); g_code->codify(yytext);
} }
<ClassName>{ID} { <ClassName>{ID} {
ccd.name=yytext; g_ccd.name=yytext;
addType(); addType();
generateClassLink(*code,yytext); generateClassLink(*g_code,yytext);
} }
<ClassName>[ \t\n]*":"[ \t\n]* { <ClassName>[ \t\n]*":"[ \t\n]* {
codifyLines(yytext); codifyLines(yytext);
BEGIN( Bases ); BEGIN( Bases );
} }
<Bases,ClassName>[ \t]*"{"[ \t]* { <Bases,ClassName>[ \t]*"{"[ \t]* {
code->codify(yytext); g_code->codify(yytext);
curlyCount++; g_curlyCount++;
inClass=TRUE; g_inClass=TRUE;
if (ccd.name.length()>0) if (g_ccd.name.length()>0)
{ {
classScope=ccd.name.copy(); g_classScope=g_ccd.name.copy();
CodeClassDef *cd=new CodeClassDef(ccd); CodeClassDef *cd=new CodeClassDef(g_ccd);
codeClassList.append(cd); g_codeClassList.append(cd);
codeClassDict.insert(cd->name,cd); g_codeClassDict.insert(cd->name,cd);
} }
BEGIN( Body ); BEGIN( Body );
} }
<Bases>"virtual" { <Bases>"virtual" {
code->codify(yytext); g_code->codify(yytext);
} }
<Bases>"public" { <Bases>"public" {
code->codify(yytext); g_code->codify(yytext);
} }
<Bases>"protected" { <Bases>"protected" {
code->codify(yytext); g_code->codify(yytext);
} }
<Bases>"private" { <Bases>"private" {
code->codify(yytext); g_code->codify(yytext);
} }
<Bases>{ID} { <Bases>{ID} {
//printf("%s:addBase(%s)\n",ccd.name.data(),yytext); //printf("%s:addBase(%s)\n",g_ccd.name.data(),yytext);
ccd.bases.inSort(yytext); g_ccd.bases.inSort(yytext);
generateClassLink(*code,yytext); generateClassLink(*g_code,yytext);
} }
<Bases>"<" { <Bases>"<" {
code->codify(yytext); g_code->codify(yytext);
sharpCount=1; g_sharpCount=1;
BEGIN ( SkipSharp ); BEGIN ( SkipSharp );
} }
<SkipSharp>"<" { <SkipSharp>"<" {
code->codify(yytext); g_code->codify(yytext);
++sharpCount; ++g_sharpCount;
} }
<SkipSharp>">" { <SkipSharp>">" {
code->codify(yytext); g_code->codify(yytext);
if (--sharpCount<=0) if (--g_sharpCount<=0)
BEGIN ( Bases ); BEGIN ( Bases );
} }
<Bases>"," { <Bases>"," {
code->codify(yytext); g_code->codify(yytext);
} }
<Body>("asm"|"auto"|"break"|"case"|"catch"|"continue"|"default"|"delete"|"do"|"else"|"for"|"goto"|"if"|"new"|"return"|"switch"|"this"|"throw"|"try"|"typedef"|"while")([ \t\n]*)/"(" { <Body>("asm"|"auto"|"break"|"case"|"catch"|"continue"|"default"|"delete"|"do"|"else"|"for"|"goto"|"if"|"new"|"return"|"switch"|"this"|"throw"|"try"|"typedef"|"while")([ \t\n]*)/"(" {
codifyLines(yytext); codifyLines(yytext);
name.resize(0);type.resize(0); g_name.resize(0);g_type.resize(0);
} }
<Body>("asm"|"auto"|"break"|"case"|"catch"|"continue"|"default"|"delete"|"do"|"else"|"for"|"goto"|"if"|"new"|"return"|"switch"|"this"|"throw"|"try"|"typedef"|"while")([ \t\n]*) { <Body>("asm"|"auto"|"break"|"case"|"catch"|"continue"|"default"|"delete"|"do"|"else"|"for"|"goto"|"if"|"new"|"return"|"switch"|"this"|"throw"|"try"|"typedef"|"while")([ \t\n]*) {
codifyLines(yytext); codifyLines(yytext);
name.resize(0);type.resize(0); g_name.resize(0);g_type.resize(0);
} }
/* /*
<Body>([a-z_A-Z~][a-z_A-Z0-9]*)/([ \t]*) { <Body>([a-z_A-Z~][a-z_A-Z0-9]*)/([ \t]*) {
generateClassLink(*code,yytext); generateClassLink(*g_code,yytext);
addType(); addType();
name+=yytext; name+=yytext;
} }
*/ */
<Body>{SCOPENAME}/[ \t\n]* { <Body>{SCOPENAME}/[ \t\n]* {
generateClassLink(*code,yytext); generateClassLink(*g_code,yytext);
//codifyLines(yytext); //codifyLines(yytext);
addType(); addType();
name+=yytext; g_name+=yytext;
} }
<Body>{SCOPENAME}/{B}*"(" { <Body>{SCOPENAME}/{B}*"(" {
addType(); addType();
//if (type.length()==0) //if (type.length()==0)
QCString tmp=yytext; QCString tmp=yytext;
generateFunctionLink(*code,yytext); generateFunctionLink(*g_code,yytext);
//else //else
// code->codify(yytext); // g_code->codify(yytext);
bracketCount=1; g_bracketCount=1;
args.resize(0); g_args.resize(0);
name+=yytext; g_name+=yytext;
BEGIN( FuncCall ); BEGIN( FuncCall );
} }
<FuncCall,Body,MemberCall>\" { <FuncCall,Body,MemberCall>\" {
code->codify(yytext); g_code->codify(yytext);
lastStringContext=YY_START; g_lastStringContext=YY_START;
BEGIN( SkipString ); BEGIN( SkipString );
} }
<SkipString>[^\"\\]* { <SkipString>[^\"\\]* {
code->codify(yytext); g_code->codify(yytext);
} }
<SkipString>"//"|"/*" { <SkipString>"//"|"/*" {
code->codify(yytext); g_code->codify(yytext);
} }
<SkipString>\" { <SkipString>\" {
code->codify(yytext); g_code->codify(yytext);
BEGIN( lastStringContext ); BEGIN( g_lastStringContext );
} }
<SkipString>\\. { <SkipString>\\. {
code->codify(yytext); g_code->codify(yytext);
} }
<Body>":" { <Body>":" {
code->codify(yytext); g_code->codify(yytext);
name.resize(0);type.resize(0); g_name.resize(0);g_type.resize(0);
} }
<Body>"'"."'" { <Body,MemberCall,MemberCall2,FuncCall>"'"((\\.)|(.))"'" {
code->codify(yytext); g_code->codify(yytext);
} }
<Body>"."|"->" { <Body>"."|"->" {
code->codify(yytext); g_code->codify(yytext);
BEGIN( MemberCall ); BEGIN( MemberCall );
} }
<MemberCall>{SCOPENAME}/{B}*"(" { <MemberCall>{SCOPENAME}/{B}*"(" {
if (name.length()>0) if (g_name.length()>0)
generateMemberLink(*code,name,yytext); generateMemberLink(*g_code,g_name,yytext);
else else
code->codify(yytext); g_code->codify(yytext);
name.resize(0);type.resize(0); g_name.resize(0);g_type.resize(0);
bracketCount=0; g_bracketCount=0;
BEGIN(FuncCall); BEGIN(FuncCall);
} }
<MemberCall>[^a-z_A-Z0-9(\n] { <MemberCall>[^a-z_A-Z0-9(\n] {
code->codify(yytext); g_code->codify(yytext);
type.resize(0); g_type.resize(0);
name.resize(0); g_name.resize(0);
BEGIN(Body); BEGIN(Body);
} }
<Body>[,=;\[] { <Body>[,=;\[] {
code->codify(yytext); g_code->codify(yytext);
if (type.length()>0) if (g_type.length()>0)
addVariable(); addVariable();
name.resize(0); g_name.resize(0);
if (*yytext!=',') type.resize(0); if (*yytext!=',') g_type.resize(0);
args.resize(0); g_args.resize(0);
} }
<Body>[0-9]+ { <Body>[0-9]+ {
code->codify(yytext); g_code->codify(yytext);
} }
<MemberCall2,FuncCall>[a-z_A-Z][:a-z_A-Z0-9]* { <MemberCall2,FuncCall>[a-z_A-Z][:a-z_A-Z0-9]* {
addParmType(); addParmType();
parmName=yytext; g_parmName=yytext;
generateClassLink(*code,yytext); generateClassLink(*g_code,yytext);
} }
<MemberCall2,FuncCall>, { <MemberCall2,FuncCall>, {
code->codify(yytext); g_code->codify(yytext);
addParameter(); addParameter();
parmType.resize(0);parmName.resize(0); g_parmType.resize(0);g_parmName.resize(0);
} }
<MemberCall2,FuncCall>"(" { <MemberCall2,FuncCall>"(" {
code->codify(yytext); g_code->codify(yytext);
bracketCount++; g_bracketCount++;
} }
<MemberCall2,FuncCall>")" { <MemberCall2,FuncCall>")" {
code->codify(yytext); g_code->codify(yytext);
if (--bracketCount<=0) if (--g_bracketCount<=0)
name.resize(0);args.resize(0); g_name.resize(0);g_args.resize(0);
parmType.resize(0);parmName.resize(0); g_parmType.resize(0);g_parmName.resize(0);
BEGIN( Body ); BEGIN( Body );
} }
<MemberCall2,FuncCall>")"[ \t\n]*";" { <MemberCall2,FuncCall>")"[ \t\n]*";" {
codifyLines(yytext); codifyLines(yytext);
bracketCount=0; g_bracketCount=0;
if (!inClass && type.length()>0) if (!g_inClass && g_type.length()>0)
addVariable(); addVariable();
name.resize(0);type.resize(0); g_name.resize(0);g_type.resize(0);
parmType.resize(0);parmName.resize(0); g_parmType.resize(0);g_parmName.resize(0);
BEGIN( Body ); BEGIN( Body );
} }
<MemberCall2,FuncCall>")"[ \t\n]*"{" { <MemberCall2,FuncCall>")"[ \t\n]*"{" {
addParameter(); addParameter();
parmType.resize(0);parmName.resize(0); g_parmType.resize(0);g_parmName.resize(0);
if (name.length()>0) setClassScope(name); if (g_name.find("::")!=-1) setClassScope(g_name);
codifyLines(yytext); codifyLines(yytext);
curlyCount++; g_curlyCount++;
type.resize(0); name.resize(0); g_type.resize(0); g_name.resize(0);
BEGIN( Body ); BEGIN( Body );
} }
<MemberCall2,FuncCall>")"[ \t\n]*":" { <MemberCall2,FuncCall>")"[ \t\n]*":" {
addParameter(); addParameter();
parmType.resize(0);parmName.resize(0); g_parmType.resize(0);g_parmName.resize(0);
if (name.length()>0) setClassScope(name); if (g_name.find("::")!=-1) setClassScope(g_name);
codifyLines(yytext); codifyLines(yytext);
type.resize(0); name.resize(0); g_type.resize(0); g_name.resize(0);
BEGIN( SkipInits ); BEGIN( SkipInits );
} }
<SkipInits>"{" { <SkipInits>"{" {
code->codify(yytext); g_code->codify(yytext);
curlyCount++; g_curlyCount++;
BEGIN( Body ); BEGIN( Body );
} }
<SkipInits>{ID} { <SkipInits>{ID} {
generateClassLink(*code,yytext); generateClassLink(*g_code,yytext);
} }
<FuncCall>([a-z_A-Z][a-z_A-Z0-9]*)/"(" { <FuncCall>([a-z_A-Z][a-z_A-Z0-9]*)/"(" {
generateFunctionLink(*code,yytext); generateFunctionLink(*g_code,yytext);
} }
<FuncCall>([a-z_A-Z][a-z_A-Z0-9]*)/("."|"->") { <FuncCall>([a-z_A-Z][a-z_A-Z0-9]*)/("."|"->") {
code->codify(yytext); g_code->codify(yytext);
args=yytext; g_args=yytext;
BEGIN( MemberCall2 ); BEGIN( MemberCall2 );
} }
<MemberCall2>([a-z_A-Z][a-z_A-Z0-9]*)/([ \t\n]*"(") { <MemberCall2>([a-z_A-Z][a-z_A-Z0-9]*)/([ \t\n]*"(") {
if (args.length()>0) if (g_args.length()>0)
generateMemberLink(*code,args,yytext); generateMemberLink(*g_code,g_args,yytext);
else else
code->codify(yytext); g_code->codify(yytext);
args.resize(0); g_args.resize(0);
BEGIN( FuncCall ); BEGIN( FuncCall );
} }
<MemberCall2>([a-z_A-Z][a-z_A-Z0-9]*)/([ \t\n]*("."|"->")) { <MemberCall2>([a-z_A-Z][a-z_A-Z0-9]*)/([ \t\n]*("."|"->")) {
code->codify(yytext); g_code->codify(yytext);
args=yytext; g_args=yytext;
} }
<SkipComment>"//" { <SkipComment>"//" {
code->codify(yytext); g_code->codify(yytext);
} }
<SkipComment>[^*/\n]+ { <SkipComment>[^*/\n]+ {
code->codify(yytext); g_code->codify(yytext);
} }
<SkipComment>[ \t]*"*/" { <SkipComment>[ \t]*"*/" {
code->codify(yytext); g_code->codify(yytext);
BEGIN( lastCContext ) ; BEGIN( g_lastCContext ) ;
} }
<SkipCxxComment>.*\n { <SkipCxxComment>.*/\n {
codifyLines(yytext); //codifyLines(yytext);
BEGIN( lastCContext ) ; g_code->codify(yytext);
BEGIN( g_lastCContext ) ;
} }
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*{B}*"/*"[*!]/[^/*] { <RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*{B}*"/*"[*!]/[^/*] {
yyLineNr+=QCString(yytext).contains('\n'); g_yyLineNr+=QCString(yytext).contains('\n');
} }
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)* { <RemoveSpecialCComment>"*/"{B}*\n({B}*\n)* {
yyLineNr+=QCString(yytext).contains('\n'); g_yyLineNr+=QCString(yytext).contains('\n');
code->endCodeLine(); g_code->endCodeLine();
if (yyLineNr<inputLines) if (g_yyLineNr<g_inputLines)
{ {
startCodeLine(*code); startCodeLine(*g_code);
} }
BEGIN(lastSpecialCContext); BEGIN(g_lastSpecialCContext);
} }
<RemoveSpecialCComment>"*/" { <RemoveSpecialCComment>"*/" {
BEGIN(lastSpecialCContext); BEGIN(g_lastSpecialCContext);
} }
<RemoveSpecialCComment>[^*\n]+ <RemoveSpecialCComment>[^*\n]+
<RemoveSpecialCComment>"//"|"/*" <RemoveSpecialCComment>"//"|"/*"
<RemoveSpecialCComment>\n { yyLineNr++; } <RemoveSpecialCComment>\n { g_yyLineNr++; }
<RemoveSpecialCComment>. <RemoveSpecialCComment>.
/* /*
<SkipSpecialComment>"//" <SkipSpecialComment>"//"
...@@ -880,9 +883,9 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -880,9 +883,9 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN( lastDContext ) ; BEGIN( lastDContext ) ;
} }
<SkipSpecialComment>[ \t]*"* /"[ \t\n]*"\n"/"/ *" { <SkipSpecialComment>[ \t]*"* /"[ \t\n]*"\n"/"/ *" {
//code->codify("\n"); //g_code->codify("\n");
//QCString lineText=yytext; //QCString lineText=yytext;
//yyLineNr+=lineText.contains('\n'); //g_yyLineNr+=lineText.contains('\n');
BEGIN( lastDContext ) ; BEGIN( lastDContext ) ;
} }
<SkipSpecialComment>. <SkipSpecialComment>.
...@@ -899,19 +902,19 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -899,19 +902,19 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
} }
*/ */
<*>\n({B}*"//"[!/][^\n]*\n)* { // remove special one-line comment <*>\n({B}*"//"[!/][^\n]*\n)* { // remove special one-line comment
yyLineNr+=((QCString)yytext).contains('\n'); g_yyLineNr+=((QCString)yytext).contains('\n');
code->endCodeLine(); g_code->endCodeLine();
if (yyLineNr<inputLines) if (g_yyLineNr<g_inputLines)
{ {
startCodeLine(*code); startCodeLine(*g_code);
} }
} }
<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment <*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
yyLineNr++; g_yyLineNr++;
code->endCodeLine(); g_code->endCodeLine();
if (yyLineNr<inputLines) if (g_yyLineNr<g_inputLines)
{ {
startCodeLine(*code); startCodeLine(*g_code);
} }
} }
<*>"//"[!/][^\n]*\n { // strip special one-line comment <*>"//"[!/][^\n]*\n { // strip special one-line comment
...@@ -919,39 +922,40 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -919,39 +922,40 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
codifyLines(c); codifyLines(c);
} }
<*>\n{B}*"/*"[!*]/[^/*] { <*>\n{B}*"/*"[!*]/[^/*] {
lastSpecialCContext = YY_START; g_lastSpecialCContext = YY_START;
yyLineNr++; g_yyLineNr++;
BEGIN(RemoveSpecialCComment); BEGIN(RemoveSpecialCComment);
} }
<*>^{B}*"/*"[!*]/[^/*] { // special C comment block at a new line <*>^{B}*"/*"[!*]/[^/*] { // special C comment block at a new line
lastSpecialCContext = YY_START; g_lastSpecialCContext = YY_START;
BEGIN(RemoveSpecialCComment); BEGIN(RemoveSpecialCComment);
} }
<*>"/*"[!*]/[^/*] { // special C comment block half way a line <*>"/*"[!*]/[^/*] { // special C comment block half way a line
lastSpecialCContext = YY_START; g_lastSpecialCContext = YY_START;
BEGIN(RemoveSpecialCComment); BEGIN(RemoveSpecialCComment);
} }
<*>"/*"("!"?)"*/" {}
<*>"/*" { <*>"/*" {
code->codify(yytext); g_code->codify(yytext);
lastCContext = YY_START ; g_lastCContext = YY_START ;
BEGIN( SkipComment ) ; BEGIN( SkipComment ) ;
} }
<*>"//" { <*>"//" {
code->codify(yytext); g_code->codify(yytext);
lastCContext = YY_START ; g_lastCContext = YY_START ;
BEGIN( SkipCxxComment ) ; BEGIN( SkipCxxComment ) ;
} }
<*>\n { <*>\n {
codifyLines(yytext); codifyLines(yytext);
} }
<*>. { <*>. {
code->codify(yytext); g_code->codify(yytext);
} }
/* /*
<*>([ \t\n]*"\n"){2,} { // combine multiple blank lines <*>([ \t\n]*"\n"){2,} { // combine multiple blank lines
//QCString sepLine=yytext; //QCString sepLine=yytext;
//code->codify("\n\n"); //g_code->codify("\n\n");
//yyLineNr+=sepLine.contains('\n'); //g_yyLineNr+=sepLine.contains('\n');
//char sepLine[3]="\n\n"; //char sepLine[3]="\n\n";
codifyLines(yytext); codifyLines(yytext);
} }
...@@ -964,46 +968,54 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -964,46 +968,54 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
void initParseCodeContext() void initParseCodeContext()
{ {
codeClassList.setAutoDelete(TRUE); g_codeClassList.setAutoDelete(TRUE);
codeVarList.setAutoDelete(TRUE); g_codeVarList.setAutoDelete(TRUE);
codeParmList.setAutoDelete(TRUE); g_codeParmList.setAutoDelete(TRUE);
codeClassDict.clear(); g_codeClassDict.clear();
codeClassList.clear(); g_codeClassList.clear();
codeVarList.clear(); g_codeVarList.clear();
codeParmList.clear(); g_codeParmList.clear();
ccd.bases.clear(); g_ccd.bases.clear();
anchorCount = 0; g_anchorCount = 0;
} }
void parseCode(OutputList &ol,const char *className,const QCString &s, void parseCode(OutputList &ol,const char *className,const QCString &s,
bool exBlock, const char *exName,FileDef *fd) bool exBlock, const char *exName,FileDef *fd,
int startLine,int endLine,bool inlineFragment)
{ {
code = new OutputList(&ol); g_code = new OutputList(&ol);
if (s.isEmpty()) return; if (s.isEmpty()) return;
inputString = s; g_inputString = s;
inputPosition = 0; g_inputPosition = 0;
inputLines = countLines(); if (endLine!=-1)
yyLineNr = 1; g_inputLines = endLine+1;
curlyCount = 0; else
bracketCount = 0; g_inputLines = countLines();
sharpCount = 0; if (startLine!=-1)
classScope = className; g_yyLineNr = startLine;
exampleBlock = exBlock; else
exampleName = exName; g_yyLineNr = 1;
sourceFileDef = fd; g_curlyCount = 0;
exampleFile = convertSlashes(exampleName,TRUE)+"-example"; g_bracketCount = 0;
startCodeLine(*code); g_sharpCount = 0;
type.resize(0); g_classScope = className;
name.resize(0); g_exampleBlock = exBlock;
args.resize(0); g_exampleName = exName;
parmName.resize(0); g_sourceFileDef = fd;
parmType.resize(0); g_exampleFile = convertSlashes(g_exampleName,TRUE)+"-example";
g_includeCodeFragment = inlineFragment;
startCodeLine(*g_code);
g_type.resize(0);
g_name.resize(0);
g_args.resize(0);
g_parmName.resize(0);
g_parmType.resize(0);
codeYYrestart( codeYYin ); codeYYrestart( codeYYin );
BEGIN( Body ); BEGIN( Body );
codeYYlex(); codeYYlex();
//if (yyLineNr<=inputLines) code->endCodeLine(); //if (g_yyLineNr<=g_inputLines) code->endCodeLine();
ol+=*code; ol+=*g_code;
delete code; delete g_code;
return; return;
} }
......
...@@ -302,112 +302,113 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); ...@@ -302,112 +302,113 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
*yy_cp = '\0'; \ *yy_cp = '\0'; \
yy_c_buf_p = yy_cp; yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 92 #define YY_NUM_RULES 93
#define YY_END_OF_BUFFER 93 #define YY_END_OF_BUFFER 94
static yyconst short int yy_accept[929] = static yyconst short int yy_accept[938] =
{ 0, { 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 93, 90, 91, 90, 0, 0, 0, 0, 0, 0, 94, 91, 92, 91,
90, 2, 74, 74, 74, 74, 74, 74, 74, 74, 91, 2, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 87, 90, 78, 75, 79, 2, 90, 75, 75, 75, 88, 91, 79, 76, 80, 2, 91,
78, 78, 85, 86, 77, 76, 86, 86, 84, 82, 79, 79, 86, 87, 78, 77, 87, 87, 85, 83,
82, 84, 84, 84, 90, 0, 89, 0, 74, 74, 83, 85, 85, 85, 91, 0, 90, 0, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 0, 88, 78, 80, 78, 85, 86, 75, 75, 75, 0, 89, 79, 81, 79, 86, 87,
77, 86, 83, 81, 0, 0, 74, 74, 74, 74, 78, 87, 84, 82, 0, 0, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 78, 86, 1, 74, 74, 74, 75, 75, 75, 75, 79, 87, 1, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 1, 1, 74, 74, 75, 75, 75, 75, 75, 75, 1, 1, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 0, 29, 74, 74, 74, 74, 75, 75, 75, 75, 0, 29, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 0, 75, 75, 75, 75, 75, 75, 75, 75, 75, 0,
40, 74, 74, 74, 74, 74, 74, 74, 74, 74, 40, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 0, 13, 74, 74, 74, 75, 75, 75, 75, 75, 0, 13, 75, 75, 75,
74, 74, 0, 14, 74, 74, 0, 30, 74, 74, 75, 75, 0, 14, 75, 75, 0, 30, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 0, 12, 74, 75, 75, 75, 75, 75, 75, 75, 75, 0, 12,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 0, 23, 0, 35, 75, 75, 75, 75, 75, 75, 75, 75, 0, 23,
74, 0, 41, 74, 74, 74, 74, 74, 74, 74, 0, 35, 75, 0, 41, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 0, 17, 74, 74, 74, 0, 42, 74, 74, 75, 75, 75, 75, 0, 17, 75, 75, 75, 0,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 42, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 0, 28, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 0, 28,
74, 74, 74, 74, 74, 74, 74, 74, 0, 7, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 0, 20, 74, 0, 37, 74, 74, 74, 75, 75, 0, 7, 75, 75, 0, 20, 75, 0,
74, 74, 74, 74, 74, 74, 74, 74, 0, 15, 37, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 0, 16, 74, 74, 75, 75, 0, 15, 75, 75, 75, 75, 75, 75,
74, 74, 74, 0, 45, 74, 74, 74, 74, 74, 0, 16, 75, 75, 75, 75, 75, 0, 45, 75,
74, 74, 74, 74, 74, 74, 74, 0, 10, 0, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
9, 0, 6, 74, 74, 74, 74, 0, 73, 74, 75, 0, 10, 0, 9, 0, 6, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 0, 73, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 0, 43, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 0, 27, 75, 75, 0, 43, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 0, 27, 75, 75, 75, 75, 75,
0, 50, 74, 74, 74, 74, 74, 74, 0, 26, 75, 75, 75, 75, 75, 0, 50, 75, 75, 75,
0, 72, 0, 19, 74, 74, 0, 11, 0, 8, 75, 75, 75, 0, 26, 0, 72, 75, 0, 19,
74, 74, 74, 74, 74, 0, 3, 74, 0, 62, 75, 75, 0, 11, 0, 8, 75, 75, 75, 75,
0, 44, 74, 74, 74, 74, 74, 74, 74, 74, 75, 0, 3, 75, 0, 62, 0, 44, 75, 75,
74, 74, 0, 61, 0, 47, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 0, 61,
74, 74, 0, 36, 0, 31, 74, 0, 49, 74, 0, 47, 75, 75, 75, 75, 75, 75, 0, 36,
74, 74, 74, 74, 74, 74, 74, 0, 63, 74, 0, 31, 75, 0, 49, 75, 75, 75, 75, 75,
74, 0, 22, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 0, 63, 75, 75, 0, 22,
74, 74, 74, 74, 74, 0, 60, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
74, 74, 74, 0, 38, 74, 74, 0, 48, 74, 75, 75, 0, 60, 75, 75, 75, 75, 75, 75,
74, 74, 74, 74, 0, 34, 74, 74, 74, 74, 0, 38, 75, 75, 0, 48, 75, 75, 75, 75,
0, 71, 0, 4, 74, 0, 67, 74, 74, 74, 75, 0, 34, 0, 74, 75, 75, 75, 75, 0,
74, 74, 74, 74, 74, 74, 74, 74, 0, 46, 71, 0, 4, 75, 0, 67, 75, 75, 75, 75,
0, 59, 74, 74, 74, 74, 74, 0, 24, 74, 75, 75, 75, 75, 75, 75, 75, 0, 46, 0,
0, 52, 74, 0, 21, 0, 53, 0, 39, 74, 59, 75, 75, 75, 75, 75, 0, 24, 75, 0,
74, 74, 74, 0, 64, 74, 74, 0, 33, 0, 52, 75, 0, 21, 0, 53, 0, 39, 75, 75,
32, 74, 74, 0, 18, 74, 74, 74, 74, 0, 75, 75, 0, 64, 75, 75, 0, 33, 0, 32,
5, 0, 65, 74, 74, 0, 54, 74, 74, 74, 75, 75, 0, 18, 75, 75, 75, 75, 0, 5,
0, 69, 74, 74, 74, 0, 68, 0, 70, 74, 0, 65, 75, 75, 0, 54, 75, 75, 75, 0,
74, 74, 0, 58, 0, 57, 0, 56, 0, 66, 69, 75, 75, 75, 0, 68, 0, 70, 75, 75,
0, 55, 0, 25, 74, 0, 51, 0 75, 0, 58, 0, 57, 0, 56, 0, 66, 0,
55, 0, 25, 75, 0, 51, 0
} ; } ;
static yyconst int yy_ec[256] = static yyconst int yy_ec[256] =
...@@ -451,332 +452,335 @@ static yyconst int yy_meta[45] = ...@@ -451,332 +452,335 @@ static yyconst int yy_meta[45] =
6, 6, 6, 1 6, 6, 6, 1
} ; } ;
static yyconst short int yy_base[940] = static yyconst short int yy_base[949] =
{ 0, { 0,
0, 1, 45, 0, 87, 88, 131, 174, 218, 262, 0, 1, 45, 0, 87, 88, 131, 174, 218, 262,
305, 348, 100, 101, 392, 436, 1227, 1228, 1228, 3, 305, 348, 100, 101, 392, 436, 1237, 1238, 1238, 3,
1183, 1228, 0, 1201, 0, 0, 1, 0, 2, 1207, 1193, 1238, 0, 1211, 0, 0, 1, 0, 2, 1217,
10, 7, 1210, 1209, 1208, 1187, 79, 1186, 1201, 83, 10, 7, 1220, 1219, 1218, 1197, 79, 1196, 1211, 83,
1204, 1199, 1202, 1228, 6, 0, 1228, 1228, 0, 1206, 1214, 1209, 1212, 1238, 6, 0, 1238, 1238, 0, 1216,
12, 1170, 0, 0, 1210, 1228, 95, 1168, 1228, 1228, 12, 1180, 0, 0, 1220, 1238, 95, 1178, 1238, 1238,
1228, 1202, 109, 1166, 1199, 114, 1228, 1197, 0, 95, 1238, 1212, 109, 1176, 1209, 114, 1238, 1207, 0, 95,
1180, 1184, 1173, 1182, 1189, 13, 1170, 1185, 1186, 128, 1190, 1194, 1183, 1192, 1199, 13, 1180, 1195, 1196, 128,
1174, 1173, 1170, 1179, 1169, 1180, 127, 1158, 1159, 3, 1184, 1183, 1180, 1189, 1179, 1190, 127, 1168, 1169, 3,
1158, 1161, 1170, 1157, 131, 1165, 134, 1172, 1151, 1153, 1168, 1171, 1180, 1167, 131, 1175, 134, 1182, 1161, 1163,
6, 1152, 1151, 118, 1228, 0, 1228, 1170, 0, 0, 6, 1162, 1161, 118, 1238, 0, 1238, 1180, 0, 0,
1177, 1168, 1228, 1228, 1168, 1134, 1158, 1154, 1160, 1132, 1187, 1178, 1238, 1238, 1178, 1144, 1168, 1164, 1170, 1142,
1154, 1153, 1129, 1137, 1136, 1138, 1152, 1124, 1149, 1137, 1164, 1163, 1139, 1147, 1146, 1148, 1162, 1134, 1159, 1147,
1137, 1147, 123, 1142, 1134, 1140, 1139, 1131, 1135, 1129, 1147, 1157, 123, 1152, 1144, 1150, 1149, 1141, 1145, 1139,
1135, 1130, 1117, 1132, 1135, 1130, 1116, 1105, 1116, 1126, 1145, 1140, 1127, 1142, 1145, 1140, 1126, 1115, 1126, 1136,
1102, 1117, 1124, 1117, 1121, 1104, 1119, 1105, 1104, 1112, 1112, 1127, 1134, 1127, 1131, 1114, 1129, 1115, 1114, 1122,
1092, 1113, 1116, 1103, 1086, 1085, 1228, 1090, 1112, 1087, 1102, 1123, 1126, 1113, 1096, 1095, 1238, 1100, 1122, 1097,
1110, 1104, 1081, 8, 1089, 1079, 1105, 1103, 133, 1092, 1120, 1114, 1091, 8, 1099, 1089, 1115, 1113, 133, 1102,
1087, 1081, 1087, 1099, 1095, 1070, 1069, 1078, 1067, 1066, 1097, 1091, 1097, 1109, 1105, 1080, 1079, 1088, 1077, 1076,
1088, 1071, 1073, 1076, 1069, 1070, 1083, 1062, 1070, 137, 1098, 1081, 1083, 1086, 1079, 1080, 1093, 1072, 1080, 137,
1063, 1065, 1074, 1053, 1075, 1074, 1058, 1059, 1075, 1072, 1073, 1075, 1084, 1063, 1085, 1084, 1068, 1069, 1085, 1082,
1071, 1057, 1053, 1062, 1069, 1060, 0, 0, 1048, 1065, 1081, 1067, 1063, 1072, 1079, 1070, 0, 0, 1058, 1075,
1047, 1063, 1036, 1044, 1061, 1043, 1032, 1050, 1055, 1045, 1057, 1073, 1046, 1054, 1071, 1053, 1042, 1060, 1065, 1055,
1054, 1037, 1049, 1041, 1048, 1047, 110, 1035, 1033, 1032, 1064, 1047, 1059, 1051, 1058, 1057, 110, 1045, 1043, 1042,
1046, 1025, 169, 1017, 1040, 1034, 1037, 155, 1027, 1025, 1056, 1035, 169, 1027, 1050, 1044, 1047, 155, 1037, 1035,
1011, 1010, 1013, 1015, 1015, 1006, 1008, 1016, 1025, 1027, 1021, 1020, 1023, 1025, 1025, 1016, 1018, 1026, 1035, 1037,
0, 1010, 1008, 1019, 1021, 997, 1015, 1011, 1002, 1007, 0, 1020, 1018, 1029, 1031, 1007, 1025, 1021, 1012, 1017,
1015, 1014, 990, 998, 1003, 1010, 1001, 1001, 1008, 997, 1025, 1024, 1000, 1008, 1013, 1020, 1011, 1011, 1018, 1007,
990, 1004, 989, 995, 978, 1000, 999, 975, 982, 985, 1000, 1014, 999, 1005, 988, 1010, 1009, 985, 992, 995,
997, 998, 997, 977, 982, 983, 979, 988, 971, 971, 1007, 1008, 1007, 987, 992, 993, 989, 998, 981, 981,
974, 984, 968, 959, 159, 1228, 980, 984, 981, 74, 984, 994, 978, 969, 159, 1238, 990, 994, 991, 74,
978, 962, 961, 952, 959, 962, 976, 967, 955, 171, 988, 972, 971, 962, 969, 972, 986, 977, 965, 171,
1228, 965, 945, 112, 944, 965, 944, 964, 959, 960, 1238, 975, 955, 112, 954, 975, 954, 974, 969, 970,
948, 945, 960, 947, 957, 947, 955, 172, 950, 930, 958, 955, 970, 957, 967, 957, 965, 172, 960, 940,
929, 928, 939, 186, 938, 925, 191, 937, 923, 949, 939, 938, 949, 186, 948, 935, 191, 947, 933, 959,
921, 928, 927, 941, 941, 935, 928, 941, 921, 915, 931, 938, 937, 951, 951, 945, 938, 951, 931, 925,
938, 910, 909, 927, 926, 922, 905, 927, 910, 906, 948, 920, 919, 170, 937, 933, 916, 938, 921, 917,
924, 912, 170, 902, 921, 905, 910, 895, 900, 919, 935, 923, 170, 913, 932, 916, 921, 906, 911, 930,
906, 910, 916, 899, 911, 896, 901, 894, 898, 902, 917, 921, 927, 910, 922, 907, 912, 905, 909, 913,
905, 908, 895, 888, 189, 190, 1228, 905, 904, 892, 916, 919, 906, 899, 190, 195, 1238, 916, 915, 903,
894, 901, 195, 1228, 883, 884, 197, 1228, 883, 884, 905, 912, 197, 1238, 894, 895, 202, 1238, 894, 895,
177, 894, 880, 875, 886, 865, 877, 884, 870, 885, 177, 905, 891, 886, 897, 876, 888, 895, 881, 896,
872, 875, 866, 869, 880, 869, 870, 853, 879, 878, 883, 886, 877, 880, 891, 880, 878, 880, 863, 889,
858, 861, 862, 854, 865, 872, 856, 853, 862, 864, 888, 868, 871, 872, 864, 875, 882, 866, 863, 872,
854, 862, 848, 858, 850, 845, 847, 202, 204, 833, 874, 864, 872, 858, 868, 860, 855, 857, 204, 230,
230, 859, 856, 838, 837, 854, 850, 231, 1228, 847, 843, 231, 869, 866, 848, 847, 864, 860, 232, 1238,
841, 851, 837, 830, 844, 847, 846, 834, 833, 826, 857, 851, 861, 847, 840, 854, 857, 856, 844, 843,
832, 841, 836, 812, 214, 836, 824, 832, 831, 814, 836, 842, 851, 846, 822, 215, 846, 834, 842, 841,
829, 215, 832, 817, 825, 810, 825, 807, 823, 810, 824, 839, 216, 842, 827, 835, 819, 819, 834, 816,
824, 805, 803, 804, 807, 815, 807, 238, 814, 152, 832, 819, 833, 814, 812, 813, 816, 824, 816, 239,
239, 808, 807, 812, 799, 800, 242, 1228, 243, 1228, 823, 152, 243, 817, 816, 821, 808, 809, 244, 1238,
804, 247, 1228, 799, 809, 808, 800, 802, 778, 787, 247, 1238, 813, 248, 1238, 808, 818, 817, 809, 811,
788, 783, 798, 793, 784, 779, 778, 772, 784, 786, 787, 796, 797, 792, 807, 802, 793, 788, 787, 781,
793, 773, 774, 777, 770, 788, 787, 786, 758, 757, 793, 795, 802, 782, 783, 786, 779, 797, 796, 795,
766, 765, 762, 762, 273, 775, 759, 775, 762, 771, 767, 766, 775, 774, 771, 771, 273, 784, 768, 784,
760, 754, 768, 751, 757, 761, 274, 764, 761, 275, 771, 767, 779, 768, 762, 776, 759, 765, 769, 274,
758, 276, 1228, 277, 753, 752, 278, 1228, 759, 749, 772, 769, 275, 766, 276, 1238, 277, 761, 760, 278,
750, 738, 732, 754, 739, 745, 747, 279, 737, 740, 1238, 767, 757, 758, 746, 740, 762, 747, 753, 755,
752, 744, 746, 745, 280, 731, 216, 728, 719, 281, 279, 745, 748, 760, 752, 754, 753, 280, 739, 263,
724, 738, 736, 729, 741, 728, 720, 725, 731, 269, 736, 727, 282, 732, 746, 744, 737, 749, 736, 728,
724, 293, 301, 302, 728, 313, 1228, 717, 726, 714, 733, 739, 278, 732, 302, 303, 311, 736, 314, 1238,
314, 714, 728, 715, 711, 708, 708, 711, 315, 1228, 725, 734, 722, 315, 737, 721, 735, 722, 718, 715,
722, 703, 316, 1228, 709, 317, 1228, 717, 719, 708, 715, 718, 316, 1238, 729, 710, 317, 1238, 710, 318,
708, 686, 642, 15, 80, 318, 62, 100, 319, 1228, 1238, 718, 715, 665, 0, 10, 62, 74, 111, 319,
88, 155, 144, 159, 172, 174, 320, 1228, 184, 321, 88, 144, 320, 1238, 129, 159, 183, 197, 175, 176,
195, 198, 189, 322, 1228, 224, 235, 222, 225, 235, 322, 1238, 188, 323, 200, 220, 210, 331, 1238, 239,
237, 279, 333, 279, 274, 282, 283, 334, 1228, 335, 236, 223, 230, 271, 273, 281, 334, 281, 276, 320,
1228, 336, 1228, 322, 314, 354, 355, 356, 1228, 357, 321, 345, 1238, 346, 1238, 354, 1238, 322, 314, 357,
310, 328, 358, 359, 322, 336, 331, 351, 342, 370, 358, 359, 1238, 324, 360, 311, 331, 361, 362, 344,
356, 372, 373, 360, 360, 365, 363, 378, 1228, 360, 341, 336, 362, 353, 376, 360, 377, 378, 365, 365,
366, 370, 363, 358, 351, 400, 401, 390, 404, 1228, 370, 368, 400, 1238, 364, 369, 375, 378, 374, 366,
377, 378, 379, 378, 380, 412, 413, 400, 444, 382, 405, 406, 394, 408, 1238, 381, 383, 384, 383, 385,
417, 1228, 399, 408, 397, 398, 409, 396, 445, 1228, 417, 420, 404, 444, 387, 422, 1238, 404, 413, 402,
447, 1228, 448, 1228, 449, 398, 450, 1228, 451, 1228, 403, 413, 402, 445, 1238, 447, 1238, 404, 448, 1238,
403, 453, 405, 414, 403, 456, 1228, 405, 464, 1228, 449, 422, 451, 1238, 453, 1238, 427, 456, 435, 447,
465, 1228, 437, 439, 438, 454, 446, 457, 457, 461, 436, 467, 1238, 440, 469, 1238, 470, 1238, 456, 444,
477, 460, 480, 1228, 481, 1228, 467, 459, 460, 470, 444, 460, 452, 467, 467, 468, 484, 466, 486, 1238,
471, 488, 489, 1228, 492, 1228, 464, 494, 1228, 480, 487, 1238, 473, 465, 466, 476, 477, 493, 495, 1238,
496, 475, 471, 489, 491, 475, 507, 508, 1228, 490, 498, 1238, 470, 500, 1238, 486, 502, 482, 477, 495,
486, 511, 1228, 484, 498, 514, 515, 487, 519, 502, 497, 481, 513, 514, 515, 1238, 497, 493, 518, 1238,
494, 509, 488, 498, 499, 530, 1228, 507, 503, 504, 491, 505, 521, 522, 497, 527, 511, 502, 519, 496,
505, 521, 536, 537, 1228, 538, 517, 541, 1228, 527, 506, 507, 538, 1238, 515, 511, 512, 513, 529, 544,
514, 529, 530, 549, 550, 1228, 537, 553, 519, 555, 545, 1238, 546, 525, 549, 1238, 535, 522, 537, 538,
556, 1228, 557, 1228, 558, 561, 1228, 562, 535, 554, 557, 558, 1238, 560, 1238, 546, 562, 528, 564, 565,
541, 560, 574, 561, 547, 577, 578, 564, 580, 1228, 1238, 566, 1238, 569, 571, 1238, 573, 548, 563, 551,
581, 1228, 556, 583, 570, 558, 561, 592, 1228, 578, 569, 584, 571, 557, 587, 588, 574, 590, 1238, 591,
595, 1228, 596, 597, 1228, 598, 1228, 599, 1228, 600, 1238, 566, 593, 580, 568, 571, 602, 1238, 588, 605,
567, 588, 604, 611, 1228, 597, 594, 615, 1228, 616, 1238, 606, 607, 1238, 608, 1238, 609, 1238, 610, 577,
1228, 601, 618, 619, 1228, 591, 593, 594, 624, 627, 598, 614, 621, 1238, 607, 604, 625, 1238, 626, 1238,
1228, 630, 1228, 631, 619, 633, 1228, 601, 612, 638, 611, 628, 629, 1238, 601, 603, 604, 634, 637, 1238,
639, 1228, 642, 644, 645, 646, 1228, 647, 1228, 650, 640, 1238, 641, 629, 643, 1238, 611, 622, 648, 649,
651, 636, 658, 1228, 659, 1228, 662, 1228, 663, 1228, 1238, 652, 654, 655, 656, 1238, 657, 1238, 660, 661,
664, 1228, 665, 1228, 666, 667, 1228, 1228, 679, 685, 646, 668, 1238, 669, 1238, 672, 1238, 673, 1238, 674,
691, 697, 703, 709, 711, 717, 666, 723, 726 1238, 675, 1238, 676, 677, 1238, 1238, 689, 695, 701,
707, 713, 719, 721, 727, 676, 733, 736
} ; } ;
static yyconst short int yy_def[940] = static yyconst short int yy_def[949] =
{ 0, { 0,
929, 929, 928, 3, 929, 929, 930, 930, 931, 931, 938, 938, 937, 3, 938, 938, 939, 939, 940, 940,
932, 932, 933, 933, 934, 934, 928, 928, 928, 928, 941, 941, 942, 942, 943, 943, 937, 937, 937, 937,
928, 928, 935, 935, 935, 935, 935, 935, 935, 935, 937, 937, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 928, 928, 936, 928, 928, 936, 928, 944, 944, 944, 937, 937, 945, 937, 937, 945, 937,
936, 936, 937, 938, 928, 928, 938, 938, 928, 928, 945, 945, 946, 947, 937, 937, 947, 947, 937, 937,
928, 928, 928, 928, 939, 928, 928, 928, 935, 935, 937, 937, 937, 937, 948, 937, 937, 937, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 928, 928, 936, 928, 936, 937, 938, 944, 944, 944, 937, 937, 945, 937, 945, 946, 947,
928, 938, 928, 928, 939, 928, 935, 935, 935, 935, 937, 947, 937, 937, 948, 937, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 936, 938, 928, 935, 935, 935, 944, 944, 944, 944, 945, 947, 937, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 936, 938, 935, 935, 944, 944, 944, 944, 944, 944, 945, 947, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 928, 928, 935, 935, 935, 935, 944, 944, 944, 944, 937, 937, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 928, 944, 944, 944, 944, 944, 944, 944, 944, 944, 937,
928, 935, 935, 935, 935, 935, 935, 935, 935, 935, 937, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 928, 928, 935, 935, 935, 944, 944, 944, 944, 944, 937, 937, 944, 944, 944,
935, 935, 928, 928, 935, 935, 928, 928, 935, 935, 944, 944, 937, 937, 944, 944, 937, 937, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 928, 928, 935, 944, 944, 944, 944, 944, 944, 944, 944, 937, 937,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 928, 928, 928, 928, 944, 944, 944, 944, 944, 944, 944, 944, 937, 937,
935, 928, 928, 935, 935, 935, 935, 935, 935, 935, 937, 937, 944, 937, 937, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 928, 928, 935, 935, 935, 928, 928, 935, 935, 944, 944, 944, 944, 937, 937, 944, 944, 944, 937,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 937, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 928, 928, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 937, 937,
935, 935, 935, 935, 935, 935, 935, 935, 928, 928, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 928, 928, 935, 928, 928, 935, 935, 935, 944, 944, 937, 937, 944, 944, 937, 937, 944, 937,
935, 935, 935, 935, 935, 935, 935, 935, 928, 928, 937, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 928, 928, 935, 935, 944, 944, 937, 937, 944, 944, 944, 944, 944, 944,
935, 935, 935, 928, 928, 935, 935, 935, 935, 935, 937, 937, 944, 944, 944, 944, 944, 937, 937, 944,
935, 935, 935, 935, 935, 935, 935, 928, 928, 928, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
928, 928, 928, 935, 935, 935, 935, 928, 928, 935, 944, 937, 937, 937, 937, 937, 937, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 937, 937, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 928, 928, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 928, 928, 944, 944, 937, 937, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 937, 937, 944, 944, 944, 944, 944,
928, 928, 935, 935, 935, 935, 935, 935, 928, 928, 944, 944, 944, 944, 944, 937, 937, 944, 944, 944,
928, 928, 928, 928, 935, 935, 928, 928, 928, 928, 944, 944, 944, 937, 937, 937, 937, 944, 937, 937,
935, 935, 935, 935, 935, 928, 928, 935, 928, 928, 944, 944, 937, 937, 937, 937, 944, 944, 944, 944,
928, 928, 935, 935, 935, 935, 935, 935, 935, 935, 944, 937, 937, 944, 937, 937, 937, 937, 944, 944,
935, 935, 928, 928, 928, 928, 935, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 937, 937,
935, 935, 928, 928, 928, 928, 935, 928, 928, 935, 937, 937, 944, 944, 944, 944, 944, 944, 937, 937,
935, 935, 935, 935, 935, 935, 935, 928, 928, 935, 937, 937, 944, 937, 937, 944, 944, 944, 944, 944,
935, 928, 928, 935, 935, 935, 935, 935, 935, 935, 944, 944, 944, 944, 937, 937, 944, 944, 937, 937,
935, 935, 935, 935, 935, 928, 928, 935, 935, 935, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
935, 935, 935, 928, 928, 935, 935, 928, 928, 935, 944, 944, 937, 937, 944, 944, 944, 944, 944, 944,
935, 935, 935, 935, 928, 928, 935, 935, 935, 935, 937, 937, 944, 944, 937, 937, 944, 944, 944, 944,
928, 928, 928, 928, 935, 928, 928, 935, 935, 935, 944, 937, 937, 937, 937, 944, 944, 944, 944, 937,
935, 935, 935, 935, 935, 935, 935, 935, 928, 928, 937, 937, 937, 944, 937, 937, 944, 944, 944, 944,
928, 928, 935, 935, 935, 935, 935, 928, 928, 935, 944, 944, 944, 944, 944, 944, 944, 937, 937, 937,
928, 928, 935, 928, 928, 928, 928, 928, 928, 935, 937, 944, 944, 944, 944, 944, 937, 937, 944, 937,
935, 935, 935, 928, 928, 935, 935, 928, 928, 928, 937, 944, 937, 937, 937, 937, 937, 937, 944, 944,
928, 935, 935, 928, 928, 935, 935, 935, 935, 928, 944, 944, 937, 937, 944, 944, 937, 937, 937, 937,
928, 928, 928, 935, 935, 928, 928, 935, 935, 935, 944, 944, 937, 937, 944, 944, 944, 944, 937, 937,
928, 928, 935, 935, 935, 928, 928, 928, 928, 935, 937, 937, 944, 944, 937, 937, 944, 944, 944, 937,
935, 935, 928, 928, 928, 928, 928, 928, 928, 928, 937, 944, 944, 944, 937, 937, 937, 937, 944, 944,
928, 928, 928, 928, 935, 928, 928, 0, 928, 928, 944, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928 937, 937, 937, 944, 937, 937, 0, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937
} ; } ;
static yyconst short int yy_nxt[1273] = static yyconst short int yy_nxt[1283] =
{ 0, { 0,
928, 320, 19, 19, 66, 67, 66, 104, 105, 104, 937, 320, 19, 19, 66, 67, 66, 104, 105, 104,
928, 321, 73, 66, 67, 66, 928, 147, 74, 161, 937, 321, 73, 66, 67, 66, 698, 147, 74, 161,
71, 77, 81, 75, 162, 79, 76, 78, 148, 72, 71, 77, 81, 75, 162, 79, 76, 78, 148, 72,
84, 86, 87, 225, 82, 80, 125, 126, 20, 20, 84, 86, 87, 225, 82, 80, 125, 126, 20, 20,
226, 85, 696, 21, 21, 18, 18, 19, 18, 18, 226, 85, 699, 21, 21, 18, 18, 19, 18, 18,
22, 18, 18, 18, 23, 23, 18, 24, 25, 26, 22, 18, 18, 18, 23, 23, 18, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 23, 34, 35, 27, 28, 29, 30, 31, 32, 33, 23, 34, 35,
23, 36, 37, 38, 39, 40, 41, 23, 42, 43, 23, 36, 37, 38, 39, 40, 41, 23, 42, 43,
23, 23, 23, 20, 23, 23, 23, 23, 21, 44, 23, 23, 23, 20, 23, 23, 23, 23, 21, 44,
44, 92, 697, 368, 93, 94, 66, 67, 66, 98, 44, 92, 700, 368, 93, 94, 66, 67, 66, 98,
369, 700, 60, 60, 61, 61, 62, 62, 95, 99, 369, 701, 60, 60, 61, 61, 62, 62, 95, 99,
66, 67, 66, 113, 100, 66, 67, 66, 117, 104, 66, 67, 66, 113, 100, 66, 67, 66, 117, 104,
105, 104, 118, 701, 289, 45, 45, 702, 381, 119, 105, 104, 118, 702, 289, 45, 45, 705, 381, 119,
21, 21, 18, 47, 18, 48, 49, 50, 63, 63, 21, 21, 18, 47, 18, 48, 49, 50, 63, 63,
130, 140, 131, 64, 64, 231, 141, 153, 156, 290, 130, 140, 131, 64, 64, 231, 141, 153, 156, 290,
142, 382, 184, 253, 143, 132, 305, 154, 144, 133, 142, 382, 184, 253, 143, 132, 305, 154, 144, 133,
305, 157, 185, 254, 565, 232, 306, 703, 704, 51, 305, 157, 185, 254, 568, 232, 306, 706, 707, 51,
306, 705, 320, 396, 52, 18, 47, 18, 48, 49, 306, 708, 320, 396, 52, 18, 47, 18, 48, 49,
50, 296, 321, 397, 566, 435, 297, 403, 298, 469, 50, 296, 321, 397, 569, 436, 297, 403, 298, 470,
458, 396, 407, 436, 307, 299, 403, 404, 407, 300, 426, 459, 407, 437, 307, 299, 396, 404, 403, 300,
459, 397, 408, 507, 470, 509, 404, 706, 408, 707, 427, 460, 408, 407, 471, 509, 397, 709, 404, 710,
708, 711, 51, 508, 712, 510, 713, 52, 18, 18, 711, 712, 51, 408, 713, 510, 716, 52, 18, 18,
47, 18, 18, 22, 18, 18, 18, 18, 18, 18, 47, 18, 18, 22, 18, 18, 18, 18, 18, 18,
409, 512, 458, 535, 545, 650, 714, 536, 537, 562, 409, 511, 514, 459, 537, 547, 717, 718, 538, 539,
567, 513, 459, 507, 509, 538, 546, 651, 512, 563, 565, 512, 515, 460, 570, 509, 540, 548, 511, 514,
568, 715, 716, 508, 510, 717, 20, 18, 513, 718, 566, 719, 720, 721, 571, 510, 20, 18, 512, 515,
719, 21, 18, 18, 47, 18, 18, 22, 18, 18, 722, 21, 18, 18, 47, 18, 18, 22, 18, 18,
18, 18, 18, 18, 606, 619, 623, 562, 626, 567, 18, 18, 18, 18, 609, 623, 627, 565, 630, 570,
639, 647, 654, 665, 607, 620, 624, 563, 627, 568, 643, 651, 654, 658, 610, 624, 628, 566, 631, 571,
640, 648, 655, 666, 668, 720, 723, 724, 725, 726, 644, 652, 669, 659, 655, 723, 724, 725, 728, 729,
20, 18, 670, 672, 669, 21, 55, 56, 18, 48, 20, 18, 670, 672, 674, 21, 55, 56, 18, 48,
22, 50, 671, 673, 606, 678, 619, 623, 626, 698, 22, 50, 676, 673, 675, 609, 682, 623, 627, 630,
639, 647, 709, 654, 607, 679, 620, 624, 627, 699, 703, 643, 677, 651, 714, 610, 683, 624, 628, 631,
640, 648, 710, 655, 721, 668, 670, 672, 727, 728, 704, 644, 658, 652, 715, 726, 730, 731, 732, 733,
735, 736, 741, 57, 722, 669, 671, 673, 58, 55, 738, 741, 659, 57, 742, 727, 672, 674, 58, 55,
56, 18, 48, 22, 50, 729, 731, 678, 733, 737, 56, 18, 48, 22, 50, 676, 673, 675, 734, 736,
739, 742, 743, 744, 745, 730, 732, 679, 734, 738, 682, 739, 743, 745, 747, 677, 748, 749, 735, 737,
740, 746, 748, 749, 751, 753, 754, 755, 756, 698, 683, 740, 744, 746, 750, 751, 754, 752, 755, 757,
757, 747, 758, 750, 752, 759, 57, 760, 761, 699, 759, 760, 761, 762, 763, 764, 57, 753, 756, 758,
762, 58, 18, 18, 19, 18, 18, 18, 18, 18, 765, 58, 18, 18, 19, 18, 18, 18, 18, 18,
18, 763, 765, 18, 767, 709, 768, 769, 770, 771, 18, 703, 766, 18, 767, 768, 769, 771, 773, 714,
772, 764, 766, 773, 775, 710, 777, 781, 721, 782, 774, 704, 775, 776, 777, 778, 770, 772, 779, 715,
783, 784, 785, 774, 776, 786, 787, 790, 722, 791, 783, 781, 787, 726, 788, 789, 790, 791, 780, 792,
20, 794, 795, 796, 797, 21, 18, 18, 19, 18, 20, 782, 793, 727, 794, 21, 18, 18, 19, 18,
18, 18, 18, 18, 18, 778, 729, 18, 731, 733, 18, 18, 18, 18, 18, 784, 734, 18, 736, 739,
788, 737, 739, 798, 792, 779, 730, 746, 732, 734, 795, 797, 743, 798, 745, 785, 735, 799, 737, 740,
789, 738, 740, 780, 793, 749, 751, 747, 799, 800, 796, 801, 744, 786, 746, 802, 803, 800, 752, 804,
801, 802, 803, 804, 20, 750, 752, 805, 806, 21, 755, 757, 805, 806, 20, 807, 808, 809, 753, 21,
808, 763, 765, 809, 810, 811, 812, 813, 807, 814, 756, 758, 810, 811, 812, 813, 815, 769, 771, 816,
773, 764, 766, 775, 816, 778, 817, 818, 820, 815, 817, 818, 819, 820, 821, 814, 779, 770, 772, 781,
774, 821, 822, 776, 823, 779, 824, 819, 825, 788, 823, 784, 824, 825, 822, 827, 780, 828, 829, 782,
827, 828, 792, 829, 830, 831, 833, 835, 826, 789, 830, 785, 831, 826, 832, 834, 795, 836, 837, 799,
836, 838, 793, 839, 840, 832, 834, 841, 842, 843, 838, 839, 840, 842, 833, 835, 796, 844, 845, 800,
837, 806, 844, 845, 846, 847, 848, 849, 814, 851, 847, 848, 841, 843, 849, 850, 851, 852, 846, 813,
853, 807, 818, 854, 855, 856, 857, 850, 815, 852, 853, 854, 855, 856, 857, 858, 821, 860, 862, 814,
858, 825, 819, 860, 861, 863, 864, 831, 833, 866, 825, 863, 864, 865, 866, 859, 822, 861, 867, 832,
859, 826, 836, 868, 862, 870, 865, 832, 834, 867, 826, 834, 869, 870, 872, 873, 840, 842, 868, 833,
871, 872, 837, 869, 873, 874, 876, 877, 878, 880, 875, 835, 845, 871, 877, 874, 841, 843, 879, 880,
882, 849, 851, 883, 884, 875, 886, 887, 879, 881, 876, 881, 846, 882, 878, 883, 885, 886, 887, 889,
888, 850, 852, 858, 885, 889, 861, 890, 864, 866, 891, 858, 860, 892, 893, 884, 895, 896, 888, 890,
868, 892, 894, 859, 895, 896, 862, 891, 865, 867, 897, 859, 861, 867, 894, 898, 870, 899, 873, 875,
869, 893, 874, 898, 899, 897, 878, 880, 900, 901, 877, 901, 903, 868, 904, 905, 871, 900, 874, 876,
884, 903, 875, 904, 905, 906, 879, 881, 890, 902, 878, 902, 883, 907, 908, 906, 887, 889, 909, 910,
885, 892, 908, 910, 896, 907, 911, 912, 891, 913, 893, 912, 884, 913, 914, 915, 888, 890, 899, 911,
901, 893, 909, 915, 897, 917, 919, 906, 908, 914, 894, 901, 917, 919, 905, 916, 920, 921, 900, 922,
902, 921, 923, 916, 925, 918, 920, 907, 909, 913, 910, 902, 918, 924, 906, 926, 928, 915, 917, 923,
915, 922, 924, 917, 919, 921, 923, 926, 926, 914, 911, 930, 932, 925, 934, 927, 929, 916, 918, 922,
916, 109, 695, 918, 920, 922, 924, 927, 927, 18, 924, 931, 933, 926, 928, 930, 932, 935, 935, 923,
925, 109, 697, 927, 929, 931, 933, 936, 936, 18,
18, 18, 18, 18, 18, 46, 46, 46, 46, 46, 18, 18, 18, 18, 18, 46, 46, 46, 46, 46,
46, 53, 53, 53, 53, 53, 53, 54, 54, 54,
46, 53, 53, 53, 53, 53, 53, 54, 54, 54,
54, 54, 54, 59, 59, 59, 59, 59, 59, 65, 54, 54, 54, 59, 59, 59, 59, 59, 59, 65,
65, 65, 65, 65, 65, 69, 69, 106, 694, 106, 65, 65, 65, 65, 65, 69, 69, 106, 696, 106,
106, 106, 106, 110, 693, 692, 110, 110, 110, 115, 106, 106, 106, 110, 695, 694, 110, 110, 110, 115,
115, 115, 691, 690, 689, 688, 687, 686, 685, 684, 115, 115, 693, 692, 691, 690, 689, 688, 687, 686,
683, 682, 681, 680, 677, 676, 675, 674, 667, 664, 685, 684, 681, 680, 679, 678, 671, 668, 667, 666,
663, 662, 661, 660, 659, 658, 657, 656, 653, 652, 665, 664, 663, 662, 661, 660, 657, 656, 653, 650,
649, 646, 645, 644, 643, 642, 641, 638, 637, 636, 649, 648, 647, 646, 645, 642, 641, 640, 639, 638,
635, 634, 633, 632, 631, 630, 629, 628, 625, 622, 637, 636, 635, 634, 633, 632, 629, 626, 625, 622,
621, 618, 617, 616, 615, 614, 613, 612, 611, 610, 621, 620, 619, 618, 617, 616, 615, 614, 613, 612,
609, 608, 605, 604, 603, 602, 601, 600, 599, 598,
611, 608, 607, 606, 605, 604, 603, 602, 601, 600,
597, 596, 595, 594, 593, 592, 591, 590, 589, 588, 599, 598, 597, 596, 595, 594, 593, 592, 591, 590,
587, 586, 585, 584, 583, 582, 581, 580, 579, 578, 589, 588, 587, 586, 585, 584, 583, 582, 581, 580,
577, 576, 575, 574, 573, 572, 571, 570, 569, 564, 579, 578, 577, 576, 575, 574, 573, 572, 567, 564,
561, 560, 559, 558, 557, 556, 555, 554, 553, 552, 563, 562, 561, 560, 559, 558, 557, 556, 555, 554,
551, 550, 549, 548, 547, 544, 543, 542, 541, 540, 553, 552, 551, 550, 549, 546, 545, 544, 543, 542,
539, 534, 533, 532, 531, 530, 529, 528, 527, 526, 541, 536, 535, 534, 533, 532, 531, 530, 529, 528,
525, 524, 523, 522, 521, 520, 519, 518, 517, 516, 527, 526, 525, 524, 523, 522, 521, 520, 519, 518,
515, 514, 511, 506, 505, 504, 503, 502, 501, 500, 517, 516, 513, 508, 507, 506, 505, 504, 503, 502,
499, 498, 497, 496, 495, 494, 493, 492, 491, 490, 501, 500, 499, 498, 497, 496, 495, 494, 493, 492,
489, 488, 487, 486, 485, 484, 483, 482, 481, 480,
491, 490, 489, 488, 487, 486, 485, 484, 483, 482,
479, 478, 477, 476, 475, 474, 473, 472, 471, 468, 481, 480, 479, 478, 477, 476, 475, 474, 473, 472,
467, 466, 465, 464, 463, 462, 461, 460, 457, 456, 469, 468, 467, 466, 465, 464, 463, 462, 461, 458,
455, 454, 453, 452, 451, 450, 449, 448, 447, 446, 457, 456, 455, 454, 453, 452, 451, 450, 449, 448,
445, 444, 443, 442, 441, 440, 439, 438, 437, 434, 447, 446, 445, 444, 443, 442, 441, 440, 439, 438,
433, 432, 431, 430, 429, 428, 427, 426, 425, 424, 435, 434, 433, 432, 431, 430, 429, 428, 425, 424,
423, 422, 421, 420, 419, 418, 417, 416, 415, 414, 423, 422, 421, 420, 419, 418, 417, 416, 415, 414,
413, 412, 411, 410, 406, 405, 402, 401, 400, 399, 413, 412, 411, 410, 406, 405, 402, 401, 400, 399,
398, 395, 394, 393, 392, 391, 390, 389, 388, 387, 398, 395, 394, 393, 392, 391, 390, 389, 388, 387,
386, 385, 384, 383, 380, 379, 378, 377, 376, 375, 386, 385, 384, 383, 380, 379, 378, 377, 376, 375,
374, 373, 372, 371, 370, 367, 366, 365, 364, 363,
374, 373, 372, 371, 370, 367, 366, 365, 364, 363,
362, 361, 360, 359, 358, 357, 356, 355, 354, 353, 362, 361, 360, 359, 358, 357, 356, 355, 354, 353,
352, 351, 350, 349, 348, 347, 346, 345, 344, 343, 352, 351, 350, 349, 348, 347, 346, 345, 344, 343,
342, 341, 340, 339, 338, 337, 336, 335, 334, 333, 342, 341, 340, 339, 338, 337, 336, 335, 334, 333,
...@@ -786,8 +790,8 @@ static yyconst short int yy_nxt[1273] = ...@@ -786,8 +790,8 @@ static yyconst short int yy_nxt[1273] =
292, 291, 288, 287, 286, 285, 284, 283, 282, 281, 292, 291, 288, 287, 286, 285, 284, 283, 282, 281,
280, 279, 278, 277, 276, 275, 274, 273, 272, 271, 280, 279, 278, 277, 276, 275, 274, 273, 272, 271,
270, 269, 268, 267, 266, 265, 264, 263, 262, 261, 270, 269, 268, 267, 266, 265, 264, 263, 262, 261,
260, 259, 258, 257, 256, 255, 252, 251, 250, 249,
260, 259, 258, 257, 256, 255, 252, 251, 250, 249,
248, 247, 246, 245, 244, 243, 242, 241, 240, 239, 248, 247, 246, 245, 244, 243, 242, 241, 240, 239,
238, 237, 236, 235, 234, 233, 230, 229, 228, 227, 238, 237, 236, 235, 234, 233, 230, 229, 228, 227,
224, 223, 222, 221, 220, 219, 218, 217, 216, 215, 224, 223, 222, 221, 220, 219, 218, 217, 216, 215,
...@@ -797,130 +801,131 @@ static yyconst short int yy_nxt[1273] = ...@@ -797,130 +801,131 @@ static yyconst short int yy_nxt[1273] =
182, 181, 180, 179, 178, 177, 176, 175, 174, 173, 182, 181, 180, 179, 178, 177, 176, 175, 174, 173,
172, 171, 170, 169, 168, 167, 114, 166, 111, 165, 172, 171, 170, 169, 168, 167, 114, 166, 111, 165,
164, 163, 160, 159, 158, 155, 152, 151, 150, 149, 164, 163, 160, 159, 158, 155, 152, 151, 150, 149,
146, 145, 139, 138, 137, 136, 135, 134, 129, 128,
146, 145, 139, 138, 137, 136, 135, 134, 129, 128,
127, 124, 123, 122, 121, 120, 116, 114, 68, 107, 127, 124, 123, 122, 121, 120, 116, 114, 68, 107,
112, 111, 108, 107, 103, 102, 101, 97, 96, 91, 112, 111, 108, 107, 103, 102, 101, 97, 96, 91,
90, 89, 88, 83, 70, 68, 928, 17, 928, 928, 90, 89, 88, 83, 70, 68, 937, 17, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928 937, 937
} ; } ;
static yyconst short int yy_chk[1273] = static yyconst short int yy_chk[1283] =
{ 0, { 0,
0, 261, 1, 2, 20, 20, 20, 45, 45, 45, 0, 261, 1, 2, 20, 20, 20, 45, 45, 45,
0, 261, 26, 51, 51, 51, 0, 90, 26, 101, 0, 261, 26, 51, 51, 51, 635, 90, 26, 101,
25, 27, 29, 26, 101, 28, 26, 27, 90, 25, 25, 27, 29, 26, 101, 28, 26, 27, 90, 25,
31, 32, 32, 174, 29, 28, 76, 76, 1, 2, 31, 32, 32, 174, 29, 28, 76, 76, 1, 2,
174, 31, 634, 1, 2, 3, 3, 3, 3, 3, 174, 31, 636, 1, 2, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5,
6, 37, 635, 310, 37, 37, 57, 57, 57, 40, 6, 37, 637, 310, 37, 37, 57, 57, 57, 40,
310, 637, 13, 14, 13, 14, 13, 14, 37, 40, 310, 638, 13, 14, 13, 14, 13, 14, 37, 40,
63, 63, 63, 63, 40, 66, 66, 66, 70, 104, 63, 63, 63, 63, 40, 66, 66, 66, 70, 104,
104, 104, 70, 638, 237, 5, 6, 641, 324, 70, 104, 104, 70, 639, 237, 5, 6, 641, 324, 70,
5, 6, 7, 7, 7, 7, 7, 7, 13, 14, 5, 6, 7, 7, 7, 7, 7, 7, 13, 14,
80, 87, 80, 13, 14, 179, 87, 95, 97, 237, 80, 87, 80, 13, 14, 179, 87, 95, 97, 237,
87, 324, 133, 200, 87, 80, 248, 95, 87, 80, 87, 324, 133, 200, 87, 80, 248, 95, 87, 80,
305, 97, 133, 200, 500, 179, 248, 642, 643, 7, 305, 97, 133, 200, 502, 179, 248, 642, 645, 7,
305, 644, 320, 338, 7, 8, 8, 8, 8, 8, 305, 646, 320, 338, 7, 8, 8, 8, 8, 8,
8, 243, 320, 338, 500, 373, 243, 344, 243, 411, 8, 243, 320, 338, 502, 373, 243, 344, 243, 411,
395, 396, 347, 373, 248, 243, 403, 344, 407, 243, 364, 395, 347, 373, 248, 243, 396, 344, 403, 243,
395, 396, 347, 448, 411, 449, 403, 645, 407, 646, 364, 395, 347, 407, 411, 449, 396, 647, 403, 648,
649, 651, 8, 448, 652, 449, 653, 8, 9, 9, 649, 650, 8, 407, 653, 449, 655, 8, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
347, 451, 458, 475, 482, 587, 656, 475, 475, 498, 347, 450, 452, 459, 476, 483, 656, 657, 476, 476,
501, 451, 458, 507, 509, 475, 482, 587, 512, 498, 500, 450, 452, 459, 503, 509, 476, 483, 511, 514,
501, 657, 658, 507, 509, 659, 9, 9, 512, 660, 500, 660, 661, 662, 503, 509, 9, 9, 511, 514,
661, 9, 10, 10, 10, 10, 10, 10, 10, 10, 663, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 545, 557, 560, 562, 564, 567, 10, 10, 10, 10, 547, 560, 563, 565, 567, 570,
578, 585, 590, 600, 545, 557, 560, 562, 564, 567, 581, 588, 590, 593, 547, 560, 563, 565, 567, 570,
578, 585, 590, 600, 602, 662, 664, 665, 666, 667, 581, 588, 603, 593, 590, 664, 665, 666, 668, 669,
10, 10, 603, 604, 602, 10, 11, 11, 11, 11, 10, 10, 603, 605, 606, 10, 11, 11, 11, 11,
11, 11, 603, 604, 606, 611, 619, 623, 626, 636, 11, 11, 607, 605, 606, 609, 614, 623, 627, 630,
639, 647, 650, 654, 606, 611, 619, 623, 626, 636, 640, 643, 607, 651, 654, 609, 614, 623, 627, 630,
639, 647, 650, 654, 663, 668, 670, 672, 674, 675, 640, 643, 658, 651, 654, 667, 670, 671, 678, 679,
681, 682, 685, 11, 663, 668, 670, 672, 11, 12, 684, 686, 658, 11, 687, 667, 672, 674, 11, 12,
12, 12, 12, 12, 12, 676, 677, 678, 680, 683, 12, 12, 12, 12, 12, 676, 672, 674, 680, 681,
684, 686, 687, 688, 689, 676, 677, 678, 680, 683, 682, 685, 688, 689, 690, 676, 691, 692, 680, 681,
684, 690, 691, 692, 693, 694, 695, 696, 697, 698, 682, 685, 688, 689, 693, 694, 696, 695, 697, 698,
700, 690, 701, 692, 693, 702, 12, 703, 704, 698, 699, 700, 701, 702, 705, 706, 12, 695, 697, 698,
705, 12, 15, 15, 15, 15, 15, 15, 15, 15, 707, 12, 15, 15, 15, 15, 15, 15, 15, 15,
15, 706, 707, 15, 708, 709, 711, 712, 713, 714, 15, 703, 708, 15, 709, 710, 711, 712, 713, 714,
715, 706, 707, 716, 717, 709, 718, 720, 721, 723, 716, 703, 717, 718, 719, 720, 711, 712, 721, 714,
724, 725, 726, 716, 717, 727, 728, 736, 721, 741, 723, 722, 725, 726, 728, 729, 730, 731, 721, 732,
15, 743, 744, 745, 748, 15, 16, 16, 16, 16, 15, 722, 733, 726, 738, 15, 16, 16, 16, 16,
16, 16, 16, 16, 16, 719, 729, 16, 731, 733, 16, 16, 16, 16, 16, 724, 734, 16, 736, 739,
735, 737, 739, 753, 742, 719, 729, 746, 731, 733, 741, 742, 743, 747, 745, 724, 734, 748, 736, 739,
735, 737, 739, 719, 742, 749, 751, 746, 754, 755, 741, 749, 743, 724, 745, 750, 751, 748, 752, 754,
756, 757, 758, 759, 16, 749, 751, 760, 761, 16, 755, 757, 759, 760, 16, 761, 762, 763, 752, 16,
762, 763, 765, 767, 768, 769, 770, 771, 761, 772, 755, 757, 764, 765, 766, 767, 768, 769, 771, 773,
773, 763, 765, 775, 777, 778, 780, 781, 782, 772, 774, 775, 776, 777, 778, 767, 779, 769, 771, 781,
773, 783, 784, 775, 785, 778, 786, 781, 787, 788, 783, 784, 786, 787, 778, 788, 779, 789, 790, 781,
790, 791, 792, 794, 795, 796, 797, 798, 787, 788, 791, 784, 792, 787, 793, 794, 795, 797, 798, 799,
799, 800, 792, 801, 802, 796, 797, 803, 804, 805, 801, 802, 803, 804, 793, 794, 795, 805, 806, 799,
799, 806, 808, 809, 810, 811, 812, 813, 814, 816, 807, 808, 803, 804, 809, 810, 811, 812, 806, 813,
817, 806, 818, 820, 821, 822, 823, 813, 814, 816, 815, 816, 817, 818, 819, 820, 821, 823, 824, 813,
824, 825, 818, 827, 828, 829, 830, 831, 833, 835, 825, 827, 828, 829, 830, 820, 821, 823, 831, 832,
824, 825, 836, 838, 828, 839, 830, 831, 833, 835, 825, 834, 836, 837, 838, 839, 840, 842, 831, 832,
840, 841, 836, 838, 842, 843, 844, 845, 846, 847, 844, 834, 845, 837, 847, 839, 840, 842, 848, 849,
848, 849, 851, 853, 854, 843, 855, 856, 846, 847, 844, 850, 845, 851, 847, 852, 853, 854, 855, 856,
857, 849, 851, 858, 854, 860, 861, 863, 864, 866, 857, 858, 860, 862, 863, 852, 864, 865, 855, 856,
868, 870, 871, 858, 872, 873, 861, 863, 864, 866, 866, 858, 860, 867, 863, 869, 870, 872, 873, 875,
868, 870, 874, 876, 877, 873, 878, 880, 882, 883, 877, 879, 880, 867, 881, 882, 870, 872, 873, 875,
884, 886, 874, 887, 888, 889, 878, 880, 890, 883, 877, 879, 883, 885, 886, 882, 887, 889, 891, 892,
884, 892, 894, 895, 896, 889, 898, 899, 890, 900, 893, 895, 883, 896, 897, 898, 887, 889, 899, 892,
901, 892, 894, 903, 896, 904, 905, 906, 908, 900, 893, 901, 903, 904, 905, 898, 907, 908, 899, 909,
901, 910, 911, 903, 912, 904, 905, 906, 908, 913, 910, 901, 903, 912, 905, 913, 914, 915, 917, 909,
915, 910, 911, 917, 919, 921, 923, 925, 926, 913, 910, 919, 920, 912, 921, 913, 914, 915, 917, 922,
915, 937, 633, 917, 919, 921, 923, 925, 926, 929, 924, 919, 920, 926, 928, 930, 932, 934, 935, 922,
929, 929, 929, 929, 929, 930, 930, 930, 930, 930, 924, 946, 634, 926, 928, 930, 932, 934, 935, 938,
930, 931, 931, 931, 931, 931, 931, 932, 932, 932, 938, 938, 938, 938, 938, 939, 939, 939, 939, 939,
932, 932, 932, 933, 933, 933, 933, 933, 933, 934, 939, 940, 940, 940, 940, 940, 940, 941, 941, 941,
934, 934, 934, 934, 934, 935, 935, 936, 632, 936, 941, 941, 941, 942, 942, 942, 942, 942, 942, 943,
936, 936, 936, 938, 631, 630, 938, 938, 938, 939, 943, 943, 943, 943, 943, 944, 944, 945, 633, 945,
939, 939, 629, 628, 625, 622, 621, 618, 617, 616, 945, 945, 945, 947, 632, 629, 947, 947, 947, 948,
615, 614, 613, 612, 610, 609, 608, 605, 601, 599, 948, 948, 626, 625, 622, 621, 620, 619, 618, 617,
598, 597, 596, 595, 594, 593, 592, 591, 589, 588, 616, 615, 613, 612, 611, 608, 604, 602, 601, 600,
586, 584, 583, 582, 581, 580, 579, 577, 576, 575, 599, 598, 597, 596, 595, 594, 592, 591, 589, 587,
574, 573, 572, 571, 570, 569, 566, 565, 561, 559, 586, 585, 584, 583, 582, 580, 579, 578, 577, 576,
558, 556, 555, 554, 553, 552, 551, 550, 549, 548, 575, 574, 573, 572, 569, 568, 564, 562, 561, 559,
547, 546, 544, 543, 542, 541, 540, 539, 538, 537, 558, 557, 556, 555, 554, 553, 552, 551, 550, 549,
536, 535, 534, 533, 532, 531, 530, 529, 528, 527, 548, 546, 545, 544, 543, 542, 541, 540, 539, 538,
526, 525, 524, 523, 522, 521, 520, 519, 518, 517, 537, 536, 535, 534, 533, 532, 531, 530, 529, 528,
516, 515, 514, 511, 506, 505, 504, 503, 502, 499, 527, 526, 525, 524, 523, 522, 521, 520, 519, 518,
497, 496, 495, 494, 493, 492, 491, 490, 489, 488, 517, 516, 513, 508, 507, 506, 505, 504, 501, 499,
487, 486, 485, 484, 483, 481, 480, 479, 478, 477, 498, 497, 496, 495, 494, 493, 492, 491, 490, 489,
476, 474, 473, 472, 471, 470, 469, 468, 467, 466, 488, 487, 486, 485, 484, 482, 481, 480, 479, 478,
465, 464, 463, 462, 461, 460, 457, 456, 455, 454, 477, 475, 474, 473, 472, 471, 470, 469, 468, 467,
453, 452, 450, 447, 446, 445, 444, 443, 442, 441, 466, 465, 464, 463, 462, 461, 458, 457, 456, 455,
440, 439, 438, 437, 436, 435, 434, 433, 432, 431, 454, 453, 451, 448, 447, 446, 445, 444, 443, 442,
430, 429, 428, 427, 426, 425, 424, 423, 422, 421, 441, 440, 439, 438, 437, 436, 435, 434, 433, 432,
420, 419, 418, 417, 416, 415, 414, 413, 412, 410, 431, 430, 429, 428, 427, 426, 425, 424, 423, 422,
409, 406, 405, 402, 401, 400, 399, 398, 394, 393, 421, 420, 419, 418, 417, 416, 415, 414, 413, 412,
392, 391, 390, 389, 388, 387, 386, 385, 384, 383, 410, 409, 406, 405, 402, 401, 400, 399, 398, 394,
382, 381, 380, 379, 378, 377, 376, 375, 374, 372, 393, 392, 391, 390, 389, 388, 387, 386, 385, 384,
371, 370, 369, 368, 367, 366, 365, 364, 363, 362, 383, 382, 381, 380, 379, 378, 377, 376, 375, 374,
372, 371, 370, 369, 368, 367, 366, 365, 363, 362,
361, 360, 359, 358, 357, 356, 355, 354, 353, 352, 361, 360, 359, 358, 357, 356, 355, 354, 353, 352,
351, 350, 349, 348, 346, 345, 343, 342, 341, 340, 351, 350, 349, 348, 346, 345, 343, 342, 341, 340,
339, 337, 336, 335, 334, 333, 332, 331, 330, 329, 339, 337, 336, 335, 334, 333, 332, 331, 330, 329,
328, 327, 326, 325, 323, 322, 319, 318, 317, 316, 328, 327, 326, 325, 323, 322, 319, 318, 317, 316,
315, 314, 313, 312, 311, 309, 308, 307, 304, 303,
315, 314, 313, 312, 311, 309, 308, 307, 304, 303,
302, 301, 300, 299, 298, 297, 296, 295, 294, 293, 302, 301, 300, 299, 298, 297, 296, 295, 294, 293,
292, 291, 290, 289, 288, 287, 286, 285, 284, 283, 292, 291, 290, 289, 288, 287, 286, 285, 284, 283,
282, 281, 280, 279, 278, 277, 276, 275, 274, 273, 282, 281, 280, 279, 278, 277, 276, 275, 274, 273,
...@@ -930,8 +935,8 @@ static yyconst short int yy_chk[1273] = ...@@ -930,8 +935,8 @@ static yyconst short int yy_chk[1273] =
239, 238, 236, 235, 234, 233, 232, 231, 230, 229, 239, 238, 236, 235, 234, 233, 232, 231, 230, 229,
228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219,
216, 215, 214, 213, 212, 211, 210, 209, 208, 207, 216, 215, 214, 213, 212, 211, 210, 209, 208, 207,
206, 205, 204, 203, 202, 201, 199, 198, 197, 196,
206, 205, 204, 203, 202, 201, 199, 198, 197, 196,
195, 194, 193, 192, 191, 190, 189, 188, 187, 186, 195, 194, 193, 192, 191, 190, 189, 188, 187, 186,
185, 184, 183, 182, 181, 180, 178, 177, 176, 175, 185, 184, 183, 182, 181, 180, 178, 177, 176, 175,
173, 172, 171, 170, 169, 168, 166, 165, 164, 163, 173, 172, 171, 170, 169, 168, 166, 165, 164, 163,
...@@ -941,16 +946,16 @@ static yyconst short int yy_chk[1273] = ...@@ -941,16 +946,16 @@ static yyconst short int yy_chk[1273] =
131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122,
121, 120, 119, 118, 117, 116, 115, 112, 111, 108, 121, 120, 119, 118, 117, 116, 115, 112, 111, 108,
103, 102, 100, 99, 98, 96, 94, 93, 92, 91, 103, 102, 100, 99, 98, 96, 94, 93, 92, 91,
89, 88, 86, 85, 84, 83, 82, 81, 79, 78,
89, 88, 86, 85, 84, 83, 82, 81, 79, 78,
77, 75, 74, 73, 72, 71, 68, 65, 64, 62, 77, 75, 74, 73, 72, 71, 68, 65, 64, 62,
58, 55, 52, 50, 43, 42, 41, 39, 38, 36, 58, 55, 52, 50, 43, 42, 41, 39, 38, 36,
35, 34, 33, 30, 24, 21, 17, 928, 928, 928, 35, 34, 33, 30, 24, 21, 17, 937, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
928, 928 937, 937
} ; } ;
static yy_state_type yy_last_accepting_state; static yy_state_type yy_last_accepting_state;
...@@ -1085,6 +1090,7 @@ bool Config::htmlHelpFlag = FALSE; ...@@ -1085,6 +1090,7 @@ bool Config::htmlHelpFlag = FALSE;
bool Config::alphaIndexFlag = FALSE; bool Config::alphaIndexFlag = FALSE;
bool Config::pdfHyperFlag = FALSE; bool Config::pdfHyperFlag = FALSE;
bool Config::alwaysDetailsFlag = FALSE; bool Config::alwaysDetailsFlag = FALSE;
bool Config::inlineSourceFlag = FALSE;
bool Config::autoBriefFlag = TRUE; bool Config::autoBriefFlag = TRUE;
bool Config::warningFlag = TRUE; bool Config::warningFlag = TRUE;
bool Config::generateHtml = TRUE; bool Config::generateHtml = TRUE;
...@@ -1300,7 +1306,7 @@ YY_DECL ...@@ -1300,7 +1306,7 @@ YY_DECL
register char *yy_cp, *yy_bp; register char *yy_cp, *yy_bp;
register int yy_act; register int yy_act;
#line 184 "config.l" #line 185 "config.l"
...@@ -1353,13 +1359,13 @@ yy_match: ...@@ -1353,13 +1359,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 929 ) if ( yy_current_state >= 938 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_base[yy_current_state] != 1228 ); while ( yy_base[yy_current_state] != 1238 );
yy_find_action: yy_find_action:
yy_act = yy_accept[yy_current_state]; yy_act = yy_accept[yy_current_state];
...@@ -1387,382 +1393,387 @@ do_action: /* This label is used only to access EOF actions. */ ...@@ -1387,382 +1393,387 @@ do_action: /* This label is used only to access EOF actions. */
case 1: case 1:
YY_RULE_SETUP YY_RULE_SETUP
#line 186 "config.l" #line 187 "config.l"
YY_BREAK YY_BREAK
case 2: case 2:
YY_RULE_SETUP YY_RULE_SETUP
#line 187 "config.l" #line 188 "config.l"
{ BEGIN(SkipComment); } { BEGIN(SkipComment); }
YY_BREAK YY_BREAK
case 3: case 3:
YY_RULE_SETUP YY_RULE_SETUP
#line 188 "config.l" #line 189 "config.l"
{ BEGIN(GetString); s=&Config::projectName; } { BEGIN(GetString); s=&Config::projectName; }
YY_BREAK YY_BREAK
case 4: case 4:
YY_RULE_SETUP YY_RULE_SETUP
#line 189 "config.l" #line 190 "config.l"
{ BEGIN(GetString); s=&Config::projectNumber; } { BEGIN(GetString); s=&Config::projectNumber; }
YY_BREAK YY_BREAK
case 5: case 5:
YY_RULE_SETUP YY_RULE_SETUP
#line 190 "config.l" #line 191 "config.l"
{ BEGIN(GetString); s=&Config::outputDir; } { BEGIN(GetString); s=&Config::outputDir; }
YY_BREAK YY_BREAK
case 6: case 6:
YY_RULE_SETUP YY_RULE_SETUP
#line 191 "config.l" #line 192 "config.l"
{ BEGIN(GetString); s=&Config::htmlOutputDir; } { BEGIN(GetString); s=&Config::htmlOutputDir; }
YY_BREAK YY_BREAK
case 7: case 7:
YY_RULE_SETUP YY_RULE_SETUP
#line 192 "config.l" #line 193 "config.l"
{ BEGIN(GetString); s=&Config::manOutputDir; } { BEGIN(GetString); s=&Config::manOutputDir; }
YY_BREAK YY_BREAK
case 8: case 8:
YY_RULE_SETUP YY_RULE_SETUP
#line 193 "config.l" #line 194 "config.l"
{ BEGIN(GetString); s=&Config::latexOutputDir; } { BEGIN(GetString); s=&Config::latexOutputDir; }
YY_BREAK YY_BREAK
case 9: case 9:
YY_RULE_SETUP YY_RULE_SETUP
#line 194 "config.l" #line 195 "config.l"
{ BEGIN(GetString); s=&Config::headerFile; } { BEGIN(GetString); s=&Config::headerFile; }
YY_BREAK YY_BREAK
case 10: case 10:
YY_RULE_SETUP YY_RULE_SETUP
#line 195 "config.l" #line 196 "config.l"
{ BEGIN(GetString); s=&Config::footerFile; } { BEGIN(GetString); s=&Config::footerFile; }
YY_BREAK YY_BREAK
case 11: case 11:
YY_RULE_SETUP YY_RULE_SETUP
#line 196 "config.l" #line 197 "config.l"
{ BEGIN(GetString); s=&Config::latexHeaderFile; } { BEGIN(GetString); s=&Config::latexHeaderFile; }
YY_BREAK YY_BREAK
case 12: case 12:
YY_RULE_SETUP YY_RULE_SETUP
#line 197 "config.l" #line 198 "config.l"
{ BEGIN(GetString); s=&Config::cgiName; } { BEGIN(GetString); s=&Config::cgiName; }
YY_BREAK YY_BREAK
case 13: case 13:
YY_RULE_SETUP YY_RULE_SETUP
#line 198 "config.l" #line 199 "config.l"
{ BEGIN(GetString); s=&Config::cgiURL; } { BEGIN(GetString); s=&Config::cgiURL; }
YY_BREAK YY_BREAK
case 14: case 14:
YY_RULE_SETUP YY_RULE_SETUP
#line 199 "config.l" #line 200 "config.l"
{ BEGIN(GetString); s=&Config::docURL; } { BEGIN(GetString); s=&Config::docURL; }
YY_BREAK YY_BREAK
case 15: case 15:
YY_RULE_SETUP YY_RULE_SETUP
#line 200 "config.l" #line 201 "config.l"
{ BEGIN(GetString); s=&Config::binAbsPath; } { BEGIN(GetString); s=&Config::binAbsPath; }
YY_BREAK YY_BREAK
case 16: case 16:
YY_RULE_SETUP YY_RULE_SETUP
#line 201 "config.l" #line 202 "config.l"
{ BEGIN(GetString); s=&Config::docAbsPath; } { BEGIN(GetString); s=&Config::docAbsPath; }
YY_BREAK YY_BREAK
case 17: case 17:
YY_RULE_SETUP YY_RULE_SETUP
#line 202 "config.l" #line 203 "config.l"
{ BEGIN(GetString); s=&Config::perlPath; } { BEGIN(GetString); s=&Config::perlPath; }
YY_BREAK YY_BREAK
case 18: case 18:
YY_RULE_SETUP YY_RULE_SETUP
#line 203 "config.l" #line 204 "config.l"
{ BEGIN(GetString); s=&Config::genTagFile; } { BEGIN(GetString); s=&Config::genTagFile; }
YY_BREAK YY_BREAK
case 19: case 19:
YY_RULE_SETUP YY_RULE_SETUP
#line 204 "config.l" #line 205 "config.l"
{ BEGIN(GetString); s=&Config::inputFilter; } { BEGIN(GetString); s=&Config::inputFilter; }
YY_BREAK YY_BREAK
case 20: case 20:
YY_RULE_SETUP YY_RULE_SETUP
#line 205 "config.l" #line 206 "config.l"
{ BEGIN(GetString); s=&Config::paperType; } { BEGIN(GetString); s=&Config::paperType; }
YY_BREAK YY_BREAK
case 21: case 21:
YY_RULE_SETUP YY_RULE_SETUP
#line 206 "config.l" #line 207 "config.l"
{ BEGIN(GetString); s=&Config::outputLanguage; } { BEGIN(GetString); s=&Config::outputLanguage; }
YY_BREAK YY_BREAK
case 22: case 22:
YY_RULE_SETUP YY_RULE_SETUP
#line 207 "config.l" #line 208 "config.l"
{ BEGIN(GetString); s=&Config::manExtension; } { BEGIN(GetString); s=&Config::manExtension; }
YY_BREAK YY_BREAK
case 23: case 23:
YY_RULE_SETUP YY_RULE_SETUP
#line 208 "config.l" #line 209 "config.l"
{ BEGIN(GetString); s=&tabSizeString; } { BEGIN(GetString); s=&tabSizeString; }
YY_BREAK YY_BREAK
case 24: case 24:
YY_RULE_SETUP YY_RULE_SETUP
#line 209 "config.l" #line 210 "config.l"
{ BEGIN(GetString); s=&Config::htmlStyleSheet; } { BEGIN(GetString); s=&Config::htmlStyleSheet; }
YY_BREAK YY_BREAK
case 25: case 25:
YY_RULE_SETUP YY_RULE_SETUP
#line 210 "config.l" #line 211 "config.l"
{ BEGIN(GetString); s=&colsInAlphaIndexString; } { BEGIN(GetString); s=&colsInAlphaIndexString; }
YY_BREAK YY_BREAK
case 26: case 26:
YY_RULE_SETUP YY_RULE_SETUP
#line 211 "config.l" #line 212 "config.l"
{ BEGIN(GetStrList); l=&Config::includePath; elemStr=""; } { BEGIN(GetStrList); l=&Config::includePath; elemStr=""; }
YY_BREAK YY_BREAK
case 27: case 27:
YY_RULE_SETUP YY_RULE_SETUP
#line 212 "config.l" #line 213 "config.l"
{ BEGIN(GetStrList); l=&Config::examplePath; elemStr=""; } { BEGIN(GetStrList); l=&Config::examplePath; elemStr=""; }
YY_BREAK YY_BREAK
case 28: case 28:
YY_RULE_SETUP YY_RULE_SETUP
#line 213 "config.l" #line 214 "config.l"
{ BEGIN(GetStrList); l=&Config::imagePath; elemStr=""; } { BEGIN(GetStrList); l=&Config::imagePath; elemStr=""; }
YY_BREAK YY_BREAK
case 29: case 29:
YY_RULE_SETUP YY_RULE_SETUP
#line 214 "config.l" #line 215 "config.l"
{ BEGIN(GetStrList); l=&Config::inputSources; elemStr=""; } { BEGIN(GetStrList); l=&Config::inputSources; elemStr=""; }
YY_BREAK YY_BREAK
case 30: case 30:
YY_RULE_SETUP YY_RULE_SETUP
#line 215 "config.l" #line 216 "config.l"
{ BEGIN(GetStrList); l=&Config::excludeSources; elemStr=""; } { BEGIN(GetStrList); l=&Config::excludeSources; elemStr=""; }
YY_BREAK YY_BREAK
case 31: case 31:
YY_RULE_SETUP YY_RULE_SETUP
#line 216 "config.l" #line 217 "config.l"
{ BEGIN(GetStrList); l=&Config::filePatternList; elemStr=""; } { BEGIN(GetStrList); l=&Config::filePatternList; elemStr=""; }
YY_BREAK YY_BREAK
case 32: case 32:
YY_RULE_SETUP YY_RULE_SETUP
#line 217 "config.l" #line 218 "config.l"
{ BEGIN(GetStrList); l=&Config::excludePatternList; elemStr=""; } { BEGIN(GetStrList); l=&Config::excludePatternList; elemStr=""; }
YY_BREAK YY_BREAK
case 33: case 33:
YY_RULE_SETUP YY_RULE_SETUP
#line 218 "config.l" #line 219 "config.l"
{ BEGIN(GetStrList); l=&Config::examplePatternList; elemStr=""; } { BEGIN(GetStrList); l=&Config::examplePatternList; elemStr=""; }
YY_BREAK YY_BREAK
case 34: case 34:
YY_RULE_SETUP YY_RULE_SETUP
#line 219 "config.l" #line 220 "config.l"
{ BEGIN(GetStrList); l=&Config::imagePatternList; elemStr=""; } { BEGIN(GetStrList); l=&Config::imagePatternList; elemStr=""; }
YY_BREAK YY_BREAK
case 35: case 35:
YY_RULE_SETUP YY_RULE_SETUP
#line 220 "config.l" #line 221 "config.l"
{ BEGIN(GetStrList); l=&Config::tagFileList; elemStr=""; } { BEGIN(GetStrList); l=&Config::tagFileList; elemStr=""; }
YY_BREAK YY_BREAK
case 36: case 36:
YY_RULE_SETUP YY_RULE_SETUP
#line 221 "config.l" #line 222 "config.l"
{ BEGIN(GetStrList); l=&Config::extDocPathList; elemStr=""; } { BEGIN(GetStrList); l=&Config::extDocPathList; elemStr=""; }
YY_BREAK YY_BREAK
case 37: case 37:
YY_RULE_SETUP YY_RULE_SETUP
#line 222 "config.l" #line 223 "config.l"
{ BEGIN(GetStrList); l=&Config::predefined; elemStr=""; } { BEGIN(GetStrList); l=&Config::predefined; elemStr=""; }
YY_BREAK YY_BREAK
case 38: case 38:
YY_RULE_SETUP YY_RULE_SETUP
#line 223 "config.l" #line 224 "config.l"
{ BEGIN(GetStrList); l=&Config::extraPackageList; elemStr=""; } { BEGIN(GetStrList); l=&Config::extraPackageList; elemStr=""; }
YY_BREAK YY_BREAK
case 39: case 39:
YY_RULE_SETUP YY_RULE_SETUP
#line 224 "config.l" #line 225 "config.l"
{ BEGIN(GetStrList); l=&Config::stripFromPath; elemStr=""; } { BEGIN(GetStrList); l=&Config::stripFromPath; elemStr=""; }
YY_BREAK YY_BREAK
case 40: case 40:
YY_RULE_SETUP YY_RULE_SETUP
#line 225 "config.l" #line 226 "config.l"
{ BEGIN(GetBool); b=&Config::quietFlag; } { BEGIN(GetBool); b=&Config::quietFlag; }
YY_BREAK YY_BREAK
case 41: case 41:
YY_RULE_SETUP YY_RULE_SETUP
#line 226 "config.l" #line 227 "config.l"
{ BEGIN(GetBool); b=&Config::warningFlag; } { BEGIN(GetBool); b=&Config::warningFlag; }
YY_BREAK YY_BREAK
case 42: case 42:
YY_RULE_SETUP YY_RULE_SETUP
#line 227 "config.l" #line 228 "config.l"
{ BEGIN(GetBool); b=&Config::recursiveFlag; } { BEGIN(GetBool); b=&Config::recursiveFlag; }
YY_BREAK YY_BREAK
case 43: case 43:
YY_RULE_SETUP YY_RULE_SETUP
#line 228 "config.l" #line 229 "config.l"
{ BEGIN(GetBool); b=&Config::allExtFlag; } { BEGIN(GetBool); b=&Config::allExtFlag; }
YY_BREAK YY_BREAK
case 44: case 44:
YY_RULE_SETUP YY_RULE_SETUP
#line 229 "config.l" #line 230 "config.l"
{ BEGIN(GetBool); b=&Config::searchEngineFlag; } { BEGIN(GetBool); b=&Config::searchEngineFlag; }
YY_BREAK YY_BREAK
case 45: case 45:
YY_RULE_SETUP YY_RULE_SETUP
#line 230 "config.l" #line 231 "config.l"
{ BEGIN(GetBool); b=&Config::extractAllFlag; } { BEGIN(GetBool); b=&Config::extractAllFlag; }
YY_BREAK YY_BREAK
case 46: case 46:
YY_RULE_SETUP YY_RULE_SETUP
#line 231 "config.l" #line 232 "config.l"
{ BEGIN(GetBool); b=&Config::extractPrivateFlag; } { BEGIN(GetBool); b=&Config::extractPrivateFlag; }
YY_BREAK YY_BREAK
case 47: case 47:
YY_RULE_SETUP YY_RULE_SETUP
#line 232 "config.l" #line 233 "config.l"
{ BEGIN(GetBool); b=&Config::noIndexFlag; } { BEGIN(GetBool); b=&Config::noIndexFlag; }
YY_BREAK YY_BREAK
case 48: case 48:
YY_RULE_SETUP YY_RULE_SETUP
#line 233 "config.l" #line 234 "config.l"
{ BEGIN(GetBool); b=&Config::generateLatex; } { BEGIN(GetBool); b=&Config::generateLatex; }
YY_BREAK YY_BREAK
case 49: case 49:
YY_RULE_SETUP YY_RULE_SETUP
#line 234 "config.l" #line 235 "config.l"
{ BEGIN(GetBool); b=&Config::generateHtml; } { BEGIN(GetBool); b=&Config::generateHtml; }
YY_BREAK YY_BREAK
case 50: case 50:
YY_RULE_SETUP YY_RULE_SETUP
#line 235 "config.l" #line 236 "config.l"
{ BEGIN(GetBool); b=&Config::generateMan; } { BEGIN(GetBool); b=&Config::generateMan; }
YY_BREAK YY_BREAK
case 51: case 51:
YY_RULE_SETUP YY_RULE_SETUP
#line 236 "config.l" #line 237 "config.l"
{ BEGIN(GetBool); b=&Config::preprocessingFlag; } { BEGIN(GetBool); b=&Config::preprocessingFlag; }
YY_BREAK YY_BREAK
case 52: case 52:
YY_RULE_SETUP YY_RULE_SETUP
#line 237 "config.l" #line 238 "config.l"
{ BEGIN(GetBool); b=&Config::macroExpansionFlag; } { BEGIN(GetBool); b=&Config::macroExpansionFlag; }
YY_BREAK YY_BREAK
case 53: case 53:
YY_RULE_SETUP YY_RULE_SETUP
#line 238 "config.l" #line 239 "config.l"
{ BEGIN(GetBool); b=&Config::searchIncludeFlag; } { BEGIN(GetBool); b=&Config::searchIncludeFlag; }
YY_BREAK YY_BREAK
case 54: case 54:
YY_RULE_SETUP YY_RULE_SETUP
#line 239 "config.l" #line 240 "config.l"
{ BEGIN(GetBool); b=&Config::briefMemDescFlag; } { BEGIN(GetBool); b=&Config::briefMemDescFlag; }
YY_BREAK YY_BREAK
case 55: case 55:
YY_RULE_SETUP YY_RULE_SETUP
#line 240 "config.l" #line 241 "config.l"
{ BEGIN(GetBool); b=&Config::alwaysDetailsFlag; } { BEGIN(GetBool); b=&Config::alwaysDetailsFlag; }
YY_BREAK YY_BREAK
case 56: case 56:
YY_RULE_SETUP YY_RULE_SETUP
#line 241 "config.l" #line 242 "config.l"
{ BEGIN(GetBool); b=&Config::hideMemberFlag; } { BEGIN(GetBool); b=&Config::hideMemberFlag; }
YY_BREAK YY_BREAK
case 57: case 57:
YY_RULE_SETUP YY_RULE_SETUP
#line 242 "config.l" #line 243 "config.l"
{ BEGIN(GetBool); b=&Config::hideClassFlag; } { BEGIN(GetBool); b=&Config::hideClassFlag; }
YY_BREAK YY_BREAK
case 58: case 58:
YY_RULE_SETUP YY_RULE_SETUP
#line 243 "config.l" #line 244 "config.l"
{ BEGIN(GetBool); b=&Config::onlyPredefinedFlag; } { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; }
YY_BREAK YY_BREAK
case 59: case 59:
YY_RULE_SETUP YY_RULE_SETUP
#line 244 "config.l" #line 245 "config.l"
{ BEGIN(GetBool); b=&Config::fullPathNameFlag; } { BEGIN(GetBool); b=&Config::fullPathNameFlag; }
YY_BREAK YY_BREAK
case 60: case 60:
YY_RULE_SETUP YY_RULE_SETUP
#line 245 "config.l" #line 246 "config.l"
{ BEGIN(GetBool); b=&Config::classDiagramFlag; } { BEGIN(GetBool); b=&Config::classDiagramFlag; }
YY_BREAK YY_BREAK
case 61: case 61:
YY_RULE_SETUP YY_RULE_SETUP
#line 246 "config.l" #line 247 "config.l"
{ BEGIN(GetBool); b=&Config::compactLatexFlag; } { BEGIN(GetBool); b=&Config::compactLatexFlag; }
YY_BREAK YY_BREAK
case 62: case 62:
YY_RULE_SETUP YY_RULE_SETUP
#line 247 "config.l" #line 248 "config.l"
{ BEGIN(GetBool); b=&Config::repeatBriefFlag; } { BEGIN(GetBool); b=&Config::repeatBriefFlag; }
YY_BREAK YY_BREAK
case 63: case 63:
YY_RULE_SETUP YY_RULE_SETUP
#line 248 "config.l" #line 249 "config.l"
{ BEGIN(GetBool); b=&Config::internalDocsFlag; } { BEGIN(GetBool); b=&Config::internalDocsFlag; }
YY_BREAK YY_BREAK
case 64: case 64:
YY_RULE_SETUP YY_RULE_SETUP
#line 249 "config.l" #line 250 "config.l"
{ BEGIN(GetBool); b=&Config::caseSensitiveNames; } { BEGIN(GetBool); b=&Config::caseSensitiveNames; }
YY_BREAK YY_BREAK
case 65: case 65:
YY_RULE_SETUP YY_RULE_SETUP
#line 250 "config.l" #line 251 "config.l"
{ BEGIN(GetBool); b=&Config::verbatimHeaderFlag; } { BEGIN(GetBool); b=&Config::verbatimHeaderFlag; }
YY_BREAK YY_BREAK
case 66: case 66:
YY_RULE_SETUP YY_RULE_SETUP
#line 251 "config.l" #line 252 "config.l"
{ BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; } { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; }
YY_BREAK YY_BREAK
case 67: case 67:
YY_RULE_SETUP YY_RULE_SETUP
#line 252 "config.l" #line 253 "config.l"
{ BEGIN(GetBool); b=&Config::sourceBrowseFlag; } { BEGIN(GetBool); b=&Config::sourceBrowseFlag; }
YY_BREAK YY_BREAK
case 68: case 68:
YY_RULE_SETUP YY_RULE_SETUP
#line 253 "config.l" #line 254 "config.l"
{ BEGIN(GetBool); b=&Config::autoBriefFlag; } { BEGIN(GetBool); b=&Config::autoBriefFlag; }
YY_BREAK YY_BREAK
case 69: case 69:
YY_RULE_SETUP YY_RULE_SETUP
#line 254 "config.l" #line 255 "config.l"
{ BEGIN(GetBool); b=&Config::htmlHelpFlag; } { BEGIN(GetBool); b=&Config::htmlHelpFlag; }
YY_BREAK YY_BREAK
case 70: case 70:
YY_RULE_SETUP YY_RULE_SETUP
#line 255 "config.l" #line 256 "config.l"
{ BEGIN(GetBool); b=&Config::alphaIndexFlag; } { BEGIN(GetBool); b=&Config::alphaIndexFlag; }
YY_BREAK YY_BREAK
case 71: case 71:
YY_RULE_SETUP YY_RULE_SETUP
#line 256 "config.l" #line 257 "config.l"
{ BEGIN(GetBool); b=&Config::pdfHyperFlag; } { BEGIN(GetBool); b=&Config::pdfHyperFlag; }
YY_BREAK YY_BREAK
case 72: case 72:
YY_RULE_SETUP YY_RULE_SETUP
#line 257 "config.l" #line 258 "config.l"
{ BEGIN(GetBool); b=&Config::inheritDocsFlag; } { BEGIN(GetBool); b=&Config::inheritDocsFlag; }
YY_BREAK YY_BREAK
case 73: case 73:
YY_RULE_SETUP YY_RULE_SETUP
#line 258 "config.l" #line 259 "config.l"
{ BEGIN(GetBool); b=&Config::inlineInfoFlag; } { BEGIN(GetBool); b=&Config::inlineInfoFlag; }
YY_BREAK YY_BREAK
case 74: case 74:
YY_RULE_SETUP YY_RULE_SETUP
#line 259 "config.l" #line 260 "config.l"
{ err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); } { BEGIN(GetBool); b=&Config::inlineSourceFlag; }
YY_BREAK YY_BREAK
case 75: case 75:
YY_RULE_SETUP YY_RULE_SETUP
#line 260 "config.l" #line 261 "config.l"
{ yyLineNr++; BEGIN(Start); } { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
YY_BREAK YY_BREAK
case 76: case 76:
YY_RULE_SETUP YY_RULE_SETUP
#line 261 "config.l" #line 262 "config.l"
{ yyLineNr++; BEGIN(Start); }
YY_BREAK
case 77:
YY_RULE_SETUP
#line 263 "config.l"
{ {
yyLineNr++; yyLineNr++;
if (elemStr.length()>0) if (elemStr.length()>0)
...@@ -1773,9 +1784,9 @@ YY_RULE_SETUP ...@@ -1773,9 +1784,9 @@ YY_RULE_SETUP
BEGIN(Start); BEGIN(Start);
} }
YY_BREAK YY_BREAK
case 77: case 78:
YY_RULE_SETUP YY_RULE_SETUP
#line 270 "config.l" #line 272 "config.l"
{ {
if (elemStr.length()>0) if (elemStr.length()>0)
{ {
...@@ -1785,31 +1796,31 @@ YY_RULE_SETUP ...@@ -1785,31 +1796,31 @@ YY_RULE_SETUP
elemStr.resize(0); elemStr.resize(0);
} }
YY_BREAK YY_BREAK
case 78: case 79:
YY_RULE_SETUP YY_RULE_SETUP
#line 278 "config.l" #line 280 "config.l"
{ (*s)+=yytext; } { (*s)+=yytext; }
YY_BREAK YY_BREAK
case 79: case 80:
YY_RULE_SETUP YY_RULE_SETUP
#line 279 "config.l" #line 281 "config.l"
{ lastState=YY_START; { lastState=YY_START;
BEGIN(GetQuotedString); BEGIN(GetQuotedString);
tmpString.resize(0); tmpString.resize(0);
} }
YY_BREAK YY_BREAK
case 80: case 81:
YY_RULE_SETUP YY_RULE_SETUP
#line 283 "config.l" #line 285 "config.l"
{ {
//printf(">> Enter env\n"); //printf(">> Enter env\n");
lastEnvState=YY_START; lastEnvState=YY_START;
BEGIN(GetEnvVar); BEGIN(GetEnvVar);
} }
YY_BREAK YY_BREAK
case 81: case 82:
YY_RULE_SETUP YY_RULE_SETUP
#line 288 "config.l" #line 290 "config.l"
{ {
yytext[yyleng-1]='\0'; yytext[yyleng-1]='\0';
const char *env=getenv(yytext); const char *env=getenv(yytext);
...@@ -1820,9 +1831,9 @@ YY_RULE_SETUP ...@@ -1820,9 +1831,9 @@ YY_RULE_SETUP
BEGIN(lastEnvState); BEGIN(lastEnvState);
} }
YY_BREAK YY_BREAK
case 82: case 83:
YY_RULE_SETUP YY_RULE_SETUP
#line 297 "config.l" #line 299 "config.l"
{ {
//printf("Quoted String = `%s'\n",tmpString.data()); //printf("Quoted String = `%s'\n",tmpString.data());
if (lastState==GetString) if (lastState==GetString)
...@@ -1837,21 +1848,21 @@ YY_RULE_SETUP ...@@ -1837,21 +1848,21 @@ YY_RULE_SETUP
BEGIN(lastState); BEGIN(lastState);
} }
YY_BREAK YY_BREAK
case 83: case 84:
YY_RULE_SETUP YY_RULE_SETUP
#line 310 "config.l" #line 312 "config.l"
{ {
tmpString+='"'; tmpString+='"';
} }
YY_BREAK YY_BREAK
case 84: case 85:
YY_RULE_SETUP YY_RULE_SETUP
#line 313 "config.l" #line 315 "config.l"
{ tmpString+=*yytext; } { tmpString+=*yytext; }
YY_BREAK YY_BREAK
case 85: case 86:
YY_RULE_SETUP YY_RULE_SETUP
#line 314 "config.l" #line 316 "config.l"
{ {
QCString bs=yytext; QCString bs=yytext;
bs=bs.upper(); bs=bs.upper();
...@@ -1868,41 +1879,41 @@ YY_RULE_SETUP ...@@ -1868,41 +1879,41 @@ YY_RULE_SETUP
} }
} }
YY_BREAK YY_BREAK
case 86: case 87:
YY_RULE_SETUP YY_RULE_SETUP
#line 329 "config.l" #line 331 "config.l"
{ {
elemStr+=yytext; elemStr+=yytext;
} }
YY_BREAK YY_BREAK
case 87:
YY_RULE_SETUP
#line 332 "config.l"
{ yyLineNr++; BEGIN(Start); }
YY_BREAK
case 88: case 88:
YY_RULE_SETUP YY_RULE_SETUP
#line 333 "config.l" #line 334 "config.l"
{ yyLineNr++; BEGIN(Start); } { yyLineNr++; BEGIN(Start); }
YY_BREAK YY_BREAK
case 89: case 89:
YY_RULE_SETUP YY_RULE_SETUP
#line 334 "config.l" #line 335 "config.l"
{ yyLineNr++; } { yyLineNr++; BEGIN(Start); }
YY_BREAK YY_BREAK
case 90: case 90:
YY_RULE_SETUP YY_RULE_SETUP
#line 335 "config.l" #line 336 "config.l"
{ yyLineNr++; }
YY_BREAK YY_BREAK
case 91: case 91:
YY_RULE_SETUP YY_RULE_SETUP
#line 336 "config.l" #line 337 "config.l"
{ yyLineNr++ ; }
YY_BREAK YY_BREAK
case 92: case 92:
YY_RULE_SETUP YY_RULE_SETUP
#line 338 "config.l" #line 338 "config.l"
{ yyLineNr++ ; }
YY_BREAK
case 93:
YY_RULE_SETUP
#line 340 "config.l"
ECHO; ECHO;
YY_BREAK YY_BREAK
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
...@@ -2203,7 +2214,7 @@ static yy_state_type yy_get_previous_state() ...@@ -2203,7 +2214,7 @@ static yy_state_type yy_get_previous_state()
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 929 ) if ( yy_current_state >= 938 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
...@@ -2238,11 +2249,11 @@ yy_state_type yy_current_state; ...@@ -2238,11 +2249,11 @@ yy_state_type yy_current_state;
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 929 ) if ( yy_current_state >= 938 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 928); yy_is_jam = (yy_current_state == 937);
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
} }
...@@ -2797,7 +2808,7 @@ int main() ...@@ -2797,7 +2808,7 @@ int main()
return 0; return 0;
} }
#endif #endif
#line 338 "config.l" #line 340 "config.l"
/*@ ---------------------------------------------------------------------------- /*@ ----------------------------------------------------------------------------
...@@ -2911,6 +2922,7 @@ void Config::init() ...@@ -2911,6 +2922,7 @@ void Config::init()
Config::alphaIndexFlag = FALSE; Config::alphaIndexFlag = FALSE;
Config::pdfHyperFlag = FALSE; Config::pdfHyperFlag = FALSE;
Config::alwaysDetailsFlag = FALSE; Config::alwaysDetailsFlag = FALSE;
Config::inlineSourceFlag = FALSE;
Config::warningFlag = TRUE; Config::warningFlag = TRUE;
Config::generateHtml = TRUE; Config::generateHtml = TRUE;
Config::generateLatex = TRUE; Config::generateLatex = TRUE;
...@@ -3114,13 +3126,20 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -3114,13 +3126,20 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
t << "# If the SOURCE_BROWSER tag is set to YES than the body of a member or\n"; t << "# If the SOURCE_BROWSER tag is set to YES then a list of source files will\n";
t << "# function will be appended as a block of code to the documentation of.\n"; t << "# be generated. Documented entities will be cross-referenced with these sources.\n";
t << "# that member or function.\n";
t << "\n"; t << "\n";
} }
t << "SOURCE_BROWSER = NO\n"; t << "SOURCE_BROWSER = NO\n";
if (!sl) if (!sl)
{
t << "\n";
t << "# Setting the INLINE_SOURCES tag to YES will include the body\n";
t << "# of functions and classes directly in the documentation.\n";
t << "\n";
}
t << "INLINE_SOURCES = NO\n";
if (!sl)
{ {
t << "\n"; t << "\n";
t << "# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen\n"; t << "# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen\n";
......
...@@ -102,6 +102,7 @@ struct Config ...@@ -102,6 +102,7 @@ struct Config
static bool alwaysDetailsFlag; // show details description even if there is only a brief description? static bool alwaysDetailsFlag; // show details description even if there is only a brief description?
static int tabSize; // number of spaces in a tab static int tabSize; // number of spaces in a tab
static int colsInAlphaIndex; // number of columns in the alphabetical index static int colsInAlphaIndex; // number of columns in the alphabetical index
static bool inlineSourceFlag; // inline the definition bodies in the docs?
}; };
#endif #endif
...@@ -118,6 +118,7 @@ bool Config::htmlHelpFlag = FALSE; ...@@ -118,6 +118,7 @@ bool Config::htmlHelpFlag = FALSE;
bool Config::alphaIndexFlag = FALSE; bool Config::alphaIndexFlag = FALSE;
bool Config::pdfHyperFlag = FALSE; bool Config::pdfHyperFlag = FALSE;
bool Config::alwaysDetailsFlag = FALSE; bool Config::alwaysDetailsFlag = FALSE;
bool Config::inlineSourceFlag = FALSE;
bool Config::autoBriefFlag = TRUE; bool Config::autoBriefFlag = TRUE;
bool Config::warningFlag = TRUE; bool Config::warningFlag = TRUE;
bool Config::generateHtml = TRUE; bool Config::generateHtml = TRUE;
...@@ -256,6 +257,7 @@ static int yyread(char *buf,int max_size) ...@@ -256,6 +257,7 @@ static int yyread(char *buf,int max_size)
<Start>"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; } <Start>"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; }
<Start>"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; } <Start>"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; }
<Start>"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; } <Start>"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; }
<Start>"INLINE_SOURCES"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineSourceFlag; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); } <Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); } <GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n { <GetStrList>\n {
...@@ -448,6 +450,7 @@ void Config::init() ...@@ -448,6 +450,7 @@ void Config::init()
Config::alphaIndexFlag = FALSE; Config::alphaIndexFlag = FALSE;
Config::pdfHyperFlag = FALSE; Config::pdfHyperFlag = FALSE;
Config::alwaysDetailsFlag = FALSE; Config::alwaysDetailsFlag = FALSE;
Config::inlineSourceFlag = FALSE;
Config::warningFlag = TRUE; Config::warningFlag = TRUE;
Config::generateHtml = TRUE; Config::generateHtml = TRUE;
Config::generateLatex = TRUE; Config::generateLatex = TRUE;
...@@ -651,13 +654,20 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -651,13 +654,20 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
t << "# If the SOURCE_BROWSER tag is set to YES than the body of a member or\n"; t << "# If the SOURCE_BROWSER tag is set to YES then a list of source files will\n";
t << "# function will be appended as a block of code to the documentation of.\n"; t << "# be generated. Documented entities will be cross-referenced with these sources.\n";
t << "# that member or function.\n";
t << "\n"; t << "\n";
} }
t << "SOURCE_BROWSER = NO\n"; t << "SOURCE_BROWSER = NO\n";
if (!sl) if (!sl)
{
t << "\n";
t << "# Setting the INLINE_SOURCES tag to YES will include the body\n";
t << "# of functions and classes directly in the documentation.\n";
t << "\n";
}
t << "INLINE_SOURCES = NO\n";
if (!sl)
{ {
t << "\n"; t << "\n";
t << "# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen\n"; t << "# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen\n";
......
...@@ -503,7 +503,7 @@ static void addType() ...@@ -503,7 +503,7 @@ static void addType()
//printf("addType() type=`%s' scope=`%s' name=`%s'\n", //printf("addType() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data()); // type.data(),scope.data(),name.data());
if (name.isEmpty() && scope.isEmpty()) return; if (name.isEmpty() && scope.isEmpty()) return;
if (!type.isNull()) type+=' '; if (!type.isEmpty()) type+=' ';
if (!scope.isEmpty()) type+=scope+"::"; if (!scope.isEmpty()) type+=scope+"::";
type+=name; type+=name;
scope.resize(0); scope.resize(0);
...@@ -515,7 +515,7 @@ static void addTypeName() ...@@ -515,7 +515,7 @@ static void addTypeName()
//printf("addTypeName() type=`%s' scope=`%s' name=`%s'\n", //printf("addTypeName() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data()); // type.data(),scope.data(),name.data());
if (name.isEmpty()) return; if (name.isEmpty()) return;
if (!type.isNull()) type+=' '; if (!type.isEmpty()) type+=' ';
type+=name; type+=name;
name.resize(0); name.resize(0);
} }
......
...@@ -55,7 +55,7 @@ static void addType() ...@@ -55,7 +55,7 @@ static void addType()
//printf("addType() type=`%s' scope=`%s' name=`%s'\n", //printf("addType() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data()); // type.data(),scope.data(),name.data());
if (name.isEmpty() && scope.isEmpty()) return; if (name.isEmpty() && scope.isEmpty()) return;
if (!type.isNull()) type+=' '; if (!type.isEmpty()) type+=' ';
if (!scope.isEmpty()) type+=scope+"::"; if (!scope.isEmpty()) type+=scope+"::";
type+=name; type+=name;
scope.resize(0); scope.resize(0);
...@@ -67,7 +67,7 @@ static void addTypeName() ...@@ -67,7 +67,7 @@ static void addTypeName()
//printf("addTypeName() type=`%s' scope=`%s' name=`%s'\n", //printf("addTypeName() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data()); // type.data(),scope.data(),name.data());
if (name.isEmpty()) return; if (name.isEmpty()) return;
if (!type.isNull()) type+=' '; if (!type.isEmpty()) type+=' ';
type+=name; type+=name;
name.resize(0); name.resize(0);
} }
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
Definition::Definition(const char *name,const char *b,const char *d) Definition::Definition(const char *name,const char *b,const char *d)
{ {
n=name; brief=b; doc=d; sectionList=0, bodyLine=-1, bodyDef=0; n=name; brief=b; doc=d; sectionList=0, startBodyLine=endBodyLine=-1, bodyDef=0;
} }
Definition::~Definition() Definition::~Definition()
...@@ -93,11 +93,76 @@ void Definition::setBriefDescription(const char *b) ...@@ -93,11 +93,76 @@ void Definition::setBriefDescription(const char *b)
} }
} }
/*! Reads a fragment of code from file \a fileName starting at
* line \a startLine and ending at line \a endLine. The fragment is
* stored in \a result. If FALSE is returned the code fragment could not be
* found.
*
* The file is scanned for a opening bracket ('{') from \a startLine onward.
* The line actually containing the bracket is returned via startLine.
* The file is scanned for a closing bracket ('}') from \a endLine backward.
* The line actually containing the bracket is returned via endLine.
*/
static bool readCodeFragment(const char *fileName,
int &startLine,int &endLine,QCString &result)
{
//printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
QFile f(fileName);
if (f.open(IO_ReadOnly))
{
int c=0;
int lineNr=1;
// skip until the startLine has reached
while (lineNr<startLine && !f.atEnd())
{
while ((c=f.getch())!='\n' && c!=-1) /* skip */;
lineNr++;
}
if (!f.atEnd())
{
// skip until the opening bracket is found
while (lineNr<=endLine && !f.atEnd() && c!='{')
{
while ((c=f.getch())!='{' && c!=-1) if (c=='\n') lineNr++;
}
if (c=='{')
{
// copy until end of line
result+=c;
startLine=lineNr;
const int maxLineLength=4096;
char lineStr[maxLineLength];
char *p=lineStr;
while ((c=f.getch())!='\n' && c!=-1) *p++=c;
//printf("First line str=`%s' atEnd=%d lineNr=%d endLine=%d\n",lineStr.data(),f.atEnd(),lineNr,endLine);
*p++='\n';
*p++='\0';
while (lineNr<endLine && !f.atEnd())
{
//printf("adding line=`%s' lineNr=%d\n",lineStr.data(),lineNr);
result+=lineStr;
f.readLine(lineStr,maxLineLength);
lineNr++;
}
p=lineStr+strlen(lineStr);
while (--p>=lineStr && *p!='}') /* skip */;
*(++p)='\n';
*(++p)='\0';
result+=lineStr;
endLine=lineNr;
return TRUE;
}
}
}
return FALSE;
}
/*! Write a reference to the source code defining this definition */ /*! Write a reference to the source code defining this definition */
void Definition::writeSourceRef(OutputList &ol) void Definition::writeSourceRef(OutputList &ol,const char *scopeName)
{ {
//printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
if (Config::sourceBrowseFlag && bodyLine!=-1 && bodyDef) if (Config::sourceBrowseFlag && startBodyLine!=-1 && bodyDef)
{ {
ol.newParagraph(); ol.newParagraph();
...@@ -107,8 +172,8 @@ void Definition::writeSourceRef(OutputList &ol) ...@@ -107,8 +172,8 @@ void Definition::writeSourceRef(OutputList &ol)
if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this. if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
{ {
QString lineStr,anchorStr; QString lineStr,anchorStr;
lineStr.sprintf("%d",bodyLine); lineStr.sprintf("%d",startBodyLine);
anchorStr.sprintf("l%05d",bodyLine); anchorStr.sprintf("l%05d",startBodyLine);
if (lineMarkerPos<fileMarkerPos) // line marker before file marker if (lineMarkerPos<fileMarkerPos) // line marker before file marker
{ {
// write text left from linePos marker // write text left from linePos marker
...@@ -179,14 +244,32 @@ void Definition::writeSourceRef(OutputList &ol) ...@@ -179,14 +244,32 @@ void Definition::writeSourceRef(OutputList &ol)
err("Error: translation error: invalid markers in trDefinedInSourceFile()\n"); err("Error: translation error: invalid markers in trDefinedInSourceFile()\n");
} }
} }
if (Config::inlineSourceFlag && startBodyLine!=-1 &&
endBodyLine>=startBodyLine && bodyDef)
{
//printf("Source Fragment %s: %d-%d\n",name().data(),
// startBodyLine,endBodyLine);
QCString codeFragment;
int actualStart=startBodyLine,actualEnd=endBodyLine;
if (readCodeFragment(bodyDef->absFilePath(),
actualStart,actualEnd,codeFragment)
)
{
//printf("Read:\n`%s'\n\n",codeFragment.data());
ol.startCodeFragment();
parseCode(ol,scopeName,codeFragment,FALSE,0,
bodyDef,actualStart,actualEnd,TRUE);
ol.endCodeFragment();
}
}
} }
bool Definition::hasDocumentation() bool Definition::hasDocumentation()
{ {
return !doc.isNull() || // has detailed docs return !doc.isEmpty() || // has detailed docs
!brief.isNull() || // has brief description !brief.isEmpty() || // has brief description
(Config::sourceBrowseFlag && (Config::sourceBrowseFlag &&
bodyLine!=-1 && startBodyLine!=-1 &&
bodyDef bodyDef
) || // has a source reference ) || // has a source reference
Config::extractAllFlag; // extract everything Config::extractAllFlag; // extract everything
......
...@@ -77,15 +77,22 @@ class Definition ...@@ -77,15 +77,22 @@ class Definition
*/ */
void addSectionsToDefinition(QList<QCString> *anchorList); void addSectionsToDefinition(QList<QCString> *anchorList);
void setBodyLine(int bl) { bodyLine=bl; } void setBodySegment(int bls,int ble)
{
startBodyLine=bls;
endBodyLine=ble;
}
void setBodyDef(FileDef *fd) { bodyDef=fd; } void setBodyDef(FileDef *fd) { bodyDef=fd; }
int getBodyLine() const { return bodyLine; } int getStartBodyLine() const { return startBodyLine; }
int getEndBodyLine() const { return endBodyLine; }
FileDef *getBodyDef() { return bodyDef; } FileDef *getBodyDef() { return bodyDef; }
void writeSourceRef(OutputList &ol); void writeSourceRef(OutputList &ol,const char *scopeName);
protected: protected:
int bodyLine; // line number of the definition int startBodyLine; // line number of the start of the definition
int endBodyLine; // line number of the end of the definition
FileDef *bodyDef; // file definition containing the function body FileDef *bodyDef; // file definition containing the function body
private: private:
QCString n; // name of the definition QCString n; // name of the definition
QCString brief; // brief description QCString brief; // brief description
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#if defined(_MSC_VER) || defined(__BORLANDC__) #if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen #define popen _popen
#define pclose _pclose
#endif #endif
...@@ -88,6 +89,7 @@ StringDict typedefDict(1009); // dictionary of all typedefs ...@@ -88,6 +89,7 @@ StringDict typedefDict(1009); // dictionary of all typedefs
GroupDict groupDict(257); // dictionary of all groups GroupDict groupDict(257); // dictionary of all groups
FormulaDict formulaDict(1009); // dictionary of all formulas FormulaDict formulaDict(1009); // dictionary of all formulas
FormulaDict formulaNameDict(1009); // dictionary of the label name of all formulas FormulaDict formulaNameDict(1009); // dictionary of the label name of all formulas
StringDict tagDestinationDict(257); // dictionary of all tag locations
// a member group // a member group
OutputList *outputList; // list of output generating objects OutputList *outputList; // list of output generating objects
...@@ -274,7 +276,7 @@ void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) ...@@ -274,7 +276,7 @@ void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
FileDef *fd=0; FileDef *fd=0;
// see if we need to include a verbatim copy of the header file // see if we need to include a verbatim copy of the header file
//printf("root->includeFile=%s\n",root->includeFile.data()); //printf("root->includeFile=%s\n",root->includeFile.data());
if (!root->includeFile.isNull() && if (!root->includeFile.isEmpty() &&
(fd=findFileDef(&inputNameDict,root->includeFile,ambig))==0 (fd=findFileDef(&inputNameDict,root->includeFile,ambig))==0
) )
{ // explicit request { // explicit request
...@@ -444,9 +446,9 @@ void buildClassList(Entry *root) ...@@ -444,9 +446,9 @@ void buildClassList(Entry *root)
{ {
cd->setBriefDescription(root->brief); cd->setBriefDescription(root->brief);
} }
if (root->bodyLine!=-1 && cd->getBodyLine()==-1) if (root->bodyLine!=-1 && cd->getStartBodyLine()==-1)
{ {
cd->setBodyLine(root->bodyLine); cd->setBodySegment(root->bodyLine,root->endBodyLine);
cd->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); cd->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
} }
cd->addSectionsToDefinition(root->anchors); cd->addSectionsToDefinition(root->anchors);
...@@ -484,7 +486,7 @@ void buildClassList(Entry *root) ...@@ -484,7 +486,7 @@ void buildClassList(Entry *root)
cd->addSectionsToDefinition(root->anchors); cd->addSectionsToDefinition(root->anchors);
// file definition containing the class cd // file definition containing the class cd
FileDef *ifd=findFileDef(&inputNameDict,root->fileName,ambig); FileDef *ifd=findFileDef(&inputNameDict,root->fileName,ambig);
cd->setBodyLine(root->bodyLine); cd->setBodySegment(root->bodyLine,root->endBodyLine);
cd->setBodyDef(ifd); cd->setBodyDef(ifd);
QListIterator<QCString> sli(*root->groups); QListIterator<QCString> sli(*root->groups);
...@@ -766,7 +768,7 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd, ...@@ -766,7 +768,7 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
md->setFromAnnonymousScope(fromAnnScope); md->setFromAnnonymousScope(fromAnnScope);
md->setFromAnnonymousMember(fromAnnMemb); md->setFromAnnonymousMember(fromAnnMemb);
md->setIndentDepth(indentDepth); md->setIndentDepth(indentDepth);
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
...@@ -819,7 +821,7 @@ static MemberDef *addVariableToFile(Entry *root,MemberDef::MemberType mtype, ...@@ -819,7 +821,7 @@ static MemberDef *addVariableToFile(Entry *root,MemberDef::MemberType mtype,
md->setFromAnnonymousScope(fromAnnScope); md->setFromAnnonymousScope(fromAnnScope);
md->setFromAnnonymousMember(fromAnnMemb); md->setFromAnnonymousMember(fromAnnMemb);
md->setIndentDepth(indentDepth); md->setIndentDepth(indentDepth);
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd); md->setBodyDef(fd);
...@@ -906,7 +908,7 @@ void buildVarList(Entry *root) ...@@ -906,7 +908,7 @@ void buildVarList(Entry *root)
(root->section==Entry::VARIABLE_SEC (root->section==Entry::VARIABLE_SEC
) || ) ||
(root->section==Entry::FUNCTION_SEC && // function variable (root->section==Entry::FUNCTION_SEC && // function variable
!root->type.isNull() && root->type.find(re,0)!=-1 && !root->type.isEmpty() && root->type.find(re,0)!=-1 &&
root->type.find("operator")==-1 && root->type.find(")(")==-1 root->type.find("operator")==-1 && root->type.find(")(")==-1
) )
) )
...@@ -922,7 +924,7 @@ void buildVarList(Entry *root) ...@@ -922,7 +924,7 @@ void buildVarList(Entry *root)
); );
//printf("root->parent->name=%s\n",root->parent->name.data()); //printf("root->parent->name=%s\n",root->parent->name.data());
if (root->type.isNull() && root->name.find("operator")==-1 && if (root->type.isEmpty() && root->name.find("operator")==-1 &&
(root->name.find('*')!=-1 || root->name.find('&')!=-1)) (root->name.find('*')!=-1 || root->name.find('&')!=-1))
{ {
// recover from parse error caused by redundant braces // recover from parse error caused by redundant braces
...@@ -1115,7 +1117,7 @@ void buildMemberList(Entry *root) ...@@ -1115,7 +1117,7 @@ void buildMemberList(Entry *root)
(root->parent->section & Entry::COMPOUND_MASK) && (root->parent->section & Entry::COMPOUND_MASK) &&
(cd=getClass(scope)) && (cd=getClass(scope)) &&
// do some fuzzy things to exclude function pointers // do some fuzzy things to exclude function pointers
(root->type.isNull() || root->type.find(re,0)==-1 || (root->type.isEmpty() || root->type.find(re,0)==-1 ||
root->type.find(")(")!=-1 || root->type.find("operator")!=-1 root->type.find(")(")!=-1 || root->type.find("operator")!=-1
) )
) )
...@@ -1161,7 +1163,7 @@ void buildMemberList(Entry *root) ...@@ -1161,7 +1163,7 @@ void buildMemberList(Entry *root)
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
//md->setBody(root->body); //md->setBody(root->body);
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setGroupId(root->mGrpId); md->setGroupId(root->mGrpId);
md->setInline(root->inLine); md->setInline(root->inLine);
bool ambig; bool ambig;
...@@ -1291,9 +1293,9 @@ void buildMemberList(Entry *root) ...@@ -1291,9 +1293,9 @@ void buildMemberList(Entry *root)
{ {
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
} }
if (md->getBodyLine()==-1 && root->bodyLine!=-1) if (md->getStartBodyLine()==-1 && root->bodyLine!=-1)
{ {
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
} }
...@@ -1318,7 +1320,7 @@ void buildMemberList(Entry *root) ...@@ -1318,7 +1320,7 @@ void buildMemberList(Entry *root)
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->setPrototype(root->proto); md->setPrototype(root->proto);
//md->setBody(root->body); //md->setBody(root->body);
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd); md->setBodyDef(fd);
...@@ -1470,10 +1472,10 @@ void findFriends() ...@@ -1470,10 +1472,10 @@ void findFriends()
mmd->setBriefDescription(fmd->briefDescription()); mmd->setBriefDescription(fmd->briefDescription());
else if (!mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty()) else if (!mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty())
fmd->setBriefDescription(mmd->briefDescription()); fmd->setBriefDescription(mmd->briefDescription());
if (mmd->getBodyLine()==-1 && fmd->getBodyLine()!=-1) if (mmd->getStartBodyLine()==-1 && fmd->getStartBodyLine()!=-1)
mmd->setBodyLine(fmd->getBodyLine()); mmd->setBodySegment(fmd->getStartBodyLine(),fmd->getEndBodyLine());
else if (mmd->getBodyLine()!=-1 && fmd->getBodyLine()==-1) else if (mmd->getStartBodyLine()!=-1 && fmd->getStartBodyLine()==-1)
fmd->setBodyLine(mmd->getBodyLine()); fmd->setBodySegment(mmd->getStartBodyLine(),mmd->getEndBodyLine());
} }
} }
} }
...@@ -1522,14 +1524,14 @@ void transferFunctionDocumentation() ...@@ -1522,14 +1524,14 @@ void transferFunctionDocumentation()
{ {
mdef->setDocumentation(mdec->documentation()); mdef->setDocumentation(mdec->documentation());
} }
if (mdec->getBodyLine()!=-1 && mdef->getBodyLine()==-1) if (mdec->getStartBodyLine()!=-1 && mdef->getStartBodyLine()==-1)
{ {
mdef->setBodyLine(mdec->getBodyLine()); mdef->setBodySegment(mdec->getStartBodyLine(),mdec->getEndBodyLine());
mdef->setBodyDef(mdec->getFileDef()); mdef->setBodyDef(mdec->getFileDef());
} }
else if (mdef->getBodyLine()!=-1 && mdec->getBodyLine()==-1) else if (mdef->getStartBodyLine()!=-1 && mdec->getStartBodyLine()==-1)
{ {
mdec->setBodyLine(mdef->getBodyLine()); mdec->setBodySegment(mdef->getStartBodyLine(),mdef->getEndBodyLine());
mdec->setBodyDef(mdef->getFileDef()); mdec->setBodyDef(mdef->getFileDef());
} }
} }
...@@ -1764,7 +1766,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl, ...@@ -1764,7 +1766,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
if (over_load) // the \overload keyword was used if (over_load) // the \overload keyword was used
{ {
QCString doc=getOverloadDocs(); QCString doc=getOverloadDocs();
if (!root->doc.isNull()) if (!root->doc.isEmpty())
{ {
doc+="<p>"; doc+="<p>";
doc+=root->doc; doc+=root->doc;
...@@ -1777,7 +1779,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl, ...@@ -1777,7 +1779,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
if ( /* !md->isStatic() && !root->stat && do not replace doc of a static */ if ( /* !md->isStatic() && !root->stat && do not replace doc of a static */
( (
md->documentation().isEmpty() || /* no docs yet */ md->documentation().isEmpty() || /* no docs yet */
(root->parent->name.isNull() && /* or overwrite prototype docs */ (root->parent->name.isEmpty() && /* or overwrite prototype docs */
!root->proto && md->isPrototype() /* with member definition docs */ !root->proto && md->isPrototype() /* with member definition docs */
) )
) && root->doc.length()>0 ) && root->doc.length()>0
...@@ -1791,7 +1793,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl, ...@@ -1791,7 +1793,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
if ( /* !md->isStatic() && !root->stat && do not replace doc of static */ if ( /* !md->isStatic() && !root->stat && do not replace doc of static */
( (
md->briefDescription().isEmpty() || /* no docs yet */ md->briefDescription().isEmpty() || /* no docs yet */
!root->parent->name.isNull() /* member of a class */ !root->parent->name.isEmpty() /* member of a class */
) && root->brief.length()>0 ) && root->brief.length()>0
) )
{ {
...@@ -1802,9 +1804,9 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl, ...@@ -1802,9 +1804,9 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
//{ //{
// md->setBody(root->body); // md->setBody(root->body);
//} //}
if (md->getBodyLine()==-1 && root->bodyLine!=-1) if (md->getStartBodyLine()==-1 && root->bodyLine!=-1)
{ {
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd); md->setBodyDef(fd);
...@@ -2162,13 +2164,14 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded, ...@@ -2162,13 +2164,14 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
scopeName=related.copy(); scopeName=related.copy();
} }
else if (/*scopeName.isEmpty() &&*/ related.isEmpty() && root->parent && else if (/*scopeName.isEmpty() &&*/ related.isEmpty() && root->parent &&
!root->parent->name.isNull()) !root->parent->name.isEmpty())
{ {
Entry *p=root->parent; Entry *p=root->parent;
while (p) // get full scope as class name while (p) // get full scope as class name
{ {
QCString sc = stripAnnonymousNamespaceScope(p->name);
if ((p->section & Entry::SCOPE_MASK) if ((p->section & Entry::SCOPE_MASK)
&& !p->name.isEmpty() && p->name[0]!='@' && !sc.isEmpty() && sc[0]!='@'
) )
{ {
//printf("p->name=`%s' scopeName=`%s' classTempList=%s\n", //printf("p->name=`%s' scopeName=`%s' classTempList=%s\n",
...@@ -2183,11 +2186,11 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded, ...@@ -2183,11 +2186,11 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
//printf("tryScope=%s\n",tryScope.data()); //printf("tryScope=%s\n",tryScope.data());
if (leftScopeMatch(tryScope,p->name)) if (leftScopeMatch(tryScope,sc))
break; // scope already present, so stop now break; // scope already present, so stop now
// prepend name to scope // prepend name to scope
if (!scopeName.isEmpty()) scopeName.prepend("::"); if (!scopeName.isEmpty()) scopeName.prepend("::");
scopeName.prepend(p->name); scopeName.prepend(sc);
} }
p=p->parent; p=p->parent;
} }
...@@ -2572,7 +2575,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded, ...@@ -2572,7 +2575,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
md->setPrototype(root->proto); md->setPrototype(root->proto);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
//md->setBody(root->body); //md->setBody(root->body);
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd); md->setBodyDef(fd);
...@@ -2662,7 +2665,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded, ...@@ -2662,7 +2665,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
} }
if (rmd) // member found -> copy line number info if (rmd) // member found -> copy line number info
{ {
md->setBodyLine(rmd->getBodyLine()); md->setBodySegment(rmd->getStartBodyLine(),rmd->getEndBodyLine());
md->setBodyDef(rmd->getBodyDef()); md->setBodyDef(rmd->getBodyDef());
} }
} }
...@@ -2670,7 +2673,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded, ...@@ -2670,7 +2673,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
if (!found) // line number could not be found or is available in this if (!found) // line number could not be found or is available in this
// entry // entry
{ {
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd); md->setBodyDef(fd);
...@@ -2897,7 +2900,7 @@ void findEnums(Entry *root) ...@@ -2897,7 +2900,7 @@ void findEnums(Entry *root)
if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd); if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
md->setDefFile(root->fileName); md->setDefFile(root->fileName);
md->setDefLine(root->startLine); md->setDefLine(root->startLine);
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
//printf("Enum definition at line %d of %s\n",root->bodyLine,root->fileName.data()); //printf("Enum definition at line %d of %s\n",root->bodyLine,root->fileName.data());
...@@ -3440,9 +3443,9 @@ void addSourceReferences() ...@@ -3440,9 +3443,9 @@ void addSourceReferences()
for (cli.toFirst();(cd=cli.current());++cli) for (cli.toFirst();(cd=cli.current());++cli)
{ {
FileDef *fd=cd->getBodyDef(); FileDef *fd=cd->getBodyDef();
if (fd && cd->isLinkableInProject() && cd->getBodyLine()!=-1) if (fd && cd->isLinkableInProject() && cd->getStartBodyLine()!=-1)
{ {
fd->addSourceRef(cd->getBodyLine(),cd,0); fd->addSourceRef(cd->getStartBodyLine(),cd,0);
} }
} }
MemberNameListIterator mnli(memberNameList); MemberNameListIterator mnli(memberNameList);
...@@ -3455,15 +3458,15 @@ void addSourceReferences() ...@@ -3455,15 +3458,15 @@ void addSourceReferences()
{ {
ClassDef *cd=md->memberClass(); ClassDef *cd=md->memberClass();
FileDef *fd=md->getBodyDef(); FileDef *fd=md->getBodyDef();
if (fd && cd && cd->isLinkableInProject() && md->getBodyLine()!=-1 && if (fd && cd && cd->isLinkableInProject() && md->getStartBodyLine()!=-1 &&
md->isLinkableInProject()) md->isLinkableInProject())
{ {
//printf("Found member `%s' in file `%s' at line `%d'\n", //printf("Found member `%s' in file `%s' at line `%d'\n",
// md->name().data(),fd->name().data(),md->getBodyLine()); // md->name().data(),fd->name().data(),md->getStartBodyLine());
Definition *d=cd; Definition *d=cd;
if (d==0) d=md->getNamespace(); if (d==0) d=md->getNamespace();
if (d==0) d=md->getFileDef(); if (d==0) d=md->getFileDef();
fd->addSourceRef(md->getBodyLine(),d,md->anchor()); fd->addSourceRef(md->getStartBodyLine(),d,md->anchor());
} }
} }
} }
...@@ -3476,16 +3479,16 @@ void addSourceReferences() ...@@ -3476,16 +3479,16 @@ void addSourceReferences()
{ {
NamespaceDef *nd=md->getNamespace(); NamespaceDef *nd=md->getNamespace();
FileDef *fd=md->getBodyDef(); FileDef *fd=md->getBodyDef();
if (md->getBodyLine()!=-1 && md->isLinkableInProject() && if (md->getStartBodyLine()!=-1 && md->isLinkableInProject() &&
(nd && nd->isLinkableInProject()) || (nd && nd->isLinkableInProject()) ||
(fd && fd->isLinkableInProject()) (fd && fd->isLinkableInProject())
) )
{ {
//printf("Found member `%s' in file `%s' at line `%d'\n", //printf("Found member `%s' in file `%s' at line `%d'\n",
// md->name().data(),fd->name().data(),md->getBodyLine()); // md->name().data(),fd->name().data(),md->getStartBodyLine());
Definition *d=md->getFileDef(); Definition *d=md->getFileDef();
if (d==0) d=md->getNamespace(); if (d==0) d=md->getNamespace();
fd->addSourceRef(md->getBodyLine(),d,md->anchor()); fd->addSourceRef(md->getStartBodyLine(),d,md->anchor());
} }
} }
} }
...@@ -3610,7 +3613,7 @@ void findDefineDocumentation(Entry *root) ...@@ -3610,7 +3613,7 @@ void findDefineDocumentation(Entry *root)
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
if (md->briefDescription().isEmpty()) if (md->briefDescription().isEmpty())
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
...@@ -3636,7 +3639,7 @@ void findDefineDocumentation(Entry *root) ...@@ -3636,7 +3639,7 @@ void findDefineDocumentation(Entry *root)
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
if (md->briefDescription().isEmpty()) if (md->briefDescription().isEmpty())
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->setBodyLine(root->bodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
...@@ -4132,16 +4135,37 @@ bool readLineFromFile(QFile &f,QCString &s) ...@@ -4132,16 +4135,37 @@ bool readLineFromFile(QFile &f,QCString &s)
return f.atEnd(); return f.atEnd();
} }
void readTagFile(const char *file) void readTagFile(const char *tl)
{ {
QFileInfo fi(file); QCString tagLine = tl;
QCString fileName;
QCString destName;
int eqPos = tagLine.find('=');
if (eqPos!=-1) // tag command contains a destination
{
fileName = tagLine.left(eqPos).stripWhiteSpace();
destName = tagLine.right(tagLine.length()-eqPos-1).stripWhiteSpace();
tagDestinationDict.insert(fileName,new QCString(destName));
}
else
{
fileName = tagLine;
}
QFileInfo fi(fileName);
if (!fi.exists() || !fi.isFile()) if (!fi.exists() || !fi.isFile())
{ {
err("Error: Tag file `%s' does not exist or is not a file\n",file); err("Error: Tag file `%s' does not exist or is not a file\n",
fileName.data());
exit(1); exit(1);
} }
msg("Reading tag file %s...\n",file);
parseTagFile(file); if (!destName.isEmpty())
msg("Reading tag file `%s', location `%s'...\n",fileName.data(),destName.data());
else
msg("Reading tag file `%s'...\n",fileName.data());
parseTagFile(fileName);
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
...@@ -4199,8 +4223,6 @@ void copyAndFilterFile(const char *fileName,BufStr &dest) ...@@ -4199,8 +4223,6 @@ void copyAndFilterFile(const char *fileName,BufStr &dest)
} }
else else
{ {
int c;
// char *p=dest;
QCString cmd=Config::inputFilter+" "+fileName; QCString cmd=Config::inputFilter+" "+fileName;
FILE *f=popen(cmd,"r"); FILE *f=popen(cmd,"r");
if (!f) if (!f)
...@@ -4208,7 +4230,12 @@ void copyAndFilterFile(const char *fileName,BufStr &dest) ...@@ -4208,7 +4230,12 @@ void copyAndFilterFile(const char *fileName,BufStr &dest)
err("Error: could not execute filter %s\n",Config::inputFilter.data()); err("Error: could not execute filter %s\n",Config::inputFilter.data());
return; return;
} }
while ((c=fgetc(f))!=EOF) dest.addChar(c),size++; const int bufSize=1024;
char buf[bufSize];
int numRead;
while ((numRead=fread(buf,1,bufSize,f))!=bufSize)
dest.addArray(buf,numRead),size+=numRead;
pclose(f);
} }
// filter unwanted bytes from the resulting data // filter unwanted bytes from the resulting data
uchar *p=(uchar *)dest.data()+oldPos; uchar *p=(uchar *)dest.data()+oldPos;
......
...@@ -116,6 +116,7 @@ extern FormulaList formulaList; ...@@ -116,6 +116,7 @@ extern FormulaList formulaList;
extern FormulaDict formulaDict; extern FormulaDict formulaDict;
extern FormulaDict formulaNameDict; extern FormulaDict formulaNameDict;
extern PageInfo *mainPage; extern PageInfo *mainPage;
extern StringDict tagDestinationDict;
extern int annotatedClasses; extern int annotatedClasses;
extern int hierarchyClasses; extern int hierarchyClasses;
......
...@@ -2543,7 +2543,7 @@ void parse(QCString &s) ...@@ -2543,7 +2543,7 @@ void parse(QCString &s)
void parseFile(QFileInfo &fi) void parseFile(QFileInfo &fi)
{ {
fprintf(stderr,"Parsing file %s...\n",fi.fileName().data()); fprintf(stderr,"Parsing file %s...\n",fi.fileName().data());
QFile f(fi.absFilePath()); QFile f(fi.absFilePath().data());
if (f.open(IO_ReadOnly)) if (f.open(IO_ReadOnly))
{ {
yyFileName = fi.fileName(); yyFileName = fi.fileName();
......
...@@ -422,7 +422,7 @@ void parse(QCString &s) ...@@ -422,7 +422,7 @@ void parse(QCString &s)
void parseFile(QFileInfo &fi) void parseFile(QFileInfo &fi)
{ {
fprintf(stderr,"Parsing file %s...\n",fi.fileName().data()); fprintf(stderr,"Parsing file %s...\n",fi.fileName().data());
QFile f(fi.absFilePath()); QFile f(fi.absFilePath().data());
if (f.open(IO_ReadOnly)) if (f.open(IO_ReadOnly))
{ {
yyFileName = fi.fileName(); yyFileName = fi.fileName();
......
...@@ -66,6 +66,7 @@ Entry::Entry(const Entry &e) ...@@ -66,6 +66,7 @@ Entry::Entry(const Entry &e)
startLine = e.startLine; startLine = e.startLine;
mGrpId = e.mGrpId; mGrpId = e.mGrpId;
bodyLine = e.bodyLine; bodyLine = e.bodyLine;
endBodyLine = e.endBodyLine;
inLine = e.inLine; inLine = e.inLine;
sublist = new QList<Entry>; sublist = new QList<Entry>;
sublist->setAutoDelete(TRUE); sublist->setAutoDelete(TRUE);
...@@ -203,6 +204,7 @@ void Entry::reset() ...@@ -203,6 +204,7 @@ void Entry::reset()
scopeSpec.resize(0); scopeSpec.resize(0);
memberSpec.resize(0); memberSpec.resize(0);
bodyLine = -1; bodyLine = -1;
endBodyLine = -1;
mGrpId = -1; mGrpId = -1;
section = EMPTY_SEC; section = EMPTY_SEC;
sig = FALSE; sig = FALSE;
......
...@@ -141,8 +141,8 @@ class Entry ...@@ -141,8 +141,8 @@ class Entry
QCString scopeSpec; // template specialization of the scope QCString scopeSpec; // template specialization of the scope
QCString memberSpec; // template specialization of the member QCString memberSpec; // template specialization of the member
QCString program; // the program text QCString program; // the program text
//QCString body; // the function body
int bodyLine; // line number of the definition in the source int bodyLine; // line number of the definition in the source
int endBodyLine; // line number where the definition ends
QCString includeFile; // include file (2 arg of \class, must be unique) QCString includeFile; // include file (2 arg of \class, must be unique)
QCString includeName; // include name (3 arg of \class) QCString includeName; // include name (3 arg of \class)
QCString doc; // documentation block (partly parsed) QCString doc; // documentation block (partly parsed)
......
...@@ -202,7 +202,8 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -202,7 +202,8 @@ void FileDef::writeDocumentation(OutputList &ol)
//doc=doc.stripWhiteSpace(); //doc=doc.stripWhiteSpace();
//int bl=brief.length(); //int bl=brief.length();
//int dl=doc.length(); //int dl=doc.length();
if (!briefDescription().isEmpty() || !documentation().isEmpty() || bodyLine!=-1) if (!briefDescription().isEmpty() || !documentation().isEmpty() ||
startBodyLine!=-1)
{ {
ol.writeRuler(); ol.writeRuler();
bool latexOn = ol.isEnabled(OutputGenerator::Latex); bool latexOn = ol.isEnabled(OutputGenerator::Latex);
...@@ -329,7 +330,7 @@ void FileDef::writeSource(OutputList &ol) ...@@ -329,7 +330,7 @@ void FileDef::writeSource(OutputList &ol)
//parseText(ol,theTranslator->trVerbatimText(incFile->name())); //parseText(ol,theTranslator->trVerbatimText(incFile->name()));
//ol.writeRuler(); //ol.writeRuler();
ol.startCodeFragment(); ol.startCodeFragment();
parseCode(ol,name(),fileToString(absFilePath()),FALSE,0,this); parseCode(ol,0,fileToString(absFilePath()),FALSE,0,this);
ol.endCodeFragment(); ol.endCodeFragment();
endFile(ol); endFile(ol);
ol.enableAll(); ol.enableAll();
......
...@@ -105,9 +105,24 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external) ...@@ -105,9 +105,24 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
void HtmlGenerator::startQuickIndexItem(const char *s,const char *l) void HtmlGenerator::startQuickIndexItem(const char *s,const char *l)
{ {
t << "<a "; QCString *dest;
if (s) t << "doxygen=\"" << s << "\" "; if (s)
t << "href=\"" << l << "\">"; {
t << "<a class=\"qindexRef\"";
t << "doxygen=\"" << s << ":";
if ((dest=tagDestinationDict[s])) t << *dest << "/";
t << "\" ";
}
else
{
t << "<a class=\"qindex\"";
}
t << "href=\"";
if (s)
{
if ((dest=tagDestinationDict[s])) t << *dest << "/";
}
t << l << "\">";
} }
void HtmlGenerator::endQuickIndexItem() void HtmlGenerator::endQuickIndexItem()
...@@ -182,14 +197,19 @@ void HtmlGenerator::writeStyleInfo(int part) ...@@ -182,14 +197,19 @@ void HtmlGenerator::writeStyleInfo(int part)
{ {
startPlainFile("doxygen.css"); startPlainFile("doxygen.css");
t << "H1 { text-align: center }" << endl; t << "H1 { text-align: center }" << endl;
t << "A.qindex {}" << endl;
t << "A.qindexRef {}" << endl;
t << "A.el { text-decoration: none; font-weight: bold }" << endl; t << "A.el { text-decoration: none; font-weight: bold }" << endl;
t << "A.elRef { font-weight: bold }" << endl;
t << "A.code { text-decoration: none; font-weight: normal; color: #4444ee }" << endl;
t << "A.codeRef { font-weight: normal; color: #4444ee }" << endl;
t << "A.gl:link { color: #ffffff }" << endl;
t << "A.gl:visited { color: #ffffff }" << endl;
t << "A.gl { text-decoration: none; font-weight: bold; background-color: " << GROUP_COLOR << " }" << endl;
t << "DL.el { margin-left: -1cm }" << endl; t << "DL.el { margin-left: -1cm }" << endl;
t << "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }" << endl; t << "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }" << endl;
t << "DIV.in { margin-left: 16 }" << endl; t << "DIV.in { margin-left: 16 }" << endl;
t << "DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }" << endl; t << "DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }" << endl;
t << "A.gl:link { color: #ffffff }" << endl;
t << "A.gl:visited { color: #ffffff }" << endl;
t << "A.gl { text-decoration: none; font-weight: bold; background-color: " << GROUP_COLOR << " }" << endl;
t << "TD.md { background-color: #f2f2ff }" << endl; t << "TD.md { background-color: #f2f2ff }" << endl;
t << endl; t << endl;
endPlainFile(); endPlainFile();
...@@ -220,12 +240,26 @@ void HtmlGenerator::writeString(const char *text) ...@@ -220,12 +240,26 @@ void HtmlGenerator::writeString(const char *text)
void HtmlGenerator::writeIndexItem(const char *ref,const char *f, void HtmlGenerator::writeIndexItem(const char *ref,const char *f,
const char *name) const char *name)
{ {
QCString *dest;
t << "<li>"; t << "<li>";
if (ref || f) if (ref || f)
{
if (ref)
{
t << "<a class=\"elRef\" ";
t << "doxygen=\"" << ref << ":";
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
t << "\" ";
}
else
{ {
t << "<a class=\"el\" "; t << "<a class=\"el\" ";
if (ref) t << "doxygen=\"" << ref << ":\" "; }
t << "href=\""; t << "href=\"";
if (ref)
{
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
}
if (f) t << f << ".html\">"; if (f) t << f << ".html\">";
} }
else else
...@@ -264,18 +298,56 @@ void HtmlGenerator::writeStartAnnoItem(const char *,const char *f, ...@@ -264,18 +298,56 @@ void HtmlGenerator::writeStartAnnoItem(const char *,const char *f,
void HtmlGenerator::writeObjectLink(const char *ref,const char *f, void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
const char *anchor, const char *name) const char *anchor, const char *name)
{ {
QCString *dest;
if (ref)
{
t << "<a class=\"elRef\" ";
t << "doxygen=\"" << ref << ":";
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
t << "\" ";
}
else
{
t << "<a class=\"el\" "; t << "<a class=\"el\" ";
if (ref) t << "doxygen=\"" << ref << ":\" "; }
t << "href=\""; t << "href=\"";
if (ref)
{
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
}
if (f) t << f << ".html"; if (f) t << f << ".html";
if (anchor) t << "#" << anchor; if (anchor) t << "#" << anchor;
t << "\">"; t << "\">";
docify(name); docify(name);
t << "</a>"; t << "</a>";
//if (Config::htmlHelpFlag && f && htmlHelp->depth()>0) }
//{
// htmlHelp->addItem(name,((QCString)f)+".html"); void HtmlGenerator::writeCodeLink(const char *ref,const char *f,
//} const char *anchor, const char *name)
{
QCString *dest;
if (ref)
{
t << "<a class=\"codeRef\" ";
t << "doxygen=\"" << ref << ":";
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
t << "\" ";
}
else
{
t << "<a class=\"code\" ";
}
t << "href=\"";
if (ref)
{
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
}
if (f) t << f << ".html";
if (anchor) t << "#" << anchor;
t << "\">";
docify(name);
t << "</a>";
col+=strlen(name);
} }
void HtmlGenerator::startTextLink(const char *f,const char *anchor) void HtmlGenerator::startTextLink(const char *f,const char *anchor)
...@@ -666,7 +738,7 @@ void HtmlGenerator::endIndexList() ...@@ -666,7 +738,7 @@ void HtmlGenerator::endIndexList()
void HtmlGenerator::startAlphabeticalIndexList() void HtmlGenerator::startAlphabeticalIndexList()
{ {
t << "<table align=center width=95% border=0 cellspacing=0 cellpadding=0>" << endl; t << "<table align=center width=\"95%\" border=0 cellspacing=0 cellpadding=0>" << endl;
} }
void HtmlGenerator::endAlphabeticalIndexList() void HtmlGenerator::endAlphabeticalIndexList()
......
...@@ -76,8 +76,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -76,8 +76,7 @@ class HtmlGenerator : public OutputGenerator
void writeObjectLink(const char *ref,const char *file, void writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *name); const char *anchor,const char *name);
void writeCodeLink(const char *ref,const char *f, void writeCodeLink(const char *ref,const char *f,
const char *anchor,const char *name) const char *anchor,const char *name);
{ writeObjectLink(ref,f,anchor,name); col+=strlen(name); }
void startTextLink(const char *file,const char *anchor); void startTextLink(const char *file,const char *anchor);
void endTextLink(); void endTextLink();
void writeHtmlLink(const char *url,const char *text); void writeHtmlLink(const char *url,const char *text);
...@@ -161,6 +160,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -161,6 +160,8 @@ class HtmlGenerator : public OutputGenerator
void writeGrave(char c) { t << "&" << c << "grave;"; } void writeGrave(char c) { t << "&" << c << "grave;"; }
void writeCirc(char c) { t << "&" << c << "circ;"; } void writeCirc(char c) { t << "&" << c << "circ;"; }
void writeTilde(char c) { t << "&" << c << "tilde;"; } void writeTilde(char c) { t << "&" << c << "tilde;"; }
void writeRing(char c) { t << "&" << c << "ring;"; }
void writeSharpS() { t << "&szlig;"; }
void startDescList() { t << "<dl compact><dt>" << endl; } void startDescList() { t << "<dl compact><dt>" << endl; }
void endDescTitle() {} void endDescTitle() {}
void writeDescItem() { t << "<dd>" << endl; } void writeDescItem() { t << "<dd>" << endl; }
......
...@@ -39,8 +39,18 @@ void writeInstallScript() ...@@ -39,8 +39,18 @@ void writeInstallScript()
char *s=Config::tagFileList.first(); char *s=Config::tagFileList.first();
while (s) while (s)
{ {
QFileInfo fi(s); QCString tagLine=s;
t << "\"" << fi.fileName() << "\", \"\""; QCString fileName;
int eqPos = tagLine.find('=');
if (eqPos!=-1) // strip destination part
{
fileName = tagLine.left(eqPos).stripWhiteSpace();
}
else
{
fileName = tagLine;
}
t << "\"" << fileName << "\", \"\"";
s=Config::tagFileList.next(); s=Config::tagFileList.next();
if (s) t << ", "; if (s) t << ", ";
} }
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "translator_de.h" #include "translator_de.h"
#include "translator_jp.h" #include "translator_jp.h"
#include "translator_es.h" #include "translator_es.h"
#include "translator_fi.h"
#endif #endif
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -69,6 +70,10 @@ bool setTranslator(const char *langName) ...@@ -69,6 +70,10 @@ bool setTranslator(const char *langName)
{ {
theTranslator=new TranslatorSpanish; theTranslator=new TranslatorSpanish;
} }
else if (L_EQUAL("finnish"))
{
theTranslator=new TranslatorFinnish;
}
#endif #endif
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
...@@ -965,13 +965,13 @@ void LatexGenerator::docify(const char *str) ...@@ -965,13 +965,13 @@ void LatexGenerator::docify(const char *str)
c = *p++; c = *p++;
t << (char)c; t << (char)c;
} }
}
else // ascii char => see if we can insert hypenation hint else // ascii char => see if we can insert hypenation hint
{ {
if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c; t << (char)c;
} }
} }
}
else // language is other than japanese else // language is other than japanese
{ {
switch(c) switch(c)
......
...@@ -160,6 +160,8 @@ class LatexGenerator : public OutputGenerator ...@@ -160,6 +160,8 @@ class LatexGenerator : public OutputGenerator
t << "\\^{" << c << "}"; t << "\\^{" << c << "}";
} }
void writeTilde(char c) { t << "\\~{" << c << "}"; } void writeTilde(char c) { t << "\\~{" << c << "}"; }
void writeRing(char c) { t << "\\" << c << c; }
void writeSharpS() { t << "\"s"; }
void startMemberDescription() { t << "\\begin{CompactList}\\small\\item\\em "; } void startMemberDescription() { t << "\\begin{CompactList}\\small\\item\\em "; }
void endMemberDescription() { t << "\\item\\end{CompactList}"; } void endMemberDescription() { t << "\\item\\end{CompactList}"; }
void startDescList() { t << "\\begin{Desc}\n\\item["; } void startDescList() { t << "\\begin{Desc}\n\\item["; }
......
...@@ -149,6 +149,12 @@ class ManGenerator : public OutputGenerator ...@@ -149,6 +149,12 @@ class ManGenerator : public OutputGenerator
void writeGrave(char c) { t << c << "\\*:"; firstCol=FALSE; } void writeGrave(char c) { t << c << "\\*:"; firstCol=FALSE; }
void writeCirc(char c) { t << c << "\\*^"; firstCol=FALSE; } void writeCirc(char c) { t << c << "\\*^"; firstCol=FALSE; }
void writeTilde(char c) { t << c << "\\*~"; firstCol=FALSE; } void writeTilde(char c) { t << c << "\\*~"; firstCol=FALSE; }
void writeRing(char c) { t << c << "\\*0"; /* just a wild guess,
need to check! */
firstCol=FALSE; }
void writeSharpS() { t << "s\\*:"; /* just a wild guess,
need to check! */
firstCol=FALSE; }
void startMemberDescription() { t << "\n.RI \"\\fI"; firstCol=FALSE; } void startMemberDescription() { t << "\n.RI \"\\fI"; firstCol=FALSE; }
void endMemberDescription() { t << "\\fR\""; firstCol=FALSE; } void endMemberDescription() { t << "\\fR\""; firstCol=FALSE; }
void startDescList(); void startDescList();
......
...@@ -445,6 +445,7 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi ...@@ -445,6 +445,7 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
{ {
int i,l; int i,l;
bool hasDocs=hasDocumentation(); bool hasDocs=hasDocumentation();
//printf("%s MemberDef::writeDeclaration(): hasDocs %d\n",name().data(),hasDocs);
//if (cd) printf("MemberDef: %s in class %s annScope=%d annMemb=%p\n", //if (cd) printf("MemberDef: %s in class %s annScope=%d annMemb=%p\n",
// name().data(),cd->name().data(),annScope,annMemb); // name().data(),cd->name().data(),annScope,annMemb);
if (annScope) return; if (annScope) return;
...@@ -630,7 +631,7 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi ...@@ -630,7 +631,7 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
if (annMemb) if (annMemb)
{ {
bool latexOn = ol.isEnabled(OutputGenerator::Latex); bool latexOn = ol.isEnabled(OutputGenerator::Latex);
bool manOn = ol.isEnabled(OutputGenerator::Latex); bool manOn = ol.isEnabled(OutputGenerator::Man);
if (latexOn) ol.disable(OutputGenerator::Latex); if (latexOn) ol.disable(OutputGenerator::Latex);
if (manOn) ol.disable(OutputGenerator::Man); if (manOn) ol.disable(OutputGenerator::Man);
ol.writeNonBreakableSpace(); ol.writeNonBreakableSpace();
...@@ -738,6 +739,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco ...@@ -738,6 +739,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
MemberType m) MemberType m)
{ {
bool hasDocs = detailsAreVisible(); bool hasDocs = detailsAreVisible();
//printf("%s MemberDef::writeDocumentation(): hasDocs %d\n",name().data(),hasDocs);
if ( if (
(memberType()==m && // filter member type (memberType()==m && // filter member type
(Config::extractAllFlag || hasDocs) && (Config::extractAllFlag || hasDocs) &&
...@@ -1168,7 +1170,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco ...@@ -1168,7 +1170,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
ol.endDescList(); ol.endDescList();
} }
// write reference to the source // write reference to the source
writeSourceRef(ol); writeSourceRef(ol,cname);
ol.endIndent(); ol.endIndent();
// enable LaTeX again // enable LaTeX again
//if (Config::extractAllFlag && !hasDocs) ol.enable(OutputGenerator::Latex); //if (Config::extractAllFlag && !hasDocs) ol.enable(OutputGenerator::Latex);
...@@ -1214,7 +1216,7 @@ bool MemberDef::isLinkable() ...@@ -1214,7 +1216,7 @@ bool MemberDef::isLinkable()
bool MemberDef::detailsAreVisible() const bool MemberDef::detailsAreVisible() const
{ {
return !documentation().isEmpty() || // has detailed docs return !documentation().isEmpty() || // has detailed docs
(Config::sourceBrowseFlag && bodyLine!=-1 && bodyDef) || // has reference to sources (Config::sourceBrowseFlag && startBodyLine!=-1 && bodyDef) || // has reference to sources
(mtype==Enumeration && docEnumValues) || // has enum values (mtype==Enumeration && docEnumValues) || // has enum values
(mtype==EnumValue && !briefDescription().isEmpty()) || // is doc enum value (mtype==EnumValue && !briefDescription().isEmpty()) || // is doc enum value
(!briefDescription().isEmpty() && (!briefDescription().isEmpty() &&
......
...@@ -147,7 +147,7 @@ class MemberDef : public Definition ...@@ -147,7 +147,7 @@ class MemberDef : public Definition
// tag file related members // tag file related members
//void setReference(const char *r) { external=r; } //void setReference(const char *r) { external=r; }
//bool isReference() { return !external.isNull(); } //bool isReference() { return !external.isEmpty(); }
// argument related members // argument related members
ArgumentList *argumentList() const { return argList; } ArgumentList *argumentList() const { return argList; }
......
...@@ -77,9 +77,9 @@ void MemberGroup::writeDocumentation(OutputList &ol) ...@@ -77,9 +77,9 @@ void MemberGroup::writeDocumentation(OutputList &ol)
if (!documentation().isEmpty() || Config::repeatBriefFlag) if (!documentation().isEmpty() || Config::repeatBriefFlag)
{ {
bool htmlEnabled = ol.isEnabled(OutputGenerator::Html); bool htmlEnabled = ol.isEnabled(OutputGenerator::Html);
bool latexEnabled = ol.isEnabled(OutputGenerator::Html); bool latexEnabled = ol.isEnabled(OutputGenerator::Latex);
if (htmlEnabled) ol.disableAllBut(OutputGenerator::Html); if (htmlEnabled) ol.disable(OutputGenerator::Html);
if (latexEnabled) ol.disableAllBut(OutputGenerator::Html); if (latexEnabled) ol.disable(OutputGenerator::Latex);
ol.startTextLink(0,"_details"); ol.startTextLink(0,"_details");
parseText(ol,theTranslator->trMore()); parseText(ol,theTranslator->trMore());
ol.endTextLink(); ol.endTextLink();
......
...@@ -64,6 +64,7 @@ class MemberGroupDict : public QIntDict<MemberGroup> ...@@ -64,6 +64,7 @@ class MemberGroupDict : public QIntDict<MemberGroup>
{ {
public: public:
MemberGroupDict(int size) : QIntDict<MemberGroup>(size) {} MemberGroupDict(int size) : QIntDict<MemberGroup>(size) {}
~MemberGroupDict() {}
}; };
#endif #endif
...@@ -82,6 +82,8 @@ void MemberList::countDocMembers(bool inGroup) ...@@ -82,6 +82,8 @@ void MemberList::countDocMembers(bool inGroup)
MemberDef *md=first(); MemberDef *md=first();
while (md) while (md)
{ {
//printf("%s MemberList::countDocMembers() details=%d\n",
// md->name().data(),md->detailsAreVisible());
if ((Config::extractAllFlag || md->detailsAreVisible()) && if ((Config::extractAllFlag || md->detailsAreVisible()) &&
(md->groupId()==-1 || inGroup)) (md->groupId()==-1 || inGroup))
{ {
......
...@@ -153,6 +153,8 @@ class OutputGenerator ...@@ -153,6 +153,8 @@ class OutputGenerator
virtual void writeGrave(char) = 0; virtual void writeGrave(char) = 0;
virtual void writeCirc(char) = 0; virtual void writeCirc(char) = 0;
virtual void writeTilde(char) = 0; virtual void writeTilde(char) = 0;
virtual void writeRing(char) = 0;
virtual void writeSharpS() = 0;
virtual void startMemberDescription() = 0; virtual void startMemberDescription() = 0;
virtual void endMemberDescription() = 0; virtual void endMemberDescription() = 0;
virtual void startDescList() = 0; virtual void startDescList() = 0;
......
...@@ -263,6 +263,10 @@ class OutputList ...@@ -263,6 +263,10 @@ class OutputList
{ forall(&OutputGenerator::writeCirc,c); } { forall(&OutputGenerator::writeCirc,c); }
void writeTilde(char c) void writeTilde(char c)
{ forall(&OutputGenerator::writeTilde,c); } { forall(&OutputGenerator::writeTilde,c); }
void writeRing(char c)
{ forall(&OutputGenerator::writeRing,c); }
void writeSharpS()
{ forall(&OutputGenerator::writeSharpS); }
void startMemberDescription() void startMemberDescription()
{ forall(&OutputGenerator::startMemberDescription); } { forall(&OutputGenerator::startMemberDescription); }
void endMemberDescription() void endMemberDescription()
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -543,7 +543,7 @@ static bool inBlock() ...@@ -543,7 +543,7 @@ static bool inBlock()
static void endBlock() static void endBlock()
{ {
if (inParamBlock || inRetValBlock) if (inParamBlock || inRetValBlock || inExceptionBlock)
{ {
outDoc->endDescTableData(); outDoc->endDescTableData();
outDoc->endDescTable(); outDoc->endDescTable();
...@@ -657,7 +657,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type) ...@@ -657,7 +657,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
FileDef *fd; FileDef *fd;
if ((fd=findFileDef(&imageNameDict,fileName,ambig))) if ((fd=findFileDef(&imageNameDict,fileName,ambig)))
{ {
QFile inImage(fd->absFilePath()); QFile inImage(fd->absFilePath().data());
if (inImage.open(IO_ReadOnly)) if (inImage.open(IO_ReadOnly))
{ {
result = fileName; result = fileName;
...@@ -985,6 +985,8 @@ VAR [vV][aA][rR] ...@@ -985,6 +985,8 @@ VAR [vV][aA][rR]
<DocScan,Text>"&"[AEIOUaeiou]"grave;" { outDoc->writeGrave(yytext[1]); } <DocScan,Text>"&"[AEIOUaeiou]"grave;" { outDoc->writeGrave(yytext[1]); }
<DocScan,Text>"&"[AEIOUaeiou]"circ;" { outDoc->writeCirc(yytext[1]); } <DocScan,Text>"&"[AEIOUaeiou]"circ;" { outDoc->writeCirc(yytext[1]); }
<DocScan,Text>"&"[ANOano]"tilde;" { outDoc->writeTilde(yytext[1]); } <DocScan,Text>"&"[ANOano]"tilde;" { outDoc->writeTilde(yytext[1]); }
<DocScan,Text>"&szlig;" { outDoc->writeSharpS(); }
<DocScan,Text>"&[aA]ring;" { outDoc->writeRing(yytext[1]); }
<DocScan,DocHtmlScan,DocLatexScan>"$("[a-z_A-Z]+")" { <DocScan,DocHtmlScan,DocLatexScan>"$("[a-z_A-Z]+")" {
QCString envvar=&yytext[2]; QCString envvar=&yytext[2];
envvar=envvar.left(envvar.length()-1); envvar=envvar.left(envvar.length()-1);
...@@ -1074,6 +1076,7 @@ VAR [vV][aA][rR] ...@@ -1074,6 +1076,7 @@ VAR [vV][aA][rR]
generateLink(*outDoc,className,linkRef,inSeeBlock,linkText); generateLink(*outDoc,className,linkRef,inSeeBlock,linkText);
BEGIN( DocScan ); BEGIN( DocScan );
} }
/*
<DocScan>"@ref"{B}+ { <DocScan>"@ref"{B}+ {
BEGIN(DocRef); BEGIN(DocRef);
} }
...@@ -1081,6 +1084,7 @@ VAR [vV][aA][rR] ...@@ -1081,6 +1084,7 @@ VAR [vV][aA][rR]
generateLink(*outDoc,className,yytext,TRUE,0); generateLink(*outDoc,className,yytext,TRUE,0);
BEGIN( DocScan ); BEGIN( DocScan );
} }
*/
<DocScan>("\\"|"@")"endlink"/[^a-z_A-Z0-9] { warn("Warning: \\endlink without \\link " <DocScan>("\\"|"@")"endlink"/[^a-z_A-Z0-9] { warn("Warning: \\endlink without \\link "
"in documentation of %s\n", refName.data()); "in documentation of %s\n", refName.data());
} }
...@@ -1154,7 +1158,6 @@ VAR [vV][aA][rR] ...@@ -1154,7 +1158,6 @@ VAR [vV][aA][rR]
if (inBlock()) endBlock(); if (inBlock()) endBlock();
inBugBlock=TRUE; inBugBlock=TRUE;
outDoc->startDescList(); outDoc->startDescList();
//outDoc->writeBoldString("Bugs and limitations: ");
outDoc->startBold(); outDoc->startBold();
scanString(theTranslator->trBugsAndLimitations()+": "); scanString(theTranslator->trBugsAndLimitations()+": ");
outDoc->endBold(); outDoc->endBold();
...@@ -1298,23 +1301,28 @@ VAR [vV][aA][rR] ...@@ -1298,23 +1301,28 @@ VAR [vV][aA][rR]
} }
BEGIN(DocParam); BEGIN(DocParam);
} }
<DocScan>("\\"|"@")"exception"{BN}+ { <DocScan>("\\"|"@")("exception"|"throw")s?{BN}+ {
endArgumentList(); endArgumentList();
if (!inExceptionBlock) if (!inExceptionBlock)
{ {
if (inBlock()) endBlock(); if (inBlock()) endBlock();
inExceptionBlock=TRUE; inExceptionBlock=TRUE;
outDoc->startDescList(); outDoc->startDescList();
//outDoc->writeBoldString("Exceptions: ");
outDoc->startBold(); outDoc->startBold();
scanString(theTranslator->trExceptions()+": "); scanString(theTranslator->trExceptions()+": ");
outDoc->endBold(); outDoc->endBold();
outDoc->endDescTitle(); outDoc->endDescTitle();
outDoc->writeDescItem();
outDoc->startDescTable();
}
else
{
outDoc->endDescTableData();
} }
BEGIN(DocException); BEGIN(DocException);
} }
<DocScan>"\\capt".* <DocScan>"\\capt".*
<DocParam>([a-z_A-Z0-9:]+)|("\"".*"\"") { <DocParam>([a-z_A-Z0-9:\.\-]+)|("\"".*"\"") {
outDoc->startDescTableTitle(); outDoc->startDescTableTitle();
outDoc->startEmphasis(); outDoc->startEmphasis();
outDoc->docify(yytext); outDoc->docify(yytext);
...@@ -1324,11 +1332,12 @@ VAR [vV][aA][rR] ...@@ -1324,11 +1332,12 @@ VAR [vV][aA][rR]
BEGIN(DocScan); BEGIN(DocScan);
} }
<DocException>{SCOPENAME} { <DocException>{SCOPENAME} {
outDoc->writeDescItem(); outDoc->startDescTableTitle();
outDoc->startEmphasis(); outDoc->startEmphasis();
outDoc->docify(yytext); outDoc->docify(yytext);
outDoc->endEmphasis(); outDoc->endEmphasis();
outDoc->docify(" - "); outDoc->endDescTableTitle();
outDoc->startDescTableData();
BEGIN(DocScan); BEGIN(DocScan);
} }
<DocScan>"\\section "{ID}"\n" { <DocScan>"\\section "{ID}"\n" {
...@@ -1352,13 +1361,13 @@ VAR [vV][aA][rR] ...@@ -1352,13 +1361,13 @@ VAR [vV][aA][rR]
outDoc->writeAnchor(sec->label); outDoc->writeAnchor(sec->label);
} }
} }
<DocScan>"\\ref" { <DocScan>("\\"|"@")"ref" {
BEGIN(DocRefName); BEGIN(DocRefName);
} }
<DocScan>"\\refitem" { <DocScan>"\\refitem" {
BEGIN(DocRefItem); BEGIN(DocRefItem);
} }
<DocRefName>{ID} { <DocRefName>{SCOPENAME} {
QCString ref=yytext; QCString ref=yytext;
SectionInfo *sec; SectionInfo *sec;
if ((sec=sectionDict[ref])) if ((sec=sectionDict[ref]))
...@@ -1378,14 +1387,14 @@ VAR [vV][aA][rR] ...@@ -1378,14 +1387,14 @@ VAR [vV][aA][rR]
outDoc->writeSectionRef(sec->fileName,sec->label,text); outDoc->writeSectionRef(sec->fileName,sec->label,text);
} }
} }
else else if (!generateLink(*outDoc,className,yytext,TRUE,0))
{ {
warn("Warning: reference to unknown section %s!\n",yytext); warn("Warning: reference to unknown section %s!\n",yytext);
outDoc->writeBoldString("unknown reference!"); outDoc->writeBoldString(" unknown reference!");
} }
BEGIN(DocScan); BEGIN(DocScan);
} }
<DocRefName>{ID}/{B}+"\"" { <DocRefName>{SCOPENAME}/{B}+"\"" {
sectionRef=yytext; sectionRef=yytext;
BEGIN(DocRefArgStart); BEGIN(DocRefArgStart);
} }
...@@ -1407,7 +1416,7 @@ VAR [vV][aA][rR] ...@@ -1407,7 +1416,7 @@ VAR [vV][aA][rR]
outDoc->writeSectionRef(sec->fileName,sec->label,text); outDoc->writeSectionRef(sec->fileName,sec->label,text);
} }
} }
else else if (!generateLink(*outDoc,className,yytext,TRUE,text))
{ {
warn("Warning: reference to unknown section %s!\n",sectionRef.data()); warn("Warning: reference to unknown section %s!\n",sectionRef.data());
outDoc->writeBoldString("unknown reference!"); outDoc->writeBoldString("unknown reference!");
...@@ -2053,7 +2062,7 @@ VAR [vV][aA][rR] ...@@ -2053,7 +2062,7 @@ VAR [vV][aA][rR]
<UsingDirective>{SCOPENAME} { current->name=yytext; <UsingDirective>{SCOPENAME} { current->name=yytext;
current->fileName = yyFileName; current->fileName = yyFileName;
current->section=Entry::USINGDIR_SEC; current->section=Entry::USINGDIR_SEC;
printf("Found using directive %s\n",yytext); //printf("Found using directive %s\n",yytext);
current_root->addSubEntry(current); current_root->addSubEntry(current);
current = new Entry ; current = new Entry ;
current->protection = protection ; current->protection = protection ;
...@@ -2413,6 +2422,7 @@ VAR [vV][aA][rR] ...@@ -2413,6 +2422,7 @@ VAR [vV][aA][rR]
} }
else else
{ {
current->endBodyLine = yyLineNr;
QCString &cn = current->name; QCString &cn = current->name;
//QCString rn = stripAnnonymousScope(current_root->name); //QCString rn = stripAnnonymousScope(current_root->name);
QCString rn = current_root->name.copy(); QCString rn = current_root->name.copy();
...@@ -2782,12 +2792,12 @@ VAR [vV][aA][rR] ...@@ -2782,12 +2792,12 @@ VAR [vV][aA][rR]
} }
<FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; } <FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; }
<FuncQual>{BN}*"throw"{BN}*"(" { <FuncQual>{BN}*"throw"{BN}*"(" {
current->exception = " throw(" ; current->exception = " throw (" ;
lineCount() ; lineCount() ;
BEGIN( ExcpRound ) ; BEGIN( ExcpRound ) ;
} }
<FuncQual>{BN}*"raises"{BN}*"(" { <FuncQual>{BN}*"raises"{BN}*"(" {
current->exception = " raises(" ; current->exception = " raises (" ;
lineCount() ; lineCount() ;
BEGIN( ExcpRound ) ; BEGIN( ExcpRound ) ;
} }
...@@ -2843,7 +2853,7 @@ VAR [vV][aA][rR] ...@@ -2843,7 +2853,7 @@ VAR [vV][aA][rR]
tempName=current->name; tempName=current->name;
else else
tempName=current->name.left(tempArg); tempName=current->name.left(tempArg);
if (current->type.isNull() && tempName.find("operator")==-1 && if (current->type.isEmpty() && tempName.find("operator")==-1 &&
(tempName.find('*')!=-1 || tempName.find('&')!=-1)) (tempName.find('*')!=-1 || tempName.find('&')!=-1))
{ {
//printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n", //printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n",
...@@ -2861,7 +2871,7 @@ VAR [vV][aA][rR] ...@@ -2861,7 +2871,7 @@ VAR [vV][aA][rR]
{ {
//printf("Scanner.l: prototype? type=`%s' name=`%s' args=`%s'\n",current->type.data(),current->name.data(),current->args.data()); //printf("Scanner.l: prototype? type=`%s' name=`%s' args=`%s'\n",current->type.data(),current->name.data(),current->args.data());
QRegExp re("([^)]*)"); QRegExp re("([^)]*)");
if (!current->type.isNull() && if (!current->type.isEmpty() &&
(current->type.find(re,0)!=-1 || current->type.left(8)=="typedef ")) (current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
{ {
//printf("Scanner.l: found function variable!\n"); //printf("Scanner.l: found function variable!\n");
...@@ -2920,8 +2930,11 @@ VAR [vV][aA][rR] ...@@ -2920,8 +2930,11 @@ VAR [vV][aA][rR]
if( bracketCount ) if( bracketCount )
--bracketCount ; --bracketCount ;
else else
{
previous->endBodyLine=yyLineNr;
BEGIN( lastCurlyContext ) ; BEGIN( lastCurlyContext ) ;
} }
}
<SkipCurly>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" { <SkipCurly>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" {
if ( bracketCount ) if ( bracketCount )
{ {
...@@ -2930,6 +2943,7 @@ VAR [vV][aA][rR] ...@@ -2930,6 +2943,7 @@ VAR [vV][aA][rR]
} }
else else
{ {
current->endBodyLine=yyLineNr;
lineCount(); lineCount();
tempEntry = current; // temporarily switch to the previous entry tempEntry = current; // temporarily switch to the previous entry
current = previous; current = previous;
...@@ -3846,6 +3860,7 @@ VAR [vV][aA][rR] ...@@ -3846,6 +3860,7 @@ VAR [vV][aA][rR]
newDocState(); newDocState();
} }
<Doc>[a-z_A-Z0-9]+ { current->doc += yytext; } <Doc>[a-z_A-Z0-9]+ { current->doc += yytext; }
<Doc,AfterDoc,LineDoc,ClassDoc>"\\\\" { current->doc += yytext; }
<Doc>. { current->doc += *yytext; } <Doc>. { current->doc += *yytext; }
<DefLineDoc,LineDoc>. { current->brief += *yytext; } <DefLineDoc,LineDoc>. { current->brief += *yytext; }
<Doc>\n { yyLineNr++; current->doc += *yytext; } <Doc>\n { yyLineNr++; current->doc += *yytext; }
......
...@@ -451,7 +451,7 @@ class TranslatorCzech : public Translator ...@@ -451,7 +451,7 @@ class TranslatorCzech : public Translator
switch(compType) switch(compType)
{ {
case ClassDef::Class: result+="tuto tridu"; break; case ClassDef::Class: result+="tuto tridu"; break;
case ClassDef::Struct: result+="tuto struktury"; break; case ClassDef::Struct: result+="tuto strukturu"; break;
case ClassDef::Union: result+="tuto unii"; break; case ClassDef::Union: result+="tuto unii"; break;
case ClassDef::Interface: result+="toto rozhrani"; break; case ClassDef::Interface: result+="toto rozhrani"; break;
} }
...@@ -483,7 +483,24 @@ class TranslatorCzech : public Translator ...@@ -483,7 +483,24 @@ class TranslatorCzech : public Translator
* documentation. It should be an abbreviation of the word page. * documentation. It should be an abbreviation of the word page.
*/ */
QCString trPageAbbreviation() QCString trPageAbbreviation()
{ return "p."; } { return "str."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Zdrojove soubory";
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Definice v souboru @1 na radce @0";
}
virtual QCString trDefinedInSourceFile()
{
return "Definice v souboru @0.";
}
}; };
#endif // TRANSLATOR_CZ_H #endif // TRANSLATOR_CZ_H
......
...@@ -106,11 +106,11 @@ class TranslatorGerman : public Translator ...@@ -106,11 +106,11 @@ class TranslatorGerman : public Translator
QCString trThisIsTheListOfAllMembers() QCString trThisIsTheListOfAllMembers()
// this is the first part of a sentence that is followed by a class name // this is the first part of a sentence that is followed by a class name
{ return "Vollst&auml;ndige Aufstellung aller Elemente f&uuml;r"; } { return "Vollst&auml;ndige Aufstellung aller Elemente f&uuml;r "; }
QCString trIncludingInheritedMembers() QCString trIncludingInheritedMembers()
// this is the remainder of the sentence after the class name // this is the remainder of the sentence after the class name
{ return "einschlie&suml;lich aller geerbten Elemente."; } { return " einschlie&szlig;lich aller geerbten Elemente."; }
QCString trGeneratedAutomatically(const char *s) QCString trGeneratedAutomatically(const char *s)
// this is put at the author sections at the bottom of man pages. // this is put at the author sections at the bottom of man pages.
......
/******************************************************************************
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* All output generated with Doxygen is not covered by this license.
*
*/
/*
==================================================================================
Suomenkielinen käännös:
Olli Korhonen <olli.korhonen@ccc.fi>
==================================================================================
1999/10/19
* Alustava käännös valmis.
* Huom: Kaikille termeille on keksitty käännösvastine, mikä ei ehkä ole
kaikissa tapauksissa hyvä ratkaisu, ja parempikin termi voi
olla vakiintuneessa käytössä.
* Tehtävää:
- Termien kokoaminen listaksi ja suomennosten järkevyyden tarkastelu. (lista on jo melko kattava)
Author = Tekijä
Class = Luokka
Compound = Kooste ?
Data = Data
Documentation = Dokumentaatio
Defines = Määrittelyt ?
Description = Selite
Detailed = Yksityiskohtainen
diagram = kaavio
Enum = Enumeraatio ?
Exceptions = Poikkeukset
File = Tiedosto
Friends = Ystävät ?
Functions = Funktiot
Hierarchical = Hierarkinen
Index = Indeksi
Inherits = Perii
Member = Jäsen
Module = Moduli
Namespace = Nimiavaruus ?
Parameters = Parametrit
Private = Yksityinen
Protected = Suojattu
Prototypes = Prototyypit
Public = Julkinen
Reference Manual= Käsikirja
Reimplemented = Uudelleen toteutettu
Related = Liittyvä
Signals = Signaali
Slots = ?
Static = Staattinen
Struct = ?
Typedef = Tyyppimäärittely
Union = ?
Variables = Muuttujat
- Taivutusmuotojen virheettömyyden tarkastelu prepositioiden korvauskohdissa.
- Sanasta sanaan käännöskohtien mielekkyyden tarkastelu valmiista dokumentista.
- umlaut vastineiden käyttö scandien kohdalla.
positiiviset kommentit otetaan ilolla vastaan.
===================================================================================
*/
#ifndef TRANSLATOR_SF_H
#define TRANSLATOR_SF_H
#include "translator.h"
class TranslatorFinnish : public Translator
{
public:
QCString latexBabelPackage()
// returns the name of the package that is included by LaTeX
{ return "finnish"; }
QCString trRelatedFunctions()
// used in the compound documentation before a list of related functions.
{ return "Liittyvät Funktiot"; } // "Related Functions";
QCString trRelatedSubscript()
// subscript for the related functions.
{ return "(Huomaa, että nämä eivät ole jäsenfunktioita.)"; } // "(Note that these are not member functions.)"
QCString trDetailedDescription()
// header that is put before the detailed description of files, classes and namespaces.
{ return "Yksityiskohtainen Selite"; } // "Detailed Description"
QCString trMemberTypedefDocumentation()
// header that is put before the list of typedefs.
{ return "Jäsen Tyyppimäärittelyiden Dokumentaatio"; } // "Member Typedef Documentation"
QCString trMemberEnumerationDocumentation()
// header that is put before the list of enumerations.
{ return "Jäsen Enumeraatioiden Dokumentaatio"; } // "Member Enumeration Documentation"
QCString trEnumerationValueDocumentation()
{ return "Enumeraatioarvojen Dokumentaatio"; }
QCString trMemberFunctionDocumentation()
// header that is put before the list of member functions.
{ return "Jäsen Funktioiden Dokumentaatio"; } // "Member Function Documentation"
QCString trMemberDataDocumentation()
// header that is put before the list of member attributes.
{ return "Jäsen Datan Dokumentaatio"; } // "Member Data Documentation"
QCString trGeneratedFrom(const char *s,bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString result=(QCString)"Tämän "+s+ // "The documentation for this"+s+
" dokumentaatio on generoitu ";// " was generated from the following file";
if (single)
result+="seuraavasta tiedostosta:";
else
result+="seuraavista tiedostoista:";
return result;
}
QCString trMore()
// this is the text of a link put after brief descriptions.
{ return "Lisää..."; } // "More..."
QCString trListOfAllMembers()
// put in the class documentation
{ return "Lista kaikista jäsenistä."; } // "List of all members."
QCString trMemberList()
// used as the title of the "list of all members" page of a class
{ return "Jäsen Lista"; } // "Member List"
QCString trThisIsTheListOfAllMembers()
// this is the first part of a sentence that is followed by a class name
{ return "Tämä on lista kaikista jäsenistä"; } // "This is the complete list of members for "
QCString trIncludingInheritedMembers()
// this is the remainder of the sentence after the class name
{ return ", sisältää kaikki perityt jäsenet."; } // ", including all inherited members."
QCString trGeneratedAutomatically(const char *s)
// this is put at the author sections at the bottom of man pages.
// parameter s is name of the project name.
{ QCString result="Automaattisesti generoitu Doxygen:lla "; // "Generated automatically by Doxygen"
//if (s) result+=(QCString)" voor "+s;
// tässä on ongelma, kuinka taivuttaa parametria, esim. "Jcad"+"in"; "IFC2VRML konversio"+"n"
// mutta ratkaistaan ongelma kätevästi kaksoispisteellä -> "Jcad:n" / "IFC2VRML konversio:n"
// lopputulos on vähemmän kökkö ja täysin luettava, mutta ei kuitenkaan täydellinen.
if (s) result+=(QCString)s+":n ";
result+="lähdekoodista."; // " from the source code."
return result;
}
QCString trEnumName()
// put after an enum name in the list of all members
{ return "enumeraation nimi"; } // "enum name"
QCString trEnumValue()
// put after an enum value in the list of all members
{ return "enumeraation arvo"; } // "enum value"
QCString trDefinedIn()
// put after an undocumented member in the list of all members
{ return "määritelty"; } // "defined in"
QCString trVerbatimText(const char *f)
// put as in introduction in the verbatim header file of a class.
// parameter f is the name of the include file.
{ return (QCString)"Tämä on lyhennetty esitys "+f+" include tiedostosta."; } // "This is the verbatim text of the "+f+" include file."
// quick reference sections
QCString trModules()
// This is put above each page as a link to the list of all groups of
// compounds or files (see the \group command).
{ return "Modulit"; } // "Modules"
QCString trClassHierarchy()
// This is put above each page as a link to the class hierarchy
{ return "Luokka Hierarkia"; } // "Class Hierarchy"
QCString trCompoundList()
// This is put above each page as a link to the list of annotated classes
{ return "Kooste Lista"; } // "Compound List"
QCString trFileList()
// This is put above each page as a link to the list of documented files
{ return "Tiedosto Lista"; } // "File List"
QCString trHeaderFiles()
// This is put above each page as a link to the list of all verbatim headers
{ return "Header Tiedostot"; } // "Header Files"
QCString trCompoundMembers()
// This is put above each page as a link to all members of compounds.
{ return "Koosteen Jäsenet"; } // "Compound Members"
QCString trFileMembers()
// This is put above each page as a link to all members of files.
{ return "Tiedosto Jäsenet"; } // "File Members"
QCString trRelatedPages()
// This is put above each page as a link to all related pages.
{ return "Liittyvät Sivut"; } // "Related Pages"
QCString trExamples()
// This is put above each page as a link to all examples.
{ return "Esimerkit"; } // "Examples"
QCString trSearch()
// This is put above each page as a link to the search engine.
{ return "Etsi"; } // "Search"
QCString trClassHierarchyDescription()
// This is an introduction to the class hierarchy.
{ return "Tämä periytymislista on päätasoltaan aakkostettu " // "This inheritance list is sorted roughly, "
"mutta alijäsenet on aakkostettu itsenäisesti:"; // "but not completely, alphabetically:";
}
QCString trFileListDescription(bool extractAll)
// This is an introduction to the list with all files.
{
QCString result="Täällä on lista kaikista ";
if (!extractAll) result+="dokumentoiduista "; // "documented "
result+="tiedostoista lyhyen selitteen kera:"; // "files with brief descriptions:"
return result;
}
QCString trCompoundListDescription()
// This is an introduction to the annotated compound list
{ return "Täällä on luokat, struktuurit ja " // "Here are the classes, structs and "
"unionit lyhyen selitteen kera:"; // "unions with brief descriptions:"
}
QCString trCompoundMembersDescription(bool extractAll)
// This is an introduction to the page with all class members
{
QCString result="Täällä on lista kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista "; // "documented "
result+="luokan jäsenistä linkitettynä "; // "class members with links to "
if (extractAll)
result+="jokaisen jäsenen luokkadokumentaatioon:"; // "the class documentation for each member:"
else
result+="luokkaan johon ne kuuluvat:"; // "the classes they belong to:"
return result;
}
QCString trFileMembersDescription(bool extractAll)
// This is an introduction to the page with all file members
{
QCString result="Täällä on lista kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista "; // "documented ";
result+="tiedosto jäsenistä linkitettynä "; // "file members with links to "
if (extractAll)
result+="kunkin jäsenen tiedosto dokumentaatioon:"; // "the file documentation for each member:"
else
result+="tiedostoon johon ne kuuluvat:"; // "the files they belong to:"
return result;
}
QCString trHeaderFilesDescription()
// This is an introduction to the page with the list of all header files
{ return "Täällä on kaikki header tiedostot jotka muodostavat API:n:"; } // "Here are the header files that make up the API:"
QCString trExamplesDescription()
// This is an introduction to the page with the list of all examples
{ return "Täällä on lista kaikista esimerkeistä:"; } // "Here is a list of all examples:"
QCString trRelatedPagesDescription()
// This is an introduction to the page with the list of related pages
{ return "Täällä on lista kaikista liittyvistä dokumentaatiosivuista:"; } // "Here is a list of all related documentation pages:"
QCString trModulesDescription()
// This is an introduction to the page with the list of class/file groups
{ return "Täällä on lista kaikista moduleista:"; } // "Here is a list of all modules:"
QCString trNoDescriptionAvailable()
// This sentences is used in the annotated class/file lists if no brief
// description is given.
{ return "Selitettä ei ole saatavilla"; } // "No description available"
// index titles (the project name is prepended for these)
QCString trDocumentation()
// This is used in HTML as the title of index.html.
{ return "Dokumentaatio"; } // "Documentation"
QCString trModuleIndex()
// This is used in LaTeX as the title of the chapter with the
// index of all groups.
{ return "Moduli Indeksi"; } // "Module Index"
QCString trHierarchicalIndex()
// This is used in LaTeX as the title of the chapter with the
// class hierarchy.
{ return "Hierarkinen Indeksi"; } // "Hierarchical Index"
QCString trCompoundIndex()
// This is used in LaTeX as the title of the chapter with the
// annotated compound index
{ return "Koosteiden Indeksi"; } // "Compound Index"
QCString trFileIndex()
// This is used in LaTeX as the title of the chapter with the
// list of all files.
{ return "Tiedosto Indeksi"; } // "File Index"
QCString trModuleDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all groups.
{ return "Moduli Dokumentaatio"; } // "Module Documentation"
QCString trClassDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all classes, structs and unions.
{ return "Luokka Dokumentaatio"; } // "Class Documentation"
QCString trFileDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all files.
{ return "Tiedosto Dokumentaatio"; } // "File Documentation"
QCString trExampleDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all examples.
{ return "Esimerkkien Dokumentaatio"; } // "Example Documentation"
QCString trPageDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all related pages.
{ return "Sivujen Dokumentaatio"; } // "Page Documentation"
QCString trReferenceManual()
// This is used in LaTeX as the title of the document
{ return "Käsikirja"; } // "Reference Manual"
QCString trDefines()
// This is used in the documentation of a file as a header before the
// list of defines
{ return "Määrittelyt"; } // "Defines"
QCString trFuncProtos()
// This is used in the documentation of a file as a header before the
// list of function prototypes
{ return "Funktioiden Prototyypit"; } // "Function Prototypes"
QCString trTypedefs()
// This is used in the documentation of a file as a header before the
// list of typedefs
{ return "Tyyppimäärittelyt"; } // "Typedefs"
QCString trEnumerations()
// This is used in the documentation of a file as a header before the
// list of enumerations
{ return "Enumeraatiot"; } // "Enumerations"
QCString trFunctions()
// This is used in the documentation of a file as a header before the
// list of (global) functions
{ return "Funktiot"; } // "Functions"
QCString trVariables()
// This is used in the documentation of a file as a header before the
// list of (global) variables
{ return "Muuttujat"; } // "Variables"
QCString trEnumerationValues()
// This is used in the documentation of a file as a header before the
// list of (global) variables
{ return "Enumeraation arvot"; } // "Enumeration values"
QCString trAuthor()
// This is used in man pages as the author section.
{ return "Tekijä"; } // "Author"
QCString trDefineDocumentation()
// This is used in the documentation of a file before the list of
// documentation blocks for defines
{ return "Määritysten dokumentointi"; } // "Define Documentation"
QCString trFunctionPrototypeDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for function prototypes
{ return "Funktio Prototyyppien Dokumentaatio"; } // "Function Prototype Documentation"
QCString trTypedefDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for typedefs
{ return "Tyyppimääritysten Dokumentaatio"; } // "Typedef Documentation"
QCString trEnumerationTypeDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for enumeration types
{ return "Enumeraatio Tyyppien Dokumentaatio"; } // "Enumeration Type Documentation"
QCString trFunctionDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for functions
{ return "Funktioiden Dokumentaatio"; } // "Function Documentation"
QCString trVariableDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for variables
{ return "Muuttujien Dokumentaatio"; } // "Variable Documentation"
QCString trCompounds()
// This is used in the documentation of a file/namespace/group before
// the list of links to documented compounds
{ return "Koosteet"; } // "Compounds"
QCString trFiles()
// This is used in the documentation of a group before the list of
// links to documented files
{ return "Tiedostot"; } // "Files"
QCString trGeneratedAt(const char *date,const char *projName)
{
// funktio on hiukan vaikea kääntää prepositioihin sidotun rakenteen vuoksi.
QCString result=(QCString)"Generoitu "+date; // "Generated at "
if (projName) result+=(QCString)" projektille "+projName; // " for "
result+=(QCString)" tekijä: "; // " by"
return result;
}
QCString trWrittenBy()
{
return "kirjoittanut"; // "written by"
}
QCString trClassDiagram(const char *clName)
// this text is put before a class diagram
{
return (QCString)clName+":n Luokkakaavio"; // "Class diagram for "
}
QCString trForInternalUseOnly()
// this text is generated when the \internal command is used.
{ return "Vain sisäiseen käyttöön."; } // "For internal use only."
QCString trReimplementedForInternalReasons()
// this text is generated when the \reimp command is used.
{ return "Uudelleen toteutettu sisäisistä syistä; API ei ole muuttunut."; } // "Reimplemented for internal reasons; the API is not affected."
QCString trWarning()
// this text is generated when the \warning command is used.
{ return "Varoitus"; } // "Warning"
// this text is generated when the \bug command is used.
QCString trBugsAndLimitations()
{ return "Virheet ja rajoitukset"; } // "Bugs and limitations"
QCString trVersion()
// this text is generated when the \version command is used.
{ return "Versio"; } // "Version"
QCString trDate()
// this text is generated when the \date command is used.
{ return "Päiväys"; } // "Date"
QCString trAuthors()
// this text is generated when the \author command is used.
{ return "Tekijä(t)"; } // "Author(s)"
QCString trReturns()
// this text is generated when the \return command is used.
{ return "Palauttaa"; } // "Returns"
QCString trSeeAlso()
// this text is generated when the \sa command is used.
{ return "Katso myös"; } // "See also"
QCString trParameters()
// this text is generated when the \param command is used.
{ return "Parametrit"; } // "Parameters"
QCString trExceptions()
// this text is generated when the \exception command is used.
{ return "Poikkeukset"; } // "Exceptions"
QCString trGeneratedBy()
// this text is used in the title page of a LaTeX document.
{ return "Generoinut"; } // "Generated by"
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990307
//////////////////////////////////////////////////////////////////////////
QCString trNamespaceList()
// used as the title of page containing all the index of all namespaces.
{ return "Nimiavaruus Lista"; } // "Namespace List"
QCString trNamespaceListDescription(bool extractAll)
// used as an introduction to the namespace list
{
QCString result="Täällä on lista kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista "; // "Here is a list of all "
result+="nimiavaruuksista lyhyen selitteen kera:"; // "namespaces with brief descriptions:"
return result;
}
QCString trFriends()
// used in the class documentation as a header before the list of all
// friends of a class
{ return "Ystävät"; } // "Friends"
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
QCString trRelatedFunctionDocumentation()
// used in the class documentation as a header before the list of all
// related classes
{ return "Ystävät ja niihin Liittyvien Funktioiden Dokumentaatio"; } // "Friends And Related Function Documentation"
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
virtual QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType)
// used as the title of the HTML page of a class/struct/union
{
QCString result=(QCString)clName+" ";
switch(compType)
{
case ClassDef::Class: result+=" Luokka"; break; // "Class"
case ClassDef::Struct: result+=" Struct"; break; // "Struct"
case ClassDef::Union: result+=" Union"; break; // "Union"
case ClassDef::Interface: result+=" Interface"; break; // "Interface"
}
result+=" Referenssi"; // " Reference"
return result;
}
virtual QCString trFileReference(const char *fileName)
// used as the title of the HTML page of a file
{
QCString result=fileName;
result+=" Tiedosto Referenssi"; // " File Reference"
return result;
}
virtual QCString trNamespaceReference(const char *namespaceName)
// used as the title of the HTML page of a namespace
{
QCString result=namespaceName;
result+=" Nimiavaruus Referenssi"; // " Namespace Reference"
return result;
}
// these are for the member sections of a class, struct or union
virtual QCString trPublicMembers()
{ return "Julkiset Jäsenet"; } // "Public Members"
virtual QCString trPublicSlots()
{ return "Julkiset Slotit"; } // "Public Slots"
virtual QCString trSignals()
{ return "Signaalit"; } // "Signals"
virtual QCString trStaticPublicMembers()
{ return "Staattiset Julkiset Jäsenet"; } // "Static Public Members"
virtual QCString trProtectedMembers()
{ return "Suojatut Jäsenet"; } // "Protected Members"
virtual QCString trProtectedSlots()
{ return "Suojatut Slotit"; } // "Protected Slots"
virtual QCString trStaticProtectedMembers()
{ return "Staattiset Suojatut Jäsenet"; } // "Static Protected Members"
virtual QCString trPrivateMembers()
{ return "Yksityiset Jäsenet"; } // "Private Members"
virtual QCString trPrivateSlots()
{ return "Yksityiset Slotit"; } // "Private Slots"
virtual QCString trStaticPrivateMembers()
{ return "Staattiset Yksityiset Jäsenet"; } // "Static Private Members"
// end of member sections
virtual QCString trWriteList(int numEntries)
{
// this function is used to produce a comma-separated list of items.
// use generateMarker(i) to indicate where item i should be put.
QCString result;
int i;
// the inherits list contain `numEntries' classes
for (i=0;i<numEntries;i++)
{
// use generateMarker to generate placeholders for the class links!
result+=generateMarker(i); // generate marker for entry i in the list
// (order is left to right)
if (i!=numEntries-1) // not the last entry, so we need a separator
{
if (i<numEntries-2) // not the fore last entry
result+=", ";
else // the fore last entry
result+=" ja "; // ", and "
}
}
return result;
}
virtual QCString trInheritsList(int numEntries)
// used in class documentation to produce a list of base classes,
// if class diagrams are disabled.
{
return "Perijät "+trWriteList(numEntries)+"."; // "Inherits "
}
virtual QCString trInheritedByList(int numEntries)
// used in class documentation to produce a list of super classes,
// if class diagrams are disabled.
{
return "Periytyy "+trWriteList(numEntries)+"."; // "Inherited by "
}
virtual QCString trReimplementedFromList(int numEntries)
// used in member documentation blocks to produce a list of
// members that are hidden by this one.
{
return "Uudelleen toteutettu "+trWriteList(numEntries)+"."; // "Reimplemented from "
}
virtual QCString trReimplementedInList(int numEntries)
{
// used in member documentation blocks to produce a list of
// all member that overwrite the implementation of this member.
return "Uudelleen toteutettu "+trWriteList(numEntries)+"."; // "Reimplemented in "
}
virtual QCString trNamespaceMembers()
// This is put above each page as a link to all members of namespaces.
{ return "Nimiavaruuden jäsenet"; } // "Namespace Members"
virtual QCString trNamespaceMemberDescription(bool extractAll)
// This is an introduction to the page with all namespace members
{
QCString result="Täällä on lista kaikista "; // "Here is a list of all "
if (!extractAll) result+="dokumentoiduista "; // "documented "
result+="nimiavaruuden jäsenistä linkitettynä "; // "namespace members with links to "
if (extractAll)
result+="nimiavaruuden dokumentaatioon johon ne kuuluvat:"; // "the namespace documentation for each member:";
else
result+="nimiavaruuteen johon ne kuuluvat:"; // "the namespaces they belong to:"
return result;
}
virtual QCString trNamespaceIndex()
// This is used in LaTeX as the title of the chapter with the
// index of all namespaces.
{ return "Nimiavaruuden Indeksi"; } // "Namespace Index"
virtual QCString trNamespaceDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all namespaces.
{ return "Nimiavaruuden Dokumentaatio"; } // "Namespace Documentation"
};
#endif
...@@ -674,6 +674,42 @@ class TranslatorFrench : public Translator ...@@ -674,6 +674,42 @@ class TranslatorFrench : public Translator
return "Liste par ordre alphabétique"; return "Liste par ordre alphabétique";
} }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues()
{ return "Valeurs retournées"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
{ return "Page Principale"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual QCString trPageAbbreviation()
{ return "p "; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Sources";
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Définition à la ligne @0 du fichier @1.";
}
virtual QCString trDefinedInSourceFile()
{
return "Définition dans le fichier @0.";
}
}; };
#endif #endif
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
* Updates: * Updates:
* 1999/09/10: corrected some small typos in the "new since 0.49-990425" section * 1999/09/10: corrected some small typos in the "new since 0.49-990425" section
* added the "new since 0.49-990728" section * added the "new since 0.49-990728" section
* 1999/19/11: entirely rewritten the translation to correct small variations due
* to feature additions and to conform to the layout of the latest
* commented translator.h for the english language
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -28,55 +31,89 @@ ...@@ -28,55 +31,89 @@
class TranslatorItalian : public Translator class TranslatorItalian : public Translator
{ {
public: public:
QCString latexBabelPackage() //--------------------------------------------------------------------
{ return "italian"; } // NOTICE:
// the following functions are now obsolete: these are no longer used and
// will disappear in future versions. You do not have to translate them!
QCString trInherits() QCString trInherits()
{ return "eredita"; } { return "Inherits"; }
QCString trAnd() QCString trAnd()
{ return "e"; } { return "and"; }
QCString trInheritedBy() QCString trInheritedBy()
//{ return "Ereditato da"; } { return "Inherited By"; }
{ return "Ereditate da"; } QCString trReference()
{ return "Reference"; }
QCString trReimplementedFrom()
{ return "Reimplemented from"; }
QCString trReimplementedIn()
{ return "Reimplemented in"; }
QCString trIncludeFile()
{ return "Include File"; }
QCString trGeneratedFrom(const char *s,bool single)
{
QCString result=(QCString)"The documentation for this"+s+
" was generated from the following file";
if (single) result+=":"; else result+="s:";
return result;
}
// end of obsolete functions
//--------------------------------------------------------------------
/*! returns the name of the package that is included by LaTeX */
QCString latexBabelPackage()
{ return "italian"; }
/*! used in the compound documentation before a list of related functions. */
QCString trRelatedFunctions() QCString trRelatedFunctions()
//{ return "Funzioni relative"; }
{ return "Funzioni collegate"; } { return "Funzioni collegate"; }
/*! subscript for the related functions. */
QCString trRelatedSubscript() QCString trRelatedSubscript()
//{ return "(Nota che questo no sono funzioni membro)"; } { return "(Si noti che queste non sono funzioni membro.)"; }
{ return "(Attenzione, queste non sono funzioni membro)"; }
/*! header that is put before the detailed description of files, classes and namespaces. */
QCString trDetailedDescription() QCString trDetailedDescription()
{ return "Descrizione dettagliata"; } { return "Descrizione Dettagliata"; }
/*! header that is put before the list of typedefs. */
QCString trMemberTypedefDocumentation() QCString trMemberTypedefDocumentation()
//{ return "Documentazione dei membri Typedef"; }
{ return "Documentazione delle ridefinizioni dei tipi (typedef)"; } { return "Documentazione delle ridefinizioni dei tipi (typedef)"; }
/*! header that is put before the list of enumerations. */
QCString trMemberEnumerationDocumentation() QCString trMemberEnumerationDocumentation()
//{ return "Documentazione dei membri enumerati"; }
{ return "Documentazione dei tipi enumerati (enum)"; } { return "Documentazione dei tipi enumerati (enum)"; }
QCString trEnumerationValueDocumentation()
{ return "Documentazione dei valori dei tipi enumerati"; } /*! header that is put before the list of member functions. */
QCString trMemberFunctionDocumentation() QCString trMemberFunctionDocumentation()
{ return "Documentazione delle funzioni membro"; } { return "Documentazione delle funzioni membro"; }
/*! header that is put before the list of member attributes. */
QCString trMemberDataDocumentation() QCString trMemberDataDocumentation()
{ return "Documentazione dei dati membro"; } { return "Documentazione dei dati membri"; }
QCString trGeneratedFrom(const char *s,bool single)
{ /*! this is the text of a link put after brief descriptions. */
QCString result=(QCString)"La documentazione di questa "+s+
" stata generata a partire";
if (single) result+=" dal seguente file:";
else result+=" dai seguenti files:";
return result;
}
QCString trMore() QCString trMore()
{ return "Continua..."; } { return "Continua..."; }
QCString trReference()
{ return "Riferimento"; } /*! put in the class documentation */
QCString trListOfAllMembers() QCString trListOfAllMembers()
{ return "Lista di tutti i membri."; } { return "Lista di tutti i membri."; }
/*! used as the title of the "list of all members" page of a class */
QCString trMemberList() QCString trMemberList()
{ return "Lista dei membri"; } { return "Lista dei membri"; }
/*! this is the first part of a sentence that is followed by a class name */
QCString trThisIsTheListOfAllMembers() QCString trThisIsTheListOfAllMembers()
{ return "Questa è la lista completa di tutti i membri di "; } { return "Questa è la lista completa di tutti i membri di "; }
/*! this is the remainder of the sentence after the class name */
QCString trIncludingInheritedMembers() QCString trIncludingInheritedMembers()
{ return ", includendo tutti i membri ereditati."; } { return ", inclusi tutti i membri ereditati."; }
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
*/
QCString trGeneratedAutomatically(const char *s) QCString trGeneratedAutomatically(const char *s)
{ {
QCString result="Generato automaticamente da Doxygen"; QCString result="Generato automaticamente da Doxygen";
...@@ -84,41 +121,77 @@ class TranslatorItalian : public Translator ...@@ -84,41 +121,77 @@ class TranslatorItalian : public Translator
result+=" a partire dal codice sorgente."; result+=" a partire dal codice sorgente.";
return result; return result;
} }
/*! put after an enum name in the list of all members */
QCString trEnumName() QCString trEnumName()
{ return "nome di tipo enumerato"; } { return "nome di tipo enumerato"; }
/*! put after an enum value in the list of all members */
QCString trEnumValue() QCString trEnumValue()
{ return "valore di tipo enumerato"; } { return "valore di tipo enumerato"; }
/*! put after an undocumented member in the list of all members */
QCString trDefinedIn() QCString trDefinedIn()
{ return "definito in"; } { return "definito in"; }
QCString trIncludeFile()
{ return "Include il file"; } /*! put as in introduction in the verbatim header file of a class.
* parameter f is the name of the include file.
*/
QCString trVerbatimText(const char *f) QCString trVerbatimText(const char *f)
{ return (QCString)"Questo il contenuto integrale dell file "+f+"."; } { return (QCString)"Questo è il contenuto integrale del file include "+f+"."; }
// quick reference sections
/*! This is put above each page as a link to the list of all groups of
* compounds or files (see the \group command).
*/
QCString trModules() QCString trModules()
{ return "Moduli"; } { return "Moduli"; }
/*! This is put above each page as a link to the class hierarchy */
QCString trClassHierarchy() QCString trClassHierarchy()
{ return "Gerarchia delle classi"; } { return "Gerarchia delle classi"; }
/*! This is put above each page as a link to the list of annotated classes */
QCString trCompoundList() QCString trCompoundList()
{ return "Lista dei composti"; } { return "Lista dei composti"; }
/*! This is put above each page as a link to the list of documented files */
QCString trFileList() QCString trFileList()
{ return "Lista dei files"; } { return "Lista dei files"; }
/*! This is put above each page as a link to the list of all verbatim headers */
QCString trHeaderFiles() QCString trHeaderFiles()
{ return "Lista dei file header"; } { return "Lista dei file header"; }
/*! This is put above each page as a link to all members of compounds. */
QCString trCompoundMembers() QCString trCompoundMembers()
{ return "Membri dei composti"; } { return "Membri dei composti"; }
/*! This is put above each page as a link to all members of files. */
QCString trFileMembers() QCString trFileMembers()
{ return "Membri dei files"; } { return "Membri dei files"; }
/*! This is put above each page as a link to all related pages. */
QCString trRelatedPages() QCString trRelatedPages()
{ return "Pagine collegate"; } { return "Pagine collegate"; }
/*! This is put above each page as a link to all examples. */
QCString trExamples() QCString trExamples()
{ return "Esempi"; } { return "Esempi"; }
/*! This is put above each page as a link to the search engine. */
QCString trSearch() QCString trSearch()
{ return "Cerca"; } { return "Cerca"; }
/*! This is an introduction to the class hierarchy. */
QCString trClassHierarchyDescription() QCString trClassHierarchyDescription()
{ {
return "Questa lista di ereditarietà è ordinata " return "Questa lista di ereditarietà è ordinata "
"approssimativamente, ma non completamente, in ordine alfabetico:"; "approssimativamente, ma non completamente, in ordine alfabetico:";
} }
/*! This is an introduction to the list with all files. */
QCString trFileListDescription(bool extractAll) QCString trFileListDescription(bool extractAll)
{ {
QCString result="Questa è una lista "; QCString result="Questa è una lista ";
...@@ -127,10 +200,14 @@ class TranslatorItalian : public Translator ...@@ -127,10 +200,14 @@ class TranslatorItalian : public Translator
result+="con una loro breve descrizione:"; result+="con una loro breve descrizione:";
return result; return result;
} }
/*! This is an introduction to the annotated compound list. */
QCString trCompoundListDescription() QCString trCompoundListDescription()
{ return "Queste sono le classi, structs e " { return "Queste sono le classi, structs, "
"unions con una loro breve descrizione:"; "unions e interfacce con una loro breve descrizione:";
} }
/*! This is an introduction to the page with all class members. */
QCString trCompoundMembersDescription(bool extractAll) QCString trCompoundMembersDescription(bool extractAll)
{ {
QCString result="Questa è una lista "; QCString result="Questa è una lista ";
...@@ -141,6 +218,8 @@ class TranslatorItalian : public Translator ...@@ -141,6 +218,8 @@ class TranslatorItalian : public Translator
else result+="alla documentazione delle classi a cui appartengono:"; else result+="alla documentazione delle classi a cui appartengono:";
return result; return result;
} }
/*! This is an introduction to the page with all file members. */
QCString trFileMembersDescription(bool extractAll) QCString trFileMembersDescription(bool extractAll)
{ {
QCString result="Questa è una lista "; QCString result="Questa è una lista ";
...@@ -151,76 +230,197 @@ class TranslatorItalian : public Translator ...@@ -151,76 +230,197 @@ class TranslatorItalian : public Translator
else result+="alla documentazione dei files a cui appartengono:"; else result+="alla documentazione dei files a cui appartengono:";
return result; return result;
} }
/*! This is an introduction to the page with the list of all header files. */
QCString trHeaderFilesDescription() QCString trHeaderFilesDescription()
{ return "Questi sono gli header files che compongono l'API:"; } { return "Questi sono gli header files che compongono l'API:"; }
/*! This is an introduction to the page with the list of all examples */
QCString trExamplesDescription() QCString trExamplesDescription()
{ return "Questa è la lista di tutti gli esempi:"; } { return "Questa è la lista di tutti gli esempi:"; }
/*! This is an introduction to the page with the list of related pages */
QCString trRelatedPagesDescription() QCString trRelatedPagesDescription()
{ return "Questa è la lista di tutte le pagine di documentazione collegate fra loro:"; } { return "Questa è la lista di tutte le pagine di documentazione collegate fra loro:"; }
/*! This is an introduction to the page with the list of class/file groups */
QCString trModulesDescription() QCString trModulesDescription()
{ return "Questa è la lista di tutti i moduli:"; } { return "Questa è la lista di tutti i moduli:"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
{ return "Descrizione non disponibile"; } { return "Descrizione non disponibile"; }
// index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
QCString trDocumentation() QCString trDocumentation()
{ return "Documentazione"; } { return "Documentazione"; }
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
QCString trModuleIndex() QCString trModuleIndex()
{ return "Indice dei moduli"; } { return "Indice dei moduli"; }
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
QCString trHierarchicalIndex() QCString trHierarchicalIndex()
{ return "Indice della gerarchia"; } { return "Indice della gerarchia"; }
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
*/
QCString trCompoundIndex() QCString trCompoundIndex()
{ return "Indice dei composti"; } { return "Indice dei composti"; }
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
QCString trFileIndex() QCString trFileIndex()
{ return "Indice dei files"; } { return "Indice dei files"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
QCString trModuleDocumentation() QCString trModuleDocumentation()
{ return "Documentazione dei moduli"; } { return "Documentazione dei moduli"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions.
*/
QCString trClassDocumentation() QCString trClassDocumentation()
{ return "Documentazione delle classi"; } { return "Documentazione delle classi"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all files.
*/
QCString trFileDocumentation() QCString trFileDocumentation()
{ return "Documentazione dei files"; } { return "Documentazione dei files"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
QCString trExampleDocumentation() QCString trExampleDocumentation()
{ return "Documentazione degli esempi"; } { return "Documentazione degli esempi"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
QCString trPageDocumentation() QCString trPageDocumentation()
{ return "Documentazione delle pagine"; } { return "Documentazione delle pagine collegate fra loro"; }
/*! This is used in LaTeX as the title of the document */
QCString trReferenceManual() QCString trReferenceManual()
{ return "Manuale di riferimento"; } { return "Manuale di riferimento"; }
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
QCString trDefines() QCString trDefines()
{ return "Definizioni"; } { return "Definizioni"; }
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
*/
QCString trFuncProtos() QCString trFuncProtos()
{ return "Prototipi delle funzioni"; } { return "Prototipi delle funzioni"; }
/*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
QCString trTypedefs() QCString trTypedefs()
{ return "Typedefs"; } { return "Ridefinizioni di tipo (typedefs)"; }
/*! This is used in the documentation of a file as a header before the
* list of enumerations
*/
QCString trEnumerations() QCString trEnumerations()
{ return "Tipi enumerati"; } { return "Tipi enumerati (enum)"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) functions
*/
QCString trFunctions() QCString trFunctions()
{ return "Funzioni"; } { return "Funzioni"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString trVariables() QCString trVariables()
{ return "Variabili"; } { return "Variabili"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString trEnumerationValues() QCString trEnumerationValues()
{ return "Valori dei tipi enumerati"; } { return "Valori dei tipi enumerati"; }
QCString trReimplementedFrom()
{ return "Nuova implementazione di"; } /*! This is used in man pages as the author section. */
QCString trReimplementedIn()
{ return "Reimplementato in"; }
QCString trAuthor() QCString trAuthor()
{ return "Autore"; } { return "Autore"; }
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
QCString trDefineDocumentation() QCString trDefineDocumentation()
{ return "Documentazione delle definizioni"; } { return "Documentazione delle definizioni"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
*/
QCString trFunctionPrototypeDocumentation() QCString trFunctionPrototypeDocumentation()
{ return "Documentazione dei prototipi delle funzioni"; } { return "Documentazione dei prototipi delle funzioni"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
QCString trTypedefDocumentation() QCString trTypedefDocumentation()
{ return "Documentazione dei typedefs"; } { return "Documentazione delle ridefinizioni di tipo (typedefs)"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
QCString trEnumerationTypeDocumentation() QCString trEnumerationTypeDocumentation()
{ return "Documentazione dei tipi enumerati"; } { return "Documentazione dei tipi enumerati"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
QCString trEnumerationValueDocumentation()
{ return "Documentazione dei valori dei tipi enumerati"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
QCString trFunctionDocumentation() QCString trFunctionDocumentation()
{ return "Documentazione delle funzioni"; } { return "Documentazione delle funzioni"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
QCString trVariableDocumentation() QCString trVariableDocumentation()
{ return "Documentazione delle variabili"; } { return "Documentazione delle variabili"; }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
*/
QCString trCompounds() QCString trCompounds()
{ return "Composti"; } { return "Composti"; }
/*! This is used in the documentation of a group before the list of
* links to documented files
*/
QCString trFiles() QCString trFiles()
{ return "Files"; } { return "Files"; }
/*! This is used in the standard footer of each page and indicates when
* the page was generated
*/
QCString trGeneratedAt(const char *date,const char *projName) QCString trGeneratedAt(const char *date,const char *projName)
{ {
QCString result=(QCString)"Generato il "+date; QCString result=(QCString)"Generato il "+date;
...@@ -228,38 +428,64 @@ class TranslatorItalian : public Translator ...@@ -228,38 +428,64 @@ class TranslatorItalian : public Translator
result+=(QCString)" da"; result+=(QCString)" da";
return result; return result;
} }
/*! This is part of the sentence used in the standard footer of each page.
*/
QCString trWrittenBy() QCString trWrittenBy()
{ {
return "scritto da"; return "scritto da";
} }
/*! this text is put before a class diagram */
QCString trClassDiagram(const char *clName) QCString trClassDiagram(const char *clName)
{ {
return (QCString)"Diagramma delle classi per "+clName; return (QCString)"Diagramma delle classi per "+clName;
} }
/*! this text is generated when the \internal command is used. */
QCString trForInternalUseOnly() QCString trForInternalUseOnly()
{ return "Solo per uso interno."; } { return "Solo per uso interno."; }
/*! this text is generated when the \reimp command is used. */
QCString trReimplementedForInternalReasons() QCString trReimplementedForInternalReasons()
{ return "Reimplementato per motivi interni; " { return "Reimplementato per motivi interni; l'API non è stata modificata.";}
"l'API non stata modificata.";
} /*! this text is generated when the \warning command is used. */
QCString trWarning() QCString trWarning()
{ return "Attenzione"; } { return "Attenzione"; }
/*! this text is generated when the \bug command is used. */
QCString trBugsAndLimitations() QCString trBugsAndLimitations()
{ return "Bugs e limitazioni"; } { return "Bugs e limitazioni"; }
/*! this text is generated when the \version command is used. */
QCString trVersion() QCString trVersion()
{ return "Versione"; } { return "Versione"; }
/*! this text is generated when the \date command is used. */
QCString trDate() QCString trDate()
{ return "Data"; } { return "Data"; }
/*! this text is generated when the \author command is used. */
QCString trAuthors() QCString trAuthors()
{ return "Autore(i)"; } { return "Autore(i)"; }
/*! this text is generated when the \return command is used. */
QCString trReturns() QCString trReturns()
{ return "Restituisce"; } { return "Restituisce"; }
/*! this text is generated when the \sa command is used. */
QCString trSeeAlso() QCString trSeeAlso()
{ return "Vedi anche"; } { return "Vedi anche"; }
/*! this text is generated when the \param command is used. */
QCString trParameters() QCString trParameters()
{ return "Parametri"; } { return "Parametri"; }
/*! this text is generated when the \exception command is used. */
QCString trExceptions() QCString trExceptions()
{ return "Eccezioni"; } { return "Eccezioni"; }
/*! this text is used in the title page of a LaTeX document. */
QCString trGeneratedBy() QCString trGeneratedBy()
{ return "Generato da"; } { return "Generato da"; }
...@@ -267,10 +493,11 @@ class TranslatorItalian : public Translator ...@@ -267,10 +493,11 @@ class TranslatorItalian : public Translator
// new since 0.49-990307 // new since 0.49-990307
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
QCString trNamespaces() /*! used as the title of page containing all the index of all namespaces. */
{ return "Namespaces"; }
QCString trNamespaceList() QCString trNamespaceList()
{ return "Lista dei namespaces"; } { return "Lista dei namespaces"; }
/*! used as an introduction to the namespace list */
QCString trNamespaceListDescription(bool extractAll) QCString trNamespaceListDescription(bool extractAll)
{ {
QCString result="Questa è la lista "; QCString result="Questa è la lista ";
...@@ -279,6 +506,10 @@ class TranslatorItalian : public Translator ...@@ -279,6 +506,10 @@ class TranslatorItalian : public Translator
result+="con una loro breve descrizione:"; result+="con una loro breve descrizione:";
return result; return result;
} }
/*! used in the class documentation as a header before the list of all
* friends of a class
*/
QCString trFriends() QCString trFriends()
{ return "Friends"; } { return "Friends"; }
...@@ -286,6 +517,9 @@ class TranslatorItalian : public Translator ...@@ -286,6 +517,9 @@ class TranslatorItalian : public Translator
// new since 0.49-990405 // new since 0.49-990405
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! used in the class documentation as a header before the list of all
* related classes
*/
QCString trRelatedFunctionDocumentation() QCString trRelatedFunctionDocumentation()
{ return "Documentazione dei friends e delle funzioni collegate"; } { return "Documentazione dei friends e delle funzioni collegate"; }
...@@ -293,6 +527,7 @@ class TranslatorItalian : public Translator ...@@ -293,6 +527,7 @@ class TranslatorItalian : public Translator
// new since 0.49-990425 // new since 0.49-990425
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! used as the title of the HTML page of a class/struct/union */
QCString trCompoundReference(const char *clName, QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType) ClassDef::CompoundType compType)
{ {
...@@ -306,13 +541,18 @@ class TranslatorItalian : public Translator ...@@ -306,13 +541,18 @@ class TranslatorItalian : public Translator
} }
result+=(QCString)clName; result+=(QCString)clName;
return result; return result;
} }
/*! used as the title of the HTML page of a file */
QCString trFileReference(const char *fileName) QCString trFileReference(const char *fileName)
{ {
QCString result="Riferimenti per il file "; QCString result="Riferimenti per il file ";
result+=(QCString)fileName; result+=(QCString)fileName;
return result; return result;
} }
/*! used as the title of the HTML page of a namespace */
QCString trNamespaceReference(const char *namespaceName) QCString trNamespaceReference(const char *namespaceName)
{ {
QCString result="Riferimenti per il namespace "; QCString result="Riferimenti per il namespace ";
...@@ -320,7 +560,9 @@ class TranslatorItalian : public Translator ...@@ -320,7 +560,9 @@ class TranslatorItalian : public Translator
return result; return result;
} }
// these are for the member sections of a class, struct or union /*! \mgroup Class sections
* 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()
...@@ -341,27 +583,70 @@ class TranslatorItalian : public Translator ...@@ -341,27 +583,70 @@ class TranslatorItalian : public Translator
{ return "Slots privati"; } { return "Slots 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.
* use generateMarker(i) to indicate where item i should be put.
*/
QCString trWriteList(int numEntries)
{
QCString result;
int i;
// the inherits list contain `numEntries' classes
for (i=0;i<numEntries;i++)
{
// use generateMarker to generate placeholders for the class links!
result+=generateMarker(i); // generate marker for entry i in the list
// (order is left to right)
if (i!=numEntries-1) // not the last entry, so we need a separator
{
if (i<numEntries-2) // not the fore last entry
result+=", ";
else // the fore last entry
result+=", e ";
}
}
return result;
}
/*! used in class documentation to produce a list of base classes,
* if class diagrams are disabled.
*/
QCString trInheritsList(int numEntries) QCString trInheritsList(int numEntries)
{ {
return "Eredita da "+trWriteList(numEntries)+"."; return "Eredita da "+trWriteList(numEntries)+".";
} }
/*! used in class documentation to produce a list of super classes,
* if class diagrams are disabled.
*/
QCString trInheritedByList(int numEntries) QCString trInheritedByList(int numEntries)
{ {
return "Base per "+trWriteList(numEntries)+"."; return "Base per "+trWriteList(numEntries)+".";
} }
/*! used in member documentation blocks to produce a list of
* members that are hidden by this one.
*/
QCString trReimplementedFromList(int numEntries) QCString trReimplementedFromList(int numEntries)
{ {
return "Reimplementa "+trWriteList(numEntries)+"."; return "Reimplementa "+trWriteList(numEntries)+".";
} }
/*! used in member documentation blocks to produce a list of
* all member that overwrite the implementation of this member.
*/
QCString trReimplementedInList(int numEntries) QCString trReimplementedInList(int numEntries)
{ {
return "Reimplementata in "+trWriteList(numEntries)+"."; return "Reimplementata in "+trWriteList(numEntries)+".";
} }
/*! This is put above each page as a link to all members of namespaces. */
QCString trNamespaceMembers() QCString trNamespaceMembers()
{ return "Membri dei namespaces"; } { return "Membri dei namespaces"; }
/*! This is an introduction to the page with all namespace members */
QCString trNamespaceMemberDescription(bool extractAll) QCString trNamespaceMemberDescription(bool extractAll)
{ {
QCString result="Questa è la lista "; QCString result="Questa è la lista ";
...@@ -374,11 +659,28 @@ class TranslatorItalian : public Translator ...@@ -374,11 +659,28 @@ class TranslatorItalian : public Translator
result+="ai namespaces a cui appartengono:"; result+="ai namespaces a cui appartengono:";
return result; return result;
} }
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
QCString trNamespaceIndex() QCString trNamespaceIndex()
{ return "Indice dei namespaces"; } { return "Indice dei namespaces"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
QCString trNamespaceDocumentation() QCString trNamespaceDocumentation()
{ return "Documentazione dei namespaces"; } { return "Documentazione dei namespaces"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////
/*! This is used in the documentation before the list of all
* namespaces in a file.
*/
QCString trNamespaces()
{ return "Namespaces"; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-990728 // new since 0.49-990728
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -386,7 +688,7 @@ class TranslatorItalian : public Translator ...@@ -386,7 +688,7 @@ class TranslatorItalian : public Translator
/*! This is put at the bottom of a class documentation page and is /*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page. * followed by a list of files that were used to generate the page.
*/ */
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single) bool single)
{ // here s is one of " Class", " Struct" or " Union" { // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file // single is true implies a single file
...@@ -407,11 +709,44 @@ class TranslatorItalian : public Translator ...@@ -407,11 +709,44 @@ class TranslatorItalian : public Translator
/*! This is in the (quick) index as a link to the alphabetical compound /*! This is in the (quick) index as a link to the alphabetical compound
* list. * list.
*/ */
virtual QCString trAlphabeticalList() QCString trAlphabeticalList()
{ return "Lista in ordine alfabetico";}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
QCString trReturnValues()
{ return "Valori di ritorno"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
QCString trMainPage()
{ return "Pagina Principale"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
QCString trPageAbbreviation()
{ return "pag."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
QCString trSources()
{ {
return "Lista in ordine alfabetico"; return "Sorgenti";
}
QCString trDefinedAtLineInSourceFile()
{
return "Definizione alla linea @0 del file @1.";
}
QCString trDefinedInSourceFile()
{
return "Definizione nel file @0.";
} }
}; };
#endif #endif
...@@ -141,7 +141,7 @@ int guessSection(const char *name) ...@@ -141,7 +141,7 @@ int guessSection(const char *name)
// if (n) // if (n)
// { // {
// Define *def=defineDict[n]; // Define *def=defineDict[n];
// if (def && def->nargs==0 && !def->definition.isNull()) // if (def && def->nargs==0 && !def->definition.isEmpty())
// { // {
// return def->definition; // return def->definition;
// } // }
...@@ -153,7 +153,7 @@ int guessSection(const char *name) ...@@ -153,7 +153,7 @@ int guessSection(const char *name)
QCString resolveTypedefs(const QCString &n) QCString resolveTypedefs(const QCString &n)
{ {
QCString *subst=typedefDict[n]; QCString *subst=typedefDict[n];
if (subst && !subst->isNull()) if (subst && !subst->isEmpty())
{ {
return *subst; return *subst;
} }
...@@ -863,6 +863,8 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, ...@@ -863,6 +863,8 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
{ {
QCString srcAType=trimTemplateSpecifiers(className,srcA->type); QCString srcAType=trimTemplateSpecifiers(className,srcA->type);
QCString dstAType=trimTemplateSpecifiers(className,dstA->type); QCString dstAType=trimTemplateSpecifiers(className,dstA->type);
if (srcAType.left(6)=="class ") srcAType=srcAType.right(srcAType.length()-6);
if (dstAType.left(6)=="class ") dstAType=dstAType.right(dstAType.length()-6);
if (srcAType!=dstAType) // check if the argument only differs on name if (srcAType!=dstAType) // check if the argument only differs on name
{ {
...@@ -1489,7 +1491,7 @@ bool getScopeDefs(const char *docScope,const char *scope, ...@@ -1489,7 +1491,7 @@ bool getScopeDefs(const char *docScope,const char *scope,
* instead of :: the # symbol may also be used. * instead of :: the # symbol may also be used.
*/ */
void generateRef(OutputList &ol,const char *scName, bool generateRef(OutputList &ol,const char *scName,
const char *name,bool inSeeBlock,const char *rt) const char *name,bool inSeeBlock,const char *rt)
{ {
//printf("generateRef(scName=%s,name=%s,rt=%s)\n",scName,name,rt); //printf("generateRef(scName=%s,name=%s,rt=%s)\n",scName,name,rt);
...@@ -1502,7 +1504,7 @@ void generateRef(OutputList &ol,const char *scName, ...@@ -1502,7 +1504,7 @@ void generateRef(OutputList &ol,const char *scName,
{ {
ClassDef *cd=0; ClassDef *cd=0;
NamespaceDef *nd=0; NamespaceDef *nd=0;
if (linkText.isNull()) linkText=tmpName; if (linkText.isEmpty()) linkText=tmpName;
// check if this is a class or namespace reference // check if this is a class or namespace reference
if (scName!=tmpName && getScopeDefs(scName,name,cd,nd)) if (scName!=tmpName && getScopeDefs(scName,name,cd,nd))
{ {
...@@ -1525,13 +1527,13 @@ void generateRef(OutputList &ol,const char *scName, ...@@ -1525,13 +1527,13 @@ void generateRef(OutputList &ol,const char *scName,
} }
} }
// link has been written, stop now. // link has been written, stop now.
return; return TRUE;
} }
else if (scName==tmpName || (!inSeeBlock && scopePos==-1)) // nothing to link => output plain text else if (scName==tmpName || (!inSeeBlock && scopePos==-1)) // nothing to link => output plain text
{ {
ol.docify(linkText); ol.docify(linkText);
// text has been written, stop now. // text has been written, stop now.
return; return FALSE;
} }
// continue search... // continue search...
linkText = rt; linkText = rt;
...@@ -1552,7 +1554,7 @@ void generateRef(OutputList &ol,const char *scName, ...@@ -1552,7 +1554,7 @@ void generateRef(OutputList &ol,const char *scName,
// create a default link text if none was explicitly given // create a default link text if none was explicitly given
bool explicitLink=TRUE; bool explicitLink=TRUE;
if (linkText.isNull()) if (linkText.isEmpty())
{ {
//if (!scopeUser.isEmpty()) linkText=scopeUser+"::"; //if (!scopeUser.isEmpty()) linkText=scopeUser+"::";
linkText=nameStr; linkText=nameStr;
...@@ -1612,7 +1614,7 @@ void generateRef(OutputList &ol,const char *scName, ...@@ -1612,7 +1614,7 @@ void generateRef(OutputList &ol,const char *scName,
// for functions we add the arguments if explicitly specified or else "()" // for functions we add the arguments if explicitly specified or else "()"
if (!rt && (md->isFunction() || md->isPrototype() || md->isSignal() || md->isSlot() || md->isDefine())) if (!rt && (md->isFunction() || md->isPrototype() || md->isSignal() || md->isSlot() || md->isDefine()))
{ {
if (argsStr.isNull()) if (argsStr.isEmpty())
ol.writeString("()"); ol.writeString("()");
else else
ol.docify(argsStr); ol.docify(argsStr);
...@@ -1630,7 +1632,7 @@ void generateRef(OutputList &ol,const char *scName, ...@@ -1630,7 +1632,7 @@ void generateRef(OutputList &ol,const char *scName,
writePageRef(ol,cName,aName); writePageRef(ol,cName,aName);
} }
} }
return; return TRUE;
} }
else if (inSeeBlock && !nameStr.isEmpty() && (gd=groupDict[nameStr])) else if (inSeeBlock && !nameStr.isEmpty() && (gd=groupDict[nameStr]))
{ // group link { // group link
...@@ -1642,7 +1644,7 @@ void generateRef(OutputList &ol,const char *scName, ...@@ -1642,7 +1644,7 @@ void generateRef(OutputList &ol,const char *scName,
ol.docify(gd->groupTitle()); ol.docify(gd->groupTitle());
} }
ol.endTextLink(); ol.endTextLink();
return; return TRUE;
} }
// nothing found // nothing found
...@@ -1651,9 +1653,9 @@ void generateRef(OutputList &ol,const char *scName, ...@@ -1651,9 +1653,9 @@ void generateRef(OutputList &ol,const char *scName,
else else
{ {
ol.docify(linkText); ol.docify(linkText);
if (!argsStr.isNull()) ol.docify(argsStr); if (!argsStr.isEmpty()) ol.docify(argsStr);
} }
return; return FALSE;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
...@@ -1661,8 +1663,9 @@ void generateRef(OutputList &ol,const char *scName, ...@@ -1661,8 +1663,9 @@ void generateRef(OutputList &ol,const char *scName,
// file, class or member from text `lr' within the context of class `clName'. // file, class or member from text `lr' within the context of class `clName'.
// This link has the text 'lt' (if not 0), otherwise `lr' is used as a // This link has the text 'lt' (if not 0), otherwise `lr' is used as a
// basis for the link's text. // basis for the link's text.
// returns TRUE if a link could be generated.
void generateLink(OutputList &ol,const char *clName, bool generateLink(OutputList &ol,const char *clName,
const char *lr,bool inSeeBlock,const char *lt) const char *lr,bool inSeeBlock,const char *lt)
{ {
QCString linkRef=lr; QCString linkRef=lr;
...@@ -1673,11 +1676,20 @@ void generateLink(OutputList &ol,const char *clName, ...@@ -1673,11 +1676,20 @@ void generateLink(OutputList &ol,const char *clName,
GroupDef *gd; GroupDef *gd;
bool ambig; bool ambig;
if (linkRef.length()==0) // no reference name! if (linkRef.length()==0) // no reference name!
{
ol.docify(lt); ol.docify(lt);
return FALSE;
}
else if ((pageDict[linkRef])) // link to a page else if ((pageDict[linkRef])) // link to a page
{
ol.writeObjectLink(0,linkRef,0,lt); ol.writeObjectLink(0,linkRef,0,lt);
return TRUE;
}
else if ((exampleDict[linkRef])) // link to an example else if ((exampleDict[linkRef])) // link to an example
{
ol.writeObjectLink(0,linkRef+"-example",0,lt); ol.writeObjectLink(0,linkRef+"-example",0,lt);
return TRUE;
}
else if ((gd=groupDict[linkRef])) // link to a group else if ((gd=groupDict[linkRef])) // link to a group
{ {
ol.startTextLink(gd->getOutputFileBase(),0); ol.startTextLink(gd->getOutputFileBase(),0);
...@@ -1686,13 +1698,19 @@ void generateLink(OutputList &ol,const char *clName, ...@@ -1686,13 +1698,19 @@ void generateLink(OutputList &ol,const char *clName,
else else
ol.docify(gd->groupTitle()); ol.docify(gd->groupTitle());
ol.endTextLink(); ol.endTextLink();
return TRUE;
} }
else if ((fd=findFileDef(&inputNameDict,linkRef,ambig)) else if ((fd=findFileDef(&inputNameDict,linkRef,ambig))
&& fd->isLinkable()) && fd->isLinkable())
{
// link to documented input file // link to documented input file
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,lt); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,lt);
return TRUE;
}
else // probably a class or member reference else // probably a class or member reference
generateRef(ol,clName,lr,inSeeBlock,lt); {
return generateRef(ol,clName,lr,inSeeBlock,lt);
}
} }
void generateFileRef(OutputList &ol,const char *name,const char *text) void generateFileRef(OutputList &ol,const char *name,const char *text)
...@@ -1782,7 +1800,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -1782,7 +1800,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
ambig=FALSE; ambig=FALSE;
QCString name=n; QCString name=n;
QCString path; QCString path;
if (name.isNull()) return 0; if (name.isEmpty()) return 0;
int slashPos=QMAX(name.findRev('/'),name.findRev('\\')); int slashPos=QMAX(name.findRev('/'),name.findRev('\\'));
if (slashPos!=-1) if (slashPos!=-1)
{ {
...@@ -1790,7 +1808,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -1790,7 +1808,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
name=name.right(name.length()-slashPos-1); name=name.right(name.length()-slashPos-1);
} }
//printf("findFileDef path=`%s' name=`%s'\n",path.data(),name.data()); //printf("findFileDef path=`%s' name=`%s'\n",path.data(),name.data());
if (name.isNull()) return 0; if (name.isEmpty()) return 0;
FileName *fn; FileName *fn;
if ((fn=(*fnDict)[name])) if ((fn=(*fnDict)[name]))
{ {
...@@ -1805,7 +1823,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -1805,7 +1823,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
FileDef *lastMatch=0; FileDef *lastMatch=0;
while (fd) while (fd)
{ {
if (path.isNull() || fd->getPath().right(path.length())==path) if (path.isEmpty() || fd->getPath().right(path.length())==path)
{ {
count++; count++;
lastMatch=fd; lastMatch=fd;
...@@ -1837,7 +1855,7 @@ void showFileDefMatches(const FileNameDict *fnDict,const char *n) ...@@ -1837,7 +1855,7 @@ void showFileDefMatches(const FileNameDict *fnDict,const char *n)
FileDef *fd=fn->first(); FileDef *fd=fn->first();
while (fd) while (fd)
{ {
if (path.isNull() || fd->getPath().right(path.length())==path) if (path.isEmpty() || fd->getPath().right(path.length())==path)
{ {
msg(" %s\n",fd->absFilePath().data()); msg(" %s\n",fd->absFilePath().data());
} }
......
...@@ -40,9 +40,9 @@ extern void linkifyText(OutputList &ol,const char *clName,const char *name, ...@@ -40,9 +40,9 @@ extern void linkifyText(OutputList &ol,const char *clName,const char *name,
extern bool getDefs(const QCString &scopeName,const QCString &memberName, extern bool getDefs(const QCString &scopeName,const QCString &memberName,
const char *, MemberDef *&md, ClassDef *&cd,FileDef *&fd, const char *, MemberDef *&md, ClassDef *&cd,FileDef *&fd,
NamespaceDef *&nd); NamespaceDef *&nd);
extern void generateRef(OutputList &ol,const char *, extern bool generateRef(OutputList &ol,const char *,
const char *,bool inSeeBlock,const char * =0); const char *,bool inSeeBlock,const char * =0);
extern void generateLink(OutputList &ol,const char *, extern bool generateLink(OutputList &ol,const char *,
const char *,bool inSeeBlock,const char *); const char *,bool inSeeBlock,const char *);
extern void generateFileRef(OutputList &ol,const char *, extern void generateFileRef(OutputList &ol,const char *,
const char *linkTxt=0); const char *linkTxt=0);
......
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