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
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-991117.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-991117.src.tar # unpack it
gunzip doxygen-0.49-991205.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-991205.src.tar # unpack it
2. Run the configure script:
......@@ -234,4 +234,4 @@ The latest version of doxygen can be obtained at
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.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (17 November 1999)
Dimitri van Heesch (05 December 1999)
0.49-991117
0.49-991205
......@@ -93,6 +93,7 @@ documentation:
<li> \refitem cmdskipline \skipline
<li> \refitem cmdstruct \struct
<li> \refitem cmdsubsection \subsection
<li> \refitem cmdthrow \throw
<li> \refitem cmdtypedef \typedef
<li> \refitem cmdunion \union
<li> \refitem cmduntil \until
......@@ -229,6 +230,12 @@ Doxygen. Unrecognized commands are treated as normal text.
documentation contained in the comment block. All examples are placed
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.
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,
the \\include command can be used.
......@@ -583,8 +590,20 @@ Doxygen. Unrecognized commands are treated as normal text.
sectioning command is encountered. See section \ref cmdfn "\\fn" for an
example.
\par Note:
the tag \\exceptions is a synonym for this tag.
\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>
\subsection cmdreturn \return { description of the return value }
......@@ -799,6 +818,10 @@ Doxygen. Unrecognized commands are treated as normal text.
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.
Using the \\include command is equivalent to inserting the file into
the documentation block and surrounding it
with \\code and \\endcode commands.
......@@ -1199,6 +1222,10 @@ The following command JavaDoc command are support.
\subsection cmdjdexception @exception <exception-object> { exception-description }
\addindex @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 }
\addindex @return
Equivalent to \\return (see section \ref cmdreturn "\\return").
......
......@@ -91,6 +91,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_include_path INCLUDE_PATH
<li> \refitem cfg_inherit_docs INHERIT_DOCS
<li> \refitem cfg_inline_info INLINE_INFO
<li> \refitem cfg_inline_sources INLINE_SOURCES
<li> \refitem cfg_input INPUT
<li> \refitem cfg_input_filter INPUT_FILTER
<li> \refitem cfg_internal_docs INTERNAL_DOCS
......@@ -273,9 +274,14 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_source_browser
<dt>\c SOURCE_BROWSER <dd>
\addindex SOURCE_BROWSER
If the \c SOURCE_BROWSER tag is set to \c YES than the body of a member or
function will be appended as a block of code to the documentation of.
that member or function.
If the \c SOURCE_BROWSER tag is set to \c YES then a list of source files will
be generated. Documented entities will be cross-referenced with these sources.
\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
<dt>\c CASE_SENSE_NAMES <dd>
......@@ -698,9 +704,23 @@ EXTRA_PACKAGES = times
<dt>\c TAGFILES <dd>
\addindex 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
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:
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
......
......@@ -85,7 +85,7 @@ doxytag -t example.tag example/html
documentation. Because the tag file does not specify where the
documentation is located, you will have to specify that by running the
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)
moves the external documentation to a different
......
......@@ -75,6 +75,33 @@ To make doxygen put <br><br>
in the documentation of the class MyClassName regardless of the name of the actual
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>
*/
......@@ -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
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.
See the
<a href="http://www.gnu.org/copyleft/gpl.html">
GNU General Public License</a>
for more details.
<p>
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
class browser (in HTML) and/or an off-line reference manual
(in \f$\mbox{\LaTeX}\f$) from a set
of documented source files. There is also some support for generating
man pages. The documentation is extracted directly from the
of documented source files. There is also support for generating
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>
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
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
\endlatexonly
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>
\addindex acknowledgements
Thanks go to:
......
......@@ -29,7 +29,6 @@ following to build the executable:
\addindex Qt
<LI>The <a href="ftp://prep.ai.mit.edu/pub/gnu">GNU</a> tools
flex, bison and make
\latexonly(see {\tt ftp://prep.ai.mit.edu/pub/gnu})\endlatexonly.
\addindex flex
\addindex bison
\addindex make
......@@ -38,6 +37,8 @@ following to build the executable:
\latexonly(see {\tt http://www.perl.com})\endlatexonly.
\addindex perl
</UL>
For platform specific installation instructions see the \c INSTALL file
that is included in the package.
\addindex HTTP
\addindex CGI
......@@ -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
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
make
configure
\endverbatim
to get a list of all supported platforms/compilers.
Typing <tt>make</tt> followed by your platform will compile doxygen.
For Linux you can enter the following:
to set up the makefiles for your platform. For Windows this step can be
skipped.
To override the auto detected platform you can specify
\verbatim
make linux-g++
configure --platform platform-type
\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.
If it does not, please send the compilation errors or warnings along
with a description of your platform to
......@@ -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
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:
<UL>
<LI>\c doxygen: for generating the class browser.
......@@ -85,8 +99,8 @@ Doxygen was developed and tested under Linux using the following tools:
<li>GNU make version 3.76.1
<li>Perl version 5.005_02
<li>VIM version 5.4
<li>Netscape 4.04 & 4.5
<li>Troll Tech's tmake version 1.2 (included in the distribution)
<li>Netscape 4.61
<li>Troll Tech's tmake version 1.3 (included in the distribution)
<li>teTeX version 0.9
</ul>
......
......@@ -22,11 +22,11 @@
The following output formats are \e directly supported by doxygen:
<dl>
<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$
<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>
<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>
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
running <code>make pdf</code> in the output directory.
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>
*/
......@@ -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
name \<config-file\> already exists, doxygen will rename it to
\<config-file\>.bak before generating the configuration template.
If you use <code>-</code> as the file name then doxygen will try to read
the configuration file from standard input (<code>stdin</code>).
If you use <code>-</code> (i.e. the minus sign) as the file name then
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)
Makefile. It contains of a number of assignments (tags) of the form:
......@@ -82,7 +83,9 @@ to \c YES.
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
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
......@@ -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
<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>
(this requires \c dvips ). Conversion to PDF is also possible; just type
<code>make pdf</code>. The Postscript file can be send to a postscript
(this requires \c dvips ). The Postscript file can be send to a postscript
printer. If you do not have a postscript printer, you can try to use
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
\c PDF_HYPERLINKS tag to \c YES.
......@@ -436,7 +440,7 @@ Then by default doxygen will feed the following to its parser:
#define VERSION
#define CONST_STRING
static CONST_STRING version = "1.xx";
static CONST_STRING version = "2.xx";
\endverbatim
You can disable all preprocessing by setting \c ENABLE_PREPROCESSING to \c
......@@ -541,8 +545,8 @@ PREDEFINED = QListT:=QList
\endverbatim
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
the \c INPUT_FILTER flag.
even more flexibility you can always write an input filter and specify it
after the \c INPUT_FILTER tag.
\subsection moreinfo More information
......
......@@ -3,9 +3,9 @@
<title>Annotated Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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>
<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)
......@@ -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_c6.html">C6</a> (Class C6 in all groups)
</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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>C1 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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.
<a href="#_details">More...</a>
<p>
......@@ -16,10 +16,10 @@ class C1 in group 1.
<p>
<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>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>C2 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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.
<a href="#_details">More...</a>
<p>
......@@ -16,10 +16,10 @@ class C2 in group 1.
<p>
<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>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>C3 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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.
<a href="#_details">More...</a>
<p>
......@@ -16,10 +16,10 @@ class C3 in group 2.
<p>
<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>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>C4 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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.
<a href="#_details">More...</a>
<p>
......@@ -16,10 +16,10 @@ class C4 in group 2.
<p>
<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>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>C5 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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>.
<a href="#_details">More...</a>
<p>
......@@ -16,10 +16,10 @@ class C5 in <a href="group_group3.html"> the third group</a>.
<p>
<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>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>C6 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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.
<a href="#_details">More...</a>
<p>
......@@ -18,10 +18,10 @@ class C6 in all groups.
<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>
<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">
<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>
</body>
</html>
H1 { text-align: center }
A.qindex {}
A.qindexRef {}
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 }
DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
DIV.in { margin-left: 16 }
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 }
......@@ -3,9 +3,9 @@
<title>File Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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>
<p>
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>
<li><a class="el" href="group.cpp.html">group.cpp</a> (This file in group 3)
</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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>group.cpp File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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.
<a href="#_details">More...</a>
<p>
......@@ -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>
</table>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>The First Group</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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>
<ul>
<li><a class="el" href="class_c1.html">C1</a>
......@@ -13,10 +13,10 @@
<li><a class="el" href="class_c6.html">C6</a>
</ul>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>The Second Group</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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>
<ul>
<li><a class="el" href="class_c3.html">C3</a>
......@@ -13,10 +13,10 @@
<li><a class="el" href="class_c6.html">C6</a>
</ul>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>The Third Group</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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>
<ul>
<li><a class="el" href="group.cpp.html">group.cpp</a>
......@@ -16,10 +16,10 @@
<li><a class="el" href="class_c6.html">C6</a>
</ul>
<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">
<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>
</body>
</html>
......@@ -3,15 +3,15 @@
<title>Main Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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>
<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">
<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>
</body>
</html>
......@@ -3,9 +3,9 @@
<title>Module Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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>
<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:
<dl compact>
<dt><a href="group_group1.html">The First Group</a><dd>
......@@ -16,10 +16,10 @@
<p>
</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">
<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>
</body>
</html>
......@@ -262,7 +262,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (incFile)
{
QCString nm=incName.copy();
if (incName.isNull()) nm=incFile->name();
if (incName.isEmpty()) nm=incFile->name();
ol.startTypewriter();
ol.docify("#include <");
ol.disable(OutputGenerator::Html);
......@@ -418,7 +418,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
bool exampleFlag=hasExamples();
if (!briefDescription().isEmpty() ||
!documentation().isEmpty() ||
(bodyLine!=-1 && bodyDef) ||
(startBodyLine!=-1 && bodyDef) ||
exampleFlag)
{
ol.writeRuler();
......@@ -494,7 +494,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
//ol.endDescItem();
ol.endDescList();
}
writeSourceRef(ol);
writeSourceRef(ol,name());
}
pubMembers.countDocMembers();
......@@ -837,7 +837,7 @@ void ClassDef::writeIncludeFile(OutputList &ol)
startFile(ol,fileName+"-include",name()+" Include File");
startTitle(ol,0);
QCString n=incName.copy();
if (incName.isNull()) n=incFile->name();
if (incName.isEmpty()) n=incFile->name();
parseText(ol,n);
endTitle(ol,0,0);
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;
class FileDef;
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();
#endif
......@@ -72,65 +72,65 @@ typedef QList<CodeClassDef> CodeClassList;
typedef QDict<CodeClassDef> CodeClassDict;
typedef QList<CodeVarDef> CodeVarList;
static CodeClassList codeClassList;
static CodeClassDict codeClassDict(17);
static CodeVarList codeVarList;
static CodeVarList codeParmList;
/* -----------------------------------------------------------------
*
* statics
*/
static const char * inputString; //!< the code fragment as text
static int inputPosition; //!< read offset during parsing
static int inputLines; //!< number of line in the code fragment
static int yyLineNr; //!< current line number
static int lastCContext;
static int lastSpecialCContext;
static int lastStringContext;
static int bracketCount = 0;
static int curlyCount = 0;
static int sharpCount = 0;
static QCString type;
static QCString name;
static QCString args;
static QCString parmType;
static QCString parmName;
static bool inClass;
static QCString classScope;
static OutputList *code;
static CodeClassDef ccd;
static CodeVarDef cvd;
static bool exampleBlock;
static QCString exampleName;
static QCString exampleFile;
static int anchorCount;
static FileDef *sourceFileDef;
static QCString lastVariable;
// start a new line of code, inserting a line number if sourceFileDef
static CodeClassList g_codeClassList;
static CodeClassDict g_codeClassDict(17);
static CodeVarList g_codeVarList;
static CodeVarList g_codeParmList;
static const char * g_inputString; //!< the code fragment as text
static int g_inputPosition; //!< read offset during parsing
static int g_inputLines; //!< number of line in the code fragment
static int g_yyLineNr; //!< current line number
static int g_lastCContext;
static int g_lastSpecialCContext;
static int g_lastStringContext;
static int g_bracketCount = 0;
static int g_curlyCount = 0;
static int g_sharpCount = 0;
static QCString g_type;
static QCString g_name;
static QCString g_args;
static QCString g_parmType;
static QCString g_parmName;
static bool g_inClass;
static QCString g_classScope;
static OutputList * g_code;
static CodeClassDef g_ccd;
static CodeVarDef g_cvd;
static bool g_exampleBlock;
static QCString g_exampleName;
static QCString g_exampleFile;
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
// number is linked to the documentation of that definition.
static void startCodeLine(OutputList &ol)
{
if (sourceFileDef)
if (g_sourceFileDef)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d ",yyLineNr);
lineAnchor.sprintf("l%05d",yyLineNr);
Definition *d = sourceFileDef->getSourceDefinition(yyLineNr);
QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr);
if (d && d->isLinkableInProject())
lineNumber.sprintf("%05d",g_yyLineNr);
lineAnchor.sprintf("l%05d",g_yyLineNr);
Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
QCString anchor = g_sourceFileDef->getSourceAnchor(g_yyLineNr);
if (!g_includeCodeFragment && d && d->isLinkableInProject())
{
ol.startCodeAnchor(lineAnchor);
ol.writeCodeLink(d->getReference(),d->getOutputFileBase(),
anchor,lineNumber);
ol.endCodeAnchor();
ol.codify(" ");
}
else
{
ol.codify(lineNumber);
ol.codify(" ");
}
}
ol.startCodeLine();
......@@ -149,18 +149,18 @@ static void codifyLines(char *text)
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
g_yyLineNr++;
*(p-1)='\0';
code->codify(sp);
code->endCodeLine();
if (yyLineNr<inputLines)
g_code->codify(sp);
g_code->endCodeLine();
if (g_yyLineNr<g_inputLines)
{
startCodeLine(*code);
startCodeLine(*g_code);
}
}
else
{
code->codify(sp);
g_code->codify(sp);
done=TRUE;
}
}
......@@ -183,11 +183,11 @@ static void writeMultiLineCodeLink(OutputList &ol,
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
g_yyLineNr++;
*(p-1)='\0';
ol.writeCodeLink(ref,file,anchor,sp);
ol.endCodeLine();
if (yyLineNr<inputLines)
if (g_yyLineNr<g_inputLines)
{
startCodeLine(ol);
}
......@@ -202,58 +202,59 @@ static void writeMultiLineCodeLink(OutputList &ol,
static void addType()
{
if (name=="const") { name.resize(0); return; }
if (type.length()) type += ' ' ;
type += name ;
name.resize(0) ;
if (type.length()) type += ' ' ;
type += args ;
args.resize(0) ;
if (g_name=="const") { g_name.resize(0); return; }
if (g_type.length()) g_type += ' ' ;
g_type += g_name ;
g_name.resize(0) ;
if (g_type.length()) g_type += ' ' ;
g_type += g_args ;
g_args.resize(0) ;
}
static void addParmType()
{
if (parmName=="const") { parmName.resize(0); return; }
if (parmType.length()) parmType += ' ' ;
parmType += parmName ;
parmName.resize(0) ;
if (g_parmName=="const") { g_parmName.resize(0); return; }
if (g_parmType.length()) g_parmType += ' ' ;
g_parmType += g_parmName ;
g_parmName.resize(0) ;
}
static void setClassScope(const QCString &name)
{
//printf("setClassScope(%s)\n",name.data());
QCString n=name;
n=n.simplifyWhiteSpace();
int index;
if ((index=n.find("::"))!=-1)
classScope=n.left(index);
g_classScope=n.left(index);
else
classScope.resize(0);
//printf("--->New class scope `%s'\n",classScope.data());
g_classScope.resize(0);
//printf("--->New class scope `%s'\n",g_classScope.data());
}
static void addVariable()
{
cvd.name=name.copy().simplifyWhiteSpace();
cvd.type=type.copy().simplifyWhiteSpace();
if (type.length()==0)
g_cvd.name=g_name.copy().simplifyWhiteSpace();
g_cvd.type=g_type.copy().simplifyWhiteSpace();
if (g_type.length()==0)
return;
else if ((getClass(cvd.type)) || (codeClassDict[cvd.type]))
else if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
cvd.classScope=classScope;
codeVarList.append(new CodeVarDef(cvd)); // add it to a list
g_cvd.classScope=g_classScope;
g_codeVarList.append(new CodeVarDef(g_cvd)); // add it to a list
}
}
static void addParameter()
{
cvd.name=parmName.copy().simplifyWhiteSpace();
cvd.type=parmType.copy().simplifyWhiteSpace();
if (cvd.type.length()==0)
g_cvd.name=g_parmName.copy().simplifyWhiteSpace();
g_cvd.type=g_parmType.copy().simplifyWhiteSpace();
if (g_cvd.type.length()==0)
return;
else if ((getClass(cvd.type)) || (codeClassDict[cvd.type]))
else if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
cvd.classScope=classScope;
codeParmList.append(new CodeVarDef(cvd)); // add it to a list
g_cvd.classScope=g_classScope;
g_codeParmList.append(new CodeVarDef(g_cvd)); // add it to a list
}
}
......@@ -264,19 +265,19 @@ static void generateClassLink(OutputList &ol,char *clName)
ClassDef *cd;
if ((cd=getClass(className)) && cd->isLinkable())
{
if (exampleBlock)
if (g_exampleBlock)
{
QCString anchor;
anchor.sprintf("_a%d",anchorCount);
//printf("addExampleClass(%s,%s,%s)\n",anchor.data(),exampleName.data(),
// exampleFile.data());
if (cd->addExample(anchor,exampleName,exampleFile))
anchor.sprintf("_a%d",g_anchorCount);
//printf("addExampleClass(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
// g_exampleFile.data());
if (cd->addExample(anchor,g_exampleName,g_exampleFile))
{
bool latexOn = ol.isEnabled(OutputGenerator::Latex);
if (latexOn) ol.disable(OutputGenerator::Latex);
ol.writeAnchor(anchor);
if (latexOn) ol.enable(OutputGenerator::Latex);
anchorCount++;
g_anchorCount++;
}
}
//ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
......@@ -302,19 +303,19 @@ static bool getLink(const char *className,
if (getDefs(c,m,"()",md,cd,fd,nd) && md->isLinkable())
{
//printf("Found!\n");
if (exampleBlock)
if (g_exampleBlock)
{
QCString anchor;
anchor.sprintf("a%d",anchorCount);
//printf("addExampleFile(%s,%s,%s)\n",anchor.data(),exampleName.data(),
// exampleFile.data());
if (md->addExample(anchor,exampleName,exampleFile))
anchor.sprintf("a%d",g_anchorCount);
//printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
// g_exampleFile.data());
if (md->addExample(anchor,g_exampleName,g_exampleFile))
{
bool latexEnabled = result.isEnabled(OutputGenerator::Latex);
if (latexEnabled) result.disable(OutputGenerator::Latex);
result.writeAnchor(anchor);
if (latexEnabled) result.enable(OutputGenerator::Latex);
anchorCount++;
g_anchorCount++;
}
}
Definition *d=0;
......@@ -352,17 +353,17 @@ static void generateMemberLink(OutputList &ol,const char *varName,
{
//printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n",
// varName,memName,classScope.data());
CodeVarDef *cvd=codeParmList.last();
while (cvd && cvd->name!=varName) cvd=codeParmList.prev();
CodeVarDef *cvd=g_codeParmList.last();
while (cvd && cvd->name!=varName) cvd=g_codeParmList.prev();
if (!cvd)
{
cvd=codeVarList.last();
while (cvd && cvd->name!=varName) cvd=codeVarList.prev();
cvd=g_codeVarList.last();
while (cvd && cvd->name!=varName) cvd=g_codeVarList.prev();
}
if (cvd) // variable found
{
//printf("variable found type=%s!\n",cvd->type.data());
CodeClassDef *ccd=codeClassDict[cvd->type];
CodeClassDef *ccd=g_codeClassDict[cvd->type];
if (ccd)
{
//printf("Class found!\n");
......@@ -402,7 +403,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
else
{
ClassDef *vcd = getClass(classScope);
ClassDef *vcd = getClass(g_classScope);
if (vcd)
{
//printf("Found class for variable `%s'\n",varName);
......@@ -465,7 +466,7 @@ static void generateFunctionLink(OutputList &ol,char *funcName)
{
OutputList result(&ol);
CodeClassDef *ccd=0;
QCString locScope=classScope.copy();
QCString locScope=g_classScope.copy();
QCString locFunc=removeWhiteSpace(funcName);
int i=locFunc.findRev("::");
if (i>0)
......@@ -474,9 +475,9 @@ static void generateFunctionLink(OutputList &ol,char *funcName)
locFunc=locFunc.right(locFunc.length()-i-2);
}
//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();
while (s)
{
......@@ -502,7 +503,7 @@ static void generateFunctionLink(OutputList &ol,char *funcName)
/*! counts the number of lines in the input */
static int countLines()
{
const char *p=inputString;
const char *p=g_inputString;
char c;
int count=1;
while ((c=*p++)) if (c=='\n') count++;
......@@ -517,9 +518,9 @@ static int countLines()
static int yyread(char *buf,int max_size)
{
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++;
}
return c;
......@@ -554,12 +555,12 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<*>\x0d
<Body>^([ \t]*"#"[ \t]"include"[ \t]*)("<"|"\"") {
code->codify(yytext);
g_code->codify(yytext);
BEGIN( ReadInclude );
}
<Body>("class"|"struct"|"union")[ \t\n]+ {
codifyLines(yytext);
//code->codify(yytext);
//g_code->codify(yytext);
BEGIN( ClassName );
}
<ReadInclude>[a-z_A-Z0-9.]+(("/"[a-z_A-Z0-9.]+)*)/(">"|"\"") {
......@@ -569,24 +570,24 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
if ((fd=findFileDef(&inputNameDict,yytext,ambig)) &&
fd->isLinkable())
{
code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext);
g_code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext);
}
else
{
code->codify(yytext);
g_code->codify(yytext);
}
char c=yyinput();
QCString text;
text+=c;
code->codify(text);
g_code->codify(text);
BEGIN( Body );
}
<Body>^[ \t]*"#" {
code->codify(yytext);
g_code->codify(yytext);
BEGIN( SkipCPP ) ;
}
<SkipCPP>. {
code->codify(yytext);
g_code->codify(yytext);
}
<SkipCPP>\\\n {
codifyLines(yytext);
......@@ -596,283 +597,285 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN( Body ) ;
}
<SkipCPP>"//" {
code->codify(yytext);
g_code->codify(yytext);
}
<Body>"{" {
code->codify(yytext);
curlyCount++;
type.resize(0); name.resize(0);
g_code->codify(yytext);
g_curlyCount++;
g_type.resize(0);
g_name.resize(0);
}
<Body>"}" {
code->codify(yytext);
inClass=FALSE;
if (--curlyCount<=0)
g_code->codify(yytext);
g_inClass=FALSE;
if (--g_curlyCount<=0)
{
classScope.resize(0);
codeParmList.clear();
g_classScope.resize(0);
g_codeParmList.clear();
}
}
<ClassName>";" {
code->codify(yytext);
g_code->codify(yytext);
BEGIN( Body );
}
<ClassName>[*&]+ {
addType();
code->codify(yytext);
g_code->codify(yytext);
}
<ClassName>{ID} {
ccd.name=yytext;
g_ccd.name=yytext;
addType();
generateClassLink(*code,yytext);
generateClassLink(*g_code,yytext);
}
<ClassName>[ \t\n]*":"[ \t\n]* {
codifyLines(yytext);
BEGIN( Bases );
}
<Bases,ClassName>[ \t]*"{"[ \t]* {
code->codify(yytext);
curlyCount++;
inClass=TRUE;
if (ccd.name.length()>0)
g_code->codify(yytext);
g_curlyCount++;
g_inClass=TRUE;
if (g_ccd.name.length()>0)
{
classScope=ccd.name.copy();
CodeClassDef *cd=new CodeClassDef(ccd);
codeClassList.append(cd);
codeClassDict.insert(cd->name,cd);
g_classScope=g_ccd.name.copy();
CodeClassDef *cd=new CodeClassDef(g_ccd);
g_codeClassList.append(cd);
g_codeClassDict.insert(cd->name,cd);
}
BEGIN( Body );
}
<Bases>"virtual" {
code->codify(yytext);
g_code->codify(yytext);
}
<Bases>"public" {
code->codify(yytext);
g_code->codify(yytext);
}
<Bases>"protected" {
code->codify(yytext);
g_code->codify(yytext);
}
<Bases>"private" {
code->codify(yytext);
g_code->codify(yytext);
}
<Bases>{ID} {
//printf("%s:addBase(%s)\n",ccd.name.data(),yytext);
ccd.bases.inSort(yytext);
generateClassLink(*code,yytext);
//printf("%s:addBase(%s)\n",g_ccd.name.data(),yytext);
g_ccd.bases.inSort(yytext);
generateClassLink(*g_code,yytext);
}
<Bases>"<" {
code->codify(yytext);
sharpCount=1;
g_code->codify(yytext);
g_sharpCount=1;
BEGIN ( SkipSharp );
}
<SkipSharp>"<" {
code->codify(yytext);
++sharpCount;
g_code->codify(yytext);
++g_sharpCount;
}
<SkipSharp>">" {
code->codify(yytext);
if (--sharpCount<=0)
g_code->codify(yytext);
if (--g_sharpCount<=0)
BEGIN ( 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]*)/"(" {
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]*) {
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]*) {
generateClassLink(*code,yytext);
generateClassLink(*g_code,yytext);
addType();
name+=yytext;
}
*/
<Body>{SCOPENAME}/[ \t\n]* {
generateClassLink(*code,yytext);
generateClassLink(*g_code,yytext);
//codifyLines(yytext);
addType();
name+=yytext;
g_name+=yytext;
}
<Body>{SCOPENAME}/{B}*"(" {
addType();
//if (type.length()==0)
QCString tmp=yytext;
generateFunctionLink(*code,yytext);
generateFunctionLink(*g_code,yytext);
//else
// code->codify(yytext);
bracketCount=1;
args.resize(0);
name+=yytext;
// g_code->codify(yytext);
g_bracketCount=1;
g_args.resize(0);
g_name+=yytext;
BEGIN( FuncCall );
}
<FuncCall,Body,MemberCall>\" {
code->codify(yytext);
lastStringContext=YY_START;
g_code->codify(yytext);
g_lastStringContext=YY_START;
BEGIN( SkipString );
}
<SkipString>[^\"\\]* {
code->codify(yytext);
g_code->codify(yytext);
}
<SkipString>"//"|"/*" {
code->codify(yytext);
g_code->codify(yytext);
}
<SkipString>\" {
code->codify(yytext);
BEGIN( lastStringContext );
g_code->codify(yytext);
BEGIN( g_lastStringContext );
}
<SkipString>\\. {
code->codify(yytext);
g_code->codify(yytext);
}
<Body>":" {
code->codify(yytext);
name.resize(0);type.resize(0);
g_code->codify(yytext);
g_name.resize(0);g_type.resize(0);
}
<Body>"'"."'" {
code->codify(yytext);
<Body,MemberCall,MemberCall2,FuncCall>"'"((\\.)|(.))"'" {
g_code->codify(yytext);
}
<Body>"."|"->" {
code->codify(yytext);
g_code->codify(yytext);
BEGIN( MemberCall );
}
<MemberCall>{SCOPENAME}/{B}*"(" {
if (name.length()>0)
generateMemberLink(*code,name,yytext);
if (g_name.length()>0)
generateMemberLink(*g_code,g_name,yytext);
else
code->codify(yytext);
name.resize(0);type.resize(0);
bracketCount=0;
g_code->codify(yytext);
g_name.resize(0);g_type.resize(0);
g_bracketCount=0;
BEGIN(FuncCall);
}
<MemberCall>[^a-z_A-Z0-9(\n] {
code->codify(yytext);
type.resize(0);
name.resize(0);
g_code->codify(yytext);
g_type.resize(0);
g_name.resize(0);
BEGIN(Body);
}
<Body>[,=;\[] {
code->codify(yytext);
if (type.length()>0)
g_code->codify(yytext);
if (g_type.length()>0)
addVariable();
name.resize(0);
if (*yytext!=',') type.resize(0);
args.resize(0);
g_name.resize(0);
if (*yytext!=',') g_type.resize(0);
g_args.resize(0);
}
<Body>[0-9]+ {
code->codify(yytext);
g_code->codify(yytext);
}
<MemberCall2,FuncCall>[a-z_A-Z][:a-z_A-Z0-9]* {
addParmType();
parmName=yytext;
generateClassLink(*code,yytext);
g_parmName=yytext;
generateClassLink(*g_code,yytext);
}
<MemberCall2,FuncCall>, {
code->codify(yytext);
g_code->codify(yytext);
addParameter();
parmType.resize(0);parmName.resize(0);
g_parmType.resize(0);g_parmName.resize(0);
}
<MemberCall2,FuncCall>"(" {
code->codify(yytext);
bracketCount++;
g_code->codify(yytext);
g_bracketCount++;
}
<MemberCall2,FuncCall>")" {
code->codify(yytext);
if (--bracketCount<=0)
name.resize(0);args.resize(0);
parmType.resize(0);parmName.resize(0);
g_code->codify(yytext);
if (--g_bracketCount<=0)
g_name.resize(0);g_args.resize(0);
g_parmType.resize(0);g_parmName.resize(0);
BEGIN( Body );
}
<MemberCall2,FuncCall>")"[ \t\n]*";" {
codifyLines(yytext);
bracketCount=0;
if (!inClass && type.length()>0)
g_bracketCount=0;
if (!g_inClass && g_type.length()>0)
addVariable();
name.resize(0);type.resize(0);
parmType.resize(0);parmName.resize(0);
g_name.resize(0);g_type.resize(0);
g_parmType.resize(0);g_parmName.resize(0);
BEGIN( Body );
}
<MemberCall2,FuncCall>")"[ \t\n]*"{" {
addParameter();
parmType.resize(0);parmName.resize(0);
if (name.length()>0) setClassScope(name);
g_parmType.resize(0);g_parmName.resize(0);
if (g_name.find("::")!=-1) setClassScope(g_name);
codifyLines(yytext);
curlyCount++;
type.resize(0); name.resize(0);
g_curlyCount++;
g_type.resize(0); g_name.resize(0);
BEGIN( Body );
}
<MemberCall2,FuncCall>")"[ \t\n]*":" {
addParameter();
parmType.resize(0);parmName.resize(0);
if (name.length()>0) setClassScope(name);
g_parmType.resize(0);g_parmName.resize(0);
if (g_name.find("::")!=-1) setClassScope(g_name);
codifyLines(yytext);
type.resize(0); name.resize(0);
g_type.resize(0); g_name.resize(0);
BEGIN( SkipInits );
}
<SkipInits>"{" {
code->codify(yytext);
curlyCount++;
g_code->codify(yytext);
g_curlyCount++;
BEGIN( Body );
}
<SkipInits>{ID} {
generateClassLink(*code,yytext);
generateClassLink(*g_code,yytext);
}
<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]*)/("."|"->") {
code->codify(yytext);
args=yytext;
g_code->codify(yytext);
g_args=yytext;
BEGIN( MemberCall2 );
}
<MemberCall2>([a-z_A-Z][a-z_A-Z0-9]*)/([ \t\n]*"(") {
if (args.length()>0)
generateMemberLink(*code,args,yytext);
if (g_args.length()>0)
generateMemberLink(*g_code,g_args,yytext);
else
code->codify(yytext);
args.resize(0);
g_code->codify(yytext);
g_args.resize(0);
BEGIN( FuncCall );
}
<MemberCall2>([a-z_A-Z][a-z_A-Z0-9]*)/([ \t\n]*("."|"->")) {
code->codify(yytext);
args=yytext;
g_code->codify(yytext);
g_args=yytext;
}
<SkipComment>"//" {
code->codify(yytext);
g_code->codify(yytext);
}
<SkipComment>[^*/\n]+ {
code->codify(yytext);
g_code->codify(yytext);
}
<SkipComment>[ \t]*"*/" {
code->codify(yytext);
BEGIN( lastCContext ) ;
g_code->codify(yytext);
BEGIN( g_lastCContext ) ;
}
<SkipCxxComment>.*\n {
codifyLines(yytext);
BEGIN( lastCContext ) ;
<SkipCxxComment>.*/\n {
//codifyLines(yytext);
g_code->codify(yytext);
BEGIN( g_lastCContext ) ;
}
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*{B}*"/*"[*!]/[^/*] {
yyLineNr+=QCString(yytext).contains('\n');
g_yyLineNr+=QCString(yytext).contains('\n');
}
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)* {
yyLineNr+=QCString(yytext).contains('\n');
code->endCodeLine();
if (yyLineNr<inputLines)
g_yyLineNr+=QCString(yytext).contains('\n');
g_code->endCodeLine();
if (g_yyLineNr<g_inputLines)
{
startCodeLine(*code);
startCodeLine(*g_code);
}
BEGIN(lastSpecialCContext);
BEGIN(g_lastSpecialCContext);
}
<RemoveSpecialCComment>"*/" {
BEGIN(lastSpecialCContext);
BEGIN(g_lastSpecialCContext);
}
<RemoveSpecialCComment>[^*\n]+
<RemoveSpecialCComment>"//"|"/*"
<RemoveSpecialCComment>\n { yyLineNr++; }
<RemoveSpecialCComment>\n { g_yyLineNr++; }
<RemoveSpecialCComment>.
/*
<SkipSpecialComment>"//"
......@@ -880,9 +883,9 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN( lastDContext ) ;
}
<SkipSpecialComment>[ \t]*"* /"[ \t\n]*"\n"/"/ *" {
//code->codify("\n");
//g_code->codify("\n");
//QCString lineText=yytext;
//yyLineNr+=lineText.contains('\n');
//g_yyLineNr+=lineText.contains('\n');
BEGIN( lastDContext ) ;
}
<SkipSpecialComment>.
......@@ -899,19 +902,19 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
*/
<*>\n({B}*"//"[!/][^\n]*\n)* { // remove special one-line comment
yyLineNr+=((QCString)yytext).contains('\n');
code->endCodeLine();
if (yyLineNr<inputLines)
g_yyLineNr+=((QCString)yytext).contains('\n');
g_code->endCodeLine();
if (g_yyLineNr<g_inputLines)
{
startCodeLine(*code);
startCodeLine(*g_code);
}
}
<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
yyLineNr++;
code->endCodeLine();
if (yyLineNr<inputLines)
g_yyLineNr++;
g_code->endCodeLine();
if (g_yyLineNr<g_inputLines)
{
startCodeLine(*code);
startCodeLine(*g_code);
}
}
<*>"//"[!/][^\n]*\n { // strip special one-line comment
......@@ -919,39 +922,40 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
codifyLines(c);
}
<*>\n{B}*"/*"[!*]/[^/*] {
lastSpecialCContext = YY_START;
yyLineNr++;
g_lastSpecialCContext = YY_START;
g_yyLineNr++;
BEGIN(RemoveSpecialCComment);
}
<*>^{B}*"/*"[!*]/[^/*] { // special C comment block at a new line
lastSpecialCContext = YY_START;
g_lastSpecialCContext = YY_START;
BEGIN(RemoveSpecialCComment);
}
<*>"/*"[!*]/[^/*] { // special C comment block half way a line
lastSpecialCContext = YY_START;
g_lastSpecialCContext = YY_START;
BEGIN(RemoveSpecialCComment);
}
<*>"/*"("!"?)"*/" {}
<*>"/*" {
code->codify(yytext);
lastCContext = YY_START ;
g_code->codify(yytext);
g_lastCContext = YY_START ;
BEGIN( SkipComment ) ;
}
<*>"//" {
code->codify(yytext);
lastCContext = YY_START ;
g_code->codify(yytext);
g_lastCContext = YY_START ;
BEGIN( SkipCxxComment ) ;
}
<*>\n {
codifyLines(yytext);
}
<*>. {
code->codify(yytext);
g_code->codify(yytext);
}
/*
<*>([ \t\n]*"\n"){2,} { // combine multiple blank lines
//QCString sepLine=yytext;
//code->codify("\n\n");
//yyLineNr+=sepLine.contains('\n');
//g_code->codify("\n\n");
//g_yyLineNr+=sepLine.contains('\n');
//char sepLine[3]="\n\n";
codifyLines(yytext);
}
......@@ -964,46 +968,54 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
void initParseCodeContext()
{
codeClassList.setAutoDelete(TRUE);
codeVarList.setAutoDelete(TRUE);
codeParmList.setAutoDelete(TRUE);
codeClassDict.clear();
codeClassList.clear();
codeVarList.clear();
codeParmList.clear();
ccd.bases.clear();
anchorCount = 0;
g_codeClassList.setAutoDelete(TRUE);
g_codeVarList.setAutoDelete(TRUE);
g_codeParmList.setAutoDelete(TRUE);
g_codeClassDict.clear();
g_codeClassList.clear();
g_codeVarList.clear();
g_codeParmList.clear();
g_ccd.bases.clear();
g_anchorCount = 0;
}
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;
inputString = s;
inputPosition = 0;
inputLines = countLines();
yyLineNr = 1;
curlyCount = 0;
bracketCount = 0;
sharpCount = 0;
classScope = className;
exampleBlock = exBlock;
exampleName = exName;
sourceFileDef = fd;
exampleFile = convertSlashes(exampleName,TRUE)+"-example";
startCodeLine(*code);
type.resize(0);
name.resize(0);
args.resize(0);
parmName.resize(0);
parmType.resize(0);
g_inputString = s;
g_inputPosition = 0;
if (endLine!=-1)
g_inputLines = endLine+1;
else
g_inputLines = countLines();
if (startLine!=-1)
g_yyLineNr = startLine;
else
g_yyLineNr = 1;
g_curlyCount = 0;
g_bracketCount = 0;
g_sharpCount = 0;
g_classScope = className;
g_exampleBlock = exBlock;
g_exampleName = exName;
g_sourceFileDef = fd;
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 );
BEGIN( Body );
codeYYlex();
//if (yyLineNr<=inputLines) code->endCodeLine();
ol+=*code;
delete code;
//if (g_yyLineNr<=g_inputLines) code->endCodeLine();
ol+=*g_code;
delete g_code;
return;
}
......
......@@ -302,112 +302,113 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
*yy_cp = '\0'; \
yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 92
#define YY_END_OF_BUFFER 93
static yyconst short int yy_accept[929] =
#define YY_NUM_RULES 93
#define YY_END_OF_BUFFER 94
static yyconst short int yy_accept[938] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 93, 90, 91, 90,
90, 2, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 87, 90, 78, 75, 79, 2, 90,
78, 78, 85, 86, 77, 76, 86, 86, 84, 82,
82, 84, 84, 84, 90, 0, 89, 0, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 0, 88, 78, 80, 78, 85, 86,
77, 86, 83, 81, 0, 0, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 78, 86, 1, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 1, 1, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 0, 29, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 0,
40, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 0, 13, 74, 74, 74,
74, 74, 0, 14, 74, 74, 0, 30, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 0, 12, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 0, 23, 0, 35,
74, 0, 41, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 0, 17, 74, 74, 74, 0, 42, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 0, 28, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 0, 7,
74, 74, 0, 20, 74, 0, 37, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 0, 15,
74, 74, 74, 74, 74, 74, 0, 16, 74, 74,
74, 74, 74, 0, 45, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 0, 10, 0,
9, 0, 6, 74, 74, 74, 74, 0, 73, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 0, 43, 74,
74, 74, 74, 74, 74, 74, 74, 74, 0, 27,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
0, 50, 74, 74, 74, 74, 74, 74, 0, 26,
0, 72, 0, 19, 74, 74, 0, 11, 0, 8,
74, 74, 74, 74, 74, 0, 3, 74, 0, 62,
0, 44, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 0, 61, 0, 47, 74, 74, 74, 74,
74, 74, 0, 36, 0, 31, 74, 0, 49, 74,
74, 74, 74, 74, 74, 74, 74, 0, 63, 74,
74, 0, 22, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 0, 60, 74, 74, 74,
74, 74, 74, 0, 38, 74, 74, 0, 48, 74,
74, 74, 74, 74, 0, 34, 74, 74, 74, 74,
0, 71, 0, 4, 74, 0, 67, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 0, 46,
0, 59, 74, 74, 74, 74, 74, 0, 24, 74,
0, 52, 74, 0, 21, 0, 53, 0, 39, 74,
74, 74, 74, 0, 64, 74, 74, 0, 33, 0,
32, 74, 74, 0, 18, 74, 74, 74, 74, 0,
5, 0, 65, 74, 74, 0, 54, 74, 74, 74,
0, 69, 74, 74, 74, 0, 68, 0, 70, 74,
74, 74, 0, 58, 0, 57, 0, 56, 0, 66,
0, 55, 0, 25, 74, 0, 51, 0
0, 0, 0, 0, 0, 0, 94, 91, 92, 91,
91, 2, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 88, 91, 79, 76, 80, 2, 91,
79, 79, 86, 87, 78, 77, 87, 87, 85, 83,
83, 85, 85, 85, 91, 0, 90, 0, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 0, 89, 79, 81, 79, 86, 87,
78, 87, 84, 82, 0, 0, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 79, 87, 1, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 1, 1, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 0, 29, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 0,
40, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 0, 13, 75, 75, 75,
75, 75, 0, 14, 75, 75, 0, 30, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 0, 12,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 0, 23,
0, 35, 75, 0, 41, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 0, 17, 75, 75, 75, 0,
42, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 0, 28,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 0, 7, 75, 75, 0, 20, 75, 0,
37, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 0, 15, 75, 75, 75, 75, 75, 75,
0, 16, 75, 75, 75, 75, 75, 0, 45, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 0, 10, 0, 9, 0, 6, 75, 75, 75,
75, 0, 73, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 0, 43, 75, 75, 75, 75, 75, 75,
75, 75, 75, 0, 27, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 0, 50, 75, 75, 75,
75, 75, 75, 0, 26, 0, 72, 75, 0, 19,
75, 75, 0, 11, 0, 8, 75, 75, 75, 75,
75, 0, 3, 75, 0, 62, 0, 44, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 0, 61,
0, 47, 75, 75, 75, 75, 75, 75, 0, 36,
0, 31, 75, 0, 49, 75, 75, 75, 75, 75,
75, 75, 75, 75, 0, 63, 75, 75, 0, 22,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 0, 60, 75, 75, 75, 75, 75, 75,
0, 38, 75, 75, 0, 48, 75, 75, 75, 75,
75, 0, 34, 0, 74, 75, 75, 75, 75, 0,
71, 0, 4, 75, 0, 67, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 0, 46, 0,
59, 75, 75, 75, 75, 75, 0, 24, 75, 0,
52, 75, 0, 21, 0, 53, 0, 39, 75, 75,
75, 75, 0, 64, 75, 75, 0, 33, 0, 32,
75, 75, 0, 18, 75, 75, 75, 75, 0, 5,
0, 65, 75, 75, 0, 54, 75, 75, 75, 0,
69, 75, 75, 75, 0, 68, 0, 70, 75, 75,
75, 0, 58, 0, 57, 0, 56, 0, 66, 0,
55, 0, 25, 75, 0, 51, 0
} ;
static yyconst int yy_ec[256] =
......@@ -451,332 +452,335 @@ static yyconst int yy_meta[45] =
6, 6, 6, 1
} ;
static yyconst short int yy_base[940] =
static yyconst short int yy_base[949] =
{ 0,
0, 1, 45, 0, 87, 88, 131, 174, 218, 262,
305, 348, 100, 101, 392, 436, 1227, 1228, 1228, 3,
1183, 1228, 0, 1201, 0, 0, 1, 0, 2, 1207,
10, 7, 1210, 1209, 1208, 1187, 79, 1186, 1201, 83,
1204, 1199, 1202, 1228, 6, 0, 1228, 1228, 0, 1206,
12, 1170, 0, 0, 1210, 1228, 95, 1168, 1228, 1228,
1228, 1202, 109, 1166, 1199, 114, 1228, 1197, 0, 95,
1180, 1184, 1173, 1182, 1189, 13, 1170, 1185, 1186, 128,
1174, 1173, 1170, 1179, 1169, 1180, 127, 1158, 1159, 3,
1158, 1161, 1170, 1157, 131, 1165, 134, 1172, 1151, 1153,
6, 1152, 1151, 118, 1228, 0, 1228, 1170, 0, 0,
1177, 1168, 1228, 1228, 1168, 1134, 1158, 1154, 1160, 1132,
1154, 1153, 1129, 1137, 1136, 1138, 1152, 1124, 1149, 1137,
1137, 1147, 123, 1142, 1134, 1140, 1139, 1131, 1135, 1129,
1135, 1130, 1117, 1132, 1135, 1130, 1116, 1105, 1116, 1126,
1102, 1117, 1124, 1117, 1121, 1104, 1119, 1105, 1104, 1112,
1092, 1113, 1116, 1103, 1086, 1085, 1228, 1090, 1112, 1087,
1110, 1104, 1081, 8, 1089, 1079, 1105, 1103, 133, 1092,
1087, 1081, 1087, 1099, 1095, 1070, 1069, 1078, 1067, 1066,
1088, 1071, 1073, 1076, 1069, 1070, 1083, 1062, 1070, 137,
1063, 1065, 1074, 1053, 1075, 1074, 1058, 1059, 1075, 1072,
1071, 1057, 1053, 1062, 1069, 1060, 0, 0, 1048, 1065,
1047, 1063, 1036, 1044, 1061, 1043, 1032, 1050, 1055, 1045,
1054, 1037, 1049, 1041, 1048, 1047, 110, 1035, 1033, 1032,
1046, 1025, 169, 1017, 1040, 1034, 1037, 155, 1027, 1025,
1011, 1010, 1013, 1015, 1015, 1006, 1008, 1016, 1025, 1027,
0, 1010, 1008, 1019, 1021, 997, 1015, 1011, 1002, 1007,
1015, 1014, 990, 998, 1003, 1010, 1001, 1001, 1008, 997,
990, 1004, 989, 995, 978, 1000, 999, 975, 982, 985,
997, 998, 997, 977, 982, 983, 979, 988, 971, 971,
974, 984, 968, 959, 159, 1228, 980, 984, 981, 74,
978, 962, 961, 952, 959, 962, 976, 967, 955, 171,
1228, 965, 945, 112, 944, 965, 944, 964, 959, 960,
948, 945, 960, 947, 957, 947, 955, 172, 950, 930,
929, 928, 939, 186, 938, 925, 191, 937, 923, 949,
921, 928, 927, 941, 941, 935, 928, 941, 921, 915,
938, 910, 909, 927, 926, 922, 905, 927, 910, 906,
924, 912, 170, 902, 921, 905, 910, 895, 900, 919,
906, 910, 916, 899, 911, 896, 901, 894, 898, 902,
905, 908, 895, 888, 189, 190, 1228, 905, 904, 892,
894, 901, 195, 1228, 883, 884, 197, 1228, 883, 884,
177, 894, 880, 875, 886, 865, 877, 884, 870, 885,
872, 875, 866, 869, 880, 869, 870, 853, 879, 878,
858, 861, 862, 854, 865, 872, 856, 853, 862, 864,
854, 862, 848, 858, 850, 845, 847, 202, 204, 833,
230, 859, 856, 838, 837, 854, 850, 231, 1228, 847,
841, 851, 837, 830, 844, 847, 846, 834, 833, 826,
832, 841, 836, 812, 214, 836, 824, 832, 831, 814,
829, 215, 832, 817, 825, 810, 825, 807, 823, 810,
824, 805, 803, 804, 807, 815, 807, 238, 814, 152,
239, 808, 807, 812, 799, 800, 242, 1228, 243, 1228,
804, 247, 1228, 799, 809, 808, 800, 802, 778, 787,
788, 783, 798, 793, 784, 779, 778, 772, 784, 786,
793, 773, 774, 777, 770, 788, 787, 786, 758, 757,
766, 765, 762, 762, 273, 775, 759, 775, 762, 771,
760, 754, 768, 751, 757, 761, 274, 764, 761, 275,
758, 276, 1228, 277, 753, 752, 278, 1228, 759, 749,
750, 738, 732, 754, 739, 745, 747, 279, 737, 740,
752, 744, 746, 745, 280, 731, 216, 728, 719, 281,
724, 738, 736, 729, 741, 728, 720, 725, 731, 269,
724, 293, 301, 302, 728, 313, 1228, 717, 726, 714,
314, 714, 728, 715, 711, 708, 708, 711, 315, 1228,
722, 703, 316, 1228, 709, 317, 1228, 717, 719, 708,
708, 686, 642, 15, 80, 318, 62, 100, 319, 1228,
88, 155, 144, 159, 172, 174, 320, 1228, 184, 321,
195, 198, 189, 322, 1228, 224, 235, 222, 225, 235,
237, 279, 333, 279, 274, 282, 283, 334, 1228, 335,
1228, 336, 1228, 322, 314, 354, 355, 356, 1228, 357,
310, 328, 358, 359, 322, 336, 331, 351, 342, 370,
356, 372, 373, 360, 360, 365, 363, 378, 1228, 360,
366, 370, 363, 358, 351, 400, 401, 390, 404, 1228,
377, 378, 379, 378, 380, 412, 413, 400, 444, 382,
417, 1228, 399, 408, 397, 398, 409, 396, 445, 1228,
447, 1228, 448, 1228, 449, 398, 450, 1228, 451, 1228,
403, 453, 405, 414, 403, 456, 1228, 405, 464, 1228,
465, 1228, 437, 439, 438, 454, 446, 457, 457, 461,
477, 460, 480, 1228, 481, 1228, 467, 459, 460, 470,
471, 488, 489, 1228, 492, 1228, 464, 494, 1228, 480,
496, 475, 471, 489, 491, 475, 507, 508, 1228, 490,
486, 511, 1228, 484, 498, 514, 515, 487, 519, 502,
494, 509, 488, 498, 499, 530, 1228, 507, 503, 504,
505, 521, 536, 537, 1228, 538, 517, 541, 1228, 527,
514, 529, 530, 549, 550, 1228, 537, 553, 519, 555,
556, 1228, 557, 1228, 558, 561, 1228, 562, 535, 554,
541, 560, 574, 561, 547, 577, 578, 564, 580, 1228,
581, 1228, 556, 583, 570, 558, 561, 592, 1228, 578,
595, 1228, 596, 597, 1228, 598, 1228, 599, 1228, 600,
567, 588, 604, 611, 1228, 597, 594, 615, 1228, 616,
1228, 601, 618, 619, 1228, 591, 593, 594, 624, 627,
1228, 630, 1228, 631, 619, 633, 1228, 601, 612, 638,
639, 1228, 642, 644, 645, 646, 1228, 647, 1228, 650,
651, 636, 658, 1228, 659, 1228, 662, 1228, 663, 1228,
664, 1228, 665, 1228, 666, 667, 1228, 1228, 679, 685,
691, 697, 703, 709, 711, 717, 666, 723, 726
305, 348, 100, 101, 392, 436, 1237, 1238, 1238, 3,
1193, 1238, 0, 1211, 0, 0, 1, 0, 2, 1217,
10, 7, 1220, 1219, 1218, 1197, 79, 1196, 1211, 83,
1214, 1209, 1212, 1238, 6, 0, 1238, 1238, 0, 1216,
12, 1180, 0, 0, 1220, 1238, 95, 1178, 1238, 1238,
1238, 1212, 109, 1176, 1209, 114, 1238, 1207, 0, 95,
1190, 1194, 1183, 1192, 1199, 13, 1180, 1195, 1196, 128,
1184, 1183, 1180, 1189, 1179, 1190, 127, 1168, 1169, 3,
1168, 1171, 1180, 1167, 131, 1175, 134, 1182, 1161, 1163,
6, 1162, 1161, 118, 1238, 0, 1238, 1180, 0, 0,
1187, 1178, 1238, 1238, 1178, 1144, 1168, 1164, 1170, 1142,
1164, 1163, 1139, 1147, 1146, 1148, 1162, 1134, 1159, 1147,
1147, 1157, 123, 1152, 1144, 1150, 1149, 1141, 1145, 1139,
1145, 1140, 1127, 1142, 1145, 1140, 1126, 1115, 1126, 1136,
1112, 1127, 1134, 1127, 1131, 1114, 1129, 1115, 1114, 1122,
1102, 1123, 1126, 1113, 1096, 1095, 1238, 1100, 1122, 1097,
1120, 1114, 1091, 8, 1099, 1089, 1115, 1113, 133, 1102,
1097, 1091, 1097, 1109, 1105, 1080, 1079, 1088, 1077, 1076,
1098, 1081, 1083, 1086, 1079, 1080, 1093, 1072, 1080, 137,
1073, 1075, 1084, 1063, 1085, 1084, 1068, 1069, 1085, 1082,
1081, 1067, 1063, 1072, 1079, 1070, 0, 0, 1058, 1075,
1057, 1073, 1046, 1054, 1071, 1053, 1042, 1060, 1065, 1055,
1064, 1047, 1059, 1051, 1058, 1057, 110, 1045, 1043, 1042,
1056, 1035, 169, 1027, 1050, 1044, 1047, 155, 1037, 1035,
1021, 1020, 1023, 1025, 1025, 1016, 1018, 1026, 1035, 1037,
0, 1020, 1018, 1029, 1031, 1007, 1025, 1021, 1012, 1017,
1025, 1024, 1000, 1008, 1013, 1020, 1011, 1011, 1018, 1007,
1000, 1014, 999, 1005, 988, 1010, 1009, 985, 992, 995,
1007, 1008, 1007, 987, 992, 993, 989, 998, 981, 981,
984, 994, 978, 969, 159, 1238, 990, 994, 991, 74,
988, 972, 971, 962, 969, 972, 986, 977, 965, 171,
1238, 975, 955, 112, 954, 975, 954, 974, 969, 970,
958, 955, 970, 957, 967, 957, 965, 172, 960, 940,
939, 938, 949, 186, 948, 935, 191, 947, 933, 959,
931, 938, 937, 951, 951, 945, 938, 951, 931, 925,
948, 920, 919, 170, 937, 933, 916, 938, 921, 917,
935, 923, 170, 913, 932, 916, 921, 906, 911, 930,
917, 921, 927, 910, 922, 907, 912, 905, 909, 913,
916, 919, 906, 899, 190, 195, 1238, 916, 915, 903,
905, 912, 197, 1238, 894, 895, 202, 1238, 894, 895,
177, 905, 891, 886, 897, 876, 888, 895, 881, 896,
883, 886, 877, 880, 891, 880, 878, 880, 863, 889,
888, 868, 871, 872, 864, 875, 882, 866, 863, 872,
874, 864, 872, 858, 868, 860, 855, 857, 204, 230,
843, 231, 869, 866, 848, 847, 864, 860, 232, 1238,
857, 851, 861, 847, 840, 854, 857, 856, 844, 843,
836, 842, 851, 846, 822, 215, 846, 834, 842, 841,
824, 839, 216, 842, 827, 835, 819, 819, 834, 816,
832, 819, 833, 814, 812, 813, 816, 824, 816, 239,
823, 152, 243, 817, 816, 821, 808, 809, 244, 1238,
247, 1238, 813, 248, 1238, 808, 818, 817, 809, 811,
787, 796, 797, 792, 807, 802, 793, 788, 787, 781,
793, 795, 802, 782, 783, 786, 779, 797, 796, 795,
767, 766, 775, 774, 771, 771, 273, 784, 768, 784,
771, 767, 779, 768, 762, 776, 759, 765, 769, 274,
772, 769, 275, 766, 276, 1238, 277, 761, 760, 278,
1238, 767, 757, 758, 746, 740, 762, 747, 753, 755,
279, 745, 748, 760, 752, 754, 753, 280, 739, 263,
736, 727, 282, 732, 746, 744, 737, 749, 736, 728,
733, 739, 278, 732, 302, 303, 311, 736, 314, 1238,
725, 734, 722, 315, 737, 721, 735, 722, 718, 715,
715, 718, 316, 1238, 729, 710, 317, 1238, 710, 318,
1238, 718, 715, 665, 0, 10, 62, 74, 111, 319,
88, 144, 320, 1238, 129, 159, 183, 197, 175, 176,
322, 1238, 188, 323, 200, 220, 210, 331, 1238, 239,
236, 223, 230, 271, 273, 281, 334, 281, 276, 320,
321, 345, 1238, 346, 1238, 354, 1238, 322, 314, 357,
358, 359, 1238, 324, 360, 311, 331, 361, 362, 344,
341, 336, 362, 353, 376, 360, 377, 378, 365, 365,
370, 368, 400, 1238, 364, 369, 375, 378, 374, 366,
405, 406, 394, 408, 1238, 381, 383, 384, 383, 385,
417, 420, 404, 444, 387, 422, 1238, 404, 413, 402,
403, 413, 402, 445, 1238, 447, 1238, 404, 448, 1238,
449, 422, 451, 1238, 453, 1238, 427, 456, 435, 447,
436, 467, 1238, 440, 469, 1238, 470, 1238, 456, 444,
444, 460, 452, 467, 467, 468, 484, 466, 486, 1238,
487, 1238, 473, 465, 466, 476, 477, 493, 495, 1238,
498, 1238, 470, 500, 1238, 486, 502, 482, 477, 495,
497, 481, 513, 514, 515, 1238, 497, 493, 518, 1238,
491, 505, 521, 522, 497, 527, 511, 502, 519, 496,
506, 507, 538, 1238, 515, 511, 512, 513, 529, 544,
545, 1238, 546, 525, 549, 1238, 535, 522, 537, 538,
557, 558, 1238, 560, 1238, 546, 562, 528, 564, 565,
1238, 566, 1238, 569, 571, 1238, 573, 548, 563, 551,
569, 584, 571, 557, 587, 588, 574, 590, 1238, 591,
1238, 566, 593, 580, 568, 571, 602, 1238, 588, 605,
1238, 606, 607, 1238, 608, 1238, 609, 1238, 610, 577,
598, 614, 621, 1238, 607, 604, 625, 1238, 626, 1238,
611, 628, 629, 1238, 601, 603, 604, 634, 637, 1238,
640, 1238, 641, 629, 643, 1238, 611, 622, 648, 649,
1238, 652, 654, 655, 656, 1238, 657, 1238, 660, 661,
646, 668, 1238, 669, 1238, 672, 1238, 673, 1238, 674,
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,
929, 929, 928, 3, 929, 929, 930, 930, 931, 931,
932, 932, 933, 933, 934, 934, 928, 928, 928, 928,
928, 928, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 928, 928, 936, 928, 928, 936, 928,
936, 936, 937, 938, 928, 928, 938, 938, 928, 928,
928, 928, 928, 928, 939, 928, 928, 928, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 928, 928, 936, 928, 936, 937, 938,
928, 938, 928, 928, 939, 928, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 936, 938, 928, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 936, 938, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 928, 928, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 928,
928, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 928, 928, 935, 935, 935,
935, 935, 928, 928, 935, 935, 928, 928, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 928, 928, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 928, 928, 928, 928,
935, 928, 928, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 928, 928, 935, 935, 935, 928, 928, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 928, 928, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 928, 928,
935, 935, 928, 928, 935, 928, 928, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 928, 928,
935, 935, 935, 935, 935, 935, 928, 928, 935, 935,
935, 935, 935, 928, 928, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 928, 928, 928,
928, 928, 928, 935, 935, 935, 935, 928, 928, 935,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 928, 928, 935,
935, 935, 935, 935, 935, 935, 935, 935, 928, 928,
935, 935, 935, 935, 935, 935, 935, 935, 935, 935,
928, 928, 935, 935, 935, 935, 935, 935, 928, 928,
928, 928, 928, 928, 935, 935, 928, 928, 928, 928,
935, 935, 935, 935, 935, 928, 928, 935, 928, 928,
928, 928, 935, 935, 935, 935, 935, 935, 935, 935,
935, 935, 928, 928, 928, 928, 935, 935, 935, 935,
935, 935, 928, 928, 928, 928, 935, 928, 928, 935,
935, 935, 935, 935, 935, 935, 935, 928, 928, 935,
935, 928, 928, 935, 935, 935, 935, 935, 935, 935,
935, 935, 935, 935, 935, 928, 928, 935, 935, 935,
935, 935, 935, 928, 928, 935, 935, 928, 928, 935,
935, 935, 935, 935, 928, 928, 935, 935, 935, 935,
928, 928, 928, 928, 935, 928, 928, 935, 935, 935,
935, 935, 935, 935, 935, 935, 935, 935, 928, 928,
928, 928, 935, 935, 935, 935, 935, 928, 928, 935,
928, 928, 935, 928, 928, 928, 928, 928, 928, 935,
935, 935, 935, 928, 928, 935, 935, 928, 928, 928,
928, 935, 935, 928, 928, 935, 935, 935, 935, 928,
928, 928, 928, 935, 935, 928, 928, 935, 935, 935,
928, 928, 935, 935, 935, 928, 928, 928, 928, 935,
935, 935, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928, 928, 928, 935, 928, 928, 0, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928
938, 938, 937, 3, 938, 938, 939, 939, 940, 940,
941, 941, 942, 942, 943, 943, 937, 937, 937, 937,
937, 937, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 937, 937, 945, 937, 937, 945, 937,
945, 945, 946, 947, 937, 937, 947, 947, 937, 937,
937, 937, 937, 937, 948, 937, 937, 937, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 937, 937, 945, 937, 945, 946, 947,
937, 947, 937, 937, 948, 937, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 945, 947, 937, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 945, 947, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 937, 937, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 937,
937, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 937, 937, 944, 944, 944,
944, 944, 937, 937, 944, 944, 937, 937, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 937, 937,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 937, 937,
937, 937, 944, 937, 937, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 937, 937, 944, 944, 944, 937,
937, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 937, 937,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 937, 937, 944, 944, 937, 937, 944, 937,
937, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 937, 937, 944, 944, 944, 944, 944, 944,
937, 937, 944, 944, 944, 944, 944, 937, 937, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 937, 937, 937, 937, 937, 937, 944, 944, 944,
944, 937, 937, 944, 944, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 937, 937, 944, 944, 944, 944, 944, 944,
944, 944, 944, 937, 937, 944, 944, 944, 944, 944,
944, 944, 944, 944, 944, 937, 937, 944, 944, 944,
944, 944, 944, 937, 937, 937, 937, 944, 937, 937,
944, 944, 937, 937, 937, 937, 944, 944, 944, 944,
944, 937, 937, 944, 937, 937, 937, 937, 944, 944,
944, 944, 944, 944, 944, 944, 944, 944, 937, 937,
937, 937, 944, 944, 944, 944, 944, 944, 937, 937,
937, 937, 944, 937, 937, 944, 944, 944, 944, 944,
944, 944, 944, 944, 937, 937, 944, 944, 937, 937,
944, 944, 944, 944, 944, 944, 944, 944, 944, 944,
944, 944, 937, 937, 944, 944, 944, 944, 944, 944,
937, 937, 944, 944, 937, 937, 944, 944, 944, 944,
944, 937, 937, 937, 937, 944, 944, 944, 944, 937,
937, 937, 937, 944, 937, 937, 944, 944, 944, 944,
944, 944, 944, 944, 944, 944, 944, 937, 937, 937,
937, 944, 944, 944, 944, 944, 937, 937, 944, 937,
937, 944, 937, 937, 937, 937, 937, 937, 944, 944,
944, 944, 937, 937, 944, 944, 937, 937, 937, 937,
944, 944, 937, 937, 944, 944, 944, 944, 937, 937,
937, 937, 944, 944, 937, 937, 944, 944, 944, 937,
937, 944, 944, 944, 937, 937, 937, 937, 944, 944,
944, 937, 937, 937, 937, 937, 937, 937, 937, 937,
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,
928, 320, 19, 19, 66, 67, 66, 104, 105, 104,
928, 321, 73, 66, 67, 66, 928, 147, 74, 161,
937, 320, 19, 19, 66, 67, 66, 104, 105, 104,
937, 321, 73, 66, 67, 66, 698, 147, 74, 161,
71, 77, 81, 75, 162, 79, 76, 78, 148, 72,
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,
27, 28, 29, 30, 31, 32, 33, 23, 34, 35,
23, 36, 37, 38, 39, 40, 41, 23, 42, 43,
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,
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,
130, 140, 131, 64, 64, 231, 141, 153, 156, 290,
142, 382, 184, 253, 143, 132, 305, 154, 144, 133,
305, 157, 185, 254, 565, 232, 306, 703, 704, 51,
306, 705, 320, 396, 52, 18, 47, 18, 48, 49,
50, 296, 321, 397, 566, 435, 297, 403, 298, 469,
458, 396, 407, 436, 307, 299, 403, 404, 407, 300,
305, 157, 185, 254, 568, 232, 306, 706, 707, 51,
306, 708, 320, 396, 52, 18, 47, 18, 48, 49,
50, 296, 321, 397, 569, 436, 297, 403, 298, 470,
426, 459, 407, 437, 307, 299, 396, 404, 403, 300,
459, 397, 408, 507, 470, 509, 404, 706, 408, 707,
708, 711, 51, 508, 712, 510, 713, 52, 18, 18,
427, 460, 408, 407, 471, 509, 397, 709, 404, 710,
711, 712, 51, 408, 713, 510, 716, 52, 18, 18,
47, 18, 18, 22, 18, 18, 18, 18, 18, 18,
409, 512, 458, 535, 545, 650, 714, 536, 537, 562,
567, 513, 459, 507, 509, 538, 546, 651, 512, 563,
568, 715, 716, 508, 510, 717, 20, 18, 513, 718,
719, 21, 18, 18, 47, 18, 18, 22, 18, 18,
18, 18, 18, 18, 606, 619, 623, 562, 626, 567,
639, 647, 654, 665, 607, 620, 624, 563, 627, 568,
640, 648, 655, 666, 668, 720, 723, 724, 725, 726,
20, 18, 670, 672, 669, 21, 55, 56, 18, 48,
22, 50, 671, 673, 606, 678, 619, 623, 626, 698,
639, 647, 709, 654, 607, 679, 620, 624, 627, 699,
640, 648, 710, 655, 721, 668, 670, 672, 727, 728,
735, 736, 741, 57, 722, 669, 671, 673, 58, 55,
56, 18, 48, 22, 50, 729, 731, 678, 733, 737,
739, 742, 743, 744, 745, 730, 732, 679, 734, 738,
740, 746, 748, 749, 751, 753, 754, 755, 756, 698,
757, 747, 758, 750, 752, 759, 57, 760, 761, 699,
762, 58, 18, 18, 19, 18, 18, 18, 18, 18,
18, 763, 765, 18, 767, 709, 768, 769, 770, 771,
772, 764, 766, 773, 775, 710, 777, 781, 721, 782,
783, 784, 785, 774, 776, 786, 787, 790, 722, 791,
20, 794, 795, 796, 797, 21, 18, 18, 19, 18,
18, 18, 18, 18, 18, 778, 729, 18, 731, 733,
788, 737, 739, 798, 792, 779, 730, 746, 732, 734,
789, 738, 740, 780, 793, 749, 751, 747, 799, 800,
801, 802, 803, 804, 20, 750, 752, 805, 806, 21,
808, 763, 765, 809, 810, 811, 812, 813, 807, 814,
773, 764, 766, 775, 816, 778, 817, 818, 820, 815,
774, 821, 822, 776, 823, 779, 824, 819, 825, 788,
827, 828, 792, 829, 830, 831, 833, 835, 826, 789,
836, 838, 793, 839, 840, 832, 834, 841, 842, 843,
837, 806, 844, 845, 846, 847, 848, 849, 814, 851,
853, 807, 818, 854, 855, 856, 857, 850, 815, 852,
858, 825, 819, 860, 861, 863, 864, 831, 833, 866,
859, 826, 836, 868, 862, 870, 865, 832, 834, 867,
871, 872, 837, 869, 873, 874, 876, 877, 878, 880,
882, 849, 851, 883, 884, 875, 886, 887, 879, 881,
888, 850, 852, 858, 885, 889, 861, 890, 864, 866,
868, 892, 894, 859, 895, 896, 862, 891, 865, 867,
869, 893, 874, 898, 899, 897, 878, 880, 900, 901,
884, 903, 875, 904, 905, 906, 879, 881, 890, 902,
885, 892, 908, 910, 896, 907, 911, 912, 891, 913,
901, 893, 909, 915, 897, 917, 919, 906, 908, 914,
902, 921, 923, 916, 925, 918, 920, 907, 909, 913,
915, 922, 924, 917, 919, 921, 923, 926, 926, 914,
916, 109, 695, 918, 920, 922, 924, 927, 927, 18,
409, 511, 514, 459, 537, 547, 717, 718, 538, 539,
565, 512, 515, 460, 570, 509, 540, 548, 511, 514,
566, 719, 720, 721, 571, 510, 20, 18, 512, 515,
722, 21, 18, 18, 47, 18, 18, 22, 18, 18,
18, 18, 18, 18, 609, 623, 627, 565, 630, 570,
643, 651, 654, 658, 610, 624, 628, 566, 631, 571,
644, 652, 669, 659, 655, 723, 724, 725, 728, 729,
20, 18, 670, 672, 674, 21, 55, 56, 18, 48,
22, 50, 676, 673, 675, 609, 682, 623, 627, 630,
703, 643, 677, 651, 714, 610, 683, 624, 628, 631,
704, 644, 658, 652, 715, 726, 730, 731, 732, 733,
738, 741, 659, 57, 742, 727, 672, 674, 58, 55,
56, 18, 48, 22, 50, 676, 673, 675, 734, 736,
682, 739, 743, 745, 747, 677, 748, 749, 735, 737,
683, 740, 744, 746, 750, 751, 754, 752, 755, 757,
759, 760, 761, 762, 763, 764, 57, 753, 756, 758,
765, 58, 18, 18, 19, 18, 18, 18, 18, 18,
18, 703, 766, 18, 767, 768, 769, 771, 773, 714,
774, 704, 775, 776, 777, 778, 770, 772, 779, 715,
783, 781, 787, 726, 788, 789, 790, 791, 780, 792,
20, 782, 793, 727, 794, 21, 18, 18, 19, 18,
18, 18, 18, 18, 18, 784, 734, 18, 736, 739,
795, 797, 743, 798, 745, 785, 735, 799, 737, 740,
796, 801, 744, 786, 746, 802, 803, 800, 752, 804,
755, 757, 805, 806, 20, 807, 808, 809, 753, 21,
756, 758, 810, 811, 812, 813, 815, 769, 771, 816,
817, 818, 819, 820, 821, 814, 779, 770, 772, 781,
823, 784, 824, 825, 822, 827, 780, 828, 829, 782,
830, 785, 831, 826, 832, 834, 795, 836, 837, 799,
838, 839, 840, 842, 833, 835, 796, 844, 845, 800,
847, 848, 841, 843, 849, 850, 851, 852, 846, 813,
853, 854, 855, 856, 857, 858, 821, 860, 862, 814,
825, 863, 864, 865, 866, 859, 822, 861, 867, 832,
826, 834, 869, 870, 872, 873, 840, 842, 868, 833,
875, 835, 845, 871, 877, 874, 841, 843, 879, 880,
876, 881, 846, 882, 878, 883, 885, 886, 887, 889,
891, 858, 860, 892, 893, 884, 895, 896, 888, 890,
897, 859, 861, 867, 894, 898, 870, 899, 873, 875,
877, 901, 903, 868, 904, 905, 871, 900, 874, 876,
878, 902, 883, 907, 908, 906, 887, 889, 909, 910,
893, 912, 884, 913, 914, 915, 888, 890, 899, 911,
894, 901, 917, 919, 905, 916, 920, 921, 900, 922,
910, 902, 918, 924, 906, 926, 928, 915, 917, 923,
911, 930, 932, 925, 934, 927, 929, 916, 918, 922,
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,
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,
65, 65, 65, 65, 65, 69, 69, 106, 694, 106,
106, 106, 106, 110, 693, 692, 110, 110, 110, 115,
115, 115, 691, 690, 689, 688, 687, 686, 685, 684,
683, 682, 681, 680, 677, 676, 675, 674, 667, 664,
663, 662, 661, 660, 659, 658, 657, 656, 653, 652,
649, 646, 645, 644, 643, 642, 641, 638, 637, 636,
635, 634, 633, 632, 631, 630, 629, 628, 625, 622,
621, 618, 617, 616, 615, 614, 613, 612, 611, 610,
609, 608, 605, 604, 603, 602, 601, 600, 599, 598,
597, 596, 595, 594, 593, 592, 591, 590, 589, 588,
587, 586, 585, 584, 583, 582, 581, 580, 579, 578,
577, 576, 575, 574, 573, 572, 571, 570, 569, 564,
561, 560, 559, 558, 557, 556, 555, 554, 553, 552,
551, 550, 549, 548, 547, 544, 543, 542, 541, 540,
539, 534, 533, 532, 531, 530, 529, 528, 527, 526,
525, 524, 523, 522, 521, 520, 519, 518, 517, 516,
515, 514, 511, 506, 505, 504, 503, 502, 501, 500,
499, 498, 497, 496, 495, 494, 493, 492, 491, 490,
489, 488, 487, 486, 485, 484, 483, 482, 481, 480,
479, 478, 477, 476, 475, 474, 473, 472, 471, 468,
467, 466, 465, 464, 463, 462, 461, 460, 457, 456,
455, 454, 453, 452, 451, 450, 449, 448, 447, 446,
445, 444, 443, 442, 441, 440, 439, 438, 437, 434,
433, 432, 431, 430, 429, 428, 427, 426, 425, 424,
65, 65, 65, 65, 65, 69, 69, 106, 696, 106,
106, 106, 106, 110, 695, 694, 110, 110, 110, 115,
115, 115, 693, 692, 691, 690, 689, 688, 687, 686,
685, 684, 681, 680, 679, 678, 671, 668, 667, 666,
665, 664, 663, 662, 661, 660, 657, 656, 653, 650,
649, 648, 647, 646, 645, 642, 641, 640, 639, 638,
637, 636, 635, 634, 633, 632, 629, 626, 625, 622,
621, 620, 619, 618, 617, 616, 615, 614, 613, 612,
611, 608, 607, 606, 605, 604, 603, 602, 601, 600,
599, 598, 597, 596, 595, 594, 593, 592, 591, 590,
589, 588, 587, 586, 585, 584, 583, 582, 581, 580,
579, 578, 577, 576, 575, 574, 573, 572, 567, 564,
563, 562, 561, 560, 559, 558, 557, 556, 555, 554,
553, 552, 551, 550, 549, 546, 545, 544, 543, 542,
541, 536, 535, 534, 533, 532, 531, 530, 529, 528,
527, 526, 525, 524, 523, 522, 521, 520, 519, 518,
517, 516, 513, 508, 507, 506, 505, 504, 503, 502,
501, 500, 499, 498, 497, 496, 495, 494, 493, 492,
491, 490, 489, 488, 487, 486, 485, 484, 483, 482,
481, 480, 479, 478, 477, 476, 475, 474, 473, 472,
469, 468, 467, 466, 465, 464, 463, 462, 461, 458,
457, 456, 455, 454, 453, 452, 451, 450, 449, 448,
447, 446, 445, 444, 443, 442, 441, 440, 439, 438,
435, 434, 433, 432, 431, 430, 429, 428, 425, 424,
423, 422, 421, 420, 419, 418, 417, 416, 415, 414,
413, 412, 411, 410, 406, 405, 402, 401, 400, 399,
398, 395, 394, 393, 392, 391, 390, 389, 388, 387,
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,
352, 351, 350, 349, 348, 347, 346, 345, 344, 343,
342, 341, 340, 339, 338, 337, 336, 335, 334, 333,
......@@ -786,8 +790,8 @@ static yyconst short int yy_nxt[1273] =
292, 291, 288, 287, 286, 285, 284, 283, 282, 281,
280, 279, 278, 277, 276, 275, 274, 273, 272, 271,
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,
238, 237, 236, 235, 234, 233, 230, 229, 228, 227,
224, 223, 222, 221, 220, 219, 218, 217, 216, 215,
......@@ -797,130 +801,131 @@ static yyconst short int yy_nxt[1273] =
182, 181, 180, 179, 178, 177, 176, 175, 174, 173,
172, 171, 170, 169, 168, 167, 114, 166, 111, 165,
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,
112, 111, 108, 107, 103, 102, 101, 97, 96, 91,
90, 89, 88, 83, 70, 68, 928, 17, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928
90, 89, 88, 83, 70, 68, 937, 17, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937
} ;
static yyconst short int yy_chk[1273] =
static yyconst short int yy_chk[1283] =
{ 0,
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,
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, 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,
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,
80, 87, 80, 13, 14, 179, 87, 95, 97, 237,
87, 324, 133, 200, 87, 80, 248, 95, 87, 80,
305, 97, 133, 200, 500, 179, 248, 642, 643, 7,
305, 644, 320, 338, 7, 8, 8, 8, 8, 8,
8, 243, 320, 338, 500, 373, 243, 344, 243, 411,
395, 396, 347, 373, 248, 243, 403, 344, 407, 243,
305, 97, 133, 200, 502, 179, 248, 642, 645, 7,
305, 646, 320, 338, 7, 8, 8, 8, 8, 8,
8, 243, 320, 338, 502, 373, 243, 344, 243, 411,
364, 395, 347, 373, 248, 243, 396, 344, 403, 243,
395, 396, 347, 448, 411, 449, 403, 645, 407, 646,
649, 651, 8, 448, 652, 449, 653, 8, 9, 9,
364, 395, 347, 407, 411, 449, 396, 647, 403, 648,
649, 650, 8, 407, 653, 449, 655, 8, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
347, 451, 458, 475, 482, 587, 656, 475, 475, 498,
501, 451, 458, 507, 509, 475, 482, 587, 512, 498,
501, 657, 658, 507, 509, 659, 9, 9, 512, 660,
661, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 545, 557, 560, 562, 564, 567,
578, 585, 590, 600, 545, 557, 560, 562, 564, 567,
578, 585, 590, 600, 602, 662, 664, 665, 666, 667,
10, 10, 603, 604, 602, 10, 11, 11, 11, 11,
11, 11, 603, 604, 606, 611, 619, 623, 626, 636,
639, 647, 650, 654, 606, 611, 619, 623, 626, 636,
639, 647, 650, 654, 663, 668, 670, 672, 674, 675,
681, 682, 685, 11, 663, 668, 670, 672, 11, 12,
12, 12, 12, 12, 12, 676, 677, 678, 680, 683,
684, 686, 687, 688, 689, 676, 677, 678, 680, 683,
684, 690, 691, 692, 693, 694, 695, 696, 697, 698,
700, 690, 701, 692, 693, 702, 12, 703, 704, 698,
705, 12, 15, 15, 15, 15, 15, 15, 15, 15,
15, 706, 707, 15, 708, 709, 711, 712, 713, 714,
715, 706, 707, 716, 717, 709, 718, 720, 721, 723,
724, 725, 726, 716, 717, 727, 728, 736, 721, 741,
15, 743, 744, 745, 748, 15, 16, 16, 16, 16,
16, 16, 16, 16, 16, 719, 729, 16, 731, 733,
735, 737, 739, 753, 742, 719, 729, 746, 731, 733,
735, 737, 739, 719, 742, 749, 751, 746, 754, 755,
756, 757, 758, 759, 16, 749, 751, 760, 761, 16,
762, 763, 765, 767, 768, 769, 770, 771, 761, 772,
773, 763, 765, 775, 777, 778, 780, 781, 782, 772,
773, 783, 784, 775, 785, 778, 786, 781, 787, 788,
790, 791, 792, 794, 795, 796, 797, 798, 787, 788,
799, 800, 792, 801, 802, 796, 797, 803, 804, 805,
799, 806, 808, 809, 810, 811, 812, 813, 814, 816,
817, 806, 818, 820, 821, 822, 823, 813, 814, 816,
824, 825, 818, 827, 828, 829, 830, 831, 833, 835,
824, 825, 836, 838, 828, 839, 830, 831, 833, 835,
840, 841, 836, 838, 842, 843, 844, 845, 846, 847,
848, 849, 851, 853, 854, 843, 855, 856, 846, 847,
857, 849, 851, 858, 854, 860, 861, 863, 864, 866,
868, 870, 871, 858, 872, 873, 861, 863, 864, 866,
868, 870, 874, 876, 877, 873, 878, 880, 882, 883,
884, 886, 874, 887, 888, 889, 878, 880, 890, 883,
884, 892, 894, 895, 896, 889, 898, 899, 890, 900,
901, 892, 894, 903, 896, 904, 905, 906, 908, 900,
901, 910, 911, 903, 912, 904, 905, 906, 908, 913,
915, 910, 911, 917, 919, 921, 923, 925, 926, 913,
915, 937, 633, 917, 919, 921, 923, 925, 926, 929,
929, 929, 929, 929, 929, 930, 930, 930, 930, 930,
930, 931, 931, 931, 931, 931, 931, 932, 932, 932,
932, 932, 932, 933, 933, 933, 933, 933, 933, 934,
934, 934, 934, 934, 934, 935, 935, 936, 632, 936,
936, 936, 936, 938, 631, 630, 938, 938, 938, 939,
939, 939, 629, 628, 625, 622, 621, 618, 617, 616,
615, 614, 613, 612, 610, 609, 608, 605, 601, 599,
598, 597, 596, 595, 594, 593, 592, 591, 589, 588,
586, 584, 583, 582, 581, 580, 579, 577, 576, 575,
574, 573, 572, 571, 570, 569, 566, 565, 561, 559,
558, 556, 555, 554, 553, 552, 551, 550, 549, 548,
547, 546, 544, 543, 542, 541, 540, 539, 538, 537,
536, 535, 534, 533, 532, 531, 530, 529, 528, 527,
526, 525, 524, 523, 522, 521, 520, 519, 518, 517,
516, 515, 514, 511, 506, 505, 504, 503, 502, 499,
497, 496, 495, 494, 493, 492, 491, 490, 489, 488,
487, 486, 485, 484, 483, 481, 480, 479, 478, 477,
476, 474, 473, 472, 471, 470, 469, 468, 467, 466,
465, 464, 463, 462, 461, 460, 457, 456, 455, 454,
453, 452, 450, 447, 446, 445, 444, 443, 442, 441,
440, 439, 438, 437, 436, 435, 434, 433, 432, 431,
430, 429, 428, 427, 426, 425, 424, 423, 422, 421,
420, 419, 418, 417, 416, 415, 414, 413, 412, 410,
409, 406, 405, 402, 401, 400, 399, 398, 394, 393,
392, 391, 390, 389, 388, 387, 386, 385, 384, 383,
382, 381, 380, 379, 378, 377, 376, 375, 374, 372,
371, 370, 369, 368, 367, 366, 365, 364, 363, 362,
347, 450, 452, 459, 476, 483, 656, 657, 476, 476,
500, 450, 452, 459, 503, 509, 476, 483, 511, 514,
500, 660, 661, 662, 503, 509, 9, 9, 511, 514,
663, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 547, 560, 563, 565, 567, 570,
581, 588, 590, 593, 547, 560, 563, 565, 567, 570,
581, 588, 603, 593, 590, 664, 665, 666, 668, 669,
10, 10, 603, 605, 606, 10, 11, 11, 11, 11,
11, 11, 607, 605, 606, 609, 614, 623, 627, 630,
640, 643, 607, 651, 654, 609, 614, 623, 627, 630,
640, 643, 658, 651, 654, 667, 670, 671, 678, 679,
684, 686, 658, 11, 687, 667, 672, 674, 11, 12,
12, 12, 12, 12, 12, 676, 672, 674, 680, 681,
682, 685, 688, 689, 690, 676, 691, 692, 680, 681,
682, 685, 688, 689, 693, 694, 696, 695, 697, 698,
699, 700, 701, 702, 705, 706, 12, 695, 697, 698,
707, 12, 15, 15, 15, 15, 15, 15, 15, 15,
15, 703, 708, 15, 709, 710, 711, 712, 713, 714,
716, 703, 717, 718, 719, 720, 711, 712, 721, 714,
723, 722, 725, 726, 728, 729, 730, 731, 721, 732,
15, 722, 733, 726, 738, 15, 16, 16, 16, 16,
16, 16, 16, 16, 16, 724, 734, 16, 736, 739,
741, 742, 743, 747, 745, 724, 734, 748, 736, 739,
741, 749, 743, 724, 745, 750, 751, 748, 752, 754,
755, 757, 759, 760, 16, 761, 762, 763, 752, 16,
755, 757, 764, 765, 766, 767, 768, 769, 771, 773,
774, 775, 776, 777, 778, 767, 779, 769, 771, 781,
783, 784, 786, 787, 778, 788, 779, 789, 790, 781,
791, 784, 792, 787, 793, 794, 795, 797, 798, 799,
801, 802, 803, 804, 793, 794, 795, 805, 806, 799,
807, 808, 803, 804, 809, 810, 811, 812, 806, 813,
815, 816, 817, 818, 819, 820, 821, 823, 824, 813,
825, 827, 828, 829, 830, 820, 821, 823, 831, 832,
825, 834, 836, 837, 838, 839, 840, 842, 831, 832,
844, 834, 845, 837, 847, 839, 840, 842, 848, 849,
844, 850, 845, 851, 847, 852, 853, 854, 855, 856,
857, 858, 860, 862, 863, 852, 864, 865, 855, 856,
866, 858, 860, 867, 863, 869, 870, 872, 873, 875,
877, 879, 880, 867, 881, 882, 870, 872, 873, 875,
877, 879, 883, 885, 886, 882, 887, 889, 891, 892,
893, 895, 883, 896, 897, 898, 887, 889, 899, 892,
893, 901, 903, 904, 905, 898, 907, 908, 899, 909,
910, 901, 903, 912, 905, 913, 914, 915, 917, 909,
910, 919, 920, 912, 921, 913, 914, 915, 917, 922,
924, 919, 920, 926, 928, 930, 932, 934, 935, 922,
924, 946, 634, 926, 928, 930, 932, 934, 935, 938,
938, 938, 938, 938, 938, 939, 939, 939, 939, 939,
939, 940, 940, 940, 940, 940, 940, 941, 941, 941,
941, 941, 941, 942, 942, 942, 942, 942, 942, 943,
943, 943, 943, 943, 943, 944, 944, 945, 633, 945,
945, 945, 945, 947, 632, 629, 947, 947, 947, 948,
948, 948, 626, 625, 622, 621, 620, 619, 618, 617,
616, 615, 613, 612, 611, 608, 604, 602, 601, 600,
599, 598, 597, 596, 595, 594, 592, 591, 589, 587,
586, 585, 584, 583, 582, 580, 579, 578, 577, 576,
575, 574, 573, 572, 569, 568, 564, 562, 561, 559,
558, 557, 556, 555, 554, 553, 552, 551, 550, 549,
548, 546, 545, 544, 543, 542, 541, 540, 539, 538,
537, 536, 535, 534, 533, 532, 531, 530, 529, 528,
527, 526, 525, 524, 523, 522, 521, 520, 519, 518,
517, 516, 513, 508, 507, 506, 505, 504, 501, 499,
498, 497, 496, 495, 494, 493, 492, 491, 490, 489,
488, 487, 486, 485, 484, 482, 481, 480, 479, 478,
477, 475, 474, 473, 472, 471, 470, 469, 468, 467,
466, 465, 464, 463, 462, 461, 458, 457, 456, 455,
454, 453, 451, 448, 447, 446, 445, 444, 443, 442,
441, 440, 439, 438, 437, 436, 435, 434, 433, 432,
431, 430, 429, 428, 427, 426, 425, 424, 423, 422,
421, 420, 419, 418, 417, 416, 415, 414, 413, 412,
410, 409, 406, 405, 402, 401, 400, 399, 398, 394,
393, 392, 391, 390, 389, 388, 387, 386, 385, 384,
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,
351, 350, 349, 348, 346, 345, 343, 342, 341, 340,
339, 337, 336, 335, 334, 333, 332, 331, 330, 329,
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,
292, 291, 290, 289, 288, 287, 286, 285, 284, 283,
282, 281, 280, 279, 278, 277, 276, 275, 274, 273,
......@@ -930,8 +935,8 @@ static yyconst short int yy_chk[1273] =
239, 238, 236, 235, 234, 233, 232, 231, 230, 229,
228, 227, 226, 225, 224, 223, 222, 221, 220, 219,
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,
185, 184, 183, 182, 181, 180, 178, 177, 176, 175,
173, 172, 171, 170, 169, 168, 166, 165, 164, 163,
......@@ -941,16 +946,16 @@ static yyconst short int yy_chk[1273] =
131, 130, 129, 128, 127, 126, 125, 124, 123, 122,
121, 120, 119, 118, 117, 116, 115, 112, 111, 108,
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,
58, 55, 52, 50, 43, 42, 41, 39, 38, 36,
35, 34, 33, 30, 24, 21, 17, 928, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928, 928, 928, 928, 928, 928, 928, 928, 928,
928, 928
35, 34, 33, 30, 24, 21, 17, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937
} ;
static yy_state_type yy_last_accepting_state;
......@@ -1085,6 +1090,7 @@ bool Config::htmlHelpFlag = FALSE;
bool Config::alphaIndexFlag = FALSE;
bool Config::pdfHyperFlag = FALSE;
bool Config::alwaysDetailsFlag = FALSE;
bool Config::inlineSourceFlag = FALSE;
bool Config::autoBriefFlag = TRUE;
bool Config::warningFlag = TRUE;
bool Config::generateHtml = TRUE;
......@@ -1300,7 +1306,7 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
#line 184 "config.l"
#line 185 "config.l"
......@@ -1353,13 +1359,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != 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_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
while ( yy_base[yy_current_state] != 1228 );
while ( yy_base[yy_current_state] != 1238 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
......@@ -1387,382 +1393,387 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
#line 186 "config.l"
#line 187 "config.l"
YY_BREAK
case 2:
YY_RULE_SETUP
#line 187 "config.l"
#line 188 "config.l"
{ BEGIN(SkipComment); }
YY_BREAK
case 3:
YY_RULE_SETUP
#line 188 "config.l"
#line 189 "config.l"
{ BEGIN(GetString); s=&Config::projectName; }
YY_BREAK
case 4:
YY_RULE_SETUP
#line 189 "config.l"
#line 190 "config.l"
{ BEGIN(GetString); s=&Config::projectNumber; }
YY_BREAK
case 5:
YY_RULE_SETUP
#line 190 "config.l"
#line 191 "config.l"
{ BEGIN(GetString); s=&Config::outputDir; }
YY_BREAK
case 6:
YY_RULE_SETUP
#line 191 "config.l"
#line 192 "config.l"
{ BEGIN(GetString); s=&Config::htmlOutputDir; }
YY_BREAK
case 7:
YY_RULE_SETUP
#line 192 "config.l"
#line 193 "config.l"
{ BEGIN(GetString); s=&Config::manOutputDir; }
YY_BREAK
case 8:
YY_RULE_SETUP
#line 193 "config.l"
#line 194 "config.l"
{ BEGIN(GetString); s=&Config::latexOutputDir; }
YY_BREAK
case 9:
YY_RULE_SETUP
#line 194 "config.l"
#line 195 "config.l"
{ BEGIN(GetString); s=&Config::headerFile; }
YY_BREAK
case 10:
YY_RULE_SETUP
#line 195 "config.l"
#line 196 "config.l"
{ BEGIN(GetString); s=&Config::footerFile; }
YY_BREAK
case 11:
YY_RULE_SETUP
#line 196 "config.l"
#line 197 "config.l"
{ BEGIN(GetString); s=&Config::latexHeaderFile; }
YY_BREAK
case 12:
YY_RULE_SETUP
#line 197 "config.l"
#line 198 "config.l"
{ BEGIN(GetString); s=&Config::cgiName; }
YY_BREAK
case 13:
YY_RULE_SETUP
#line 198 "config.l"
#line 199 "config.l"
{ BEGIN(GetString); s=&Config::cgiURL; }
YY_BREAK
case 14:
YY_RULE_SETUP
#line 199 "config.l"
#line 200 "config.l"
{ BEGIN(GetString); s=&Config::docURL; }
YY_BREAK
case 15:
YY_RULE_SETUP
#line 200 "config.l"
#line 201 "config.l"
{ BEGIN(GetString); s=&Config::binAbsPath; }
YY_BREAK
case 16:
YY_RULE_SETUP
#line 201 "config.l"
#line 202 "config.l"
{ BEGIN(GetString); s=&Config::docAbsPath; }
YY_BREAK
case 17:
YY_RULE_SETUP
#line 202 "config.l"
#line 203 "config.l"
{ BEGIN(GetString); s=&Config::perlPath; }
YY_BREAK
case 18:
YY_RULE_SETUP
#line 203 "config.l"
#line 204 "config.l"
{ BEGIN(GetString); s=&Config::genTagFile; }
YY_BREAK
case 19:
YY_RULE_SETUP
#line 204 "config.l"
#line 205 "config.l"
{ BEGIN(GetString); s=&Config::inputFilter; }
YY_BREAK
case 20:
YY_RULE_SETUP
#line 205 "config.l"
#line 206 "config.l"
{ BEGIN(GetString); s=&Config::paperType; }
YY_BREAK
case 21:
YY_RULE_SETUP
#line 206 "config.l"
#line 207 "config.l"
{ BEGIN(GetString); s=&Config::outputLanguage; }
YY_BREAK
case 22:
YY_RULE_SETUP
#line 207 "config.l"
#line 208 "config.l"
{ BEGIN(GetString); s=&Config::manExtension; }
YY_BREAK
case 23:
YY_RULE_SETUP
#line 208 "config.l"
#line 209 "config.l"
{ BEGIN(GetString); s=&tabSizeString; }
YY_BREAK
case 24:
YY_RULE_SETUP
#line 209 "config.l"
#line 210 "config.l"
{ BEGIN(GetString); s=&Config::htmlStyleSheet; }
YY_BREAK
case 25:
YY_RULE_SETUP
#line 210 "config.l"
#line 211 "config.l"
{ BEGIN(GetString); s=&colsInAlphaIndexString; }
YY_BREAK
case 26:
YY_RULE_SETUP
#line 211 "config.l"
#line 212 "config.l"
{ BEGIN(GetStrList); l=&Config::includePath; elemStr=""; }
YY_BREAK
case 27:
YY_RULE_SETUP
#line 212 "config.l"
#line 213 "config.l"
{ BEGIN(GetStrList); l=&Config::examplePath; elemStr=""; }
YY_BREAK
case 28:
YY_RULE_SETUP
#line 213 "config.l"
#line 214 "config.l"
{ BEGIN(GetStrList); l=&Config::imagePath; elemStr=""; }
YY_BREAK
case 29:
YY_RULE_SETUP
#line 214 "config.l"
#line 215 "config.l"
{ BEGIN(GetStrList); l=&Config::inputSources; elemStr=""; }
YY_BREAK
case 30:
YY_RULE_SETUP
#line 215 "config.l"
#line 216 "config.l"
{ BEGIN(GetStrList); l=&Config::excludeSources; elemStr=""; }
YY_BREAK
case 31:
YY_RULE_SETUP
#line 216 "config.l"
#line 217 "config.l"
{ BEGIN(GetStrList); l=&Config::filePatternList; elemStr=""; }
YY_BREAK
case 32:
YY_RULE_SETUP
#line 217 "config.l"
#line 218 "config.l"
{ BEGIN(GetStrList); l=&Config::excludePatternList; elemStr=""; }
YY_BREAK
case 33:
YY_RULE_SETUP
#line 218 "config.l"
#line 219 "config.l"
{ BEGIN(GetStrList); l=&Config::examplePatternList; elemStr=""; }
YY_BREAK
case 34:
YY_RULE_SETUP
#line 219 "config.l"
#line 220 "config.l"
{ BEGIN(GetStrList); l=&Config::imagePatternList; elemStr=""; }
YY_BREAK
case 35:
YY_RULE_SETUP
#line 220 "config.l"
#line 221 "config.l"
{ BEGIN(GetStrList); l=&Config::tagFileList; elemStr=""; }
YY_BREAK
case 36:
YY_RULE_SETUP
#line 221 "config.l"
#line 222 "config.l"
{ BEGIN(GetStrList); l=&Config::extDocPathList; elemStr=""; }
YY_BREAK
case 37:
YY_RULE_SETUP
#line 222 "config.l"
#line 223 "config.l"
{ BEGIN(GetStrList); l=&Config::predefined; elemStr=""; }
YY_BREAK
case 38:
YY_RULE_SETUP
#line 223 "config.l"
#line 224 "config.l"
{ BEGIN(GetStrList); l=&Config::extraPackageList; elemStr=""; }
YY_BREAK
case 39:
YY_RULE_SETUP
#line 224 "config.l"
#line 225 "config.l"
{ BEGIN(GetStrList); l=&Config::stripFromPath; elemStr=""; }
YY_BREAK
case 40:
YY_RULE_SETUP
#line 225 "config.l"
#line 226 "config.l"
{ BEGIN(GetBool); b=&Config::quietFlag; }
YY_BREAK
case 41:
YY_RULE_SETUP
#line 226 "config.l"
#line 227 "config.l"
{ BEGIN(GetBool); b=&Config::warningFlag; }
YY_BREAK
case 42:
YY_RULE_SETUP
#line 227 "config.l"
#line 228 "config.l"
{ BEGIN(GetBool); b=&Config::recursiveFlag; }
YY_BREAK
case 43:
YY_RULE_SETUP
#line 228 "config.l"
#line 229 "config.l"
{ BEGIN(GetBool); b=&Config::allExtFlag; }
YY_BREAK
case 44:
YY_RULE_SETUP
#line 229 "config.l"
#line 230 "config.l"
{ BEGIN(GetBool); b=&Config::searchEngineFlag; }
YY_BREAK
case 45:
YY_RULE_SETUP
#line 230 "config.l"
#line 231 "config.l"
{ BEGIN(GetBool); b=&Config::extractAllFlag; }
YY_BREAK
case 46:
YY_RULE_SETUP
#line 231 "config.l"
#line 232 "config.l"
{ BEGIN(GetBool); b=&Config::extractPrivateFlag; }
YY_BREAK
case 47:
YY_RULE_SETUP
#line 232 "config.l"
#line 233 "config.l"
{ BEGIN(GetBool); b=&Config::noIndexFlag; }
YY_BREAK
case 48:
YY_RULE_SETUP
#line 233 "config.l"
#line 234 "config.l"
{ BEGIN(GetBool); b=&Config::generateLatex; }
YY_BREAK
case 49:
YY_RULE_SETUP
#line 234 "config.l"
#line 235 "config.l"
{ BEGIN(GetBool); b=&Config::generateHtml; }
YY_BREAK
case 50:
YY_RULE_SETUP
#line 235 "config.l"
#line 236 "config.l"
{ BEGIN(GetBool); b=&Config::generateMan; }
YY_BREAK
case 51:
YY_RULE_SETUP
#line 236 "config.l"
#line 237 "config.l"
{ BEGIN(GetBool); b=&Config::preprocessingFlag; }
YY_BREAK
case 52:
YY_RULE_SETUP
#line 237 "config.l"
#line 238 "config.l"
{ BEGIN(GetBool); b=&Config::macroExpansionFlag; }
YY_BREAK
case 53:
YY_RULE_SETUP
#line 238 "config.l"
#line 239 "config.l"
{ BEGIN(GetBool); b=&Config::searchIncludeFlag; }
YY_BREAK
case 54:
YY_RULE_SETUP
#line 239 "config.l"
#line 240 "config.l"
{ BEGIN(GetBool); b=&Config::briefMemDescFlag; }
YY_BREAK
case 55:
YY_RULE_SETUP
#line 240 "config.l"
#line 241 "config.l"
{ BEGIN(GetBool); b=&Config::alwaysDetailsFlag; }
YY_BREAK
case 56:
YY_RULE_SETUP
#line 241 "config.l"
#line 242 "config.l"
{ BEGIN(GetBool); b=&Config::hideMemberFlag; }
YY_BREAK
case 57:
YY_RULE_SETUP
#line 242 "config.l"
#line 243 "config.l"
{ BEGIN(GetBool); b=&Config::hideClassFlag; }
YY_BREAK
case 58:
YY_RULE_SETUP
#line 243 "config.l"
#line 244 "config.l"
{ BEGIN(GetBool); b=&Config::onlyPredefinedFlag; }
YY_BREAK
case 59:
YY_RULE_SETUP
#line 244 "config.l"
#line 245 "config.l"
{ BEGIN(GetBool); b=&Config::fullPathNameFlag; }
YY_BREAK
case 60:
YY_RULE_SETUP
#line 245 "config.l"
#line 246 "config.l"
{ BEGIN(GetBool); b=&Config::classDiagramFlag; }
YY_BREAK
case 61:
YY_RULE_SETUP
#line 246 "config.l"
#line 247 "config.l"
{ BEGIN(GetBool); b=&Config::compactLatexFlag; }
YY_BREAK
case 62:
YY_RULE_SETUP
#line 247 "config.l"
#line 248 "config.l"
{ BEGIN(GetBool); b=&Config::repeatBriefFlag; }
YY_BREAK
case 63:
YY_RULE_SETUP
#line 248 "config.l"
#line 249 "config.l"
{ BEGIN(GetBool); b=&Config::internalDocsFlag; }
YY_BREAK
case 64:
YY_RULE_SETUP
#line 249 "config.l"
#line 250 "config.l"
{ BEGIN(GetBool); b=&Config::caseSensitiveNames; }
YY_BREAK
case 65:
YY_RULE_SETUP
#line 250 "config.l"
#line 251 "config.l"
{ BEGIN(GetBool); b=&Config::verbatimHeaderFlag; }
YY_BREAK
case 66:
YY_RULE_SETUP
#line 251 "config.l"
#line 252 "config.l"
{ BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; }
YY_BREAK
case 67:
YY_RULE_SETUP
#line 252 "config.l"
#line 253 "config.l"
{ BEGIN(GetBool); b=&Config::sourceBrowseFlag; }
YY_BREAK
case 68:
YY_RULE_SETUP
#line 253 "config.l"
#line 254 "config.l"
{ BEGIN(GetBool); b=&Config::autoBriefFlag; }
YY_BREAK
case 69:
YY_RULE_SETUP
#line 254 "config.l"
#line 255 "config.l"
{ BEGIN(GetBool); b=&Config::htmlHelpFlag; }
YY_BREAK
case 70:
YY_RULE_SETUP
#line 255 "config.l"
#line 256 "config.l"
{ BEGIN(GetBool); b=&Config::alphaIndexFlag; }
YY_BREAK
case 71:
YY_RULE_SETUP
#line 256 "config.l"
#line 257 "config.l"
{ BEGIN(GetBool); b=&Config::pdfHyperFlag; }
YY_BREAK
case 72:
YY_RULE_SETUP
#line 257 "config.l"
#line 258 "config.l"
{ BEGIN(GetBool); b=&Config::inheritDocsFlag; }
YY_BREAK
case 73:
YY_RULE_SETUP
#line 258 "config.l"
#line 259 "config.l"
{ BEGIN(GetBool); b=&Config::inlineInfoFlag; }
YY_BREAK
case 74:
YY_RULE_SETUP
#line 259 "config.l"
{ err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
#line 260 "config.l"
{ BEGIN(GetBool); b=&Config::inlineSourceFlag; }
YY_BREAK
case 75:
YY_RULE_SETUP
#line 260 "config.l"
{ yyLineNr++; BEGIN(Start); }
#line 261 "config.l"
{ err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
YY_BREAK
case 76:
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++;
if (elemStr.length()>0)
......@@ -1773,9 +1784,9 @@ YY_RULE_SETUP
BEGIN(Start);
}
YY_BREAK
case 77:
case 78:
YY_RULE_SETUP
#line 270 "config.l"
#line 272 "config.l"
{
if (elemStr.length()>0)
{
......@@ -1785,31 +1796,31 @@ YY_RULE_SETUP
elemStr.resize(0);
}
YY_BREAK
case 78:
case 79:
YY_RULE_SETUP
#line 278 "config.l"
#line 280 "config.l"
{ (*s)+=yytext; }
YY_BREAK
case 79:
case 80:
YY_RULE_SETUP
#line 279 "config.l"
#line 281 "config.l"
{ lastState=YY_START;
BEGIN(GetQuotedString);
tmpString.resize(0);
}
YY_BREAK
case 80:
case 81:
YY_RULE_SETUP
#line 283 "config.l"
#line 285 "config.l"
{
//printf(">> Enter env\n");
lastEnvState=YY_START;
BEGIN(GetEnvVar);
}
YY_BREAK
case 81:
case 82:
YY_RULE_SETUP
#line 288 "config.l"
#line 290 "config.l"
{
yytext[yyleng-1]='\0';
const char *env=getenv(yytext);
......@@ -1820,9 +1831,9 @@ YY_RULE_SETUP
BEGIN(lastEnvState);
}
YY_BREAK
case 82:
case 83:
YY_RULE_SETUP
#line 297 "config.l"
#line 299 "config.l"
{
//printf("Quoted String = `%s'\n",tmpString.data());
if (lastState==GetString)
......@@ -1837,21 +1848,21 @@ YY_RULE_SETUP
BEGIN(lastState);
}
YY_BREAK
case 83:
case 84:
YY_RULE_SETUP
#line 310 "config.l"
#line 312 "config.l"
{
tmpString+='"';
}
YY_BREAK
case 84:
case 85:
YY_RULE_SETUP
#line 313 "config.l"
#line 315 "config.l"
{ tmpString+=*yytext; }
YY_BREAK
case 85:
case 86:
YY_RULE_SETUP
#line 314 "config.l"
#line 316 "config.l"
{
QCString bs=yytext;
bs=bs.upper();
......@@ -1868,41 +1879,41 @@ YY_RULE_SETUP
}
}
YY_BREAK
case 86:
case 87:
YY_RULE_SETUP
#line 329 "config.l"
#line 331 "config.l"
{
elemStr+=yytext;
}
YY_BREAK
case 87:
YY_RULE_SETUP
#line 332 "config.l"
{ yyLineNr++; BEGIN(Start); }
YY_BREAK
case 88:
YY_RULE_SETUP
#line 333 "config.l"
#line 334 "config.l"
{ yyLineNr++; BEGIN(Start); }
YY_BREAK
case 89:
YY_RULE_SETUP
#line 334 "config.l"
{ yyLineNr++; }
#line 335 "config.l"
{ yyLineNr++; BEGIN(Start); }
YY_BREAK
case 90:
YY_RULE_SETUP
#line 335 "config.l"
#line 336 "config.l"
{ yyLineNr++; }
YY_BREAK
case 91:
YY_RULE_SETUP
#line 336 "config.l"
{ yyLineNr++ ; }
#line 337 "config.l"
YY_BREAK
case 92:
YY_RULE_SETUP
#line 338 "config.l"
{ yyLineNr++ ; }
YY_BREAK
case 93:
YY_RULE_SETUP
#line 340 "config.l"
ECHO;
YY_BREAK
case YY_STATE_EOF(INITIAL):
......@@ -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 )
{
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_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
......@@ -2238,11 +2249,11 @@ yy_state_type 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];
if ( yy_current_state >= 929 )
if ( yy_current_state >= 938 )
yy_c = yy_meta[(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;
}
......@@ -2797,7 +2808,7 @@ int main()
return 0;
}
#endif
#line 338 "config.l"
#line 340 "config.l"
/*@ ----------------------------------------------------------------------------
......@@ -2911,6 +2922,7 @@ void Config::init()
Config::alphaIndexFlag = FALSE;
Config::pdfHyperFlag = FALSE;
Config::alwaysDetailsFlag = FALSE;
Config::inlineSourceFlag = FALSE;
Config::warningFlag = TRUE;
Config::generateHtml = TRUE;
Config::generateLatex = TRUE;
......@@ -3114,13 +3126,20 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# If the SOURCE_BROWSER tag is set to YES than the body of a member or\n";
t << "# function will be appended as a block of code to the documentation of.\n";
t << "# that member or function.\n";
t << "# If the SOURCE_BROWSER tag is set to YES then a list of source files will\n";
t << "# be generated. Documented entities will be cross-referenced with these sources.\n";
t << "\n";
}
t << "SOURCE_BROWSER = NO\n";
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 << "# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen\n";
......
......@@ -102,6 +102,7 @@ struct Config
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 colsInAlphaIndex; // number of columns in the alphabetical index
static bool inlineSourceFlag; // inline the definition bodies in the docs?
};
#endif
......@@ -118,6 +118,7 @@ bool Config::htmlHelpFlag = FALSE;
bool Config::alphaIndexFlag = FALSE;
bool Config::pdfHyperFlag = FALSE;
bool Config::alwaysDetailsFlag = FALSE;
bool Config::inlineSourceFlag = FALSE;
bool Config::autoBriefFlag = TRUE;
bool Config::warningFlag = TRUE;
bool Config::generateHtml = TRUE;
......@@ -256,6 +257,7 @@ static int yyread(char *buf,int max_size)
<Start>"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; }
<Start>"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; }
<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); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
......@@ -448,6 +450,7 @@ void Config::init()
Config::alphaIndexFlag = FALSE;
Config::pdfHyperFlag = FALSE;
Config::alwaysDetailsFlag = FALSE;
Config::inlineSourceFlag = FALSE;
Config::warningFlag = TRUE;
Config::generateHtml = TRUE;
Config::generateLatex = TRUE;
......@@ -651,13 +654,20 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# If the SOURCE_BROWSER tag is set to YES than the body of a member or\n";
t << "# function will be appended as a block of code to the documentation of.\n";
t << "# that member or function.\n";
t << "# If the SOURCE_BROWSER tag is set to YES then a list of source files will\n";
t << "# be generated. Documented entities will be cross-referenced with these sources.\n";
t << "\n";
}
t << "SOURCE_BROWSER = NO\n";
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 << "# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen\n";
......
......@@ -503,7 +503,7 @@ static void addType()
//printf("addType() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data());
if (name.isEmpty() && scope.isEmpty()) return;
if (!type.isNull()) type+=' ';
if (!type.isEmpty()) type+=' ';
if (!scope.isEmpty()) type+=scope+"::";
type+=name;
scope.resize(0);
......@@ -515,7 +515,7 @@ static void addTypeName()
//printf("addTypeName() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data());
if (name.isEmpty()) return;
if (!type.isNull()) type+=' ';
if (!type.isEmpty()) type+=' ';
type+=name;
name.resize(0);
}
......
......@@ -55,7 +55,7 @@ static void addType()
//printf("addType() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data());
if (name.isEmpty() && scope.isEmpty()) return;
if (!type.isNull()) type+=' ';
if (!type.isEmpty()) type+=' ';
if (!scope.isEmpty()) type+=scope+"::";
type+=name;
scope.resize(0);
......@@ -67,7 +67,7 @@ static void addTypeName()
//printf("addTypeName() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data());
if (name.isEmpty()) return;
if (!type.isNull()) type+=' ';
if (!type.isEmpty()) type+=' ';
type+=name;
name.resize(0);
}
......
......@@ -26,7 +26,7 @@
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()
......@@ -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 */
void Definition::writeSourceRef(OutputList &ol)
void Definition::writeSourceRef(OutputList &ol,const char *scopeName)
{
//printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
if (Config::sourceBrowseFlag && bodyLine!=-1 && bodyDef)
if (Config::sourceBrowseFlag && startBodyLine!=-1 && bodyDef)
{
ol.newParagraph();
......@@ -107,8 +172,8 @@ void Definition::writeSourceRef(OutputList &ol)
if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
{
QString lineStr,anchorStr;
lineStr.sprintf("%d",bodyLine);
anchorStr.sprintf("l%05d",bodyLine);
lineStr.sprintf("%d",startBodyLine);
anchorStr.sprintf("l%05d",startBodyLine);
if (lineMarkerPos<fileMarkerPos) // line marker before file marker
{
// write text left from linePos marker
......@@ -179,14 +244,32 @@ void Definition::writeSourceRef(OutputList &ol)
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()
{
return !doc.isNull() || // has detailed docs
!brief.isNull() || // has brief description
return !doc.isEmpty() || // has detailed docs
!brief.isEmpty() || // has brief description
(Config::sourceBrowseFlag &&
bodyLine!=-1 &&
startBodyLine!=-1 &&
bodyDef
) || // has a source reference
Config::extractAllFlag; // extract everything
......
......@@ -77,15 +77,22 @@ class Definition
*/
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; }
int getBodyLine() const { return bodyLine; }
int getStartBodyLine() const { return startBodyLine; }
int getEndBodyLine() const { return endBodyLine; }
FileDef *getBodyDef() { return bodyDef; }
void writeSourceRef(OutputList &ol);
void writeSourceRef(OutputList &ol,const char *scopeName);
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
private:
QCString n; // name of the definition
QCString brief; // brief description
......
......@@ -52,6 +52,7 @@
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
#define pclose _pclose
#endif
......@@ -88,6 +89,7 @@ StringDict typedefDict(1009); // dictionary of all typedefs
GroupDict groupDict(257); // dictionary of all groups
FormulaDict formulaDict(1009); // dictionary 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
OutputList *outputList; // list of output generating objects
......@@ -274,7 +276,7 @@ void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
FileDef *fd=0;
// see if we need to include a verbatim copy of the header file
//printf("root->includeFile=%s\n",root->includeFile.data());
if (!root->includeFile.isNull() &&
if (!root->includeFile.isEmpty() &&
(fd=findFileDef(&inputNameDict,root->includeFile,ambig))==0
)
{ // explicit request
......@@ -444,9 +446,9 @@ void buildClassList(Entry *root)
{
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->addSectionsToDefinition(root->anchors);
......@@ -484,7 +486,7 @@ void buildClassList(Entry *root)
cd->addSectionsToDefinition(root->anchors);
// file definition containing the class cd
FileDef *ifd=findFileDef(&inputNameDict,root->fileName,ambig);
cd->setBodyLine(root->bodyLine);
cd->setBodySegment(root->bodyLine,root->endBodyLine);
cd->setBodyDef(ifd);
QListIterator<QCString> sli(*root->groups);
......@@ -766,7 +768,7 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
md->setFromAnnonymousScope(fromAnnScope);
md->setFromAnnonymousMember(fromAnnMemb);
md->setIndentDepth(indentDepth);
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
......@@ -819,7 +821,7 @@ static MemberDef *addVariableToFile(Entry *root,MemberDef::MemberType mtype,
md->setFromAnnonymousScope(fromAnnScope);
md->setFromAnnonymousMember(fromAnnMemb);
md->setIndentDepth(indentDepth);
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd);
......@@ -906,7 +908,7 @@ void buildVarList(Entry *root)
(root->section==Entry::VARIABLE_SEC
) ||
(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
)
)
......@@ -922,7 +924,7 @@ void buildVarList(Entry *root)
);
//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))
{
// recover from parse error caused by redundant braces
......@@ -1115,7 +1117,7 @@ void buildMemberList(Entry *root)
(root->parent->section & Entry::COMPOUND_MASK) &&
(cd=getClass(scope)) &&
// 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
)
)
......@@ -1161,7 +1163,7 @@ void buildMemberList(Entry *root)
md->setDocumentation(root->doc);
md->setBriefDescription(root->brief);
//md->setBody(root->body);
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setGroupId(root->mGrpId);
md->setInline(root->inLine);
bool ambig;
......@@ -1291,9 +1293,9 @@ void buildMemberList(Entry *root)
{
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;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
}
......@@ -1318,7 +1320,7 @@ void buildMemberList(Entry *root)
md->setBriefDescription(root->brief);
md->setPrototype(root->proto);
//md->setBody(root->body);
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd);
......@@ -1470,10 +1472,10 @@ void findFriends()
mmd->setBriefDescription(fmd->briefDescription());
else if (!mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty())
fmd->setBriefDescription(mmd->briefDescription());
if (mmd->getBodyLine()==-1 && fmd->getBodyLine()!=-1)
mmd->setBodyLine(fmd->getBodyLine());
else if (mmd->getBodyLine()!=-1 && fmd->getBodyLine()==-1)
fmd->setBodyLine(mmd->getBodyLine());
if (mmd->getStartBodyLine()==-1 && fmd->getStartBodyLine()!=-1)
mmd->setBodySegment(fmd->getStartBodyLine(),fmd->getEndBodyLine());
else if (mmd->getStartBodyLine()!=-1 && fmd->getStartBodyLine()==-1)
fmd->setBodySegment(mmd->getStartBodyLine(),mmd->getEndBodyLine());
}
}
}
......@@ -1522,14 +1524,14 @@ void transferFunctionDocumentation()
{
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());
}
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());
}
}
......@@ -1764,7 +1766,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
if (over_load) // the \overload keyword was used
{
QCString doc=getOverloadDocs();
if (!root->doc.isNull())
if (!root->doc.isEmpty())
{
doc+="<p>";
doc+=root->doc;
......@@ -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 */
(
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->doc.length()>0
......@@ -1791,7 +1793,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
if ( /* !md->isStatic() && !root->stat && do not replace doc of static */
(
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
)
{
......@@ -1802,9 +1804,9 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
//{
// 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;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd);
......@@ -2162,13 +2164,14 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
scopeName=related.copy();
}
else if (/*scopeName.isEmpty() &&*/ related.isEmpty() && root->parent &&
!root->parent->name.isNull())
!root->parent->name.isEmpty())
{
Entry *p=root->parent;
while (p) // get full scope as class name
{
QCString sc = stripAnnonymousNamespaceScope(p->name);
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",
......@@ -2183,11 +2186,11 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
//printf("tryScope=%s\n",tryScope.data());
if (leftScopeMatch(tryScope,p->name))
if (leftScopeMatch(tryScope,sc))
break; // scope already present, so stop now
// prepend name to scope
if (!scopeName.isEmpty()) scopeName.prepend("::");
scopeName.prepend(p->name);
scopeName.prepend(sc);
}
p=p->parent;
}
......@@ -2572,7 +2575,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
md->setPrototype(root->proto);
md->addSectionsToDefinition(root->anchors);
//md->setBody(root->body);
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd);
......@@ -2662,7 +2665,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
}
if (rmd) // member found -> copy line number info
{
md->setBodyLine(rmd->getBodyLine());
md->setBodySegment(rmd->getStartBodyLine(),rmd->getEndBodyLine());
md->setBodyDef(rmd->getBodyDef());
}
}
......@@ -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
// entry
{
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd);
......@@ -2897,7 +2900,7 @@ void findEnums(Entry *root)
if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
md->setDefFile(root->fileName);
md->setDefLine(root->startLine);
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
//printf("Enum definition at line %d of %s\n",root->bodyLine,root->fileName.data());
......@@ -3440,9 +3443,9 @@ void addSourceReferences()
for (cli.toFirst();(cd=cli.current());++cli)
{
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);
......@@ -3455,15 +3458,15 @@ void addSourceReferences()
{
ClassDef *cd=md->memberClass();
FileDef *fd=md->getBodyDef();
if (fd && cd && cd->isLinkableInProject() && md->getBodyLine()!=-1 &&
if (fd && cd && cd->isLinkableInProject() && md->getStartBodyLine()!=-1 &&
md->isLinkableInProject())
{
//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;
if (d==0) d=md->getNamespace();
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()
{
NamespaceDef *nd=md->getNamespace();
FileDef *fd=md->getBodyDef();
if (md->getBodyLine()!=-1 && md->isLinkableInProject() &&
if (md->getStartBodyLine()!=-1 && md->isLinkableInProject() &&
(nd && nd->isLinkableInProject()) ||
(fd && fd->isLinkableInProject())
)
{
//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();
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)
md->setDocumentation(root->doc);
if (md->briefDescription().isEmpty())
md->setBriefDescription(root->brief);
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
md->addSectionsToDefinition(root->anchors);
......@@ -3636,7 +3639,7 @@ void findDefineDocumentation(Entry *root)
md->setDocumentation(root->doc);
if (md->briefDescription().isEmpty())
md->setBriefDescription(root->brief);
md->setBodyLine(root->bodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
md->addSectionsToDefinition(root->anchors);
......@@ -4132,16 +4135,37 @@ bool readLineFromFile(QFile &f,QCString &s)
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())
{
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);
}
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)
}
else
{
int c;
// char *p=dest;
QCString cmd=Config::inputFilter+" "+fileName;
FILE *f=popen(cmd,"r");
if (!f)
......@@ -4208,7 +4230,12 @@ void copyAndFilterFile(const char *fileName,BufStr &dest)
err("Error: could not execute filter %s\n",Config::inputFilter.data());
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
uchar *p=(uchar *)dest.data()+oldPos;
......
......@@ -116,6 +116,7 @@ extern FormulaList formulaList;
extern FormulaDict formulaDict;
extern FormulaDict formulaNameDict;
extern PageInfo *mainPage;
extern StringDict tagDestinationDict;
extern int annotatedClasses;
extern int hierarchyClasses;
......
......@@ -2543,7 +2543,7 @@ void parse(QCString &s)
void parseFile(QFileInfo &fi)
{
fprintf(stderr,"Parsing file %s...\n",fi.fileName().data());
QFile f(fi.absFilePath());
QFile f(fi.absFilePath().data());
if (f.open(IO_ReadOnly))
{
yyFileName = fi.fileName();
......
......@@ -422,7 +422,7 @@ void parse(QCString &s)
void parseFile(QFileInfo &fi)
{
fprintf(stderr,"Parsing file %s...\n",fi.fileName().data());
QFile f(fi.absFilePath());
QFile f(fi.absFilePath().data());
if (f.open(IO_ReadOnly))
{
yyFileName = fi.fileName();
......
......@@ -66,6 +66,7 @@ Entry::Entry(const Entry &e)
startLine = e.startLine;
mGrpId = e.mGrpId;
bodyLine = e.bodyLine;
endBodyLine = e.endBodyLine;
inLine = e.inLine;
sublist = new QList<Entry>;
sublist->setAutoDelete(TRUE);
......@@ -203,6 +204,7 @@ void Entry::reset()
scopeSpec.resize(0);
memberSpec.resize(0);
bodyLine = -1;
endBodyLine = -1;
mGrpId = -1;
section = EMPTY_SEC;
sig = FALSE;
......
......@@ -141,8 +141,8 @@ class Entry
QCString scopeSpec; // template specialization of the scope
QCString memberSpec; // template specialization of the member
QCString program; // the program text
//QCString body; // the function body
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 includeName; // include name (3 arg of \class)
QCString doc; // documentation block (partly parsed)
......
......@@ -202,7 +202,8 @@ void FileDef::writeDocumentation(OutputList &ol)
//doc=doc.stripWhiteSpace();
//int bl=brief.length();
//int dl=doc.length();
if (!briefDescription().isEmpty() || !documentation().isEmpty() || bodyLine!=-1)
if (!briefDescription().isEmpty() || !documentation().isEmpty() ||
startBodyLine!=-1)
{
ol.writeRuler();
bool latexOn = ol.isEnabled(OutputGenerator::Latex);
......@@ -329,7 +330,7 @@ void FileDef::writeSource(OutputList &ol)
//parseText(ol,theTranslator->trVerbatimText(incFile->name()));
//ol.writeRuler();
ol.startCodeFragment();
parseCode(ol,name(),fileToString(absFilePath()),FALSE,0,this);
parseCode(ol,0,fileToString(absFilePath()),FALSE,0,this);
ol.endCodeFragment();
endFile(ol);
ol.enableAll();
......
......@@ -105,9 +105,24 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
void HtmlGenerator::startQuickIndexItem(const char *s,const char *l)
{
t << "<a ";
if (s) t << "doxygen=\"" << s << "\" ";
t << "href=\"" << l << "\">";
QCString *dest;
if (s)
{
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()
......@@ -182,14 +197,19 @@ void HtmlGenerator::writeStyleInfo(int part)
{
startPlainFile("doxygen.css");
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.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 << "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }" << endl;
t << "DIV.in { margin-left: 16 }" << 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 << endl;
endPlainFile();
......@@ -220,12 +240,26 @@ void HtmlGenerator::writeString(const char *text)
void HtmlGenerator::writeIndexItem(const char *ref,const char *f,
const char *name)
{
QCString *dest;
t << "<li>";
if (ref || f)
{
if (ref)
{
t << "<a class=\"elRef\" ";
t << "doxygen=\"" << ref << ":";
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
t << "\" ";
}
else
{
t << "<a class=\"el\" ";
if (ref) t << "doxygen=\"" << ref << ":\" ";
}
t << "href=\"";
if (ref)
{
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
}
if (f) t << f << ".html\">";
}
else
......@@ -264,18 +298,56 @@ void HtmlGenerator::writeStartAnnoItem(const char *,const char *f,
void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
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\" ";
if (ref) t << "doxygen=\"" << ref << ":\" ";
}
t << "href=\"";
if (ref)
{
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
}
if (f) t << f << ".html";
if (anchor) t << "#" << anchor;
t << "\">";
docify(name);
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)
......@@ -666,7 +738,7 @@ void HtmlGenerator::endIndexList()
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()
......
......@@ -76,8 +76,7 @@ class HtmlGenerator : public OutputGenerator
void writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *name);
void writeCodeLink(const char *ref,const char *f,
const char *anchor,const char *name)
{ writeObjectLink(ref,f,anchor,name); col+=strlen(name); }
const char *anchor,const char *name);
void startTextLink(const char *file,const char *anchor);
void endTextLink();
void writeHtmlLink(const char *url,const char *text);
......@@ -161,6 +160,8 @@ class HtmlGenerator : public OutputGenerator
void writeGrave(char c) { t << "&" << c << "grave;"; }
void writeCirc(char c) { t << "&" << c << "circ;"; }
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 endDescTitle() {}
void writeDescItem() { t << "<dd>" << endl; }
......
......@@ -39,8 +39,18 @@ void writeInstallScript()
char *s=Config::tagFileList.first();
while (s)
{
QFileInfo fi(s);
t << "\"" << fi.fileName() << "\", \"\"";
QCString tagLine=s;
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();
if (s) t << ", ";
}
......
......@@ -24,6 +24,7 @@
#include "translator_de.h"
#include "translator_jp.h"
#include "translator_es.h"
#include "translator_fi.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
......@@ -69,6 +70,10 @@ bool setTranslator(const char *langName)
{
theTranslator=new TranslatorSpanish;
}
else if (L_EQUAL("finnish"))
{
theTranslator=new TranslatorFinnish;
}
#endif
else // use the default language (i.e. english)
{
......
......@@ -965,13 +965,13 @@ void LatexGenerator::docify(const char *str)
c = *p++;
t << (char)c;
}
}
else // ascii char => see if we can insert hypenation hint
{
if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c;
}
}
}
else // language is other than japanese
{
switch(c)
......
......@@ -160,6 +160,8 @@ class LatexGenerator : public OutputGenerator
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 endMemberDescription() { t << "\\item\\end{CompactList}"; }
void startDescList() { t << "\\begin{Desc}\n\\item["; }
......
......@@ -149,6 +149,12 @@ class ManGenerator : public OutputGenerator
void writeGrave(char c) { t << c << "\\*:"; firstCol=FALSE; }
void writeCirc(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 endMemberDescription() { t << "\\fR\""; firstCol=FALSE; }
void startDescList();
......
......@@ -445,6 +445,7 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
{
int i,l;
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",
// name().data(),cd->name().data(),annScope,annMemb);
if (annScope) return;
......@@ -630,7 +631,7 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
if (annMemb)
{
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 (manOn) ol.disable(OutputGenerator::Man);
ol.writeNonBreakableSpace();
......@@ -738,6 +739,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
MemberType m)
{
bool hasDocs = detailsAreVisible();
//printf("%s MemberDef::writeDocumentation(): hasDocs %d\n",name().data(),hasDocs);
if (
(memberType()==m && // filter member type
(Config::extractAllFlag || hasDocs) &&
......@@ -1168,7 +1170,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
ol.endDescList();
}
// write reference to the source
writeSourceRef(ol);
writeSourceRef(ol,cname);
ol.endIndent();
// enable LaTeX again
//if (Config::extractAllFlag && !hasDocs) ol.enable(OutputGenerator::Latex);
......@@ -1214,7 +1216,7 @@ bool MemberDef::isLinkable()
bool MemberDef::detailsAreVisible() const
{
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==EnumValue && !briefDescription().isEmpty()) || // is doc enum value
(!briefDescription().isEmpty() &&
......
......@@ -147,7 +147,7 @@ class MemberDef : public Definition
// tag file related members
//void setReference(const char *r) { external=r; }
//bool isReference() { return !external.isNull(); }
//bool isReference() { return !external.isEmpty(); }
// argument related members
ArgumentList *argumentList() const { return argList; }
......
......@@ -77,9 +77,9 @@ void MemberGroup::writeDocumentation(OutputList &ol)
if (!documentation().isEmpty() || Config::repeatBriefFlag)
{
bool htmlEnabled = ol.isEnabled(OutputGenerator::Html);
bool latexEnabled = ol.isEnabled(OutputGenerator::Html);
if (htmlEnabled) ol.disableAllBut(OutputGenerator::Html);
if (latexEnabled) ol.disableAllBut(OutputGenerator::Html);
bool latexEnabled = ol.isEnabled(OutputGenerator::Latex);
if (htmlEnabled) ol.disable(OutputGenerator::Html);
if (latexEnabled) ol.disable(OutputGenerator::Latex);
ol.startTextLink(0,"_details");
parseText(ol,theTranslator->trMore());
ol.endTextLink();
......
......@@ -64,6 +64,7 @@ class MemberGroupDict : public QIntDict<MemberGroup>
{
public:
MemberGroupDict(int size) : QIntDict<MemberGroup>(size) {}
~MemberGroupDict() {}
};
#endif
......@@ -82,6 +82,8 @@ void MemberList::countDocMembers(bool inGroup)
MemberDef *md=first();
while (md)
{
//printf("%s MemberList::countDocMembers() details=%d\n",
// md->name().data(),md->detailsAreVisible());
if ((Config::extractAllFlag || md->detailsAreVisible()) &&
(md->groupId()==-1 || inGroup))
{
......
......@@ -153,6 +153,8 @@ class OutputGenerator
virtual void writeGrave(char) = 0;
virtual void writeCirc(char) = 0;
virtual void writeTilde(char) = 0;
virtual void writeRing(char) = 0;
virtual void writeSharpS() = 0;
virtual void startMemberDescription() = 0;
virtual void endMemberDescription() = 0;
virtual void startDescList() = 0;
......
......@@ -263,6 +263,10 @@ class OutputList
{ forall(&OutputGenerator::writeCirc,c); }
void writeTilde(char c)
{ forall(&OutputGenerator::writeTilde,c); }
void writeRing(char c)
{ forall(&OutputGenerator::writeRing,c); }
void writeSharpS()
{ forall(&OutputGenerator::writeSharpS); }
void startMemberDescription()
{ forall(&OutputGenerator::startMemberDescription); }
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()
static void endBlock()
{
if (inParamBlock || inRetValBlock)
if (inParamBlock || inRetValBlock || inExceptionBlock)
{
outDoc->endDescTableData();
outDoc->endDescTable();
......@@ -657,7 +657,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
FileDef *fd;
if ((fd=findFileDef(&imageNameDict,fileName,ambig)))
{
QFile inImage(fd->absFilePath());
QFile inImage(fd->absFilePath().data());
if (inImage.open(IO_ReadOnly))
{
result = fileName;
......@@ -985,6 +985,8 @@ VAR [vV][aA][rR]
<DocScan,Text>"&"[AEIOUaeiou]"grave;" { outDoc->writeGrave(yytext[1]); }
<DocScan,Text>"&"[AEIOUaeiou]"circ;" { outDoc->writeCirc(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]+")" {
QCString envvar=&yytext[2];
envvar=envvar.left(envvar.length()-1);
......@@ -1074,6 +1076,7 @@ VAR [vV][aA][rR]
generateLink(*outDoc,className,linkRef,inSeeBlock,linkText);
BEGIN( DocScan );
}
/*
<DocScan>"@ref"{B}+ {
BEGIN(DocRef);
}
......@@ -1081,6 +1084,7 @@ VAR [vV][aA][rR]
generateLink(*outDoc,className,yytext,TRUE,0);
BEGIN( DocScan );
}
*/
<DocScan>("\\"|"@")"endlink"/[^a-z_A-Z0-9] { warn("Warning: \\endlink without \\link "
"in documentation of %s\n", refName.data());
}
......@@ -1154,7 +1158,6 @@ VAR [vV][aA][rR]
if (inBlock()) endBlock();
inBugBlock=TRUE;
outDoc->startDescList();
//outDoc->writeBoldString("Bugs and limitations: ");
outDoc->startBold();
scanString(theTranslator->trBugsAndLimitations()+": ");
outDoc->endBold();
......@@ -1298,23 +1301,28 @@ VAR [vV][aA][rR]
}
BEGIN(DocParam);
}
<DocScan>("\\"|"@")"exception"{BN}+ {
<DocScan>("\\"|"@")("exception"|"throw")s?{BN}+ {
endArgumentList();
if (!inExceptionBlock)
{
if (inBlock()) endBlock();
inExceptionBlock=TRUE;
outDoc->startDescList();
//outDoc->writeBoldString("Exceptions: ");
outDoc->startBold();
scanString(theTranslator->trExceptions()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
outDoc->startDescTable();
}
else
{
outDoc->endDescTableData();
}
BEGIN(DocException);
}
<DocScan>"\\capt".*
<DocParam>([a-z_A-Z0-9:]+)|("\"".*"\"") {
<DocParam>([a-z_A-Z0-9:\.\-]+)|("\"".*"\"") {
outDoc->startDescTableTitle();
outDoc->startEmphasis();
outDoc->docify(yytext);
......@@ -1324,11 +1332,12 @@ VAR [vV][aA][rR]
BEGIN(DocScan);
}
<DocException>{SCOPENAME} {
outDoc->writeDescItem();
outDoc->startDescTableTitle();
outDoc->startEmphasis();
outDoc->docify(yytext);
outDoc->endEmphasis();
outDoc->docify(" - ");
outDoc->endDescTableTitle();
outDoc->startDescTableData();
BEGIN(DocScan);
}
<DocScan>"\\section "{ID}"\n" {
......@@ -1352,13 +1361,13 @@ VAR [vV][aA][rR]
outDoc->writeAnchor(sec->label);
}
}
<DocScan>"\\ref" {
<DocScan>("\\"|"@")"ref" {
BEGIN(DocRefName);
}
<DocScan>"\\refitem" {
BEGIN(DocRefItem);
}
<DocRefName>{ID} {
<DocRefName>{SCOPENAME} {
QCString ref=yytext;
SectionInfo *sec;
if ((sec=sectionDict[ref]))
......@@ -1378,14 +1387,14 @@ VAR [vV][aA][rR]
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);
outDoc->writeBoldString("unknown reference!");
outDoc->writeBoldString(" unknown reference!");
}
BEGIN(DocScan);
}
<DocRefName>{ID}/{B}+"\"" {
<DocRefName>{SCOPENAME}/{B}+"\"" {
sectionRef=yytext;
BEGIN(DocRefArgStart);
}
......@@ -1407,7 +1416,7 @@ VAR [vV][aA][rR]
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());
outDoc->writeBoldString("unknown reference!");
......@@ -2053,7 +2062,7 @@ VAR [vV][aA][rR]
<UsingDirective>{SCOPENAME} { current->name=yytext;
current->fileName = yyFileName;
current->section=Entry::USINGDIR_SEC;
printf("Found using directive %s\n",yytext);
//printf("Found using directive %s\n",yytext);
current_root->addSubEntry(current);
current = new Entry ;
current->protection = protection ;
......@@ -2413,6 +2422,7 @@ VAR [vV][aA][rR]
}
else
{
current->endBodyLine = yyLineNr;
QCString &cn = current->name;
//QCString rn = stripAnnonymousScope(current_root->name);
QCString rn = current_root->name.copy();
......@@ -2782,12 +2792,12 @@ VAR [vV][aA][rR]
}
<FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; }
<FuncQual>{BN}*"throw"{BN}*"(" {
current->exception = " throw(" ;
current->exception = " throw (" ;
lineCount() ;
BEGIN( ExcpRound ) ;
}
<FuncQual>{BN}*"raises"{BN}*"(" {
current->exception = " raises(" ;
current->exception = " raises (" ;
lineCount() ;
BEGIN( ExcpRound ) ;
}
......@@ -2843,7 +2853,7 @@ VAR [vV][aA][rR]
tempName=current->name;
else
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))
{
//printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n",
......@@ -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());
QRegExp re("([^)]*)");
if (!current->type.isNull() &&
if (!current->type.isEmpty() &&
(current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
{
//printf("Scanner.l: found function variable!\n");
......@@ -2920,8 +2930,11 @@ VAR [vV][aA][rR]
if( bracketCount )
--bracketCount ;
else
{
previous->endBodyLine=yyLineNr;
BEGIN( lastCurlyContext ) ;
}
}
<SkipCurly>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" {
if ( bracketCount )
{
......@@ -2930,6 +2943,7 @@ VAR [vV][aA][rR]
}
else
{
current->endBodyLine=yyLineNr;
lineCount();
tempEntry = current; // temporarily switch to the previous entry
current = previous;
......@@ -3846,6 +3860,7 @@ VAR [vV][aA][rR]
newDocState();
}
<Doc>[a-z_A-Z0-9]+ { current->doc += yytext; }
<Doc,AfterDoc,LineDoc,ClassDoc>"\\\\" { current->doc += yytext; }
<Doc>. { current->doc += *yytext; }
<DefLineDoc,LineDoc>. { current->brief += *yytext; }
<Doc>\n { yyLineNr++; current->doc += *yytext; }
......
......@@ -451,7 +451,7 @@ class TranslatorCzech : public Translator
switch(compType)
{
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::Interface: result+="toto rozhrani"; break;
}
......@@ -483,7 +483,24 @@ class TranslatorCzech : public Translator
* documentation. It should be an abbreviation of the word page.
*/
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
......
......@@ -106,11 +106,11 @@ class TranslatorGerman : public Translator
QCString trThisIsTheListOfAllMembers()
// 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()
// 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)
// 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
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
......@@ -9,6 +9,9 @@
* Updates:
* 1999/09/10: corrected some small typos in the "new since 0.49-990425" 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
* documentation under the terms of the GNU General Public License is hereby
......@@ -28,55 +31,89 @@
class TranslatorItalian : public Translator
{
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()
{ return "eredita"; }
{ return "Inherits"; }
QCString trAnd()
{ return "e"; }
{ return "and"; }
QCString trInheritedBy()
//{ return "Ereditato da"; }
{ return "Ereditate da"; }
{ return "Inherited By"; }
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()
//{ return "Funzioni relative"; }
{ return "Funzioni collegate"; }
/*! subscript for the related functions. */
QCString trRelatedSubscript()
//{ return "(Nota che questo no sono funzioni membro)"; }
{ return "(Attenzione, queste non sono funzioni membro)"; }
{ return "(Si noti che queste non sono funzioni membro.)"; }
/*! header that is put before the detailed description of files, classes and namespaces. */
QCString trDetailedDescription()
{ return "Descrizione dettagliata"; }
{ return "Descrizione Dettagliata"; }
/*! header that is put before the list of typedefs. */
QCString trMemberTypedefDocumentation()
//{ return "Documentazione dei membri Typedef"; }
{ return "Documentazione delle ridefinizioni dei tipi (typedef)"; }
/*! header that is put before the list of enumerations. */
QCString trMemberEnumerationDocumentation()
//{ return "Documentazione dei membri enumerati"; }
{ 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()
{ return "Documentazione delle funzioni membro"; }
/*! header that is put before the list of member attributes. */
QCString trMemberDataDocumentation()
{ return "Documentazione dei dati membro"; }
QCString trGeneratedFrom(const char *s,bool single)
{
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;
}
{ return "Documentazione dei dati membri"; }
/*! this is the text of a link put after brief descriptions. */
QCString trMore()
{ return "Continua..."; }
QCString trReference()
{ return "Riferimento"; }
/*! put in the class documentation */
QCString trListOfAllMembers()
{ return "Lista di tutti i membri."; }
/*! used as the title of the "list of all members" page of a class */
QCString trMemberList()
{ return "Lista dei membri"; }
/*! this is the first part of a sentence that is followed by a class name */
QCString trThisIsTheListOfAllMembers()
{ return "Questa è la lista completa di tutti i membri di "; }
/*! this is the remainder of the sentence after the class name */
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 result="Generato automaticamente da Doxygen";
......@@ -84,41 +121,77 @@ class TranslatorItalian : public Translator
result+=" a partire dal codice sorgente.";
return result;
}
/*! put after an enum name in the list of all members */
QCString trEnumName()
{ return "nome di tipo enumerato"; }
/*! put after an enum value in the list of all members */
QCString trEnumValue()
{ return "valore di tipo enumerato"; }
/*! put after an undocumented member in the list of all members */
QCString trDefinedIn()
{ 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)
{ 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()
{ return "Moduli"; }
/*! This is put above each page as a link to the class hierarchy */
QCString trClassHierarchy()
{ return "Gerarchia delle classi"; }
/*! This is put above each page as a link to the list of annotated classes */
QCString trCompoundList()
{ return "Lista dei composti"; }
/*! This is put above each page as a link to the list of documented files */
QCString trFileList()
{ return "Lista dei files"; }
/*! This is put above each page as a link to the list of all verbatim headers */
QCString trHeaderFiles()
{ return "Lista dei file header"; }
/*! This is put above each page as a link to all members of compounds. */
QCString trCompoundMembers()
{ return "Membri dei composti"; }
/*! This is put above each page as a link to all members of files. */
QCString trFileMembers()
{ return "Membri dei files"; }
/*! This is put above each page as a link to all related pages. */
QCString trRelatedPages()
{ return "Pagine collegate"; }
/*! This is put above each page as a link to all examples. */
QCString trExamples()
{ return "Esempi"; }
/*! This is put above each page as a link to the search engine. */
QCString trSearch()
{ return "Cerca"; }
/*! This is an introduction to the class hierarchy. */
QCString trClassHierarchyDescription()
{
return "Questa lista di ereditarietà è ordinata "
"approssimativamente, ma non completamente, in ordine alfabetico:";
}
/*! This is an introduction to the list with all files. */
QCString trFileListDescription(bool extractAll)
{
QCString result="Questa è una lista ";
......@@ -127,10 +200,14 @@ class TranslatorItalian : public Translator
result+="con una loro breve descrizione:";
return result;
}
/*! This is an introduction to the annotated compound list. */
QCString trCompoundListDescription()
{ return "Queste sono le classi, structs e "
"unions con una loro breve descrizione:";
{ return "Queste sono le classi, structs, "
"unions e interfacce con una loro breve descrizione:";
}
/*! This is an introduction to the page with all class members. */
QCString trCompoundMembersDescription(bool extractAll)
{
QCString result="Questa è una lista ";
......@@ -141,6 +218,8 @@ class TranslatorItalian : public Translator
else result+="alla documentazione delle classi a cui appartengono:";
return result;
}
/*! This is an introduction to the page with all file members. */
QCString trFileMembersDescription(bool extractAll)
{
QCString result="Questa è una lista ";
......@@ -151,76 +230,197 @@ class TranslatorItalian : public Translator
else result+="alla documentazione dei files a cui appartengono:";
return result;
}
/*! This is an introduction to the page with the list of all header files. */
QCString trHeaderFilesDescription()
{ 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()
{ return "Questa è la lista di tutti gli esempi:"; }
/*! This is an introduction to the page with the list of related pages */
QCString trRelatedPagesDescription()
{ 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()
{ 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()
{ 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()
{ return "Documentazione"; }
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
QCString trModuleIndex()
{ return "Indice dei moduli"; }
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
QCString trHierarchicalIndex()
{ return "Indice della gerarchia"; }
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
*/
QCString trCompoundIndex()
{ return "Indice dei composti"; }
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
QCString trFileIndex()
{ return "Indice dei files"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
QCString trModuleDocumentation()
{ 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()
{ return "Documentazione delle classi"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all files.
*/
QCString trFileDocumentation()
{ return "Documentazione dei files"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
QCString trExampleDocumentation()
{ return "Documentazione degli esempi"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
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()
{ return "Manuale di riferimento"; }
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
QCString trDefines()
{ return "Definizioni"; }
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
*/
QCString trFuncProtos()
{ return "Prototipi delle funzioni"; }
/*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
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()
{ 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()
{ return "Funzioni"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString trVariables()
{ return "Variabili"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString trEnumerationValues()
{ return "Valori dei tipi enumerati"; }
QCString trReimplementedFrom()
{ return "Nuova implementazione di"; }
QCString trReimplementedIn()
{ return "Reimplementato in"; }
/*! This is used in man pages as the author section. */
QCString trAuthor()
{ return "Autore"; }
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
QCString trDefineDocumentation()
{ 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()
{ 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()
{ 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()
{ 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()
{ return "Documentazione delle funzioni"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
QCString trVariableDocumentation()
{ 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()
{ return "Composti"; }
/*! This is used in the documentation of a group before the list of
* links to documented files
*/
QCString trFiles()
{ 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 result=(QCString)"Generato il "+date;
......@@ -228,38 +428,64 @@ class TranslatorItalian : public Translator
result+=(QCString)" da";
return result;
}
/*! This is part of the sentence used in the standard footer of each page.
*/
QCString trWrittenBy()
{
return "scritto da";
}
/*! this text is put before a class diagram */
QCString trClassDiagram(const char *clName)
{
return (QCString)"Diagramma delle classi per "+clName;
}
/*! this text is generated when the \internal command is used. */
QCString trForInternalUseOnly()
{ return "Solo per uso interno."; }
/*! this text is generated when the \reimp command is used. */
QCString trReimplementedForInternalReasons()
{ return "Reimplementato per motivi interni; "
"l'API non stata modificata.";
}
{ return "Reimplementato per motivi interni; l'API non è stata modificata.";}
/*! this text is generated when the \warning command is used. */
QCString trWarning()
{ return "Attenzione"; }
/*! this text is generated when the \bug command is used. */
QCString trBugsAndLimitations()
{ return "Bugs e limitazioni"; }
/*! this text is generated when the \version command is used. */
QCString trVersion()
{ return "Versione"; }
/*! this text is generated when the \date command is used. */
QCString trDate()
{ return "Data"; }
/*! this text is generated when the \author command is used. */
QCString trAuthors()
{ return "Autore(i)"; }
/*! this text is generated when the \return command is used. */
QCString trReturns()
{ return "Restituisce"; }
/*! this text is generated when the \sa command is used. */
QCString trSeeAlso()
{ return "Vedi anche"; }
/*! this text is generated when the \param command is used. */
QCString trParameters()
{ return "Parametri"; }
/*! this text is generated when the \exception command is used. */
QCString trExceptions()
{ return "Eccezioni"; }
/*! this text is used in the title page of a LaTeX document. */
QCString trGeneratedBy()
{ return "Generato da"; }
......@@ -267,10 +493,11 @@ class TranslatorItalian : public Translator
// new since 0.49-990307
//////////////////////////////////////////////////////////////////////////
QCString trNamespaces()
{ return "Namespaces"; }
/*! used as the title of page containing all the index of all namespaces. */
QCString trNamespaceList()
{ return "Lista dei namespaces"; }
/*! used as an introduction to the namespace list */
QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Questa è la lista ";
......@@ -279,6 +506,10 @@ class TranslatorItalian : public Translator
result+="con una loro breve descrizione:";
return result;
}
/*! used in the class documentation as a header before the list of all
* friends of a class
*/
QCString trFriends()
{ return "Friends"; }
......@@ -286,6 +517,9 @@ class TranslatorItalian : public Translator
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
/*! used in the class documentation as a header before the list of all
* related classes
*/
QCString trRelatedFunctionDocumentation()
{ return "Documentazione dei friends e delle funzioni collegate"; }
......@@ -293,6 +527,7 @@ class TranslatorItalian : public Translator
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
/*! used as the title of the HTML page of a class/struct/union */
QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType)
{
......@@ -306,13 +541,18 @@ class TranslatorItalian : public Translator
}
result+=(QCString)clName;
return result;
}
/*! used as the title of the HTML page of a file */
QCString trFileReference(const char *fileName)
{
QCString result="Riferimenti per il file ";
result+=(QCString)fileName;
return result;
}
/*! used as the title of the HTML page of a namespace */
QCString trNamespaceReference(const char *namespaceName)
{
QCString result="Riferimenti per il namespace ";
......@@ -320,7 +560,9 @@ class TranslatorItalian : public Translator
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()
{ return "Membri pubblici"; }
QCString trPublicSlots()
......@@ -341,27 +583,70 @@ class TranslatorItalian : public Translator
{ return "Slots privati"; }
QCString trStaticPrivateMembers()
{ 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)
{
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)
{
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)
{
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)
{
return "Reimplementata in "+trWriteList(numEntries)+".";
}
/*! This is put above each page as a link to all members of namespaces. */
QCString trNamespaceMembers()
{ return "Membri dei namespaces"; }
/*! This is an introduction to the page with all namespace members */
QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result="Questa è la lista ";
......@@ -374,11 +659,28 @@ class TranslatorItalian : public Translator
result+="ai namespaces a cui appartengono:";
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
QCString trNamespaceIndex()
{ return "Indice dei namespaces"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
QCString trNamespaceDocumentation()
{ 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
//////////////////////////////////////////////////////////////////////////
......@@ -386,7 +688,7 @@ class TranslatorItalian : public Translator
/*! 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.
*/
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
......@@ -407,11 +709,44 @@ class TranslatorItalian : public Translator
/*! This is in the (quick) index as a link to the alphabetical compound
* 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
......@@ -141,7 +141,7 @@ int guessSection(const char *name)
// if (n)
// {
// Define *def=defineDict[n];
// if (def && def->nargs==0 && !def->definition.isNull())
// if (def && def->nargs==0 && !def->definition.isEmpty())
// {
// return def->definition;
// }
......@@ -153,7 +153,7 @@ int guessSection(const char *name)
QCString resolveTypedefs(const QCString &n)
{
QCString *subst=typedefDict[n];
if (subst && !subst->isNull())
if (subst && !subst->isEmpty())
{
return *subst;
}
......@@ -863,6 +863,8 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
{
QCString srcAType=trimTemplateSpecifiers(className,srcA->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
{
......@@ -1489,7 +1491,7 @@ bool getScopeDefs(const char *docScope,const char *scope,
* 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)
{
//printf("generateRef(scName=%s,name=%s,rt=%s)\n",scName,name,rt);
......@@ -1502,7 +1504,7 @@ void generateRef(OutputList &ol,const char *scName,
{
ClassDef *cd=0;
NamespaceDef *nd=0;
if (linkText.isNull()) linkText=tmpName;
if (linkText.isEmpty()) linkText=tmpName;
// check if this is a class or namespace reference
if (scName!=tmpName && getScopeDefs(scName,name,cd,nd))
{
......@@ -1525,13 +1527,13 @@ void generateRef(OutputList &ol,const char *scName,
}
}
// link has been written, stop now.
return;
return TRUE;
}
else if (scName==tmpName || (!inSeeBlock && scopePos==-1)) // nothing to link => output plain text
{
ol.docify(linkText);
// text has been written, stop now.
return;
return FALSE;
}
// continue search...
linkText = rt;
......@@ -1552,7 +1554,7 @@ void generateRef(OutputList &ol,const char *scName,
// create a default link text if none was explicitly given
bool explicitLink=TRUE;
if (linkText.isNull())
if (linkText.isEmpty())
{
//if (!scopeUser.isEmpty()) linkText=scopeUser+"::";
linkText=nameStr;
......@@ -1612,7 +1614,7 @@ void generateRef(OutputList &ol,const char *scName,
// for functions we add the arguments if explicitly specified or else "()"
if (!rt && (md->isFunction() || md->isPrototype() || md->isSignal() || md->isSlot() || md->isDefine()))
{
if (argsStr.isNull())
if (argsStr.isEmpty())
ol.writeString("()");
else
ol.docify(argsStr);
......@@ -1630,7 +1632,7 @@ void generateRef(OutputList &ol,const char *scName,
writePageRef(ol,cName,aName);
}
}
return;
return TRUE;
}
else if (inSeeBlock && !nameStr.isEmpty() && (gd=groupDict[nameStr]))
{ // group link
......@@ -1642,7 +1644,7 @@ void generateRef(OutputList &ol,const char *scName,
ol.docify(gd->groupTitle());
}
ol.endTextLink();
return;
return TRUE;
}
// nothing found
......@@ -1651,9 +1653,9 @@ void generateRef(OutputList &ol,const char *scName,
else
{
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,
// 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
// 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)
{
QCString linkRef=lr;
......@@ -1673,11 +1676,20 @@ void generateLink(OutputList &ol,const char *clName,
GroupDef *gd;
bool ambig;
if (linkRef.length()==0) // no reference name!
{
ol.docify(lt);
return FALSE;
}
else if ((pageDict[linkRef])) // link to a page
{
ol.writeObjectLink(0,linkRef,0,lt);
return TRUE;
}
else if ((exampleDict[linkRef])) // link to an example
{
ol.writeObjectLink(0,linkRef+"-example",0,lt);
return TRUE;
}
else if ((gd=groupDict[linkRef])) // link to a group
{
ol.startTextLink(gd->getOutputFileBase(),0);
......@@ -1686,13 +1698,19 @@ void generateLink(OutputList &ol,const char *clName,
else
ol.docify(gd->groupTitle());
ol.endTextLink();
return TRUE;
}
else if ((fd=findFileDef(&inputNameDict,linkRef,ambig))
&& fd->isLinkable())
{
// link to documented input file
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,lt);
return TRUE;
}
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)
......@@ -1782,7 +1800,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
ambig=FALSE;
QCString name=n;
QCString path;
if (name.isNull()) return 0;
if (name.isEmpty()) return 0;
int slashPos=QMAX(name.findRev('/'),name.findRev('\\'));
if (slashPos!=-1)
{
......@@ -1790,7 +1808,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
name=name.right(name.length()-slashPos-1);
}
//printf("findFileDef path=`%s' name=`%s'\n",path.data(),name.data());
if (name.isNull()) return 0;
if (name.isEmpty()) return 0;
FileName *fn;
if ((fn=(*fnDict)[name]))
{
......@@ -1805,7 +1823,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
FileDef *lastMatch=0;
while (fd)
{
if (path.isNull() || fd->getPath().right(path.length())==path)
if (path.isEmpty() || fd->getPath().right(path.length())==path)
{
count++;
lastMatch=fd;
......@@ -1837,7 +1855,7 @@ void showFileDefMatches(const FileNameDict *fnDict,const char *n)
FileDef *fd=fn->first();
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());
}
......
......@@ -40,9 +40,9 @@ extern void linkifyText(OutputList &ol,const char *clName,const char *name,
extern bool getDefs(const QCString &scopeName,const QCString &memberName,
const char *, MemberDef *&md, ClassDef *&cd,FileDef *&fd,
NamespaceDef *&nd);
extern void generateRef(OutputList &ol,const char *,
extern bool generateRef(OutputList &ol,const char *,
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 *);
extern void generateFileRef(OutputList &ol,const char *,
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