summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL4
-rw-r--r--Makefile.in8
-rw-r--r--Makefile.win_make.in3
-rw-r--r--Makefile.win_nmake.in3
-rw-r--r--README4
-rwxr-xr-xconfigure4
-rw-r--r--doc/Doxyfile3
-rw-r--r--doc/commands.doc30
-rw-r--r--doc/config.doc67
-rw-r--r--doc/diagrams.doc2
-rw-r--r--doc/doxygen.12
-rw-r--r--doc/doxygen.sty231
-rw-r--r--doc/doxygen_manual.tex47
-rw-r--r--doc/doxytag.121
-rw-r--r--doc/doxytag_usage.doc97
-rw-r--r--doc/doxywizard.12
-rw-r--r--doc/external.doc36
-rw-r--r--doc/htmlcmds.doc2
-rw-r--r--doc/index.doc3
-rw-r--r--doc/infoflow.eps58
-rw-r--r--doc/infoflow.fig13
-rw-r--r--doc/infoflow.gifbin13383 -> 12857 bytes
-rw-r--r--doc/install.doc18
-rw-r--r--doc/installdox_usage.doc59
-rw-r--r--doc/lists.doc27
-rw-r--r--doc/starting.doc5
-rw-r--r--examples/memgrp.cpp8
-rw-r--r--qtools/qxml.cpp35
-rw-r--r--qtools/qxml.h2
-rw-r--r--src/Makefile.in12
-rw-r--r--src/classdef.cpp30
-rw-r--r--src/classdef.h2
-rw-r--r--src/cmdmapper.cpp1
-rw-r--r--src/cmdmapper.h1
-rw-r--r--src/commentscan.l47
-rw-r--r--src/compound.xsd7
-rw-r--r--src/compound_xsd.h7
-rw-r--r--src/config.l13
-rw-r--r--src/config.xml26
-rw-r--r--src/configoptions.cpp29
-rw-r--r--src/dbusxmlscanner.cpp45
-rw-r--r--src/debug.cpp1
-rw-r--r--src/debug.h3
-rw-r--r--src/definition.cpp10
-rw-r--r--src/definition.h2
-rw-r--r--src/docparser.cpp94
-rw-r--r--src/docparser.h78
-rw-r--r--src/doctokenizer.h3
-rw-r--r--src/doctokenizer.l170
-rw-r--r--src/docvisitor.h8
-rw-r--r--src/doxygen.cpp35
-rw-r--r--src/doxygen.css9
-rw-r--r--src/doxygen.h1
-rw-r--r--src/doxygen_css.h9
-rw-r--r--src/doxytag.l930
-rw-r--r--src/doxytag.pro.in31
-rw-r--r--src/doxytag.t50
-rw-r--r--src/ftvhelp.cpp1
-rw-r--r--src/growbuf.h38
-rw-r--r--src/htmldocvisitor.cpp69
-rw-r--r--src/htmldocvisitor.h2
-rw-r--r--src/htmlgen.cpp11
-rw-r--r--src/index.cpp39
-rw-r--r--src/instdox.cpp180
-rw-r--r--src/instdox.h23
-rw-r--r--src/latexdocvisitor.cpp12
-rw-r--r--src/latexdocvisitor.h4
-rw-r--r--src/latexgen.cpp2
-rw-r--r--src/libdoxygen.pro.in4
-rw-r--r--src/mandocvisitor.cpp21
-rw-r--r--src/mandocvisitor.h2
-rw-r--r--src/markdown.cpp1890
-rw-r--r--src/markdown.h52
-rw-r--r--src/memberlist.cpp2
-rw-r--r--src/pagedef.cpp11
-rw-r--r--src/perlmodgen.cpp14
-rw-r--r--src/printdocvisitor.h10
-rw-r--r--src/rtfdocvisitor.cpp25
-rw-r--r--src/rtfdocvisitor.h4
-rw-r--r--src/scanner.l2
-rw-r--r--src/tclscanner.l570
-rw-r--r--src/textdocvisitor.h2
-rw-r--r--src/util.cpp312
-rw-r--r--src/util.h34
-rw-r--r--src/vhdlcode.l11
-rw-r--r--src/vhdldocgen.cpp667
-rw-r--r--src/vhdldocgen.h40
-rw-r--r--src/vhdlparser.y2889
-rw-r--r--src/vhdlscanner.l111
-rw-r--r--src/xmldocvisitor.cpp13
-rw-r--r--src/xmldocvisitor.h2
-rw-r--r--src/xmlgen.cpp4
-rw-r--r--winbuild/Doxygen.sln24
-rw-r--r--winbuild/Doxygen.vcproj1628
-rw-r--r--winbuild/Doxytag.vcproj328
-rw-r--r--winbuild/iconv.vcproj464
-rw-r--r--winbuild/iconv64.libbin0 -> 1206128 bytes
-rw-r--r--winbuild/qtools.vcproj622
98 files changed, 8171 insertions, 4416 deletions
diff --git a/INSTALL b/INSTALL
index d374629..47142f5 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.7.6.1-20111226
+DOXYGEN Version 1.7.6.1-20120110
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (26 December 2011)
+Dimitri van Heesch (10 January 2012)
diff --git a/Makefile.in b/Makefile.in
index b326561..0de53ad 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -31,11 +31,11 @@ distclean: clean
-rm -f latex
-rm -f objects/*.o
-rm -f src/Makefile.doxygen src/Makefile.libdoxygen
- -rm -f src/Makefile.doxytag src/Makefile.libdoxycfg
+ -rm -f src/Makefile.libdoxycfg
-rm -f libmd5/Makefile.libmd5
-rm -f Makefile qtools/Makefile src/Makefile examples/Makefile doc/Makefile
-rm -f .makeconfig .tmakeconfig
- -rm -f src/doxygen.pro src/libdoxygen.pro src/doxytag.pro qtools/qtools.pro src/libdoxycfg.pro libmd5/libmd5.pro
+ -rm -f src/doxygen.pro src/libdoxygen.pro qtools/qtools.pro src/libdoxycfg.pro libmd5/libmd5.pro
-rm -f src/version.cpp
-rm -r addon/doxywizard/Makefile
-rm -f addon/doxywizard/doxywizard.pro
@@ -49,14 +49,10 @@ MAN1DIR = man/man1
install: doxywizard_install
$(INSTTOOL) -d $(DESTDIR)/$(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxygen $(DESTDIR)/$(INSTALL)/bin
- $(INSTTOOL) -m 755 bin/doxytag $(DESTDIR)/$(INSTALL)/bin
$(INSTTOOL) -d $(DESTDIR)/$(INSTALL)/$(MAN1DIR)
cat doc/doxygen.1 | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > doxygen.1
$(INSTTOOL) -m 644 doxygen.1 $(DESTDIR)/$(INSTALL)/$(MAN1DIR)/doxygen.1
rm doxygen.1
- cat doc/doxytag.1 | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > doxytag.1
- $(INSTTOOL) -m 644 doxytag.1 $(DESTDIR)/$(INSTALL)/$(MAN1DIR)/doxytag.1
- rm doxytag.1
install_docs:
$(INSTTOOL) -d $(DESTDIR)/$(DOCDIR)
diff --git a/Makefile.win_make.in b/Makefile.win_make.in
index d3f270b..9b51ada 100644
--- a/Makefile.win_make.in
+++ b/Makefile.win_make.in
@@ -13,10 +13,9 @@ clean:
distclean: clean
-del src\Makefile.libdoxygen \
src\Makefile.doxygen \
- src\Makefile.doxytag \
src\Makefile.libdoxycfg
-del Makefile src\Makefile examples\Makefile doc\Makefile
- -del src\libdoxygen.pro src\doxygen.pro src\doxytag.pro src\libdoxycfg.pro
+ -del src\libdoxygen.pro src\doxygen.pro src\libdoxycfg.pro
-del src\version.cpp
docs:
diff --git a/Makefile.win_nmake.in b/Makefile.win_nmake.in
index 46dad89..0ef6baa 100644
--- a/Makefile.win_nmake.in
+++ b/Makefile.win_nmake.in
@@ -25,10 +25,9 @@ clean: FORCE
distclean: clean
-del src\Makefile.libdoxygen \
src\Makefile.doxygen \
- src\Makefile.doxytag \
src\Makefile.libdoxycfg
-del Makefile src\Makefile examples\Makefile doc\Makefile
- -del src\libdoxygen.pro src\doxygen.pro src\doxytag.pro src\libdoxycfg.pro
+ -del src\libdoxygen.pro src\doxygen.pro src\libdoxycfg.pro
-del src\version.cpp
docs: FORCE
diff --git a/README b/README
index bafcc8a..282d58e 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.7.6.1_20111226
+DOXYGEN Version 1.7.6.1_20120110
Please read INSTALL for compilation instructions.
@@ -26,4 +26,4 @@ forum.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (26 December 2011)
+Dimitri van Heesch (dimitri@stack.nl) (10 January 2012)
diff --git a/configure b/configure
index 68e628a..65e56fe 100755
--- a/configure
+++ b/configure
@@ -20,7 +20,7 @@ doxygen_version_minor=7
doxygen_version_revision=6.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=20111226
+doxygen_version_mmn=20120110
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
@@ -626,7 +626,7 @@ EOF
echo " Created $DST from $SRC..."
done
-f_inprofiles="qtools/qtools.pro.in src/libdoxygen.pro.in src/libdoxycfg.pro.in src/doxygen.pro.in src/doxytag.pro.in addon/doxywizard/doxywizard.pro.in addon/doxmlparser/src/doxmlparser.pro.in addon/doxmlparser/test/xmlparse.pro.in addon/doxmlparser/examples/metrics/metrics.pro.in libmd5/libmd5.pro.in addon/doxyapp/doxyapp.pro.in"
+f_inprofiles="qtools/qtools.pro.in src/libdoxygen.pro.in src/libdoxycfg.pro.in src/doxygen.pro.in addon/doxywizard/doxywizard.pro.in addon/doxmlparser/src/doxmlparser.pro.in addon/doxmlparser/test/xmlparse.pro.in addon/doxmlparser/examples/metrics/metrics.pro.in libmd5/libmd5.pro.in addon/doxyapp/doxyapp.pro.in"
for i in $f_inprofiles ; do
SRC=$i
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 5c666af..74ed73d 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -35,8 +35,7 @@ INPUT = index.doc install.doc starting.doc docblocks.doc lists.doc \
grouping.doc formulas.doc diagrams.doc preprocessing.doc \
autolink.doc output.doc searching.doc customize.doc custcmd.doc \
external.doc faq.doc trouble.doc features.doc \
- doxygen_usage.doc doxytag_usage.doc \
- doxywizard_usage.doc installdox_usage.doc \
+ doxygen_usage.doc doxywizard_usage.doc \
config.doc commands.doc htmlcmds.doc xmlcmds.doc language.doc \
perlmod.doc perlmod_tree.doc arch.doc
FILE_PATTERNS = *.cpp *.h *.doc
diff --git a/doc/commands.doc b/doc/commands.doc
index f2c3ddd..0b1db8c 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -192,7 +192,7 @@ documentation:
\refitem cmdhash \\\#
\refitem cmdperc \\\%
\refitem cmdquot \\\"
-\refitem cmddcolon \\\::
+\refitem cmddcolon \::
\endsecreflist
The following subsections provide a list of all commands that are recognized by
@@ -219,7 +219,7 @@ Structural indicators
\verbatim
/*! \addtogroup mygrp
- * Additional documentation for group `mygrp'
+ * Additional documentation for group 'mygrp'
* @{
*/
@@ -699,8 +699,8 @@ Structural indicators
This command can be used to generate the following
standard text for an overloaded member function:
- `This is an overloaded member function, provided for convenience.
- It differs from the above function only in what argument(s) it accepts.'
+ > This is an overloaded member function, provided for convenience.
+ > It differs from the above function only in what argument(s) it accepts.
If the documentation for the overloaded member function is not located
in front of the function declaration or definition, the optional
@@ -738,7 +738,7 @@ Structural indicators
not directly related to one specific class, file or member.
The HTML generator creates a page containing the documentation. The
\f$\mbox{\LaTeX}\f$ generator
- starts a new section in the chapter `Page documentation'.
+ starts a new section in the chapter 'Page documentation'.
\par Example:
\verbinclude page.doc
@@ -878,7 +878,7 @@ Structural indicators
\addindex \\relates
This command can be used in the documentation of a non-member function
- \<name\>. It puts the function inside the `related function' section
+ \<name\>. It puts the function inside the 'related function' section
of the class documentation. This command is useful for documenting
non-friend functions that are nevertheless strongly coupled to a certain
class. It prevents the need of having to document a file, but
@@ -902,7 +902,7 @@ Structural indicators
\addindex \\relatesalso
This command can be used in the documentation of a non-member function
- \<name\>. It puts the function both inside the `related function' section
+ \<name\>. It puts the function both inside the 'related function' section
of the class documentation as well as leaving it at its normal file documentation
location. This command is useful for documenting
non-friend functions that are nevertheless strongly coupled to a certain
@@ -1845,7 +1845,7 @@ Commands for displaying examples
tag of doxygen's configuration file.
The class and member declarations and definitions inside the code fragment
- are `remembered' during the parsing of the comment block that contained
+ are 'remembered' during the parsing of the comment block that contained
the \\dontinclude command.
For line by line descriptions of source files, one or more lines
@@ -2167,7 +2167,7 @@ Commands for visual enhancements
should also be documented for the copying to work.
To copy the documentation for a member of a
- class for instance one can put the following in the documentation
+ class one can, for instance, put the following in the documentation:
\verbatim
/*! @copydoc MyClass::myfunction()
@@ -2179,7 +2179,7 @@ Commands for visual enhancements
explicitly (without spaces!), like in the following:
\verbatim
- /*! @copydoc MyClass::myfunction(type1,type2) */
+ //! @copydoc MyClass::myfunction(type1,type2)
\endverbatim
Qualified names are only needed if the context in which the documentation
@@ -2188,13 +2188,15 @@ Commands for visual enhancements
The \\copydoc command can be used recursively, but cycles in the \\copydoc
relation will be broken and flagged as an error.
- Note that both the brief description and the detailed documentation
- will be copied. See \ref cmdcopybrief "\\copybrief" and
+ Note that <code>\\copydoc foo()</code> is roughly equivalent to doing:
+\verbatim
+ \brief \copybrief foo()
+ \details \copydetails foo()
+\endverbatim
+ See \ref cmdcopybrief "\\copybrief" and
\ref cmdcopydetails "\\copydetails" for copying only the brief or
detailed part of the comment block.
- \sa sections \ref cmdcopybrief "\\copybrief" and \ref cmdcopydetails "\\copydetails"
-
<hr>
\section cmdcopybrief \\copybrief <link-object>
diff --git a/doc/config.doc b/doc/config.doc
index 677b991..9ec918b 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -202,6 +202,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_man_extension MAN_EXTENSION
\refitem cfg_man_links MAN_LINKS
\refitem cfg_man_output MAN_OUTPUT
+\refitem cfg_markdown_support MARKDOWN_SUPPORT
\refitem cfg_mathjax_extensions MATHJAX_EXTENSIONS
\refitem cfg_mathjax_relpath MATHJAX_RELPATH
\refitem cfg_max_dot_graph_depth MAX_DOT_GRAPH_DEPTH
@@ -459,6 +460,16 @@ followed by the descriptions of the tags grouped by category.
Qt-style will behave just like regular Qt-style comments (thus
requiring an explicit \\brief command for a brief description.)
+\anchor cfg_markdown_support
+<dt>\c MARKDOWN_SUPPORT <dd>
+ \addindex MARKDOWN_SUPPORT
+ If \c MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+ comments according to the Markdown format, which allows for more readable
+ documentation. See http://daringfireball.net/projects/markdown/ for details.
+ The output of markdown processing is further processed by doxygen, so you
+ can mix doxygen, HTML, and XML commands with Markdown formatting.
+ Disable only in case of backward compatibilities issues.
+
\anchor cfg_builtin_stl_support
<dt>\c BUILTIN_STL_SUPPORT <dd>
\addindex BUILTIN_STL_SUPPORT
@@ -1116,7 +1127,7 @@ AClass::ANamespace, ANamespace::*Test
Note that the wildcards are matched against the file with absolute path,
so to exclude all test directories use the pattern
- <code>*</code><code>/test/</code><code>*</code>
+ `*``/test/``*`
\anchor cfg_example_path
<dt>\c EXAMPLE_PATH <dd>
@@ -1137,8 +1148,8 @@ AClass::ANamespace, ANamespace::*Test
<dt>\c EXAMPLE_PATTERNS <dd>
\addindex EXAMPLE_PATTERNS
If the value of the \c EXAMPLE_PATH tag contains directories, you can use the
- \c EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
- and *.h) to filter out the source-files in the directories. If left
+ \c EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like `*.cpp`
+ and `*.h`) to filter out the source-files in the directories. If left
blank all files are included.
\anchor cfg_image_path
@@ -1168,7 +1179,7 @@ AClass::ANamespace, ANamespace::*Test
The \c FILTER_PATTERNS tag can be used to specify filters on a per file pattern
basis. Doxygen will compare the file name with each pattern and apply the
filter if there is a match. The filters are a list of the form:
- pattern=filter (like <code>*.cpp=my_cpp_filter</code>). See \c INPUT_FILTER for further
+ pattern=filter (like `*.cpp=my_cpp_filter`). See \c INPUT_FILTER for further
info on how filters are used. If \c FILTER_PATTERNS is empty or if
non of the patterns match the file name, \c INPUT_FILTER is applied.
@@ -1186,7 +1197,7 @@ AClass::ANamespace, ANamespace::*Test
The \c FILTER_SOURCE_PATTERNS tag can be used to specify source filters per
file pattern. A pattern will override the setting for \c FILTER_PATTERN (if any)
and it is also possible to disable source filtering for a specific pattern
- using *.ext= (so without naming a filter). This option only has effect when
+ using `*.ext=` (so without naming a filter). This option only has effect when
\c FILTER_SOURCE_FILES is enabled.
</dl>
@@ -1308,7 +1319,7 @@ AClass::ANamespace, ANamespace::*Test
\addindex HTML_OUTPUT
The \c HTML_OUTPUT tag is used to specify where the HTML docs will be put.
If a relative path is entered the value of \c OUTPUT_DIRECTORY will be
- put in front of it. If left blank `html' will be used as the default path.
+ put in front of it. If left blank 'html' will be used as the default path.
\anchor cfg_html_file_extension
<dt>\c HTML_FILE_EXTENSION <dd>
@@ -1778,7 +1789,7 @@ and Class Hierarchy pages using a tree view instead of an ordered list.
Use this tag to change the font size of Latex formulas included
as images in the HTML documentation. The default is 10.
when you change the font size after a successful doxygen run you need
- to manually remove any <code>form_*.png</code> images from the HTML
+ to manually remove any `form_*.png` images from the HTML
output directory to force them to be regenerated.
\anchor cfg_formula_transparent
@@ -1787,7 +1798,7 @@ and Class Hierarchy pages using a tree view instead of an ordered list.
Use the \c FORMULA_TRANPARENT tag to determine whether or not the images
generated for formulas are transparent PNGs. Transparent PNGs are
not supported properly for IE 6.0, but are supported on all modern browsers.
- Note that when changing this option you need to delete any form_*.png files
+ Note that when changing this option you need to delete any `form_*.png` files
in the HTML output before the changes have effect.
\anchor cfg_use_mathjax
@@ -1837,13 +1848,13 @@ MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
The \c LATEX_OUTPUT tag is used to specify where the \f$\mbox{\LaTeX}\f$
docs will be put.
If a relative path is entered the value of \c OUTPUT_DIRECTORY will be
- put in front of it. If left blank `latex' will be used as the default path.
+ put in front of it. If left blank 'latex' will be used as the default path.
\anchor cfg_latex_cmd_name
<dt>\c LATEX_CMD_NAME <dd>
\addindex LATEX_CMD_NAME
The \c LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked.
- If left blank `latex' will be used as the default command name.
+ If left blank 'latex' will be used as the default command name.
Note that when enabling USE_PDFLATEX this option is only used for
generating bitmaps for formulas in the HTML output, but not in the
Makefile that is written to the output directory.
@@ -1852,7 +1863,7 @@ MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
<dt>\c MAKEINDEX_CMD_NAME <dd>
\addindex MAKEINDEX_CMD_NAME
The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
- generate index for LaTeX. If left blank `makeindex' will be used as the
+ generate index for LaTeX. If left blank 'makeindex' will be used as the
default command name.
\anchor cfg_compact_latex
@@ -2039,7 +2050,7 @@ EXTRA_PACKAGES = times
\addindex MAN_OUTPUT
The \c MAN_OUTPUT tag is used to specify where the man pages will be put.
If a relative path is entered the value of \c OUTPUT_DIRECTORY will be
- put in front of it. If left blank `man' will be used as the default path.
+ put in front of it. If left blank 'man' will be used as the default path.
A directory man3 will be created inside the directory specified by
\c MAN_OUTPUT.
@@ -2195,7 +2206,7 @@ EXTRA_PACKAGES = times
<dt>\c INCLUDE_FILE_PATTERNS <dd>
\addindex INCLUDE_FILE_PATTERNS
You can use the \c INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
- patterns (like *.h and *.hpp) to filter out the header-files in the
+ patterns (like `*.h` and `*.hpp`) to filter out the header-files in the
directories. If left blank, the patterns specified with \c FILE_PATTERNS will
be used.
@@ -2234,27 +2245,13 @@ 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:
+ The \c TAGFILES tag can be used to specify one or more tag files.
+
+ See \ref external for more information about the use of tag files.
+
+ \note
Each tag file must have a unique name
- (where the name does \e not include the path)
+ (where the name does \e not include the path).
If a tag file is not located in the directory in which doxygen
is run, you must also specify the path to the tagfile here.
@@ -2263,7 +2260,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
\addindex GENERATE_TAGFILE
When a file name is specified after \c GENERATE_TAGFILE, doxygen will create
a tag file that is based on the input files it reads.
- See section \ref doxytag_usage for more information about the usage of
+ See section \ref external for more information about the usage of
tag files.
\anchor cfg_allexternals
@@ -2284,7 +2281,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
<dt>\c PERL_PATH <dd>
\addindex PERL_PATH
The \c PERL_PATH should be the absolute path and name of the perl script
- interpreter (i.e. the result of `<tt>which perl</tt>').
+ interpreter (i.e. the result of '<tt>which perl</tt>').
</dl>
\section config_dot Dot options
diff --git a/doc/diagrams.doc b/doc/diagrams.doc
index 78fcfbd..0f5c607 100644
--- a/doc/diagrams.doc
+++ b/doc/diagrams.doc
@@ -115,7 +115,7 @@
edge of the arrow is labeled with the variable(s) responsible for the
relation.
Class \c A uses class \c B, if class \c A has a member variable \c m
- of type C, where B is a subtype of C (e.g. C could be \c B, \c B*, <code>T\<B\>*</code> ).
+ of type C, where B is a subtype of C (e.g. `C` could be `B`, `B*`, `T\<B\>*`).
</ul>
diff --git a/doc/doxygen.1 b/doc/doxygen.1
index 37e4adb..deb0c20 100644
--- a/doc/doxygen.1
+++ b/doc/doxygen.1
@@ -43,4 +43,4 @@ If configName is omitted `Doxyfile' will be used as a default.
.SH AUTHOR
Doxygen version VERSION, Copyright Dimitri van Heesch 1997-2011
.SH SEE ALSO
-doxytag(1), doxywizard(1).
+doxywizard(1).
diff --git a/doc/doxygen.sty b/doc/doxygen.sty
index 4bd82f1..44becf8 100644
--- a/doc/doxygen.sty
+++ b/doc/doxygen.sty
@@ -1,40 +1,74 @@
-%
-%
-%
-% Copyright (C) 1997-2011 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.
-%
-% Documents produced by Doxygen are derivative works derived from the
-% input used in their production; they are not affected by this license.
-
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doxygen}
-\RequirePackage{calc}
+
+% Packages used by this style file
+\RequirePackage{alltt}
\RequirePackage{array}
+\RequirePackage{calc}
+\RequirePackage{color}
+\RequirePackage{fancyhdr}
+\RequirePackage{longtable}
\RequirePackage{verbatim}
-\pagestyle{fancyplain}
-\addtolength{\headwidth}{\marginparsep}
-\addtolength{\headwidth}{\marginparwidth}
-\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}
-\lhead[\fancyplain{}{\bfseries\thepage}]
- {\fancyplain{}{\bfseries\rightmark}}
-\rhead[\fancyplain{}{\bfseries\leftmark}]
- {\fancyplain{}{\bfseries\thepage}}
-\rfoot[\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2011}]{}
-\lfoot[]{\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2011}}
-\cfoot{}
+\RequirePackage{ifthen}
+\RequirePackage[table]{xcolor}
+% Use helvetica font instead of times roman
+\RequirePackage{helvet}
+\RequirePackage{sectsty}
+\RequirePackage{tocloft}
+\providecommand{\rmdefault}{phv}
+\providecommand{\bfdefault}{bc}
+
+
+% Setup fancy headings
+\pagestyle{fancyplain}
+\newcommand{\clearemptydoublepage}{%
+ \newpage{\pagestyle{empty}\cleardoublepage}%
+}
+\renewcommand{\chaptermark}[1]{%
+ \markboth{#1}{}%
+}
+\renewcommand{\sectionmark}[1]{%
+ \markright{\thesection\ #1}%
+}
+\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}}
+\fancyhead[CE]{\fancyplain{}{}}
+\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}}
+\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}}
+\fancyhead[CO]{\fancyplain{}{}}
+\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}}
+\fancyfoot[LE]{\fancyplain{}{}}
+\fancyfoot[CE]{\fancyplain{}{}}
+\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated on Fri Dec 16 2011 21\-:40\-:27 for My Project by Doxygen }}
+\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated on Fri Dec 16 2011 21\-:40\-:27 for My Project by Doxygen }}
+\fancyfoot[CO]{\fancyplain{}{}}
+\fancyfoot[RO]{\fancyplain{}{}}
%---------- Internal commands used in this style file ----------------
+\newcommand\tabfill[1]{%
+ \dimen@\linewidth%
+ \advance\dimen@\@totalleftmargin%
+ \advance\dimen@-\dimen\@curtab%
+ \parbox[t]\dimen@{\raggedright #1\ifhmode\strut\fi}%
+}
+
+\newcommand{\ensurespace}[1]{%
+ \begingroup
+ \setlength{\dimen@}{#1}%
+ \vskip\z@\@plus\dimen@
+ \penalty -100\vskip\z@\@plus -\dimen@
+ \vskip\dimen@
+ \penalty 9999%
+ \vskip -\dimen@
+ \vskip\z@skip % hide the previous |\vskip| from |\addvspace|
+ \endgroup
+}
+
% Generic environment used by all paragraph-based environments defined
% below. Note that the command \title{...} needs to be defined inside
% those environments!
\newenvironment{DoxyDesc}[1]{%
+ \ensurespace{4\baselineskip}%
\begin{list}{}%
{%
\settowidth{\labelwidth}{40pt}%
@@ -43,7 +77,7 @@
\setlength{\itemsep}{-4pt}%
\renewcommand{\makelabel}{\entrylabel}%
}%
- \item[#1:]%
+ \item[#1]%
}{%
\end{list}%
}
@@ -177,6 +211,13 @@
\end{DoxyDesc}%
}
+% Used by @copyright
+\newenvironment{DoxyCopyright}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
% Used by @remark
\newenvironment{DoxyRemark}[1]{%
\begin{DoxyDesc}{#1}%
@@ -221,9 +262,8 @@
% Used by @internal
\newenvironment{DoxyInternal}[1]{%
- \begin{DoxyDesc}{#1}%
+ \paragraph*{#1}%
}{%
- \end{DoxyDesc}%
}
% Used by @par and @paragraph
@@ -242,19 +282,62 @@
}
% Used by parameter lists
-\newenvironment{DoxyParams}[1]{%
+\newenvironment{DoxyParams}[2][]{%
+ \begin{DoxyDesc}{#2}%
+ \item[] \hspace{\fill} \vspace{-40pt}%
+ \settowidth{\labelwidth}{40pt}%
+ \setlength{\LTleft}{0pt}%
+ \setlength{\tabcolsep}{0.01\textwidth}%
+ \ifthenelse{\equal{#1}{}}%
+ {\begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+ p{0.815\textwidth}|}}%
+ {\ifthenelse{\equal{#1}{1}}%
+ {\begin{longtable}{|>{\centering}p{0.10\textwidth}|%
+ >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+ p{0.685\textwidth}|}}%
+ {\begin{longtable}{|>{\centering}p{0.10\textwidth}|%
+ >{\centering\hspace{0pt}}p{0.15\textwidth}|%
+ >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+ p{0.515\textwidth}|}}%
+ }\hline%
+}{%
+ \end{longtable}%
+ \end{DoxyDesc}%
+}
+
+% Used for fields of simple structs
+\newenvironment{DoxyFields}[1]{%
\begin{DoxyDesc}{#1}%
- \begin{description}%
+ \item[] \hspace{\fill} \vspace{-40pt}%
+ \settowidth{\labelwidth}{40pt}%
+ \setlength{\LTleft}{0pt}%
+ \setlength{\tabcolsep}{0.01\textwidth}%
+ \begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+ p{0.15\textwidth}|%
+ p{0.635\textwidth}|}%
+ \hline%
}{%
- \end{description}%
+ \end{longtable}%
\end{DoxyDesc}%
}
+% is used for parameters within a detailed function description
+\newenvironment{DoxyParamCaption}{%
+ \renewcommand{\item}[2][]{##1 {\em ##2}}%
+ }{%
+}
+
% Used by return value lists
\newenvironment{DoxyRetVals}[1]{%
\begin{DoxyDesc}{#1}%
\begin{description}%
+ \item[] \hspace{\fill} \vspace{-25pt}%
+ \setlength{\tabcolsep}{0.01\textwidth}%
+ \begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+ p{0.77\textwidth}|}%
+ \hline%
}{%
+ \end{longtable}%
\end{description}%
\end{DoxyDesc}%
}
@@ -263,7 +346,16 @@
\newenvironment{DoxyExceptions}[1]{%
\begin{DoxyDesc}{#1}%
\begin{description}%
+ \item[] \hspace{\fill} \vspace{-25pt}%
+ \definecolor{tableShade}{HTML}{F8F8F8}%
+ \rowcolors{1}{white}{tableShade}%
+ \arrayrulecolor{gray}%
+ \setlength{\tabcolsep}{0.01\textwidth}%
+ \begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+ p{0.77\textwidth}|}%
+ \hline%
}{%
+ \end{longtable}%
\end{description}%
\end{DoxyDesc}%
}
@@ -272,7 +364,16 @@
\newenvironment{DoxyTemplParams}[1]{%
\begin{DoxyDesc}{#1}%
\begin{description}%
+ \item[] \hspace{\fill} \vspace{-25pt}%
+ \definecolor{tableShade}{HTML}{F8F8F8}%
+ \rowcolors{1}{white}{tableShade}%
+ \arrayrulecolor{gray}%
+ \setlength{\tabcolsep}{0.01\textwidth}%
+ \begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+ p{0.77\textwidth}|}%
+ \hline%
}{%
+ \end{longtable}%
\end{description}%
\end{DoxyDesc}%
}
@@ -284,12 +385,12 @@
\setlength{\itemsep}{0pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
- \renewcommand{\makelabel}{}}}
+ \renewcommand{\makelabel}{\hfill}}}
{\end{list}}
\newenvironment{DoxyCompactItemize}
{
\begin{itemize}
- \setlength{\itemsep}{-4pt}
+ \setlength{\itemsep}{-3pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
@@ -306,7 +407,8 @@
}
{\end{tabular*}\par}
\newcommand{\entrylabel}[1]{
- {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\\}}}
+ {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{%
+ \usefont{OT1}{phv}{bc}{n}\color{darkgray}#1}\vspace{1.5\baselineskip}}}}
\newenvironment{Desc}
{\begin{list}{}
{
@@ -318,6 +420,63 @@
}
}
{\end{list}}
+\newsavebox{\xrefbox}
+\newlength{\xreflength}
+\newcommand{\xreflabel}[1]{%
+ \sbox{\xrefbox}{#1}%
+ \setlength{\xreflength}{\wd\xrefbox}%
+ \ifthenelse{\xreflength>\labelwidth}{%
+ \begin{minipage}{\textwidth}%
+ \setlength{\parindent}{0pt}%
+ \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
+ \end{minipage}%
+ }{%
+ \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
+ }}%
+\newenvironment{DoxyRefList}{%
+ \begin{list}{}{%
+ \setlength{\labelwidth}{10pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \renewcommand{\makelabel}{\xreflabel}%
+ }%
+ }%
+{\end{list}}
+\newenvironment{DoxyRefDesc}[1]
+{\begin{list}{}{%
+ \renewcommand\makelabel[1]{\textbf{##1}}
+ \settowidth\labelwidth{\makelabel{#1}}
+ \setlength\leftmargin{\labelwidth+\labelsep}}}
+{\end{list}}
+\newenvironment{Indent}
+ {\begin{list}{}{\setlength{\leftmargin}{0.5cm}}
+ \item[]\ignorespaces}
+ {\unskip\end{list}}
\setlength{\parindent}{0cm}
\setlength{\parskip}{0.2cm}
-\sloppy
+\addtocounter{secnumdepth}{2}
+\usepackage[T1]{fontenc}
+\makeatletter
+\renewcommand{\paragraph}{\@startsection{paragraph}{4}{0ex}%
+ {-1.0ex}%
+ {1.0ex}%
+ {\usefont{OT1}{phv}{bc}{n}\color{darkgray}}}
+\renewcommand{\subparagraph}{\@startsection{subparagraph}{5}{0ex}%
+ {-1.0ex}%
+ {1.0ex}%
+ {\usefont{OT1}{phv}{bc}{n}\color{darkgray}}}
+\makeatother
+\allsectionsfont{\usefont{OT1}{phv}{bc}{n}\selectfont\color{darkgray}}
+\stepcounter{secnumdepth}
+\stepcounter{tocdepth}
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex
index 9dfd459..010ba4c 100644
--- a/doc/doxygen_manual.tex
+++ b/doc/doxygen_manual.tex
@@ -12,30 +12,55 @@
% Documents produced by Doxygen are derivative works derived from the
% input used in their production; they are not affected by this license.
-\documentclass[a4paper]{report}
+\documentclass[a4paper]{book}
\usepackage{makeidx}
-\usepackage{fancyhdr}
-\usepackage{float}
-\usepackage{longtable}
+\usepackage{natbib}
\usepackage{graphicx}
-\usepackage{epsf}
-\usepackage{doxygen}
\usepackage{multicol}
-\usepackage{times}
+\usepackage{float}
+\usepackage{listings}
+\usepackage{color}
+\usepackage{ifthen}
+\usepackage[table]{xcolor}
+\usepackage{textcomp}
\usepackage{alltt}
-\usepackage{tocloft}
+\usepackage{ifpdf}
+\ifpdf
\usepackage[pdftex,
pagebackref=true,
colorlinks=true,
- linkcolor=blue
+ linkcolor=blue,
+ unicode
]{hyperref}
+\else
+\usepackage[ps2pdf,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\usepackage{pspicture}
+\fi
+\usepackage[utf8]{inputenc}
+\usepackage{mathptmx}
+\usepackage[scaled=.90]{helvet}
+\usepackage{courier}
+\usepackage{sectsty}
+\usepackage[titles]{tocloft}
+\usepackage{doxygen}
+\lstset{language=C++,inputencoding=utf8,basicstyle=\footnotesize,breaklines=true,breakatwhitespace=true,tabsize=8,numbers=left }
\makeindex
-\setcounter{tocdepth}{1}
+\setcounter{tocdepth}{3}
\renewcommand{\footrulewidth}{0.4pt}
+\renewcommand{\familydefault}{\sfdefault}
\renewcommand{\cftsecindent}{0 em}
\renewcommand{\cftsecnumwidth}{3.2 em}
\renewcommand{\cftsubsecindent}{3.2 em}
\newcommand{\thisyear}{\the\year}
+\hfuzz=15pt
+\setlength{\emergencystretch}{15pt}
+\hbadness=750
+\tolerance=750
\begin{document}
\begin{titlepage}
\includegraphics[width=\textwidth]{doxygen_logo}
@@ -70,9 +95,7 @@ Written by Dimitri van Heesch\\[2ex]
\part{Reference Manual}
\chapter{Features}\label{features}\hypertarget{features}{}\input{features}
\chapter{Doxygen usage}\label{doxygen_usage}\hypertarget{doxygen_usage}{}\input{doxygen_usage}
-\chapter{Doxytag usage}\label{doxytag_usage}\hypertarget{doxytag_usage}{}\input{doxytag_usage}
\chapter{Doxywizard usage}\label{doxywizard_usage}\hypertarget{doxywizard_usage}{}\input{doxywizard_usage}
-\chapter{Installdox usage}\label{installdox_usage}\hypertarget{installdox_usage}{}\input{installdox_usage}
\chapter{Configuration}\label{config}\hypertarget{config}{}\input{config}
\chapter{Special Commands}\label{commands}\hypertarget{commands}{}\input{commands}
\chapter{HTML commands}\label{htmlcmds}\hypertarget{htmlcmds}{}\input{htmlcmds}
diff --git a/doc/doxytag.1 b/doc/doxytag.1
deleted file mode 100644
index a28879a..0000000
--- a/doc/doxytag.1
+++ /dev/null
@@ -1,21 +0,0 @@
-.TH DOXYTAG "1" "DATE" "doxytag VERSION" "User Commands"
-.SH NAME
-doxytag \- generates a tag file and/or a search index for a set of HTML files
-.SH SYNOPSIS
-.B doxytag
-[\fI-t tag_file\fR] [\fI-s index_file\fR] [ \fIhtml_file \fR[\fIhtml_file\fR...] ]
-.SH DESCRIPTION
-Generates a tag file and/or a search index for a set of HTML files. Use
-doxysearch as a CGI program to search the tag file generated by doxytag.
-.SH OPTIONS
-.TP
-\fB\-t\fR <tag_file>
-Generate tag file <tag_file>.
-.TP
-\fB\-s\fR <index_file>
-Generate search index <index_file>.
-.PP
-If no HTML files are given all files in the current dir that
-have a .html extension are parsed.
-.SH SEE ALSO
-doxygen(1), doxywizard(1).
diff --git a/doc/doxytag_usage.doc b/doc/doxytag_usage.doc
deleted file mode 100644
index 25d45fd..0000000
--- a/doc/doxytag_usage.doc
+++ /dev/null
@@ -1,97 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2011 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.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-/*! \page doxytag_usage Doxytag usage
-
-Doxytag is a small command line based utility.
-It can generate <em>tag files</em>.
-These tag files can be used with <a href="doxygen_usage.html">doxygen</a>
-to generate references to external documentation
-(i.e. documentation not contained in the input files that are used by
-doxygen).
-
-A tag file contains information about files, classes and members
-documented in external documentation. Doxytag extracts this information
-directly from the HTML files. This has the advantage that you do not need
-to have the sources from which the documentation was extracted.
-
-If you \e do have the sources it is better to let \c doxygen generate the
-tag file by putting the name of the tag file after
-\ref cfg_generate_tagfile "GENERATE_TAGFILE" in
-the configuration file.
-
-The input of doxytag consists of a set of HTML files.
-
-\par Important:
- If you use tag files, the links that
- are generated by doxygen will contain \e dummy links. You have to run
- the \c installdox script to change these dummy links into real links.
- See \ref installdox_usage for more information.
- The use of dummy links may seem redundant, but it is really useful,
- if you want to move the external documentation to another location.
- Then the documentation does not need to be regenerated by \c doxygen,
- only \c installdox has to be run.
-
-\par Note:
- Because the HTML files are expected to have a certain
- structure, only HTML files generated with doxygen or with Qt's class
- browser generator can be used. Doxytag only <em>reads</em> the HTML files,
- they are not altered in any way.
-
-Doxytag expects a list of all HTML files that form the documentation
-or a directory that contains all HTML files. If neither is present doxytag
-will read all files with a <tt>.html</tt> extension from the current directory.
-If doxytag is used with the <code>-t</code> flag it generates a tag file.
-
-\par Example 1:
- Suppose the file \c example.cpp from the \c examples directory that is listed
- below is included in some package for which you do not have the sources.
- Fortunately, the distributor of the packages included the HTML documentation
- that was generated by doxygen in the package.
- \verbinclude example.cpp
- Now you can create a tag file from the HTML files in the package by
- typing:
-\verbatim
-doxytag -t example.tag example/html
-\endverbatim
- from the examples directory.
- Finally you can use this tag file with your own piece of code, such
- as done in the following example:
- \verbinclude tag.cpp
- Doxygen will now include links to the external package in your own
- 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 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
- directory or URL you can simply run the script again and all links in
- the HTML files will be updated.
-
- \htmlonly
- Click <a href="$(DOXYGEN_DOCDIR)/examples/tag/html/index.html">here</a>
- for the corresponding HTML documentation that is generated by Doxygen using
- only the tag file and second piece of code.
- \endhtmlonly
-
-\par Example 2:
- To generate a tag file of the Qt documentation you can do the following:
-\verbatim
-doxytag -t qt.tag $QTDIR/doc/html
-\endverbatim
-
-*/
diff --git a/doc/doxywizard.1 b/doc/doxywizard.1
index 4195cbb..a209f21 100644
--- a/doc/doxywizard.1
+++ b/doc/doxywizard.1
@@ -7,4 +7,4 @@ doxywizard \- a tool to configure and run doxygen on your source files
Doxywizard is an interactive frontend to the doxygen tool to configure
and run doxygen on your source files.
.SH SEE ALSO
-doxygen(1), doxytag(1).
+doxygen(1)
diff --git a/doc/external.doc b/doc/external.doc
index a1be8b1..2a6426e 100644
--- a/doc/external.doc
+++ b/doc/external.doc
@@ -58,21 +58,15 @@ To combine the output of one or more external projects with your own project
you should specify the name of the tag files after
the \ref cfg_tagfiles "TAGFILES" option in the configuration file.
-A tag file does not contain information about where the external documentation
-is located. This could be a directory or an URL. So when you include a tag
-file you have to specify where the external documentation is located.
-There are two ways to do this:
-<dl>
-<dt>At configuration time:<dd> just assign the location of the output to the
- tag files specified after the \ref cfg_tagfiles "TAGFILES" configuration
- option. If you use a relative path it should be relative with respect to
- the directory where the HTML output of your project is generated.
-<dt>After compile time:<dd> if you do not assign a location to a tag file,
- doxygen will generate dummy links for all external HTML references. It will
- also generate a perl script called \ref installdox_usage "installdox" in
- the HTML output directory. This script should be run to replace the
- dummy links with real links for all generated HTML files.
-</dl>
+A tag file typically only contains a relative location of the documentation from the
+point where doxygen was run. So when you include a tag file in other project
+you have to specify where the external documentation is located in relation this project.
+You can do this in the configuration file by assigning the (relative) location to the
+tag files specified after the \ref cfg_tagfiles "TAGFILES" configuration
+option. If you use a relative path it should be relative with respect to
+the directory where the HTML output of your project is generated; so a relative path
+from the HTML output directory of a project to the HTML output of the other project that
+is linked to.
\par Example:
Suppose you have a project \c proj that uses two external
@@ -118,18 +112,6 @@ OUTPUT_DIRECTORY = ext2
GENERATE_TAGFILE = ext2/ext2.tag
\endverbatim
-In some (hopefully exceptional) cases you may have the documentation
-generated by doxygen, but not the sources nor a tag file. In this case you
-can use the \ref doxytag_usage "doxytag" tool to extract a tag file from
-the generated HTML sources. Another case where you should use doxytag is
-if you want to create a tag file for the Qt documentation.
-
-The tool \c doxytag depends on the particular structure
-of the generated output and on some special markers that are generated by
-doxygen. Since this type of extraction is brittle and error-prone I
-suggest you only use this approach if there is no alternative. The
-doxytag tool may even become obsolete in the future.
-
\htmlonly
Go to the <a href="faq.html">next</a> section or return to the
<a href="index.html">index</a>.
diff --git a/doc/htmlcmds.doc b/doc/htmlcmds.doc
index 1327246..aa03498 100644
--- a/doc/htmlcmds.doc
+++ b/doc/htmlcmds.doc
@@ -30,6 +30,8 @@ of a HTML tag are passed on to the HTML output only
<li><tt>\</A\></tt> Ends a link or anchor
<li><tt>\<B\></tt> Starts a piece of text displayed in a bold font.
<li><tt>\</B\></tt> Ends a <tt>\<B\></tt> section.
+<li><tt>\<BLOCKQUOTE\></tt> Starts a quotation block.
+<li><tt>\</BLOCKQUOTE\></tt> Ends the quotation block.
<li><tt>\<BODY\></tt> Does not generate any output.
<li><tt>\</BODY\></tt> Does not generate any output.
<li><tt>\<BR\></tt> Forces a line break.
diff --git a/doc/index.doc b/doc/index.doc
index fca1bd3..9d10829 100644
--- a/doc/index.doc
+++ b/doc/index.doc
@@ -88,10 +88,7 @@ The second part forms a reference manual:
<ul>
<li>Section \ref features presents an overview of what doxygen can do.
<li>Section \ref doxygen_usage shows how to use the \c doxygen program.
-<li>Section \ref doxytag_usage shows how to use the \c doxytag program.
<li>Section \ref doxywizard_usage shows how to use the \c doxywizard program.
-<li>Section \ref installdox_usage shows how to use the \c installdox
- script that is generated by doxygen if you use tag files.
<li>Section \ref config shows how to fine-tune doxygen, so it
generates the documentation you want.
<li>Section \ref commands shows an overview of the special commands that can be
diff --git a/doc/infoflow.eps b/doc/infoflow.eps
index dd7f799..f11b1fc 100644
--- a/doc/infoflow.eps
+++ b/doc/infoflow.eps
@@ -1,11 +1,12 @@
-%!PS-Adobe-2.0 EPSF-2.0
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: infoflow.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 5
-%%CreationDate: Sun Aug 17 14:52:37 2008
-%%For: dimitri@macbook.home.nl (Dimitri Van Heesch)
+%%Creator: fig2dev Version 3.2 Patchlevel 5d
+%%CreationDate: Thu Dec 29 10:46:41 2011
+%%For: dimitri@macbookpro (Dimitri van Heesch)
%%BoundingBox: 0 0 661 582
%Magnification: 1.0000
%%EndComments
+%%BeginProlog
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
@@ -46,10 +47,6 @@ $F2psDict /mtrx matrix put
/col33 {0.000 0.000 0.000 srgb} bind def
end
-save
-newpath 0 582 moveto 0 0 lineto 661 0 lineto 661 582 lineto closepath clip newpath
--53.3 599.2 translate
-1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
@@ -123,10 +120,22 @@ newfontname newfont definefont pop end } def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
+/pageheader {
+save
+newpath 0 582 moveto 0 0 lineto 661 0 lineto 661 582 lineto closepath clip newpath
+-53.3 599.2 translate
+1 -1 scale
$F2psBegin
10 setmiterlimit
0 slj 0 slc
0.06000 0.06000 sc
+} bind def
+/pagefooter {
+$F2psEnd
+restore
+} bind def
+%%EndProlog
+pageheader
%
% Fig objects follow
%
@@ -412,32 +421,11 @@ n 7875 9150 m
% arrowhead
n 8864 9180 m 8984 9150 l 8864 9120 l 8864 9180 l cp gs 0.00 setgray ef gr col0 s
% Polyline
-n 3300 8850 m 5100 8850 l 5100 9525 l 3300 9525 l
- cp gs col32 1.00 shd ef gr gs col0 s gr
-% Polyline
-gs clippath
-5236 9270 m 5085 9270 l 5085 9330 l 5236 9330 l 5236 9330 l 5116 9300 l 5236 9270 l cp
-eoclip
-n 6675 9300 m
- 5100 9300 l gs col0 s gr gr
-
-% arrowhead
-n 5236 9270 m 5116 9300 l 5236 9330 l 5236 9270 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
[60] 0 sd
n 8700 6450 m 11850 6450 l 11850 9975 l 8700 9975 l
cp gs col0 s gr [] 0 sd
% Polyline
gs clippath
-4305 7261 m 4305 7110 l 4245 7110 l 4245 7261 l 4245 7261 l 4275 7141 l 4305 7261 l cp
-eoclip
-n 4275 8850 m
- 4275 7125 l gs col0 s gr gr
-
-% arrowhead
-n 4305 7261 m 4275 7141 l 4245 7261 l 4305 7261 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
4845 1514 m 4845 1665 l 4905 1665 l 4905 1514 l 4905 1514 l 4875 1634 l 4845 1514 l cp
4905 1186 m 4905 1035 l 4845 1035 l 4845 1186 l 4845 1186 l 4875 1066 l 4905 1186 l cp
eoclip
@@ -551,12 +539,6 @@ gs 1 -1 sc (HTML) col0 sh gr
6975 9300 m
gs 1 -1 sc (pages) col0 sh gr
/Times-Roman-iso ff 200.00 scf sf
-5475 9525 m
-gs 1 -1 sc (parse) col0 sh gr
-/Times-Roman-iso ff 200.00 scf sf
-3825 9300 m
-gs 1 -1 sc (Doxytag) col0 sh gr
-/Times-Roman-iso ff 200.00 scf sf
8775 6675 m
gs 1 -1 sc (Windows only) col0 sh gr
/Times-Roman-iso ff 200.00 scf sf
@@ -569,9 +551,6 @@ gs 1 -1 sc (Sources) col0 sh gr
1275 5775 m
gs 1 -1 sc (Custom) col0 sh gr
/Times-Roman-iso ff 200.00 scf sf
-4350 8175 m
-gs 1 -1 sc (generate) col0 sh gr
-/Times-Roman-iso ff 200.00 scf sf
3675 1350 m
gs 1 -1 sc (generate/edit) col0 sh gr
/Times-Roman-iso ff 200.00 scf sf
@@ -639,8 +618,7 @@ n 900 3675 m 1200 3375 l 2100 3375 l 2100 4875 l 900 4875 l 900 3675 l
1200 3675 l
1200 3375 l gs col0 s gr
% here ends figure;
-$F2psEnd
-rs
+pagefooter
showpage
%%Trailer
%EOF
diff --git a/doc/infoflow.fig b/doc/infoflow.fig
index d09c571..9db91af 100644
--- a/doc/infoflow.fig
+++ b/doc/infoflow.fig
@@ -1,4 +1,4 @@
-#FIG 3.2 Produced by xfig version 3.2.5
+#FIG 3.2 Produced by xfig version 3.2.5b
Landscape
Center
Inches
@@ -158,16 +158,8 @@ Single
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7875 9150 9000 9150
-2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
- 3300 8850 5100 8850 5100 9525 3300 9525 3300 8850
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 6675 9300 5100 9300
2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5
8700 6450 11850 6450 11850 9975 8700 9975 8700 6450
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 4275 8850 4275 7125
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2
1 1 1.00 60.00 120.00
1 1 1.00 60.00 120.00
@@ -209,13 +201,10 @@ Single
4 0 0 50 0 0 12 0.0000 4 150 390 11025 3825 PDF\001
4 0 0 50 0 0 12 0.0000 4 150 615 6975 9075 HTML\001
4 0 0 50 0 0 12 0.0000 4 150 510 6975 9300 pages\001
-4 0 0 50 0 0 12 0.0000 4 150 480 5475 9525 parse\001
-4 0 0 50 0 0 12 0.0000 4 195 735 3825 9300 Doxytag\001
4 0 0 50 0 0 12 0.0000 4 195 1215 8775 6675 Windows only\001
4 0 0 50 0 0 12 0.0000 4 150 390 8250 1200 read\001
4 0 0 50 0 0 12 0.0000 4 150 705 1200 4200 Sources\001
4 0 0 50 0 0 12 0.0000 4 150 675 1275 5775 Custom\001
-4 0 0 50 0 0 12 0.0000 4 165 765 4350 8175 generate\001
4 0 0 50 0 0 12 0.0000 4 195 1140 3675 1350 generate/edit\001
4 0 0 50 0 0 12 0.0000 4 195 1050 4425 750 Doxywizard\001
4 0 0 50 0 0 12 0.0000 4 150 390 4050 3525 read\001
diff --git a/doc/infoflow.gif b/doc/infoflow.gif
index 4bd30c5..82fc46e 100644
--- a/doc/infoflow.gif
+++ b/doc/infoflow.gif
Binary files differ
diff --git a/doc/install.doc b/doc/install.doc
index b2dd559..6524750 100644
--- a/doc/install.doc
+++ b/doc/install.doc
@@ -130,8 +130,8 @@ Compilation is now done by performing the following steps:
make
\endverbatim
- The program should compile without problems and three binaries
- (<code>doxygen</code> and <code>doxytag</code>)
+ The program should compile without problems and the binaries
+ (<code>doxygen</code> and optionally <code>doxywizard</code>)
should be available in the bin directory of the distribution.
<li>Optional: Generate the user manual.
@@ -319,8 +319,7 @@ dlopen /usr/lib/libc.a(nss_deffinder.o)
\endverbatim
Manually adding <code>-Bdynamic</code> after the target rule in
-<code>Makefile.doxygen</code> and <code>Makefile.doxytag</code>
-will fix this:
+<code>Makefile.doxygen</code> will fix this:
\verbatim
$(TARGET): $(OBJECTS) $(OBJMOC)
@@ -395,7 +394,7 @@ tar xvf doxygen-x.y.z.src.tar
\endverbatim
to unpack the sources.
-Now your environment is setup to build \c doxygen and \c doxytag.
+Now your environment is setup to build \c doxygen.
Inside the \c doxygen-x.y.z directory you will find a \c winbuild directory
containing a \c Doxygen.sln file. Open this file in Visual Studio.
@@ -487,10 +486,10 @@ Here is what is required:
steps.
<li>From Doxygen-1.2.2-20001015 onwards, the distribution includes the part
- of Qt that is needed for to compile doxygen and doxytag,
+ of Qt that is needed for to compile doxygen.
The Windows specific part were also created.
As a result doxygen (without the wizard) can be compiled on systems
- without X11 or the (commerical) version of Qt.
+ without X11 or (the commerical version of) Qt.
<li>If you used WinZip to extract the tar archive it will (apparently) not
create empty folders, so you have to add the folders
@@ -521,9 +520,8 @@ Compilation is now done by performing the following steps:
make.bat msvc
\endverbatim
- This should build the executables
- <code>doxygen.exe</code> and <code>doxytag.exe</code>
- using Microsoft's Visual C++ compiler
+ This should build the executable
+ <code>doxygen.exe</code> using Microsoft's Visual C++ compiler
(The compiler should not produce any serious warnings or errors).
You can use also the <code>bcc</code> argument to build
diff --git a/doc/installdox_usage.doc b/doc/installdox_usage.doc
deleted file mode 100644
index a93ca0a..0000000
--- a/doc/installdox_usage.doc
+++ /dev/null
@@ -1,59 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2011 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.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-/*! \page installdox_usage Installdox usage
-
-Installdox is a perl script that is generated by doxygen whenever
-tag files are used (See \c TAGFILES
-in section \ref config_extref). The script is
-located in the same directory where the HTML files are located.
-
-Its purpose is to set the location of the external documentation
-for each tag file at install time.
-
-Calling \c installdox with option <b>-h</b> at the command line
-will give you a brief description of the usage of the program.
-
-The following options are available:
-<dl>
-<dt><b>-l <tt>\<tagfile\>\@\<location\></tt></b><dd>
- Each tag file contains information about the files, classes and members
- documented in a set of HTML files. A user can install these
- HTML files anywhere on his/her hard disk or web site.
- Therefore installdox \e requires the location of the
- documentation for each tag file <tt>\<tagfile\></tt>
- that is used by doxygen. The location <tt>\<location\></tt> can be
- an absolute path or a URL.
-
- \par Note:
- Each \<tagfile\> must be unique and should only be the name of the
- file, not including the path.
-
-<dt><b>-q</b><dd>
- When this option is specified, installdox will generate no output other
- than fatal errors.
-</dl>
-Optionally a list of HTML files may be given.
-These files are scanned and modified if needed.
-If this list is omitted all files in the current directory
-that end with \c .html are used.
-
-The \c installdox script is unique for each generated class browser
-in the sense that it `knows' what tag files are used. It will generate an error if
-the <b>-l</b> option is missing for a tag file or if an invalid tag file
-is given.
-
-*/
diff --git a/doc/lists.doc b/doc/lists.doc
index f5f9f96..f72957e 100644
--- a/doc/lists.doc
+++ b/doc/lists.doc
@@ -4,9 +4,13 @@ Doxygen provides a number of ways to create lists of items.
<b>Using dashes</b>
- By putting a number of column-aligned minus signs at the start of a
- line, a bullet list will automatically be generated.
- Numbered lists can also be generated by using a minus followed by a hash.
+ By putting a number of column-aligned minus (-) signs at the start of a
+ line, a bullet list will automatically be generated. Instead of the minus
+ sign also plus (+) or asterix (\*) can be used.
+
+ Numbered lists can also be generated by using a minus followed by a hash
+ or by using a number followed by a dot.
+
Nesting of lists is allowed and is based on indentation of the items.<p>
Here is an example:
\verbatim
@@ -18,8 +22,8 @@ Doxygen provides a number of ways to create lists of items.
* More info about the click event.
* -# mouse double click event
* - keyboard events
- * -# key down event
- * -# key up event
+ * 1. key down event
+ * 2. key up event
*
* More text here.
*/
@@ -33,8 +37,8 @@ Doxygen provides a number of ways to create lists of items.
More info about the click event.
-# mouse double click event
- keyboard events
- -# key down event
- -# key up event
+ 1. key down event
+ 2. key up event
More text here.
@@ -43,7 +47,7 @@ that \ref cfg_tab_size "TAB_SIZE" in the configuration file is set to
the correct tab size.
You can end a list by starting a new paragraph or
-by putting a dot (.) on an empty line at the same indent level as the
+by putting a dot (.) on an empty line at the same indentation level as the
list you would like to end.
Here is an example that speaks for itself:
@@ -57,9 +61,11 @@ Here is an example that speaks for itself:
* - sub sub item 2
* .
* The dot above ends the sub sub item list.
+ *
* More text for the first sub item
* .
* The dot above ends the first sub item.
+ *
* More text for the first list item
* - sub item 2
* - sub item 3
@@ -74,8 +80,7 @@ Here is an example that speaks for itself:
<b>Using HTML commands</b>
If you like you can also use HTML commands inside the documentation
-blocks. Using these commands has the advantage that it is more natural
-for list items that consist of multiple paragraphs.
+blocks.
Here is the above example with HTML commands:
\verbatim
@@ -85,7 +90,7 @@ Here is the above example with HTML commands:
* <li> mouse events
* <ol>
* <li>mouse move event
- * <li>mouse click event\n
+ * <li>mouse click event<br>
* More info about the click event.
* <li>mouse double click event
* </ol>
diff --git a/doc/starting.doc b/doc/starting.doc
index caed175..4e60d3a 100644
--- a/doc/starting.doc
+++ b/doc/starting.doc
@@ -20,11 +20,6 @@ The executable \c doxygen is the main program that parses the sources and
generates the documentation. See section \ref doxygen_usage for more
detailed usage information.
-The executable \c doxytag is only needed if you want to generate references
-to external documentation (i.e. documentation that was generated by doxygen)
-for which you do not have the sources. See section \ref doxytag_usage
-for more detailed usage information.
-
Optionally, the executable \c doxywizard can be used, which is a
\ref doxywizard_usage "graphical front-end" for editing the configuration file
that is used by doxygen and for running doxygen in a graphical environment.
diff --git a/examples/memgrp.cpp b/examples/memgrp.cpp
index 394cdbc..77f03a4 100644
--- a/examples/memgrp.cpp
+++ b/examples/memgrp.cpp
@@ -21,21 +21,21 @@ void Test::func2InGroup1() {}
/** @name Group2
* Description of group 2.
*/
-//@{
+///@{
/** Function 2 in group 2. Details. */
void Test::func2InGroup2() {}
/** Function 1 in group 2. Details. */
void Test::func1InGroup2() {}
-//@}
+///@}
/*! \file
* docs for this file
*/
-//@{
+//!@{
//! one description for all members of this group
//! (because DISTRIBUTE_GROUP_DOC is YES in the config file)
#define A 1
#define B 2
void glob_func();
-//@}
+//!@}
diff --git a/qtools/qxml.cpp b/qtools/qxml.cpp
index 9a24c1b..83ab89d 100644
--- a/qtools/qxml.cpp
+++ b/qtools/qxml.cpp
@@ -2449,7 +2449,7 @@ bool QXmlSimpleReader::parseElement()
d->error = XMLERR_ERRORPARSINGNAME;
goto parseError;
}
- if ( !parseElementETagBegin2() )
+ if ( !parseElementETagBegin2( uri, lname ) )
goto parseError;
break;
case Attribute:
@@ -2495,10 +2495,17 @@ bool QXmlSimpleReader::parseElementEmptyTag( bool &t, QString &uri, QString &lna
return FALSE;
}
// ... followed by endElement
- // ### missing namespace support!
- if ( !contentHnd->endElement( "","",tags.pop() ) ) {
- d->error = contentHnd->errorString();
- return FALSE;
+ if ( d->useNamespaces ) {
+ if ( !contentHnd->endElement( uri, lname,tags.pop() ) ) {
+ d->error = contentHnd->errorString();
+ return FALSE;
+ }
+ }
+ else {
+ if ( !contentHnd->endElement( "","",tags.pop() ) ) {
+ d->error = contentHnd->errorString();
+ return FALSE;
+ }
}
// namespace support?
if ( d->useNamespaces ) {
@@ -2529,7 +2536,7 @@ bool QXmlSimpleReader::parseElementEmptyTag( bool &t, QString &uri, QString &lna
Helper to break down the size of the code in the case statement.
Return FALSE on error, otherwise TRUE.
*/
-bool QXmlSimpleReader::parseElementETagBegin2()
+bool QXmlSimpleReader::parseElementETagBegin2( QString &uri, QString &lname )
{
// pop the stack and compare it with the name
@@ -2538,11 +2545,19 @@ bool QXmlSimpleReader::parseElementETagBegin2()
return FALSE;
}
// call the handler
- // ### missing namespace support!
if ( contentHnd ) {
- if ( !contentHnd->endElement("","",name()) ) {
- d->error = contentHnd->errorString();
- return FALSE;
+ if ( d->useNamespaces ) {
+ d->namespaceSupport.processName( name(), FALSE, uri, lname );
+ if ( !contentHnd->endElement(uri,lname,name()) ) {
+ d->error = contentHnd->errorString();
+ return FALSE;
+ }
+ }
+ else {
+ if ( !contentHnd->endElement("","",name()) ) {
+ d->error = contentHnd->errorString();
+ return FALSE;
+ }
}
}
// namespace support?
diff --git a/qtools/qxml.h b/qtools/qxml.h
index 2f7567d..36164ff 100644
--- a/qtools/qxml.h
+++ b/qtools/qxml.h
@@ -337,7 +337,7 @@ private:
bool parseProlog();
bool parseElement();
bool parseElementEmptyTag( bool &t, QString &uri, QString &lname );
- bool parseElementETagBegin2();
+ bool parseElementETagBegin2( QString &uri, QString &lname );
bool parseElementAttribute( QString &prefix, QString &uri, QString &lname );
bool parseMisc();
bool parseContent();
diff --git a/src/Makefile.in b/src/Makefile.in
index 19bcf7a..eb0c170 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -14,11 +14,10 @@
# input used in their production; they are not affected by this license.
#
-all: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile.doxytag Makefile
+all: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile
$(MAKE) -f Makefile.libdoxycfg PERL=$(PERL) $@
$(MAKE) -f Makefile.libdoxygen PERL=$(PERL) $@
$(MAKE) -f Makefile.doxygen PERL=$(PERL) $@
- $(MAKE) -f Makefile.doxytag PERL=$(PERL) $@
Makefile.libdoxygen: libdoxygen.pro libdoxygen.t
$(ENV) $(PERL) $(TMAKE) libdoxygen.pro >Makefile.libdoxygen
@@ -29,24 +28,19 @@ Makefile.libdoxycfg: libdoxycfg.pro libdoxycfg.t
Makefile.doxygen: doxygen.pro
$(ENV) $(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen
-Makefile.doxytag: doxytag.pro doxytag.t
- $(ENV) $(PERL) $(TMAKE) doxytag.pro >Makefile.doxytag
-
tmake:
$(ENV) $(PERL) $(TMAKE) libdoxygen.pro >Makefile.libdoxygen
$(ENV) $(PERL) $(TMAKE) libdoxycfg.pro >Makefile.libdoxycfg
$(ENV) $(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen
- $(ENV) $(PERL) $(TMAKE) doxytag.pro >Makefile.doxytag
-clean: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile.doxytag
+clean: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen
$(MAKE) -f Makefile.libdoxygen clean
$(MAKE) -f Makefile.libdoxycfg clean
$(MAKE) -f Makefile.doxygen clean
- $(MAKE) -f Makefile.doxytag clean
distclean: clean
-$(RM) scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \
- ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp commentscan.cpp \
+ ce_parse.cpp ce_parse.h tag.cpp commentscan.cpp \
declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp \
pycode.cpp pyscanner.cpp fortrancode.cpp fortranscanner.cpp \
vhdlscanner.cpp vhdlcode.cpp tclscanner.cpp vhdlparser.h \
diff --git a/src/classdef.cpp b/src/classdef.cpp
index be7429e..c5ff60d 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1493,30 +1493,8 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeTagFileMarker(OutputList &ol)
+void ClassDef::writeTagFileMarker()
{
- // write markers for tag file processing to the output
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeString("<!-- doxytag: class=\"");
- ol.docify(name());
- ol.writeString("\" -->");
- if (m_impl->inherits && m_impl->inherits->count()>0)
- {
- BaseClassListIterator bli(*m_impl->inherits);
- ol.writeString("<!-- doxytag: inherits=\"");
- BaseClassDef *bcd=0;
- bool first=TRUE;
- for (bli.toFirst();(bcd=bli.current());++bli)
- {
- if (!first) ol.writeString(",");
- ol.docify(bcd->classDef->name());
- first=FALSE;
- }
- ol.writeString("\" -->");
- }
- ol.popGeneratorState();
-
// write section to the tag file
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
@@ -1657,7 +1635,7 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
ol.popGeneratorState();
// part 4: write tag file information
- writeTagFileMarker(ol);
+ writeTagFileMarker();
}
void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
@@ -1812,7 +1790,7 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString &pageTit
pageType += compoundTypeString();
toupper(pageType.at(1));
- writeTagFileMarker(ol);
+ writeTagFileMarker();
Doxygen::indexList.addIndexItem(this,0);
@@ -2100,7 +2078,7 @@ void ClassDef::writeMemberList(OutputList &ol)
{
if (getOuterScope()!=Doxygen::globalScope)
{
- writeNavigationPath(ol,FALSE);
+ writeNavigationPath(ol);
}
ol.endQuickIndices();
}
diff --git a/src/classdef.h b/src/classdef.h
index d92b5a6..fb37e0b 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -348,7 +348,7 @@ class ClassDef : public Definition
void showUsedFiles(OutputList &ol);
private:
- void writeTagFileMarker(OutputList &ol);
+ void writeTagFileMarker();
void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
QCString getMemberListFileName() const;
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index 3c21a75..b42ca4b 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -162,6 +162,7 @@ CommandMap htmlTagMap[] =
{ "h6", HTML_H6 },
{ "span", HTML_SPAN },
{ "div", HTML_DIV },
+ { "blockquote", HTML_BLOCKQUOTE },
{ "c", XML_C },
// { "code", XML_CODE }, <= ambiguous <code> is also a HTML tag
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index 6a62546..b2950ce 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -156,6 +156,7 @@ enum HtmlTagType
HTML_H6 = 30,
HTML_SPAN = 31,
HTML_DIV = 32,
+ HTML_BLOCKQUOTE= 33,
XML_CmdMask = 0x100,
diff --git a/src/commentscan.l b/src/commentscan.l
index cb295d1..4f4408f 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -45,6 +45,7 @@
#include "debug.h"
#include "parserintf.h"
#include "cite.h"
+#include "markdown.h"
// forward declarations
static bool handleBrief(const QCString &);
@@ -110,6 +111,7 @@ static bool handlePublic(const QCString &s);
static bool handlePublicSection(const QCString &s);
static bool handleInherit(const QCString &);
static bool handleExtends(const QCString &);
+static bool handleCopyDoc(const QCString &);
typedef bool (*DocCmdFunc)(const QCString &name);
@@ -209,7 +211,7 @@ static DocCmdMap docCmdMap[] =
{ "attention", 0, TRUE },
{ "author", 0, TRUE },
{ "authors", 0, TRUE },
- { "copydoc", 0, TRUE },
+ { "copydoc", &handleCopyDoc, TRUE },
{ "copybrief", 0, FALSE },
{ "copydetails", 0, TRUE },
{ "date", 0, TRUE },
@@ -404,6 +406,7 @@ static int g_sectionLevel;
static int g_commentCount;
static bool g_spaceBeforeCmd;
static bool g_spaceBeforeIf;
+static QCString g_copyDocArg;
//-----------------------------------------------------------------------------
@@ -749,6 +752,7 @@ static inline void setOutput(OutputContext ctx)
// add a string to the output
static inline void addOutput(const char *s)
{
+ //printf("addOutput(%s)\n",s);
*pOutputString+=s;
}
@@ -876,6 +880,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
%x HtmlComment
%x SkipLang
%x CiteLabel
+%x CopyDoc
%%
@@ -1055,7 +1060,8 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>^{B}*"."{B}*/\n { // explicit end autolist: e.g " ."
addOutput(yytext);
}
-<Comment>^{B}*"-" { // start of autolist
+<Comment>^{B}*[1-9][0-9]*"."{B}+ |
+<Comment>^{B}*[*+-]{B}+ { // start of autolist
if (inContext!=OutputXRef)
{
briefEndsAtDot=FALSE;
@@ -1997,6 +2003,26 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
BEGIN(Comment);
}
+ /* ----- handle argument of the copydoc command ------- */
+
+<CopyDoc><<EOF>> |
+<CopyDoc>{DOCNL} {
+ if (*yytext=='\n') yyLineNr++;
+ addOutput('\n');
+ setOutput(OutputDoc);
+ addOutput("\\copydetails ");
+ addOutput(g_copyDocArg);
+ addOutput("\n");
+ BEGIN(Comment);
+ }
+<CopyDoc>[^\n\\]+ {
+ g_copyDocArg+=yytext;
+ addOutput(yytext);
+ }
+<CopyDoc>. {
+ g_copyDocArg+=yytext;
+ addOutput(yytext);
+ }
%%
@@ -2517,6 +2543,15 @@ static bool handleExtends(const QCString &)
return FALSE;
}
+static bool handleCopyDoc(const QCString &)
+{
+ setOutput(OutputBrief);
+ addOutput("\\copybrief ");
+ g_copyDocArg.resize(0);
+ BEGIN(CopyDoc);
+ return FALSE;
+}
+
//----------------------------------------------------------------------------
static void checkFormula()
@@ -2609,6 +2644,13 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
openGroup(current,yyFileName,yyLineNr);
}
+ if (Doxygen::markdownSupport)
+ {
+ current->brief = processMarkdown(current->brief);
+ current->doc = processMarkdown(current->doc);
+ current->inbodyDocs = processMarkdown(current->inbodyDocs);
+ }
+
Debug::print(Debug::CommentScan,0,
"brief=[%s]\ndocs=[%s]\ninbody=[%s]\n===========\n",
current->brief.data(),current->doc.data(),current->inbodyDocs.data()
@@ -2631,7 +2673,6 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
lineNr = yyLineNr;
//printf("position=%d parseMore=%d\n",position,parseMore);
-
return parseMore;
}
diff --git a/src/compound.xsd b/src/compound.xsd
index 493fc4e..1149266 100644
--- a/src/compound.xsd
+++ b/src/compound.xsd
@@ -419,6 +419,7 @@
<xsd:element name="parameterlist" type="docParamListType" />
<xsd:element name="xrefsect" type="docXRefSectType" />
<xsd:element name="copydoc" type="docCopyType" />
+ <xsd:element name="blockquote" type="docBlockQuoteType" />
</xsd:choice>
</xsd:group>
@@ -612,6 +613,12 @@
<xsd:attribute name="link" type="xsd:string" />
</xsd:complexType>
+ <xsd:complexType name="docBlockQuoteType">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
<xsd:complexType name="docCharType">
<xsd:attribute name="char" type="DoxCharRange"/>
</xsd:complexType>
diff --git a/src/compound_xsd.h b/src/compound_xsd.h
index e84e21f..6531857 100644
--- a/src/compound_xsd.h
+++ b/src/compound_xsd.h
@@ -419,6 +419,7 @@
" <xsd:element name=\"parameterlist\" type=\"docParamListType\" />\n"
" <xsd:element name=\"xrefsect\" type=\"docXRefSectType\" />\n"
" <xsd:element name=\"copydoc\" type=\"docCopyType\" />\n"
+" <xsd:element name=\"blockquote\" type=\"docBlockQuoteType\" />\n"
" </xsd:choice>\n"
" </xsd:group>\n"
"\n"
@@ -612,6 +613,12 @@
" <xsd:attribute name=\"link\" type=\"xsd:string\" /> \n"
" </xsd:complexType>\n"
"\n"
+" <xsd:complexType name=\"docBlockQuoteType\">\n"
+" <xsd:sequence>\n"
+" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
+" </xsd:sequence>\n"
+" </xsd:complexType>\n"
+"\n"
" <xsd:complexType name=\"docCharType\">\n"
" <xsd:attribute name=\"char\" type=\"DoxCharRange\"/> \n"
" </xsd:complexType>\n"
diff --git a/src/config.l b/src/config.l
index 3c22571..ee535e9 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1334,6 +1334,8 @@ void Config::check()
filePatternList.append("*.vhd");
filePatternList.append("*.vhdl");
filePatternList.append("*.tcl");
+ filePatternList.append("*.md");
+ filePatternList.append("*.markdown");
if (portable_fileSystemIsCaseSensitive())
{
// unix => case sensitive match => also include useful uppercase versions
@@ -1356,6 +1358,8 @@ void Config::check()
filePatternList.append("*.VHD");
filePatternList.append("*.VHDL");
filePatternList.append("*.TCL");
+ filePatternList.append("*.MD");
+ filePatternList.append("*.MARKDOWN");
}
}
@@ -1477,21 +1481,24 @@ void Config::check()
bool b2 = Config_getBool("INHERIT_DOCS");
bool b3 = Config_getBool("HIDE_SCOPE_NAMES");
bool b4 = Config_getBool("EXTRACT_PRIVATE");
- const char *s1,*s2,*s3,*s4;
+ bool b5 = Config_getBool("SKIP_FUNCTION_MACROS");
+ const char *s1,*s2,*s3,*s4,*s5;
if (b1) s1=" INLINDE_INHERITED_MEMB = NO (was YES)\n"; else s1="";
if (b2) s2=" INHERIT_DOCS = NO (was YES)\n"; else s2="";
if (!b3) s3=" HIDE_SCOPE_NAMES = YES (was NO)\n"; else s3="";
if (!b4) s4=" EXTRACT_PRIVATE = YES (was NO)\n"; else s4="";
+ if (b5) s5=" ENABLE_PREPROCESSING = NO (was YES)\n"; else s5="";
config_err("warning: enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n"
- "%s%s%s%s",s1,s2,s3,s4
+ "%s%s%s%s%s",s1,s2,s3,s4,s5
);
Config_getBool("INLINE_INHERITED_MEMB") = FALSE;
Config_getBool("INHERIT_DOCS") = FALSE;
Config_getBool("HIDE_SCOPE_NAMES") = TRUE;
Config_getBool("EXTRACT_PRIVATE") = TRUE;
- }
+ Config_getBool("ENABLE_PREPROCESSING") = FALSE;
+ }
}
diff --git a/src/config.xml b/src/config.xml
index dc79fc7..adbb326 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -250,6 +250,14 @@ doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
'>
</option>
+ <option type='bool' id='MARKDOWN_SUPPORT' docs='
+If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+comments according to the Markdown format, which allows for more readable
+documentation. See http://daringfireball.net/projects/markdown/ for details.
+The output of markdown processing is further processed by doxygen, so you
+can mix doxygen, HTML, and XML commands with Markdown formatting.
+Disable only in case of backward compatibilities issues.
+' defval='1'/>
<option type='bool' id='BUILTIN_STL_SUPPORT' docs='
If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
to include (a tag file for) the STL sources as input, then you should
@@ -1382,20 +1390,16 @@ semicolon, because these will confuse the parser if not removed.
</group>
<group name='External' docs='Configuration::additions related to external references'>
<option type='list' id='TAGFILES' format='file' docs='
-The TAGFILES option can be used to specify one or more tagfiles.
-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:
+The TAGFILES option can be used to specify one or more tagfiles. For each
+tag file the location of the external documentation should be added. The
+format of a tag file without this location is as follows:
TAGFILES = file1 file2 ...
Adding location for the tag files is done as follows:
TAGFILES = file1=loc1 &quot;file2 = loc2&quot; ...
-where &quot;loc1&quot; and &quot;loc2&quot; can be relative or absolute paths or
-URLs. If a location is present for each tag, the installdox tool
-does not have to be run to correct the links.
-Note that each tag file must have a unique name
-(where the name does NOT include the path)
-If a tag file is not located in the directory in which doxygen
-is run, you must also specify the path to the tagfile here.
+where &quot;loc1&quot; and &quot;loc2&quot; can be relative or absolute paths
+or URLs. Note that each tag file must have a unique name (where the name does
+NOT include the path). If a tag file is not located in the directory in which
+doxygen is run, you must also specify the path to the tagfile here.
'>
</option>
<option type='string' id='GENERATE_TAGFILE' format='file' docs='
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index 0fd507b..e211418 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -350,6 +350,17 @@ void addConfigOptions(Config *cfg)
);
//----
cb = cfg->addBool(
+ "MARKDOWN_SUPPORT",
+ "If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all\n"
+ "comments according to the Markdown format, which allows for more readable\n"
+ "documentation. See http://daringfireball.net/projects/markdown/ for details.\n"
+ "The output of markdown processing is further processed by doxygen, so you\n"
+ "can mix doxygen, HTML, and XML commands with Markdown formatting.\n"
+ "Disable only in case of backward compatibilities issues.",
+ TRUE
+ );
+ //----
+ cb = cfg->addBool(
"BUILTIN_STL_SUPPORT",
"If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n"
"to include (a tag file for) the STL sources as input, then you should\n"
@@ -2087,22 +2098,18 @@ void addConfigOptions(Config *cfg)
//----
cl = cfg->addList(
"TAGFILES",
- "The TAGFILES option can be used to specify one or more tagfiles.\n"
- "Optionally an initial location of the external documentation\n"
- "can be added for each tagfile. The format of a tag file without\n"
- "this location is as follows:\n"
+ "The TAGFILES option can be used to specify one or more tagfiles. For each\n"
+ "tag file the location of the external documentation should be added. The\n"
+ "format of a tag file without this location is as follows:\n"
"\n"
"TAGFILES = file1 file2 ...\n"
"Adding location for the tag files is done as follows:\n"
"\n"
"TAGFILES = file1=loc1 \"file2 = loc2\" ...\n"
- "where \"loc1\" and \"loc2\" can be relative or absolute paths or\n"
- "URLs. If a location is present for each tag, the installdox tool\n"
- "does not have to be run to correct the links.\n"
- "Note that each tag file must have a unique name\n"
- "(where the name does NOT include the path)\n"
- "If a tag file is not located in the directory in which doxygen\n"
- "is run, you must also specify the path to the tagfile here."
+ "where \"loc1\" and \"loc2\" can be relative or absolute paths\n"
+ "or URLs. Note that each tag file must have a unique name (where the name does\n"
+ "NOT include the path). If a tag file is not located in the directory in which\n"
+ "doxygen is run, you must also specify the path to the tagfile here."
);
cl->setWidgetType(ConfigList::File);
//----
diff --git a/src/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp
index 2239f85..9cc3d93 100644
--- a/src/dbusxmlscanner.cpp
+++ b/src/dbusxmlscanner.cpp
@@ -354,7 +354,7 @@ public:
// Interface:
if (DBUS("interface"))
{
- CONDITION(m_currentInterface, "end of interface found without start.");
+ CONDITION(!m_currentInterface, "end of interface found without start.");
m_currentInterface->endBodyLine = lineNumber();
closeScopes();
m_currentInterface = 0;
@@ -362,8 +362,8 @@ public:
if (DBUS("method") || DBUS("signal"))
{
- CONDITION(m_currentMethod, "end of method found without start.");
- CONDITION(m_currentInterface, "end of method found outside interface.");
+ CONDITION(!m_currentMethod, "end of method found without start.");
+ CONDITION(!m_currentInterface, "end of method found outside interface.");
m_currentMethod->endBodyLine = lineNumber();
m_currentInterface->addSubEntry(m_currentMethod);
m_currentMethod = 0;
@@ -371,8 +371,8 @@ public:
if (DBUS("property"))
{
- CONDITION(m_currentMethod, "end of property found without start.");
- CONDITION(m_currentInterface, "end of property found outside interface.");
+ CONDITION(!m_currentProperty, "end of property found without start.");
+ CONDITION(!m_currentInterface, "end of property found outside interface.");
m_currentProperty->endBodyLine = lineNumber();
m_currentInterface->addSubEntry(m_currentProperty);
m_currentProperty = 0;
@@ -380,7 +380,7 @@ public:
if (DBUS("arg"))
{
- CONDITION(m_currentMethod, "end of arg found outside method.");
+ CONDITION(!m_currentMethod, "end of arg found outside method.");
m_currentMethod->argList->append(m_currentArgument);
m_currentArgument = 0;
}
@@ -388,7 +388,7 @@ public:
if (EXTENSION("namespace"))
{
Entry * current = m_namespaceStack.last();
- CONDITION(current, "end of namespace without start.");
+ CONDITION(!current, "end of namespace without start.");
m_namespaceStack.removeLast();
current->endBodyLine = lineNumber();
@@ -398,7 +398,7 @@ public:
if (EXTENSION("struct"))
{
StructData * data = m_structStack.last();
- CONDITION(data, "end of struct without start.");
+ CONDITION(!data, "end of struct without start.");
data->entry->endBodyLine = lineNumber();
@@ -417,13 +417,13 @@ public:
if (EXTENSION("member"))
{
StructData * data = m_structStack.last();
- CONDITION(data, "end of struct without start");
+ CONDITION(!data, "end of member outside struct.");
data->entry->addSubEntry(m_currentEntry);
}
if (EXTENSION("enum") || EXTENSION("flagset"))
{
- CONDITION(m_currentEnum, "end of enum without start");
+ CONDITION(!m_currentEnum, "end of enum without start.");
m_currentEnum->endBodyLine = lineNumber();
closeScopes();
@@ -432,7 +432,7 @@ public:
if (EXTENSION("value"))
{
- CONDITION(m_currentEntry, "end of value without start");
+ CONDITION(!m_currentEntry, "end of value without start");
m_currentEntry->endBodyLine = lineNumber();
m_currentEnum->addSubEntry(m_currentEntry);
@@ -451,7 +451,7 @@ public:
m_currentComment = new CommentData(m_fileName, lineNumber(), comment_);
- if (!m_currentComment->shouldIgnore)
+ if (m_currentComment->shouldIgnore)
{
delete m_currentComment;
m_currentComment = 0;
@@ -532,21 +532,7 @@ private:
const QString & qName,
const QString & element)
{
- // isNull happens in startelement if no URI is used.
- if (namespaceURI.isNull())
- { return false; }
-
- // We are in a endElement: URI is always empty there:-(
- if (namespaceURI.isEmpty())
- { return qName == m_scopeStack.last()->extensionPrefix + element; }
-
- // startElemennt: We need to save the qName prefix
- // since endElement will forget about the namespaceURi:-(
- if (namespaceURI == EXTENSION_URI)
- {
- int pos = qName.find(':');
- m_scopeStack.last()->extensionPrefix = qName.left(pos + 1);
- }
+ (void)qName;
return namespaceURI == EXTENSION_URI && localName == element;
}
@@ -756,7 +742,6 @@ private:
~ElementData() { }
QString element; //*< The element name
- QString extensionPrefix; //*< The prefix used for our extension.
QString text; //*< The actual xml code.
};
QList<ElementData> m_elementStack;
@@ -789,7 +774,6 @@ private:
~ScopeData() { }
Entry * scope;
- QString extensionPrefix;
int count;
};
QList<ScopeData> m_scopeStack; // Scopes are nested.
@@ -846,7 +830,6 @@ void DBusXMLScanner::parseInput(const char * fileName,
const char * /* fileBuf */,
Entry * root)
{
- err("Note that the dbusxml parser seems to be broken :-(\nPlease help me to fix it!\n");
QFile inputFile(fileName);
QXmlInputSource inputSource(inputFile);
@@ -861,7 +844,7 @@ void DBusXMLScanner::parseInput(const char * fileName,
handler.setSection();
reader.parse(inputSource);
- if (handler.errorString())
+ if (!handler.errorString().isEmpty())
{ err("DBus XML Parser: Error at line %d: %s\n",
handler.locator()->lineNumber(),handler.errorString().utf8().data()); }
diff --git a/src/debug.cpp b/src/debug.cpp
index a8e0774..1c23737 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -44,6 +44,7 @@ static LabelMap s_labels[] =
{ "printtree", Debug::PrintTree },
{ "time", Debug::Time },
{ "extcmd", Debug::ExtCmd },
+ { "markdown", Debug::Markdown },
{ 0, (Debug::DebugMask)0 }
};
diff --git a/src/debug.h b/src/debug.h
index f192ffb..98b80b9 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -33,7 +33,8 @@ class Debug
Validate = 0x00000080,
PrintTree = 0x00000100,
Time = 0x00000200,
- ExtCmd = 0x00000400
+ ExtCmd = 0x00000400,
+ Markdown = 0x00000800
};
static void print(DebugMask mask,int prio,const char *fmt,...);
static void setFlag(const char *label);
diff --git a/src/definition.cpp b/src/definition.cpp
index 3a61b7b..e04c767 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -1340,7 +1340,7 @@ void Definition::writePathFragment(OutputList &ol) const
ol.writeString(" </li>\n");
}
-void Definition::writeNavigationPath(OutputList &ol,bool showSearchInfo) const
+void Definition::writeNavigationPath(OutputList &ol) const
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
@@ -1351,10 +1351,10 @@ void Definition::writeNavigationPath(OutputList &ol,bool showSearchInfo) const
{
ol.writeString("</div>\n");
}
- if (showSearchInfo)
- {
- ol.writeSearchInfo();
- }
+ //if (showSearchInfo)
+ //{
+ // ol.writeSearchInfo();
+ //}
ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n");
ol.writeString(" <ul>\n");
diff --git a/src/definition.h b/src/definition.h
index 8c6bda3..1e51a1c 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -317,7 +317,7 @@ class Definition : public DefinitionIntf, public LockableObj
void writeSourceReffedBy(OutputList &ol,const char *scopeName);
void makePartOfGroup(GroupDef *gd);
void writePathFragment(OutputList &ol) const;
- void writeNavigationPath(OutputList &ol,bool showSearchInfo=TRUE) const;
+ void writeNavigationPath(OutputList &ol) const;
virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const {}
virtual void writeSummaryLinks(OutputList &) {}
QCString pathFragment() const;
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 48810ed..3ec6631 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -1605,6 +1605,9 @@ static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children,
} while (retval==TK_NEWPARA);
if (lastPar) lastPar->markLast();
+ //printf("internalValidateParsingDoc: %p: isFirst=%d isLast=%d\n",
+ // lastPar,lastPar?lastPar->isFirst():-1,lastPar?lastPar->isLast():-1);
+
return retval;
}
@@ -1900,7 +1903,7 @@ void DocIncOperator::parse()
//---------------------------------------------------------------------------
-void DocCopy::parse()
+void DocCopy::parse(QList<DocNode> &children)
{
QCString doc,brief;
Definition *def;
@@ -1938,7 +1941,7 @@ void DocCopy::parse()
if (m_copyBrief)
{
brief+='\n';
- internalValidatingParseDoc(this,m_children,brief);
+ internalValidatingParseDoc(m_parent,children,brief);
//printf("..2 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
// g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
@@ -1954,7 +1957,7 @@ void DocCopy::parse()
if (m_copyDetails)
{
doc+='\n';
- internalValidatingParseDoc(this,m_children,doc);
+ internalValidatingParseDoc(m_parent,children,doc);
//printf("..3 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
// g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
@@ -3990,6 +3993,33 @@ endlist:
RetVal_OK : retval;
}
+//--------------------------------------------------------------------------
+
+int DocHtmlBlockQuote::parse()
+{
+ DBG(("DocHtmlBlockQuote::parse() start\n"));
+ int retval=0;
+ g_nodeStack.push(this);
+
+ // parse one or more paragraphs
+ bool isFirst=TRUE;
+ DocPara *par=0;
+ do
+ {
+ par = new DocPara(this);
+ if (isFirst) { par->markFirst(); isFirst=FALSE; }
+ m_children.append(par);
+ retval=par->parse();
+ }
+ while (retval==TK_NEWPARA);
+ if (par) par->markLast();
+
+ DocNode *n=g_nodeStack.pop();
+ ASSERT(n==this);
+ DBG(("DocHtmlBlockQuote::parse() end retval=%x\n",retval));
+ return (retval==RetVal_EndBlockQuote) ? RetVal_OK : retval;
+}
+
//---------------------------------------------------------------------------
int DocSimpleListItem::parse()
@@ -4026,11 +4056,37 @@ int DocAutoListItem::parse()
{
int retval = RetVal_OK;
g_nodeStack.push(this);
- retval=m_paragraph->parse();
- m_paragraph->markFirst();
- m_paragraph->markLast();
+
+ //retval=m_paragraph->parse();
+ //m_paragraph->markFirst();
+ //m_paragraph->markLast();
+
+ // first parse any number of paragraphs
+ bool isFirst=TRUE;
+ DocPara *lastPar=0;
+ do
+ {
+ DocPara *par = new DocPara(this);
+ if (isFirst) { par->markFirst(); isFirst=FALSE; }
+ retval=par->parse();
+ if (!par->isEmpty())
+ {
+ m_children.append(par);
+ if (lastPar) lastPar->markLast(FALSE);
+ lastPar=par;
+ }
+ else
+ {
+ delete par;
+ }
+ // next paragraph should be more indented than the - marker to belong
+ // to this item
+ } while (retval==TK_NEWPARA && g_token->indent>m_indent);
+ if (lastPar) lastPar->markLast();
+
DocNode *n=g_nodeStack.pop();
ASSERT(n==this);
+ //printf("DocAutoListItem: retval=%d indent=%d\n",retval,g_token->indent);
return retval;
}
@@ -4044,7 +4100,7 @@ int DocAutoList::parse()
// first item or sub list => create new list
do
{
- DocAutoListItem *li = new DocAutoListItem(this,num++);
+ DocAutoListItem *li = new DocAutoListItem(this,m_indent,num++);
m_children.append(li);
retval=li->parse();
}
@@ -5179,8 +5235,9 @@ int DocPara::handleCommand(const QCString &cmdName)
DocCopy *cpy = new DocCopy(this,g_token->name,
cmdId==CMD_COPYDOC || cmdId==CMD_COPYBRIEF,
cmdId==CMD_COPYDOC || cmdId==CMD_COPYDETAILS);
- m_children.append(cpy);
- cpy->parse();
+ //m_children.append(cpy);
+ cpy->parse(m_children);
+ delete cpy;
}
break;
case CMD_INCLUDE:
@@ -5476,6 +5533,13 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
}
break;
+ case HTML_BLOCKQUOTE:
+ {
+ DocHtmlBlockQuote *block = new DocHtmlBlockQuote(this,tagHtmlAttribs);
+ m_children.append(block);
+ retval = block->parse();
+ }
+ break;
case XML_SUMMARY:
case XML_REMARKS:
@@ -5727,6 +5791,9 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
// ignore </li> tags
}
break;
+ case HTML_BLOCKQUOTE:
+ retval=RetVal_EndBlockQuote;
+ break;
//case HTML_PRE:
// if (!insidePRE(this))
// {
@@ -5770,7 +5837,6 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
//doctokenizerYYsetInsidePre(FALSE);
break;
case HTML_P:
- // ignore </p> tag
retval=TK_NEWPARA;
break;
case HTML_DL:
@@ -5909,6 +5975,7 @@ reparsetoken:
k!=DocNode::Kind_SimpleList &&
/*k!=DocNode::Kind_Verbatim &&*/
k!=DocNode::Kind_HtmlHeader &&
+ k!=DocNode::Kind_HtmlBlockQuote &&
k!=DocNode::Kind_ParamSect &&
k!=DocNode::Kind_XRefItem
)
@@ -5940,7 +6007,8 @@ reparsetoken:
n=parent();
while(n)
{
- if(n->kind() == DocNode::Kind_AutoList) ++depth;
+ if (n->kind() == DocNode::Kind_AutoList &&
+ ((DocAutoList*)n)->isEnumList()) depth++;
n=n->parent();
}
@@ -5948,8 +6016,7 @@ reparsetoken:
DocAutoList *al=0;
do
{
- al = new DocAutoList(this,g_token->indent,g_token->isEnumList,
- depth);
+ al = new DocAutoList(this,g_token->indent,g_token->isEnumList, depth);
m_children.append(al);
retval = al->parse();
} while (retval==TK_LISTITEM && // new list
@@ -6641,7 +6708,6 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
delete v;
}
-
checkUndocumentedParams();
detectNoDocumentedParams();
diff --git a/src/docparser.h b/src/docparser.h
index 1e1fb0e..4e8587c 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -132,7 +132,8 @@ class DocNode
Kind_InternalRef = 45,
Kind_Copy = 46,
Kind_Text = 47,
- Kind_MscFile = 48
+ Kind_MscFile = 48,
+ Kind_HtmlBlockQuote = 49
};
/*! Creates a new node */
DocNode() : m_parent(0), m_insidePre(FALSE) {}
@@ -182,6 +183,8 @@ template<class T> class CompAccept
for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
v->visitPost(obj);
}
+ const QList<DocNode> &children() const { return m_children; }
+ QList<DocNode> &children() { return m_children; }
protected:
QList<DocNode> m_children;
@@ -508,7 +511,7 @@ class DocIndexEntry : public DocNode
//-----------------------------------------------------------------------
/*! @brief Node representing a copy of documentation block. */
-class DocCopy : public CompAccept<DocCopy>, public DocNode
+class DocCopy : /*public CompAccept<DocCopy>,*/ public DocNode
{
public:
DocCopy(DocNode *parent,const QCString &link,bool copyBrief,bool copyDetails)
@@ -516,8 +519,8 @@ class DocCopy : public CompAccept<DocCopy>, public DocNode
m_copyBrief(copyBrief), m_copyDetails(copyDetails) { m_parent = parent; }
Kind kind() const { return Kind_Copy; }
QCString link() const { return m_link; }
- void accept(DocVisitor *v) { CompAccept<DocCopy>::accept(this,v); }
- void parse();
+ void accept(DocVisitor * /*v*/) { /*CompAccept<DocCopy>::accept(this,v);*/ }
+ void parse(QList<DocNode> &children);
private:
QCString m_link;
@@ -546,6 +549,24 @@ class DocAutoList : public CompAccept<DocAutoList>, public DocNode
int m_depth;
};
+/*! @brief Node representing an item of a auto list */
+class DocAutoListItem : public CompAccept<DocAutoListItem>, public DocNode
+{
+ public:
+ DocAutoListItem(DocNode *parent,int indent,int num)
+ : m_indent(indent), m_itemNum(num)
+ { m_parent = parent; }
+ Kind kind() const { return Kind_AutoListItem; }
+ int itemNumber() const { return m_itemNum; }
+ void accept(DocVisitor *v) { CompAccept<DocAutoListItem>::accept(this,v); }
+ int parse();
+
+ private:
+ int m_indent;
+ int m_itemNum;
+};
+
+
/*! @brief Node representing a simple section title */
class DocTitle : public CompAccept<DocTitle>, public DocNode
@@ -574,7 +595,6 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
QCString key() const { return m_key; }
void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); }
bool parse();
- const QList<DocNode> &children() const { return m_children; }
private:
int m_id;
@@ -848,7 +868,6 @@ class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode
QCString anchor() const { return m_anchor; }
void accept(DocVisitor *v) { CompAccept<DocSecRefItem>::accept(this,v); }
void parse();
- const QList<DocNode> &children() const { return m_children; }
private:
QCString m_target;
@@ -930,7 +949,6 @@ class DocSimpleSect : public CompAccept<DocSimpleSect>, public DocNode
int parseRcs();
int parseXml();
void appendLinkWord(const QCString &word);
- const QList<DocNode> &children() const { return m_children; }
private:
Type m_type;
@@ -995,8 +1013,6 @@ class DocPara : public CompAccept<DocPara>, public DocNode
void markLast(bool v=TRUE) { m_isLast=v; }
bool isFirst() const { return m_isFirst; }
bool isLast() const { return m_isLast; }
- const QList<DocNode> &children() const { return m_children; }
- QList<DocNode> &children() { return m_children; }
int handleCommand(const QCString &cmdName);
int handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs);
@@ -1018,6 +1034,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
void handleInheritDoc();
int handleStartCode();
int handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level);
+
bool injectToken(int tok,const QCString &tokText);
private:
@@ -1068,28 +1085,6 @@ class DocParamList : public DocNode
bool m_isLast;
};
-/*! @brief Node representing an item of a auto list */
-class DocAutoListItem : public DocNode
-{
- public:
- DocAutoListItem(DocNode *parent,int num) : m_itemNum(num)
- { m_paragraph=new DocPara(this); m_parent = parent; }
- virtual ~DocAutoListItem() { delete m_paragraph; }
- Kind kind() const { return Kind_AutoListItem; }
- int itemNumber() const { return m_itemNum; }
- void accept(DocVisitor *v)
- {
- v->visitPre(this);
- m_paragraph->accept(v);
- v->visitPost(this);
- }
- int parse();
-
- private:
- DocPara *m_paragraph;
- int m_itemNum;
-};
-
/*! @brief Node representing a simple list item */
class DocSimpleListItem : public DocNode
{
@@ -1122,7 +1117,6 @@ class DocHtmlListItem : public CompAccept<DocHtmlListItem>, public DocNode
void accept(DocVisitor *v) { CompAccept<DocHtmlListItem>::accept(this,v); }
int parse();
int parseXml();
- const QList<DocNode> &children() const { return m_children; }
private:
HtmlAttribList m_attribs;
@@ -1138,7 +1132,6 @@ class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode
const HtmlAttribList &attribs() const { return m_attribs; }
void accept(DocVisitor *v) { CompAccept<DocHtmlDescData>::accept(this,v); }
int parse();
- const QList<DocNode> &children() const { return m_children; }
private:
HtmlAttribList m_attribs;
@@ -1159,7 +1152,6 @@ class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode
void markFirst(bool v=TRUE) { m_isFirst=v; }
void markLast(bool v=TRUE) { m_isLast=v; }
const HtmlAttribList &attribs() const { return m_attribs; }
- const QList<DocNode> &children() const { return m_children; }
int parse();
int parseXml();
@@ -1221,7 +1213,22 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
private:
DocHtmlCaption *m_caption;
- HtmlAttribList m_attribs;
+ HtmlAttribList m_attribs;
+};
+
+/*! @brief Node representing an HTML blockquote */
+class DocHtmlBlockQuote : public CompAccept<DocHtmlBlockQuote>, public DocNode
+{
+ public:
+ DocHtmlBlockQuote(DocNode *parent,const HtmlAttribList &attribs)
+ : m_attribs(attribs) { m_parent = parent; }
+ Kind kind() const { return Kind_HtmlBlockQuote; }
+ int parse();
+ void accept(DocVisitor *v) { CompAccept<DocHtmlBlockQuote>::accept(this,v); }
+ const HtmlAttribList &attribs() const { return m_attribs; }
+
+ private:
+ HtmlAttribList m_attribs;
};
/*! @brief Root node of a text fragment */
@@ -1244,7 +1251,6 @@ class DocRoot : public CompAccept<DocRoot>, public DocNode
void parse();
bool indent() const { return m_indent; }
bool singleLine() const { return m_singleLine; }
- const QList<DocNode> &children() const { return m_children; }
private:
bool m_indent;
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index 5c352ca..f86020a 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -59,7 +59,8 @@ enum Tokens
RetVal_EndTable = 0x10010,
RetVal_Internal = 0x10011,
RetVal_SwitchLang = 0x10012,
- RetVal_CloseXml = 0x10013
+ RetVal_CloseXml = 0x10013,
+ RetVal_EndBlockQuote = 0x10014
};
struct TokenInfo
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 3772807..765e6c8 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -23,6 +23,7 @@
#include <qstring.h>
#include <qstack.h>
#include <qdict.h>
+#include <qregexp.h>
#include "doctokenizer.h"
#include "cmdmapper.h"
@@ -257,17 +258,44 @@ static void handleHtmlTag()
}
}
-static QCString stripEmptyLines(const char *s)
+static QCString stripEmptyLines(const QCString &s)
{
- if (s==0) return QCString();
- int result=0,p=0;
+ if (s.isEmpty()) return QCString();
+ int end=s.length();
+ int start=0,p=0;
+ // skip leading empty lines
for (;;)
{
int c;
- while ((c=s[p]) && isspace(c)) p++;
- if (s[p]=='\n') result=++p; else break;
+ while ((c=s[p]) && (c==' ' || c=='\t')) p++;
+ if (s[p]=='\n')
+ {
+ start=++p;
+ }
+ else
+ {
+ break;
+ }
+ }
+ // skip trailing empty lines
+ p=end-1;
+ if (p>=start && s.at(p)=='\n') p--;
+ while (p>=start)
+ {
+ int c;
+ while ((c=s[p]) && (c==' ' || c=='\t')) p--;
+ if (s[p]=='\n')
+ {
+ end=p;
+ }
+ else
+ {
+ break;
+ }
+ p--;
}
- return &s[result];
+ //printf("stripEmptyLines(%d-%d)\n",start,end);
+ return s.mid(start,end-start);
}
//--------------------------------------------------------------------------
@@ -288,18 +316,20 @@ static int yyread(char *buf,int max_size)
%}
-CMD ("\\"|"@")
-WS [ \t\r\n]
-NONWS [^ \t\r\n]
-BLANK [ \t\r]
-ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
-LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
-CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
-MAILADR [a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
-OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}*
-LISTITEM {BLANK}*{OPTSTARS}"-"("#")?{WS}
-ENDLIST {BLANK}*{OPTSTARS}"."{BLANK}*\n
-ATTRIB {ID}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
+CMD ("\\"|"@")
+WS [ \t\r\n]
+NONWS [^ \t\r\n]
+BLANK [ \t\r]
+ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
+LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
+CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
+MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
+OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}*
+LISTITEM {BLANK}*[-]("#")?{WS}
+MLISTITEM {BLANK}*[+*]{WS}
+OLISTITEM {BLANK}*[1-9][0-9]*"."{WS}
+ENDLIST {BLANK}*"."{BLANK}*\n
+ATTRIB {ID}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=]
URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)+
FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+]
@@ -309,7 +339,7 @@ FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK}
LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)?
VERBATIM "verbatim"{BLANK}*
SPCMD1 {CMD}([a-z_A-Z][a-z_A-Z0-9]*|{VERBATIM})
-SPCMD2 {CMD}[\\@<>&$#%~"]
+SPCMD2 {CMD}[\\@<>&$#%~".]
SPCMD3 {CMD}form#[0-9]+
SPCMD4 {CMD}"::"
INOUT "in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in")
@@ -389,14 +419,44 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
%x St_SecSkip
%%
-<St_Para>\r /* skip carriage return */
-<St_Para>^{LISTITEM} { /* list item */
+<St_Para>\r /* skip carriage return */
+<St_Para>^{LISTITEM} { /* list item */
QCString text=yytext;
int dashPos = text.findRev('-');
g_token->isEnumList = text.at(dashPos+1)=='#';
g_token->indent = computeIndent(yytext,dashPos);
return TK_LISTITEM;
}
+<St_Para>^{MLISTITEM} { /* list item */
+ if (!Doxygen::markdownSupport)
+ {
+ REJECT;
+ }
+ else
+ {
+ QCString text=yytext;
+ static QRegExp re("[*+]");
+ int listPos = text.findRev(re);
+ g_token->isEnumList = FALSE;
+ g_token->indent = computeIndent(yytext,listPos);
+ return TK_LISTITEM;
+ }
+ }
+<St_Para>^{OLISTITEM} { /* numbered list item */
+ if (!Doxygen::markdownSupport)
+ {
+ REJECT;
+ }
+ else
+ {
+ QCString text=yytext;
+ static QRegExp re("[1-9]");
+ int digitPos = text.find(re);
+ g_token->isEnumList = TRUE;
+ g_token->indent = computeIndent(yytext,digitPos);
+ return TK_LISTITEM;
+ }
+ }
<St_Para>{BLANK}*\n{LISTITEM} { /* list item on next line */
QCString text=yytext;
text=text.right(text.length()-text.find('\n')-1);
@@ -405,6 +465,38 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
g_token->indent = computeIndent(text,dashPos);
return TK_LISTITEM;
}
+<St_Para>{BLANK}*\n{MLISTITEM} { /* list item on next line */
+ if (!Doxygen::markdownSupport)
+ {
+ REJECT;
+ }
+ else
+ {
+ QCString text=yytext;
+ static QRegExp re("[*+]");
+ text=text.right(text.length()-text.find('\n')-1);
+ int markPos = text.findRev(re);
+ g_token->isEnumList = FALSE;
+ g_token->indent = computeIndent(text,markPos);
+ return TK_LISTITEM;
+ }
+ }
+<St_Para>{BLANK}*\n{OLISTITEM} { /* list item on next line */
+ if (!Doxygen::markdownSupport)
+ {
+ REJECT;
+ }
+ else
+ {
+ QCString text=yytext;
+ text=text.right(text.length()-text.find('\n')-1);
+ static QRegExp re("[1-9]");
+ int digitPos = text.find(re);
+ g_token->isEnumList = TRUE;
+ g_token->indent = computeIndent(text,digitPos);
+ return TK_LISTITEM;
+ }
+ }
<St_Para>^{ENDLIST} { /* end list */
int dotPos = QCString(yytext).findRev('.');
g_token->indent = computeIndent(yytext,dotPos);
@@ -479,8 +571,22 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
g_token->isEMailAddr=FALSE;
return TK_URL;
}
+<St_Para>"<"("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK}">" { // URL
+ g_token->name=yytext;
+ g_token->name = g_token->name.mid(1,g_token->name.length()-2);
+ g_token->isEMailAddr=FALSE;
+ return TK_URL;
+ }
<St_Para>{MAILADR} { // Mail address
g_token->name=yytext;
+ g_token->name.stripPrefix("mailto:");
+ g_token->isEMailAddr=TRUE;
+ return TK_URL;
+ }
+<St_Para>"<"{MAILADR}">" { // Mail address
+ g_token->name=yytext;
+ g_token->name = g_token->name.mid(1,g_token->name.length()-2);
+ g_token->name.stripPrefix("mailto:");
g_token->isEMailAddr=TRUE;
return TK_URL;
}
@@ -565,7 +671,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
g_token->name = yytext;
return TK_COMMAND;
}
-<St_Para>({BLANK}*\n)+{BLANK}*\n {
+<St_Para>({BLANK}*\n)+{BLANK}*\n{BLANK}* {
if (g_insidePre)
{
/* Inside a <pre>..</pre> blank lines are treated
@@ -574,9 +680,19 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
g_token->chars=yytext;
return TK_WHITESPACE;
}
- else
+ else // found end of a paragraph
{
- /* start of a new paragraph */
+ g_token->indent=computeIndent(yytext,yyleng-1);
+ int i;
+ // put back the indentation (needed for list items)
+ for (i=0;i<g_token->indent;i++)
+ {
+ unput(' ');
+ }
+ // tell flex that after putting the last indent
+ // back we are at the beginning of the line
+ YY_CURRENT_BUFFER->yy_at_bol=1;
+ // start of a new paragraph
return TK_NEWPARA;
}
}
@@ -618,9 +734,9 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
<St_XmlOnly>{CMD}"endxmlonly" {
return RetVal_OK;
}
-<St_XmlOnly>[^\\@\n]+ |
-<St_XmlOnly>\n |
-<St_XmlOnly>. {
+<St_XmlOnly>[^\\@\n]+ |
+<St_XmlOnly>\n |
+<St_XmlOnly>. {
g_token->verb+=yytext;
}
<St_Verbatim>{CMD}"endverbatim" {
diff --git a/src/docvisitor.h b/src/docvisitor.h
index 8978831..057da5f 100644
--- a/src/docvisitor.h
+++ b/src/docvisitor.h
@@ -72,14 +72,14 @@ class DocRef;
class DocFormula;
class DocSecRefItem;
class DocSecRefList;
-//class DocLanguage;
class DocLinkedWord;
class DocParamSect;
class DocParamList;
class DocInternalRef;
-class DocCopy;
+class DocCopy; // TODO: no longer generated => remove
class DocText;
class DocSimpleSectSep;
+class DocHtmlBlockQuote;
/*! @brief Abstract visitor that participates in the visitor pattern.
*/
@@ -171,8 +171,6 @@ class DocVisitor
virtual void visitPost(DocSecRefItem *) = 0;
virtual void visitPre(DocSecRefList *) = 0;
virtual void visitPost(DocSecRefList *) = 0;
- //virtual void visitPre(DocLanguage *) = 0;
- //virtual void visitPost(DocLanguage *) = 0;
virtual void visitPre(DocParamSect *) = 0;
virtual void visitPost(DocParamSect *) = 0;
virtual void visitPre(DocParamList *) = 0;
@@ -185,6 +183,8 @@ class DocVisitor
virtual void visitPost(DocCopy *) = 0;
virtual void visitPre(DocText *) = 0;
virtual void visitPost(DocText *) = 0;
+ virtual void visitPre(DocHtmlBlockQuote *) = 0;
+ virtual void visitPost(DocHtmlBlockQuote *) = 0;
/*! @} */
};
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index d200a47..aa61647 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -34,7 +34,6 @@
#include "entry.h"
#include "index.h"
#include "logos.h"
-#include "instdox.h"
#include "message.h"
#include "config.h"
#include "util.h"
@@ -82,6 +81,7 @@
#include "eclipsehelp.h"
#include "cite.h"
#include "filestorage.h"
+#include "markdown.h"
#include "layout.h"
@@ -150,6 +150,7 @@ int Doxygen::subpageNestingLevel = 0;
bool Doxygen::userComments = FALSE;
QCString Doxygen::spaces;
bool Doxygen::generatingXmlOutput = FALSE;
+bool Doxygen::markdownSupport = TRUE;
// locally accessible globals
static QDict<EntryNav> g_classEntries(1009);
@@ -502,7 +503,8 @@ static void addRelatedPage(EntryNav *rootNav)
PageDef *pd = addRelatedPage(root->name,root->args,doc,root->anchors,
root->fileName,root->startLine,
root->sli,
- gd,rootNav->tagInfo()
+ gd,rootNav->tagInfo(),
+ root->lang
);
if (pd)
{
@@ -7652,28 +7654,6 @@ static void generateClassList(ClassSDict &classSDict)
static void generateClassDocs()
{
- // write the installdox script if necessary
- if (Config_getBool("GENERATE_HTML") &&
- (Config_getList("TAGFILES").count()>0 ||
- Config_getBool("SEARCHENGINE")
- )
- )
- {
- writeInstallScript();
- }
-
- //msg("Generating annotated compound index...\n");
- //writeAnnotatedIndex(*g_outputList);
-
- //msg("Generating alphabetical compound index...\n");
- //writeAlphabeticalIndex(*g_outputList);
-
- //msg("Generating hierarchical class index...\n");
- //writeHierarchicalIndex(*g_outputList);
-
- //msg("Generating member index...\n");
- //writeClassMemberIndex(*g_outputList);
-
generateClassList(*Doxygen::classSDict);
generateClassList(*Doxygen::hiddenClasses);
}
@@ -8442,6 +8422,7 @@ static void buildExampleList(EntryNav *rootNav)
root->name,root->brief+root->doc+root->inbodyDocs,root->args);
pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE));
pd->addSectionsToDefinition(root->anchors);
+ pd->setLanguage(root->lang);
//pi->addSections(root->anchors);
Doxygen::exampleSDict->inSort(root->name,pd);
@@ -8500,8 +8481,7 @@ static void generateExampleDocs()
TRUE, // is example
pd->name()
);
- g_outputList->endContents();
- endFile(*g_outputList);
+ endFile(*g_outputList); // contains g_outputList->endContents()
}
g_outputList->enable(OutputGenerator::Man);
}
@@ -9358,6 +9338,7 @@ void initDoxygen()
Doxygen::parserManager->registerParser("vhdl", new VHDLLanguageScanner);
Doxygen::parserManager->registerParser("dbusxml", new DBusXMLScanner);
Doxygen::parserManager->registerParser("tcl", new TclLanguageScanner);
+ Doxygen::parserManager->registerParser("md", new MarkdownFileParser);
// register any additional parsers here...
@@ -9830,6 +9811,8 @@ void adjustConfiguration()
Config_getBool("CALLER_GRAPH") ||
Config_getBool("REFERENCES_RELATION") ||
Config_getBool("REFERENCED_BY_RELATION");
+
+ Doxygen::markdownSupport = Config_getBool("MARKDOWN_SUPPORT");
/**************************************************************************
* Add custom extension mappings
diff --git a/src/doxygen.css b/src/doxygen.css
index b3365a7..613a3d3 100644
--- a/src/doxygen.css
+++ b/src/doxygen.css
@@ -293,6 +293,13 @@ span.vhdllogic {
color: #ff0000
}
+blockquote {
+ background-color: ##F8;
+ border-left: 2px solid ##AA;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
/* @end */
/*
@@ -616,6 +623,8 @@ address {
table.doxtable {
border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
}
table.doxtable td, table.doxtable th {
diff --git a/src/doxygen.h b/src/doxygen.h
index 0722513..b06d205 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -134,6 +134,7 @@ class Doxygen
static int subpageNestingLevel;
static QCString spaces;
static bool generatingXmlOutput;
+ static bool markdownSupport;
};
void initDoxygen();
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
index 4466e07..1e4f161 100644
--- a/src/doxygen_css.h
+++ b/src/doxygen_css.h
@@ -293,6 +293,13 @@
" color: #ff0000 \n"
"}\n"
"\n"
+"blockquote {\n"
+" background-color: ##F8;\n"
+" border-left: 2px solid ##AA;\n"
+" margin: 0 24px 0 4px;\n"
+" padding: 0 12px 0 16px;\n"
+"}\n"
+"\n"
"/* @end */\n"
"\n"
"/*\n"
@@ -616,6 +623,8 @@
"\n"
"table.doxtable {\n"
" border-collapse:collapse;\n"
+" margin-top: 4px;\n"
+" margin-bottom: 4px;\n"
"}\n"
"\n"
"table.doxtable td, table.doxtable th {\n"
diff --git a/src/doxytag.l b/src/doxytag.l
deleted file mode 100644
index f8e4540..0000000
--- a/src/doxytag.l
+++ /dev/null
@@ -1,930 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2011 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.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-%{
-/*
- * includes
- */
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "qtbc.h"
-#include <qstrlist.h>
-#include <qfileinfo.h>
-#include <qfile.h>
-#include <qdict.h>
-#include <qtextstream.h>
-#include <qdir.h>
-
-#include "version.h"
-//#include "suffixtree.h"
-//#include "searchindex.h"
-#include "logos.h"
-
-static QCString convertToXML(const char *s)
-{
- QCString result;
- if (s==0) return result;
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- switch (c)
- {
- case '<': result+="&lt;"; break;
- case '>': result+="&gt;"; break;
- case '&': result+="&amp;"; break;
- case '\'': result+="&apos;"; break;
- case '"': result+="&quot;"; break;
- default: result+=c; break;
- }
- }
- return result;
-}
-
-struct MemberDef
-{
- QCString name;
- QCString anchor;
- QCString args;
-};
-
-struct ClassDef
-{
- QCString name;
- QStrList bases;
- QCString fileName;
- bool isFile;
- QList<MemberDef> memberList;
-};
-
-QList<ClassDef> classList;
-QDict<ClassDef> classDict(1009);
-QList<ClassDef> fileList;
-QDict<ClassDef> fileDict(1009);
-
-static bool genTag;
-static bool genIndex;
-
-static QStrList bases;
-static QCString inputString;
-static int inputPosition;
-static QCString yyFileName;
-static int yyLineNr;
-static QCString classFile;
-static QCString memberRef;
-static QCString memberName;
-static QCString memberArgs;
-static QCString className;
-static QCString baseName;
-static QCString docBaseLink;
-static QCString docAnchor;
-static QCString docRefName;
-static bool nameBug;
-//static SearchIndex searchIndex;
-
-#define YY_NEVER_INTERACTIVE 1
-
-/* -----------------------------------------------------------------
- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-static void addClass(const char *clName)
-{
- if (classDict[clName]==0)
- {
- //printf("addClass(%s)\n",clName);
- ClassDef *cd=new ClassDef;
- cd->name=clName;
- cd->fileName=yyFileName;
- cd->isFile=FALSE;
- classList.append(cd);
- classDict.insert(clName,cd);
- }
-}
-
-static void addFile(const char *fName)
-{
- if (classDict[fName]==0)
- {
- ClassDef *fd=new ClassDef;
- fd->name=fName;
- fd->fileName=yyFileName;
- fd->isFile=TRUE;
- classList.append(fd);
- classDict.insert(fName,fd);
- }
-}
-
-static void addBases(const char *clName)
-{
- ClassDef *cd=0;
- if (clName && (cd=classDict[clName])) cd->bases=bases;
-}
-
-static void addMember(const char *memName,const char *memRef,const char *memArgs)
-{
- //printf("addMember(%s,%s,%s)\n",memName,memRef,memArgs);
- ClassDef *cd=classList.last();
- if (cd)
- {
- MemberDef *md;
- md=new MemberDef;
- md->name=memName;
- md->anchor=memRef;
- md->args=memArgs;
- cd->memberList.append(md);
- }
- else
- {
- //printf("Warning: found member %s %s but not class was found to insert it!\n",
- // memName,memArgs);
- }
-}
-
-static void addReference()
-{
- //printf("addReference() key: %s ref:%s\n",
- // docRefName.data(),(docBaseLink+"#"+docAnchor).data());
- //if (genIndex && !docRefName.isEmpty() && !docBaseLink.isEmpty())
- //{
- // if (docAnchor.isEmpty())
- // searchIndex.addReference(docRefName,docBaseLink);
- // else
- // searchIndex.addReference(docRefName,docBaseLink+"#"+docAnchor);
- // searchIndex.addWord(docRefName,docRefName,TRUE);
- //}
-}
-
-QCString unhtmlify(const char *str)
-{
- QCString result;
- const char *p=str;
- char c;
- while ((c=*p)!='\0')
- {
- if (c!='&') { result+=c; p++; }
- else
- {
- if (strncmp(p,"&amp;",5)==0) { result+='&'; p+=5; }
- else if (strncmp(p,"&lt;",4)==0) { result+='<'; p+=4; }
- else if (strncmp(p,"&gt;",4)==0) { result+='>'; p+=4; }
- else if (strncmp(p,"&quot;",6)==0) { result+='"'; p+=4; }
- else /* should not happen */ { result+='&'; p++; }
- }
- }
- return result;
-}
-
-%}
-
-%x Start
-%x SearchClassFile
-%x ReadClassFile
-%x CheckClassName
-%x ReadClassName
-%x SearchMemberRef
-%x ReadMemberRef
-%x SearchMemberName
-%x ReadMemberName
-%x ReadOperator
-%x SearchBaseClasses
-%x ReadBaseClass
-%x SearchRefName
-%x ReadRefName
-%x SearchArgs
-%x ReadArgs
-%x SearchWords
-%x SkipHTMLTag
-%x CheckConstructor
-%x SkipPreformated
-
-%x Qt3ReadType
-%x Qt3ReadAnchor
-%x Qt3ReadName
-%x Qt3ReadOperator
-%x Qt3ReadArgs
-
-%x DoxReadAnchor
-%x DoxReadName
-%x DoxReadArgs
-%x DoxClassName
-%x DoxClassBase
-
-%%
-
-<Start>^"<li>" {
- BEGIN( SearchClassFile );
- }
-<Start>^"<td"[^\n]*"<h1 align=center>" | // Qt-3.x.x
-<Start>"</table><h1 align=\"center\">" | // Qt-4
-<Start>"</table><h1 class=\"title\">" | // >Qt-4.4.0
-<Start>^"<h1 align=center>" { // Qt variant
- BEGIN( ReadClassName );
- }
-<Start>^("<hr>")?"<h1>" { // Doxygen variant
- BEGIN( ReadClassName );
- }
-<Start>^"Inherits " {
- //printf("Inherits found\n");
- BEGIN( SearchBaseClasses );
- }
-<Start>^"<h3 class=\"fn\">"/[a-z_A-Z0-9] { // needed due to inconsistency in the Qt docs
- BEGIN( CheckConstructor );
- }
-
- /* --------------------------------------------------- */
- /* Qt member extraction rules */
-
-<Start>^"<h3 class=fn>" {
- BEGIN( Qt3ReadType );
- }
-<Start>^"<h3 class=fn><a name=\"" { // Qt-3.3+ html file
- BEGIN( Qt3ReadAnchor );
- }
-<Start>^"<h3 class=\"fn\"><a name=\"" { // Qt-4 html file
- BEGIN( Qt3ReadAnchor );
- }
-<Qt3ReadType>"<a name=\"" {
- BEGIN( Qt3ReadAnchor );
- }
-<Qt3ReadType>.
-<Qt3ReadAnchor>[~a-z_A-Z0-9\-\[\]*+%\^&|!]+ {
- memberRef = yytext;
- }
-<Qt3ReadAnchor>"\"></a>" {
- BEGIN( Qt3ReadName );
- }
-<Qt3ReadAnchor>. {
- BEGIN( Start );
- }
-<Qt3ReadName>[a-z_A-Z0-9]+"::operator" {
- memberName="operator";
- BEGIN(Qt3ReadOperator);
- }
-<Qt3ReadOperator>[+\-*/%\^&|~!=\[\]]+ { memberName+=yytext; }
-<Qt3ReadOperator>"&lt;" { memberName+="<"; }
-<Qt3ReadOperator>"&gt;" { memberName+=">"; }
-<Qt3ReadOperator>"new" { memberName+=" new"; }
-<Qt3ReadOperator>"delete" { memberName+=" delete"; }
-<Qt3ReadOperator>"()" { memberName+="()"; BEGIN( Qt3ReadArgs ); }
-<Qt3ReadOperator>. { unput(*yytext); BEGIN( Qt3ReadArgs ); }
-<Qt3ReadName>[a-z_A-Z0-9]+"::"[~a-z_A-Z0-9]+ {
- memberName=yytext;
- memberName=memberName.mid(memberName.find("::")+2);
- BEGIN(Qt3ReadArgs);
- }
-<Qt3ReadName>.
-<Qt3ReadArgs>[ \t]*"(" {
- memberArgs+='(';
- }
-<Qt3ReadArgs>"&amp;" { memberArgs+='&'; }
-<Qt3ReadArgs>"&lt;" { memberArgs+='<'; }
-<Qt3ReadArgs>"&gt;" { memberArgs+='>'; }
-<Qt3ReadArgs>"&quot;" { memberArgs+='"'; }
-<Qt3ReadArgs>"&nbsp;" { memberArgs+=' '; }
-<Qt3ReadArgs>"</h3>" {
- addMember(memberName,memberRef,memberArgs);
- memberName.resize(0);
- memberRef.resize(0);
- memberArgs.resize(0);
- BEGIN(Start);
- }
-<Qt3ReadArgs>"<"[^>]+">"
-<Qt3ReadArgs>")" {
- memberArgs+=')';
- addMember(memberName,memberRef,memberArgs);
- memberName.resize(0);
- memberRef.resize(0);
- memberArgs.resize(0);
- BEGIN(Start);
- }
-<Qt3ReadArgs>[a-z_A-Z0-9]+ { memberArgs+=yytext; }
-<Qt3ReadArgs>. { memberArgs+=*yytext; }
-
- /* --------------------------------------------------- */
- /* Doxygen class extraction rules */
-
-<Start>"<!-- doxytag: class=\"" {
- className.resize(0);
- BEGIN(DoxClassName);
- }
-<DoxClassName>[^&"]+ {
- className=yytext;
- addClass(className);
- }
-<DoxClassName>"&lt;" {
- className+='<';
- }
-<DoxClassName>"&gt;" {
- className+='>';
- }
-<DoxClassName>"&amp;" {
- className+='&';
- }
-<DoxClassName>"&quot;" {
- className+='"';
- }
-<DoxClassName>. {
- className+=*yytext;
- }
-<DoxClassName>"\" -->" {
- BEGIN(Start);
- }
-
- /* --------------------------------------------------- */
- /* Doxygen inheritance extraction rules */
-
-<Start>"<!-- doxytag: inherits=\"" {
- bases.clear();
- baseName.resize(0);
- BEGIN(DoxClassBase);
- }
-<DoxClassBase>[^&,"]+ {
- baseName+=yytext;
- }
-<DoxClassBase>"," {
- bases.append(baseName);
- baseName.resize(0);
- }
-<DoxClassBase>"&lt;" {
- baseName+='<';
- }
-<DoxClassBase>"&gt;" {
- baseName+='>';
- }
-<DoxClassBase>"&amp;" {
- baseName+='&';
- }
-<DoxClassBase>"&quot;" {
- baseName+='"';
- }
-<DoxClassBase>. {
- baseName+=*yytext;
- }
-<DoxClassBase>"\" -->" {
- bases.append(baseName);
- baseName.resize(0);
- addBases(className);
- BEGIN(Start);
- }
-
- /* --------------------------------------------------- */
- /* Doxygen member extraction rules */
-
-<Start>"<!-- doxytag: member=\"" {
- memberName.resize(0);
- BEGIN(DoxReadName);
- }
-<DoxReadName>[^&"]+ {
- memberName+=yytext;
- }
-<DoxReadName>"&lt;" {
- memberName+='<';
- }
-<DoxReadName>"&gt;" {
- memberName+='>';
- }
-<DoxReadName>"&amp;" {
- memberName+='&';
- }
-<DoxReadName>"&quot;" {
- memberName+='"';
- }
-<DoxReadName>. {
- memberName+=*yytext;
- }
-<DoxReadName>"\" ref=\"" {
- memberName=memberName.mid(memberName.find("::")+2);
- memberRef.resize(0);
- BEGIN(DoxReadAnchor);
- }
-<DoxReadAnchor>[^&"]+ {
- memberRef+=yytext;
- }
-<DoxReadAnchor>"&lt;" {
- memberRef+='<';
- }
-<DoxReadAnchor>"&gt;" {
- memberRef+='>';
- }
-<DoxReadAnchor>"&amp;" {
- memberRef+='&';
- }
-<DoxReadAnchor>"&quot;" {
- memberRef+='"';
- }
-<DoxReadAnchor>. {
- memberRef+=*yytext;
- }
-<DoxReadAnchor>"\" args=\"" {
- memberArgs.resize(0);
- BEGIN(DoxReadArgs);
- }
-<DoxReadArgs>[^&"]+ {
- memberArgs+=yytext;
- }
-<DoxReadArgs>"&lt;" {
- memberArgs+='<';
- }
-<DoxReadArgs>"&gt;" {
- memberArgs+='>';
- }
-<DoxReadArgs>"&amp;" {
- memberArgs+='&';
- }
-<DoxReadArgs>"&quot;" {
- memberArgs+='"';
- }
-<DoxReadArgs>. {
- memberArgs+=*yytext;
- }
-<DoxReadArgs>"\" -->" {
- addMember(memberName,memberRef,memberArgs);
- memberName.resize(0);
- memberRef.resize(0);
- memberArgs.resize(0);
- BEGIN(Start);
- }
-
- /** --------------------------------------------------- */
-
-<Start>"<pre>" {
- BEGIN( SkipPreformated );
- }
-<Start>"<a name=\"" {
- BEGIN( SearchWords );
- }
-<Start>"<" {
- BEGIN( SkipHTMLTag );
- }
-<Start>"&"[a-zA-Z]+";"
-<Start,SkipPreformated>[a-z_A-Z][a-z_A-Z0-9]* {
- //printf("tag: %s#%s ref: %s word: `%s'\n",
- // docBaseLink.data(),docAnchor.data(),
- // docRefName.data(),yytext);
- //if (genIndex && !docRefName.isEmpty() && yyleng>2)
- // searchIndex.addWord(docRefName,
- // yytext,FALSE
- // );
- }
-<SkipPreformated>"</pre>" {
- BEGIN( Start );
- }
-<SkipPreformated>[^\<\n]+
-<CheckConstructor>[a-z_A-Z0-9~:]+ {
- QCString s=yytext;
- if (s.find("::")!=-1)
- {
- docRefName=yytext;
- addReference();
- nameBug=TRUE;
- }
- else
- {
- nameBug=FALSE;
- }
- BEGIN( Start );
- }
-<SearchWords>[a-z_A-Z0-9]+ {
- docAnchor = yytext;
- if (docAnchor=="details" ||
- docAnchor=="_details")
- {
- docRefName=className.copy();
- addReference();
- BEGIN( Start );
- }
- else
- {
- BEGIN( SearchRefName );
- }
- }
-<SearchRefName>"\" doxytag=\"" {
- BEGIN( ReadRefName );
- }
-<SearchRefName>"\"></a><a" { // HACK: avoid finding links in code fragments
- BEGIN( Start );
- }
-<SearchRefName>"\"></a>" { // HACK: deal with Qt code
- if (nameBug)
- BEGIN( Start );
- else
- BEGIN( ReadRefName );
- }
-
-<ReadRefName>[a-z_A-Z0-9:\.\+\-]*"operator"[ \t]*("new"|"delete"|("&amp;"("&amp"|"=")*)|("&gt;"("&gt;"|"=")*)|("&lt;"("&lt;"|"=")*)|("-&gt;"[*]*)|[+\-*%/|~!=,\^]|[+\-*%/\^!|~=\[(][=|+\-\])]) { // hmm, looks impressive :-)
- docRefName=unhtmlify(yytext);
- addReference();
- BEGIN( Start );
- }
-<ReadRefName>[a-z_A-Z0-9~:\.\+\-]+ {
- //printf("ReadRef=%s\n",yytext);
- docRefName=yytext;
- addReference();
- BEGIN( Start );
- }
-<SearchBaseClasses>"<a "[a-z_A-Z0-9 .:\=\"\-\+\/\@]+">" {
- //printf("Search %s\n",yytext);
- BEGIN( ReadBaseClass );
- }
-<SearchBaseClasses>\n {
- addBases(className);
- BEGIN( Start );
- }
-<ReadBaseClass>[a-z_A-Z0-9]+ {
- bases.append(yytext);
- BEGIN( SearchBaseClasses );
- }
-<SearchClassFile>"<a class=\"el\" href=\"" {
- BEGIN( ReadClassFile );
- }
-<SearchClassFile>"<a href=\"" {
- BEGIN( ReadClassFile );
- }
-<ReadClassName>[a-z_A-Z0-9:\.\-\+]+ {
- className=yytext;
- BEGIN( CheckClassName);
- }
-<CheckClassName>"Class Reference" {
- //printf("className=%s\n",className.data());
- addClass(className);
- BEGIN( Start );
- }
-<CheckClassName>"File Reference" {
- //printf("className=%s\n",className.data());
- addFile(className);
- BEGIN( Start );
- }
-<CheckClassName>[a-z_A-Z0-9]+ { // not a class file
- className.resize(0);
- BEGIN( Start );
- }
-<ReadClassFile>[a-z_A-Z0-9.\-\+]+ {
- classFile=yytext;
- BEGIN( SearchMemberRef );
- }
-<SearchMemberRef,ReadClassFile>"#" {
- if (YY_START==ReadClassFile)
- {
- classFile=yyFileName;
- }
- //BEGIN( ReadMemberRef );
- BEGIN( Start );
- }
-<ReadMemberRef>[a-z_A-Z0-9]+ {
- memberRef=yytext;
- BEGIN( SearchMemberName );
- }
-<SearchMemberName>"<strong>"|"<b>" { // <strong> is for qt-1.44, <b> is for qt-2.00
- BEGIN( ReadMemberName );
- }
-<SearchMemberName>[a-z_A-Z~] {
- unput(*yytext);
- BEGIN( ReadMemberName );
- }
-<ReadMemberName>"operator" {
- memberName="operator";
- BEGIN( ReadOperator );
- }
-<ReadOperator>[+\-*/%\^&|~!=()\[\]] { memberName+=*yytext; }
-<ReadOperator>"&lt;" { memberName+="<"; }
-<ReadOperator>"&gt;" { memberName+=">"; }
-<ReadOperator>"new" { memberName+=" new"; }
-<ReadOperator>"delete" { memberName+=" delete"; }
-<ReadOperator>"<" { BEGIN( SearchArgs ); }
-<ReadMemberName>[a-z_A-Z0-9]+ {
- memberName=yytext;
- BEGIN( SearchArgs );
- }
-<SearchArgs>"</a>" {
- //printf("SearchArg className=%s memberName=%s\n",className.data(),memberName.data());
- if (!className.isEmpty() && !memberName.isEmpty())
- BEGIN( ReadArgs );
- else
- BEGIN( Start );
- }
-<ReadArgs>"&amp;" { memberArgs+='&'; }
-<ReadArgs>"&lt;" { memberArgs+='<'; }
-<ReadArgs>"&gt;" { memberArgs+='>'; }
-<ReadArgs>"&quot;" { memberArgs+='"'; }
-<ReadArgs>"&nbsp;" { memberArgs+=' '; }
- /*
-<ReadArgs>[{}] { // handle enums
- memberArgs.resize(0);
- addMember(memberName,memberRef,memberArgs);
- if (*yytext=='}')
- BEGIN( Start );
- else
- BEGIN( SearchClassFile );
- }
- */
-<ReadArgs>"<"|"\n" {
- //printf("adding member %s\n",memberName.data());
- memberArgs=memberArgs.stripWhiteSpace();
- //if (newClass)
- //{
- // newClass=FALSE;
- // addClass(className);
- //}
- addMember(memberName,memberRef,memberArgs);
- memberName.resize(0);
- memberRef.resize(0);
- memberArgs.resize(0);
- if (*yytext=='<')
- BEGIN( SkipHTMLTag);
- else
- BEGIN( Start );
- }
-<ReadArgs>. { memberArgs+=(*yytext)&0x7f; }
-<SkipHTMLTag>">" { BEGIN( Start ); }
-<SkipHTMLTag>[a-zA-Z]+
-<*>.
-<*>\n { yyLineNr++;
- if (YY_START!=SkipHTMLTag) BEGIN( Start );
- }
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-
-void parse(QCString &s)
-{
- bases.clear();
- nameBug = FALSE;
- //newClass = TRUE;
- inputString = s;
- inputPosition = 0;
- yyLineNr = 0;
- tagYYrestart( tagYYin );
- BEGIN( Start );
- tagYYlex();
- //printf("Number of lines scanned: %d\n",yyLineNr);
-}
-
-void parseFile(QFileInfo &fi)
-{
- printf("Parsing file %s...\n",fi.fileName().data());
- QFile f;
- f.setName(fi.absFilePath());
- if (f.open(IO_ReadOnly))
- {
- yyFileName = fi.fileName();
- className.resize(0);
- memberName.resize(0);
- //printf("Parsing file %s...\n",fi.fileName().data());
- QCString input(fi.size()+1);
- docBaseLink=fi.fileName();
- docRefName=fi.fileName().copy();
- //searchIndex.addReference(docRefName,docBaseLink);
- //searchIndex.addWord(docRefName,docRefName,TRUE);
- f.readBlock(input.data(),fi.size());
- input.at(fi.size())='\0';
- parse(input);
- }
- else
- {
- fprintf(stderr,"Warning: Cannot open file %s\n",fi.fileName().data());
- }
-}
-
-void parseFileOrDir(const char *fileName)
-{
- QFileInfo fi(fileName);
- if (fi.exists())
- {
- if (fi.isFile())
- {
- parseFile(fi);
- }
- else if (fi.isDir())
- {
- QDir dir(fileName);
- dir.setFilter( QDir::Files );
- dir.setNameFilter( "*.html" );
- const QFileInfoList *list = dir.entryInfoList();
- QFileInfoListIterator it( *list );
- QFileInfo *cfi;
- for ( it.toFirst() ; (cfi=it.current()) ; ++it)
- {
- if (cfi->isFile())
- {
- parseFile(*cfi);
- }
- }
- }
- }
- else
- {
- fprintf(stderr,"Warning: File %s does not exist\n",fileName);
- }
-}
-
-void usage(const char *name)
-{
- fprintf(stderr,"Doxytag version %s\nCopyright Dimitri van Heesch 1997-2011\n\n",
- versionString);
- fprintf(stderr," Generates a tag file and/or a search index for a set of HTML files\n\n");
- fprintf(stderr,"Usage: %s [-t tag_file] [ html_file [html_file...] ]\n",name);
- fprintf(stderr,"Options:\n");
- fprintf(stderr," -t <tag_file> Generate tag file <tag_file>.\n");
- fprintf(stderr,"If no HTML files are given all files in the current dir that\n"
- "have a .html extension are parsed.\n\n");
- exit(1);
-}
-
-const char *getArg(int argc,char **argv,int &optind,const char c)
-{
- char *s=0;
- if (strlen(&argv[optind][2])>0)
- s=&argv[optind][2];
- else if (optind+1<argc)
- s=argv[++optind];
- else
- {
- fprintf(stderr,"option -%c requires an argument\n",c);
- exit(1);
- }
- return s;
-}
-
-int main(int argc,char **argv)
-{
- QCString tagName;
- QCString indexName;
-
- int optind=1;
- const char *arg;
- while (optind<argc && argv[optind][0]=='-')
- {
- switch(argv[optind][1])
- {
- case 't':
- arg=getArg(argc,argv,optind,'t');
- tagName=arg;
- break;
- case 's':
- arg=getArg(argc,argv,optind,'s');
- indexName=arg;
- break;
- case 'h':
- case '?':
- usage(argv[0]);
- break;
- default:
- fprintf(stderr,"Unknown option -%c\n",argv[optind][1]);
- usage(argv[0]);
- }
- optind++;
- }
-
- genTag = !tagName.isEmpty();
- genIndex = !indexName.isEmpty();
-
- if (!genTag && !genIndex)
- {
- fprintf(stderr,"Nothing to do !\n\n");
- usage(argv[0]);
- }
-
- int i;
- if (optind>=argc)
- {
- parseFileOrDir(".");
- }
- else
- {
- for (i=optind;i<argc;i++)
- {
- parseFileOrDir(argv[i]);
- }
- }
- if (genIndex)
- {
- fprintf(stderr,"Error: doxytag cannot be used to generate a search index anymore.\n"
- "This functionality has been integrated into doxygen.\n");
-// printf("Writing search index\n");
-// if (!searchIndex.saveIndex(indexName))
-// {
-// fprintf(stderr,"Error: Could not write search index\n");
-// }
-// QFileInfo fi(indexName);
-// if (fi.exists())
-// {
-// QCString dir=convertToQCString(fi.dir().absPath());
-// fi.setFile(dir+"/search.png");
-// if (!fi.exists()) writeSearchButton(dir);
-// fi.setFile(dir+"/doxygen.png");
-// if (!fi.exists()) writeLogo(dir);
-// fi.setFile(dir+"/search.cgi");
-// if (!fi.exists())
-// {
-// QFile f;
-// f.setName(dir+"/search.cgi");
-// if (f.open(IO_WriteOnly))
-// {
-// QTextStream t(&f);
-// t << "#!/bin/sh" << endl
-// << "DOXYSEARCH=" << endl
-// << "DOXYPATH=" << endl
-// << "if [ -f $DOXYSEARCH ]" << endl
-// << "then" << endl
-// << " $DOXYSEARCH $DOXYPATH" << endl
-// << "else" << endl
-// << " echo \"Content-Type: text/html\"" << endl
-// << " echo \"\"" << endl
-// << " echo \"<H1>Error: $DOXYSEARCH not found. Check cgi script!\"" << endl
-// << "fi" << endl;
-// f.close();
-// }
-// else
-// {
-// fprintf(stderr,"Error: could not open file %s for writing\n",(dir+"/search.cgi").data());
-// }
-// }
-// }
- }
- if (genTag)
- {
- QFile f;
- f.setName(tagName);
- if (f.open(IO_WriteOnly))
- {
- QTextStream t(&f);
- t << "<tagfile>" << endl;
- ClassDef *cd=classList.first();
- while (cd)
- {
- t << " <compound kind=\"";
- if (cd->isFile) t << "file"; else t << "class";
- t << "\">" << endl;
- t << " <name>" << convertToXML(cd->name) << "</name>" << endl;
- char *base=cd->bases.first();
- while (base)
- {
- t << " <base>" << convertToXML(base) << "</base>" << endl;
- base=cd->bases.next();
- }
- t << " <filename>" << convertToXML(cd->fileName) << "</filename>" << endl;
- MemberDef *md=cd->memberList.first();
- while (md)
- {
- if (md->anchor.right(5)=="-enum")
- {
- t << " <member kind=\"enum\">" << endl;
- }
- else
- {
- t << " <member kind=\"function\">" << endl;
- }
- t << " <name>" << convertToXML(md->name) << "</name>" << endl;
- t << " <anchor>" << convertToXML(md->anchor) << "</anchor>" << endl;
- t << " <arglist>" << convertToXML(md->args) << "</arglist>" << endl;
- t << " </member>" << endl;
- md=cd->memberList.next();
- }
- t << " </compound>" << endl;
- cd=classList.next();
- }
- t << "</tagfile>" << endl;
- }
- else
- {
- fprintf(stderr,"Error: Could not write tag file %s\n",tagName.data());
- }
- }
- return 0;
-}
-
-extern "C" {
-int tagYYwrap() { return 1 ; }
-};
diff --git a/src/doxytag.pro.in b/src/doxytag.pro.in
deleted file mode 100644
index d448f97..0000000
--- a/src/doxytag.pro.in
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-#
-#
-# Copyright (C) 1997-2011 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.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#
-# TMake project file for doxytag
-
-TEMPLATE = doxytag.t
-CONFIG = console warn_on $extraopts
-HEADERS = logos.h version.h
-SOURCES = doxytag.cpp logos.cpp version.cpp
-unix:LIBS += -L../lib -lqtools
-win32:INCLUDEPATH += .
-win32-mingw:LIBS += -L../lib -lqtools
-win32-msvc:LIBS += qtools.lib shell32.lib
-win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\lib
-win32-borland:LIBS += qtools.lib shell32.lib
-win32-borland:TMAKE_LFLAGS += -L..\lib -L$(BCB)\lib\psdk
-win32:TMAKE_CXXFLAGS += -DQT_NODLL
-INCLUDEPATH += ../qtools
-OBJECTS_DIR = ../objects
-TARGET = ../bin/doxytag
diff --git a/src/doxytag.t b/src/doxytag.t
deleted file mode 100644
index c74c7ef..0000000
--- a/src/doxytag.t
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-#
-#
-# Copyright (C) 1997-2011 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.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#
-#!
-#! doxytag.t: This is a custom template for building Doxytag
-#!
-#$ IncludeTemplate("app.t");
-
-LEX = flex
-
-#${
-sub GenerateDep {
- my($obj,$src,$dep) = @_;
- my(@objv,$srcv,$i,$s,$o,$d,$c);
- @objv = split(/\s+/,$obj);
- @srcv = split(/\s+/,$src);
- for $i ( 0..$#objv ) {
- $s = $srcv[$i];
- $o = $objv[$i];
- next if $s eq "";
- $text .= $o . ": " . $s;
- $text .= " ${linebreak}\n\t\t" . $dep if $dep ne "";
- if ( $moc_output{$s} ne "" ) {
- $text .= " ${linebreak}\n\t\t" . $moc_output{$s};
- }
- $d = &make_depend($s);
- $text .= " ${linebreak}\n\t\t" . $d if $d ne "";
- $text .= "\n";
- }
- chop $text;
-}
-#$}
-
-#####################
-
-#$ GenerateDep("doxytag.cpp","doxytag.l");
- $(LEX) -PtagYY -t doxytag.l >doxytag.cpp
-
-
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 7dd03c4..5d1061c 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -687,7 +687,6 @@ void FTVHelp::generateJSLink(FTextStream &t,FTVNode *n)
}
else // link into other page
{
- // TODO: external links with installdox
// TODO: use m_topLevelIndex
t << "\"" << convertToJSString(n->name) << "\", \"";
t << externalRef("",n->ref,TRUE);
diff --git a/src/growbuf.h b/src/growbuf.h
new file mode 100644
index 0000000..6798692
--- /dev/null
+++ b/src/growbuf.h
@@ -0,0 +1,38 @@
+#ifndef GROWBUF_H
+#define GROWBUF_H
+
+#include <stdlib.h>
+#include <string.h>
+
+class GrowBuf
+{
+ public:
+ GrowBuf() : str(0), pos(0), len(0) {}
+ ~GrowBuf() { free(str); str=0; pos=0; len=0; }
+ void clear() { pos=0; }
+ void addChar(char c) { if (pos>=len) { len+=1024; str = (char*)realloc(str,len); }
+ str[pos++]=c;
+ }
+ void addStr(const char *s) {
+ int l=strlen(s);
+ if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
+ strcpy(&str[pos],s);
+ pos+=l;
+ }
+ void addStr(const char *s,int n) {
+ int l=strlen(s);
+ if (n<l) l=n;
+ if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
+ strncpy(&str[pos],s,n);
+ pos+=l;
+ }
+ const char *get() { return str; }
+ int getPos() const { return pos; }
+ char at(int i) const { return str[i]; }
+ private:
+ char *str;
+ int pos;
+ int len;
+};
+
+#endif
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 16c5b46..5ecb124 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -94,6 +94,8 @@ static bool mustBeOutsideParagraph(DocNode *n)
* preserve formatting.
*/
case DocNode::Kind_Copy:
+ /* <blockquote> */
+ case DocNode::Kind_HtmlBlockQuote:
return TRUE;
case DocNode::Kind_StyleChange:
return ((DocStyleChange*)n)->style()==DocStyleChange::Preformatted ||
@@ -211,11 +213,37 @@ void HtmlDocVisitor::visit(DocSymbol *s)
void HtmlDocVisitor::visit(DocURL *u)
{
if (m_hide) return;
- m_t << "<a href=\"";
- if (u->isEmail()) m_t << "mailto:";
- m_t << u->url() << "\">";
- filter(u->url());
- m_t << "</a>";
+ if (u->isEmail()) // mail address
+ {
+ // do obfuscation via javascript
+ m_t << "<a href=\"#\" onclick=\"location.href='mai'+'lto:'";
+ QCString url = u->url();
+ uint i;
+ int size=3;
+ for (i=0;i<url.length();)
+ {
+ m_t << "+'" << url.mid(i,size) << "'";
+ i+=size;
+ if (size==3) size=2; else size=3;
+ }
+ m_t << "; return false;\">";
+ size=5;
+ for (i=0;i<url.length();)
+ {
+ filter(url.mid(i,size));
+ if (i<url.length()-size) m_t << "<span style=\"display: none;\">.nosp@m.</span>";
+ i+=size;
+ if (size==5) size=4; else size=5;
+ }
+ m_t << "</a>";
+ }
+ else // web address
+ {
+ m_t << "<a href=\"";
+ m_t << u->url() << "\">";
+ filter(u->url());
+ m_t << "</a>";
+ }
}
void HtmlDocVisitor::visit(DocLineBreak *)
@@ -702,8 +730,10 @@ static int getParagraphContext(DocPara *p,bool &isFirst,bool &isLast)
switch (p->parent()->kind())
{
case DocNode::Kind_AutoListItem:
- isFirst=TRUE;
- isLast =TRUE;
+ //isFirst=TRUE;
+ //isLast =TRUE;
+ isFirst=isFirstChildNode((DocAutoListItem*)p->parent(),p);
+ isLast =isLastChildNode ((DocAutoListItem*)p->parent(),p);
t=1; // not used
break;
case DocNode::Kind_SimpleListItem:
@@ -790,6 +820,7 @@ void HtmlDocVisitor::visitPre(DocPara *p)
case DocNode::Kind_SimpleSect:
case DocNode::Kind_XRefItem:
case DocNode::Kind_Copy:
+ case DocNode::Kind_HtmlBlockQuote:
needsTag = TRUE;
break;
case DocNode::Kind_Root:
@@ -862,6 +893,7 @@ void HtmlDocVisitor::visitPost(DocPara *p)
case DocNode::Kind_SimpleSect:
case DocNode::Kind_XRefItem:
case DocNode::Kind_Copy:
+ case DocNode::Kind_HtmlBlockQuote:
needsTag = TRUE;
break;
case DocNode::Kind_Root:
@@ -1581,6 +1613,29 @@ void HtmlDocVisitor::visitPost(DocText *)
{
}
+void HtmlDocVisitor::visitPre(DocHtmlBlockQuote *b)
+{
+ if (m_hide) return;
+ forceEndParagraph(b);
+
+ QString attrs = htmlAttribsToString(b->attribs());
+ if (attrs.isEmpty())
+ {
+ m_t << "<blockquote class=\"doxtable\">\n";
+ }
+ else
+ {
+ m_t << "<blockquote " << htmlAttribsToString(b->attribs()) << ">\n";
+ }
+}
+
+void HtmlDocVisitor::visitPost(DocHtmlBlockQuote *b)
+{
+ if (m_hide) return;
+ m_t << "</blockquote>" << endl;
+ forceStartParagraph(b);
+}
+
void HtmlDocVisitor::filter(const char *str)
{
if (str==0) return;
diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h
index b4a50ae..cf71e22 100644
--- a/src/htmldocvisitor.h
+++ b/src/htmldocvisitor.h
@@ -126,6 +126,8 @@ class HtmlDocVisitor : public DocVisitor
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
+ void visitPre(DocHtmlBlockQuote *);
+ void visitPost(DocHtmlBlockQuote *);
private:
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 4a203b1..c3921af 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -1401,17 +1401,10 @@ void HtmlGenerator::writeStyleInfo(int part)
}
void HtmlGenerator::startDoxyAnchor(const char *,const char *,
- const char *anchor, const char *name,
- const char *args)
+ const char *anchor, const char *,
+ const char *)
{
t << "<a class=\"anchor\" id=\"" << anchor << "\"></a>";
- t << "<!-- doxytag: member=\"";
- docify(name,TRUE);
- t << "\" ref=\"";
- docify(anchor,TRUE);
- t << "\" args=\"";
- docify(args,TRUE);
- t << "\" -->";
}
void HtmlGenerator::endDoxyAnchor(const char *,const char *)
diff --git a/src/index.cpp b/src/index.cpp
index 7d094d8..09e152c 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -286,7 +286,6 @@ void startFile(OutputList &ol,const char *name,const char *manName,
const char *altSidebarName)
{
static bool disableIndex = Config_getBool("DISABLE_INDEX");
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.startFile(name,manName,title);
ol.startQuickIndices();
if (!disableIndex)
@@ -297,10 +296,8 @@ void startFile(OutputList &ol,const char *name,const char *manName,
{
ol.endQuickIndices();
}
- if (generateTreeView)
- {
- ol.writeSplitBar(altSidebarName ? altSidebarName : name);
- }
+ ol.writeSplitBar(altSidebarName ? altSidebarName : name);
+ ol.writeSearchInfo();
}
void endFile(OutputList &ol,bool skipNavIndex,bool skipEndContents)
@@ -311,7 +308,6 @@ void endFile(OutputList &ol,bool skipNavIndex,bool skipEndContents)
if (!skipNavIndex)
{
if (!skipEndContents) ol.endContents();
- ol.writeSearchInfo();
if (generateTreeView)
{
ol.writeString("</div>\n");
@@ -1980,7 +1976,6 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
{
if (documentedClassMembers[hl]==0) return;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool disableIndex = Config_getBool("DISABLE_INDEX");
bool multiPageIndex=FALSE;
@@ -2067,11 +2062,8 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
}
}
ol.endQuickIndices();
-
- if (generateTreeView)
- {
- ol.writeSplitBar(fileName);
- }
+ ol.writeSplitBar(fileName);
+ ol.writeSearchInfo();
ol.startContents();
@@ -2161,7 +2153,6 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
{
if (documentedFileMembers[hl]==0) return;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool disableIndex = Config_getBool("DISABLE_INDEX");
bool multiPageIndex=FALSE;
@@ -2245,11 +2236,8 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
}
}
ol.endQuickIndices();
-
- if (generateTreeView)
- {
- ol.writeSplitBar(fileName);
- }
+ ol.writeSplitBar(fileName);
+ ol.writeSearchInfo();
ol.startContents();
@@ -2337,7 +2325,6 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
{
if (documentedNamespaceMembers[hl]==0) return;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool disableIndex = Config_getBool("DISABLE_INDEX");
@@ -2423,11 +2410,8 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
}
ol.endQuickIndices();
-
- if (generateTreeView)
- {
- ol.writeSplitBar(fileName);
- }
+ ol.writeSplitBar(fileName);
+ ol.writeSearchInfo();
ol.startContents();
@@ -3456,7 +3440,6 @@ static void writeIndex(OutputList &ol)
title = filterTitle(Doxygen::mainPage->title());
}
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
QCString indexName="index";
ol.startFile(indexName,0,title);
@@ -3476,10 +3459,8 @@ static void writeIndex(OutputList &ol)
ol.writeQuickLinks(TRUE,HLI_Main,0);
}
ol.endQuickIndices();
- if (generateTreeView)
- {
- ol.writeSplitBar(indexName);
- }
+ ol.writeSplitBar(indexName);
+ ol.writeSearchInfo();
bool headerWritten=FALSE;
if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty())
{
diff --git a/src/instdox.cpp b/src/instdox.cpp
deleted file mode 100644
index 56a3630..0000000
--- a/src/instdox.cpp
+++ /dev/null
@@ -1,180 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2011 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.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "qtbc.h"
-#include <qfile.h>
-#include <qfileinfo.h>
-
-#include "instdox.h"
-#include "doxygen.h"
-#include "config.h"
-#include "message.h"
-
-void writeInstallScript()
-{
- QCString fileName=Config_getString("HTML_OUTPUT")+"/installdox";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << "#!" << Config_getString("PERL_PATH") << endl << endl << "%subst = ( ";
-
- char *s=Config_getList("TAGFILES").first();
- while (s)
- {
- QCString tagLine=s;
- QCString fileName;
- int eqPos = tagLine.find('=');
- if (eqPos!=-1) // strip destination part
- {
- fileName = tagLine.left(eqPos).stripWhiteSpace();
- }
- else
- {
- fileName = tagLine;
- }
- QFileInfo fi(fileName);
- t << "\"" << fi.fileName() << "\", \"\"";
- s=Config_getList("TAGFILES").next();
- if (s) t << ", ";
- }
-
- t << ");\n";
- t << "$quiet = 0;\n";
- t << "\n";
- t << "while ( @ARGV ) {\n";
- t << " $_ = shift @ARGV;\n";
- t << " if ( s/^-// ) {\n";
- t << " if ( /^l(.*)/ ) {\n";
- t << " $v = ($1 eq \"\") ? shift @ARGV : $1;\n";
- t << " ($v =~ /\\/$/) || ($v .= \"/\");\n";
- t << " $_ = $v;\n";
- t << " if ( /(.+)\\@(.+)/ ) {\n";
- t << " if ( exists $subst{$1} ) {\n";
- t << " $subst{$1} = $2;\n";
- t << " } else {\n";
- t << " print STDERR \"Unknown tag file $1 given with option -l\\n\";\n";
- t << " &usage();\n";
- t << " }\n";
- t << " } else {\n";
- t << " print STDERR \"Argument $_ is invalid for option -l\\n\";\n";
- t << " &usage();\n";
- t << " }\n";
- t << " }\n";
- t << " elsif ( /^q/ ) {\n";
- t << " $quiet = 1;\n";
- t << " }\n";
- t << " elsif ( /^\\?|^h/ ) {\n";
- t << " &usage();\n";
- t << " }\n";
- t << " else {\n";
- t << " print STDERR \"Illegal option -$_\\n\";\n";
- t << " &usage();\n";
- t << " }\n";
- t << " }\n";
- t << " else {\n";
- t << " push (@files, $_ );\n";
- t << " }\n";
- t << "}\n";
- t << "\n";
- t << "foreach $sub (keys %subst)\n";
- t << "{\n";
- t << " if ( $subst{$sub} eq \"\" ) \n";
- t << " {\n";
- t << " print STDERR \"No substitute given for tag file `$sub'\\n\";\n";
- t << " &usage();\n";
- t << " }\n";
- t << " elsif ( ! $quiet && $sub ne \"_doc\" && $sub ne \"_cgi\" )\n";
- t << " {\n";
- t << " print \"Substituting $subst{$sub} for each occurrence of tag file $sub\\n\"; \n";
- t << " }\n";
- t << "}\n";
- t << "\n";
- t << "if ( ! @files ) {\n";
- t << " if (opendir(D,\".\")) {\n";
- t << " foreach $file ( readdir(D) ) {\n";
- t << " $match = \"" << Config_getString("HTML_FILE_EXTENSION") << "\";\n";
- t << " next if ( $file =~ /^\\.\\.?$/ );\n";
- t << " ($file =~ /$match/) && (push @files, $file);\n";
- t << " ($file =~ /\\.svg/) && (push @files, $file);\n";
- t << " ($file =~ \"navtree.js\") && (push @files, $file);\n";
- t << " }\n";
- t << " closedir(D);\n";
- t << " }\n";
- t << "}\n";
- t << "\n";
- t << "if ( ! @files ) {\n";
- t << " print STDERR \"Warning: No input files given and none found!\\n\";\n";
- t << "}\n";
- t << "\n";
- t << "foreach $f (@files)\n";
- t << "{\n";
- t << " if ( ! $quiet ) {\n";
- t << " print \"Editing: $f...\\n\";\n";
- t << " }\n";
- t << " $oldf = $f;\n";
- t << " $f .= \".bak\";\n";
- t << " unless (rename $oldf,$f) {\n";
- t << " print STDERR \"Error: cannot rename file $oldf\\n\";\n";
- t << " exit 1;\n";
- t << " }\n";
- t << " if (open(F,\"<$f\")) {\n";
- t << " unless (open(G,\">$oldf\")) {\n";
- t << " print STDERR \"Error: opening file $oldf for writing\\n\";\n";
- t << " exit 1;\n";
- t << " }\n";
- t << " if ($oldf ne \"tree.js\") {\n";
- t << " while (<F>) {\n";
- t << " s/doxygen\\=\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\" (xlink:href|href|src)=\\\"\\2/doxygen\\=\\\"$1:$subst{$1}\\\" \\3=\\\"$subst{$1}/g;\n";
- t << " print G \"$_\";\n";
- t << " }\n";
- t << " }\n";
- t << " else {\n";
- t << " while (<F>) {\n";
- t << " s/\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\", \\\"\\2/\\\"$1:$subst{$1}\\\" ,\\\"$subst{$1}/g;\n";
- t << " print G \"$_\";\n";
- t << " }\n";
- t << " }\n";
- t << " } \n";
- t << " else {\n";
- t << " print STDERR \"Warning file $f does not exist\\n\";\n";
- t << " }\n";
- t << " unlink $f;\n";
- t << "}\n";
- t << "\n";
- t << "sub usage {\n";
- t << " print STDERR \"Usage: installdox [options] [html-file [html-file ...]]\\n\";\n";
- t << " print STDERR \"Options:\\n\";\n";
- t << " print STDERR \" -l tagfile\\@linkName tag file + URL or directory \\n\";\n";
- t << " print STDERR \" -q Quiet mode\\n\\n\";\n";
- t << " exit 1;\n";
- t << "}\n";
- }
- else
- {
- err("Error: Cannot open file %s for writing\n",fileName.data());
- }
- f.close();
- struct stat stat_struct;
- stat(fileName,&stat_struct);
-#if !defined(_WIN32)
- chmod(fileName,stat_struct.st_mode|S_IXUSR|S_IXGRP|S_IXOTH);
-#endif
-}
diff --git a/src/instdox.h b/src/instdox.h
deleted file mode 100644
index 55c1864..0000000
--- a/src/instdox.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2011 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.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef INSTDOX_H
-#define INSTDOX_H
-
-extern void writeInstallScript();
-
-#endif
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 8d84c4d..dc3b4e7 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -1367,6 +1367,18 @@ void LatexDocVisitor::visitPost(DocText *)
{
}
+void LatexDocVisitor::visitPre(DocHtmlBlockQuote *)
+{
+ if (m_hide) return;
+ m_t << "\\begin{quotation}" << endl;
+}
+
+void LatexDocVisitor::visitPost(DocHtmlBlockQuote *)
+{
+ if (m_hide) return;
+ m_t << "\\end{quotation}" << endl;
+}
+
void LatexDocVisitor::filter(const char *str)
{
filterLatexString(m_t,str,m_insideTabbing,m_insidePre,m_insideItem);
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 359b9f7..fc0218e 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -117,8 +117,6 @@ class LatexDocVisitor : public DocVisitor
void visitPost(DocSecRefItem *);
void visitPre(DocSecRefList *);
void visitPost(DocSecRefList *);
- //void visitPre(DocLanguage *);
- //void visitPost(DocLanguage *);
void visitPre(DocParamSect *);
void visitPost(DocParamSect *);
void visitPre(DocParamList *);
@@ -131,6 +129,8 @@ class LatexDocVisitor : public DocVisitor
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
+ void visitPre(DocHtmlBlockQuote *);
+ void visitPost(DocHtmlBlockQuote *);
private:
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 66302b3..6f92f79 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -158,7 +158,7 @@ void LatexGenerator::init()
<< "pdf: refman.pdf" << endl << endl;
t << "refman.pdf: clean refman.tex" << endl;
t << "\tpdflatex refman" << endl;
- t << "\t" << mkidx_command << " refman.tex" << endl;
+ t << "\t" << mkidx_command << " refman.idx" << endl;
if (generateBib)
{
t << "\tbibtex refman" << endl;
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 626b7d9..1446a17 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -64,7 +64,6 @@ HEADERS = bufstr.h \
image.h \
index.h \
index_xsd.h \
- instdox.h \
jquery_js.h \
jquery_ui_js.h \
sizzle_js.h \
@@ -78,6 +77,7 @@ HEADERS = bufstr.h \
logos.h \
mandocvisitor.h \
mangen.h \
+ markdown.h \
marshal.h \
memberdef.h \
membergroup.h \
@@ -208,7 +208,6 @@ SOURCES = ce_lex.cpp \
indexlog.cpp \
image.cpp \
index.cpp \
- instdox.cpp \
language.cpp \
latexdocvisitor.cpp \
latexgen.cpp \
@@ -217,6 +216,7 @@ SOURCES = ce_lex.cpp \
logos.cpp \
mandocvisitor.cpp \
mangen.cpp \
+ markdown.cpp \
marshal.cpp \
memberdef.cpp \
membergroup.cpp \
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index 541a5e1..9a630b7 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -955,6 +955,27 @@ void ManDocVisitor::visitPost(DocText *)
{
}
+void ManDocVisitor::visitPre(DocHtmlBlockQuote *)
+{
+ if (m_hide) return;
+ if (!m_firstCol)
+ {
+ m_t << endl;
+ m_t << ".PP" << endl;
+ }
+ m_t << ".RS 4" << endl; // TODO: add support for nested block quotes
+}
+
+void ManDocVisitor::visitPost(DocHtmlBlockQuote *)
+{
+ if (m_hide) return;
+ if (!m_firstCol) m_t << endl;
+ m_t << ".RE" << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
+}
+
+
void ManDocVisitor::filter(const char *str)
{
if (str)
diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h
index 929780e..14559d5 100644
--- a/src/mandocvisitor.h
+++ b/src/mandocvisitor.h
@@ -129,6 +129,8 @@ class ManDocVisitor : public DocVisitor
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
+ void visitPre(DocHtmlBlockQuote *);
+ void visitPost(DocHtmlBlockQuote *);
private:
diff --git a/src/markdown.cpp b/src/markdown.cpp
new file mode 100644
index 0000000..42b5bee
--- /dev/null
+++ b/src/markdown.cpp
@@ -0,0 +1,1890 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2012 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.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+/* Note: part of the code below is inspired by libupskirt written by
+ * Natacha Porté. Original copyright message follows:
+ *
+ * Copyright (c) 2008, Natacha Porté
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <qglobal.h>
+#include <qregexp.h>
+#include <qfileinfo.h>
+#include <qdict.h>
+
+#include "markdown.h"
+#include "growbuf.h"
+#include "debug.h"
+#include "util.h"
+#include "doxygen.h"
+#include "commentscan.h"
+
+//----------
+
+struct LinkRef
+{
+ LinkRef(const QCString &l,const QCString &t) : link(l), title(t) {}
+ QCString link;
+ QCString title;
+};
+
+typedef int (*action_t)(GrowBuf &out,const char *data,int offset,int size);
+
+enum Alignment { AlignNone, AlignLeft, AlignCenter, AlignRight };
+
+
+//----------
+
+static QDict<LinkRef> g_linkRefs(257);
+static action_t g_actions[256];
+//static QDict<void> g_htmlBlockTags(17);
+
+//----------
+
+const int codeBlockIndent = 4;
+
+static void processInline(GrowBuf &out,const char *data,int size);
+
+// escape characters that have a special meaning later on.
+static QCString escapeSpecialChars(const QCString &s)
+{
+ if (s.isEmpty()) return "";
+ GrowBuf growBuf;
+ const char *p=s;
+ char c;
+ while ((c=*p++))
+ {
+ switch (c)
+ {
+ case '<': growBuf.addStr("\\<"); break;
+ case '>': growBuf.addStr("\\>"); break;
+ case '\\': growBuf.addStr("\\\\"); break;
+ case '@': growBuf.addStr("\\@"); break;
+ default: growBuf.addChar(c); break;
+ }
+ }
+ growBuf.addChar(0);
+ return growBuf.get();
+}
+
+static void convertStringFragment(QCString &result,const char *data,int size)
+{
+ if (size<0) size=0;
+ result.resize(size+1);
+ memcpy(result.data(),data,size);
+ result.at(size)='\0';
+}
+
+/** helper function to convert presence of left and/or right alignment markers
+ * to a alignment value
+ */
+static Alignment markersToAlignment(bool leftMarker,bool rightMarker)
+{
+ //printf("markerToAlignment(%d,%d)\n",leftMarker,rightMarker);
+ if (leftMarker && rightMarker)
+ {
+ return AlignCenter;
+ }
+ else if (leftMarker)
+ {
+ return AlignLeft;
+ }
+ else if (rightMarker)
+ {
+ return AlignRight;
+ }
+ else
+ {
+ return AlignNone;
+ }
+}
+
+
+// Check if data contains a block command. If so returned the command
+// that ends the block. If not an empty string is returned.
+// Note When offset>0 character position -1 will be inspected.
+//
+// Checks for and skip the following block commands:
+// {@code .. { .. } .. }
+// \dot .. \enddot
+// \code .. \endcode
+// \msc .. \endmsc
+// \f$..\f$
+// \f[..\f]
+// \f{..\f}
+// \verbatim..\endverbatim
+// \latexonly..\endlatexonly
+// \htmlonly..\endhtmlonly
+// \xmlonly..\endxmlonly
+// \rtfonly..\endrtfonly
+// \manonly..\endmanonly
+static QCString isBlockCommand(const char *data,int offset,int size)
+{
+ bool openBracket = offset>0 && data[-1]=='{';
+ bool isEscaped = offset>0 && (data[-1]=='\\' || data[-1]=='@');
+ if (isEscaped) return QCString();
+
+ int end=1;
+ while (end<size && (data[end]>='a' && data[end]<='z')) end++;
+ if (end==1) return QCString();
+ QCString blockName;
+ convertStringFragment(blockName,data+1,end-1);
+ if (blockName=="code" && openBracket)
+ {
+ return "}";
+ }
+ else if (blockName=="dot" ||
+ blockName=="code" ||
+ blockName=="msc" ||
+ blockName=="verbatim" ||
+ blockName=="latexonly" ||
+ blockName=="htmlonly" ||
+ blockName=="xmlonly" ||
+ blockName=="rtfonly" ||
+ blockName=="manonly"
+ )
+ {
+ return "end"+blockName;
+ }
+ else if (blockName=="f" && end<size)
+ {
+ if (data[end]=='$')
+ {
+ return "f$";
+ }
+ else if (data[end]=='[')
+ {
+ return "f]";
+ }
+ else if (data[end]=='}')
+ {
+ return "f}";
+ }
+ }
+ return QCString();
+}
+
+
+/** looks for the next emph char, skipping other constructs, and
+ * stopping when either it is found, or we are at the end of a paragraph.
+ */
+static int findEmphasisChar(const char *data, int size, char c)
+{
+ int i = 1;
+
+ while (i<size)
+ {
+ while (i<size && data[i]!=c && data[i]!='`' &&
+ data[i]!='\\' && data[i]!='@' &&
+ data[i]!='\n') i++;
+ //printf("findEmphasisChar: data=[%s] i=%d c=%c\n",data,i,data[i]);
+
+ if (data[i] == c)
+ {
+ if (i<size-1 && ((data[i+1]>='a' && data[i+1]<='z') ||
+ (data[i+1]>='A' && data[i+1]<='Z') ||
+ (data[i+1]>='0' && data[i+1]<='9')
+ )
+ ) // to prevent touching some_underscore_identifier
+ {
+ i++;
+ continue;
+ }
+ return i; // found it
+ }
+
+ // not counting escaped chars
+ if (i>0 && (data[i-1]=='\\' || data[i-1]=='@'))
+ {
+ i++;
+ continue;
+ }
+
+ // skipping a code span
+ if (data[i]=='`')
+ {
+ int snb=0;
+ while (i<size && data[i]=='`') snb++,i++;
+
+ // find same pattern to end the span
+ int enb=0;
+ while (i<size && enb<snb)
+ {
+ if (data[i]=='`') enb++;
+ if (snb==1 && data[i]=='\'') break; // ` ended by '
+ i++;
+ }
+ }
+ else if (data[i]=='@' || data[i]=='\\')
+ { // skip over blocks that should not be processed
+ QCString endBlockName = isBlockCommand(data+i,i,size-i);
+ if (!endBlockName.isEmpty())
+ {
+ i++;
+ int l = endBlockName.length();
+ while (i<size-l-1)
+ {
+ if ((data[i]=='\\' || data[i]=='@') && // command
+ data[i-1]!='\\' && data[i-1]!='@') // not escaped
+ {
+ if (strncmp(&data[i+1],endBlockName,l)==0)
+ {
+ break;
+ }
+ }
+ i++;
+ }
+ }
+ else
+ {
+ i++;
+ }
+ }
+ else if (data[i]=='\n') // end * or _ at paragraph boundary
+ {
+ i++;
+ while (i<size && data[i]==' ') i++;
+ if (i>=size || data[i]=='\n') return 0; // empty line -> paragraph
+ }
+ else // should not get here!
+ {
+ i++;
+ }
+
+ }
+ return 0;
+}
+
+/** process single emphasis */
+static int processEmphasis1(GrowBuf &out, const char *data, int size, char c)
+{
+ int i = 0, len;
+
+ /* skipping one symbol if coming from emph3 */
+ if (size>1 && data[0]==c && data[1]==c) { i=1; }
+
+ while (i<size)
+ {
+ len = findEmphasisChar(data+i, size-i, c);
+ if (len==0) return 0;
+ i+=len;
+ if (i>=size) return 0;
+
+ if (i+1<size && data[i+1]==c)
+ {
+ i++;
+ continue;
+ }
+ if (data[i]==c && data[i-1]!=' ' && data[i-1]!='\n')
+ {
+ out.addStr("<em>");
+ processInline(out,data,i);
+ out.addStr("</em>");
+ return i+1;
+ }
+ }
+ return 0;
+}
+
+/** process double emphasis */
+static int processEmphasis2(GrowBuf &out, const char *data, int size, char c)
+{
+ int i = 0, len;
+
+ while (i<size)
+ {
+ len = findEmphasisChar(data+i, size-i, c);
+ if (len==0)
+ {
+ return 0;
+ }
+ i += len;
+ if (i+1<size && data[i]==c && data[i+1]==c && i && data[i-1]!=' ' &&
+ data[i-1]!='\n'
+ )
+ {
+ out.addStr("<strong>");
+ processInline(out,data,i);
+ out.addStr("</strong>");
+ return i + 2;
+ }
+ i++;
+ }
+ return 0;
+}
+
+/** Parsing single emphase.
+ * Finds the first closing tag, and delegates to the other emph
+ */
+static int processEmphasis3(GrowBuf &out, const char *data, int size, char c)
+{
+ int i = 0, len;
+
+ while (i<size)
+ {
+ len = findEmphasisChar(data+i, size-i, c);
+ if (len==0)
+ {
+ return 0;
+ }
+ i+=len;
+
+ /* skip whitespace preceded symbols */
+ if (data[i]!=c || data[i-1]==' ' || data[i-1]=='\n')
+ {
+ continue;
+ }
+
+ if (i+2<size && data[i+1]==c && data[i+2]==c)
+ {
+ out.addStr("<em><strong>");
+ processInline(out,data,i);
+ out.addStr("</strong></em>");
+ return i+3;
+ }
+ else if (i+1<size && data[i+1]==c)
+ {
+ // double symbol found, handing over to emph1
+ len = processEmphasis1(out, data-2, size+2, c);
+ if (len==0)
+ {
+ return 0;
+ }
+ else
+ {
+ return len - 2;
+ }
+ }
+ else
+ {
+ // single symbol found, handing over to emph2
+ len = processEmphasis2(out, data-1, size+1, c);
+ if (len==0)
+ {
+ return 0;
+ }
+ else
+ {
+ return len - 1;
+ }
+ }
+ }
+ return 0;
+}
+
+static int processEmphasis(GrowBuf &out,const char *data,int,int size)
+{
+ char c = data[0];
+ size_t ret;
+ if (size>2 && data[1]!=c)
+ {
+ // whitespace cannot follow an opening emphasis
+ if (data[1]==' ' || data[1]=='\n' ||
+ (ret = processEmphasis1(out, data+1, size-1, c)) == 0)
+ {
+ return 0;
+ }
+ return ret+1;
+ }
+ if (size>3 && data[1]==c && data[2]!=c)
+ {
+ if (data[2]==' ' || data[2]=='\n' ||
+ (ret = processEmphasis2(out, data+2, size-2, c)) == 0)
+ {
+ return 0;
+ }
+ return ret+2;
+ }
+ if (size>4 && data[1]==c && data[2]==c && data[3]!=c)
+ {
+ if (data[3]==' ' || data[3]=='\n' ||
+ (ret = processEmphasis3(out, data+3, size-3, c)) == 0)
+ {
+ return 0;
+ }
+ return ret+3;
+ }
+ return 0;
+}
+
+static int processLink(GrowBuf &out,const char *data,int,int size)
+{
+ QCString content;
+ QCString link;
+ QCString title;
+ int contentStart,contentEnd,linkStart,titleStart,titleEnd;
+ bool isImageLink = FALSE;
+ int i=1;
+ if (data[0]=='!')
+ {
+ isImageLink = TRUE;
+ if (size<2 || data[1]!='[')
+ {
+ return 0;
+ }
+ i++;
+ }
+ contentStart=i;
+ int level=1;
+ int nl=0;
+ // find the matching ]
+ while (i<size)
+ {
+ if (data[i-1]=='\\') // skip escaped characters
+ {
+ }
+ else if (data[i]=='[')
+ {
+ level++;
+ }
+ else if (data[i]==']')
+ {
+ level--;
+ if (level<=0) break;
+ }
+ else if (data[i]=='\n')
+ {
+ nl++;
+ if (nl>1) return 0; // only allow one newline in the content
+ }
+ i++;
+ }
+ if (i>=size) return 0; // premature end of comment -> no link
+ contentEnd=i;
+ convertStringFragment(content,data+contentStart,contentEnd-contentStart);
+ //printf("processLink: content={%s}\n",content.data());
+ if (content.isEmpty()) return 0; // no link text
+ i++; // skip over ]
+
+ // skip whitespace
+ while (i<size && data[i]==' ') i++;
+ if (i<size && data[i]=='\n') // one newline allowed here
+ {
+ i++;
+ // skip more whitespace
+ while (i<size && data[i]==' ') i++;
+ }
+
+ bool explicitTitle=FALSE;
+ if (i<size && data[i]=='(') // inline link
+ {
+ i++;
+ while (i<size && data[i]==' ') i++;
+ if (i<size && data[i]=='<') i++;
+ linkStart=i;
+ nl=0;
+ while (i<size && data[i]!='\'' && data[i]!='"' && data[i]!=')')
+ {
+ if (data[i]=='\n')
+ {
+ nl++;
+ if (nl>1) return 0;
+ }
+ i++;
+ }
+ if (i>=size || data[i]=='\n') return 0;
+ convertStringFragment(link,data+linkStart,i-linkStart);
+ link = link.stripWhiteSpace();
+ //printf("processLink: link={%s}\n",link.data());
+ if (link.isEmpty()) return 0;
+ if (link.at(link.length()-1)=='>') link=link.left(link.length()-1);
+
+ // optional title
+ if (data[i]=='\'' || data[i]=='"')
+ {
+ char c = data[i];
+ i++;
+ titleStart=i;
+ nl=0;
+ while (i<size && data[i]!=')')
+ {
+ if (data[i]=='\n')
+ {
+ if (nl>1) return 0;
+ nl++;
+ }
+ i++;
+ }
+ if (i>=size)
+ {
+ return 0;
+ }
+ titleEnd = i-1;
+ // search back for closing marker
+ while (titleEnd>titleStart && data[titleEnd]==' ') titleEnd--;
+ if (data[titleEnd]==c) // found it
+ {
+ convertStringFragment(title,data+titleStart,titleEnd-titleStart);
+ //printf("processLink: title={%s}\n",title.data());
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ i++;
+ }
+ else if (i<size && data[i]=='[') // reference link
+ {
+ i++;
+ linkStart=i;
+ nl=0;
+ // find matching ]
+ while (i<size && data[i]!=']')
+ {
+ if (data[i]=='\n')
+ {
+ nl++;
+ if (nl>1) return 0;
+ }
+ i++;
+ }
+ if (i>=size) return 0;
+ // extract link
+ convertStringFragment(link,data+linkStart,i-linkStart);
+ //printf("processLink: link={%s}\n",link.data());
+ link = link.stripWhiteSpace();
+ if (link.isEmpty()) // shortcut link
+ {
+ link=content;
+ }
+ // lookup reference
+ LinkRef *lr = g_linkRefs.find(link.lower());
+ if (lr) // found it
+ {
+ link = lr->link;
+ title = lr->title;
+ //printf("processLink: ref: link={%s} title={%s}\n",link.data(),title.data());
+ }
+ else // reference not found!
+ {
+ //printf("processLink: ref {%s} do not exist\n",link.lower().data());
+ return 0;
+ }
+ i++;
+ }
+ else if (i<size && data[i]!=':') // minimal link ref notation [some id]
+ {
+ LinkRef *lr = g_linkRefs.find(content.lower());
+ //printf("processLink: minimal link {%s} lr=%p",content.data(),lr);
+ if (lr) // found it
+ {
+ link = lr->link;
+ title = lr->title;
+ explicitTitle=TRUE;
+ i=contentEnd;
+ }
+ else
+ {
+ return 0;
+ }
+ i++;
+ }
+ else
+ {
+ return 0;
+ }
+ if (isImageLink) // TODO: use @image?
+ {
+ out.addStr("<img src=\"");
+ out.addStr(link);
+ out.addStr("\" alt=\"");
+ out.addStr(content);
+ out.addStr("\"");
+ if (!title.isEmpty())
+ {
+ out.addStr(" title=\"");
+ out.addStr(substitute(title.simplifyWhiteSpace(),"\"","&quot;"));
+ out.addStr("\"");
+ }
+ out.addStr("/>");
+ }
+ else
+ {
+ static QRegExp re("^[@\\]ref ");
+ if (link.find('/')!=-1) // file/url link
+ {
+ out.addStr("<a href=\"");
+ out.addStr(link);
+ out.addStr("\"");
+ if (!title.isEmpty())
+ {
+ out.addStr(" title=\"");
+ out.addStr(substitute(title.simplifyWhiteSpace(),"\"","&quot;"));
+ out.addStr("\"");
+ }
+ out.addStr(">");
+ out.addStr(content.simplifyWhiteSpace());
+ out.addStr("</a>");
+ }
+ else if (link.find("@ref ")!=-1 || link.find("\\ref ")!=-1)
+ // assume doxygen symbol link
+ {
+ out.addStr(link);
+ out.addStr(" \"");
+ if (explicitTitle && !title.isEmpty())
+ {
+ out.addStr(title);
+ }
+ else
+ {
+ out.addStr(content);
+ }
+ out.addStr("\"");
+ }
+ else // avoid link to F[x](y)
+ {
+ //printf("no link for '%s'\n",link.data());
+ return 0;
+ }
+ }
+ return i;
+}
+
+/** '`' parsing a code span (assuming codespan != 0) */
+static int processCodeSpan(GrowBuf &out, const char *data, int /*offset*/, int size)
+{
+ int end, nb = 0, i, f_begin, f_end;
+
+ /* counting the number of backticks in the delimiter */
+ while (nb<size && data[nb]=='`')
+ {
+ nb++;
+ }
+
+ /* finding the next delimiter */
+ i = 0;
+ int nl=0;
+ for (end=nb; end<size && i<nb && nl<2; end++)
+ {
+ if (data[end]=='`')
+ {
+ i++;
+ }
+ else if (data[end]=='\n')
+ {
+ i=0;
+ nl++;
+ }
+ else
+ {
+ i=0;
+ }
+ }
+ if (i < nb && end >= size)
+ {
+ return 0; // no matching delimiter
+ }
+ if (nl==2) // too many newlines inside the span
+ {
+ return 0;
+ }
+
+ // trimming outside whitespaces
+ f_begin = nb;
+ while (f_begin < end && data[f_begin]==' ')
+ {
+ f_begin++;
+ }
+ f_end = end - nb;
+ while (f_end > nb && data[f_end-1]==' ')
+ {
+ f_end--;
+ }
+
+ if (nb==1) // check for closing ' followed by space within f_begin..f_end
+ {
+ i=f_begin;
+ while (i<f_end-1)
+ {
+ if (data[i]=='\'' && !((data[i+1]>='a' && data[i+1]<='z') ||
+ (data[i+1]>='A' && data[i+1]<='Z') ||
+ (data[i+1]>='0' && data[i+1]<='9')
+ )) // reject `some word' and not `it's cool`
+ {
+ return 0;
+ }
+ i++;
+ }
+ }
+ printf("found code span '%s'\n",QCString(data+f_begin).left(f_end-f_begin).data());
+
+ /* real code span */
+ if (f_begin < f_end)
+ {
+ QCString codeFragment;
+ convertStringFragment(codeFragment,data+f_begin,f_end-f_begin);
+ out.addStr("<code>");
+ //out.addStr(convertToHtml(codeFragment,TRUE));
+ out.addStr(escapeSpecialChars(codeFragment));
+ out.addStr("</code>");
+ }
+ return end;
+}
+
+
+static int processSpecialCommand(GrowBuf &out, const char *data, int offset, int size)
+{
+ int i=1;
+ QCString endBlockName = isBlockCommand(data,offset,size);
+ if (!endBlockName.isEmpty())
+ {
+ int l = endBlockName.length();
+ while (i<size-l-1)
+ {
+ if ((data[i]=='\\' || data[i]=='@') && // command
+ data[i-1]!='\\' && data[i-1]!='@') // not escaped
+ {
+ if (strncmp(&data[i+1],endBlockName,l)==0)
+ {
+ //printf("found end at %d\n",i);
+ out.addStr(data,i+1+l);
+ return i+1+l;
+ }
+ }
+ i++;
+ }
+ }
+ if (size>1)
+ {
+ char c=data[1];
+ if (c=='[' || c==']' || c=='*' || c=='_' || c=='+' || c=='-' ||
+ c=='!' || c=='(' || c==')' || c=='.' || c=='`')
+ {
+ out.addStr(&data[1],1);
+ return 2;
+ }
+ }
+ return 0;
+}
+
+#if 0
+static int processHtmlBlock(GrowBuf &out, const char *data, int offset, int size)
+{
+ if (size<2 || data[0]!='<') return 0;
+ int i=1;
+ while (i<size && ((data[i]>='0' && data[i]<='9') ||
+ (data[i]>='A' && data[i]<='Z') ||
+ (data[i]>='a' && data[i]<='z'))) i++;
+ if (i<=1 || i>=size) return 0;
+ QCString tagName;
+ convertStringFragment(tagName,data+1,i-1);
+ printf("found html tag '%s'\n",tagName.data());
+ if (g_htmlBlockTags.find(tagName)!=0)
+ {
+ printf("found block tag\n");
+
+ // search for end of the block...
+ }
+ return 0;
+}
+#endif
+
+static void processInline(GrowBuf &out,const char *data,int size)
+{
+ int i=0, end=0;
+ action_t action;
+ while (i<size)
+ {
+ while (end<size && ((action=g_actions[(uchar)data[end]])==0)) end++;
+ out.addStr(data+i,end-i);
+ if (end>=size) break;
+ i=end;
+ end = action(out,data+i,i,size-i);
+ if (!end)
+ {
+ end=i+1;
+ }
+ else
+ {
+ i+=end;
+ end=i;
+ }
+ }
+}
+
+/** returns whether the line is a setext-style hdr underline */
+static int isHeaderline(const char *data, int size)
+{
+ int i = 0;
+ while (i<size && data[i]==' ') i++;
+
+ // test of level 1 header
+ if (data[i]=='=')
+ {
+ while (i<size && data[i]=='=') i++;
+ while (i<size && data[i]==' ') i++;
+ return (i>=size || data[i]=='\n') ? 1 : 0;
+ }
+ // test of level 2 header
+ if (data[i]=='-')
+ {
+ while (i<size && data[i]=='-') i++;
+ while (i<size && data[i]==' ') i++;
+ return (i>=size || data[i]=='\n') ? 2 : 0;
+ }
+ return 0;
+}
+
+/** returns TRUE if this line starts a block quote */
+static bool isBlockQuote(const char *data,int size,int indent)
+{
+ int i = 0;
+ while (i<size && data[i]==' ') i++;
+ return i<size && data[i]=='>' && i<indent+codeBlockIndent;
+}
+
+/** returns end of the link ref if this is indeed a link reference. */
+static int isLinkRef(const char *data,int size,
+ QCString &refid,QCString &link,QCString &title)
+{
+ //printf("isLinkRef data={%s}\n",data);
+ // format: start with [some text]:
+ int i = 0;
+ while (i<size && data[i]==' ') i++;
+ if (i>=size || data[i]!='[') return 0;
+ i++;
+ int refIdStart=i;
+ while (i<size && data[i]!='\n' && data[i]!=']') i++;
+ if (i>=size || data[i]!=']') return 0;
+ convertStringFragment(refid,data+refIdStart,i-refIdStart);
+ if (refid.isEmpty()) return 0;
+ //printf(" isLinkRef: found refid='%s'\n",refid.data());
+ i++;
+ if (i>=size || data[i]!=':') return 0;
+ i++;
+
+ // format: whitespace* \n? whitespace* (<url> | url)
+ while (i<size && data[i]==' ') i++;
+ if (i<size && data[i]=='\n')
+ {
+ i++;
+ while (i<size && data[i]==' ') i++;
+ }
+ if (i>=size) return 0;
+
+ if (i<size && data[i]=='<') i++;
+ int linkStart=i;
+ while (i<size && data[i]!=' ' && data[i]!='\n') i++;
+ int linkEnd=i;
+ if (i<size && data[i]=='>') i++;
+ if (linkStart==linkEnd) return 0; // empty link
+ convertStringFragment(link,data+linkStart,linkEnd-linkStart);
+ //printf(" isLinkRef: found link='%s'\n",link.data());
+ if (link=="@ref" || link=="\\ref")
+ {
+ int argStart=i;
+ while (i<size && data[i]!='\n' && data[i]!='"') i++;
+ QCString refArg;
+ convertStringFragment(refArg,data+argStart,i-argStart);
+ link+=refArg;
+ }
+
+ title.resize(0);
+
+ // format: (whitespace* \n? whitespace* ( 'title' | "title" | (title) ))?
+ int eol=0;
+ while (i<size && data[i]==' ') i++;
+ if (i<size && data[i]=='\n')
+ {
+ i++;
+ eol=i;
+ while (i<size && data[i]==' ') i++;
+ }
+ if (i>=size)
+ {
+ //printf("end of isLinkRef while looking for title! i=%d\n",i);
+ return i; // end of buffer while looking for the optional title
+ }
+
+ char c = data[i];
+ if (c=='\'' || c=='"' || c=='(') // optional title present?
+ {
+ //printf(" start of title found! char='%c'\n",c);
+ i++;
+ if (c=='(') c=')'; // replace c by end character
+ int titleStart=i;
+ // search for end of the line
+ while (i<size && data[i]!='\n') i++;
+
+ // search back to matching character
+ int end=i-1;
+ while (end>titleStart && data[end]!=c) end--;
+ if (end>titleStart)
+ {
+ convertStringFragment(title,data+titleStart,end-titleStart);
+ }
+ //printf(" title found: '%s'\n",title.data());
+ }
+ while (i<size && data[i]==' ') i++;
+ //printf("end of isLinkRef: i=%d size=%d data[i]='%c' eol=%d\n",
+ // i,size,data[i],eol);
+ if (i>=size) return i; // end of buffer while ref id was found
+ else if (data[i]=='\n') return i+1; // end of line while ref id was found
+ else if (eol) return eol; // no optional title found
+ return 0; // invalid link ref
+}
+
+static int isHRuler(const char *data,int size)
+{
+ int i=0;
+ if (size>0 && data[size-1]=='\n') size--; // ignore newline character
+ while (i<size && data[i]==' ') i++;
+ if (i>=size) return 0; // empty line
+ char c=data[i];
+ if (c!='*' && c!='-' && c!='_')
+ {
+ return 0; // not a hrule character
+ }
+ int n=0;
+ while (i<size)
+ {
+ if (data[i]==c)
+ {
+ n++; // count rule character
+ }
+ else if (data[i]!=' ')
+ {
+ return 0; // line contains non hruler characters
+ }
+ i++;
+ }
+ return n>=3; // at least 3 characters needed for a hruler
+}
+
+static QCString extractTitleId(QCString &title)
+{
+ static QRegExp r1("^[a-z_A-Z][a-z_A-Z0-9\\-]*:");
+ static QRegExp r2("\\{#[a-z_A-Z][a-z_A-Z0-9\\-]*\\}$");
+ int l=0;
+ int i = r2.match(title,0,&l);
+ if (i!=-1) // found {#id} style id
+ {
+ QCString id = title.mid(i+2,l-3);
+ title = title.left(i)+title.mid(i+l);
+ //printf("found id='%s' title='%s'\n",id.data(),title.data());
+ return id;
+ }
+ i = r1.match(title,0,&l);
+ if (i!=-1) // found id: style id
+ {
+ QCString id = title.mid(i,l-1);
+ title = title.left(i)+title.mid(i+l);
+ //printf("found id='%s' title='%s'\n",id.data(),title.data());
+ return id;
+ }
+ //printf("no id found in title '%s'\n",title.data());
+ return "";
+}
+
+
+static int isAtxHeader(const char *data,int size,QCString &header)
+{
+ int i = 0, end;
+ int level = 0;
+
+ // find start of header text and determine heading level
+ while (i<size && data[i]==' ') i++;
+ if (i>=size || data[i]!='#') return 0;
+ while (i<size && level<6 && data[i]=='#') i++,level++;
+ while (i<size && data[i]==' ') i++;
+
+ // find end of header text
+ end=i;
+ while (end<size && data[end]!='\n') end++;
+ while (end>i && (data[end-1]=='#' || data[end-1]==' ')) end--;
+
+ // store result
+ convertStringFragment(header,data+i,end-i);
+
+ return level;
+}
+
+static int isEmptyLine(const char *data,int size)
+{
+ int i=0;
+ while (i<size)
+ {
+ if (data[i]=='\n') return TRUE;
+ if (data[i]!=' ') return FALSE;
+ i++;
+ }
+ return TRUE;
+}
+
+// compute the indent from the start of the input, excluding list markers
+// such as -, *, +, and 1.
+static int computeIndentExcludingListMarkers(const char *data,int size)
+{
+ int i=0;
+ int indent=0;
+ bool isDigit=FALSE;
+ bool listMarkerSkipped=FALSE;
+ while (i<size &&
+ (data[i]==' ' || // space
+ (!listMarkerSkipped && // first list marker
+ (data[i]=='+' || data[i]=='-' || data[i]=='*' || // unordered list char
+ (isDigit=(data[i]>='1' && data[i]<='9'))) // ordered list marker?
+ )
+ )
+ )
+ {
+ if (isDigit) // skip over ordered list marker '10. '
+ {
+ int j=i+1;
+ while (j<size && ((data[j]>='0' && data[j]<='9') || data[j]=='.'))
+ {
+ if (data[j]=='.') // should be end of the list marker
+ {
+ if (j<size-1 && data[j+1]==' ') // valid list marker
+ {
+ listMarkerSkipped=TRUE;
+ indent+=j+1-i;
+ i=j+1;
+ break;
+ }
+ else // not a list marker
+ {
+ break;
+ }
+ }
+ j++;
+ }
+ }
+ else if (data[i]!=' ' && i<size-1 && data[i+1]==' ')
+ {
+ listMarkerSkipped=TRUE; // only a single list marker is accepted
+ }
+ if (data[i]!=' ' && !listMarkerSkipped)
+ {
+ break;
+ }
+ indent++,i++;
+ }
+ //printf("{%s}->%d\n",QCString(data).left(size).data(),indent);
+ return indent;
+}
+
+static bool isCodeBlock(const char *data,int offset,int size,int &indent)
+{
+ //printf("<isCodeBlock(offset=%d,size=%d,indent=%d)\n",offset,size,indent);
+ // determine the indent of this line
+ int i=0;
+ int indent0=0;
+ while (i<size && data[i]==' ') indent0++,i++;
+
+ if (indent0<codeBlockIndent)
+ {
+ //printf(">isCodeBlock: line is not indented enough %d<4\n",indent0);
+ return FALSE;
+ }
+
+ i=offset;
+ int nl=0;
+ int nl_pos[3];
+ // search back 3 lines and remember the start of lines -1 and -2
+ while (i>0 && nl<3)
+ {
+ if (data[i-offset-1]=='\n') nl_pos[nl++]=i-offset;
+ i--;
+ }
+
+ // if there are only 2 preceding lines, then line -2 starts at -offset
+ if (i==0 && nl==2) nl_pos[nl++]=-offset;
+ //printf(" nl=%d\n",nl);
+
+ if (nl==3) // we have at least 2 preceding lines
+ {
+ //printf(" positions: nl_pos=[%d,%d,%d] line[-2]='%s' line[-1]='%s'\n",
+ // nl_pos[0],nl_pos[1],nl_pos[2],
+ // QCString(data+nl_pos[1]).left(nl_pos[0]-nl_pos[1]-1).data(),
+ // QCString(data+nl_pos[2]).left(nl_pos[1]-nl_pos[2]-1).data());
+
+ // check that line -1 is empty
+ if (!isEmptyLine(data+nl_pos[1],nl_pos[0]-nl_pos[1]-1))
+ {
+ return FALSE;
+ }
+
+ // determine the indent of line -2
+ indent=computeIndentExcludingListMarkers(data+nl_pos[2],nl_pos[1]-nl_pos[2]);
+
+ //printf(">isCodeBlock local_indent %d>=%d+4=%d\n",
+ // indent0,indent2,indent0>=indent2+4);
+ // if the difference is >4 spaces -> code block
+ return indent0>=indent+codeBlockIndent;
+ }
+ else // not enough lines to determine the relative indent, use global indent
+ {
+ // check that line -1 is empty
+ if (nl==1 && !isEmptyLine(data-offset,offset-1))
+ {
+ return FALSE;
+ }
+ //printf(">isCodeBlock global indent %d>=%d+4=%d\n",
+ // indent0,indent,indent0>=indent+4);
+ return indent0>=indent+codeBlockIndent;
+ }
+}
+
+/** Finds the location of the table's contains in the string \a data.
+ * Only one line will be inspected.
+ * @param[in] data pointer to the string buffer.
+ * @param[in] size the size of the buffer.
+ * @param[out] start offset of the first character of the table content
+ * @param[out] end offset of the last character of the table content
+ * @param[out] columns number of table columns found
+ * @returns The offset until the next line in the buffer.
+ */
+int findTableColumns(const char *data,int size,int &start,int &end,int &columns)
+{
+ int i=0;
+ int eol;
+ // find start character of the table line
+ while (i<size && data[i]==' ') i++;
+ if (i<size && data[i]=='|') i++; // leading | does not count
+ start = i;
+
+ // find end character of the table line
+ while (i<size && data[i]!='\n') i++;
+ eol=i+1;
+ i--;
+ while (i>0 && data[i]==' ') i--;
+ if (i>0 && data[i]=='|') i--; // trailing | does not count
+ end = i;
+
+ // count columns between start and end
+ columns=1;
+ if (end>start)
+ {
+ i=start;
+ while (i<=end)
+ {
+ if (data[i]=='|' && (i==0 || data[i-1]!='\\')) columns++;
+ i++;
+ }
+ }
+ //printf("findTableColumns(start=%d,end=%d,columns=%d) eol=%d\n",
+ // start,end,columns,eol);
+ return eol;
+}
+
+/** Returns TRUE iff data points to the start of a table block */
+static bool isTableBlock(const char *data,int size)
+{
+ int cc0,start,end;
+
+ // the first line should have at least two columns separated by '|'
+ int i = findTableColumns(data,size,start,end,cc0);
+ if (i>=size || cc0<2)
+ {
+ //printf("isTableBlock: no |'s in the header\n");
+ return FALSE;
+ }
+
+ int cc1;
+ int ret = findTableColumns(data+i,size-i,start,end,cc1);
+ int j=i+start;
+ // separator line should consist of |, - and : and spaces only
+ while (j<=end+i)
+ {
+ if (data[j]!=':' && data[j]!='-' && data[j]!='|' && data[j]!=' ')
+ {
+ //printf("isTableBlock: invalid character '%c'\n",data[j]);
+ return FALSE; // invalid characters in table separator
+ }
+ j++;
+ }
+ if (cc1!=cc0) // number of columns should be same as previous line
+ {
+ return FALSE;
+ }
+
+ i+=ret; // goto next line
+ int cc2;
+ ret = findTableColumns(data+i,size-i,start,end,cc2);
+
+ //printf("isTableBlock: %d\n",cc1==cc2);
+ return cc1==cc2;
+}
+
+static int writeTableBlock(GrowBuf &out,const char *data,int size)
+{
+ int i=0,j,k;
+ int columns,start,end,cc;
+
+ i = findTableColumns(data,size,start,end,columns);
+
+ out.addStr("<table>");
+
+ // write table header, in range [start..end]
+ out.addStr("<tr>");
+ j=start;
+ for (k=0;k<columns;k++)
+ {
+ out.addStr("<th>");
+ while (j<=end && (data[j]!='|' || (j>0 && data[j-1]=='\\')))
+ {
+ out.addChar(data[j++]);
+ }
+ j++;
+ }
+
+ // read cell alignments
+ int ret = findTableColumns(data+i,size-i,start,end,cc);
+ k=0;
+ Alignment *columnAlignment = new Alignment[columns];
+
+ bool leftMarker=FALSE,rightMarker=FALSE;
+ bool startFound=FALSE;
+ j=start+i;
+ while (j<=end+i)
+ {
+ if (!startFound)
+ {
+ if (data[j]==':') { leftMarker=TRUE; startFound=TRUE; }
+ if (data[j]=='-') startFound=TRUE;
+ //printf(" data[%d]=%c startFound=%d\n",j,data[j],startFound);
+ }
+ if (data[j]=='-') rightMarker=FALSE;
+ else if (data[j]==':') rightMarker=TRUE;
+ if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\')))
+ {
+ if (k<columns)
+ {
+ columnAlignment[k] = markersToAlignment(leftMarker,rightMarker);
+ //printf("column[%d] alignment=%d\n",k,columnAlignment[k]);
+ leftMarker=FALSE;
+ rightMarker=FALSE;
+ startFound=FALSE;
+ }
+ k++;
+ }
+ j++;
+ }
+ if (k<columns)
+ {
+ columnAlignment[k] = markersToAlignment(leftMarker,rightMarker);
+ //printf("column[%d] alignment=%d\n",k,columnAlignment[k]);
+ }
+ // proceed to next line
+ i+=ret;
+
+ // write table cells
+ while (i<size)
+ {
+ int ret = findTableColumns(data+i,size-i,start,end,cc);
+ //printf("findTableColumns cc=%d\n",cc);
+ if (cc!=columns) break; // end of table
+
+ out.addStr("<tr>");
+ j=start+i;
+ int columnStart=j;
+ k=0;
+ while (j<=end+i)
+ {
+ if (j==columnStart)
+ {
+ out.addStr("<td");
+ switch (columnAlignment[k])
+ {
+ case AlignLeft: out.addStr(" align=left"); break;
+ case AlignRight: out.addStr(" align=right"); break;
+ case AlignCenter: out.addStr(" align=center"); break;
+ case AlignNone: break;
+ }
+ out.addStr(">");
+ }
+ if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\')))
+ {
+ columnStart=j+1;
+ k++;
+ }
+ else
+ {
+ out.addChar(data[j]);
+ }
+ j++;
+ }
+ out.addChar('\n');
+
+ // proceed to next line
+ i+=ret;
+ }
+
+ out.addStr("</table>\n");
+
+ delete columnAlignment;
+ return i;
+}
+
+
+void writeOneLineHeaderOrRuler(GrowBuf &out,const char *data,int size)
+{
+ int level;
+ QCString header;
+ if (isHRuler(data,size))
+ {
+ out.addStr("<hr>\n");
+ }
+ else if ((level=isAtxHeader(data,size,header)))
+ {
+ QCString hTag;
+ hTag.sprintf("h%d",level);
+ out.addStr("<"+hTag+">");
+ out.addStr(header);
+ out.addStr("</"+hTag+">\n");
+ }
+ else // nothing interesting -> just output the line
+ {
+ out.addStr(data,size);
+ }
+}
+
+static int writeBlockQuote(GrowBuf &out,const char *data,int size)
+{
+ int l;
+ int i=0;
+ int curLevel=0;
+ int end=0;
+ while (i<size)
+ {
+ // find end of this line
+ end=i+1;
+ while (end<size && data[end-1]!='\n') end++;
+ int j=i;
+ int level=0;
+ int indent=i;
+ // compute the quoting level
+ while (j<end && (data[j]==' ' || data[j]=='>'))
+ {
+ if (data[j]=='>') { level++; indent=j+1; }
+ else if (j>0 && data[j-1]=='>') indent=j+1;
+ j++;
+ }
+ if (level>curLevel) // quote level increased => add start markers
+ {
+ for (l=curLevel;l<level;l++)
+ {
+ out.addStr("<blockquote>\n");
+ }
+ }
+ else if (level<curLevel) // quote level descreased => add end markers
+ {
+ for (l=level;l<curLevel;l++)
+ {
+ out.addStr("\n</blockquote>\n");
+ }
+ }
+ curLevel=level;
+ if (level==0) break; // end of quote block
+ // copy line without quotation marks
+ out.addStr(data+indent,end-indent);
+ // proceed with next line
+ i=end;
+ }
+ // end of comment within blockquote => add end markers
+ for (l=0;l<curLevel;l++)
+ {
+ out.addStr("\n</blockquote>\n");
+ }
+ return i;
+}
+
+static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent)
+{
+ int i=0,end;
+ //printf("writeCodeBlock: data={%s}\n",QCString(data).left(size).data());
+ out.addStr("@verbatim\n");
+ while (i<size)
+ {
+ // find end of this line
+ end=i+1;
+ while (end<size && data[end-1]!='\n') end++;
+ int j=i;
+ int indent=0;
+ while (j<end && data[j]==' ') j++,indent++;
+ //printf("j=%d end=%d indent=%d refIndent=%d data={%s}\n",j,end,indent,refIndent,QCString(data+i).left(end-i-1).data());
+ if (j==end-1) // empty line
+ {
+ // add empty line
+ out.addStr("\n");
+ i=end;
+ }
+ else if (indent>=refIndent+codeBlockIndent) // enough indent to contine the code block
+ {
+ // add code line minus the indent
+ out.addStr(data+i+refIndent+codeBlockIndent,end-i-refIndent-codeBlockIndent);
+ i=end;
+ }
+ else // end of code block
+ {
+ break;
+ }
+ }
+ out.addStr("@endverbatim\n");
+ //printf("i=%d\n",i);
+ return i;
+}
+
+// start searching for the end of the line start at offset \a i
+// keeping track of possible blocks that need to to skipped.
+static void findEndOfLine(GrowBuf &out,const char *data,int size,
+ int &pi,int&i,int &end)
+{
+ // find end of the line
+ for (end=i+1; end<size && data[end-1]!='\n'; end++)
+ {
+ // while looking for the end of the line we might encounter a block
+ // that needs to be passed unprocessed.
+ if ((data[end-1]=='\\' || data[end-1]=='@') && // command
+ (end<=1 || (data[end-2]!='\\' && data[end-2]!='@')) // not escaped
+ )
+ {
+ QCString endBlockName = isBlockCommand(data+end-1,end-1,size-(end-1));
+ if (!endBlockName.isEmpty())
+ {
+ if (pi!=-1) // output previous line if available
+ {
+ out.addStr(data+pi,i-pi);
+ }
+ int l = endBlockName.length();
+ for (;end<size-l-1;end++) // search for end of block marker
+ {
+ if ((data[end]=='\\' || data[end]=='@') &&
+ data[end-1]!='\\' && data[end-1]!='@'
+ )
+ {
+ if (strncmp(&data[end+1],endBlockName,l)==0)
+ {
+ // found end marker, skip over this block
+ out.addStr(data+i,end+l+1-i);
+ pi=-1;
+ i=end+l+1; // continue after block
+ end=i+1;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+static QCString processQuotations(const QCString &s,int refIndent)
+{
+ GrowBuf out;
+ const char *data = s.data();
+ int size = s.length();
+ int i=0,end=0,pi=-1;
+ while (i<size)
+ {
+ findEndOfLine(out,data,size,pi,i,end);
+ // line is now found at [i..end)
+
+ if (pi!=-1)
+ {
+ if (isBlockQuote(data+pi,i-pi,refIndent))
+ {
+ i = pi+writeBlockQuote(out,data+pi,size-pi);
+ pi=-1;
+ end=i+1;
+ continue;
+ }
+ else
+ {
+ out.addStr(data+pi,i-pi);
+ }
+ }
+ pi=i;
+ i=end;
+ }
+ if (pi!=-1 && pi<size) // deal with the last line
+ {
+ if (isBlockQuote(data+pi,size-pi,refIndent))
+ {
+ writeBlockQuote(out,data+pi,size-pi);
+ }
+ else
+ {
+ out.addStr(data+pi,size-pi);
+ }
+ }
+ out.addChar(0);
+
+ //printf("Process quotations\n---- input ----\n%s\n---- output ----\n%s\n------------\n",
+ // s.data(),out.get());
+
+ return out.get();
+}
+
+static QCString processBlocks(const QCString &s,int indent)
+{
+ GrowBuf out;
+ const char *data = s.data();
+ int size = s.length();
+ int i=0,end=0,pi=-1,ref,level;
+ QCString id,link,title;
+ int blockIndent = indent;
+
+ // get indent for the first line
+ end = i+1;
+ int sp=0;
+ while (end<size && data[end-1]!='\n')
+ {
+ if (data[end-1]==' ') sp++;
+ end++;
+ }
+
+ // special case when the documentation starts with a code block
+ // since the first line is skipped when looking for a code block later on.
+ if (end>codeBlockIndent && isCodeBlock(data,0,end,blockIndent))
+ {
+ i=writeCodeBlock(out,data,size,blockIndent);
+ end=i+1;
+ pi=-1;
+ }
+
+ // process each line
+ while (i<size)
+ {
+ findEndOfLine(out,data,size,pi,i,end);
+ // line is now found at [i..end)
+
+ if (pi!=-1)
+ {
+ blockIndent = indent;
+ //printf("isHeaderLine(%s)=%d\n",QCString(data+i).left(size-i).data(),level);
+ if ((level=isHeaderline(data+i,size-i))>0)
+ {
+ //printf("Found header at %d-%d\n",i,end);
+ while (pi<size && data[pi]==' ') pi++;
+ if (i-pi>1)
+ {
+ out.addStr(level==1?"<h1>":"<h2>");
+ out.addStr(data+pi,i-pi-1);
+ out.addStr(level==1?"</h1>\n":"</h2>\n");
+ }
+ else
+ {
+ out.addStr("<hr>\n");
+ }
+ pi=-1;
+ i=end;
+ end=i+1;
+ continue;
+ }
+ else if ((ref=isLinkRef(data+pi,size-pi,id,link,title)))
+ {
+ //printf("found link ref: id='%s' link='%s' title='%s'\n",
+ // id.data(),link.data(),title.data());
+ g_linkRefs.insert(id.lower(),new LinkRef(link,title));
+ i=ref+pi;
+ pi=-1;
+ end=i+1;
+ }
+ else if (isCodeBlock(data+i,i,end-i,blockIndent))
+ //if (isCodeBlock(data+pi,pi,end-pi,blockIndent))
+ {
+ // skip previous line (it is empty anyway)
+ i=pi+writeCodeBlock(out,data+pi,size-pi,blockIndent);
+ pi=-1;
+ end=i+1;
+ continue;
+ }
+ else if (isTableBlock(data+pi,size-pi))
+ {
+ i=pi+writeTableBlock(out,data+pi,size-pi);
+ pi=-1;
+ end=i+1;
+ continue;
+ }
+ else
+ {
+ writeOneLineHeaderOrRuler(out,data+pi,i-pi);
+ }
+ }
+ pi=i;
+ i=end;
+ }
+ //printf("last line %d size=%d\n",i,size);
+ if (pi!=-1 && pi<size) // deal with the last line
+ {
+ if (isLinkRef(data+pi,size-pi,id,link,title))
+ {
+ //printf("found link ref: id='%s' link='%s' title='%s'\n",
+ // id.data(),link.data(),title.data());
+ g_linkRefs.insert(id,new LinkRef(link,title));
+ }
+ else
+ {
+ writeOneLineHeaderOrRuler(out,data+pi,size-pi);
+ }
+ }
+
+ out.addChar(0);
+ return out.get();
+}
+
+static QCString extractPageTitle(QCString &docs)
+{
+ // first first non-empty line
+ QCString title;
+ const char *data = docs.data();
+ int i=0;
+ int size=docs.size();
+ while (i<size && (data[i]==' ' || data[i]=='\n')) i++;
+ if (i>=size) return "";
+ int end1=i+1;
+ while (end1<size && data[end1-1]!='\n') end1++;
+ //printf("i=%d end1=%d size=%d line='%s'\n",i,end1,size,docs.mid(i,end1-i).data());
+ // first line from i..end1
+ if (end1<size)
+ {
+ // second line form end1..end2
+ int end2=end1+1;
+ while (end2<size && data[end2-1]!='\n') end2++;
+ if (isHeaderline(data+end1,size-end1))
+ {
+ convertStringFragment(title,data+i,end1-i);
+ docs=docs.mid(end2);
+ return title;
+ }
+ }
+ if (i<end1 && isAtxHeader(data+i,end1-i,title)>0)
+ {
+ docs=docs.mid(end1);
+ }
+ //printf("extractPageTitle(title='%s' docs='%s')\n",title.data(),docs.data());
+ return title;
+}
+
+static QCString detab(const QCString &s,int &refIndent)
+{
+ static int tabSize = Config_getInt("TAB_SIZE");
+ GrowBuf out;
+ int size = s.length();
+ const char *data = s.data();
+ int i=0;
+ int col=0;
+ const int maxIndent=1000000; // value representing infinity
+ int minIndent=maxIndent;
+ while (i<size)
+ {
+ char c = data[i++];
+ switch(c)
+ {
+ case '\t': // expand tab
+ {
+ int stop = tabSize - (col%tabSize);
+ col+=stop;
+ while (stop--) out.addChar(' ');
+ }
+ break;
+ case '\n': // reset colomn counter
+ out.addChar(c);
+ col=0;
+ break;
+ case ' ': // increment column counter
+ out.addChar(c);
+ col++;
+ break;
+ default: // non-whitespace => update minIndent
+ out.addChar(c);
+ if (col<minIndent) minIndent=col;
+ col++;
+ }
+ }
+ if (minIndent!=maxIndent) refIndent=minIndent; else refIndent=0;
+ out.addChar(0);
+ return out.get();
+}
+
+//---------------------------------------------------------------------------
+
+QCString processMarkdown(const QCString &input)
+{
+#if 0
+ static bool g_init = FALSE;
+ if (!g_init)
+ {
+ g_htmlBlockTags.insert("p",(void*)0x8);
+ g_htmlBlockTags.insert("dl",(void*)0x8);
+ g_htmlBlockTags.insert("h1",(void*)0x8);
+ g_htmlBlockTags.insert("h2",(void*)0x8);
+ g_htmlBlockTags.insert("h3",(void*)0x8);
+ g_htmlBlockTags.insert("h4",(void*)0x8);
+ g_htmlBlockTags.insert("h5",(void*)0x8);
+ g_htmlBlockTags.insert("h6",(void*)0x8);
+ g_htmlBlockTags.insert("ol",(void*)0x8);
+ g_htmlBlockTags.insert("ul",(void*)0x8);
+ g_htmlBlockTags.insert("div",(void*)0x8);
+ g_htmlBlockTags.insert("pre",(void*)0x8);
+ g_htmlBlockTags.insert("form",(void*)0x8);
+ g_htmlBlockTags.insert("math",(void*)0x8);
+ g_htmlBlockTags.insert("table",(void*)0x8);
+ g_htmlBlockTags.insert("iframe",(void*)0x8);
+ g_htmlBlockTags.insert("script",(void*)0x8);
+ g_htmlBlockTags.insert("fieldset",(void*)0x8);
+ g_htmlBlockTags.insert("noscript",(void*)0x8);
+ g_init=TRUE;
+ }
+#endif
+ g_linkRefs.setAutoDelete(TRUE);
+ g_linkRefs.clear();
+ static GrowBuf out;
+ if (input.isEmpty()) return input;
+ out.clear();
+ int refIndent;
+ // for replace tabs by spaces
+ QCString s = detab(input,refIndent);
+ // then process quotation blocks (as these may contain other blocks)
+ s = processQuotations(s,refIndent);
+ //printf("======== Quotations =========\n---- output -----\n%s\n---------\n",s.data());
+ // then process block items (headers, rules, and code blocks, references)
+ s = processBlocks(s,refIndent);
+ //printf("======== Blocks =========\n---- output -----\n%s\n---------\n",s.data());
+ int size=s.length();
+ g_actions['_']=processEmphasis;
+ g_actions['*']=processEmphasis;
+ g_actions['`']=processCodeSpan;
+ g_actions['\\']=processSpecialCommand;
+ g_actions['@']=processSpecialCommand;
+ g_actions['[']=processLink;
+ g_actions['!']=processLink;
+ //g_actions['<']=processHtmlBlock;
+ // finally process the inline markup (links, emphasis and code spans)
+ processInline(out,s,size);
+ out.addChar(0);
+ Debug::print(Debug::Markdown,0,"======== Markdown =========\n---- input ------- \n%s\n---- output -----\n%s\n---------\n",input.data(),out.get());
+ return out.get();
+}
+
+//---------------------------------------------------------------------------
+
+void MarkdownFileParser::parseInput(const char *fileName,
+ const char *fileBuf,
+ Entry *root)
+{
+ Entry *current = new Entry;
+ current->lang = SrcLangExt_Markdown;
+ QCString docs = fileBuf;
+ QCString title=extractPageTitle(docs).stripWhiteSpace();
+ QCString id=extractTitleId(title);
+ QCString baseName = substitute(QFileInfo(fileName).baseName().utf8()," ","_");
+ if (id.isEmpty()) id = "md_"+baseName;
+ if (id=="mainpage" || id=="index")
+ {
+ docs.prepend("@mainpage "+title+"\n");
+ }
+ else
+ {
+ docs.prepend("@page "+id+" "+title+"\n");
+ }
+ int lineNr=1;
+ int position=0;
+
+ // even without markdown support enabled, we still
+ // parse markdown files as such
+ bool markdownEnabled = Doxygen::markdownSupport;
+ Doxygen::markdownSupport = TRUE;
+
+ bool needsEntry;
+ Protection prot;
+ while (parseCommentBlock(
+ this,
+ current,
+ docs,
+ fileName,
+ lineNr,
+ FALSE, // isBrief
+ FALSE, // javadoc autobrief
+ FALSE, // inBodyDocs
+ prot, // protection
+ position,
+ needsEntry))
+ {
+ if (needsEntry)
+ {
+ QCString docFile = current->docFile;
+ root->addSubEntry(current);
+ current = new Entry;
+ current->lang = SrcLangExt_Markdown;
+ current->docFile = docFile;
+ current->docLine = lineNr;
+ }
+ }
+ if (needsEntry)
+ {
+ root->addSubEntry(current);
+ }
+
+ // restore setting
+ Doxygen::markdownSupport = markdownEnabled;
+}
+
+void MarkdownFileParser::parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ bool isExampleBlock,
+ const char *exampleName,
+ FileDef *fileDef,
+ int startLine,
+ int endLine,
+ bool inlineFragment,
+ MemberDef *memberDef,
+ bool showLineNumbers
+ )
+{
+ ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
+ if (pIntf!=this)
+ {
+ pIntf->parseCode(
+ codeOutIntf,scopeName,input,isExampleBlock,exampleName,
+ fileDef,startLine,endLine,inlineFragment,memberDef,showLineNumbers);
+ }
+}
+
+void MarkdownFileParser::resetCodeParserState()
+{
+ ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
+ if (pIntf!=this)
+ {
+ pIntf->resetCodeParserState();
+ }
+}
+
+void MarkdownFileParser::parsePrototype(const char *text)
+{
+ ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
+ if (pIntf!=this)
+ {
+ pIntf->parsePrototype(text);
+ }
+}
+
diff --git a/src/markdown.h b/src/markdown.h
new file mode 100644
index 0000000..616c01e
--- /dev/null
+++ b/src/markdown.h
@@ -0,0 +1,52 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2011 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.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#ifndef MARKDOWN_H
+#define MARKDOWN_H
+
+#include <qcstring.h>
+#include "parserintf.h"
+
+/** processes string \a s and converts markdown into doxygen/html commands. */
+QCString processMarkdown(const QCString &s);
+
+class MarkdownFileParser : public ParserInterface
+{
+ public:
+ virtual ~MarkdownFileParser() {}
+ void parseInput(const char *fileName,
+ const char *fileBuf,
+ Entry *root);
+ bool needsPreprocessing(const QCString &) { return FALSE; }
+ void parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ bool isExampleBlock,
+ const char *exampleName=0,
+ FileDef *fileDef=0,
+ int startLine=-1,
+ int endLine=-1,
+ bool inlineFragment=FALSE,
+ MemberDef *memberDef=0,
+ bool showLineNumbers=TRUE
+ );
+ void resetCodeParserState();
+ void parsePrototype(const char *text);
+};
+
+
+
+
+#endif
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index f35f5b7..f3cfe54 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -575,7 +575,7 @@ void MemberList::writeDocumentationPage(OutputList &ol,
container->getOutputFileBase());
if (!generateTreeView)
{
- container->writeNavigationPath(ol,FALSE);
+ container->writeNavigationPath(ol);
ol.endQuickIndices();
}
ol.startContents();
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index 4bf42cb..63b24d8 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -98,7 +98,7 @@ void PageDef::writeDocumentation(OutputList &ol)
{
if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
{
- getOuterScope()->writeNavigationPath(ol,FALSE);
+ getOuterScope()->writeNavigationPath(ol);
}
ol.endQuickIndices();
}
@@ -183,6 +183,13 @@ void PageDef::writeDocumentation(OutputList &ol)
void PageDef::writePageDocumentation(OutputList &ol)
{
+
+ bool markdownEnabled = Doxygen::markdownSupport;
+ if (getLanguage()==SrcLangExt_Markdown)
+ {
+ Doxygen::markdownSupport = TRUE;
+ }
+
ol.startTextBlock();
ol.parseDoc(
docFile(), // fileName
@@ -195,6 +202,8 @@ void PageDef::writePageDocumentation(OutputList &ol)
);
ol.endTextBlock();
+ Doxygen::markdownSupport = markdownEnabled;
+
if (hasSubPages())
{
// for printed documentation we write subpages as section's of the
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index ebe09e8..30e4788 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -375,6 +375,8 @@ public:
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
+ void visitPre(DocHtmlBlockQuote *);
+ void visitPost(DocHtmlBlockQuote *);
private:
@@ -1300,6 +1302,18 @@ void PerlModDocVisitor::visitPost(DocText *)
{
}
+void PerlModDocVisitor::visitPre(DocHtmlBlockQuote *)
+{
+ openItem("blockquote");
+ openSubBlock("content");
+}
+
+void PerlModDocVisitor::visitPost(DocHtmlBlockQuote *)
+{
+ closeSubBlock();
+ closeItem();
+}
+
static void addTemplateArgumentList(ArgumentList *al,PerlModOutput &output,const char *)
{
QCString indentStr;
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 4cfc06a..4a41647 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -668,6 +668,16 @@ class PrintDocVisitor : public DocVisitor
indent_post();
printf("</text>\n");
}
+ void visitPre(DocHtmlBlockQuote *)
+ {
+ indent_pre();
+ printf("<blockquote>\n");
+ }
+ void visitPost(DocHtmlBlockQuote *)
+ {
+ indent_post();
+ printf("</blockquote>\n");
+ }
private:
// helper functions
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index b66a9a8..4923bb1 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -1519,24 +1519,49 @@ void RTFDocVisitor::visitPost(DocInternalRef *)
void RTFDocVisitor::visitPre(DocCopy *)
{
+ if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocCopy)}\n");
}
void RTFDocVisitor::visitPost(DocCopy *)
{
+ if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocCopy)}\n");
}
void RTFDocVisitor::visitPre(DocText *)
{
+ if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocText)}\n");
}
void RTFDocVisitor::visitPost(DocText *)
{
+ if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocText)}\n");
}
+void RTFDocVisitor::visitPre(DocHtmlBlockQuote *)
+{
+ if (m_hide) return;
+ DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlBlockQuote)}\n");
+ if (!m_lastIsPara) m_t << "\\par" << endl;
+ m_t << "{"; // start desc
+ incIndentLevel();
+ m_t << rtf_Style_Reset << getStyle("DescContinue");
+}
+
+void RTFDocVisitor::visitPost(DocHtmlBlockQuote *)
+{
+ if (m_hide) return;
+ DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlBlockQuote)}\n");
+ if (!m_lastIsPara) m_t << "\\par" << endl;
+ decIndentLevel();
+ m_t << "}"; // end desc
+ m_lastIsPara=TRUE;
+}
+
+
//static char* getMultiByte(int c)
//{
// static char s[10];
diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h
index fd76af2..db70b00 100644
--- a/src/rtfdocvisitor.h
+++ b/src/rtfdocvisitor.h
@@ -115,8 +115,6 @@ class RTFDocVisitor : public DocVisitor
void visitPost(DocSecRefItem *);
void visitPre(DocSecRefList *);
void visitPost(DocSecRefList *);
- //void visitPre(DocLanguage *);
- //void visitPost(DocLanguage *);
void visitPre(DocParamSect *);
void visitPost(DocParamSect *);
void visitPre(DocParamList *);
@@ -129,6 +127,8 @@ class RTFDocVisitor : public DocVisitor
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
+ void visitPre(DocHtmlBlockQuote *);
+ void visitPost(DocHtmlBlockQuote *);
private:
diff --git a/src/scanner.l b/src/scanner.l
index 49495f3..d211301 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -5401,7 +5401,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
handleCommentBlock(docBlock.data(),FALSE);
BEGIN(docBlockContext);
}
-<DocBlock>^{B}*("//")?{B}*"*"+/[^//] { // start of a comment line
+<DocBlock>^{B}*("//")?{B}*"*"+/[^//a-z_A-Z0-9*] { // start of a comment line
}
<DocBlock>^{B}*("//"){B}* { // strip embedded C++ comments if at the start of a line
}
diff --git a/src/tclscanner.l b/src/tclscanner.l
index 08b330e..fec5dc7 100644
--- a/src/tclscanner.l
+++ b/src/tclscanner.l
@@ -392,16 +392,16 @@ void tcl_split_list(QString &str, QStringList &list)
//! Structure containing information about current scan context.
typedef struct
{
- int type;
- QCString string_after;
+ char type[2]; // type of scan context: "\"" "{" "[" "?" " "
int line0; // start line of scan context
int line1; // end line of scan context
YY_BUFFER_STATE buffer_state; // value of scan context
- QString ns; // current namespace
+ QCString ns; // current namespace
Entry *entry_fn; // if set contains the current proc/method/constructor/destructor
Entry *entry_cl; // if set contain the current class
Entry *entry_scan; // current scan entry
Protection protection; // current protections state
+ QStringList after; // option/value list (options: NULL comment keyword script)
} tcl_scan;
//* Structure containing all internal global variables.
@@ -422,27 +422,27 @@ static struct
int brace_level; // bookkeeping of braces
int bracket_level; // bookkeeping of brackets
int bracket_quote; // bookkeeping of quotes (toggles)
- int word_is; // type of current word
+ char word_is; // type of current word: "\"" "{" "[" "?" " "
int line_comment; // line number of comment
int line_commentline; // line number of comment after command
int line_command; // line number of command
int line_body0; // start line of body
int line_body1; // end line of body
- QString string_command; // contain current command
- QString string_commentline; // contain current comment after command
- QString string_commentcodify; // current comment string used in codifying
- QString string_comment; // contain current comment
- QString string_last; // contain last read word or part of word
- QString string; // temporary string value
+ QCString string_command; // contain current command
+ QCString string_commentline; // contain current comment after command
+ QCString string_commentcodify; // current comment string used in codifying
+ QCString string_comment; // contain current comment
+ QCString string_last; // contain last read word or part of word
+ QCString string; // temporary string value
Entry* entry_main; // top level entry
Entry* entry_file; // entry of current file
Entry* entry_current; // currently used entry
Entry* entry_inside; // contain entry of current scan context
QStringList list_commandwords; // list of command words
QList<tcl_scan> scan; // stack of scan contexts
- QDict<Entry> ns; // all read namespace entries
- QDict<Entry> cl; // all read class entries
- QDict<Entry> fn; // all read function entries
+ QAsciiDict<Entry> ns; // all read namespace entries
+ QAsciiDict<Entry> cl; // all read class entries
+ QAsciiDict<Entry> fn; // all read function entries
QList<Entry> entry; // list of all created entries, will be deleted after codifying
Protection protection; // current protections state
MemberDef *memberdef; // contain current MemberDef when codifying
@@ -450,7 +450,7 @@ static struct
// scanner functions
static int yyread(char *buf,int max_size);
-static void tcl_scan_start(int type, QString content, const char *after, QString ns, Entry *entry_cls, Entry *entry_fn);
+static tcl_scan *tcl_scan_start(char type, QString content, QCString ns, Entry *entry_cls, Entry *entry_fn);
static void tcl_scan_end();
static void tcl_comment(int what,const char *text);
static void tcl_word(int what,const char *text);
@@ -498,18 +498,18 @@ void tcl_protection(Entry *entry)
//! Check name.
// @return 'ns' and 'name' of given current 'ns0' and 'name0'
-static void tcl_name(const QString ns0, const QString name0, QString &ns, QString &name)
+static void tcl_name(const QCString ns0, const QString name0, QCString &ns, QCString &name)
{
- QString myNm;
+ QCString myNm;
int myStart;
- if (strncmp(name0.ascii(),"::",2)==0)
+ if (strncmp(name0.data(),"::",2)==0)
{
myNm = name0.mid(2);
}
- else if (ns0.length())
+ else if (ns0.length() && ns0 != " ")
{
- myNm = ns0 + "::" + name0;
+ myNm = ns0 + "::" + name0.data();
}
else
{
@@ -530,18 +530,22 @@ static void tcl_name(const QString ns0, const QString name0, QString &ns, QStrin
// Check and return namespace entry.
// @return namespace entry
-Entry* tcl_entry_namespace(const QString ns)
+Entry* tcl_entry_namespace(const QCString ns)
{
Entry *myEntry;
- QString myNs = " ";
- if (strlen(ns.ascii())) {myNs = ns;}
-
- myEntry = tcl.ns.find(myNs);
+ if (ns.length())
+ {
+ myEntry = tcl.ns.find(ns);
+ }
+ else
+ {
+ myEntry = tcl.ns.find("::");
+ }
if (myEntry == NULL)
{
myEntry = tcl_entry_new();
myEntry->section = Entry::NAMESPACE_SEC;
- myEntry->name = ns.ascii();
+ myEntry->name = ns;
tcl.entry_main->addSubEntry(myEntry);
tcl.ns.insert(ns,myEntry);
}
@@ -550,18 +554,17 @@ Entry* tcl_entry_namespace(const QString ns)
// Check and return class entry.
// @return class entry
-Entry* tcl_entry_class(const QString cl)
+Entry* tcl_entry_class(const QCString cl)
{
Entry *myEntry;
- QString myCl = " ";
- if (strlen(cl.ascii())) {myCl = cl;}
+ if (!cl.length()) return(NULL);
- myEntry = tcl.cl.find(myCl);
+ myEntry = tcl.cl.find(cl);
if (myEntry == NULL)
{
myEntry = tcl_entry_new();
myEntry->section = Entry::CLASS_SEC;
- myEntry->name = cl.ascii();
+ myEntry->name = cl;
tcl.entry_main->addSubEntry(myEntry);
tcl.cl.insert(cl,myEntry);
}
@@ -570,13 +573,13 @@ Entry* tcl_entry_class(const QString cl)
//! Check for keywords.
// @return 1 if keyword and 0 otherwise
-static int tcl_keyword(QString str)
+static int tcl_keyword(QCString str)
{
static QStringList myList;
static int myInit=1;
if (myInit)
{
- // tcl keywords TODO default, else, provide, require
+ // tcl keywords
myList <<"append"<<"apply"<<"array"<<"auto_execok"<<"auto_import"<<"auto_load"<<"auto_mkindex"<<"auto_qualify"<<"auto_reset";
myList <<"binary";
myList <<"catch"<<"cd"<<"close"<<"clock"<<"concat";
@@ -633,7 +636,7 @@ static void tcl_font_end()
static void tcl_codify(const char *s,char *str)
{
if (tcl.code==NULL||str==NULL) return;
- if (s)
+ if (s && strcmp(s,"NULL")!=0)
{
tcl_font_end();
tcl.code->startFontClass(s);
@@ -676,6 +679,7 @@ static void tcl_codify(const char *s,char *str)
tcl_font_end();
}
+#if 0
//! Codify 'str' with special font class 's'.
static void tcl_codify(const char *s,const char *str)
{
@@ -685,6 +689,7 @@ static void tcl_codify(const char *s,const char *str)
tcl_codify(s,tmp);
free(tmp);
}
+#endif
//! Codify 'str' with special font class 's'.
static void tcl_codify(const char *s,QString str)
@@ -727,10 +732,6 @@ ws ([ \t]|\\\n)
%x COMMENT_VERB
%x COMMENTLINE
%x COMMENTLINE_NL
-%x STRING
-%x QUOTE
-%x BRACE
-%x BRACKET
%%
<ERROR>. {
D
@@ -777,13 +778,18 @@ D
D
tcl_codify("comment",yytext);
}
+<COMMENT>"###".*\n {
+D
+ tcl_codify("comment",yytext);
+ tcl_comment(2,yytext+1);
+}
<COMMENT>"##".*\\\n {
D
tcl_codify("comment",yytext);
- QString t=yytext;
+ QCString t=yytext;
t = t.mid(2,t.length()-3);
- t.append('\n');
- tcl_comment(1,t.ascii());
+ t.append("\n");
+ tcl_comment(1,t.data());
yy_push_state(COMMENT_NL);
}
<COMMENT>"##".*\n {
@@ -793,7 +799,7 @@ D
}
<COMMENT>"#"[@\\]"code"\n[ \t]*[^#] {
D
- QString t=yytext;
+ QCString t=yytext;
tcl_codify("comment",t.left(7));
tcl_comment(2,"\n@code\n");
yyless(7);
@@ -801,7 +807,7 @@ D
}
<COMMENT>"#"[@\\]"verbatim"\n[ \t]*[^#] {
D
- QString t=yytext;
+ QCString t=yytext;
tcl_codify("comment",t.left(11));
tcl_comment(2,"\n@verbatim\n");
yyless(11);
@@ -810,10 +816,10 @@ D
<COMMENT>"#".*\\\n {
D
tcl_codify("comment",yytext);
- QString t=yytext;
+ QCString t=yytext;
t = t.mid(1,t.length()-3);
- t.append('\n');
- tcl_comment(2,t.ascii());
+ t.append("\n");
+ tcl_comment(2,t.data());
yy_push_state(COMMENT_NL);
}
<COMMENT>"#".*\n {
@@ -823,11 +829,11 @@ D
}
<COMMENT>"#".*\x1A {
D
- QString t=yytext;
+ QCString t=yytext;
t = t.mid(0,t.length()-1);
- tcl_codify("comment",t.ascii());
+ tcl_codify("comment",t.data());
t = t.mid(1,t.length());
- tcl_comment(-2,t.ascii());
+ tcl_comment(-2,t.data());
unput(0x1A);
}
<COMMENT>\x1A {
@@ -843,9 +849,9 @@ D
<COMMENT_CODE>"#"[@\\]"endcode"\n {
D
- QString t=yytext;
+ QCString t=yytext;
t = t.left(t.length()-10);
- tcl_comment(2,t.ascii());
+ tcl_comment(2,t.data());
tcl_comment(2,"\n@endcode\n");
yy_pop_state();
yyless(0);
@@ -862,9 +868,9 @@ D
<COMMENT_VERB>"#"[@\\]"endverbatim"\n {
D
- QString t=yytext;
+ QCString t=yytext;
t = t.left(t.length()-14);
- tcl_comment(2,t.ascii());
+ tcl_comment(2,t.data());
tcl_comment(2,"\n@endverbatim\n");
yy_pop_state();
yyless(0);
@@ -908,9 +914,9 @@ D
<COMMENTLINE>"#<".*\\\n {
D
tcl.string_commentcodify += yytext;
- QString t=yytext;
+ QCString t=yytext;
t = t.mid(2,t.length()-4);
- t.append('\n');
+ t.append("\n");
tcl.string_commentline += t;
yy_push_state(COMMENTLINE_NL);
}
@@ -929,7 +935,7 @@ D
tcl.entry_current->briefFile = tcl.file_name;
}
yyless(0);
- tcl_command(-1,tcl.string_commentcodify.ascii());
+ tcl_command(-1,tcl.string_commentcodify.data());
tcl.string_commentline="";
tcl.string_commentcodify="";
}
@@ -937,9 +943,9 @@ D
<COMMENTLINE_NL>.*\\\n {
D
tcl.string_commentcodify += yytext;
- QString t=yytext;
+ QCString t=yytext;
t = t.left(t.length()-3);
- t.append('\n');
+ t.append("\n");
tcl.string_commentline += t;
}
<COMMENTLINE_NL>.*\n {
@@ -950,7 +956,7 @@ D
}
<COMMENTLINE_NL>.*\x1A {
D
- QString t=yytext;
+ QCString t=yytext;
t = t.left(t.length()-1);
tcl.string_commentcodify += t;
tcl.string_commentline += t;
@@ -996,19 +1002,20 @@ D
}
<COMMAND>"{*}". {
D
- tcl.word_is = WORD;
+ tcl.word_is = ' ';
tcl.string_last = "{*}";
tcl_word(0,&yytext[3]);
}
+<COMMAND>"\\"[\{\}\[\]\;\" \t] {
+D
+ tcl.word_is=' ';
+ tcl.string_last = "";
+ tcl_word(0,yytext);
+}
<COMMAND>. {
D
- switch (yytext[0])
- {
- case '{': tcl.word_is = BRACE; break;
- case '[': tcl.word_is = BRACKET; break;
- case '"': tcl.word_is = QUOTE; break;
- default: tcl.word_is = WORD;
- }
+ tcl.word_is=' ';
+ if (yytext[0]=='{'||yytext[0]=='['||yytext[0]=='"') tcl.word_is = yytext[0];
tcl.string_last = "";
tcl_word(0,yytext);
}
@@ -1057,34 +1064,32 @@ D
//! Start new scan context for given 'content'.
// @return created new scan context.
-static void tcl_scan_start(int type, QString content, const char *after, QString ns, Entry *entry_cl, Entry *entry_fn)
+static tcl_scan *tcl_scan_start(char type, QString content, QCString ns, Entry *entry_cl, Entry *entry_fn)
{
tcl_scan *myScan=tcl.scan.at(0);
- QString myName;
- char c[2]=" ";
+ QCString myName;
tcl_inf("line=%d type=%d '%s'\n",tcl.line_body0,type,content.ascii());
myScan->line1=yylineno;
yy_push_state(TOP);
myScan=new tcl_scan;
- myScan->type = type;
- myScan->string_after=after;
-
- switch (myScan->type)
- {
- case QUOTE: c[0]='"';
- break;
- case BRACE: c[0]='{';
- break;
- case BRACKET: c[0]='[';
- break;
- default:
+ myScan->type[0] =' ';
+ myScan->type[1] = '\0';
+ switch (type) {
+ case '"':
+ case '{':
+ case '[':
+ myScan->type[0] = type;
break;
+ case '?':
+ if (content[0]=='"'&&content[content.length()-1]=='"') myScan->type[0]='"';
+ if (content[0]=='{'&&content[content.length()-1]=='}') myScan->type[0]='{';
+ if (content[0]=='['&&content[content.length()-1]==']') myScan->type[0]='[';
}
- if (c[0]!=' ')
+ if (myScan->type[0]!=' ')
{
- tcl_codify(NULL,c);
+ tcl_codify(NULL,&myScan->type[0]);
content = content.mid(1,content.length()-2);
}
content += (char)0x1A;// for detection end of scan context
@@ -1095,6 +1100,7 @@ tcl_inf("line=%d type=%d '%s'\n",tcl.line_body0,type,content.ascii());
myScan->buffer_state=yy_scan_string(content.ascii());
myScan->line0=tcl.line_body0;
myScan->line1=tcl.line_body1;
+ myScan->after.clear();
yylineno=myScan->line0;
myScan->protection = tcl.protection;
@@ -1102,34 +1108,47 @@ tcl_inf("line=%d type=%d '%s'\n",tcl.line_body0,type,content.ascii());
tcl.entry_current = tcl_entry_new();
tcl.scan.insert(0,myScan);
yy_switch_to_buffer(myScan->buffer_state);
+ return (myScan);
}
//! Close current scan context.
static void tcl_scan_end()
{
tcl_scan *myScan=tcl.scan.at(0);
- char c[2]=" ";
+ tcl_scan *myScan1=tcl.scan.at(1);
tcl_inf("line=%d\n",myScan->line1);
- switch (myScan->type)
- {
- case QUOTE: c[0]='"'; break;
- case BRACE: c[0]='}'; break;
- case BRACKET: c[0]=']'; break;
- }
- if (c[0]!=' ') {tcl_codify(NULL,c);}
- if (myScan->string_after.length())
+ if (myScan->type[0]=='{') myScan->type[0]='}';
+ if (myScan->type[0]=='[') myScan->type[0]=']';
+ if (myScan->type[0]!=' ') tcl_codify(NULL,&myScan->type[0]);
+ int myStart=-1;
+ for (unsigned int i=0;i<myScan->after.count();i=i+2)
{
- tcl_codify("comment",myScan->string_after);
+ if (myScan->after[i]=="script") {
+ myStart=i;
+ break;
+ }
+ tcl_codify(myScan->after[i],myScan->after[i+1]);
}
yy_delete_buffer(myScan->buffer_state);
- tcl.scan.removeFirst();
yy_pop_state();
- myScan=tcl.scan.at(0);
- tcl.entry_inside = myScan->entry_scan;
- yy_switch_to_buffer(myScan->buffer_state);
- yylineno=myScan->line1;
- tcl.protection = myScan->protection;
+ tcl.entry_inside = myScan1->entry_scan;
+ yy_switch_to_buffer(myScan1->buffer_state);
+ yylineno=myScan1->line1;
+ tcl.protection = myScan1->protection;
+ if (myStart>=0)
+ {
+ myScan1 = tcl_scan_start('?', myScan->after[myStart+1], myScan->ns, myScan->entry_cl, myScan->entry_fn);
+ for (unsigned int i=myStart+2;i<myScan->after.count();i++)
+ {
+ myScan1->after.append(myScan->after[i]);
+ }
+ tcl.scan.remove(1);
+ }
+ else
+ {
+ tcl.scan.removeFirst();
+ }
}
//! Handling of word parsing.
@@ -1174,7 +1193,7 @@ static void tcl_word(int what,const char *text)
myWord=' ';
yy_pop_state();
yyless(0);
-tcl_inf("(\\\n) ?%s?\n",tcl.string_last.ascii());
+tcl_inf("(\\\n) ?%s?\n",tcl.string_last.data());
return;
}
switch (myList[myLevel-1])
@@ -1189,7 +1208,7 @@ tcl_inf("(\\\n) ?%s?\n",tcl.string_last.ascii());
myWord=' ';
yy_pop_state();
yyless(0);
-tcl_inf("(\\\n) ?%s?\n",tcl.string_last.ascii());
+tcl_inf("(\\\n) ?%s?\n",tcl.string_last.data());
return;
}
break;
@@ -1300,7 +1319,7 @@ tcl_inf("(\\\n) ?%s?\n",tcl.string_last.ascii());
myWord=' ';
yy_pop_state();
yyless(0);
-tcl_inf("(%d) ?%s?\n",what,tcl.string_last.ascii());
+tcl_inf("(%d) ?%s?\n",what,tcl.string_last.data());
return;
}
switch (myList[myLevel-1])
@@ -1315,7 +1334,7 @@ tcl_inf("(%d) ?%s?\n",what,tcl.string_last.ascii());
myWord=' ';
yy_pop_state();
yyless(0);
-tcl_inf("(.%d) ?%s?\n",what,tcl.string_last.ascii());
+tcl_inf("(.%d) ?%s?\n",what,tcl.string_last.data());
return;
}
else
@@ -1332,7 +1351,7 @@ tcl_inf("(.%d) ?%s?\n",what,tcl.string_last.ascii());
myWord=' ';
yy_pop_state();
yyless(0);
-tcl_inf("(%d) ?%s?\n",what,tcl.string_last.ascii());
+tcl_inf("(%d) ?%s?\n",what,tcl.string_last.data());
return;
}
if (myLevel!=1 || myList[0] != '.')
@@ -1342,7 +1361,7 @@ tcl_inf("(%d) ?%s?\n",what,tcl.string_last.ascii());
myWord=' ';
yy_pop_state();
yyless(0);
-tcl_inf("(.%d) ?%s?\n",what,tcl.string_last.ascii());
+tcl_inf("(.%d) ?%s?\n",what,tcl.string_last.data());
return;
myWhite=0;
break;
@@ -1414,7 +1433,7 @@ tcl_inf("-> %s\n",(const char *)tcl.string_comment);
// resolve ALIASES
myI.addArray("/*!",3);
- myI.addArray(tcl.string_comment.ascii(),tcl.string_comment.length());
+ myI.addArray(tcl.string_comment.data(),tcl.string_comment.length());
myI.addArray("*/",2);
convertCppComments(&myI,&myO,tcl.file_name);
myO.dropFromStart(3);
@@ -1564,11 +1583,11 @@ D
}
//! Create link.
-static void tcl_codify_link(const char *name)
+static void tcl_codify_link(QCString name)
{
- if (tcl.code == NULL || name == NULL) return;
+ if (tcl.code == NULL || name.isEmpty()) return;
static int init=0;
- static QDict<MemberDef> fn;
+ static QAsciiDict<MemberDef> fn;
if (init==0)
{
init=1;
@@ -1594,22 +1613,29 @@ static void tcl_codify_link(const char *name)
}
}
MemberDef *myDef;
- QString myName=name;
-
- if (strncmp(name,"::",2)==0) // fully qualified global command
+ QCString myName=name;
+ if (name.mid(0,2)=="::") // fully qualified global command
{
myName = myName.mid(2);
myDef = fn.find(myName);
}
else // not qualified name
{
+ QCString myName1=myName;
myDef = NULL;
- myName = tcl.scan.at(0)->ns;
- myName = myName + "::" + myName;
- myDef = fn.find(myName); // search namespace command
+ myName1 = tcl.scan.at(0)->ns;
+ if (myName1 == " " || myName1 == "")
+ {
+ myName1 = myName;
+ }
+ else
+ {
+ myName1 = myName1 + "::" + myName;
+ }
+ myDef = fn.find(myName1); // search namespace command
if (myDef == NULL)
{
- myDef = fn.find(name); // search global command
+ myDef = fn.find(myName); // search global command
}
}
if (myDef != NULL) // documented command
@@ -1635,33 +1661,102 @@ static void tcl_codify_link(const char *name)
}
}
+
+//! Handle internal tcl commands.
+// "if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?"
+static void tcl_command_IF(QStringList type)
+{
+D
+ tcl_codify("keyword",*tcl.list_commandwords.at(0));
+ tcl_codify(NULL,*tcl.list_commandwords.at(1));
+ tcl_scan *myScan=tcl.scan.at(0);
+ myScan = tcl_scan_start('?',*tcl.list_commandwords.at(2),
+ myScan->ns,myScan->entry_cl,myScan->entry_fn);
+ for (unsigned int i = 3;i<tcl.list_commandwords.count();i++)
+ {
+ myScan->after << type[i] << tcl.list_commandwords[i];
+ }
+}
+//! Handle internal tcl commands.
+// "for start test next body"
+static void tcl_command_FOR()
+{
+D
+ tcl_codify("keyword",*tcl.list_commandwords.at(0));
+ tcl_codify(NULL,*tcl.list_commandwords.at(1));
+ tcl_scan *myScan=tcl.scan.at(0);
+ myScan = tcl_scan_start('?',*tcl.list_commandwords.at(2),
+ myScan->ns,myScan->entry_cl,myScan->entry_fn);
+ myScan->after << "NULL" << tcl.list_commandwords[3];
+ myScan->after << "script" << tcl.list_commandwords[4];
+ myScan->after << "NULL" << tcl.list_commandwords[5];
+ myScan->after << "script" << tcl.list_commandwords[6];
+ myScan->after << "NULL" << tcl.list_commandwords[7];
+ myScan->after << "script" << tcl.list_commandwords[8];
+}
+
+///! Handle internal tcl commands.
+// "foreach varname list body" and
+// "foreach varlist1 list1 ?varlist2 list2 ...? body"
+static void tcl_command_FOREACH()
+{
+D
+ unsigned int i;
+ tcl_codify("keyword",*tcl.list_commandwords.at(0));
+ for (i = 1;i<tcl.list_commandwords.count()-1;i++)
+ {
+ tcl_codify(NULL,*tcl.list_commandwords.at(i));
+ }
+ tcl_scan *myScan=tcl.scan.at(0);
+ myScan = tcl_scan_start('?',*tcl.list_commandwords.at(tcl.list_commandwords.count()-1),
+ myScan->ns,myScan->entry_cl,myScan->entry_fn);
+}
+
+///! Handle internal tcl commands.
+// "while test body"
+static void tcl_command_WHILE()
+{
+D
+ tcl_codify("keyword",*tcl.list_commandwords.at(0));
+ tcl_codify(NULL,*tcl.list_commandwords.at(1));
+ tcl_scan *myScan=tcl.scan.at(0);
+ myScan = tcl_scan_start('?',*tcl.list_commandwords.at(2),
+ myScan->ns,myScan->entry_cl,myScan->entry_fn);
+ myScan->after << "NULL" << tcl.list_commandwords[3];
+ myScan->after << "script" << tcl.list_commandwords[4];
+}
+
//! Handle all other commands.
// Create links of first command word or first command word inside [].
-static void tcl_command_OTHER(const char *text)
+static void tcl_command_OTHER()
{
if (tcl.code == NULL) return;
D
- QCString myName;
-
+ QCString myName;
for (unsigned int i=0; i< tcl.list_commandwords.count(); i++)
{
myName = *tcl.list_commandwords.at(i);
if (i==0)
{
- tcl_codify_link(myName.data());
+ tcl_codify_link(myName);
}
- else //TODO check on [... inside current string
+ else if (i%2 != 0)
+ {
+ tcl_codify(NULL,myName);
+ }
+ else
{
QCString myStr="";
int myCmd=0;
- for (unsigned int i=0;i<myName.length();i++)
+ unsigned int i;
+ for (i=0;i<myName.length();i++)
{
- char c = myName.at(i);
+ QChar c = myName[i];
if (myCmd)
{
if (c==' '||c=='\t'||c=='\n'||c==']')
{//end of command
- tcl_codify_link(myStr.data());
+ tcl_codify_link(myStr);
myStr="";
myCmd=0;
}
@@ -1672,6 +1767,12 @@ D
myStr+=c;
if (c=='[')
{//start of command
+ for (;i<myName.length();i++)
+ {
+ c = myName[i+1];
+ if (c!=' ' && c!='\t' && c!='\n') break;
+ myStr+=c;
+ }
tcl_codify(NULL,myStr);
myStr="";
myCmd=1;
@@ -1681,14 +1782,13 @@ D
tcl_codify(NULL,myStr);
}
}
- tcl_codify(NULL,text);
}
//! Handle \c proc statements.
-static void tcl_command_PROC(const char *text)
+static void tcl_command_PROC()
{
D
- QString myNs, myName;
+ QCString myNs, myName;
Entry *myEntryNs, *myEntry;
tcl_scan *myScan = tcl.scan.at(0);
@@ -1719,15 +1819,15 @@ D
myEntryNs->addSubEntry(tcl.entry_current);
myEntry = tcl.entry_current;
tcl.fn.insert(myName,myEntry);
- tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),text,
+ myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),
myEntryNs->name,NULL,myEntry);
}
//! Handle \c itcl::body statements and \c oo::define method and method inside \c itcl::class statements.
-static void tcl_command_METHOD(const char *text)
+static void tcl_command_METHOD()
{
D
- QString myNs, myName;
+ QCString myNs, myName;
Entry *myEntryCl, *myEntry;
tcl_scan *myScan = tcl.scan.at(0);
@@ -1761,15 +1861,15 @@ D
myEntryCl->addSubEntry(tcl.entry_current);
tcl.fn.insert(myName,tcl.entry_current);
myEntry = tcl.entry_current;
- tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),text,
+ myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),
myNs, myEntryCl, myEntry);
}
//! Handle \c constructor statements inside class definitions.
-static void tcl_command_CONSTRUCTOR(const char *text)
+static void tcl_command_CONSTRUCTOR()
{
D
- QString myNs, myName;
+ QCString myNs, myName;
Entry *myEntryCl, *myEntry;
tcl_scan *myScan = tcl.scan.at(0);
@@ -1798,15 +1898,15 @@ D
myEntryCl->addSubEntry(tcl.entry_current);
myEntry = tcl.entry_current;
tcl.fn.insert(myName,myEntry);
- tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(4),text,
+ myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(4),
myNs, myEntryCl, myEntry);
}
//! Handle \c destructor statements inside class definitions.
-static void tcl_command_DESTRUCTOR(const char *text)
+static void tcl_command_DESTRUCTOR()
{
D
- QString myNs, myName;
+ QCString myNs, myName;
Entry *myEntryCl, *myEntry;
tcl_scan *myScan = tcl.scan.at(0);
@@ -1832,15 +1932,15 @@ D
myEntryCl->addSubEntry(tcl.entry_current);
myEntry = tcl.entry_current;
tcl.fn.insert(myName,myEntry);
- tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(2),text,
+ myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(2),
myNs, myEntryCl, myEntry);
}
//! Handle \c namespace statements.
-static void tcl_command_NAMESPACE(const char *text)
+static void tcl_command_NAMESPACE()
{
D
- QString myNs, myName, myStr;
+ QCString myNs, myName, myStr;
Entry *myEntryNs=NULL;
tcl_scan *myScan = tcl.scan.at(0);
@@ -1870,16 +1970,16 @@ D
{
myStr.append(*tcl.list_commandwords.at(i));
}
- tcl.word_is=STRING;
+ tcl.word_is=' ';
}
- tcl_scan_start(tcl.word_is,myStr,text, myName, NULL, NULL);
+ myScan = tcl_scan_start(tcl.word_is,myStr, myName, NULL, NULL);
}
//! Handle \c itcl::class statements.
-static void tcl_command_ITCL_CLASS(const char *text)
+static void tcl_command_ITCL_CLASS()
{
D
- QString myNs, myName, myStr;
+ QCString myNs, myName, myStr;
Entry *myEntryCl;
tcl_scan *myScan = tcl.scan.at(0);
@@ -1900,15 +2000,15 @@ D
tcl.entry_main->addSubEntry(tcl.entry_current);
tcl.cl.insert(myName,tcl.entry_current);
myEntryCl = tcl.entry_current;
- tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(4),text,
+ myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(4),
myName, myEntryCl, NULL);
}
//! Handle \c oo::class statements.
-static void tcl_command_OO_CLASS(const char *text)
+static void tcl_command_OO_CLASS()
{
D
- QString myNs, myName, myStr;
+ QCString myNs, myName, myStr;
Entry *myEntryNs, *myEntryCl;
tcl_scan *myScan = tcl.scan.at(0);
@@ -1932,15 +2032,15 @@ D
myEntryNs = tcl_entry_namespace(myName);
tcl.cl.insert(myName,tcl.entry_current);
myEntryCl = tcl.entry_current;
- tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),text,
+ myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),
myName, myEntryCl, NULL);
}
//! Handle \c oo::define statements.
-static void tcl_command_OO_DEFINE(const char *text)
+static void tcl_command_OO_DEFINE()
{
D
- QString myNs, myName, myStr;
+ QCString myNs, myName, myStr;
Entry *myEntryCl;
tcl_scan *myScan = tcl.scan.at(0);
@@ -1961,16 +2061,16 @@ D
{
myStr.append(*tcl.list_commandwords.at(i));
}
- tcl.word_is=STRING;
+ tcl.word_is=' ';
}
- tcl_scan_start(tcl.word_is,myStr,text,myName,myEntryCl,NULL);
+ myScan = tcl_scan_start(tcl.word_is,myStr,myName,myEntryCl,NULL);
}
//! Handle \c variable statements.
-static void tcl_command_VARIABLE(const char *text, int inclass)
+static void tcl_command_VARIABLE(int inclass)
{
D
- QString myNs, myName;
+ QCString myNs, myName;
Entry *myEntry;
tcl_scan *myScan = tcl.scan.at(0);
@@ -2006,7 +2106,6 @@ D
tcl_protection(tcl.entry_current);
myEntry->addSubEntry(tcl.entry_current);
tcl.entry_current = tcl_entry_new();
- tcl_codify("comment",text);
}
//! Handling of command parsing.
@@ -2043,6 +2142,7 @@ tcl_inf("<- %s\n",text);
tcl_err("what %d\n",what);
return;
}
+ QCString myText = text;
tcl_inf("->\n");
if (tcl.command==0)
{
@@ -2062,8 +2162,8 @@ tcl_inf("->\n");
if (tcl.list_commandwords.count() < 3)
{
- tcl_command_OTHER(text);
- goto command_end;
+ tcl_command_OTHER();
+ goto command_text;
}
// remove leading "::" and apply TCL_SUBST
if (myStr.left(2)=="::") myStr = myStr.mid(2);
@@ -2095,7 +2195,7 @@ tcl_inf("->\n");
if (tcl.list_commandwords.count()==1)
{
tcl_scan *myScan = tcl.scan.at(0);
- tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(0),text,
+ myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(0),
myScan->ns,myScan->entry_cl,myScan->entry_fn);
myProt = tcl.protection;
goto command_end;
@@ -2116,7 +2216,7 @@ tcl_inf("->\n");
tcl.list_commandwords.append("");
}
if (tcl.list_commandwords.count() != 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_PROC(text);
+ tcl_command_PROC();
goto command_end;
}
if (strcmp("method",myStr)==0)
@@ -2127,19 +2227,19 @@ tcl_inf("->\n");
tcl.list_commandwords.append("");
}
if (tcl.list_commandwords.count() != 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_METHOD(text);
+ tcl_command_METHOD();
goto command_end;
}
if (strcmp("constructor",myStr)==0)
{
if (tcl.list_commandwords.count() != 5) {myLine=__LINE__;goto command_warn;}
- tcl_command_CONSTRUCTOR(text);
+ tcl_command_CONSTRUCTOR();
goto command_end;
}
if (strcmp("destructor",myStr)==0)
{
if (tcl.list_commandwords.count() != 3) {myLine=__LINE__;goto command_warn;}
- tcl_command_DESTRUCTOR(text);
+ tcl_command_DESTRUCTOR();
goto command_end;
}
if (strcmp("namespace",myStr)==0)
@@ -2147,22 +2247,22 @@ tcl_inf("->\n");
if (strcmp("eval",*tcl.list_commandwords.at(2))==0)
{
if (tcl.list_commandwords.count() < 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_NAMESPACE(text);
+ tcl_command_NAMESPACE();
goto command_end;
}
- tcl_command_OTHER(text);
- goto command_end;
+ tcl_command_OTHER();
+ goto command_text;
}
if (strcmp("itcl::class",myStr)==0)
{
if (tcl.list_commandwords.count() != 5) {myLine=__LINE__;goto command_warn;}
- tcl_command_ITCL_CLASS(text);
+ tcl_command_ITCL_CLASS();
goto command_end;
}
if (strcmp("itcl::body",myStr)==0)
{
if (tcl.list_commandwords.count() != 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_METHOD(text);
+ tcl_command_METHOD();
goto command_end;
}
if (strcmp("oo::class",myStr)==0)
@@ -2170,16 +2270,16 @@ tcl_inf("->\n");
if (strcmp("create",*tcl.list_commandwords.at(2))==0)
{
if (tcl.list_commandwords.count() != 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_OO_CLASS(text);
+ tcl_command_OO_CLASS();
goto command_end;
}
- tcl_command_OTHER(text);
- goto command_end;
+ tcl_command_OTHER();
+ goto command_text;
}
if (strcmp("oo::define",myStr)==0)
{
if (tcl.list_commandwords.count() < 5) {myLine=__LINE__;goto command_warn;}
- tcl_command_OO_DEFINE(text);
+ tcl_command_OO_DEFINE();
goto command_end;
}
if (strcmp("variable",myStr)==0)
@@ -2187,8 +2287,8 @@ tcl_inf("->\n");
if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
if (tcl.scan.at(0)->entry_fn == NULL)
{// only parsed outside functions
- tcl_command_VARIABLE(text,tcl.scan.at(0)->entry_cl!=NULL&&tcl.scan.at(0)->entry_cl->name!="");
- goto command_end;
+ tcl_command_VARIABLE(tcl.scan.at(0)->entry_cl!=NULL&&tcl.scan.at(0)->entry_cl->name!="");
+ goto command_text;
}
}
if (strcmp("common",myStr)==0)
@@ -2196,8 +2296,8 @@ tcl_inf("->\n");
if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
if (tcl.scan.at(0)->entry_fn == NULL)
{// only parsed outside functions
- tcl_command_VARIABLE(text,0);
- goto command_end;
+ tcl_command_VARIABLE(0);
+ goto command_text;
}
}
if (strcmp("inherit",myStr)==0 || strcmp("superclass",myStr)==0)
@@ -2205,18 +2305,107 @@ tcl_inf("->\n");
if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
if (tcl.scan.at(0)->entry_cl!=NULL&&tcl.scan.at(0)->entry_cl->name!="")
{
- for (unsigned int i = 2; i < tcl.list_commandwords.count(); i++)
+ for (unsigned int i = 2; i < tcl.list_commandwords.count(); i = i + 2)
{
tcl.scan.at(0)->entry_cl->extends->append(new BaseInfo(*tcl.list_commandwords.at(i),Public,Normal));
}
}
+ goto command_end;
+ }
+ /*
+ * Start of internal tcl keywords
+ * Ready: if, for, foreach, while
+ * TODO: switch, eval, ?
+ */
+ if (strcmp("for",myStr)==0)
+ {
+ if (tcl.list_commandwords.count() != 9) {myLine=__LINE__;goto command_warn;}
+ tcl_command_FOR();
+ goto command_end;
}
- tcl_command_OTHER(text);
- goto command_end;
- command_warn:
+ if (strcmp("foreach",myStr)==0)
+ {
+ if (tcl.list_commandwords.count() < 7 || tcl.list_commandwords.count()%2==0) {myLine=__LINE__;goto command_warn;}
+ tcl_command_FOREACH();
+ goto command_end;
+ }
+ /*
+if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?
+ */
+ if (strcmp("if",myStr)==0 && tcl.list_commandwords.count() > 4)
+ {
+ QStringList myType;
+ myType << "keyword" << "NULL" << "script" << "NULL";
+ char myState='x';// last word: e'x'pr 't'hen 'b'ody 'e'lse else'i'f..
+ for (unsigned int i = 4; i < tcl.list_commandwords.count(); i = i + 2)
+ {
+ const char *myStr=*tcl.list_commandwords.at(i);
+ if (myState=='x')
+ {
+ if (strcmp("then",myStr)==0) {
+ myState='t';
+ myType << "keyword" << "NULL";
+ }
+ else
+ {
+ myState='b';
+ myType << "script" << "NULL";
+ }
+ }
+ else if (myState=='t')
+ {
+ myState='b';
+ myType << "script" << "NULL";
+ }
+ else if (myState=='b')
+ {
+ if (strcmp("elseif",myStr)==0) {
+ myState='i';
+ myType << "keyword" << "NULL";
+ }
+ else if (strcmp("else",myStr)==0 && i==tcl.list_commandwords.count()-3)
+ {
+ myState = 'b';
+ myType << "keyword" << "NULL" << "script";
+ i = tcl.list_commandwords.count();
+ }
+ else if (i==tcl.list_commandwords.count()-1)
+ {
+ myState = 'b';
+ myType << "script";
+ i = tcl.list_commandwords.count();
+ }
+ else
+ {
+ myLine=__LINE__;goto command_warn;
+ }
+ }
+ else if (myState=='i')
+ {
+ myState='x';
+ myType << "script" << "NULL";
+ }
+ }
+ if (myState != 'b') {myLine=__LINE__;goto command_warn;}
+ tcl_command_IF(myType);
+ goto command_end;
+ }
+ if (strcmp("while",myStr)==0)
+ {
+ if (tcl.list_commandwords.count() != 5) {myLine=__LINE__;goto command_warn;}
+ tcl_command_WHILE();
+ goto command_end;
+ }
+ tcl_command_OTHER();
+ goto command_text;
+ command_warn:// print warning message because of wrong used syntax
tcl_war("%d count=%d: %s\n",myLine,tcl.list_commandwords.count(),tcl.list_commandwords.join(" ").ascii());
- tcl_command_OTHER(text);
- command_end:
+ tcl_command_OTHER();
+ command_text:// print remaining text as comment
+ if (!myText.isEmpty()) tcl_codify("comment",myText);
+ myText = "";
+ command_end:// add remaining text to current context
+ if (!myText.isEmpty()) tcl.scan.at(0)->after << "comment" << myText;
tcl.list_commandwords.clear();
tcl.command = 0;
tcl.protection = myProt;
@@ -2250,7 +2439,7 @@ tcl_inf("TCL_SUBST: use '%s'\n",s);
if (tcl.input_string.at(tcl.input_string.length()-1) == '\n')
{
- tcl.input_string.at(tcl.input_string.length()-1) = 0x1A;
+ tcl.input_string[tcl.input_string.length()-1] = 0x1A;
}
else
{
@@ -2269,7 +2458,7 @@ tcl_inf("TCL_SUBST: use '%s'\n",s);
tcl.brace_level=0;
tcl.bracket_level=0;
tcl.bracket_quote=0;
- tcl.word_is=WORD;
+ tcl.word_is=' ';
tcl.string_command="";
tcl.string_commentline="";
tcl.string_commentcodify="";
@@ -2290,7 +2479,7 @@ tcl_inf("TCL_SUBST: use '%s'\n",s);
}
//! Start parsing.
-static void tcl_parse(const QString ns, const QString cls)
+static void tcl_parse(const QCString ns, const QCString cls)
{
tcl_scan *myScan;
@@ -2299,14 +2488,18 @@ static void tcl_parse(const QString ns, const QString cls)
tcl.entry_file->section = Entry::SOURCE_SEC;
tcl.entry_file->protection = Public;
tcl.entry_main->addSubEntry(tcl.entry_file);
+ Entry *myEntry=tcl_entry_new();
+ myEntry->name="";
+ tcl.entry_main->addSubEntry(myEntry);
+ tcl.ns.insert("::",myEntry);
tcl.entry_current = tcl_entry_new();
tclscanYYrestart( tclscanYYin );
BEGIN( TOP );
yylineno=1;
myScan = new tcl_scan;
- myScan->type=STRING;
- myScan->string_after="";
+ myScan->type[0]=' ';myScan->type[1]='\n';
+ myScan->after.clear();
myScan->line0=yylineno;
myScan->line1=yylineno;
myScan->buffer_state=YY_CURRENT_BUFFER;
@@ -2316,7 +2509,6 @@ static void tcl_parse(const QString ns, const QString cls)
tcl.entry_inside = tcl.entry_file;
myScan->entry_scan = tcl.entry_inside;
tcl.scan.insert(0,myScan);
-
tclscanYYlex();
tcl.scan.clear();
tcl.ns.clear();
@@ -2346,7 +2538,6 @@ tcl_inf("%s\n",fileName);
tcl.this_parser = this;
tcl.entry_main = root; /* toplevel entry */
tcl_parse("","");
-
groupLeaveFile(tcl.file_name,yylineno);
root->program.resize(0);
myFile.close();
@@ -2375,8 +2566,8 @@ void TclLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
if (input.length()<1) return;
tcl.input_string = input;
- QString myNs="";
- QString myCls="";
+ QCString myNs="";
+ QCString myCls="";
if (memberDef)
{
if (memberDef->getClassDef())
@@ -2415,7 +2606,6 @@ void TclLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
}
tcl_inf("%s (%d,%d) %d %d\n",myStr.ascii(),startLine,endLine,isExampleBlock,inlineFragment);
//tcl_inf("%s\n"input.data());
-
if (isExampleBlock)
{
tcl_codify(NULL,input);
diff --git a/src/textdocvisitor.h b/src/textdocvisitor.h
index 40fa612..5646064 100644
--- a/src/textdocvisitor.h
+++ b/src/textdocvisitor.h
@@ -126,6 +126,8 @@ class TextDocVisitor : public DocVisitor
void visitPost(DocCopy *) {}
void visitPre(DocText *) {}
void visitPost(DocText *) {}
+ void visitPre(DocHtmlBlockQuote *) {}
+ void visitPost(DocHtmlBlockQuote *) {}
private:
diff --git a/src/util.cpp b/src/util.cpp
index 1f54503..6addbc7 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -52,6 +52,7 @@
#include "parserintf.h"
#include "bufstr.h"
#include "image.h"
+#include "growbuf.h"
#define ENABLE_TRACINGSUPPORT 0
@@ -1539,43 +1540,18 @@ static bool findOperator2(const QCString &s,int i)
static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
-
-class StrBuf
-{
- public:
- StrBuf() : str(0), pos(0), len(0) {}
- ~StrBuf() { free(str); str=0; pos=0; len=0; }
- void clear() { pos=0; }
- void addChar(char c) { if (pos>=len) { len+=1024; str = (char*)realloc(str,len); }
- str[pos++]=c;
- }
- void addStr(const char *s) {
- int l=strlen(s);
- if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
- strcpy(&str[pos],s);
- pos+=l;
- }
- const char *get() { return str; }
- int getPos() const { return pos; }
- char at(int i) const { return str[i]; }
- private:
- char *str;
- int pos;
- int len;
-};
-
// Note: this function is not reentrant due to the use of static buffer!
QCString removeRedundantWhiteSpace(const QCString &s)
{
static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT");
if (s.isEmpty()) return s;
- static StrBuf strBuf;
+ static GrowBuf growBuf;
//int resultLen = 1024;
//int resultPos = 0;
//QCString result(resultLen);
- // we use strBuf.addChar(c) instead of result+=c to
+ // we use growBuf.addChar(c) instead of result+=c to
// improve the performance of this function
- strBuf.clear();
+ growBuf.clear();
uint i;
uint l=s.length();
uint csp=0;
@@ -1610,14 +1586,14 @@ nextChar:
if (c=='"') // quoted string
{
i++;
- strBuf.addChar(c);
+ growBuf.addChar(c);
while (i<l)
{
char cc=s.at(i);
- strBuf.addChar(cc);
+ growBuf.addChar(cc);
if (cc=='\\') // escaped character
{
- strBuf.addChar(s.at(i+1));
+ growBuf.addChar(s.at(i+1));
i+=2;
}
else if (cc=='"') // end of string
@@ -1631,24 +1607,24 @@ nextChar:
(i<8 || !findOperator(s,i)) // string in front is not "operator"
)
{
- strBuf.addChar('<');
- strBuf.addChar(' ');
+ growBuf.addChar('<');
+ growBuf.addChar(' ');
}
else if (i>0 && c=='>' && // current char is a >
(isId(s.at(i-1)) || isspace((uchar)s.at(i-1)) || s.at(i-1)=='*' || s.at(i-1)=='&') && // prev char is an id char or space
(i<8 || !findOperator(s,i)) // string in front is not "operator"
)
{
- strBuf.addChar(' ');
- strBuf.addChar('>');
+ growBuf.addChar(' ');
+ growBuf.addChar('>');
}
else if (i>0 && c==',' && !isspace((uchar)s.at(i-1))
&& ((i<l-1 && isId(s.at(i+1)))
|| (i<l-2 && s.at(i+1)=='$' && isId(s.at(i+2))) // for PHP
|| (i<l-3 && s.at(i+1)=='&' && s.at(i+2)=='$' && isId(s.at(i+3))))) // for PHP
{
- strBuf.addChar(',');
- strBuf.addChar(' ');
+ growBuf.addChar(',');
+ growBuf.addChar(' ');
}
else if (i>0 &&
((isId(s.at(i)) && s.at(i-1)==')') ||
@@ -1656,8 +1632,8 @@ nextChar:
)
)
{
- strBuf.addChar(' ');
- strBuf.addChar(s.at(i));
+ growBuf.addChar(' ');
+ growBuf.addChar(s.at(i));
}
else if (c=='t' && csp==5 /*&& (i<5 || !isId(s.at(i-5)))*/ &&
!(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ ||
@@ -1668,16 +1644,16 @@ nextChar:
)
// prevent const ::A from being converted to const::A
{
- strBuf.addChar('t');
- strBuf.addChar(' ');
+ growBuf.addChar('t');
+ growBuf.addChar(' ');
if (s.at(i+1)==' ') i++;
csp=0;
}
else if (c==':' && csp==6 /*&& (i<6 || !isId(s.at(i-6)))*/)
// replace const::A by const ::A
{
- strBuf.addChar(' ');
- strBuf.addChar(':');
+ growBuf.addChar(' ');
+ growBuf.addChar(':');
csp=0;
}
else if (c=='l' && vsp==7 /*&& (i<7 || !isId(s.at(i-7)))*/ &&
@@ -1689,16 +1665,16 @@ nextChar:
)
// prevent virtual ::A from being converted to virtual::A
{
- strBuf.addChar('l');
- strBuf.addChar(' ');
+ growBuf.addChar('l');
+ growBuf.addChar(' ');
if (s.at(i+1)==' ') i++;
vsp=0;
}
else if (c==':' && vsp==8 /*&& (i<8 || !isId(s.at(i-8)))*/)
// replace virtual::A by virtual ::A
{
- strBuf.addChar(' ');
- strBuf.addChar(':');
+ growBuf.addChar(' ');
+ growBuf.addChar(':');
vsp=0;
}
else if (!isspace((uchar)c) || // not a space
@@ -1712,28 +1688,28 @@ nextChar:
if (c=='*' || c=='&' || c=='@' || c=='$')
{
//uint rl=result.length();
- uint rl=strBuf.getPos();
- if ((rl>0 && (isId(strBuf.at(rl-1)) || strBuf.at(rl-1)=='>')) &&
+ uint rl=growBuf.getPos();
+ if ((rl>0 && (isId(growBuf.at(rl-1)) || growBuf.at(rl-1)=='>')) &&
((c!='*' && c!='&') || !findOperator2(s,i)) // avoid splitting operator* and operator->* and operator&
)
{
- strBuf.addChar(' ');
+ growBuf.addChar(' ');
}
}
- strBuf.addChar(c);
+ growBuf.addChar(c);
if (cliSupport &&
(c=='^' || c=='%') && i>1 && isId(s.at(i-1)) &&
!findOperator(s,i)
)
{
- strBuf.addChar(' '); // C++/CLI: Type^ name and Type% name
+ growBuf.addChar(' '); // C++/CLI: Type^ name and Type% name
}
}
}
//printf("removeRedundantWhiteSpace(`%s')=`%s'\n",s.data(),result.data());
- strBuf.addChar(0);
+ growBuf.addChar(0);
//result.resize(resultPos);
- return strBuf.get();
+ return growBuf.get();
}
bool rightScopeMatch(const QCString &scope, const QCString &name)
@@ -4080,17 +4056,17 @@ bool getDefs(const QCString &scName,const QCString &memberName,
/*!
* Searches for a scope definition given its name as a string via parameter
- * `scope'.
+ * `scope`.
*
- * The parameter `docScope' is a string representing the name of the scope in
- * which the `scope' string was found.
+ * The parameter `docScope` is a string representing the name of the scope in
+ * which the `scope` string was found.
*
* The function returns TRUE if the scope is known and documented or
* FALSE if it is not.
- * If TRUE is returned exactly one of the parameter `cd', `nd'
+ * If TRUE is returned exactly one of the parameter `cd`, `nd`
* will be non-zero:
- * - if `cd' is non zero, the scope was a class pointed to by cd.
- * - if `nd' is non zero, the scope was a namespace pointed to by nd.
+ * - if `cd` is non zero, the scope was a class pointed to by cd.
+ * - if `nd` is non zero, the scope was a namespace pointed to by nd.
*/
static bool getScopeDefs(const char *docScope,const char *scope,
ClassDef *&cd, NamespaceDef *&nd)
@@ -4818,41 +4794,41 @@ bool hasVisibleRoot(BaseClassList *bcl)
//----------------------------------------------------------------------
-// note that this function is not reentrant due to the use of static strBuf!
+// note that this function is not reentrant due to the use of static growBuf!
QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore)
{
static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES");
- static StrBuf strBuf;
- strBuf.clear();
+ static GrowBuf growBuf;
+ growBuf.clear();
char c;
const char *p=name;
while ((c=*p++)!=0)
{
switch(c)
{
- case '_': if (allowUnderscore) strBuf.addChar('_'); else strBuf.addStr("__"); break;
- case '-': strBuf.addChar('-'); break;
- case ':': strBuf.addStr("_1"); break;
- case '/': strBuf.addStr("_2"); break;
- case '<': strBuf.addStr("_3"); break;
- case '>': strBuf.addStr("_4"); break;
- case '*': strBuf.addStr("_5"); break;
- case '&': strBuf.addStr("_6"); break;
- case '|': strBuf.addStr("_7"); break;
- case '.': if (allowDots) strBuf.addChar('.'); else strBuf.addStr("_8"); break;
- case '!': strBuf.addStr("_9"); break;
- case ',': strBuf.addStr("_00"); break;
- case ' ': strBuf.addStr("_01"); break;
- case '{': strBuf.addStr("_02"); break;
- case '}': strBuf.addStr("_03"); break;
- case '?': strBuf.addStr("_04"); break;
- case '^': strBuf.addStr("_05"); break;
- case '%': strBuf.addStr("_06"); break;
- case '(': strBuf.addStr("_07"); break;
- case ')': strBuf.addStr("_08"); break;
- case '+': strBuf.addStr("_09"); break;
- case '=': strBuf.addStr("_0A"); break;
- case '$': strBuf.addStr("_0B"); break;
+ case '_': if (allowUnderscore) growBuf.addChar('_'); else growBuf.addStr("__"); break;
+ case '-': growBuf.addChar('-'); break;
+ case ':': growBuf.addStr("_1"); break;
+ case '/': growBuf.addStr("_2"); break;
+ case '<': growBuf.addStr("_3"); break;
+ case '>': growBuf.addStr("_4"); break;
+ case '*': growBuf.addStr("_5"); break;
+ case '&': growBuf.addStr("_6"); break;
+ case '|': growBuf.addStr("_7"); break;
+ case '.': if (allowDots) growBuf.addChar('.'); else growBuf.addStr("_8"); break;
+ case '!': growBuf.addStr("_9"); break;
+ case ',': growBuf.addStr("_00"); break;
+ case ' ': growBuf.addStr("_01"); break;
+ case '{': growBuf.addStr("_02"); break;
+ case '}': growBuf.addStr("_03"); break;
+ case '?': growBuf.addStr("_04"); break;
+ case '^': growBuf.addStr("_05"); break;
+ case '%': growBuf.addStr("_06"); break;
+ case '(': growBuf.addStr("_07"); break;
+ case ')': growBuf.addStr("_08"); break;
+ case '+': growBuf.addStr("_09"); break;
+ case '=': growBuf.addStr("_0A"); break;
+ case '$': growBuf.addStr("_0B"); break;
default:
if (c<0)
{
@@ -4864,22 +4840,22 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor
ids[2]=map[id>>4];
ids[3]=map[id&0xF];
ids[4]=0;
- strBuf.addStr(ids);
+ growBuf.addStr(ids);
}
else if (caseSenseNames || !isupper(c))
{
- strBuf.addChar(c);
+ growBuf.addChar(c);
}
else
{
- strBuf.addChar('_');
- strBuf.addChar(tolower(c));
+ growBuf.addChar('_');
+ growBuf.addChar(tolower(c));
}
break;
}
}
- strBuf.addChar(0);
- return strBuf.get();
+ growBuf.addChar(0);
+ return growBuf.get();
}
/*! This function determines the file name on disk of an item
@@ -5216,8 +5192,8 @@ QCString stripScope(const char *name)
/*! Converts a string to an XML-encoded string */
QCString convertToXML(const char *s)
{
- static StrBuf strBuf;
- strBuf.clear();
+ static GrowBuf growBuf;
+ growBuf.clear();
if (s==0) return "";
const char *p=s;
char c;
@@ -5225,23 +5201,23 @@ QCString convertToXML(const char *s)
{
switch (c)
{
- case '<': strBuf.addStr("&lt;"); break;
- case '>': strBuf.addStr("&gt;"); break;
- case '&': strBuf.addStr("&amp;"); break;
- case '\'': strBuf.addStr("&apos;"); break;
- case '"': strBuf.addStr("&quot;"); break;
- default: strBuf.addChar(c); break;
+ case '<': growBuf.addStr("&lt;"); break;
+ case '>': growBuf.addStr("&gt;"); break;
+ case '&': growBuf.addStr("&amp;"); break;
+ case '\'': growBuf.addStr("&apos;"); break;
+ case '"': growBuf.addStr("&quot;"); break;
+ default: growBuf.addChar(c); break;
}
}
- strBuf.addChar(0);
- return strBuf.get();
+ growBuf.addChar(0);
+ return growBuf.get();
}
/*! Converts a string to a HTML-encoded string */
QCString convertToHtml(const char *s,bool keepEntities)
{
- static StrBuf strBuf;
- strBuf.clear();
+ static GrowBuf growBuf;
+ growBuf.clear();
if (s==0) return "";
const char *p=s;
char c;
@@ -5249,8 +5225,8 @@ QCString convertToHtml(const char *s,bool keepEntities)
{
switch (c)
{
- case '<': strBuf.addStr("&lt;"); break;
- case '>': strBuf.addStr("&gt;"); break;
+ case '<': growBuf.addStr("&lt;"); break;
+ case '>': growBuf.addStr("&gt;"); break;
case '&': if (keepEntities)
{
const char *e=p;
@@ -5262,32 +5238,32 @@ QCString convertToHtml(const char *s,bool keepEntities)
if (ce==';') // found end of an entity
{
// copy entry verbatim
- strBuf.addChar(c);
- while (p<e) strBuf.addChar(*p++);
+ growBuf.addChar(c);
+ while (p<e) growBuf.addChar(*p++);
}
else
{
- strBuf.addStr("&amp;");
+ growBuf.addStr("&amp;");
}
}
else
{
- strBuf.addStr("&amp;");
+ growBuf.addStr("&amp;");
}
break;
- case '\'': strBuf.addStr("&#39;"); break;
- case '"': strBuf.addStr("&quot;"); break;
- default: strBuf.addChar(c); break;
+ case '\'': growBuf.addStr("&#39;"); break;
+ case '"': growBuf.addStr("&quot;"); break;
+ default: growBuf.addChar(c); break;
}
}
- strBuf.addChar(0);
- return strBuf.get();
+ growBuf.addChar(0);
+ return growBuf.get();
}
QCString convertToJSString(const char *s)
{
- static StrBuf strBuf;
- strBuf.clear();
+ static GrowBuf growBuf;
+ growBuf.clear();
if (s==0) return "";
const char *p=s;
char c;
@@ -5295,13 +5271,13 @@ QCString convertToJSString(const char *s)
{
switch (c)
{
- case '"': strBuf.addStr("\\\""); break;
- case '\\': strBuf.addStr("\\\\"); break;
- default: strBuf.addChar(c); break;
+ case '"': growBuf.addStr("\\\""); break;
+ case '\\': growBuf.addStr("\\\\"); break;
+ default: growBuf.addChar(c); break;
}
}
- strBuf.addChar(0);
- return strBuf.get();
+ growBuf.addChar(0);
+ return growBuf.get();
}
@@ -5879,7 +5855,8 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
const char *fileName,int startLine,
const QList<ListItemInfo> *sli,
GroupDef *gd,
- TagInfo *tagInfo
+ TagInfo *tagInfo,
+ SrcLangExt lang
)
{
PageDef *pd=0;
@@ -5902,6 +5879,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
pd=new PageDef(fileName,startLine,baseName,doc,title);
pd->setRefItems(sli);
+ pd->setLanguage(lang);
if (tagInfo)
{
@@ -6269,25 +6247,22 @@ static struct Lang2ExtMap
g_lang2extMap[] =
{
// language parser parser option
- { "idl", "c", SrcLangExt_IDL },
- { "java", "c", SrcLangExt_Java },
- { "javascript", "c", SrcLangExt_JS },
- { "csharp", "c", SrcLangExt_CSharp },
- { "d", "c", SrcLangExt_D },
- { "php", "c", SrcLangExt_PHP },
- { "objective-c", "c", SrcLangExt_ObjC },
- { "c", "c", SrcLangExt_Cpp },
- { "c++", "c", SrcLangExt_Cpp },
- { "python", "python", SrcLangExt_Python },
- { "fortran", "fortran", SrcLangExt_Fortran },
- { "vhdl", "vhdl", SrcLangExt_VHDL },
- { "vhd", "vhd", SrcLangExt_VHDL },
- { "ucf", "vhd", SrcLangExt_VHDL },
- { "qsf", "vhd", SrcLangExt_VHDL },
-
- { "dbusxml", "dbusxml", SrcLangExt_XML },
- { "tcl", "tcl", SrcLangExt_Tcl },
- { 0, 0, (SrcLangExt)0 }
+ { "idl", "c", SrcLangExt_IDL },
+ { "java", "c", SrcLangExt_Java },
+ { "javascript", "c", SrcLangExt_JS },
+ { "csharp", "c", SrcLangExt_CSharp },
+ { "d", "c", SrcLangExt_D },
+ { "php", "c", SrcLangExt_PHP },
+ { "objective-c", "c", SrcLangExt_ObjC },
+ { "c", "c", SrcLangExt_Cpp },
+ { "c++", "c", SrcLangExt_Cpp },
+ { "python", "python", SrcLangExt_Python },
+ { "fortran", "fortran", SrcLangExt_Fortran },
+ { "vhdl", "vhdl", SrcLangExt_VHDL },
+ { "dbusxml", "dbusxml", SrcLangExt_XML },
+ { "tcl", "tcl", SrcLangExt_Tcl },
+ { "md", "md", SrcLangExt_Markdown },
+ { 0, 0, (SrcLangExt)0 }
};
bool updateLanguageMapping(const QCString &extension,const QCString &language)
@@ -6328,31 +6303,33 @@ bool updateLanguageMapping(const QCString &extension,const QCString &language)
void initDefaultExtensionMapping()
{
g_extLookup.setAutoDelete(TRUE);
- updateLanguageMapping(".idl", "idl");
- updateLanguageMapping(".ddl", "idl");
- updateLanguageMapping(".odl", "idl");
- updateLanguageMapping(".java", "java");
- updateLanguageMapping(".as", "javascript");
- updateLanguageMapping(".js", "javascript");
- updateLanguageMapping(".cs", "csharp");
- updateLanguageMapping(".d", "d");
- updateLanguageMapping(".php", "php");
- updateLanguageMapping(".php4", "php");
- updateLanguageMapping(".php5", "php");
- updateLanguageMapping(".inc", "php");
- updateLanguageMapping(".phtml", "php");
- updateLanguageMapping(".m", "objective-c");
- updateLanguageMapping(".M", "objective-c");
- updateLanguageMapping(".mm", "objective-c");
- updateLanguageMapping(".py", "python");
- updateLanguageMapping(".f", "fortran");
- updateLanguageMapping(".for", "fortran");
- updateLanguageMapping(".f90", "fortran");
- updateLanguageMapping(".vhd", "vhdl");
- updateLanguageMapping(".vhdl", "vhdl");
- updateLanguageMapping(".tcl", "tcl");
- updateLanguageMapping(".ucf", "vhdl");
- updateLanguageMapping(".qsf", "vhdl");
+ updateLanguageMapping(".idl", "idl");
+ updateLanguageMapping(".ddl", "idl");
+ updateLanguageMapping(".odl", "idl");
+ updateLanguageMapping(".java", "java");
+ updateLanguageMapping(".as", "javascript");
+ updateLanguageMapping(".js", "javascript");
+ updateLanguageMapping(".cs", "csharp");
+ updateLanguageMapping(".d", "d");
+ updateLanguageMapping(".php", "php");
+ updateLanguageMapping(".php4", "php");
+ updateLanguageMapping(".php5", "php");
+ updateLanguageMapping(".inc", "php");
+ updateLanguageMapping(".phtml", "php");
+ updateLanguageMapping(".m", "objective-c");
+ updateLanguageMapping(".M", "objective-c");
+ updateLanguageMapping(".mm", "objective-c");
+ updateLanguageMapping(".py", "python");
+ updateLanguageMapping(".f", "fortran");
+ updateLanguageMapping(".for", "fortran");
+ updateLanguageMapping(".f90", "fortran");
+ updateLanguageMapping(".vhd", "vhdl");
+ updateLanguageMapping(".vhdl", "vhdl");
+ updateLanguageMapping(".tcl", "tcl");
+ updateLanguageMapping(".ucf", "vhdl");
+ updateLanguageMapping(".qsf", "vhdl");
+ updateLanguageMapping(".md", "md");
+ updateLanguageMapping(".markdown", "md");
//updateLanguageMapping(".xml", "dbusxml");
}
@@ -7239,3 +7216,4 @@ QCString correctURL(const QCString &url,const QCString &relPath)
return result;
}
+//---------------------------------------------------------------------------
diff --git a/src/util.h b/src/util.h
index f99d7a6..9bc235c 100644
--- a/src/util.h
+++ b/src/util.h
@@ -89,20 +89,21 @@ class TextGeneratorOLImpl : public TextGeneratorIntf
enum SrcLangExt
{
- SrcLangExt_Unknown = 0x0000,
- SrcLangExt_IDL = 0x0008,
- SrcLangExt_Java = 0x0010,
- SrcLangExt_CSharp = 0x0020,
- SrcLangExt_D = 0x0040,
- SrcLangExt_PHP = 0x0080,
- SrcLangExt_ObjC = 0x0100,
- SrcLangExt_Cpp = 0x0200,
- SrcLangExt_JS = 0x0400,
- SrcLangExt_Python = 0x0800,
- SrcLangExt_Fortran = 0x1000,
- SrcLangExt_VHDL = 0x2000,
- SrcLangExt_XML = 0x4000,
- SrcLangExt_Tcl = 0x8000
+ SrcLangExt_Unknown = 0x00000,
+ SrcLangExt_IDL = 0x00008,
+ SrcLangExt_Java = 0x00010,
+ SrcLangExt_CSharp = 0x00020,
+ SrcLangExt_D = 0x00040,
+ SrcLangExt_PHP = 0x00080,
+ SrcLangExt_ObjC = 0x00100,
+ SrcLangExt_Cpp = 0x00200,
+ SrcLangExt_JS = 0x00400,
+ SrcLangExt_Python = 0x00800,
+ SrcLangExt_Fortran = 0x01000,
+ SrcLangExt_VHDL = 0x02000,
+ SrcLangExt_XML = 0x04000,
+ SrcLangExt_Tcl = 0x08000,
+ SrcLangExt_Markdown = 0x10000
};
QCString langToString(SrcLangExt lang);
@@ -306,7 +307,8 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
const char *fileName,int startLine,
const QList<ListItemInfo> *sli,
GroupDef *gd=0,
- TagInfo *tagInfo=0
+ TagInfo *tagInfo=0,
+ SrcLangExt lang=SrcLangExt_Unknown
);
QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore=FALSE);
@@ -415,5 +417,7 @@ QCString extractBlock(const QCString text,const QCString marker);
QCString correctURL(const QCString &url,const QCString &relPath);
+QCString processMarkup(const QCString &s);
+
#endif
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index 4500140..9aaeb02 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -451,7 +451,14 @@ static void generateFuncLink(CodeOutputInterface &ol,MemberDef* mdef)
static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName)
{
- if (clName.isEmpty() || memberName.isEmpty()) return;
+ if (memberName.isEmpty()) return;
+ if (clName.isEmpty())
+ {
+ codifyLines(memberName.data());
+
+ return;
+ }
+
QCString className=clName;
MemberDef *md=0;
@@ -826,7 +833,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
cc=t1.at(index);
}
- QCString s1=(QCString)ql[0];
+ QCString s1=t1;
s1=s1.stripWhiteSpace();
// if (!g_PortMapComp.isEmpty())
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index 06a5c8c..43f8054 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -3,8 +3,8 @@
* Copyright (C) 1997-2010 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
+ * 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.
*
@@ -16,7 +16,7 @@
* Parser for VHDL subset
* written by M. Kreis
* supports VHDL-87/93/2002
- * does not support VHDL-AMS
+ * does not support VHDL-AMS
******************************************************************************/
// global includes
@@ -49,21 +49,21 @@
#define theTranslator_vhdlType VhdlDocGen::trVhdlType
-static QDict<QCString> g_vhdlKeyDict0(17,FALSE);
-static QDict<QCString> g_vhdlKeyDict1(17,FALSE);
+static QDict<QCString> g_vhdlKeyDict0(17,FALSE);
+static QDict<QCString> g_vhdlKeyDict1(17,FALSE);
static QDict<QCString> g_vhdlKeyDict2(17,FALSE);
static QDict<QCString> g_xilinxUcfDict(17,FALSE);
static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCString & fileName,QCString & brief);
static void writeUCFLink(const MemberDef* mdef,OutputList &ol);
-static void assignConfiguration(ConfNode* ,QCString);
+static void assignConfiguration(ConfNode* ,QCString);
static void assignBinding(ConfNode* conf,QCString label);
static void addInstance(ClassDef* entity, ClassDef* arch, ClassDef *inst,Entry *cur,ClassDef* archBind=NULL);
#if 0
static ConfNode* findConfiguration(QCString config)
-{
+{
QList<ConfNode> confList= getVhdlConfiguration();
uint size=confList.count();
if (size==0) return NULL;
@@ -72,7 +72,7 @@ static ConfNode* findConfiguration(QCString config)
{
ConfNode* conf= (ConfNode *)confList.at(i);
QCString entity=VhdlDocGen::getIndexWord(conf->confVhdl.data(),1);
- if (entity==config)
+ if (entity==config)
{
return conf;
}
@@ -92,10 +92,10 @@ VhdlDocGen::~VhdlDocGen()
void VhdlDocGen::init()
{
-
+
// vhdl keywords inlcuded VHDL 2008
-const char* g_vhdlKeyWordMap0[] =
-{
+const char* g_vhdlKeyWordMap0[] =
+{
"abs","access","after","alias","all","and","architecture","array","assert","assume","assume_guarantee","attribute",
"begin","block","body","buffer","bus",
"case","component","configuration","constant","context","cover",
@@ -116,19 +116,19 @@ const char* g_vhdlKeyWordMap0[] =
"variable","vmode","vprop","vunit",
"wait","when","while","with",
"xor","xnor",
- 0
+ 0
};
-
+
// type
-const char* g_vhdlKeyWordMap1[] =
-{
+const char* g_vhdlKeyWordMap1[] =
+{
"natural","unsigned","signed","string","boolean", "bit","bit_vector","character",
"std_ulogic","std_ulogic_vector","std_logic","std_logic_vector","integer",
"real","float","ufixed","sfixed","time",0
};
// logic
-const char* g_vhdlKeyWordMap2[] =
+const char* g_vhdlKeyWordMap2[] =
{
"abs","and","or","not","mod", "xor","rem","xnor","ror","rol","sla",
"sll",0
@@ -166,8 +166,8 @@ const char* g_vhdlKeyWordMap2[] =
}// buildKeyMap
/*!
- * returns the color of a keyword
- */
+ * returns the color of a keyword
+ */
QCString* VhdlDocGen::findKeyWord(const QCString& word)
{
@@ -203,7 +203,7 @@ ClassDef *VhdlDocGen::getClass(const char *name)
{
if (name==0 || name[0]=='\0') return 0;
- ClassDef *cd=0;
+ ClassDef *cd=0;
QCString temp(name);
//temp=temp.lower();
temp=temp.stripWhiteSpace();
@@ -225,7 +225,7 @@ ClassDef* VhdlDocGen::getPackageName(const QCString & name)
MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& memName)
{
- QDict<QCString> packages(17,FALSE);
+ QDict<QCString> packages(17,FALSE);
packages.setAutoDelete(TRUE);
ClassDef* cd;
MemberDef *mdef=0;
@@ -239,16 +239,16 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::pubMethods);
if (mdef) return mdef;
- // nothing found so far
+ // nothing found so far
// if we are an architecture or package body search in entitiy
- if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
+ if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
{
Definition *d = cd->getOuterScope();
// searching upper/lower case names
- QCString tt=d->name();
+ QCString tt=d->name();
ClassDef *ecd =getClass(tt);
if (!ecd)
{
@@ -258,7 +258,7 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
if (!ecd)
{
tt=tt.lower();
- ecd =getClass(tt);
+ ecd =getClass(tt);
}
if (ecd) //d && d->definitionType()==Definition::TypeClass)
@@ -272,10 +272,10 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
//cd=getClass(getClassName(cd));
//if (!cd) return 0;
}
- // nothing found , so we are now searching all included packages
+ // nothing found , so we are now searching all included packages
VhdlDocGen::findAllPackages(className,packages);
//cd=getClass(className.data());
- if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
+ if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
{
Definition *d = cd->getOuterScope();
@@ -290,12 +290,12 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
if (!ecd)
{
tt=tt.lower();
- ecd =getClass(tt);
+ ecd =getClass(tt);
}
if (ecd) //d && d->definitionType()==Definition::TypeClass)
{
- VhdlDocGen::findAllPackages(ecd->className(),packages);
+ VhdlDocGen::findAllPackages(ecd->className(),packages);
}
}
@@ -314,11 +314,11 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
if (!cd)
{
*curString=curString->lower();
- cd=VhdlDocGen::getPackageName(*curString);
+ cd=VhdlDocGen::getPackageName(*curString);
}
}
if (cd)
- {
+ {
mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::variableMembers);
if (mdef) return mdef;
mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::pubMethods);
@@ -335,7 +335,7 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberList::ListType type)
{
- // return cd->getMemberByName(key);//does not work
+ // return cd->getMemberByName(key);//does not work
MemberDef *md=0;
MemberList *ml= cd->getMemberList(type);
@@ -349,7 +349,7 @@ MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberList
{
return md;
}
- }
+ }
return 0;
}//findMemberDef
@@ -362,7 +362,7 @@ void VhdlDocGen::findAllPackages(const QCString& className,QDict<QCString>& qdic
ClassDef *cdef=getClass(className);
if (cdef)
{
- MemberList *mem=cdef->getMemberList(MemberList::variableMembers);
+ MemberList *mem=cdef->getMemberList(MemberList::variableMembers);
MemberDef *md;
if (mem)
@@ -377,8 +377,8 @@ void VhdlDocGen::findAllPackages(const QCString& className,QDict<QCString>& qdic
QCString p(md->name().data());
//p=p.lower();
ClassDef* cd=VhdlDocGen::getPackageName(*temp1);
- if (cd)
- {
+ if (cd)
+ {
QCString *ss=qdict.find(*temp1);
if (ss==0)
{
@@ -414,7 +414,7 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql,
else
funcType=VhdlDocGen::FUNCTION;
- MemberList *mem=cdef->getMemberList(MemberList::pubMethods);
+ MemberList *mem=cdef->getMemberList(MemberList::pubMethods);
if (mem)
{
@@ -456,15 +456,15 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql,
} // for
if (equ==0) return mdef;
}//if
- }//for
- }//if
+ }//for
+ }//if
return mdef;
} //findFunction
-/*!
+/*!
* returns the class title+ref
*/
@@ -489,13 +489,13 @@ QCString VhdlDocGen::getClassName(const ClassDef* cd)
if (cd==0) return "";
if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
- {
+ {
temp=cd->name();
temp.stripPrefix("_");
return temp;
- }
+ }
//if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS)
- //{
+ //{
// QStringList qlist=QStringList::split("-",cd->className(),FALSE);
// if (qlist.count()>1)
// return (QCString)qlist[1];
@@ -504,7 +504,7 @@ QCString VhdlDocGen::getClassName(const ClassDef* cd)
return substitute(cd->className(),"::",".");
}
-/*!
+/*!
* writes an inline link form entity|package to architecture|package body and vice verca
*/
@@ -524,22 +524,22 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol)
type+=theTranslator_vhdlType(VhdlDocGen::PACKAGE,TRUE);
else if (ii==VhdlDocGen::PACKAGE)
type+=theTranslator_vhdlType(VhdlDocGen::PACKAGE_BODY,TRUE);
- else
+ else
type+="";
- //type=type.lower();
+ //type=type.lower();
type+=" >> ";
- ol.disable(OutputGenerator::RTF);
+ ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
ol.lineBreak();
ol.lineBreak();
- if (ii==VhdlDocGen::PACKAGE_BODY)
+ if (ii==VhdlDocGen::PACKAGE_BODY)
{
nn.stripPrefix("_");
cd=getClass(nn.data());
}
- else if (ii==VhdlDocGen::PACKAGE)
+ else if (ii==VhdlDocGen::PACKAGE)
{
nn.prepend("_");
cd=getClass(nn.data());
@@ -549,11 +549,11 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol)
QStringList qlist=QStringList::split("-",nn,FALSE);
nn=qlist[1];
cd=VhdlDocGen::getClass(nn.data());
- }
+ }
QCString opp;
if (ii==VhdlDocGen::ENTITY)
- {
+ {
VhdlDocGen::findAllArchitectures(ql,cd);
int j=ql.count();
for (int i=0;i<j;i++)
@@ -567,10 +567,10 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol)
ClassDef*cc = getClass(temp->data());
if (cc)
{
- VhdlDocGen::writeVhdlLink(cc,ol,type,s2,s1);
+ VhdlDocGen::writeVhdlLink(cc,ol,type,s2,s1);
}
- }
- }
+ }
+ }
else
{
VhdlDocGen::writeVhdlLink(cd,ol,type,nn,opp);
@@ -595,12 +595,12 @@ void VhdlDocGen::findAllArchitectures(QList<QCString>& qll,const ClassDef *cd)
{
QStringList ql=QStringList::split("-",jj,FALSE);
QCString temp=(QCString)ql[1];
- if (stricmp(cd->className().data(),temp.data())==0)
+ if (stricmp(cd->className().data(),temp.data())==0)
{
QCString *cl=new QCString(jj.data());
qll.insert(0,cl);
}
- }
+ }
}// for
}//findAllArchitectures
@@ -617,7 +617,7 @@ ClassDef* VhdlDocGen::findArchitecture(const ClassDef *cd)
if (ql.count()>1)
{
if ((QCString)ql[0]==nn )
- {
+ {
return citer;
}
}
@@ -625,7 +625,7 @@ ClassDef* VhdlDocGen::findArchitecture(const ClassDef *cd)
return 0;
}
/*
- * writes the link entity >> .... or architecture >> ...
+ * writes the link entity >> .... or architecture >> ...
*/
void VhdlDocGen::writeVhdlLink(const ClassDef* ccd ,OutputList& ol,QCString& type,QCString& nn,QCString& behav)
@@ -638,7 +638,7 @@ void VhdlDocGen::writeVhdlLink(const ClassDef* ccd ,OutputList& ol,QCString& typ
nn.stripPrefix("_");
ol.writeObjectLink(ccd->getReference(),ccd->getOutputFileBase(),0,nn.data());
- if (!behav.isEmpty())
+ if (!behav.isEmpty())
{
behav.prepend(" ");
ol.startBold();
@@ -659,7 +659,7 @@ bool VhdlDocGen::compareString(const QCString& s1,const QCString& s2)
/*!
- * strips the "--" prefixes of vhdl comments
+ * strips the "--" prefixes of vhdl comments
*/
void VhdlDocGen::prepareComment(QCString& qcs)
{
@@ -667,7 +667,7 @@ void VhdlDocGen::prepareComment(QCString& qcs)
const char* s="--!";
//const char *start="--!{";
//const char *end="--!}";
- int index=0;
+ int index=0;
while (TRUE)
{
@@ -699,24 +699,24 @@ void VhdlDocGen::parseFuncProto(const char* text,QList<Argument>& qlist,
index=s1.find("(");
end=s1.findRev(")");
- if ((end-index)>0)
+ if ((end-index)>0)
{
QCString tt=s1.mid(index,(end-index+1));
temp=s1.mid(index+1,(end-index-1));
//getFuncParams(qlist,temp);
- }
+ }
if (doc)
{
name=s1.left(index);
name=name.stripWhiteSpace();
- if ((end-index)>0)
- {
+ if ((end-index)>0)
+ {
ret="function";
- }
+ }
return;
}
else
- {
+ {
QCString s1(text);
s1=s1.stripWhiteSpace();
int i=s1.find("(",0,FALSE);
@@ -776,7 +776,7 @@ QCString VhdlDocGen::trTypeString(int type)
{
switch(type)
{
- case VhdlDocGen::LIBRARY: return "Library";
+ case VhdlDocGen::LIBRARY: return "Library";
case VhdlDocGen::ENTITY: return "Entity";
case VhdlDocGen::PACKAGE_BODY: return "Package Body";
case VhdlDocGen::ATTRIBUTE: return "Attribute";
@@ -794,22 +794,22 @@ QCString VhdlDocGen::trTypeString(int type)
case VhdlDocGen::PROCESS: return "Process";
case VhdlDocGen::PORT: return "Port";
case VhdlDocGen::GENERIC: return "Generic";
- case VhdlDocGen::UNITS: return "Units";
- //case VhdlDocGen::PORTMAP: return "Port Map";
- case VhdlDocGen::SHAREDVARIABLE: return "Shared Variable";
- case VhdlDocGen::GROUP: return "Group";
- case VhdlDocGen::VFILE: return "File";
- case VhdlDocGen::COMPONENT_INST: return "Component Instantiation";
+ case VhdlDocGen::UNITS: return "Units";
+ //case VhdlDocGen::PORTMAP: return "Port Map";
+ case VhdlDocGen::SHAREDVARIABLE: return "Shared Variable";
+ case VhdlDocGen::GROUP: return "Group";
+ case VhdlDocGen::VFILE: return "File";
+ case VhdlDocGen::INSTANTIATION: return "Instantiation";
case VhdlDocGen::ALIAS: return "Alias";
- case VhdlDocGen::CONFIG: return "Configuration";
- case VhdlDocGen::MISCELLANEOUS: return "Miscellaneous";
- case VhdlDocGen::UCF_CONST: return "Constraints";
+ case VhdlDocGen::CONFIG: return "Configuration";
+ case VhdlDocGen::MISCELLANEOUS: return "Miscellaneous";
+ case VhdlDocGen::UCF_CONST: return "Constraints";
default: return "";
}
} // convertType
/*!
- * deletes a char backwards in a string
+ * deletes a char backwards in a string
*/
bool VhdlDocGen::deleteCharRev(QCString &s,char c)
@@ -829,14 +829,14 @@ void VhdlDocGen::deleteAllChars(QCString &s,char c)
int index=s.findRev(c,-1,FALSE);
while (index > -1)
{
- QString qcs=s.remove(index,1);
+ QString qcs=s.remove(index,1);
s=qcs;
index=s.findRev(c,-1,FALSE);
- }
+ }
}
-static int recordCounter=0;
+static int recordCounter=0;
/*!
* returns the next number of a record|unit member
@@ -865,12 +865,13 @@ QCString VhdlDocGen::getProcessNumber()
}
/*!
- * writes a colored and formatted string
+ * writes a colored and formatted string
*/
-void VhdlDocGen::writeFormatString(QCString& qcs,OutputList&ol,const MemberDef* mdef)
+void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberDef* mdef)
{
QRegExp reg("[\\[\\]\\.\\/\\:\\<\\>\\:\\s\\,\\;\\'\\+\\-\\*\\|\\&\\=\\(\\)\"]");
+ QCString qcs = s;
qcs+=QCString(" ");// parsing the last sign
QCString *ss;
QCString find=qcs;
@@ -917,9 +918,9 @@ void VhdlDocGen::writeFormatString(QCString& qcs,OutputList&ol,const MemberDef*
int ii=find.find('"',2);
if (ii>1)
{
- QCString com=find.left(ii+1);
+ QCString com=find.left(ii+1);
VhdlDocGen::startFonts(com,"keyword",ol);
- temp=find.remove(0,ii+1);
+ temp=find.remove(0,ii+1);
}
}
else
@@ -931,7 +932,7 @@ void VhdlDocGen::writeFormatString(QCString& qcs,OutputList&ol,const MemberDef*
}//if
else
{
- VhdlDocGen::startFonts(find,"vhdlchar",ol);
+ VhdlDocGen::startFonts(find,"vhdlchar",ol);
}
ol.endBold();
}// writeFormatString
@@ -947,7 +948,7 @@ bool VhdlDocGen::isNumber(const QCString& s)
if (s.isEmpty()) return FALSE;
int j,len;
j = regg.match(s.data(),0,&len);
- if ((j==0) && (len==(int)s.length())) return TRUE;
+ if ((j==0) && (len==(int)s.length())) return TRUE;
return FALSE;
}// isNumber
@@ -960,13 +961,14 @@ void VhdlDocGen::startFonts(const QCString& q, const char *keyword,OutputList& o
}
/*!
- * inserts white spaces for better readings
+ * inserts white spaces for better readings
* and writes a colored string to the output
*/
-void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* mdef)
-{
- QCString temp(qcs.length());
+void VhdlDocGen::formatString(const QCString &s, OutputList& ol,const MemberDef* mdef)
+{
+ QCString qcs = s;
+ QCString temp(qcs.length());
qcs.stripPrefix(":");
qcs.stripPrefix("is");
qcs.stripPrefix("IS");
@@ -983,30 +985,30 @@ void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* md
char c=qcs[j];
char b=c;
if (j>0) b=qcs[j-1];
- if (c=='"' || c==',' || c=='\''|| c=='(' || c==')' || c==':' || c=='[' || c==']' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>'))
+ if (c=='"' || c==',' || c=='\''|| c=='(' || c==')' || c==':' || c=='[' || c==']' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>'))
{
if (temp.at(index-1) != ' ')
{
temp+=" ";
}
temp+=c;
- temp+=" ";
+ temp+=" ";
}
- else if (c=='=')
+ else if (c=='=')
{
if (b==':') // := operator
- {
+ {
temp.replace(index-1,1,"=");
- temp+=" ";
+ temp+=" ";
}
else // = operator
{
- temp+=" ";
+ temp+=" ";
temp+=c;
- temp+=" ";
+ temp+=" ";
}
}
- else
+ else
{
temp+=c;
}
@@ -1028,7 +1030,7 @@ void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const
Argument *arg;
bool sem=FALSE;
int len=al->count();
- ol.docify("( ");
+ ol.docify("( ");
if (len > 2)
{
ol.lineBreak();
@@ -1044,7 +1046,7 @@ void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const
QCString *str=VhdlDocGen::findKeyWord(arg->defval);
arg->defval+=" ";
- if (str)
+ if (str)
{
VhdlDocGen::startFonts(arg->defval,str->data(),ol);
}
@@ -1053,7 +1055,7 @@ void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const
VhdlDocGen::startFonts(arg->defval,"vhdlchar",ol); // write type (variable,constant etc.)
}
- VhdlDocGen::startFonts(nn,"vhdlchar",ol); // write name
+ VhdlDocGen::startFonts(nn,"vhdlchar",ol); // write name
if (stricmp(arg->attrib.data(),arg->type.data()) != 0)
VhdlDocGen::startFonts(arg->attrib.lower(),"stringliteral",ol); // write in|out
ol.docify(" ");
@@ -1061,13 +1063,13 @@ void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const
sem=TRUE;
ol.endBold();
if (len > 2)
- {
+ {
ol.lineBreak();
ol.docify(" ");
}
}//for
- ol.docify(" )");
+ ol.docify(" )");
}
@@ -1084,7 +1086,7 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const
bool sem=FALSE;
int len=al->count();
ol.startBold();
- ol.docify(" ( ");
+ ol.docify(" ( ");
ol.endBold();
if (len>2)
{
@@ -1093,20 +1095,26 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const
for (;(arg=ali.current());++ali)
{
ol.startBold();
+ QCString att=arg->defval;
+ bool bGen=att.stripPrefix("gen!");
+
if (sem && len < 3)
{
ol.docify(" , ");
}
- QCString att=arg->defval;
- if (!att.isEmpty())
- {
+
+ if (bGen) {
+ VhdlDocGen::formatString(QCString("generic "),ol,mdef);
+ }
+ if (!att.isEmpty())
+ {
QCString *str=VhdlDocGen::findKeyWord(att);
att+=" ";
if (str)
VhdlDocGen::formatString(att,ol,mdef);
else
- VhdlDocGen::startFonts(att,"vhdlchar",ol);
- }
+ VhdlDocGen::startFonts(att,"vhdlchar",ol);
+ }
QCString nn=arg->name;
nn+=": ";
@@ -1118,30 +1126,32 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const
if (str)
VhdlDocGen::formatString(w,ol,mdef);
else
- VhdlDocGen::startFonts(w,"vhdlchar",ol);
+ VhdlDocGen::startFonts(w,"vhdlchar",ol);
if (arg->attrib)
VhdlDocGen::startFonts(arg->attrib,"vhdlchar",ol);
- sem=TRUE;
+ sem=TRUE;
ol.endBold();
- if (len > 2)
+ if (len > 2)
{
ol.lineBreak();
}
}
- ol.startBold();
- ol.docify(" )");
+ ol.startBold();
+ ol.docify(" )");
const char *exp=mdef->excpString();
if (exp)
{
ol.insertMemberAlign();
+ ol.startBold();
ol.docify("[ ");
ol.docify(exp);
ol.docify(" ]");
+ ol.endBold();
}
- ol.endBold();
+ ol.endBold();
}
/*!
@@ -1155,17 +1165,19 @@ void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList* al,const M
Argument *arg;
bool sem=FALSE;
ol.startBold();
- ol.docify(" ( ");
+ ol.docify(" ( ");
for (;(arg=ali.current());++ali)
{
if (sem)
+ {
ol.docify(" , ");
+ }
QCString nn=arg->name;
// VhdlDocGen::startFonts(nn,"vhdlchar",ol);
VhdlDocGen::writeFormatString(nn,ol,mdef);
- sem=TRUE;
- }
- ol.docify(" )");
+ sem=TRUE;
+ }
+ ol.docify(" )");
ol.endBold();
}
@@ -1175,13 +1187,13 @@ void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList* al,const M
*/
void VhdlDocGen::writeFuncProcDocu(
- const MemberDef *md,
+ const MemberDef *md,
OutputList& ol,
const ArgumentList* al,
bool /*type*/)
{
if (al==0) return;
- bool sem=FALSE;
+ bool sem=FALSE;
ol.enableAll();
ArgumentListIterator ali(*al);
@@ -1191,24 +1203,30 @@ void VhdlDocGen::writeFuncProcDocu(
ol.docify(" ( ) ");
return;
}
- ol.startParameterList(TRUE);
+ ol.startParameterList(TRUE);
//ol.startParameterName(FALSE);
Argument *arg;
bool first=TRUE;
for (;(arg=ali.current());++ali)
- {
- ol.startParameterType(first,"");
+ {
+ ol.startParameterType(first,"");
// if (first) ol.writeChar('(');
+ QCString attl=arg->defval;
+ bool bGen=attl.stripPrefix("gen!");
+ if (bGen)
+ VhdlDocGen::writeFormatString(QCString("generic "),ol,md);
+
+
if (VhdlDocGen::isProcedure(md))
{
startFonts(arg->defval,"keywordtype",ol);
ol.docify(" ");
- }
+ }
ol.endParameterType();
ol.startParameterName(TRUE);
VhdlDocGen::writeFormatString(arg->name,ol,md);
- ol.docify(" ");
+ ol.docify(" : ");
if (VhdlDocGen::isProcedure(md))
{
@@ -1225,15 +1243,16 @@ void VhdlDocGen::writeFuncProcDocu(
ol.enable(OutputGenerator::Man);
if (!VhdlDocGen::isProcess(md))
{
- startFonts(arg->type,"vhdlkeyword",ol);
+ // startFonts(arg->type,"vhdlkeyword",ol);
+ VhdlDocGen::writeFormatString(arg->type,ol,md);
}
ol.disable(OutputGenerator::Man);
ol.endEmphasis();
ol.enable(OutputGenerator::Man);
- if (--index)
+ if (--index)
{
- ol.docify(" , ");
+ ol.docify(" , ");
}
else
{
@@ -1243,10 +1262,10 @@ void VhdlDocGen::writeFuncProcDocu(
}
ol.endParameterName(FALSE,FALSE,FALSE);
- sem=TRUE;
+ sem=TRUE;
first=FALSE;
}
- //ol.endParameterList();
+ //ol.endParameterList();
} // writeDocFunProc
@@ -1267,7 +1286,7 @@ QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool fun
{
argString+=arg->name;
argString+=":";
- argString+=arg->type;
+ argString+=arg->type;
}
else
{
@@ -1275,7 +1294,7 @@ QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool fun
argString+=arg->name+" :";
argString+=arg->attrib+" ";
argString+=arg->type;
- }
+ }
sem=TRUE;
}
return argString;
@@ -1318,11 +1337,11 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml,
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::SHAREDVARIABLE,FALSE),0,FALSE,VhdlDocGen::SHAREDVARIABLE);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::VFILE,FALSE),0,FALSE,VhdlDocGen::VFILE);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::GROUP,FALSE),0,FALSE,VhdlDocGen::GROUP);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::COMPONENT_INST,FALSE),0,FALSE,VhdlDocGen::COMPONENT_INST);
+ VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::INSTANTIATION,FALSE),0,FALSE,VhdlDocGen::INSTANTIATION);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::ALIAS,FALSE),0,FALSE,VhdlDocGen::ALIAS);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS),0,FALSE,VhdlDocGen::MISCELLANEOUS);
- // configurations must be added to global file definitions.
+ // configurations must be added to global file definitions.
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::CONFIG,FALSE),0,FALSE,VhdlDocGen::CONFIG);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::UCF_CONST,FALSE),0,FALSE,VhdlDocGen::UCF_CONST);
@@ -1337,26 +1356,30 @@ static void setGlobalType(MemberList *ml)
{
QCString l=mdd->typeString();
- if (strcmp(mdd->argsString(),"configuration")==0)
+ if (strcmp(mdd->argsString(),"package")==0)
{
- mdd->setMemberSpecifiers(VhdlDocGen::CONFIG);
+ mdd->setMemberSpecifiers(VhdlDocGen::INSTANTIATION);
+ }
+ else if (strcmp(mdd->argsString(),"configuration")==0)
+ {
+ mdd->setMemberSpecifiers(VhdlDocGen::CONFIG);
}
else if (strcmp(mdd->typeString(),"library")==0)
{
- mdd->setMemberSpecifiers(VhdlDocGen::LIBRARY);
+ mdd->setMemberSpecifiers(VhdlDocGen::LIBRARY);
}
- else if (strcmp(mdd->typeString(),"package")==0)
+ else if (strcmp(mdd->typeString(),"use")==0)
{
- mdd->setMemberSpecifiers(VhdlDocGen::USE);
- }
+ mdd->setMemberSpecifiers(VhdlDocGen::USE);
+ }
else if (stricmp(mdd->typeString(),"misc")==0)
{
- mdd->setMemberSpecifiers(VhdlDocGen::MISCELLANEOUS);
- }
+ mdd->setMemberSpecifiers(VhdlDocGen::MISCELLANEOUS);
+ }
else if (stricmp(mdd->typeString(),"ucf_const")==0)
{
- mdd->setMemberSpecifiers(VhdlDocGen::UCF_CONST);
- }
+ mdd->setMemberSpecifiers(VhdlDocGen::UCF_CONST);
+ }
}
}
@@ -1368,7 +1391,7 @@ void VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
if (cd==0) return;
QCString ttype=mdef->typeString();
- QCString largs=mdef->argsString();
+ QCString largs=mdef->argsString();
if ((VhdlDocGen::isVhdlFunction(mdef) || VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isProcess(mdef)))
{
@@ -1376,12 +1399,12 @@ void VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
nn=nn.stripWhiteSpace();
QCString na=cd->name();
MemberDef* memdef=VhdlDocGen::findMember(na,nn);
- if (memdef && memdef->isLinkable())
- {
+ if (memdef && memdef->isLinkable())
+ {
ol.docify(" ");
ol.startBold();
- //ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,mdef->typeString());
+ //ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,mdef->typeString());
writeLink(memdef,ol);
ol.endBold();
ol.docify(" ");
@@ -1390,7 +1413,7 @@ void VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
{
ol.docify(" ");
VhdlDocGen::formatString(ttype,ol,mdef);
- ol.docify(" ");
+ ol.docify(" ");
}
ol.docify(mdef->name());
VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList().pointer());
@@ -1412,24 +1435,26 @@ void VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
return;
}
else
- {
+ {
writeLink(mdef,ol);
ol.docify(" ");
// ttype=mdef->typeString();
}
- // QCString largs=mdef->argsString();
+ // QCString largs=mdef->argsString();
+ bool c=largs=="context";
+ bool brec=largs.stripPrefix("record") ;
- bool brec=largs.stripPrefix("record");
-
- if (!brec)
+ if (!brec && !c)
VhdlDocGen::formatString(ttype,ol,mdef);
- if (brec || largs.stripPrefix("units"))
- {
+ if (c || brec || largs.stripPrefix("units"))
+ {
+ if (c)
+ largs=ttype;
VhdlDocGen::writeRecUnitDocu(mdef,ol,largs);
- return;
+ return;
}
ol.docify(" ");
@@ -1446,7 +1471,7 @@ void VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool /*inGroup*/)
+ bool /*inGroup*/)
{
static QRegExp reg("[%]");
LockingPtr<MemberDef> lock(mdef,mdef);
@@ -1465,14 +1490,14 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
*/
- ASSERT(cd!=0 || nd!=0 || fd!=0 || gd!=0 ||
- mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY ||
- mdef->getMemberSpecifiers()==VhdlDocGen::USE
+ ASSERT(cd!=0 || nd!=0 || fd!=0 || gd!=0 ||
+ mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY ||
+ mdef->getMemberSpecifiers()==VhdlDocGen::USE
); // member should belong to something
- if (cd) d=cd;
- else if (nd) d=nd;
- else if (fd) d=fd;
- else if (gd) d=gd;
+ if (cd) d=cd;
+ else if (nd) d=nd;
+ else if (fd) d=fd;
+ else if (gd) d=gd;
else d=(Definition*)mdef;
// write tag file information of this member
@@ -1497,7 +1522,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
if (VhdlDocGen::isVariable(mdef)) Doxygen::tagFile << "shared variable";
if (VhdlDocGen::isFile(mdef)) Doxygen::tagFile << "file";
if (VhdlDocGen::isGroup(mdef)) Doxygen::tagFile << "group";
- if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << "component instantiation";
+ if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << " instantiation";
if (VhdlDocGen::isAlias(mdef)) Doxygen::tagFile << "alias";
if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << "configuration";
@@ -1561,7 +1586,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
// *** write type
/*VHDL CHANGE */
bool bRec,bUnit;
- QCString ltype(mdef->typeString());
+ QCString ltype(mdef->typeString());
ltype=ltype.replace(reg," ");
QCString largs(mdef->argsString());
largs=largs.replace(reg," ");
@@ -1572,7 +1597,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ClassDef *kl=0;
LockingPtr<ArgumentList> alp = mdef->argumentList();
QCString nn;
-
+ VhdlDocGen::adjustRecordMember(mdef) ;
if (gd) gd=0;
switch(mm)
{
@@ -1580,7 +1605,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
VhdlDocGen::writeCodeFragment(mdef,ol);
break;
case VhdlDocGen::PROCEDURE:
- case VhdlDocGen::FUNCTION:
+ case VhdlDocGen::FUNCTION:
ol.startBold();
VhdlDocGen::formatString(ltype,ol,mdef);
ol.endBold();
@@ -1598,7 +1623,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
case VhdlDocGen::USE:
kl=VhdlDocGen::getClass(mdef->name());
if (kl && ((VhdlDocGen::VhdlClasses)kl->protection()==VhdlDocGen::ENTITYCLASS)) break;
- writeLink(mdef,ol);
+ writeLink(mdef,ol);
ol.insertMemberAlign();
ol.docify(" ");
@@ -1610,7 +1635,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ol.docify(" ");
QCString name=theTranslator_vhdlType(VhdlDocGen::PACKAGE,TRUE);
ol.startBold();
- ol.docify(name.data());
+ ol.docify(name.data());
name.resize(0);
ol.endBold();
name+=" <"+mdef->name()+">";
@@ -1622,11 +1647,16 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
case VhdlDocGen::LIBRARY:
writeLink(mdef,ol);
ol.insertMemberAlign();
- break;
+ if (largs=="context")
+ {
+ VhdlDocGen::writeRecorUnit(ltype,ol,mdef);
+ }
+
+ break;
case VhdlDocGen::GENERIC:
case VhdlDocGen::PORT:
- case VhdlDocGen::ALIAS:
+ case VhdlDocGen::ALIAS:
writeLink(mdef,ol);
ol.docify(" ");
@@ -1648,17 +1678,28 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
}
break;
case VhdlDocGen::PROCESS:
- writeLink(mdef,ol);
+ writeLink(mdef,ol);
ol.insertMemberAlign();
VhdlDocGen::writeProcessProto(ol,alp.pointer(),mdef);
break;
case VhdlDocGen::PACKAGE:
case VhdlDocGen::ENTITY:
case VhdlDocGen::COMPONENT:
- case VhdlDocGen::COMPONENT_INST:
+ case VhdlDocGen::INSTANTIATION:
case VhdlDocGen::CONFIG:
if (VhdlDocGen::isCompInst(mdef) )
{
+ nn=largs;
+ if(nn.stripPrefix("function") || nn.stripPrefix("package"))
+ {
+ VhdlDocGen::formatString(largs,ol,mdef);
+ ol.insertMemberAlign();
+ writeLink(mdef,ol);
+ ol.docify(" ");
+ VhdlDocGen::formatString(ltype,ol,mdef);
+ break;
+ }
+
largs.prepend("::");
largs.prepend(mdef->name().data());
ol.writeObjectLink(mdef->getReference(),
@@ -1676,7 +1717,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ol.docify(ltype);
ol.endBold();
ol.docify(" ");
- if (VhdlDocGen::isComponent(mdef) ||
+ if (VhdlDocGen::isComponent(mdef) ||
VhdlDocGen::isConfig(mdef) ||
VhdlDocGen::isCompInst(mdef))
{
@@ -1690,7 +1731,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
nn=mdef->name();
}
kl=getClass(nn.data());
- if (kl)
+ if (kl)
{
nn=kl->getOutputFileBase();
ol.pushGeneratorState();
@@ -1709,27 +1750,29 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ol.endEmphasis();
ol.popGeneratorState();
}
- }
+ }
break;
- case VhdlDocGen::UCF_CONST:
+ case VhdlDocGen::UCF_CONST:
mm=mdef->name().findRev('_');
- if (mm>0)
+ if (mm>0)
+ {
mdef->setName(mdef->name().left(mm));
+ }
writeUCFLink(mdef,ol);
break;
case VhdlDocGen::SIGNAL:
case VhdlDocGen::ATTRIBUTE:
case VhdlDocGen::SUBTYPE:
- case VhdlDocGen::CONSTANT:
- case VhdlDocGen::SHAREDVARIABLE:
+ case VhdlDocGen::CONSTANT:
+ case VhdlDocGen::SHAREDVARIABLE:
case VhdlDocGen::VFILE:
- case VhdlDocGen::GROUP:
+ case VhdlDocGen::GROUP:
writeLink(mdef,ol);
ol.docify(" ");
ol.insertMemberAlign();
VhdlDocGen::formatString(ltype,ol,mdef);
break;
- case VhdlDocGen::TYPE:
+ case VhdlDocGen::TYPE:
bRec=largs.stripPrefix("record") ;
bUnit=largs.stripPrefix("units") ;
ol.startBold();
@@ -1739,12 +1782,12 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ol.docify("units: ");
writeLink(mdef,ol);
ol.insertMemberAlign();
- if (!bRec)
+ if (!bRec)
VhdlDocGen::formatString(ltype,ol,mdef);
if (bUnit) ol.lineBreak();
if (bRec || bUnit)
writeRecorUnit(largs,ol,mdef);
- ol.endBold();
+ ol.endBold();
break;
default: break;
@@ -1757,7 +1800,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
}
if (!ltype.isEmpty()) ol.docify(" ");
- if (htmlOn)
+ if (htmlOn)
{
ol.enable(OutputGenerator::Html);
}
@@ -1776,7 +1819,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ol.parseDoc(mdef->briefFile(),mdef->briefLine(),
mdef->getOuterScope()?mdef->getOuterScope():d,
mdef,mdef->briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- if (detailsVisible)
+ if (detailsVisible)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1802,7 +1845,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
}// end writeVhdlDeclaration
-void VhdlDocGen::writeLink(const MemberDef* mdef,OutputList &ol)
+void VhdlDocGen::writeLink(const MemberDef* mdef,OutputList &ol)
{
ol.writeObjectLink(mdef->getReference(),
mdef->getOutputFileBase(),
@@ -1823,7 +1866,7 @@ void VhdlDocGen::writePlainVHDLDeclarations(
MemberDef *md;
MemberListIterator mli(*mlist);
for ( ; (md=mli.current()); ++mli )
- {
+ {
int mems=md->getMemberSpecifiers();
if (md->isBriefSectionVisible() && (mems==specifier) && (mems!=VhdlDocGen::LIBRARY) )
{
@@ -1840,7 +1883,7 @@ void VhdlDocGen::writePlainVHDLDeclarations(
}
} //if
} //for
- if (!first) ol.endMemberList();
+ if (!first) ol.endMemberList();
pack.clear();
}//plainDeclaration
@@ -1874,19 +1917,19 @@ bool VhdlDocGen::membersHaveSpecificType(MemberList *ml,int type)
void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- const char *title,const char *subtitle,bool /*showEnumValues*/,int type)
+ const char *title,const char *subtitle,bool /*showEnumValues*/,int type)
{
setGlobalType(ml);
if (!membersHaveSpecificType(ml,type)) return;
- if (title)
+ if (title)
{
ol.startMemberHeader(title);
ol.parseText(title);
ol.endMemberHeader();
ol.docify(" ");
}
- if (subtitle && subtitle[0]!=0)
+ if (subtitle && subtitle[0]!=0)
{
ol.startMemberSubtitle();
ol.parseDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE,0,TRUE,FALSE);
@@ -1929,9 +1972,9 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
}// writeVHDLDeclarations
/* strips the prefix for record and unit members*/
-void VhdlDocGen::adjustRecordMember(MemberDef *mdef)
+void VhdlDocGen::adjustRecordMember(MemberDef *mdef)
{ //,OutputList & ol) {
- QRegExp regg("[_a-zA-Z]");
+ QRegExp regg("[_a-zA-Z\"]");
QCString nn=mdef->name();
int j=nn.find(regg,0);
if (j>0)
@@ -1965,84 +2008,84 @@ QCString VhdlDocGen::trVhdlType(int type,bool sing)
{
switch(type)
{
- case VhdlDocGen::LIBRARY:
+ case VhdlDocGen::LIBRARY:
if (sing) return "Library";
- else return "Libraries";
- case VhdlDocGen::PACKAGE:
- if (sing) return "Package";
+ else return "Libraries";
+ case VhdlDocGen::PACKAGE:
+ if (sing) return "Package";
else return "Packages";
- case VhdlDocGen::SIGNAL:
- if (sing) return "Signal";
+ case VhdlDocGen::SIGNAL:
+ if (sing) return "Signal";
else return "Signals";
- case VhdlDocGen::COMPONENT:
- if (sing) return "Component";
- else return "Components";
- case VhdlDocGen::CONSTANT:
- if (sing) return "Constant";
+ case VhdlDocGen::COMPONENT:
+ if (sing) return "Component";
+ else return "Components";
+ case VhdlDocGen::CONSTANT:
+ if (sing) return "Constant";
else return "Constants";
- case VhdlDocGen::ENTITY:
- if (sing) return "Entity";
+ case VhdlDocGen::ENTITY:
+ if (sing) return "Entity";
else return "Entities";
- case VhdlDocGen::TYPE:
- if (sing) return "Type";
+ case VhdlDocGen::TYPE:
+ if (sing) return "Type";
else return "Types";
- case VhdlDocGen::SUBTYPE:
- if (sing) return "Subtype";
+ case VhdlDocGen::SUBTYPE:
+ if (sing) return "Subtype";
else return "Subtypes";
- case VhdlDocGen::FUNCTION:
- if (sing) return "Function";
+ case VhdlDocGen::FUNCTION:
+ if (sing) return "Function";
else return "Functions";
- case VhdlDocGen::RECORD:
- if (sing) return "Record";
+ case VhdlDocGen::RECORD:
+ if (sing) return "Record";
else return "Records";
- case VhdlDocGen::PROCEDURE:
- if (sing) return "Procedure";
- else return "Procedures";
- case VhdlDocGen::ARCHITECTURE:
- if (sing) return "Architecture";
+ case VhdlDocGen::PROCEDURE:
+ if (sing) return "Procedure";
+ else return "Procedures";
+ case VhdlDocGen::ARCHITECTURE:
+ if (sing) return "Architecture";
else return "Architectures";
- case VhdlDocGen::ATTRIBUTE:
- if (sing) return "Attribute";
+ case VhdlDocGen::ATTRIBUTE:
+ if (sing) return "Attribute";
else return "Attributes";
- case VhdlDocGen::PROCESS:
- if (sing) return "Process";
+ case VhdlDocGen::PROCESS:
+ if (sing) return "Process";
else return "Processes";
- case VhdlDocGen::PORT:
- if (sing) return "Port";
+ case VhdlDocGen::PORT:
+ if (sing) return "Port";
else return "Ports";
- case VhdlDocGen::USE:
- if (sing) return "use clause";
+ case VhdlDocGen::USE:
+ if (sing) return "use clause";
else return "Use Clauses";
- case VhdlDocGen::GENERIC:
- if (sing) return "Generic";
+ case VhdlDocGen::GENERIC:
+ if (sing) return "Generic";
else return "Generics";
- case VhdlDocGen::PACKAGE_BODY:
+ case VhdlDocGen::PACKAGE_BODY:
return "Package Body";
- case VhdlDocGen::UNITS:
- return "Units";
- case VhdlDocGen::SHAREDVARIABLE:
- if (sing) return "Shared Variable";
- return "Shared Variables";
- case VhdlDocGen::VFILE:
- if (sing) return "File";
- return "Files";
- case VhdlDocGen::GROUP:
- if (sing) return "Group";
+ case VhdlDocGen::UNITS:
+ return "Units";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (sing) return "Shared Variable";
+ return "Shared Variables";
+ case VhdlDocGen::VFILE:
+ if (sing) return "File";
+ return "Files";
+ case VhdlDocGen::GROUP:
+ if (sing) return "Group";
return "Groups";
- case VhdlDocGen::COMPONENT_INST:
- if (sing) return "Component Instantiation";
- else return "Component Instantiations";
- case VhdlDocGen::ALIAS:
- if (sing) return "Alias";
+ case VhdlDocGen::INSTANTIATION:
+ if (sing) return "Instantiation";
+ else return "Instantiations";
+ case VhdlDocGen::ALIAS:
+ if (sing) return "Alias";
return "Aliases";
- case VhdlDocGen::CONFIG:
- if (sing) return "Configuration";
+ case VhdlDocGen::CONFIG:
+ if (sing) return "Configuration";
return "Configurations";
case VhdlDocGen::MISCELLANEOUS:
- return "Miscellaneous";
- case VhdlDocGen::UCF_CONST:
+ return "Miscellaneous";
+ case VhdlDocGen::UCF_CONST:
return "Constraints";
- default:
+ default:
return "Class";
}
}
@@ -2065,7 +2108,7 @@ QCString VhdlDocGen::trDesignUnitMembers()
QCString VhdlDocGen::trDesignUnitListDescription()
{
return "Here is a list of all design unit members with links to "
- "the Entities they belong to:";
+ "the Entities they belong to:";
}
QCString VhdlDocGen::trDesignUnitIndex()
@@ -2093,11 +2136,11 @@ bool VhdlDocGen::foundInsertedComponent(const QCString & name,Entry* root)
{
QListIterator<BaseInfo> bii(*root->extends);
BaseInfo *bi=0;
- for (bii.toFirst();(bi=bii.current());++bii)
+ for (bii.toFirst();(bi=bii.current());++bii)
{
if (bi->name==name)
{
- return TRUE; //
+ return TRUE; //
}
}
@@ -2108,24 +2151,24 @@ bool VhdlDocGen::foundInsertedComponent(const QCString & name,Entry* root)
void VhdlDocGen::writeStringLink(const MemberDef *mdef,QCString mem, OutputList& ol)
{
- if (mdef)
+ if (mdef)
{
ClassDef *cd=mdef->getClassDef();
if (cd)
- {
- QCString n=cd->name();
+ {
+ QCString n=cd->name();
MemberDef* memdef=VhdlDocGen::findMember(n,mem);
- if (memdef && memdef->isLinkable())
- {
+ if (memdef && memdef->isLinkable())
+ {
ol.startBold();
- writeLink(memdef,ol);
+ writeLink(memdef,ol);
ol.endBold();
ol.docify(" ");
return;
}
}
}
- VhdlDocGen::startFonts(mem,"vhdlchar",ol);
+ VhdlDocGen::startFonts(mem,"vhdlchar",ol);
}// found component
void VhdlDocGen::writeCodeFragment( MemberDef *mdef,OutputList& ol)
@@ -2142,12 +2185,12 @@ void VhdlDocGen::writeCodeFragment( MemberDef *mdef,OutputList& ol)
writeLink(mdef,ol);
ol.docify(" ");
ol.insertMemberAlign();
- int len= qsl.count();
+ int len= qsl.count();
for(int j=0;j<len;j++)
{
QCString q=(QCString)qsl[j];
VhdlDocGen::writeFormatString(q,ol,mdef);
- ol.lineBreak();
+ ol.lineBreak();
if (j==2) // only the first three lines are shown
{
q = "...";
@@ -2163,7 +2206,7 @@ void VhdlDocGen::writeSource(MemberDef *mdef,OutputList& ol,QCString & cname)
int start=mdef->getStartBodyLine();
QStringList qsl=QStringList::split("\n",codeFragment);
ol.startCodeFragment();
- int len = qsl.count();
+ int len = qsl.count();
QCString lineNumber;
int j;
for (j=0;j<len;j++)
@@ -2176,7 +2219,7 @@ void VhdlDocGen::writeSource(MemberDef *mdef,OutputList& ol,QCString & cname)
ol.insertMemberAlign();
QCString q=(QCString)qsl[j];
VhdlDocGen::writeFormatString(q,ol,mdef);
- ol.docify("\n");
+ ol.docify("\n");
}
ol.endCodeFragment();
@@ -2217,7 +2260,7 @@ void VhdlDocGen::parseUCF(const char* input, Entry* entity,QCString fileName,b
while(!ucFile.isEmpty())
{
- int i=ucFile.find("\n");
+ int i=ucFile.find("\n");
if (i<0) break;
lineNo++;
QCString temp=ucFile.left(i);
@@ -2232,7 +2275,7 @@ void VhdlDocGen::parseUCF(const char* input, Entry* entity,QCString fileName,b
brief.append("\\n");
}
else if (!temp.stripPrefix("#") && !bb)
- {
+ {
if (altera)
{
int i=temp.find("-name");
@@ -2247,9 +2290,9 @@ void VhdlDocGen::parseUCF(const char* input, Entry* entity,QCString fileName,b
{
QRegExp ee("[\\s=]");
int i=temp.find(ee);
- QCString ff=temp.left(i);
+ QCString ff=temp.left(i);
temp.stripPrefix(ff.data());
- ff.append("#");
+ ff.append("#");
if (!temp.isEmpty())
{
initUCF(entity,ff.data(),temp,lineNo,fileName,brief);
@@ -2259,28 +2302,28 @@ void VhdlDocGen::parseUCF(const char* input, Entry* entity,QCString fileName,b
}//temp
ucFile=ucFile.remove(0,i+1);
- }// while
+ }// while
}
static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCString & fileName,QCString & brief)
{
- if (qcs.isEmpty())return;
+ if (qcs.isEmpty())return;
QRegExp sp("\\s");
QRegExp reg("[\\s=]");
QCString n;
// bool bo=(stricmp(type,qcs.data())==0);
VhdlDocGen::deleteAllChars(qcs,';');
- qcs=qcs.stripWhiteSpace();
+ qcs=qcs.stripWhiteSpace();
- int i= qcs.find(reg);
+ int i= qcs.find(reg);
if (i<0) return;
if (i==0)
- {
+ {
n=type;
VhdlDocGen::deleteAllChars(n,'#');
type="";
- }
+ }
else
{
n=qcs.left(i);
@@ -2296,12 +2339,12 @@ static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCStr
current->bodyLine=line;
current->fileName=fileName;
current->type="ucf_const";
- //if (!bo)
+ //if (!bo)
//current->args=type;
current->args+=qcs;
current->lang= SrcLangExt_VHDL ;
- // adding dummy name for constraints like VOLTAGE=5,TEMPERATURE=20 C
+ // adding dummy name for constraints like VOLTAGE=5,TEMPERATURE=20 C
if (n.isEmpty())
{
n="dummy";
@@ -2350,7 +2393,7 @@ QCString VhdlDocGen::splitString(QCString& str, char c)
{
QCString n=str;
int i=str.find(c);
- if (i>0)
+ if (i>0)
{
n=str.left(i);
str=str.remove(0,i+1);
@@ -2366,15 +2409,15 @@ bool VhdlDocGen::findConstraintFile(LayoutNavEntry *lne)
LayoutNavEntry *kk = lne->parent();// find(LayoutNavEntry::Files);
// LayoutNavEntry *kks = kk->parent();// find(LayoutNavEntry::Files);
QCString file;
- QCString co("Constraint File");
+ QCString co("Constraints");
while (fn)
{
FileDef *fd=fn->first();
if (fd->name().contains(".ucf") || fd->name().contains(".qsf"))
{
file = convertNameToFile(fd->name().data(),FALSE,FALSE);
- LayoutNavEntry *ucf=new LayoutNavEntry(lne,LayoutNavEntry::MainPage,TRUE,file,co,"");
- kk->addChild(ucf);
+ LayoutNavEntry *ucf=new LayoutNavEntry(lne,LayoutNavEntry::MainPage,TRUE,file,co,"");
+ kk->addChild(ucf);
break;
}
fn=Doxygen::inputNameList->next();
@@ -2383,9 +2426,9 @@ bool VhdlDocGen::findConstraintFile(LayoutNavEntry *lne)
}
void VhdlDocGen::writeAlphbeticalClass(OutputList& ol,const ClassDef* cd,const QCString & cname)
-{
+{
if (cname.contains("::")==0)
- {
+ {
ClassDef*oo= VhdlDocGen::findArchitecture(cd);
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),0,cname);
@@ -2407,7 +2450,7 @@ QCString VhdlDocGen::parseForConfig(QCString & entity,QCString & arch)
{
int index;
QCString label;
- QCString ent("entity");
+ QCString ent("entity");
if (!entity.contains(":")) return "";
QRegExp exp("[:()\\s]");
@@ -2469,13 +2512,13 @@ ClassDef* VhdlDocGen::findArchitecture(QCString identifier, QCString entity_nam
//@param arch bit0:flipflop
-//@param binding e.g entity work.foo(bar)
-//@param label |label0|label1
-// label0:architecture name
-//@param confVhdl of configuration file (identifier::entity_name) or
+//@param binding e.g entity work.foo(bar)
+//@param label |label0|label1
+// label0:architecture name
+//@param confVhdl of configuration file (identifier::entity_name) or
// the architecture if isInlineConf TRUE
-//@param isInlineConf
-//@param confN List of configurations
+//@param isInlineConf
+//@param confN List of configurations
void assignBinding(ConfNode * conf,QCString label)
{
@@ -2518,7 +2561,7 @@ void assignBinding(ConfNode * conf,QCString label)
if (!conf->isInlineConf && (archName!=cur->args))
continue;
- if (cur->exception==label || conf->isInlineConf)
+ if (cur->exception==label || conf->isInlineConf)
{
QCString sign,archy;
@@ -2543,10 +2586,10 @@ void assignBinding(ConfNode * conf,QCString label)
arch1=ent1+"::"+arch1;
//ClassDef *archBind=Doxygen::classSDict->find(arch1.data());
ClassDef *ent=Doxygen::classSDict->find(ent1.data());
- QCString inst=VhdlDocGen::getIndexWord(cur->args.data(),0);
+ QCString inst=VhdlDocGen::getIndexWord(cur->args.data(),0);
ClassDef *cd=Doxygen::classSDict->find(inst.data());
- if (cd==0 || ent==0)
+ if (cd==0 || ent==0)
continue;
addInstance(ent,archClass,cd,cur);
@@ -2582,19 +2625,19 @@ void assignConfiguration(ConfNode* rootNode,QCString label)
/*
// file foo.vhd
-// enitity foo
+// enitity foo
// .....
// end entity
-// file foo_arch.vhd
+// file foo_arch.vhd
// architecture xxx of foo is
-// ........
+// ........
// end architecture
*/
void VhdlDocGen::computeVhdlComponentRelations()
{
-
+
QCString entity,inst,arch,vhd;
QList<ConfNode> confList = getVhdlConfiguration();
@@ -2623,11 +2666,11 @@ void VhdlDocGen::computeVhdlComponentRelations()
entity=cur->type;
}
ClassDef *classEntity=Doxygen::classSDict->find(entity);
- inst=VhdlDocGen::getIndexWord(cur->args.data(),0);
+ inst=VhdlDocGen::getIndexWord(cur->args.data(),0);
ClassDef *cd=Doxygen::classSDict->find(inst);
ClassDef *ar=Doxygen::classSDict->find(cur->args);
- if (cd==0 || classEntity==0 )
+ if (cd==0 || classEntity==0 )
continue;
addInstance(classEntity,ar,cd,cur);
@@ -2635,7 +2678,7 @@ void VhdlDocGen::computeVhdlComponentRelations()
}
}
-static void addInstance(ClassDef* classEntity, ClassDef* ar,
+static void addInstance(ClassDef* classEntity, ClassDef* ar,
ClassDef *cd , Entry *cur,ClassDef* /*archBind*/)
{
@@ -2658,18 +2701,18 @@ static void addInstance(ClassDef* classEntity, ClassDef* ar,
if (ar==0) return;
QCString uu=cur->name;
MemberDef *md=new MemberDef(
- ar->getDefFileName(), cur->startLine,
+ ar->getDefFileName(), cur->startLine,
cur->type,uu,uu, 0,
Public, Normal, cur->stat,Member,
MemberDef::Variable,
0,
0);
md->setLanguage(SrcLangExt_VHDL);
- md->setMemberSpecifiers(VhdlDocGen::COMPONENT_INST);
+ md->setMemberSpecifiers(VhdlDocGen::INSTANTIATION);
md->setBriefDescription(cur->brief,cur->briefFile,cur->briefLine);
md->setBodySegment(cur->startLine,-1) ;
FileDef *fd=ar->getFileDef();
- md->setBodyDef(fd);
+ md->setBodyDef(fd);
ar->insertMember(md);
// printf("\nMemberreference [%p]",md);
}
@@ -2688,7 +2731,7 @@ void VhdlDocGen::writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDe
void VhdlDocGen::writeRecUnitDocu(
- const MemberDef *md,
+ const MemberDef *md,
OutputList& ol,
QCString largs
)
@@ -2696,14 +2739,14 @@ void VhdlDocGen::writeRecUnitDocu(
QStringList ql=QStringList::split("#",largs,FALSE);
uint len=ql.count();
- ol.startParameterList(TRUE);
+ ol.startParameterList(TRUE);
bool first=TRUE;
for(uint i=0;i<len;i++)
{
QCString n=(QCString)ql[i];
- ol.startParameterType(first,"");
+ ol.startParameterType(first,"");
VhdlDocGen::formatString(n,ol,md);
- if ((len-i)>1)
+ if ((len-i)>1)
{
ol.endParameterName(FALSE,FALSE,FALSE);
}
@@ -2720,7 +2763,7 @@ void VhdlDocGen::writeCodeFragment(OutputList& ol,int start, QCString & codeFrag
{
QStringList qsl=QStringList::split("\n",codeFragment);
ol.startCodeFragment();
- int len = qsl.count();
+ int len = qsl.count();
QCString lineNumber;
int j;
for (j=0;j<len;j++)
@@ -2733,7 +2776,7 @@ void VhdlDocGen::writeCodeFragment(OutputList& ol,int start, QCString & codeFrag
ol.insertMemberAlign();
QCString q=(QCString)qsl[j];
VhdlDocGen::writeFormatString(q,ol,mdef);
- ol.docify("\n");
+ ol.docify("\n");
}
ol.endCodeFragment();
}
diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h
index 02f1353..8850d47 100644
--- a/src/vhdldocgen.h
+++ b/src/vhdldocgen.h
@@ -82,23 +82,20 @@ class VhdlDocGen
PORT,
UNITS,
GENERIC,
- COMPONENT_INST,
+ INSTANTIATION,
GROUP,
VFILE,
SHAREDVARIABLE,
CONFIG,
ALIAS,
- MISCELLANEOUS,
- UCF_CONST
+ MISCELLANEOUS,
+ UCF_CONST
};
-
-
-
VhdlDocGen();
virtual ~VhdlDocGen();
static void init();
- static QCString convertFileNameToClassName(QCString name);
+ static QCString convertFileNameToClassName(QCString name);
// --- used by vhdlscanner.l -----------
static QCString getIndexWord(const char* ,int index);
@@ -112,13 +109,10 @@ class VhdlDocGen
bool doc=false);
// -----------------------------------
-
static void computeVhdlComponentRelations();
-
static QCString* findKeyWord(const QCString& word);
-
static ClassDef* getPackageName(const QCString& name);
static MemberDef* findMember(const QCString& className,
const QCString& memName);
@@ -137,7 +131,6 @@ class VhdlDocGen
static void writeInlineClassLink(const ClassDef*,
OutputList &ol);
-
static bool isConstraint(const MemberDef *mdef)
{ return mdef->getMemberSpecifiers()==VhdlDocGen::UCF_CONST; }
static bool isConfig(const MemberDef *mdef)
@@ -189,9 +182,9 @@ class VhdlDocGen
static bool isGroup(const MemberDef *mdef)
{ return mdef->getMemberSpecifiers()==VhdlDocGen::GROUP; }
static bool isCompInst(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::COMPONENT_INST; }
-static bool isMisc(const MemberDef *mdef)
-{ return mdef->getMemberSpecifiers()==VhdlDocGen::MISCELLANEOUS; }
+ { return mdef->getMemberSpecifiers()==VhdlDocGen::INSTANTIATION; }
+ static bool isMisc(const MemberDef *mdef)
+ { return mdef->getMemberSpecifiers()==VhdlDocGen::MISCELLANEOUS; }
//-----------------------------------------------------
// translatable items
@@ -220,24 +213,18 @@ static bool isMisc(const MemberDef *mdef)
// trFunctions
static QCString trFunctionAndProc();
-
//-----------------------------------------------------
static void prepareComment(QCString&);
-
-
-
- static void formatString(QCString&,OutputList& ol,const MemberDef*);
+ static void formatString(const QCString&,OutputList& ol,const MemberDef*);
- static void writeFormatString(QCString&,OutputList& ol,const MemberDef*);
+ static void writeFormatString(const QCString&,OutputList& ol,const MemberDef*);
static void writeFunctionProto(OutputList& ol,const ArgumentList *al,const MemberDef*);
static void writeProcessProto(OutputList& ol,const ArgumentList *al,const MemberDef*);
static void writeProcedureProto(OutputList& ol, const ArgumentList *al,const MemberDef*);
static void writeFuncProcDocu(const MemberDef *mdef, OutputList& ol,const ArgumentList* al,bool type=false);
static void writeRecordProto(const MemberDef *mdef, OutputList& ol,const ArgumentList *al);
-
-
static void writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition* d, OutputList &ol);
static void writeVhdlDeclarations(MemberList*,OutputList&,GroupDef*,ClassDef*,FileDef*,NamespaceDef*);
@@ -272,7 +259,6 @@ static bool isMisc(const MemberDef *mdef)
static QCString splitString(QCString & str, char c);
static void parseUCF(const char* input,Entry* entity,QCString f,bool vendor);
-
static bool findConstraintFile( LayoutNavEntry *lne);
static ClassDef* findArchitecture(const ClassDef *cd);
@@ -284,16 +270,16 @@ static bool isMisc(const MemberDef *mdef)
static void writeSource(MemberDef *mdef,OutputList& ol,QCString & cname);
static void writeAlphbeticalClass(OutputList& ol,const ClassDef* cd,const QCString &);
+ static QCString parseForConfig(QCString & entity,QCString & arch);
+ static QCString parseForBinding(QCString & entity,QCString & arch);
- static QCString parseForConfig(QCString & entity,QCString & arch);
- static QCString parseForBinding(QCString & entity,QCString & arch);
private:
static void findAllArchitectures(QList<QCString>& ql,const ClassDef *cd);
static bool compareArgList(ArgumentList*,ArgumentList*);
static void writeVhdlLink(const ClassDef* cdd ,OutputList& ol,QCString& type,QCString& name,QCString& beh);
static void writeStringLink(const MemberDef *mdef,QCString mem,OutputList& ol);
- static void writeRecUnitDocu( const MemberDef *md, OutputList& ol,QCString largs);
- static void writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef);
+ static void writeRecUnitDocu( const MemberDef *md, OutputList& ol,QCString largs);
+ static void writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef);
};
#endif
diff --git a/src/vhdlparser.y b/src/vhdlparser.y
index d86bbff..1389f23 100644
--- a/src/vhdlparser.y
+++ b/src/vhdlparser.y
@@ -1,5 +1,5 @@
-/*********************************************************************************************
+/*********************************************************************************************
* The original was a VHDL parser description to be used with GMD Compiler
* Tool Box
* written from:
@@ -14,13 +14,13 @@
* author of YACC transformation:
* Thomas Dettmer
* Dortmund University
- * Dept. of Computer Scienc, LS1
+ * Dept. of Computer Scienc, LS1
* PB 500 500
* D-44221 Dortmund (Germany)
* Phone: +49-231-755-6464
* e-mail: dettmer@ls1.informatik.uni-dortmund.de
*****************************************************************
- *
+ *
* This file is intended not to be used for commercial purposes
* without permission of the University of Twente and permission
* of the University of Dortmund
@@ -29,9 +29,9 @@
* OR ANYTHING ELSE.
*
*******************************************************/
-/******************************************************************************
+/******************************************************************************
* modified for doxygen by M. Kreis
- * extended to VHDL 93/2002/2008
+ * extended to VHDL 93/2002/2008
******************************************************************************/
@@ -43,12 +43,12 @@
#ifndef YYSTYPE
typedef int YYSTYPE;
#endif
-
+
struct YYMM
{
- int itype;
+ int itype;
QCString qstr;
-};
+};
// define struct instead of union
#define YYSTYPE YYMM
@@ -84,6 +84,12 @@ static ConfNode* currNode;
static int currP=0;
+enum { GEN_SEC=0x1, PARAM_SEC,CONTEXT_SEC,PROTECTED_SEC } ;
+
+static int param_sec = 0;
+static int parse_sec=0;
+
+
//---------------------------- function --------------------------------------------------------------------------------
int vhdlScanYYlex ();
@@ -101,9 +107,9 @@ static bool isFuncProcProced();
static void popConfig();
static void pushLabel(QCString label);
static void popLabel();
-static void addConfigureNode(const char* a,const char*b,
+static void addConfigureNode(const char* a,const char*b,
bool isRoot,bool isLeave,bool inlineConf=FALSE);
-static bool addLibUseClause(const QCString &type);
+//static bool addLibUseClause(const QCString &type);
static bool isFuncProcProced();
static void initEntry(Entry *e);
static void addProto(const char *s1,const char *s2,const char *s3,
@@ -232,11 +238,11 @@ t_GROUP
t_POSTPONED
t_SHARED
t_XNOR
-t_SLL
-t_SRA
-t_SLA
+t_SLL
+t_SRA
+t_SLA
t_SRL
-t_ROR
+t_ROR
t_ROL
t_UNAFFECTED
/*============== VHDL 2008 keywords ======================= */
@@ -279,13 +285,13 @@ t_QNEQU
%nonassoc t_EQSym t_NESym t_LTSym t_LESym t_GTSym t_GESym t_QNEQU t_QEQU t_QL t_QG t_QLT t_QGT
%left t_Plus t_Minus t_Ampersand
%left MED_PRECEDENCE
-%left t_Star t_Slash t_MOD t_REM
-%nonassoc t_DoubleStar t_ABS t_NOT MAX_PRECEDENCE
+%left t_Star t_Slash t_MOD t_REM
+%nonassoc t_DoubleStar t_ABS t_NOT MAX_PRECEDENCE
/* misc syms */
/*t_Space */
-%token
+%token
t_Apostrophe
t_LeftParen
t_RightParen
@@ -303,28 +309,34 @@ t_Neg
t_LEFTBR
t_RIGHTBR
t_ToolDir
-
+
%type<qstr> designator literal enumeration_literal physical_literal physical_literal_no_default physical_literal_1
-%type<qstr> lib_clause use_clause sel_list entity_decl entity_start entity_decl_2 entity_decl_1 arch_body arch_start arch_body_1
-%type<qstr> config_decl config_start config_decl_2 config_decl_1 config_decl_3 package_decl package_start package_body pack_body_start package_body_2 package_body_1 common_decltve_item
+%type<qstr> lib_clause use_clause sel_list entity_decl entity_start entity_decl_2 entity_decl_1 arch_body arch_start arch_body_1
+%type<qstr> config_decl config_start config_decl_2 config_decl_1 config_decl_3 package_decl package_start package_body pack_body_start package_body_2 package_body_1 common_decltve_item
%type<qstr> config_decltve_item subprog_decl subprog_body interf_list interf_element interf_element_4 interf_element_3 interf_element_2 interf_element_1 mode
-%type<qstr> association_list association_list_1 association_list_2 gen_association_list gen_association_list_1 gen_association_list_2 association_element gen_association_element formal_part actual_part mark expr and_relation relation primary name name2 sel_name suffix ifts_name
-%type<qstr> attribute_name aggregate element_association_list2 qualified_expr element_association choices choices_1 choices_2 choice type_decl type_decl_1 type_definition enumeration_type_definition enumeration_type_definition_1 enumeration_type_definition_2 physical_type_definition physical_type_definition_1 physical_type_definition_2 base_unit_decl secondary_unit_decl unconstrained_array_definition unconstrained_array_definition_1 unconstrained_array_definition_2 index_subtype_definition constrained_array_definition record_type_definition record_type_definition_1 record_type_definition_2 element_decl
-%type<qstr> access_type_definition file_type_definition subtype_decl subtype_indic subtype_indic_1 subtype_indic1 subtype_indic1_1 range_constraint index_constraint index_constraint_1 index_constraint_2 discrete_range discrete_range1 range_spec direction constant_decl constant_decl_1 signal_decl signal_decl_2 signal_decl_1 variable_decl variable_decl_1 object_class signal_kind alias_decl file_decl file_decl_1 attribute_decl attribute_spec entity_spec entity_name_list entity_name_list_1
-%type<qstr> entity_name_list_2 entity_class block_stat
-%type<qstr> generate_stat generate_stat_1 procs_stat procs_stat1 procs_stat1_1 sensitivity_list sensitivity_list_1 sensitivity_list_2
-%type<qstr> procedure_call_stat comp_decl comp_decl_2 comp_decl_1 block_config block_config_2 block_config_3 block_config_1 block_config_4 block_spec config_item comp_config comp_config_2 comp_config_1 config_spec binding_indic comp_spec
-%type<qstr> inst_list entity_aspect idf_list procs_stat1_6
+%type<qstr> association_list association_list_1 association_list_2 gen_association_list gen_association_list_1 gen_association_list_2 association_element gen_association_element formal_part actual_part mark expr and_relation relation primary name name2 sel_name suffix ifts_name
+%type<qstr> attribute_name aggregate element_association_list2 qualified_expr element_association choices choices_1 choices_2 choice type_decl type_decl_1 type_definition enumeration_type_definition enumeration_type_definition_1 enumeration_type_definition_2 physical_type_definition physical_type_definition_1 physical_type_definition_2 base_unit_decl secondary_unit_decl unconstrained_array_definition unconstrained_array_definition_1 unconstrained_array_definition_2 index_subtype_definition constrained_array_definition record_type_definition record_type_definition_1 record_type_definition_2 element_decl
+%type<qstr> access_type_definition file_type_definition subtype_decl subtype_indic subtype_indic_1 subtype_indic1 subtype_indic1_1 range_constraint index_constraint index_constraint_1 index_constraint_2 discrete_range discrete_range1 range_spec direction constant_decl constant_decl_1 signal_decl signal_decl_2 signal_decl_1 variable_decl variable_decl_1 object_class signal_kind alias_decl file_decl file_decl_1 attribute_decl attribute_spec entity_spec entity_name_list entity_name_list_1
+%type<qstr> entity_name_list_2 entity_class block_stat
+%type<qstr> generate_stat generate_stat_1 procs_stat procs_stat1 procs_stat1_1 sensitivity_list sensitivity_list_1 sensitivity_list_2
+%type<qstr> procedure_call_stat comp_decl comp_decl_2 comp_decl_1 block_config block_config_2 block_config_3 block_config_1 block_config_4 block_spec config_item comp_config comp_config_2 comp_config_1 config_spec binding_indic comp_spec
+%type<qstr> inst_list entity_aspect idf_list procs_stat1_6
%type<qstr> t_Identifier t_StringLit t_BitStringLit t_AbstractLit t_CharacterLit tbox group_name record_type_simple_name
%type<qstr> entity_class_entry_list entity_class_entry group_constituent_list group_constituent group_declaration group_template_declaration
%type<qstr> procs_stat1_5 comp_1 mark_comp dot_name fi_dec multiplying_operator factor term adding_op
-%type<qstr> simple_exp alias_spec sigma signature1 mark_stats mark_stats_1 signature
-%type<qstr> protected_type_body protected_type_declaration alias_name_stat vcomp_stat comp_spec_stat
+%type<qstr> simple_exp alias_spec sigma signature1 mark_stats mark_stats_1 signature
+%type<qstr> protected_type_body protected_type_declaration alias_name_stat vcomp_stat comp_spec_stat
+%type<qstr> sig_stat external_name absolute_pathname relative_pathname package_path_name external_pathname pathname_element_list neg_list pathname_element
+
+%type<qstr> func_name return_is param func_prec iproc ifunc interface_subprogram_decl interface_package_decl package_instantiation_decl
+%type<qstr> subprogram_instantiation_decl
+%type<qstr> context_ref libustcont_stats libustcont_stat context_decl
+
%debug
// for debugging set yydebug=1
-%initial-action { yydebug=0; }
+%initial-action { yydebug=0; }
%expect 2
@@ -336,78 +348,84 @@ start: design_file
design_file : design_unit_list
-
+
design_unit_list: design_unit
- | design_unit_list design_unit
- ;
-
-designator : t_Identifier {$$=$1;}
- | t_StringLit {$$=$1;}
- ;
-
-literal : t_AbstractLit {$$=$1;}
- | t_CharacterLit {$$=$1;}
- | t_BitStringLit {$$=$1;}
- | physical_literal_no_default {$$=$1;}
- | t_NULL {$$="null";}
- ;
+ | design_unit_list design_unit
+ ;
-enumeration_literal : t_CharacterLit {$$=$1;}
- | t_Identifier {$$=$1;}
+designator : t_Identifier { $$=$1; }
+ | t_StringLit { $$=$1; }
+ ;
-physical_literal : physical_literal_1 t_Identifier {$$=$1+" "+$2;}
+literal : t_AbstractLit { $$=$1; }
+ | t_CharacterLit { $$=$1; }
+ | t_BitStringLit { $$=$1; }
+ | physical_literal_no_default { $$=$1; }
+ | t_NULL { $$="null"; }
+ ;
-physical_literal_1 : /* empty */ {$$="";}
- | t_AbstractLit {$$=$1;}
+enumeration_literal : t_CharacterLit { $$=$1; }
+ | t_Identifier { $$=$1; }
-physical_literal_no_default : t_AbstractLit t_Identifier {$$=$1+" "+$2;}
+physical_literal : physical_literal_1 t_Identifier { $$=$1+" "+$2; }
-idf_list : t_Identifier {$$=$1;}
- | idf_list t_Comma t_Identifier {$$=$1+","+$3}
- ;
+physical_literal_1 : /* empty */ { $$=""; }
+ | t_AbstractLit { $$=$1; }
+
+physical_literal_no_default : t_AbstractLit t_Identifier { $$=$1+" "+$2; }
+
+idf_list : t_Identifier { $$=$1; }
+ | idf_list t_Comma t_Identifier { $$=$1+","+$3}
+ ;
/*------------------------------------------
-- Desing Unit
--------------------------------------------*/
- design_unit : context_list lib_unit
-
- context_list : /* empty */
- | context_list context_item
+design_unit : context_list lib_unit
- lib_unit : entity_decl
- | config_decl
- | package_decl
- | arch_body
- | package_body
+context_list : /* empty */
+ | context_list context_item
+
+lib_unit : entity_decl
+ | config_decl
+ | package_decl
+ | arch_body
+ | package_body
| context_decl
| package_instantiation_decl
;
-
-context_item : lib_clause
- | use_clause
- ;
-
-lib_clause : t_LIBRARY idf_list t_Semicolon
-{
- if (addLibUseClause($2))
- addVhdlType($2,getParsedLine(t_LIBRARY),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,$2.data(),0);
-}
-use_clause : t_USE sel_list t_Semicolon
- {
- QStringList ql1=QStringList::split(",",$2,FALSE);
- for (uint j=0;j<ql1.count();j++)
+context_item : lib_clause
+ | use_clause
+ ;
+
+lib_clause : t_LIBRARY idf_list t_Semicolon
+ {
+ if ( parse_sec == 0)
+ {
+ addVhdlType($2,getParsedLine(t_LIBRARY),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,$2.data(),"_library_");
+ }
+ $$="library "+$2;
+ }
+
+use_clause : t_USE sel_list t_Semicolon
{
- QStringList ql=QStringList::split(".",ql1[j],FALSE);
- QCString it=(QCString)ql[1];;
- if (addLibUseClause(it))
- addVhdlType(it,getParsedLine(t_USE),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),0);
+ QStringList ql1=QStringList::split(",",$2,FALSE);
+ for (uint j=0;j<ql1.count();j++)
+ {
+ QStringList ql=QStringList::split(".",ql1[j],FALSE);
+ QCString it=(QCString)ql[1];;
+ if ( parse_sec == 0 )
+ {
+ addVhdlType(it,getParsedLine(t_USE),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_");
+ }
+ }
+ $$="use "+$2;
}
- }
-sel_list : sel_name {$$=$1;}
- | sel_list t_Comma sel_name { $$=$1+","+$3;}
+sel_list : sel_name { $$=$1; }
+ | sel_list t_Comma sel_name { $$=$1+","+$3; }
;
/*------------------------------------------
-- Library Units
@@ -419,136 +437,136 @@ entity_decl : entity_start entity_decl_1 entity_decl_2
entity_decl_3 entity_decl_4 comp_end_dec t_Semicolon
entity_start: t_ENTITY t_Identifier t_IS
- {
- $$=$2;
- lastEntity=current;
- addVhdlType($$,getParsedLine(t_ENTITY),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
- //fprintf(stderr,"\n entiy %s : at line %d",$$.data(),s_str.yyLineNr);
- }
- ;
-
+ {
+ $$=$2;
+ lastEntity=current;
+ lastCompound=0;
+ /*int k=*/ getParsedLine(t_ENTITY);
+ addVhdlType($$,getParsedLine(t_ENTITY),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
+ //fprintf(stderr,"\n entiy %s : at line %d",$$.data(),s_str.yyLineNr);
+ }
+ ;
entity_decl_5 : /* empty */
- | t_Identifier
-
- ;
+ | t_Identifier
+ ;
entity_decl_4 : /* empty */
- | t_BEGIN concurrent_stats
- ;
+ | t_BEGIN concurrent_stats
+ ;
entity_decl_3 : /* empty */
- | entity_decl_3 entity_decl_6
- ;
-
-entity_decl_6 : entity_decltve_item
-
-entity_decl_2 : /* empty */ {$$="";}
- | t_PORT {currP=VhdlDocGen::PORT;} interf_list t_Semicolon {currP=0;}
- ;
-entity_decl_1 : /* empty */ {$$="";}
- | t_GENERIC {currP=VhdlDocGen::GENERIC;} interf_list t_Semicolon{currP=0;}
- | t_GENERIC error t_Semicolon{currP=0;}
-
- ;
-
-
-arch_body : arch_start arch_body_1 t_BEGIN concurrent_stats t_END arch_body_2 t_Semicolon
-arch_body : arch_start error t_END arch_body_2 t_Semicolon
-
-arch_start : t_ARCHITECTURE t_Identifier t_OF t_Identifier t_IS
- {
- $$=$4;
- $$+="::";
- $$+=$2;
- pushLabel($2);
- lastCompound=current;
- addVhdlType($$,getParsedLine(t_ARCHITECTURE),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
- }
-arch_body_2 : /* empty */
-arch_body_2 : t_Identifier
-arch_body_2 : t_ARCHITECTURE t_Identifier
-arch_body_2 : t_ARCHITECTURE
-
-arch_body_1 : /* empty */ {$$="";}
- arch_body_1 : arch_body_1 arch_body_3
+ | entity_decl_3 entity_decl_6
+ ;
-arch_body_3 : block_decltve_item
+entity_decl_6 : entity_decltve_item
-config_decl : config_start error t_END config_decl_2 t_Semicolon {genLabels.resize(0);}
-config_decl : config_start config_decl_1 block_config t_END config_decl_2 t_Semicolon {genLabels.resize(0);}
- {
- confName="";
- }
+entity_decl_2 : /* empty */ { $$=""; }
+ | t_PORT { currP=VhdlDocGen::PORT; } interf_list t_Semicolon { currP=0; }
+ ;
+entity_decl_1 : /* empty */ { $$=""; }
+ | t_GENERIC { currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC} interf_list t_Semicolon{ currP=0;parse_sec=0; }
+ | t_GENERIC error t_Semicolon{ currP=0; }
+ ;
-
-config_start : t_CONFIGURATION t_Identifier t_OF t_Identifier t_IS
- {
- confName=$2+"::"+$4;
- addVhdlType($2.data(),getParsedLine(t_CONFIGURATION),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",$4.data());
- }
-config_decl_2 : /* empty */ {$$="";}
-config_decl_2 : t_Identifier { $$=$1;}
-config_decl_2 : t_CONFIGURATION { $$="configuration";}
-config_decl_2 : t_CONFIGURATION t_Identifier { $$=$2;}
-config_decl_1 : /* empty */ {$$="";}
-config_decl_1 : config_decl_1 config_decl_3 { $$=$1+" "+$2;}
-config_decl_3 : config_decltve_item { $$=$1;}
-
-package_decl : package_start error t_END package_decl_2 t_Semicolon
-package_decl : package_start package_decl_1 t_END package_decl_2 t_Semicolon
-package_start : t_PACKAGE t_Identifier t_IS
+arch_body : arch_start arch_body_1 t_BEGIN concurrent_stats t_END arch_body_2 t_Semicolon
+arch_body : arch_start error t_END arch_body_2 t_Semicolon
+
+arch_start : t_ARCHITECTURE t_Identifier t_OF t_Identifier t_IS
+ {
+ $$=$4;
+ $$+="::";
+ $$+=$2;
+ pushLabel($2);
+ lastCompound=current;
+ addVhdlType($$,getParsedLine(t_ARCHITECTURE),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
+ }
+arch_body_2 : /* empty */
+arch_body_2 : t_Identifier
+arch_body_2 : t_ARCHITECTURE t_Identifier
+arch_body_2 : t_ARCHITECTURE
+
+arch_body_1 : /* empty */ { $$=""; }
+arch_body_1 : arch_body_1 arch_body_3
+
+arch_body_3 : block_decltve_item
+
+config_decl : config_start error t_END config_decl_2 t_Semicolon { genLabels.resize(0); }
+config_decl : config_start config_decl_1 block_config t_END config_decl_2 t_Semicolon { genLabels.resize(0); }
+ {
+ confName="";
+ }
+
+
+config_start : t_CONFIGURATION t_Identifier t_OF t_Identifier t_IS
+ {
+ confName=$2+"::"+$4;
+ addVhdlType($2.data(),getParsedLine(t_CONFIGURATION),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",$4.data());
+ }
+
+config_decl_2 : /* empty */ { $$=""; }
+config_decl_2 : t_Identifier { $$=$1; }
+config_decl_2 : t_CONFIGURATION { $$="configuration"; }
+config_decl_2 : t_CONFIGURATION t_Identifier { $$=$2; }
+config_decl_1 : /* empty */ { $$=""; }
+config_decl_1 : config_decl_1 config_decl_3 { $$=$1+" "+$2; }
+config_decl_3 : config_decltve_item { $$=$1; }
+
+package_decl : package_start error t_END package_decl_2 t_Semicolon
+package_decl : package_start package_decl_1 t_END package_decl_2 t_Semicolon
+package_start : t_PACKAGE t_Identifier t_IS
{
lastCompound=current;
-
-
+
+
Entry *clone=new Entry(*current);
clone->section=Entry::NAMESPACE_SEC;
clone->spec=VhdlDocGen::PACKAGE;
clone->name=$2;
- clone->startLine= getParsedLine(t_PACKAGE);
- clone->bodyLine= getParsedLine(t_PACKAGE);
-
+ int line=s_str.iLine;
+ clone->startLine=line;
+ clone->bodyLine=line;
+
clone->protection=Package;
current_root->addSubEntry(clone);
-
-
- addVhdlType($2,getParsedLine(t_PACKAGE),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
+
+
+ addVhdlType($2,line,Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
//fprintf(stderr,"\n entiy %s : at line %d",$$.data(),s_str.yyLineNr);
}
-package_decl_2 : /* empty */
-package_decl_2 : t_Identifier {lastCompound=0;}
-package_decl_2 : t_PACKAGE t_Identifier {lastCompound=0;}
-package_decl_2 : t_PACKAGE {lastCompound=0;}
-
-package_decl_1 : /* empty */
+package_decl_2 : /* empty */
+package_decl_2 : t_Identifier { lastCompound=0; }
+package_decl_2 : t_PACKAGE t_Identifier { lastCompound=0; }
+package_decl_2 : t_PACKAGE { lastCompound=0; }
+
+package_decl_1 : /* empty */
package_decl_1 : package_decl_22
-package_decl_1 : package_decl_1 package_decl_3
-package_decl_3 : package_decltve_item
+package_decl_1 : package_decl_1 package_decl_3
+package_decl_3 : package_decltve_item
package_decl_22: gen_interface_list t_Semicolon
package_decl_22: gen_interface_list
package_decl_22: gen_interface_list gen_assoc_list
package_decl_22: gen_interface_list gen_assoc_list t_Semicolon
-package_body : pack_body_start error t_END package_body_2 t_Semicolon
-package_body : pack_body_start package_body_1 t_END package_body_2 t_Semicolon
-pack_body_start : t_PACKAGE t_BODY t_Identifier t_IS
+package_body : pack_body_start error t_END package_body_2 t_Semicolon
+package_body : pack_body_start package_body_1 t_END package_body_2 t_Semicolon
+pack_body_start : t_PACKAGE t_BODY t_Identifier t_IS
{
$$=$3;
lastCompound=current;
$$.prepend("_");
addVhdlType($$,getParsedLine(t_PACKAGE) ,Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
}
-package_body_2 : /* empty */ {$$="";lastCompound=0;}
-package_body_2 : t_Identifier {lastCompound=0;}
-package_body_2 : t_PACKAGE t_BODY {lastCompound=0;}
-package_body_2 : t_PACKAGE t_BODY t_Identifier {lastCompound=0;}
+package_body_2 : /* empty */ { $$="";lastCompound=0; }
+package_body_2 : t_Identifier { lastCompound=0; }
+package_body_2 : t_PACKAGE t_BODY { lastCompound=0; }
+package_body_2 : t_PACKAGE t_BODY t_Identifier { lastCompound=0; }
-package_body_1 : /* empty */ {$$="";}
-package_body_1 : package_body_1 package_body_3
-package_body_3 : package_body_decltve_item
+package_body_1 : /* empty */ { $$=""; }
+package_body_1 : package_body_1 package_body_3
+package_body_3 : package_body_decltve_item
@@ -556,229 +574,280 @@ package_body_3 : package_body_decltve_item
-- Declarative Item
--------------------------------------------*/
-common_decltve_item_1 : package_decl
-common_decltve_item_1 : package_instantiation_decl
-common_decltve_item_1 : package_body
-common_decltve_item_1 : subprogram_instantiation_decl
-
-
-common_decltve_item : type_decl
-common_decltve_item : subtype_decl
-common_decltve_item : constant_decl
-common_decltve_item : file_decl
-common_decltve_item : alias_decl
-common_decltve_item : subprog_decl
-common_decltve_item : use_clause
-
-entity_decltve_item : common_decltve_item
-entity_decltve_item : subprog_body
-entity_decltve_item : attribute_decl
-entity_decltve_item : attribute_spec
-entity_decltve_item : disconnection_spec
-entity_decltve_item : signal_decl
-entity_decltve_item : variable_decl
-entity_decltve_item : group_template_declaration
-entity_decltve_item : group_declaration
-entity_decltve_item : common_decltve_item_1
-
-
-block_decltve_item : common_decltve_item
-block_decltve_item : subprog_body
-block_decltve_item : comp_decl
-block_decltve_item : attribute_decl
-block_decltve_item : attribute_spec
-block_decltve_item : config_spec
-block_decltve_item : disconnection_spec
-block_decltve_item : signal_decl
-block_decltve_item : variable_decl
-block_decltve_item : group_template_declaration
-block_decltve_item : group_declaration
-block_decltve_item : common_decltve_item_1
-block_decltve_item : tool_directive
-block_declarative_part : block_decltve_item
- | block_declarative_part block_decltve_item
-
-
-package_decltve_item : common_decltve_item
-package_decltve_item : comp_decl
-package_decltve_item : attribute_decl
-package_decltve_item : attribute_spec
-package_decltve_item : disconnection_spec
-package_decltve_item : signal_decl
-package_decltve_item : variable_decl
-package_decltve_item : group_template_declaration
- package_decltve_item : group_declaration
- package_decltve_item : package_decl
- package_decltve_item : package_instantiation_decl
- package_decltve_item : subprogram_instantiation_decl
-
-package_body_decltve_item : common_decltve_item
-package_body_decltve_item : subprog_body
-package_body_decltve_item : variable_decl
-package_body_decltve_item : group_template_declaration
-package_body_decltve_item : group_declaration
-package_body_decltve_item :attribute_decl
-package_body_decltve_item :attribute_spec
-package_body_decltve_item : common_decltve_item_1
-
-subprog_decltve_item : common_decltve_item
-subprog_decltve_item : subprog_body
-subprog_decltve_item : attribute_decl
-subprog_decltve_item : attribute_spec
-subprog_decltve_item : variable_decl
-subprog_decltve_item : group_template_declaration
-subprog_decltve_item : group_declaration
-subprog_decltve_item : common_decltve_item_1
-
-procs_decltve_item : common_decltve_item
-procs_decltve_item : subprog_body
-procs_decltve_item : attribute_decl
-procs_decltve_item : attribute_spec
-procs_decltve_item : variable_decl
-procs_decltve_item : group_template_declaration
-procs_decltve_item : group_declaration
-procs_decltve_item : common_decltve_item_1
-
-config_decltve_item : attribute_spec { $$=$1;}
-config_decltve_item : use_clause { $$=$1;}
-config_decltve_item : group_declaration { $$=$1;}
-config_decltve_item: t_USE t_VUNIT idf_list t_Semicolon { $$=$3;}
+common_decltve_item_1: package_decl
+common_decltve_item_1: package_instantiation_decl
+common_decltve_item_1: package_body
+common_decltve_item_1: subprogram_instantiation_decl
+
+
+common_decltve_item: type_decl
+common_decltve_item: subtype_decl
+common_decltve_item: constant_decl
+common_decltve_item: file_decl
+common_decltve_item: alias_decl
+common_decltve_item: subprog_decl
+common_decltve_item: use_clause
+
+entity_decltve_item: common_decltve_item
+entity_decltve_item: subprog_body
+entity_decltve_item: attribute_decl
+entity_decltve_item: attribute_spec
+entity_decltve_item: disconnection_spec
+entity_decltve_item: signal_decl
+entity_decltve_item: variable_decl
+entity_decltve_item: group_template_declaration
+entity_decltve_item: group_declaration
+entity_decltve_item: common_decltve_item_1
+
+
+block_decltve_item: common_decltve_item
+block_decltve_item: subprog_body
+block_decltve_item: comp_decl
+block_decltve_item: attribute_decl
+block_decltve_item: attribute_spec
+block_decltve_item: config_spec
+block_decltve_item: disconnection_spec
+block_decltve_item: signal_decl
+block_decltve_item: variable_decl
+block_decltve_item: group_template_declaration
+block_decltve_item: group_declaration
+block_decltve_item: common_decltve_item_1
+block_decltve_item: tool_directive
+
+block_declarative_part: block_decltve_item
+ | block_declarative_part block_decltve_item
+
+
+package_decltve_item: common_decltve_item
+package_decltve_item: comp_decl
+package_decltve_item: attribute_decl
+package_decltve_item: attribute_spec
+package_decltve_item: disconnection_spec
+package_decltve_item: signal_decl
+package_decltve_item: variable_decl
+package_decltve_item: group_template_declaration
+package_decltve_item: group_declaration
+package_decltve_item: package_decl
+package_decltve_item: package_instantiation_decl
+package_decltve_item: subprogram_instantiation_decl
+
+package_body_decltve_item: common_decltve_item
+package_body_decltve_item: subprog_body
+package_body_decltve_item: variable_decl
+package_body_decltve_item: group_template_declaration
+package_body_decltve_item: group_declaration
+package_body_decltve_item: attribute_decl
+package_body_decltve_item: attribute_spec
+package_body_decltve_item: common_decltve_item_1
+
+subprog_decltve_item: common_decltve_item
+subprog_decltve_item: subprog_body
+subprog_decltve_item: attribute_decl
+subprog_decltve_item: attribute_spec
+subprog_decltve_item: variable_decl
+subprog_decltve_item: group_template_declaration
+subprog_decltve_item: group_declaration
+subprog_decltve_item: common_decltve_item_1
+
+procs_decltve_item: common_decltve_item
+procs_decltve_item: subprog_body
+procs_decltve_item: attribute_decl
+procs_decltve_item: attribute_spec
+procs_decltve_item: variable_decl
+procs_decltve_item: group_template_declaration
+procs_decltve_item: group_declaration
+procs_decltve_item: common_decltve_item_1
+
+config_decltve_item: attribute_spec { $$=$1; }
+config_decltve_item: use_clause { $$=$1; }
+config_decltve_item: group_declaration { $$=$1; }
+config_decltve_item: t_USE t_VUNIT idf_list t_Semicolon { $$=$3; }
/*------------------------------------------
-- Subprograms
--------------------------------------------*/
-func_prec: t_PURE
-func_prec: t_IMPURE
-
-subprog_decl : subprog_spec t_Semicolon {currP=0;}
-
-subprog_spec : t_PROCEDURE t_Identifier {currP=VhdlDocGen::PROCEDURE; createFunction($2,currP,0); } subprog_spec_1 { newEntry(); }
-subprog_spec : func_prec t_FUNCTION designator subprog_spec_2 t_RETURN mark
-subprog_spec : t_FUNCTION designator
-{
- currP=VhdlDocGen::FUNCTION;
- createFunction(0,currP,$2.data());
-} subprog_spec_2 t_RETURN mark
-{
- tempEntry=current;
- current->type=$6;
- newEntry();
-}
+func_prec: t_PURE { $$="pure"; }
+func_prec: t_IMPURE { $$="impure"; }
+
+subprog_decl: subprog_spec t_Semicolon { currP=0; }
+
+subprog_spec: t_PROCEDURE t_Identifier
+ { currP=VhdlDocGen::PROCEDURE; createFunction($2,currP,0); }
+ subprog_spec_1 { newEntry(); }
+subprog_spec: func_prec t_FUNCTION designator
+ {
+ currP=VhdlDocGen::FUNCTION;
+ createFunction($1,currP,$3.data());
+ }
+ subprog_spec_2 t_RETURN mark
+ {
+ tempEntry=current;
+ current->type=$7;
+ newEntry();
+ }
+
+subprog_spec : t_FUNCTION designator
+ {
+ currP=VhdlDocGen::FUNCTION;
+ createFunction(0,currP,$2.data());
+ }
+ subprog_spec_2 t_RETURN mark
+ {
+ tempEntry=current;
+ current->type=$6;
+ newEntry();
+ }
subprog_spec_22: gen_interface_list
subprog_spec_22: gen_interface_list gen_assoc_list
-subprog_spec_33: t_PARAMETER interf_list
-subprog_spec_33: interf_list
+subprog_spec_33: t_PARAMETER
+ { param_sec=PARAM_SEC; }
+ interf_list
+ { param_sec= 0; }
+subprog_spec_33: { param_sec=PARAM_SEC; }
+ interf_list
+ { param_sec= 0; }
-subprog_spec_2 : /* empty */
-subprog_spec_2 : subprog_spec_22 subprog_spec_33
-subprog_spec_2 : subprog_spec_33
-subprog_spec_2 : subprog_spec_22
-
-subprog_spec_1 : subprog_spec_2
+subprog_spec_2: /* empty */
+subprog_spec_2: subprog_spec_22 subprog_spec_33
+subprog_spec_2: subprog_spec_33
+subprog_spec_2: subprog_spec_22
-subprog_body : subprog_spec t_IS subprog_body_1 t_BEGIN seq_stats t_END subprog_body_2 t_Semicolon
-{
- currP=0;
-}
-subprog_body : subprog_spec t_IS error t_END subprog_body_2 t_Semicolon
-{
- currP=0;
-}
-subprog_body_2 : /* empty */
-subprog_body_2 : designator
-subprog_body_2 : t_FUNCTION
-subprog_body_2 : t_PROCEDURE
-subprog_body_2 : t_PROCEDURE t_Identifier
-subprog_body_2 : t_FUNCTION t_Identifier
-subprog_body_2 : t_FUNCTION t_STRING
-
-
-subprog_body_1 : /* empty */
+subprog_spec_1: subprog_spec_2
+
+subprog_body: subprog_spec t_IS subprog_body_1 t_BEGIN seq_stats t_END subprog_body_2 t_Semicolon
+ {
+ currP=0;
+ }
+subprog_body: subprog_spec t_IS error t_END subprog_body_2 t_Semicolon
+ {
+ currP=0;
+ }
+subprog_body_2: /* empty */
+subprog_body_2: designator
+subprog_body_2: t_FUNCTION
+subprog_body_2: t_PROCEDURE
+subprog_body_2: t_PROCEDURE t_Identifier
+subprog_body_2: t_FUNCTION t_Identifier
+subprog_body_2: t_FUNCTION t_STRING
+
+
+subprog_body_1: /* empty */
//subprog_body_1 : subprogram_instantiation_decl
-subprog_body_1 : subprog_body_1 subprog_body_3
-subprog_body_3 : subprog_decltve_item
+subprog_body_1: subprog_body_1 subprog_body_3
+subprog_body_3: subprog_decltve_item
/*--------------------------------------------------
-- Interface Lists and Associaton Lists
----------------------------------------------------*/
-interf_list : t_LeftParen interf_element interf_list_1 t_RightParen {$$="";}
-interf_list : t_LeftParen error t_RightParen {$$="";}
-interf_list_1 : /* empty */
-interf_list_1 : interf_list_1 interf_list_2
-interf_list_2 : t_Semicolon interf_element
-
-
-interf_element : interface_package_decl {$$="";}
-interf_element : interface_subprogram_decl {$$="";}
-interf_element : interf_element_1 t_Identifier {$$="";}
-interf_element : interf_element_1 idf_list t_Colon interf_element_2 subtype_indic interf_element_3 interf_element_4
- {
- if (currP!=VhdlDocGen::COMPONENT)
- {
- if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
- {
- addProto($1.data(),$2.data(),$4.data(),$5.data(),$6.data(),$7.data());
- }
- else
- {
- QCString i=$5+$6+$7;
- addVhdlType($2,s_str.iLine,Entry::VARIABLE_SEC,currP,i.data(),$4.data());
- }
- // fprintf(stderr,"\n\n <<port %s >>\n",$$.data());
- } // if component
- }
-interf_element_4 : /* empty :=*/ {$$="";}
-interf_element_4 : t_VarAsgn expr {$$=":="+$2;}
-interf_element_3 : /* empty */ {$$="";}
-interf_element_3 : t_BUFFER {$$="buffer";}
-interf_element_3 : t_BUS {$$="bus";}
-interf_element_2 : /* empty */ {$$="";}
-interf_element_2 : mode {$$=$1;}
-interf_element_1 : /* empty */ {$$="";}
-interf_element_1 : object_class {$$=$1;}
-
-mode : t_IN {$$="in";}
-mode : t_OUT {$$="out";}
-mode : t_INOUT {$$="inout";}
-mode : t_BUFFER {$$="buffer";}
-mode : t_LINKAGE {$$="link";}
-
-association_list : t_LeftParen association_element association_list_1 t_RightParen {$$="("+$2+")";}
-association_list_1 : /* empty */ {$$="";}
-association_list_1 : association_list_1 association_list_2 {$$=$1+" "+$2; }
-association_list_2 : t_Comma association_element {$$=", "+$2; }
-
-gen_association_list : t_LeftParen gen_association_element gen_association_list_1 t_RightParen
-{
- QCString str="( "+$2;
- str.append(" )");
- $$=str;
-}
-gen_association_list : t_LeftParen error t_RightParen {$$="";}
-gen_association_list :t_LeftParen t_OPEN t_RightParen {$$=" ( open ) ";}
-
-gen_association_list_1 : /* empty */ {$$="";}
-gen_association_list_1 : gen_association_list_1 gen_association_list_2 {$$=$1+"?? "+$2; }
-gen_association_list_2 : t_Comma gen_association_element {$$=","+$2;}
-
-association_element : formal_part t_Arrow actual_part {$$=$1+"=>"+$3;}
-association_element : actual_part {$$=$1;}
-association_element : t_Box {$$="<>";}
-association_element : t_DEFAULT {$$="default";}
+interf_list: t_LeftParen interf_element interf_list_1 t_RightParen { $$=""; }
+interf_list: t_LeftParen error t_RightParen { $$=""; }
+interf_list_1: /* empty */
+interf_list_1: interf_list_1 interf_list_2
+interf_list_2: t_Semicolon interf_element
+
+interf_element: interface_package_decl
+ {
+ // adding generic : [ package foo is new bar]
+ if (parse_sec==GEN_SEC)
+ {
+ QCString n=current->name;
+ addVhdlType(n.data(),getParsedLine(t_PACKAGE),Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,$1.data(),0);
+ }
+ }
+interf_element: interface_subprogram_decl
+ {
+ if (parse_sec==GEN_SEC)
+ {
+ int a=getParsedLine(t_FUNCTION);
+ int b=getParsedLine(t_PROCEDURE);
+
+ if (a>b) b=a;
+
+ QCString n=current->name;
+ addVhdlType(n.data(),b,Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,$1.data(),0);
+ }
+ }
+interf_element: interf_element_1 t_Identifier
+ {
+ if (parse_sec==GEN_SEC)
+ {
+ QCString v= $1;
+ addVhdlType($2,s_str.iLine,Entry::VARIABLE_SEC,currP,$1.data(),0);
+ }
+ }
+interf_element: interf_element_1 idf_list t_Colon interf_element_2 subtype_indic interf_element_3 interf_element_4
+ {
+ QCString b=$2;
+ $$=$2+":"+$4+$5+$6+$7;
+ if (currP!=VhdlDocGen::COMPONENT)
+ {
+ if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
+ {
+ addProto($1.data(),$2.data(),$4.data(),$5.data(),$6.data(),$7.data());
+ }
+ else
+ {
+ QCString i=$5+$6+$7;
+ if (currP==VhdlDocGen::GENERIC)
+ addVhdlType($2,s_str.iLine,Entry::VARIABLE_SEC,currP,i.data(),$4.data());
+ else if(parse_sec != GEN_SEC)
+ addVhdlType($2,s_str.iLine,Entry::VARIABLE_SEC,currP,i.data(),$4.data());
+ }
+ // fprintf(stderr,"\n\n <<port %s >>\n",$$.data());
+ } // if component
+ }
+interf_element_4: /* empty :=*/ { $$=""; }
+interf_element_4: t_VarAsgn expr { $$=":="+$2; }
+interf_element_3: /* empty */ { $$=""; }
+interf_element_3: t_BUFFER { $$="buffer"; }
+interf_element_3: t_BUS { $$="bus"; }
+interf_element_2: /* empty */ { $$=""; }
+interf_element_2: mode { $$=$1; }
+interf_element_1: /* empty */ { $$=""; }
+interf_element_1: object_class { $$=$1; }
+
+mode: t_IN { $$="in"; }
+mode: t_OUT { $$="out"; }
+mode: t_INOUT { $$="inout"; }
+mode: t_BUFFER { $$="buffer"; }
+mode: t_LINKAGE { $$="link"; }
+
+association_list: t_LeftParen association_element association_list_1 t_RightParen { $$="("+$2+")"; }
+association_list_1: /* empty */ { $$=""; }
+association_list_1: association_list_1 association_list_2 { $$=$1+" "+$2; }
+association_list_2: t_Comma association_element { $$=", "+$2; }
+
+gen_association_list : t_LeftParen gen_association_element gen_association_list_1 t_RightParen
+ {
+ QCString str="( "+$2;
+ str.append(" )");
+ $$=str;
+ }
+gen_association_list: t_LeftParen error t_RightParen { $$=""; }
+gen_association_list: t_LeftParen t_OPEN t_RightParen { $$=" ( open ) "; }
+
+gen_association_list_1: /* empty */ { $$=""; }
+gen_association_list_1: gen_association_list_1 gen_association_list_2 { $$=$1+"?? "+$2; }
+gen_association_list_2: t_Comma gen_association_element { $$=","+$2; }
+
+association_element: formal_part t_Arrow actual_part { $$=$1+"=>"+$3; }
+association_element: actual_part { $$=$1; }
+association_element: t_Box { $$="<>"; }
+association_element: t_DEFAULT { $$="default"; }
/* changed ;gen_association_element : association_element */
-gen_association_element : expr { $$=$1; }
-gen_association_element : choice t_Arrow expr
-gen_association_element :discrete_range1 { $$=$1 ;}
+gen_association_element: expr { $$=$1; }
+gen_association_element: choice t_Arrow expr
+gen_association_element: discrete_range1 { $$=$1 ; }
-formal_part : name {$$=$1;}
+formal_part: name { $$=$1; }
-actual_part : expr {$$=$1;}
-actual_part : t_OPEN {$$="open";}
-actual_part : t_INERTIAL expr {$$="inertial";}
+actual_part: expr { $$=$1; }
+actual_part: t_OPEN { $$="open"; }
+actual_part: t_INERTIAL expr { $$="inertial"; }
/*--------------------------------------------------
-- Names and Expressions
@@ -786,442 +855,424 @@ actual_part : t_INERTIAL expr {$$="inertial";}
-expr : and_relation {$$=$1;}
-expr : relation {$$=$1;}
+expr: and_relation { $$=$1; }
+expr: relation { $$=$1; }
-shift_op: t_SLL
- | t_SRA
- | t_SLA
- |t_SRL
- |t_ROR
- |t_ROL
- ;
-and_relation : relation shift_op relation
-and_relation : relation t_AND relation
-and_relation : relation t_XOR relation
-and_relation : relation t_OR relation
-and_relation : relation t_NOR relation
-and_relation : relation t_XNOR relation
-and_relation : relation t_NAND relation
-and_relation : and_relation t_NAND relation
-and_relation : and_relation t_NOR relation
-and_relation : and_relation t_XNOR relation
-and_relation : and_relation t_AND relation
-and_relation : and_relation t_OR relation
-and_relation : and_relation t_XOR relation
-
-
-
-/* ;relation : unary_operator primary */
-
-
-relation : t_QQ primary {$$=" ?? "+$2;}
-relation : primary {$$=$1;}
-relation : t_Plus primary %prec MED_PRECEDENCE {$$="+"+$2;}
-relation : t_Minus primary %prec MED_PRECEDENCE {$$="-"+$2 ;}
-relation : t_ABS primary {$$="abs"+$2;}
-relation : t_NOT primary {$$="not "+$2;}
-relation : primary t_DoubleStar primary {$$=$1+" ** "+$3;}
-relation : t_Minus primary t_DoubleStar primary {$$=$2+" ** "+$4;}
-
-/* ; relation : relation binary_operator primary */
-
-relation : relation t_MOD relation {$$=$1+" mod "+$3;}
-relation : relation t_REM relation {$$=$1+" rem "+$3;}
-relation : relation t_Ampersand relation {$$=$1+" & "+$3;}
-relation : relation t_Star relation {$$=$1+" * "+$3;}
-relation : relation t_Plus relation {$$=$1+" + "+$3;}
-relation : relation t_Minus relation {$$=$1+" - "+$3;}
-relation : relation t_LESym relation {$$=$1+" <= "+$3;}
-relation : relation t_GESym relation {$$=$1+" >= "+$3;}
-relation : relation t_LTSym relation {$$=$1+" < "+$3;}
-relation : relation t_GTSym relation {$$=$1+" > "+$3;}
-relation : relation t_EQSym relation {$$=$1+" == "+$3;}
-relation : relation t_NESym relation {$$=$1+" != "+$3;}
-relation : relation t_Slash relation {$$=$1+" /"+$3;}
-relation : relation t_QNEQU relation {$$=$1+" ?/="+$3;}
-relation : relation t_QEQU relation {$$=$1+" ?="+$3;}
-relation : relation t_QL relation {$$=$1+" ?<"+$3;}
-relation : relation t_QG relation {$$=$1+" ?>"+$3;}
-relation : relation t_QLT relation {$$=$1+" ?<="+$3;}
-relation : relation t_QGT relation {$$=$1+" ?>="+$3;}
-
-
-
-simple_exp: t_Minus term { $$ = "-"+$2;}
- | t_Plus term { $$ = "+"+$2;}
- | term { $$ = $1;}
- | simple_exp adding_op term { $$ = $1+" "+$2+" "+$3;}
-
-adding_op: t_Ampersand { $$ = "&";}
- | t_Minus { $$ = "-";}
- | t_Plus { $$ = "+";}
- ;
-
-term : factor { $$=$1; }
- | factor multiplying_operator factor { $$ = $1+" "+$2+" "+$3;}
+shift_op: t_SLL
+ | t_SRA
+ | t_SLA
+ | t_SRL
+ | t_ROR
+ | t_ROL
;
-
-multiplying_operator: t_Star { $$ = "*";}
- | t_REM { $$ = "rem";}
- | t_MOD { $$ = "mod";}
- | t_Slash { $$ = "/";}
-
-factor : primary { $$=$1; }
- | t_ABS primary { $$="abs "+$2; }
- | t_NOT primary { $$="not "+$2; }
- | primary t_DoubleStar primary { $$ = $1+" ** "+$3;}
-
-
-primary : name {$$=$1;}
-primary : literal {$$=$1;}
-primary : aggregate {$$=$1;}
-primary : qualified_expr {$$=$1;}
-primary : allocator {$$="";}
-primary : t_LeftParen expr t_RightParen {$$="("+$2+")";}
-
+and_relation: relation shift_op relation
+and_relation: relation t_AND relation
+and_relation: relation t_XOR relation
+and_relation: relation t_OR relation
+and_relation: relation t_NOR relation
+and_relation: relation t_XNOR relation
+and_relation: relation t_NAND relation
+and_relation: and_relation t_NAND relation
+and_relation: and_relation t_NOR relation
+and_relation: and_relation t_XNOR relation
+and_relation: and_relation t_AND relation
+and_relation: and_relation t_OR relation
+and_relation: and_relation t_XOR relation
-name : mark {$$=$1;}
-name : name2 {$$=$1;}
-name : external_name {$$="";}
-name2 : t_StringLit {$$=$1;}
-name2 : attribute_name {$$=$1;}
-name2 : ifts_name {$$=$1;}
-
-mark : t_Identifier {$$=$1;}
-mark : sel_name {$$=$1;}
-
-sel_name : name t_Dot suffix {$$=$1+"."+$3;}
-
-suffix : designator {$$=$1;}
-suffix : t_CharacterLit {$$=$1;}
-suffix : t_ALL {$$="all";}
-
-ifts_name : mark gen_association_list {$$=$1+" "+$2;}
-ifts_name : name2 gen_association_list {$$=$1+" "+$2;}
-
-
-sigma: t_Apostrophe {$$="'";}
-//sigma : t_LEFTBR signature1 t_RIGHTBR t_Apostrophe {$$="("+$2;;$$.append(")");$$.append("'");}
-
-attribute_name : mark sigma t_Identifier {$$=$1+"' "+$3;}
-attribute_name :attribute_name t_LeftParen expr t_RightParen
-attribute_name : name2 sigma t_Identifier {$$=$1+" '"+$3;}
-attribute_name : mark sigma t_RANGE {$$=$1+"' range ";}
-attribute_name : name2 sigma t_RANGE {$$=$1+"' range ";}
-
-aggregate : element_association_list2 t_RightParen {$$=$1+" ) ";}
-aggregate : t_LeftParen choices t_Arrow expr t_RightParen {$$="( "+$2+ "=>"+$4+" ) ";}
-
-
-element_association_list2 : t_LeftParen element_association t_Comma element_association {$$=" ( "+$2+","+$4;}
-element_association_list2 : element_association_list2 t_Comma element_association {$$=$1+","+$3;}
-
+/* ;relation : unary_operator primary */
-qualified_expr : mark t_Apostrophe t_LeftParen expr t_RightParen {$$=$1+"'("+$4+" ) ";}
-qualified_expr : mark t_Apostrophe aggregate {$$=$1+"'"+$3;}
+relation: t_QQ primary { $$=" ?? "+$2; }
+relation: primary { $$=$1; }
+relation: t_Plus primary %prec MED_PRECEDENCE { $$="+"+$2; }
+relation: t_Minus primary %prec MED_PRECEDENCE { $$="-"+$2; }
+relation: t_ABS primary { $$="abs"+$2; }
+relation: t_NOT primary { $$="not "+$2; }
+relation: primary t_DoubleStar primary { $$=$1+" ** "+$3; }
+relation: t_Minus primary t_DoubleStar primary { $$=$2+" ** "+$4; }
+/* ; relation : relation binary_operator primary */
-allocator : t_NEW mark mark allocator_1
-allocator : t_NEW mark allocator_2
-allocator : t_NEW qualified_expr
-allocator_2 : /* empty */
-allocator_2 : gen_association_list
-allocator_1 : /* empty */
-allocator_1 : gen_association_list
+relation: relation t_MOD relation { $$=$1+" mod "+$3; }
+relation: relation t_REM relation { $$=$1+" rem "+$3; }
+relation: relation t_Ampersand relation { $$=$1+" & "+$3; }
+relation: relation t_Star relation { $$=$1+" * "+$3; }
+relation: relation t_Plus relation { $$=$1+" + "+$3; }
+relation: relation t_Minus relation { $$=$1+" - "+$3; }
+relation: relation t_LESym relation { $$=$1+" <= "+$3; }
+relation: relation t_GESym relation { $$=$1+" >= "+$3; }
+relation: relation t_LTSym relation { $$=$1+" < "+$3; }
+relation: relation t_GTSym relation { $$=$1+" > "+$3; }
+relation: relation t_EQSym relation { $$=$1+" == "+$3; }
+relation: relation t_NESym relation { $$=$1+" != "+$3; }
+relation: relation t_Slash relation { $$=$1+" /"+$3; }
+relation: relation t_QNEQU relation { $$=$1+" ?/="+$3; }
+relation: relation t_QEQU relation { $$=$1+" ?="+$3; }
+relation: relation t_QL relation { $$=$1+" ?<"+$3; }
+relation: relation t_QG relation { $$=$1+" ?>"+$3; }
+relation: relation t_QLT relation { $$=$1+" ?<="+$3; }
+relation: relation t_QGT relation { $$=$1+" ?>="+$3; }
+
+simple_exp: t_Minus term { $$ = "-"+$2; }
+ | t_Plus term { $$ = "+"+$2; }
+ | term { $$ = $1; }
+ | simple_exp
+ adding_op term { $$ = $1+" "+$2+" "+$3; }
+
+adding_op: t_Ampersand { $$ = "&"; }
+ | t_Minus { $$ = "-"; }
+ | t_Plus { $$ = "+"; }
+ ;
+
+term: factor { $$=$1; }
+ | factor multiplying_operator factor { $$ = $1+" "+$2+" "+$3; }
+ ;
+
+multiplying_operator: t_Star { $$ = "*"; }
+ | t_REM { $$ = "rem"; }
+ | t_MOD { $$ = "mod"; }
+ | t_Slash { $$ = "/"; }
+
+factor: primary { $$=$1; }
+ | t_ABS primary { $$="abs "+$2; }
+ | t_NOT primary { $$="not "+$2; }
+ | primary t_DoubleStar primary { $$ = $1+" ** "+$3; }
+
+primary: name { $$=$1; }
+primary: literal { $$=$1; }
+primary: aggregate { $$=$1; }
+primary: qualified_expr { $$=$1; }
+primary: allocator { $$=""; }
+primary: t_LeftParen expr t_RightParen { $$="("+$2+")"; }
+
+name: mark { $$=$1; }
+name: name2 { $$=$1; }
+name: external_name { $$=$1; }
+name2: t_StringLit { $$=$1; }
+name2: attribute_name { $$=$1; }
+name2: ifts_name { $$=$1; }
+
+mark: t_Identifier { $$=$1; }
+mark: sel_name { $$=$1; }
+
+sel_name: name t_Dot suffix { $$=$1+"."+$3; }
+
+suffix: designator { $$=$1; }
+suffix: t_CharacterLit { $$=$1; }
+suffix: t_ALL { $$="all"; }
+
+ifts_name: mark gen_association_list { $$=$1+" "+$2; }
+ifts_name: name2 gen_association_list { $$=$1+" "+$2; }
+
+sigma: t_Apostrophe { $$="'"; }
+//sigma : t_LEFTBR signature1 t_RIGHTBR t_Apostrophe { $$="("+$2;;$$.append(")");$$.append("'"); }
+
+attribute_name: mark sigma t_Identifier { $$=$1+"' "+$3; }
+attribute_name: attribute_name t_LeftParen expr t_RightParen
+attribute_name: name2 sigma t_Identifier { $$=$1+" '"+$3; }
+attribute_name: mark sigma t_RANGE { $$=$1+"' range "; }
+attribute_name: name2 sigma t_RANGE { $$=$1+"' range "; }
+
+aggregate : element_association_list2 t_RightParen { $$=$1+" ) "; }
+aggregate : t_LeftParen choices t_Arrow expr t_RightParen { $$="( "+$2+ "=>"+$4+" ) "; }
+
+element_association_list2 : t_LeftParen element_association t_Comma element_association { $$=" ( "+$2+","+$4; }
+element_association_list2 : element_association_list2 t_Comma element_association { $$=$1+","+$3; }
+
+qualified_expr : mark t_Apostrophe t_LeftParen expr t_RightParen { $$=$1+"'("+$4+" ) "; }
+qualified_expr : mark t_Apostrophe aggregate { $$=$1+"'"+$3; }
+
+allocator: t_NEW mark mark allocator_1
+allocator: t_NEW mark allocator_2
+allocator: t_NEW qualified_expr
+allocator_2: /* empty */
+allocator_2: gen_association_list
+allocator_1: /* empty */
+allocator_1: gen_association_list
/*--------------------------------------------------
-- Element Association and Choices
----------------------------------------------------*/
-element_association : choices t_Arrow expr {$$=$1+"=> "+$3;}
-
-element_association : expr {$$=$1;}
+element_association: choices t_Arrow expr { $$=$1+"=> "+$3; }
+element_association: expr { $$=$1; }
-choices : choice choices_1 {$$=$1+" "+$2;}
-choices_1 : /* empty */ {$$="";}
-choices_1 : choices_1 choices_2 {$$=$1+" "+$2;}
-choices_2 : t_Bar choice {$$=" | "+$2;}
+choices: choice choices_1 { $$=$1+" "+$2; }
+choices_1: /* empty */ { $$=""; }
+choices_1: choices_1 choices_2 { $$=$1+" "+$2; }
+choices_2: t_Bar choice { $$=" | "+$2; }
-choice : expr {$$=$1;}
-choice : discrete_range1 {$$=$1;}
-choice : t_OTHERS {$$="others";}
+choice: expr { $$=$1; }
+choice: discrete_range1 { $$=$1; }
+choice: t_OTHERS { $$="others"; }
/*--------------------------------------------------
-- Type Declarations
----------------------------------------------------*/
-type_decl : t_TYPE t_Identifier error t_Semicolon {$$="";}
-type_decl : t_TYPE t_Identifier type_decl_1 t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_TYPE),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,$3.data());
- }
- type_decl : t_TYPE error t_Semicolon {$$="";}
-
-type_decl_1 : /* empty */ {$$="";}
-type_decl_1 : t_IS type_definition {$$="is "+$2;}
-
-type_definition : enumeration_type_definition {$$=$1;}
-type_definition : range_constraint {$$=$1;}
-type_definition : physical_type_definition { $$=$1; }
-type_definition : unconstrained_array_definition {$$=$1;}
-type_definition : constrained_array_definition {$$=$1;}
-type_definition : record_type_definition {$$=$1;}
-type_definition : access_type_definition {$$=$1;}
-type_definition : file_type_definition {$$=$1;}
-type_definition : protected_type_declaration {$$=$1;}
-type_definition : protected_type_body {$$=$1;}
-
-
-enumeration_type_definition : t_LeftParen enumeration_literal enumeration_type_definition_1 t_RightParen {$$="( "+$2+" "+$3+" )";}
-enumeration_type_definition_1 : {$$="";}
-enumeration_type_definition_1 : enumeration_type_definition_1 enumeration_type_definition_2 {$$=$1+" "+$2;}
-enumeration_type_definition_2 : t_Comma enumeration_literal {$$=","+$2;}
+type_decl: t_TYPE t_Identifier error t_Semicolon { $$=""; }
+type_decl: t_TYPE t_Identifier type_decl_1 t_Semicolon
+ {
+ addVhdlType($2,getParsedLine(t_TYPE),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,$3.data());
+ }
+type_decl: t_TYPE error t_Semicolon { $$=""; }
+
+type_decl_1: /* empty */ { $$=""; }
+type_decl_1: t_IS type_definition { $$="is "+$2; }
+
+type_definition: enumeration_type_definition { $$=$1; }
+type_definition: range_constraint { $$=$1; }
+type_definition: physical_type_definition { $$=$1; }
+type_definition: unconstrained_array_definition { $$=$1; }
+type_definition: constrained_array_definition { $$=$1; }
+type_definition: record_type_definition { $$=$1; }
+type_definition: access_type_definition { $$=$1; }
+type_definition: file_type_definition { $$=$1; }
+type_definition: protected_type_declaration { $$=$1; }
+type_definition: protected_type_body { $$=$1; }
+
+
+enumeration_type_definition: t_LeftParen enumeration_literal enumeration_type_definition_1 t_RightParen { $$="( "+$2+" "+$3+" )"; }
+enumeration_type_definition_1: { $$=""; }
+enumeration_type_definition_1: enumeration_type_definition_1 enumeration_type_definition_2 { $$=$1+" "+$2; }
+enumeration_type_definition_2: t_Comma enumeration_literal { $$=","+$2; }
physical_type_definition : range_constraint t_UNITS base_unit_decl
-physical_type_definition_1 t_END unit_stat
- {
- $$=$1;
- current->args=$3+"#"+$4;
- current->args.prepend("units");
- current->spec=VhdlDocGen::UNITS;
- }
+ physical_type_definition_1 t_END unit_stat
+ {
+ $$=$1;
+ current->args=$3+"#"+$4;
+ current->args.prepend("units");
+ current->spec=VhdlDocGen::UNITS;
+ }
-unit_stat: t_UNITS t_Identifier
-unit_stat : t_UNITS
+unit_stat: t_UNITS t_Identifier
+unit_stat: t_UNITS
+physical_type_definition_1: /* empty */ { $$=""; }
+physical_type_definition_1: physical_type_definition_1 physical_type_definition_2 { $$=$1+" "+$2; }
+physical_type_definition_2: secondary_unit_decl { $$=$1+"#"; }
-physical_type_definition_1 : /* empty */ {$$="";}
-physical_type_definition_1 : physical_type_definition_1 physical_type_definition_2 {$$=$1+" "+$2;}
-physical_type_definition_2 : secondary_unit_decl {$$=$1+"#";}
+base_unit_decl: t_Identifier t_Semicolon { $$=$1; }
-base_unit_decl : t_Identifier t_Semicolon {$$=$1;}
+secondary_unit_decl: t_Identifier t_EQSym physical_literal t_Semicolon { $$=$1+"="+$3 }
-secondary_unit_decl : t_Identifier t_EQSym physical_literal t_Semicolon {$$=$1+"="+$3}
+unconstrained_array_definition: t_ARRAY t_LeftParen
+ index_subtype_definition unconstrained_array_definition_1 t_RightParen t_OF
+ subtype_indic
+ {
+ QCString sr1=" array ( "+$3+" "+$4;
+ QCString sr2=" ) of "+$7;
+ $$=sr1+sr2;
+ }
-unconstrained_array_definition : t_ARRAY t_LeftParen
-index_subtype_definition unconstrained_array_definition_1 t_RightParen t_OF
-subtype_indic
-{
- QCString sr1=" array ( "+$3+" "+$4;
- QCString sr2=" ) of "+$7;
+unconstrained_array_definition_1: { $$=""; }
+unconstrained_array_definition_1: unconstrained_array_definition_1 unconstrained_array_definition_2 { $$=$1+" "+$2 }
+unconstrained_array_definition_2: t_Comma index_subtype_definition { $$=", "+$2 }
- $$=sr1+sr2;
-}
+index_subtype_definition: mark t_RANGE t_Box { $$=$1+" range<> "; }
-unconstrained_array_definition_1 : {$$="";}
-unconstrained_array_definition_1 : unconstrained_array_definition_1 unconstrained_array_definition_2 {$$=$1+" "+$2}
-unconstrained_array_definition_2 : t_Comma index_subtype_definition {$$=", "+$2}
+constrained_array_definition: t_ARRAY index_constraint t_OF subtype_indic { $$=" array "+$2+" of "+$4; }
-index_subtype_definition : mark t_RANGE t_Box {$$=$1+" range<> ";}
+record_type_simple_name:/*empty*/ { $$=""; }
+ | t_Identifier { $$=$1; }
-constrained_array_definition : t_ARRAY index_constraint t_OF subtype_indic {$$=" array "+$2+" of "+$4;}
+record_type_definition: t_RECORD element_decl record_type_definition_1 t_END
+ t_RECORD record_type_simple_name
+ {
+ QRegExp reg("[\\s]");
+ QCString oo=$2+" "+$3;
+ current->spec=VhdlDocGen::RECORD;
+ current->args=oo;
+ current->args.replace(reg,"%");
+ current->args.prepend("record");
+ $$=$2+" "+$3;
+ }
-record_type_simple_name :/*empty*/ {$$="";}
- | t_Identifier {$$=$1;}
-
-record_type_definition : t_RECORD element_decl record_type_definition_1 t_END
-t_RECORD record_type_simple_name
-{
- QRegExp reg("[\\s]");
- QCString oo=$2+" "+$3;
- current->spec=VhdlDocGen::RECORD;
- current->args=oo;
- current->args.replace(reg,"%");
- current->args.prepend("record");
- $$=$2+" "+$3;
-}
-
-record_type_definition_1 : /*empty*/ {$$="";}
-record_type_definition_1 : record_type_definition_1 record_type_definition_2
- {
- $$=$1+" "+$2;
+record_type_definition_1: /*empty*/ { $$=""; }
+record_type_definition_1: record_type_definition_1 record_type_definition_2
+ {
+ $$=$1+" "+$2;
}
-record_type_definition_2 : element_decl {$$=$1;}
+record_type_definition_2: element_decl { $$=$1; }
-element_decl : idf_list t_Colon subtype_indic t_Semicolon {$$=$1+":"+$3+"#"; }
+element_decl: idf_list t_Colon subtype_indic t_Semicolon { $$=$1+":"+$3+"#"; }
-access_type_definition : t_ACCESS subtype_indic {$$="access "+$2; }
+access_type_definition: t_ACCESS subtype_indic { $$="access "+$2; }
-file_type_definition : t_FILE t_OF mark {$$="file of "+$3; }
+file_type_definition: t_FILE t_OF mark { $$="file of "+$3; }
/*--------------------------------------------------
-- Subtypes and Constraints
----------------------------------------------------*/
-subtype_decl : t_SUBTYPE t_Identifier t_IS subtype_indic t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_SUBTYPE),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,$4.data());
- }
-subtype_decl : t_SUBTYPE error t_Semicolon {$$="";}
-subtype_indic : mark subtype_indic_1 {$$=$1+" "+$2;};
-subtype_indic : subtype_indic1 {$$=$1;}
-subtype_indic_1 : /* empty */ {$$="";}
-subtype_indic_1 : gen_association_list {$$=$1;}
-
-subtype_indic1 : mark mark range_constraint {$$=$1+" "+$2+" "+$3;};
-subtype_indic1 : mark range_constraint {$$=$1+" "+$2;}
-subtype_indic1 : mark mark subtype_indic1_1 {$$=$1+" "+$2+" "+$3;}
-subtype_indic1_1 : /* empty */ {$$="";}
-subtype_indic1_1 : gen_association_list {$$=$1;}
-
-range_constraint : t_RANGE range_spec { $$="range "+$2;}
+subtype_decl: t_SUBTYPE t_Identifier t_IS subtype_indic t_Semicolon
+ {
+ addVhdlType($2,getParsedLine(t_SUBTYPE),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,$4.data());
+ }
+subtype_decl: t_SUBTYPE error t_Semicolon { $$=""; }
+subtype_indic: mark subtype_indic_1 { $$=$1+" "+$2; }
+subtype_indic: subtype_indic1 { $$=$1; }
+subtype_indic_1: /* empty */ { $$=""; }
+subtype_indic_1: gen_association_list { $$=$1; }
+
+subtype_indic1: mark mark range_constraint { $$=$1+" "+$2+" "+$3; }
+subtype_indic1: mark range_constraint { $$=$1+" "+$2; }
+subtype_indic1: mark mark subtype_indic1_1 { $$=$1+" "+$2+" "+$3; }
+subtype_indic1_1: /* empty */ { $$=""; }
+subtype_indic1_1: gen_association_list { $$=$1; }
+
+range_constraint: t_RANGE range_spec { $$="range "+$2; }
//range_constraint : array_constraint
+index_constraint: t_LeftParen discrete_range
+ index_constraint_1
+ t_RightParen { $$="("+$2+" "+$3+")"; }
+index_constraint_1: /* empty */ { $$=""; }
+index_constraint_1: index_constraint_1
+ index_constraint_2 { $$=$1+" "+$2; }
+index_constraint_2: t_Comma discrete_range { $$=","+$2; }
-index_constraint : t_LeftParen discrete_range index_constraint_1 t_RightParen { $$="("+$2+" "+$3+")";}
-index_constraint_1 : /* empty */ {$$="";}
-index_constraint_1 : index_constraint_1 index_constraint_2 { $$=$1+" "+$2;}
-index_constraint_2 : t_Comma discrete_range { $$=","+$2;}
-
+discrete_range: subtype_indic { $$=$1; }
+discrete_range: range_spec { $$=$1; }
-discrete_range : subtype_indic { $$=$1;}
-discrete_range : range_spec { $$=$1;}
+discrete_range1 : subtype_indic1 { $$=$1; }
+discrete_range1 : expr direction expr { $$=$1+" "+$2+" "+$3; }
-discrete_range1 : subtype_indic1 { $$=$1;}
-discrete_range1 : expr direction expr { $$=$1+" "+$2+" "+$3;}
+range_spec : attribute_name { $$=$1; }
+range_spec : simple_exp direction simple_exp { $$=$1+" "+$2+" "+$3; }
-range_spec : attribute_name { $$=$1;}
-range_spec : simple_exp direction simple_exp { $$=$1+" "+$2+" "+$3;}
-
-
-direction : t_TO {$$=" to ";}
-direction : t_DOWNTO {$$=" downto ";}
+direction : t_TO { $$=" to "; }
+direction : t_DOWNTO { $$=" downto "; }
/*--------------------------------------------------
-- Objects, Aliases, Files, Disconnections
----------------------------------------------------*/
-constant_decl : t_CONSTANT idf_list t_Colon subtype_indic constant_decl_1 t_Semicolon
- {
- QCString it=$4+" "+$5;
- // fprintf(stderr,"\n currP %d \n",currP);
- addVhdlType($2,getParsedLine(t_CONSTANT),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data());
- }
-constant_decl_1 : /* empty */ {$$="";}
-constant_decl_1 : t_VarAsgn expr {$$=":="+$2;}
+constant_decl: t_CONSTANT idf_list t_Colon subtype_indic constant_decl_1 t_Semicolon
+ {
+ QCString it=$4+" "+$5;
+ // fprintf(stderr,"\n currP %d \n",currP);
+ addVhdlType($2,getParsedLine(t_CONSTANT),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data());
+ }
+constant_decl_1: /* empty */ { $$=""; }
+constant_decl_1: t_VarAsgn expr { $$=":="+$2; }
-signal_decl : t_SIGNAL idf_list t_Colon subtype_indic signal_decl_1 signal_decl_2 t_Semicolon
- {
- QCString s=$4+" "+$6;
- addVhdlType($2,getParsedLine(t_SIGNAL),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s.data());
- }
-signal_decl_2 : /* empty */ {$$="";}
-signal_decl_2 : t_VarAsgn expr {$$=":="+$2;}
-signal_decl_1 : /* empty */ {$$="";}
-signal_decl_1 : signal_kind {
- $$=$1;
- }
+signal_decl: t_SIGNAL idf_list t_Colon subtype_indic signal_decl_1 signal_decl_2 t_Semicolon
+ {
+ QCString s=$4+" "+$6;
+ addVhdlType($2,getParsedLine(t_SIGNAL),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s.data());
+ }
+signal_decl_2: /* empty */ { $$=""; }
+signal_decl_2: t_VarAsgn expr { $$=":="+$2; }
+signal_decl_1: /* empty */ { $$=""; }
+signal_decl_1: signal_kind { $$=$1; }
+variable_decl: t_VARIABLE idf_list t_Colon subtype_indic variable_decl_1 t_Semicolon
+ {
+ $$=$2+":"+$4+" "+$5;
+ }
+variable_decl: t_SHARED t_VARIABLE idf_list t_Colon subtype_indic variable_decl_1 t_Semicolon
+ {
+ $$=$5+" "+$6;
+ addVhdlType($3,getParsedLine(t_VARIABLE),Entry::VARIABLE_SEC,VhdlDocGen::SHAREDVARIABLE,0,$$.data());
+ }
+variable_decl_1: /* empty */ { $$=""; }
+variable_decl_1: t_VarAsgn expr { $$=":="+$2; }
+
+object_class: t_CONSTANT { $$="constant"; }
+object_class: t_SIGNAL { $$="signal"; }
+object_class: t_VARIABLE { $$="variable"; }
+object_class: t_SHARED t_VARIABLE { $$="shared"; }
+object_class: t_FILE { $$="file"; }
+object_class: t_TYPE { $$="type"; }
+signal_kind: t_BUS { $$="bus"; }
+signal_kind: t_REGISTER { $$="register"; }
-variable_decl : t_VARIABLE idf_list t_Colon subtype_indic variable_decl_1 t_Semicolon
+alias_decl: t_ALIAS alias_name_stat alias_spec t_IS name signature t_Semicolon
{
- $$=$2+":"+$4+" "+$5;
- }
-variable_decl : t_SHARED t_VARIABLE idf_list t_Colon subtype_indic variable_decl_1 t_Semicolon
- {
- $$=$5+" "+$6;
- addVhdlType($3,getParsedLine(t_VARIABLE),Entry::VARIABLE_SEC,VhdlDocGen::SHAREDVARIABLE,0,$$.data());
- }
-variable_decl_1 : /* empty */ {$$="";}
-variable_decl_1 : t_VarAsgn expr {$$=":="+$2;}
-
-object_class : t_CONSTANT {$$="constant";}
-object_class : t_SIGNAL {$$="signal";}
-object_class : t_VARIABLE {$$="variable";}
-object_class :t_SHARED t_VARIABLE {$$="shared";}
-object_class :t_FILE {$$="file";}
-object_class :t_TYPE {$$="type";}
-
-signal_kind : t_BUS {$$="bus";}
-signal_kind : t_REGISTER {$$="register";}
-
-alias_decl : t_ALIAS alias_name_stat alias_spec t_IS name signature t_Semicolon
- {
- QCString s=$3+" "+$5+$6;
- addVhdlType($2,getParsedLine(t_ALIAS),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data());
- }
- alias_decl : t_ALIAS alias_name_stat alias_spec t_IS error t_Semicolon {$$="";}
-
- alias_name_stat : t_Identifier {$$=$1;}
- alias_name_stat : t_StringLit {$$=$1;}
-
- alias_spec :/*empty*/ {$$="";}
- | t_Colon subtype_indic { $$=","+$2;}
- ;
-
-
-file_decl : t_FILE idf_list t_Colon subtype_indic t_IS file_decl_1 expr t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_FILE),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,$4.data());
- }
-
-file_decl : t_FILE idf_list t_Colon t_Identifier fi_dec t_Semicolon
- {
- QCString s=$4+" "+$5;
- addVhdlType($2,getParsedLine(t_FILE),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s.data());
- }
+ QCString s=$3+" is "+$5+$6;
+ addVhdlType($2,getParsedLine(t_ALIAS),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data());
+ }
+alias_decl: t_ALIAS alias_name_stat alias_spec t_IS error t_Semicolon { $$=""; }
+
+alias_name_stat: t_Identifier { $$=$1; }
+alias_name_stat: t_StringLit { $$=$1; }
+
+alias_spec :/*empty*/ { $$=""; }
+ | t_Colon subtype_indic { $$=","+$2; }
+ ;
+
+file_decl: t_FILE idf_list t_Colon subtype_indic t_IS file_decl_1 expr t_Semicolon
+ {
+ addVhdlType($2,getParsedLine(t_FILE),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,$4.data());
+ }
-fi_dec: /*empty*/ {$$="";}
- | t_OPEN expr t_IS expr {$$="open "+$2+" is "+s_str.qstr; }
+file_decl: t_FILE idf_list t_Colon t_Identifier fi_dec t_Semicolon
+ {
+ QCString s=$4+" "+$5;
+ addVhdlType($2,getParsedLine(t_FILE),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s.data());
+ }
+fi_dec: /*empty*/ { $$=""; }
+ | t_OPEN expr t_IS expr { $$="open "+$2+" is "+s_str.qstr; }
-file_decl_1 : /* empty */ {$$="";}
-file_decl_1 : mode {$$=$1;}
-disconnection_spec : t_DISCONNECT signal_list t_Colon mark t_AFTER expr t_Semicolon
+file_decl_1: /* empty */ { $$=""; }
+file_decl_1: mode { $$=$1; }
-signal_list : name signal_list_1
-signal_list : t_OTHERS
-signal_list : t_ALL
-signal_list_1 : /* empty */
-signal_list_1 : signal_list_1 signal_list_2
-signal_list_2 : t_Comma name
+disconnection_spec: t_DISCONNECT signal_list t_Colon mark t_AFTER expr t_Semicolon
+
+signal_list: name signal_list_1
+signal_list: t_OTHERS
+signal_list: t_ALL
+signal_list_1: /* empty */
+signal_list_1: signal_list_1 signal_list_2
+signal_list_2: t_Comma name
/*--------------------------------------------------
-- Attribute Declarations and Specifications
----------------------------------------------------*/
-attribute_decl : t_ATTRIBUTE t_Identifier t_Colon mark t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_ATTRIBUTE),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,$4.data());
- }
-
-attribute_spec : t_ATTRIBUTE t_Identifier t_OF entity_spec t_IS expr t_Semicolon
- {
- QCString oo=$4+" is "+$6;
- addVhdlType($2,getParsedLine(t_ATTRIBUTE),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,oo.data());
- }
-
-entity_spec : entity_name_list signature t_Colon entity_class
-
-entity_name_list : designator entity_name_list_1 {$$=$1+" "+$2;}
-entity_name_list : t_OTHERS {$$="others";}
-entity_name_list : t_ALL {$$="all";}
-entity_name_list_1 : /* empty */ {$$="";}
-entity_name_list_1 : entity_name_list_1 entity_name_list_2 {$$=$1+" "+$2;}
-entity_name_list_2 : t_Comma designator {$$=","+$2;}
-
-entity_class : t_ENTITY {$$="entity";}
-entity_class : t_ARCHITECTURE {$$="architecture";}
-entity_class : t_PACKAGE {$$="package";}
-entity_class : t_CONFIGURATION {$$="configuration";}
-entity_class : t_COMPONENT {$$="component";}
-entity_class : t_LABEL {$$="label";}
-entity_class : t_TYPE {$$="type";}
-entity_class : t_SUBTYPE {$$="subtype";}
-entity_class : t_PROCEDURE {$$="procedure";}
-entity_class : t_FUNCTION {$$="";}
-entity_class : t_SIGNAL {$$="signal";}
-entity_class : t_VARIABLE {$$="variable";}
-entity_class : t_CONSTANT {$$="constant";}
-entity_class : t_GROUP {$$="group";}
-entity_class : t_FILE {$$="file";}
-entity_class : t_UNITS {$$="units";}
-entity_class : t_LITERAL {$$="literal";}
-entity_class : t_SEQUENCE {$$="sequence";}
-entity_class : t_PROPERTY {$$="property";}
+attribute_decl: t_ATTRIBUTE t_Identifier t_Colon mark t_Semicolon
+ {
+ addVhdlType($2,getParsedLine(t_ATTRIBUTE),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,$4.data());
+ }
+
+attribute_spec: t_ATTRIBUTE t_Identifier t_OF entity_spec t_IS expr t_Semicolon
+ {
+ QCString oo=$4+" is "+$6;
+ addVhdlType($2,getParsedLine(t_ATTRIBUTE),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,oo.data());
+ }
+
+entity_spec : entity_name_list signature t_Colon entity_class
+
+entity_name_list: designator entity_name_list_1 { $$=$1+" "+$2; }
+entity_name_list: t_OTHERS { $$="others"; }
+entity_name_list: t_ALL { $$="all"; }
+entity_name_list_1: /* empty */ { $$=""; }
+entity_name_list_1: entity_name_list_1 entity_name_list_2 { $$=$1+" "+$2; }
+entity_name_list_2: t_Comma designator { $$=","+$2; }
+
+entity_class: t_ENTITY { $$="entity"; }
+entity_class: t_ARCHITECTURE { $$="architecture"; }
+entity_class: t_PACKAGE { $$="package"; }
+entity_class: t_CONFIGURATION { $$="configuration"; }
+entity_class: t_COMPONENT { $$="component"; }
+entity_class: t_LABEL { $$="label"; }
+entity_class: t_TYPE { $$="type"; }
+entity_class: t_SUBTYPE { $$="subtype"; }
+entity_class: t_PROCEDURE { $$="procedure"; }
+entity_class: t_FUNCTION { $$=""; }
+entity_class: t_SIGNAL { $$="signal"; }
+entity_class: t_VARIABLE { $$="variable"; }
+entity_class: t_CONSTANT { $$="constant"; }
+entity_class: t_GROUP { $$="group"; }
+entity_class: t_FILE { $$="file"; }
+entity_class: t_UNITS { $$="units"; }
+entity_class: t_LITERAL { $$="literal"; }
+entity_class: t_SEQUENCE { $$="sequence"; }
+entity_class: t_PROPERTY { $$="property"; }
/*--------------------------------------------------
@@ -1229,738 +1280,782 @@ entity_class : t_PROPERTY {$$="property"
--------------------------------------------------------------------------*/
+if_generation_scheme: if_scheme
-if_generation_scheme : if_scheme
+if_scheme: t_IF expr t_GENERATE generate_statement_body if_scheme_1 if_scheme_2
+if_scheme: t_IF lable expr t_GENERATE generate_statement_body if_scheme_1 if_scheme_2
+if_scheme_2: /* empty */
+if_scheme_2: t_ELSE t_GENERATE generate_statement_body
+if_scheme_2: t_ELSE lable t_GENERATE generate_statement_body
+if_scheme_1: /* empty */
+if_scheme_1: if_scheme_1 if_scheme_3
+if_scheme_3: t_ELSIF expr t_GENERATE generate_statement_body
+if_scheme_3: t_ELSIF lable expr t_GENERATE generate_statement_body
-if_scheme : t_IF expr t_GENERATE generate_statement_body if_scheme_1 if_scheme_2
-if_scheme : t_IF lable expr t_GENERATE generate_statement_body if_scheme_1 if_scheme_2
+generation_scheme: for_scheme
-if_scheme_2 : /* empty */
-if_scheme_2 : t_ELSE t_GENERATE generate_statement_body
-if_scheme_2 : t_ELSE lable t_GENERATE generate_statement_body
-if_scheme_1 : /* empty */
-if_scheme_1 : if_scheme_1 if_scheme_3
-if_scheme_3 : t_ELSIF expr t_GENERATE generate_statement_body
-if_scheme_3 : t_ELSIF lable expr t_GENERATE generate_statement_body
+iteration_scheme: for_scheme
+iteration_scheme: while_scheme
-generation_scheme : for_scheme
+for_scheme: t_FOR t_Identifier t_IN discrete_range
+for_scheme: t_FOR lable t_Identifier t_IN discrete_range
-iteration_scheme : for_scheme
-iteration_scheme : while_scheme
-
-for_scheme : t_FOR t_Identifier t_IN discrete_range
-for_scheme : t_FOR lable t_Identifier t_IN discrete_range
-
-while_scheme : t_WHILE expr
+while_scheme: t_WHILE expr
/*--------------------------------------------------
-- Concurrent Statements
----------------------------------------------------*/
-concurrent_stats : concurrent_stats_1
-concurrent_stats_1 : /* empty */
-concurrent_stats_1 : concurrent_stats_1 concurrent_stats_2
-concurrent_stats_2 : concurrent_stat
-
-concurrent_stat : block_stat
- | concurrent_assertion_stat
- | concurrent_procedure_call
- | concurrent_signal_assign_stat
- | comp_inst_stat
- | generate_stat
- | procs_stat
-
-block_stat : t_Identifier t_Colon t_BLOCK block_stat_0 block_stat_1 block_stat_2
-block_stat_3 block_stat_4 t_BEGIN concurrent_stats t_END t_BLOCK block_stat_5
-t_Semicolon
-block_stat_5 : /* empty */
-block_stat_5 : t_Identifier
-block_stat_4 : /* empty */
-block_stat_4 : block_stat_4 block_stat_6
-block_stat_6 : block_decltve_item
-block_stat_3 : /* empty */
-block_stat_3 : t_PORT interf_list t_Semicolon block_stat_7
-//block_sta_7 : /* empty */
-block_stat_7 : t_PORT t_MAP association_list t_Semicolon
-block_stat_2 : /* empty */
-block_stat_2 : t_GENERIC interf_list t_Semicolon block_stat_8
-block_stat_8 : /* empty */
-block_stat_8 : t_GENERIC t_MAP association_list t_Semicolon
-block_stat_1 : /* empty */
-block_stat_1 : t_LeftParen expr t_RightParen block_stat_0
-block_stat_0: /* empty */
+concurrent_stats: concurrent_stats_1
+concurrent_stats_1: /* empty */
+concurrent_stats_1: concurrent_stats_1 concurrent_stats_2
+concurrent_stats_2: concurrent_stat
+
+concurrent_stat : block_stat
+ | concurrent_assertion_stat
+ | concurrent_procedure_call
+ | concurrent_signal_assign_stat
+ | comp_inst_stat
+ | generate_stat
+ | procs_stat
+
+block_stat: t_Identifier t_Colon t_BLOCK block_stat_0 block_stat_1 block_stat_2
+ block_stat_3 block_stat_4 t_BEGIN concurrent_stats t_END t_BLOCK block_stat_5
+ t_Semicolon
+block_stat_5: /* empty */
+block_stat_5: t_Identifier
+block_stat_4: /* empty */
+block_stat_4: block_stat_4 block_stat_6
+block_stat_6: block_decltve_item
+block_stat_3: /* empty */
+block_stat_3: t_PORT interf_list t_Semicolon block_stat_7
+//block_sta_7: /* empty */
+block_stat_7: t_PORT t_MAP association_list t_Semicolon
+block_stat_2: /* empty */
+block_stat_2: t_GENERIC interf_list t_Semicolon block_stat_8
+block_stat_8: /* empty */
+block_stat_8: t_GENERIC t_MAP association_list t_Semicolon
+block_stat_1: /* empty */
+block_stat_1: t_LeftParen expr t_RightParen block_stat_0
+block_stat_0: /* empty */
block_stat_0: t_IS
-dot_name:t_Identifier {$$=$1;}
- | dot_name t_Dot t_Identifier {$$=$1+"."+$3;}
- ;
-
-mark_comp: dot_name comp_1 {$$=$1+" "+$2;}
-mark_comp: dot_name {$$=$1;}
-
-comp_1: t_LeftParen t_Identifier t_RightParen {$$="("+$2+")";}
-
- vcomp_stat :t_CONFIGURATION {$$="configurátion";yyLineNr=s_str.iLine;}
- vcomp_stat : t_ENTITY {$$="entity";yyLineNr=s_str.iLine;}
- vcomp_stat : t_COMPONENT {$$="component";yyLineNr=s_str.iLine;}
-
-comp_inst_stat : t_Identifier t_Colon name {yyLineNr=s_str.iLine;} t_GENERIC t_MAP association_list comp_inst_stat_1 t_Semicolon
+dot_name: t_Identifier { $$=$1; }
+ | dot_name t_Dot t_Identifier { $$=$1+"."+$3; }
+ ;
+
+mark_comp: dot_name comp_1 { $$=$1+" "+$2; }
+mark_comp: dot_name { $$=$1; }
+
+comp_1: t_LeftParen t_Identifier t_RightParen { $$="("+$2+")"; }
+
+vcomp_stat: t_CONFIGURATION { $$="configurátion";yyLineNr=s_str.iLine; }
+vcomp_stat: t_ENTITY { $$="entity";yyLineNr=s_str.iLine; }
+vcomp_stat: t_COMPONENT { $$="component";yyLineNr=s_str.iLine; }
+
+comp_inst_stat: t_Identifier t_Colon name { yyLineNr=s_str.iLine; } t_GENERIC t_MAP association_list comp_inst_stat_1 t_Semicolon
{
addCompInst($1.data(),$3.data(),0,yyLineNr);
}
-comp_inst_stat : t_Identifier t_Colon name {yyLineNr=s_str.iLine;} t_PORT t_MAP association_list t_Semicolon
+comp_inst_stat: t_Identifier t_Colon name { yyLineNr=s_str.iLine; } t_PORT t_MAP association_list t_Semicolon
{
addCompInst($1.data(),$3.data(),0,yyLineNr);
}
-comp_inst_stat : t_Identifier t_Colon vcomp_stat mark_comp t_PORT t_MAP association_list t_Semicolon
+comp_inst_stat: t_Identifier t_Colon vcomp_stat mark_comp t_PORT t_MAP association_list t_Semicolon
{
addCompInst($1.data(),$4.data(),$3.data(),yyLineNr);
}
-comp_inst_stat : t_Identifier t_Colon vcomp_stat mark_comp t_GENERIC t_MAP association_list comp_inst_stat_1 t_Semicolon
+comp_inst_stat: t_Identifier t_Colon vcomp_stat mark_comp t_GENERIC t_MAP association_list comp_inst_stat_1 t_Semicolon
{
addCompInst($1.data(),$4.data(),$3.data(),yyLineNr);
- }
-comp_inst_stat_1 : /* empty */
-comp_inst_stat_1 : t_PORT t_MAP association_list
-
-concurrent_assertion_stat : t_Identifier t_Colon assertion_stat
-concurrent_assertion_stat : assertion_stat
-
-concurrent_assertion_stat : t_Identifier t_Colon t_POSTPONED assertion_stat
-concurrent_assertion_stat : t_POSTPONED assertion_stat
+ }
+comp_inst_stat_1: /* empty */
+comp_inst_stat_1: t_PORT t_MAP association_list
-concurrent_procedure_call : t_Identifier t_Colon procedure_call_stat
-concurrent_procedure_call : procedure_call_stat
+concurrent_assertion_stat: t_Identifier t_Colon assertion_stat
+concurrent_assertion_stat: assertion_stat
-concurrent_procedure_call : t_Identifier t_Colon t_POSTPONED procedure_call_stat
-concurrent_procedure_call : t_POSTPONED procedure_call_stat
+concurrent_assertion_stat: t_Identifier t_Colon t_POSTPONED assertion_stat
+concurrent_assertion_stat: t_POSTPONED assertion_stat
+concurrent_procedure_call: t_Identifier t_Colon procedure_call_stat
+concurrent_procedure_call: procedure_call_stat
-concurrent_signal_assign_stat : t_Identifier t_Colon condal_signal_assign
-concurrent_signal_assign_stat : condal_signal_assign
+concurrent_procedure_call: t_Identifier t_Colon t_POSTPONED procedure_call_stat
+concurrent_procedure_call: t_POSTPONED procedure_call_stat
-concurrent_signal_assign_stat : t_Identifier t_Colon t_POSTPONED condal_signal_assign
-concurrent_signal_assign_stat : t_POSTPONED condal_signal_assign
+concurrent_signal_assign_stat: t_Identifier t_Colon condal_signal_assign
+concurrent_signal_assign_stat: condal_signal_assign
-concurrent_signal_assign_stat : t_Identifier t_Colon t_POSTPONED sel_signal_assign
-concurrent_signal_assign_stat : t_POSTPONED sel_signal_assign
+concurrent_signal_assign_stat: t_Identifier t_Colon t_POSTPONED condal_signal_assign
+concurrent_signal_assign_stat: t_POSTPONED condal_signal_assign
-concurrent_signal_assign_stat : t_Identifier t_Colon sel_signal_assign
-concurrent_signal_assign_stat : sel_signal_assign
+concurrent_signal_assign_stat: t_Identifier t_Colon t_POSTPONED sel_signal_assign
+concurrent_signal_assign_stat: t_POSTPONED sel_signal_assign
+concurrent_signal_assign_stat: t_Identifier t_Colon sel_signal_assign
+concurrent_signal_assign_stat: sel_signal_assign
-condal_signal_assign : target t_LESym opts condal_wavefrms t_Semicolon
+condal_signal_assign: target t_LESym opts condal_wavefrms t_Semicolon
-condal_wavefrms:wavefrm
-condal_wavefrms:wavefrm t_WHEN expr
-condal_wavefrms:wavefrm t_WHEN expr t_ELSE condal_wavefrms
+condal_wavefrms: wavefrm
+condal_wavefrms: wavefrm t_WHEN expr
+condal_wavefrms: wavefrm t_WHEN expr t_ELSE condal_wavefrms
-wavefrm : wavefrm_element wavefrm_1
-wavefrm : t_UNAFFECTED
-wavefrm_1 : /* empty */
-wavefrm_1 : wavefrm_1 wavefrm_2
-wavefrm_2 : t_Comma wavefrm_element
+wavefrm: wavefrm_element wavefrm_1
+wavefrm: t_UNAFFECTED
+wavefrm_1: /* empty */
+wavefrm_1: wavefrm_1 wavefrm_2
+wavefrm_2: t_Comma wavefrm_element
-wavefrm_element : expr wavefrm_element_1
-wavefrm_element_1 : /* empty */
-wavefrm_element_1 : t_AFTER expr
-wavefrm_element_1 : t_NULL wavefrm_element_2
-wavefrm_element_1 : t_NULL
-
+wavefrm_element: expr wavefrm_element_1
+wavefrm_element_1: /* empty */
+wavefrm_element_1: t_AFTER expr
+wavefrm_element_1: t_NULL wavefrm_element_2
+wavefrm_element_1: t_NULL
+wavefrm_element_2: t_AFTER expr
-wavefrm_element_2 : t_AFTER expr
-
-target : name
-target : aggregate
+target: name
+target: aggregate
-opts : opts_1 opts_2
+opts: opts_1 opts_2
-opts_2 : /* empty */
-opts_2 : t_TRANSPORT
-opts_2 : t_REJECT expr t_INERTIAL
-opts_2 : t_INERTIAL
+opts_2: /* empty */
+opts_2: t_TRANSPORT
+opts_2: t_REJECT expr t_INERTIAL
+opts_2: t_INERTIAL
-opts_1 : /* empty */
-opts_1 : t_GUARDED
+opts_1: /* empty */
+opts_1: t_GUARDED
-sel_signal_assign : t_WITH expr t_SELECT target t_LESym opts sel_wavefrms t_Semicolon
+sel_signal_assign: t_WITH expr t_SELECT target t_LESym opts sel_wavefrms t_Semicolon
-sel_wavefrms : sel_wavefrms_1 wavefrm t_WHEN choices
-sel_wavefrms_1 : /* empty */
-sel_wavefrms_1 : sel_wavefrms_1 sel_wavefrms_2
-sel_wavefrms_2 : wavefrm t_WHEN choices t_Comma
+sel_wavefrms: sel_wavefrms_1 wavefrm t_WHEN choices
+sel_wavefrms_1: /* empty */
+sel_wavefrms_1: sel_wavefrms_1 sel_wavefrms_2
+sel_wavefrms_2: wavefrm t_WHEN choices t_Comma
-gen_stat1: /* empty */
+gen_stat1: /* empty */
| block_declarative_part t_BEGIN
| t_BEGIN
-
+
// problem with double end
// end;
// end generate;
-
-generate_statement_body: gen_stat1 concurrent_stats
-
-generate_stat : t_Identifier t_Colon { pushLabel($1); } generation_scheme t_GENERATE
- gen_stat1 concurrent_stats opstat
-
-// stems from VHDL 2008 generate_statement_body
- opstat : end_stats t_END generate_stat_1 t_Semicolon { popLabel(); }
- opstat : t_END generate_stat_1 t_Semicolon { popLabel(); }
-
-generate_stat : t_Identifier t_Colon { pushLabel($1); } if_generation_scheme
- opstat // t_END generate_stat_1 t_Semicolon { popLabel(); }
-
-generate_stat : t_Identifier t_Colon case_scheme
-
-generate_stat_1 : t_GENERATE { $$=""; }
-generate_stat_1 : t_GENERATE t_Identifier { $$=$2; }
-
-
- //end_stats :
- end_stats : t_END t_Semicolon
- end_stats : t_END t_Identifier t_Semicolon
-
-
-
-procs_stat : t_Identifier t_Colon procs_stat1
- {
- current->name=$1;
- current->endBodyLine=s_str.yyLineNr;
- newEntry();
- }
-
-
-procs_stat : procs_stat1
- {
- current->name=VhdlDocGen::getProcessNumber();
- current->endBodyLine=s_str.yyLineNr;
- newEntry();
- }
-
-procs_stat1 : procs_stat1_5 {currP=VhdlDocGen::PROCESS;} t_PROCESS procs_stat1_1 procs_stat1_2 t_BEGIN seq_stats t_END
- procs_stat1_3 t_Semicolon {currP=0;}
- {
- createFunction(currName,VhdlDocGen::PROCESS,$4.data());
- }
-procs_stat1 : error t_END procs_stat1_3 t_Semicolon {currP=0;}
-
-procs_stat1_3 : /* empty */
-procs_stat1_3 : procs_stat1_5 t_PROCESS procs_stat1_6
+generate_statement_body: gen_stat1 concurrent_stats
-procs_stat1_5 : /* empty */ {$$="";}
-procs_stat1_5 : t_POSTPONED {$$="postponed";}
+generate_stat : t_Identifier t_Colon
+ { pushLabel($1); }
+ generation_scheme t_GENERATE
+ gen_stat1 concurrent_stats opstat
-procs_stat1_6 : /* empty */ {$$="";}
-procs_stat1_6 : t_Identifier {$$=$1;}
-
-procs_stat1_2 : /* empty */
-procs_stat1_2 : t_IS
-procs_stat1_2 : procs_stat1_2 procs_stat1_4
-procs_stat1_4 : procs_decltve_item
-procs_stat1_1 : /* empty */ {$$="";}
-procs_stat1_1 : t_LeftParen t_ALL t_RightParen {$$="all";}
-procs_stat1_1 : t_LeftParen sensitivity_list t_RightParen {$$=$2;}
-
-sensitivity_list : name sensitivity_list_1 {$$=$1+" "+$2;}
-sensitivity_list_1 : /* empty */ {$$="";}
-sensitivity_list_1 : sensitivity_list_1 sensitivity_list_2 {$$=$1+" "+$2;}
-sensitivity_list_2 : t_Comma name {$$=","+$2;}
+// stems from VHDL 2008 generate_statement_body
+opstat: end_stats t_END generate_stat_1 t_Semicolon { popLabel(); }
+opstat: t_END generate_stat_1 t_Semicolon { popLabel(); }
+
+generate_stat: t_Identifier t_Colon
+ { pushLabel($1); }
+ if_generation_scheme opstat // t_END generate_stat_1 t_Semicolon { popLabel(); }
+generate_stat: t_Identifier t_Colon case_scheme
+
+generate_stat_1: t_GENERATE { $$=""; }
+generate_stat_1: t_GENERATE t_Identifier { $$=$2; }
+
+//end_stats :
+end_stats: t_END t_Semicolon
+end_stats: t_END t_Identifier t_Semicolon
+
+procs_stat: t_Identifier t_Colon procs_stat1
+ {
+ current->name=$1;
+ current->endBodyLine=s_str.yyLineNr;
+ newEntry();
+ }
+
+procs_stat: procs_stat1
+ {
+ current->name=VhdlDocGen::getProcessNumber();
+ current->endBodyLine=s_str.yyLineNr;
+ newEntry();
+ }
+
+procs_stat1: procs_stat1_5
+ { currP=VhdlDocGen::PROCESS; }
+ t_PROCESS procs_stat1_1 procs_stat1_2 t_BEGIN seq_stats t_END
+ procs_stat1_3 t_Semicolon
+ { currP=0;
+ createFunction(currName,VhdlDocGen::PROCESS,$4.data());
+ }
+procs_stat1: error t_END procs_stat1_3 t_Semicolon { currP=0; }
+
+procs_stat1_3: /* empty */
+procs_stat1_3: procs_stat1_5 t_PROCESS procs_stat1_6
+
+procs_stat1_5: /* empty */ { $$=""; }
+procs_stat1_5: t_POSTPONED { $$="postponed"; }
+
+procs_stat1_6: /* empty */ { $$=""; }
+procs_stat1_6: t_Identifier { $$=$1; }
+
+procs_stat1_2: /* empty */
+procs_stat1_2: t_IS
+procs_stat1_2: procs_stat1_2 procs_stat1_4
+procs_stat1_4: procs_decltve_item
+procs_stat1_1: /* empty */ { $$=""; }
+procs_stat1_1: t_LeftParen t_ALL t_RightParen { $$="all"; }
+procs_stat1_1: t_LeftParen sensitivity_list t_RightParen { $$=$2; }
+
+sensitivity_list: name sensitivity_list_1 { $$=$1+" "+$2; }
+sensitivity_list_1: /* empty */ { $$=""; }
+sensitivity_list_1: sensitivity_list_1 sensitivity_list_2 { $$=$1+" "+$2; }
+sensitivity_list_2: t_Comma name { $$=","+$2; }
/*--------------------------------------------------
-- Sequential Statements
----------------------------------------------------*/
-seq_stats : seq_stats_1
-seq_stats_1 : /* empty */
-seq_stats_1 : seq_stats_1 seq_stats_2
-seq_stats_2 : seq_stat
-
-seq_stat : assertion_stat
-seq_stat : lable assertion_stat
-seq_stat : case_stat
-seq_stat : exit_stat
-seq_stat : if_stat
-seq_stat : loop_stat
-seq_stat : next_stat
-seq_stat : null_stat
-seq_stat : procedure_call_stat
-seq_stat : return_stat
-seq_stat :lable signal_assign_stat
-seq_stat : signal_assign_stat
-seq_stat : variable_assign_stat
-seq_stat : wait_stat
-seq_stat : lable wait_stat
-seq_stat : report_statement
-
-
-
-report_statement : loop_stat_1 t_REPORT expr assertion_stat_2 t_Semicolon
-
-assertion_stat : t_ASSERT expr assertion_stat_1 assertion_stat_2 t_Semicolon
-assertion_stat_2 : /* empty */
-assertion_stat_2 : t_SEVERITY expr
+seq_stats: seq_stats_1
+seq_stats_1: /* empty */
+seq_stats_1: seq_stats_1 seq_stats_2
+seq_stats_2: seq_stat
+
+seq_stat: assertion_stat
+seq_stat: lable assertion_stat
+seq_stat: case_stat
+seq_stat: exit_stat
+seq_stat: if_stat
+seq_stat: loop_stat
+seq_stat: next_stat
+seq_stat: null_stat
+seq_stat: procedure_call_stat
+seq_stat: return_stat
+seq_stat: lable signal_assign_stat
+seq_stat: signal_assign_stat
+seq_stat: variable_assign_stat
+seq_stat: wait_stat
+seq_stat: lable wait_stat
+seq_stat: report_statement
+
+report_statement: loop_stat_1 t_REPORT expr assertion_stat_2 t_Semicolon
+
+assertion_stat: t_ASSERT expr assertion_stat_1 assertion_stat_2 t_Semicolon
+assertion_stat_2: /* empty */
+assertion_stat_2 : t_SEVERITY expr
assertion_stat_1 : /* empty */
-assertion_stat_1 : t_REPORT expr
+assertion_stat_1 : t_REPORT expr
choice_stat : /* empty */
-choice_stat : t_Q
+choice_stat : t_Q
choice_stat_1: /* empty */
-choice_stat_1 : t_Q
+choice_stat_1 : t_Q
choice_stat_1 : t_Identifier
-case_stat : t_CASE choice_stat expr t_IS case_stat_alternative case_stat_1 t_END t_CASE choice_stat_1 t_Semicolon
-case_stat : lable t_CASE choice_stat expr t_IS case_stat_alternative case_stat_1 t_END t_CASE choice_stat_1 t_Semicolon
+case_stat : t_CASE choice_stat expr t_IS case_stat_alternative case_stat_1 t_END t_CASE choice_stat_1 t_Semicolon
+case_stat : lable t_CASE choice_stat expr t_IS case_stat_alternative case_stat_1 t_END t_CASE choice_stat_1 t_Semicolon
-case_stat : t_CASE error t_END t_CASE choice_stat_1 t_Semicolon
+case_stat : t_CASE error t_END t_CASE choice_stat_1 t_Semicolon
case_stat_1 : /* empty */
-case_stat_1 : case_stat_1 case_stat_2
-case_stat_2 : case_stat_alternative
+case_stat_1 : case_stat_1 case_stat_2
+case_stat_2 : case_stat_alternative
-case_stat_alternative : t_WHEN choices t_Arrow seq_stats
+case_stat_alternative : t_WHEN choices t_Arrow seq_stats
-exit_stat : t_EXIT exit_stat_1 exit_stat_2 t_Semicolon
+exit_stat : t_EXIT exit_stat_1 exit_stat_2 t_Semicolon
exit_stat_2 : /* empty */
-exit_stat_2 : t_WHEN expr
+exit_stat_2 : t_WHEN expr
exit_stat_1 : /* empty */
-exit_stat_1 : t_Identifier
+exit_stat_1 : t_Identifier
-if_stat : t_IF expr t_THEN seq_stats if_stat_1 if_stat_2 t_END t_IF t_Semicolon
-if_stat : t_IF expr t_THEN error t_END t_IF t_Semicolon
+if_stat : t_IF expr t_THEN seq_stats if_stat_1 if_stat_2 t_END t_IF t_Semicolon
+if_stat : t_IF expr t_THEN error t_END t_IF t_Semicolon
if_stat_2 : /* empty */
-if_stat_2 : t_ELSE seq_stats
+if_stat_2 : t_ELSE seq_stats
if_stat_1 : /* empty */
-if_stat_1 : if_stat_1 if_stat_3
-if_stat_3 : t_ELSIF expr t_THEN seq_stats
-
-loop_stat : loop_stat_1 loop_stat_2 t_LOOP seq_stats t_END t_LOOP loop_stat_3 t_Semicolon
-loop_stat_3 : /* empty */
-loop_stat_3 : t_Identifier
-loop_stat_2 : /* epty */
-loop_stat_2 : iteration_scheme
-loop_stat_1 : /* empty */
-loop_stat_1 : t_Identifier t_Colon
-
-next_stat : t_NEXT next_stat_1 next_stat_2 t_Semicolon
-next_stat_2 : /* empty */
-next_stat_2 : t_WHEN expr
-next_stat_1 : /* empty */
-next_stat_1 : t_Identifier
-
-null_stat : t_NULL t_Semicolon
-
-procedure_call_stat : name t_Semicolon
-
-return_stat : t_RETURN return_stat_1 t_Semicolon
-return_stat_1 : /* empty */
-return_stat_1 : expr
-
-signal_assign_stat : target t_LESym wavefrm t_Semicolon
- | target t_LESym delay_mechanism wavefrm t_Semicolon
- | target t_LESym t_FORCE inout_stat expr t_Semicolon
- | target t_LESym t_RELEASE inout_stat t_Semicolon
- | selected_signal_assignment
- | conditional_signal_assignment
- ;
-
-
-
-variable_assign_stat : variable_assign_stat_1 t_Semicolon
- | conditional_variable_assignment
- | lable selected_variable_assignment
- | selected_variable_assignment
-
-lable: t_Identifier t_Colon
-variable_assign_stat_1: target t_VarAsgn expr
-variable_assign_stat_1: lable target t_VarAsgn expr
-
-wait_stat : t_WAIT wait_stat_1 wait_stat_2 wait_stat_3 t_Semicolon
-wait_stat_3 : /* empty */
-wait_stat_3 : t_FOR expr
-wait_stat_2 : /* empty */
-wait_stat_2 : t_UNTIL expr
-wait_stat_1 : /* empty */
-wait_stat_1 : t_ON sensitivity_list
+if_stat_1 : if_stat_1 if_stat_3
+if_stat_3 : t_ELSIF expr t_THEN seq_stats
+
+loop_stat: loop_stat_1 loop_stat_2 t_LOOP seq_stats t_END t_LOOP loop_stat_3 t_Semicolon
+loop_stat_3: /* empty */
+loop_stat_3: t_Identifier
+loop_stat_2: /* epty */
+loop_stat_2: iteration_scheme
+loop_stat_1: /* empty */
+loop_stat_1: t_Identifier t_Colon
+
+next_stat: t_NEXT next_stat_1 next_stat_2 t_Semicolon
+next_stat_2: /* empty */
+next_stat_2: t_WHEN expr
+next_stat_1: /* empty */
+next_stat_1: t_Identifier
+
+null_stat: t_NULL t_Semicolon
+
+procedure_call_stat: name t_Semicolon
+
+return_stat: t_RETURN return_stat_1 t_Semicolon
+return_stat_1: /* empty */
+return_stat_1: expr
+
+signal_assign_stat: target t_LESym wavefrm t_Semicolon
+ | target t_LESym delay_mechanism wavefrm t_Semicolon
+ | target t_LESym t_FORCE inout_stat expr t_Semicolon
+ | target t_LESym t_RELEASE inout_stat t_Semicolon
+ | selected_signal_assignment
+ | conditional_signal_assignment
+ ;
+
+variable_assign_stat: variable_assign_stat_1 t_Semicolon
+ | conditional_variable_assignment
+ | lable selected_variable_assignment
+ | selected_variable_assignment
+
+lable: t_Identifier t_Colon
+variable_assign_stat_1: target t_VarAsgn expr
+variable_assign_stat_1: lable target t_VarAsgn expr
+
+wait_stat: t_WAIT wait_stat_1 wait_stat_2 wait_stat_3 t_Semicolon
+wait_stat_3: /* empty */
+wait_stat_3: t_FOR expr
+wait_stat_2: /* empty */
+wait_stat_2: t_UNTIL expr
+wait_stat_1: /* empty */
+wait_stat_1: t_ON sensitivity_list
/*--------------------------------------------------
-- Components and Configurations
----------------------------------------------------*/
- comp_end_dec : t_END {lastEntity=0;lastCompound=0;genLabels.resize(0);}
- | t_END t_COMPONENT entity_decl_5
- | t_END t_ARCHITECTURE entity_decl_5 {lastCompound=0;genLabels.resize(0);}
- | t_END t_ENTITY entity_decl_5 {lastEntity=0;genLabels.resize(0);}
- | t_END t_Identifier {lastEntity=0;lastCompound=0;genLabels.resize(0);}
-
- iss :/*empty*/ {currP=VhdlDocGen::COMPONENT;}
- | t_IS {currP=VhdlDocGen::COMPONENT;}
-
-comp_decl : t_COMPONENT t_Identifier iss comp_decl_1 comp_decl_2 comp_end_dec t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_COMPONENT),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0);
- currP=0;
- }
-comp_decl_2 : /* empty */ {$$="";}
-comp_decl_2 : t_PORT interf_list t_Semicolon {$$=$2;}
-comp_decl_1 : /* empty */ {$$="";}
-comp_decl_1 : t_GENERIC interf_list t_Semicolon {$$=$2;}
-
-block_config : t_FOR block_spec block_config_1 block_config_2 t_END t_FOR t_Semicolon
+comp_end_dec : t_END { lastEntity=0; lastCompound=0; genLabels.resize(0); }
+ | t_END t_COMPONENT entity_decl_5
+ | t_END t_ARCHITECTURE entity_decl_5 { lastCompound=0; genLabels.resize(0); }
+ | t_END t_ENTITY entity_decl_5 { lastEntity=0; genLabels.resize(0); }
+ | t_END t_Identifier { lastEntity=0; lastCompound=0; genLabels.resize(0); }
+
+iss :/*empty*/ { currP=VhdlDocGen::COMPONENT; }
+ | t_IS { currP=VhdlDocGen::COMPONENT; }
+
+comp_decl: t_COMPONENT t_Identifier iss comp_decl_1 comp_decl_2 comp_end_dec t_Semicolon
+ {
+ addVhdlType($2,getParsedLine(t_COMPONENT),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0);
+ currP=0;
+ }
+comp_decl_2: /* empty */ { $$=""; }
+comp_decl_2: t_PORT interf_list t_Semicolon { $$=$2; }
+comp_decl_1: /* empty */ { $$=""; }
+comp_decl_1: t_GENERIC interf_list t_Semicolon { $$=$2; }
+
+block_config: t_FOR block_spec block_config_1 block_config_2 t_END t_FOR t_Semicolon
{
popConfig();
}
-
-block_config : t_FOR error t_END t_FOR t_Semicolon {$$="";}
-block_config_2 : /* empty */ {$$="";}
-block_config_2 : block_config_2 block_config_3
- {
- $$=$1+" ";
- }
-block_config_3 : config_item {$$=$1;}
-block_config_1 : /* empty */ {$$="";}
-block_config_1 : block_config_1 block_config_4
- {
- $$=$1;
- }
-block_config_4 : use_clause {$$=$1;}
-
-block_spec : name {
-$$=$1;
-
- if(levelCounter==0)
- addConfigureNode($1.data(),NULL,TRUE,FALSE);
- else
- addConfigureNode($1.data(),NULL,FALSE,FALSE);
-}
-
-config_item : block_config {
-$$=$1;
- }
-
-config_item : comp_config {
- $$=$1;
- }
-
-comp_config : t_FOR comp_spec comp_config_1 comp_config_2 t_END t_FOR t_Semicolon
- {
- $$=$2+" "+$3+" "+$4;
- popConfig();
- }
-comp_config_2 : /* empty */ {$$="";}
-comp_config_2 : block_config {$$=$1;}
-comp_config_1 : /*empty*/ {$$="";}
-
-comp_config_1 : binding_indic_1 binding_indic_2 t_Semicolon {$$="";}
-comp_config_1 : t_USE t_VUNIT idf_list t_Semicolon {$$="";}
-comp_config_1 : t_USE binding_indic t_Semicolon
- {
- addConfigureNode(compSpec.data(),$2.data(),FALSE,FALSE);
- }
-
-config_spec : t_FOR comp_spec comp_spec_stat t_Semicolon {addConfigureNode($2.data(),$3.data(),TRUE,FALSE,TRUE);currNode->confVhdl=lastCompound->name; }
-config_spec : t_FOR comp_spec comp_spec_stat t_Semicolon t_END t_FOR t_Semicolon {addConfigureNode($2.data(),$3.data(),TRUE,FALSE,TRUE);currNode->confVhdl=lastCompound->name; }
-
-comp_spec_stat : t_USE binding_indic { $$=$2;}
-comp_spec_stat : t_USE t_VUNIT idf_list t_Semicolon {$$="";}
-comp_spec_stat : binding_indic_1 binding_indic_2 {$$="";}
-
-comp_spec : inst_list t_Colon expr
- {
+
+block_config: t_FOR error t_END t_FOR t_Semicolon { $$=""; }
+block_config_2: /* empty */ { $$=""; }
+block_config_2: block_config_2 block_config_3 { $$=$1+" "; }
+block_config_3: config_item { $$=$1; }
+block_config_1: /* empty */ { $$=""; }
+block_config_1: block_config_1 block_config_4 { $$=$1; }
+block_config_4: use_clause { $$=$1; }
+
+block_spec: name
+ {
+ $$=$1;
+
+ if (levelCounter==0)
+ addConfigureNode($1.data(),NULL,TRUE,FALSE);
+ else
+ addConfigureNode($1.data(),NULL,FALSE,FALSE);
+ }
+
+config_item: block_config { $$=$1; }
+config_item: comp_config { $$=$1; }
+
+comp_config: t_FOR comp_spec comp_config_1 comp_config_2 t_END t_FOR t_Semicolon
+ {
+ $$=$2+" "+$3+" "+$4;
+ popConfig();
+ }
+comp_config_2: /* empty */ { $$=""; }
+comp_config_2: block_config { $$=$1; }
+comp_config_1: /*empty*/ { $$=""; }
+
+comp_config_1: binding_indic_1 binding_indic_2 t_Semicolon { $$=""; }
+comp_config_1: t_USE t_VUNIT idf_list t_Semicolon { $$=""; }
+comp_config_1: t_USE binding_indic t_Semicolon
+ {
+ addConfigureNode(compSpec.data(),$2.data(),FALSE,FALSE);
+ }
+
+config_spec: t_FOR comp_spec comp_spec_stat t_Semicolon
+ {
+ addConfigureNode($2.data(),$3.data(),TRUE,FALSE,TRUE);currNode->confVhdl=lastCompound->name;
+ }
+config_spec: t_FOR comp_spec comp_spec_stat t_Semicolon t_END t_FOR t_Semicolon
+ {
+ addConfigureNode($2.data(),$3.data(),TRUE,FALSE,TRUE);currNode->confVhdl=lastCompound->name;
+ }
+
+comp_spec_stat: t_USE binding_indic { $$=$2; }
+comp_spec_stat: t_USE t_VUNIT idf_list t_Semicolon { $$=""; }
+comp_spec_stat: binding_indic_1 binding_indic_2 { $$=""; }
+
+comp_spec: inst_list t_Colon expr
+ {
$$=$1+":"+$3;
- compSpec=$$;
- }
+ compSpec=$$;
+ }
+inst_list: idf_list { $$=$1; }
+inst_list: t_ALL { $$="all"; }
+inst_list: t_OTHERS { $$="others"; }
+binding_indic : entity_aspect binding_indic_1 binding_indic_2 { $$=$1; }
-inst_list : idf_list {$$=$1;}
-inst_list : t_ALL {$$="all";}
-inst_list : t_OTHERS {$$="others";}
+binding_indic_2:
+binding_indic_2: t_PORT t_MAP association_list
-binding_indic : entity_aspect binding_indic_1 binding_indic_2
- {
- $$=$1;
- }
+binding_indic_1:
+binding_indic_1: t_GENERIC t_MAP association_list
-binding_indic_2 :
-binding_indic_2 : t_PORT t_MAP association_list
+entity_aspect: t_ENTITY name { $$="entity "+$2; }
+entity_aspect: t_CONFIGURATION mark { $$="configuration "+ $2; }
+entity_aspect: t_OPEN { $$="open "; }
+ ;
-binding_indic_1 :
+group_constituent: t_Identifier { $$=$1; }
+ | t_CharacterLit { $$=$1; }
+ ;
-binding_indic_1 : t_GENERIC t_MAP association_list
+group_constituent_list: group_constituent { $$=$1; }
+ | group_constituent_list t_Comma group_constituent { $$=$1+","+$3; }
+ ;
+group_declaration : t_GROUP t_Identifier t_Colon group_name t_LeftParen group_constituent_list t_RightParen t_Semicolon
+ {
+ // $$=$2+":"+$4+$6;
+ $$="("+$4+$6+")";
+ addVhdlType($2,getParsedLine(t_GROUP),Entry::VARIABLE_SEC,VhdlDocGen::GROUP,$$.data(),0);
+ }
-entity_aspect : t_ENTITY name {$$="entity "+$2;}
+group_template_declaration : t_GROUP t_Identifier t_IS t_LeftParen entity_class_entry_list t_RightParen t_Semicolon
+ {
+ $$=$2+":"+$5;
+ addVhdlType($2,getParsedLine(t_GROUP),Entry::VARIABLE_SEC,VhdlDocGen::GROUP,$5.data(),0);
+ }
-entity_aspect : t_CONFIGURATION mark {$$="configuration "+ $2;}
+group_template_declaration: t_GROUP t_Identifier t_IS t_LeftParen error t_Semicolon t_RightParen { $$=""; }
-entity_aspect : t_OPEN {$$="open ";}
-;
+entity_class_entry : entity_class tbox
-group_constituent : t_Identifier {$$=$1;}
- | t_CharacterLit {$$=$1;}
- ;
+tbox : /* empty */ { $$=""; }
+tbox : t_Box { $$="<>"; }
-group_constituent_list : group_constituent {$$=$1;}
- | group_constituent_list t_Comma group_constituent {$$=$1+","+$3;}
- ;
-
- group_declaration : t_GROUP t_Identifier t_Colon group_name t_LeftParen group_constituent_list t_RightParen t_Semicolon
- {
- // $$=$2+":"+$4+$6;
- $$="("+$4+$6+")";
- addVhdlType($2,getParsedLine(t_GROUP),Entry::VARIABLE_SEC,VhdlDocGen::GROUP,$$.data(),0);
- }
-
- group_template_declaration : t_GROUP t_Identifier t_IS t_LeftParen entity_class_entry_list t_RightParen t_Semicolon
- {
- $$=$2+":"+$5;
- addVhdlType($2,getParsedLine(t_GROUP),Entry::VARIABLE_SEC,VhdlDocGen::GROUP,$5.data(),0);
- }
-
- group_template_declaration: t_GROUP t_Identifier t_IS t_LeftParen error t_Semicolon t_RightParen {$$="";}
- entity_class_entry : entity_class tbox
-
- tbox : /* empty */ {$$="";}
- tbox : t_Box {$$="<>";}
-
- entity_class_entry_list : entity_class_entry {$$=$1;}
- | entity_class_entry_list t_Comma entity_class_entry {$$=$1+","+$3;}
- ;
-
-group_name : t_Identifier {$$=$1;}
-group_name: t_StringLit {$$=$1;}
-
- t_Identifier : t_LETTER
- {
- $$=s_str.qstr;
- }
-
-
- t_BitStringLit :t_DIGIT
- {
- $$=s_str.qstr;
- }
-
-
- t_StringLit : t_STRING
- {
- $$=s_str.qstr;
- }
+entity_class_entry_list: entity_class_entry { $$=$1; }
+ | entity_class_entry_list
+ t_Comma entity_class_entry { $$=$1+","+$3; }
+ ;
- t_AbstractLit : t_ABSTRLIST
- {
- $$=s_str.qstr;
- }
-
- t_CharacterLit : t_CHARLIST
- {
- $$=s_str.qstr;
- }
+group_name: t_Identifier { $$=$1; }
+group_name: t_StringLit { $$=$1; }
+
+t_Identifier: t_LETTER
+ {
+ $$=s_str.qstr;
+ }
+
+t_BitStringLit: t_DIGIT
+ {
+ $$=s_str.qstr;
+ }
+
+t_StringLit: t_STRING
+ {
+ $$=s_str.qstr;
+ }
+
+t_AbstractLit: t_ABSTRLIST
+ {
+ $$=s_str.qstr;
+ }
+
+t_CharacterLit: t_CHARLIST
+ {
+ $$=s_str.qstr;
+ }
/*--------------------------------------------------
-- VHDL 2002 extensions
-- to do: must be added
-----------------------------------------------------*/
-protected_type_declaration:t_PROTECTED protected_stats t_END protected_stat_1 {$$="";}
-protected_type_declaration:t_PROTECTED error t_END protected_stat_1 {$$="";}
-
- protected_stats : /* empty */
- protected_stats : protected_stats protected_stat_decl_1
- protected_stat_decl_1: protected_type_declaration_item
- protected_stat_1:t_PROTECTED
- protected_stat_1:t_PROTECTED t_Identifier
-
-protected_type_declaration_item : use_clause
-protected_type_declaration_item : attribute_spec
-protected_type_declaration_item : subprog_decl
-protected_type_declaration_item : subprogram_instantiation_decl
-
-protected_type_body : t_PROTECTED t_BODY protected_body_stats t_END protected_body_stat_1 {$$="";}
-protected_type_body : t_PROTECTED t_BODY error t_END protected_body_stat_1 {$$="";}
-
- protected_body_stats : /* empty */
- protected_body_stats : protected_body_stats protected_body_stat_decl_1
- protected_body_stat_decl_1: protected_type_body_declaration_item
+protected_type_declaration:t_PROTECTED protected_stats t_END protected_stat_1 { $$=""; }
+protected_type_declaration:t_PROTECTED error t_END protected_stat_1 { $$=""; }
+
+protected_stats: /* empty */
+protected_stats: protected_stats protected_stat_decl_1
+protected_stat_decl_1: protected_type_declaration_item
+protected_stat_1: t_PROTECTED
+protected_stat_1: t_PROTECTED t_Identifier
+
+protected_type_declaration_item: use_clause
+protected_type_declaration_item: attribute_spec
+protected_type_declaration_item: subprog_decl
+protected_type_declaration_item: subprogram_instantiation_decl
+
+protected_type_body: t_PROTECTED t_BODY protected_body_stats t_END protected_body_stat_1 { $$=""; }
+protected_type_body: t_PROTECTED t_BODY error t_END protected_body_stat_1 { $$=""; }
+
+protected_body_stats: /* empty */
+protected_body_stats: protected_body_stats protected_body_stat_decl_1
+protected_body_stat_decl_1: protected_type_body_declaration_item
protected_body_stat_1: t_PROTECTED t_BODY
protected_body_stat_1: t_PROTECTED t_BODY t_Identifier
protected_type_body_declaration_item: subprog_decltve_item // same as subprog
-
-
/*--------------------------------------------------
-- VHDL 2008 extensions
-- to do: must be added
-----------------------------------------------------*/
- context_ref : t_CONTEXT sel_list t_Semicolon
-
- context_decl : t_CONTEXT t_Identifier t_IS libustcont_stats t_END context_stat_1 t_Semicolon
- context_decl : t_CONTEXT t_Identifier t_IS t_END context_stat_1 t_Semicolon
+context_ref: t_CONTEXT sel_list t_Semicolon { $$="context "+$2; }
+
+context_decl: t_CONTEXT t_Identifier t_IS { parse_sec=CONTEXT_SEC; } libustcont_stats t_END context_stat_1 t_Semicolon
+ {
+ parse_sec=0;
+ QCString v=$5;
+ addVhdlType($2,getParsedLine(t_LIBRARY),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",$5.data());
+ }
+context_decl: t_CONTEXT t_Identifier t_IS t_END context_stat_1 t_Semicolon
+ {
+ addVhdlType($2,getParsedLine(t_LIBRARY),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",0);
+ }
context_stat_1: t_CONTEXT
context_stat_1: t_CONTEXT t_Identifier
- libustcont_stats : libustcont_stat
- libustcont_stats : libustcont_stats libustcont_stat
-
- libustcont_stat : use_clause
- libustcont_stat : lib_clause
- libustcont_stat : context_ref
-
-package_instantiation_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name signature t_Semicolon;
-package_instantiation_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name signature gen_assoc_list t_Semicolon
-package_instantiation_decl: t_PACKAGE error t_Identifier t_IS t_NEW t_Semicolon;
-
-subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW dot_name signature t_Semicolon
-subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW dot_name signature gen_assoc_list t_Semicolon
-subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW error t_Semicolon
+libustcont_stats: libustcont_stat { $$ = $1; }
+libustcont_stats: libustcont_stats libustcont_stat { $$ = $1+"#"+$2; }
-signature:/*empty*/ {$$="";}
-signature: t_LEFTBR signature1 t_RIGHTBR {$$="["+$2+" ]";}
-signature: t_LEFTBR t_RIGHTBR {$$="[ ]";}
+libustcont_stat: use_clause { $$ = $1; }
+libustcont_stat: lib_clause { $$ = $1; }
+libustcont_stat: context_ref { $$ = $1; }
+package_instantiation_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name signature t_Semicolon
+ {
+ $$=" is new "+$5+$6;
+ //Entry * pp=lastCompound;
+ //Entry * pps=lastEntity ;
+ //assert(false);
+ addVhdlType($2,getParsedLine(t_PACKAGE),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",$$.data());
+ }
+package_instantiation_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name signature gen_assoc_list t_Semicolon
+ {
+ $$=" is new "+$5+$6;
+ addVhdlType($2,getParsedLine(t_PACKAGE),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",$$.data());
+ }
+package_instantiation_decl: t_PACKAGE error t_Identifier t_IS t_NEW t_Semicolon { $$=""; }
+subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW dot_name signature t_Semicolon
+ {
+ $$= " is new "+$5+$6;
+ addVhdlType($2,getParsedLine(t_FUNCTION),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",$$.data());
+ }
+subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW dot_name signature gen_assoc_list t_Semicolon
+ {
+ $$=" is new "+$5+$6;
+ addVhdlType($2,getParsedLine(t_FUNCTION),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",$$.data());
+ }
+subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW error t_Semicolon { $$=""; }
-signature1: t_RETURN mark {$$="return "+$2;}
-signature1:mark_stats { $$=$1;}
-signature1: mark_stats t_RETURN mark {$$=$1+" return "+$3;}
+signature:/*empty*/ { $$=""; }
+signature: t_LEFTBR signature1
+ t_RIGHTBR { $$="["+$2+" ]"; }
+signature: t_LEFTBR t_RIGHTBR { $$="[ ]"; }
-mark_stats : mark {$$=$1;}
-mark_stats: mark_stats mark_stats_1 {$$=$1+" "+$2;}
-mark_stats_1: t_Comma mark {$$=" , "+$2;}
+signature1: t_RETURN mark { $$="return "+$2; }
+signature1: mark_stats { $$=$1; }
+signature1: mark_stats t_RETURN mark { $$=$1+" return "+$3; }
-case_scheme: t_CASE expr t_GENERATE when_stats ttend t_END t_GENERATE generate_stat_1 t_Semicolon
-case_scheme: t_CASE expr t_GENERATE when_stats t_END t_GENERATE generate_stat_1 t_Semicolon
-case_scheme: t_CASE error t_GENERATE error t_END t_GENERATE generate_stat_1 t_Semicolon
+mark_stats: mark { $$=$1; }
+mark_stats: mark_stats mark_stats_1 { $$=$1+" "+$2; }
+mark_stats_1: t_Comma mark { $$=" , "+$2; }
-when_stats_1 : t_WHEN lable choices t_Arrow generate_statement_body
-when_stats_1 : t_WHEN choices t_Arrow generate_statement_body
-when_stats : when_stats when_stats_1
-when_stats : when_stats_1
+case_scheme: t_CASE expr t_GENERATE when_stats ttend t_END t_GENERATE generate_stat_1 t_Semicolon
+case_scheme: t_CASE expr t_GENERATE when_stats t_END t_GENERATE generate_stat_1 t_Semicolon
+case_scheme: t_CASE error t_GENERATE error t_END t_GENERATE generate_stat_1 t_Semicolon
- ttend :t_END t_Semicolon
- ttend : t_END t_Identifier t_Semicolon
+when_stats_1: t_WHEN lable choices t_Arrow generate_statement_body
+when_stats_1: t_WHEN choices t_Arrow generate_statement_body
+when_stats: when_stats when_stats_1
+when_stats: when_stats_1
-conditional_signal_assignment : conditional_waveform_assignment
-conditional_signal_assignment : conditional_force_assignment
-
-conditional_waveform_assignment: target t_LESym wavefrm_element t_WHEN expr else_wave_list t_Semicolon
-conditional_waveform_assignment: target t_LESym delay_mechanism wavefrm_element t_WHEN expr else_wave_list t_Semicolon
+ttend: t_END t_Semicolon
+ttend: t_END t_Identifier t_Semicolon
-conditional_waveform_assignment: target t_LESym wavefrm_element t_WHEN expr t_Semicolon
-conditional_waveform_assignment: target t_LESym delay_mechanism wavefrm_element t_WHEN expr t_Semicolon
-conditional_waveform_assignment: target t_LESym error t_Semicolon
+conditional_signal_assignment: conditional_waveform_assignment
+conditional_signal_assignment: conditional_force_assignment
+
+conditional_waveform_assignment: target t_LESym wavefrm_element t_WHEN expr else_wave_list t_Semicolon
+conditional_waveform_assignment: target t_LESym delay_mechanism wavefrm_element t_WHEN expr else_wave_list t_Semicolon
+conditional_waveform_assignment: target t_LESym wavefrm_element t_WHEN expr t_Semicolon
+conditional_waveform_assignment: target t_LESym delay_mechanism wavefrm_element t_WHEN expr t_Semicolon
+conditional_waveform_assignment: target t_LESym error t_Semicolon
else_wave_list: t_ELSE expr t_WHEN expr
else_wave_list: t_ELSE expr
-conditional_force_assignment: target t_LESym t_FORCE inout_stat expr t_WHEN expr else_stat t_Semicolon
-conditional_force_assignment: target t_LESym t_FORCE inout_stat expr t_WHEN expr t_Semicolon
+conditional_force_assignment: target t_LESym t_FORCE inout_stat expr t_WHEN expr else_stat t_Semicolon
+conditional_force_assignment: target t_LESym t_FORCE inout_stat expr t_WHEN expr t_Semicolon
selected_signal_assignment : selected_waveform_assignment
selected_signal_assignment : selected_force_assignment
-selected_waveform_assignment: t_WITH expr t_SELECT choice_stat
- target t_LESym delay_stat sel_wave_list
+selected_waveform_assignment: t_WITH expr t_SELECT choice_stat
+ target t_LESym delay_stat sel_wave_list
+
+delay_stat:
+delay_stat: delay_mechanism
-delay_stat :
-delay_stat : delay_mechanism
-
-sel_wave_list : wavefrm_element t_WHEN choices t_Comma sel_wave_list
-sel_wave_list : sel_wave_list_1
+sel_wave_list: wavefrm_element t_WHEN choices t_Comma sel_wave_list
+sel_wave_list: sel_wave_list_1
-sel_wave_list_1 : wavefrm_element t_WHEN choices t_Semicolon
+sel_wave_list_1: wavefrm_element t_WHEN choices t_Semicolon
-selected_force_assignment: t_WITH expr t_SELECT choice_stat target t_LESym t_FORCE
- inout_stat sel_var_list
+selected_force_assignment: t_WITH expr t_SELECT choice_stat target t_LESym t_FORCE
+ inout_stat sel_var_list
- inout_stat :
- inout_stat : t_IN
- inout_stat : t_OUT
+inout_stat:
+inout_stat: t_IN
+inout_stat: t_OUT
delay_mechanism : t_TRANSPORT
- | t_REJECT expr t_INERTIAL
- | t_INERTIAL
-
- conditional_variable_assignment : variable_assign_stat_1 t_WHEN expr else_stat t_Semicolon
- conditional_variable_assignment : variable_assign_stat_1 t_WHEN expr t_Semicolon
-
-else_stat : t_ELSE expr t_WHEN expr
-else_stat : else_stat t_ELSE expr t_WHEN expr
-else_stat : t_ELSE expr
-
-selected_variable_assignment: t_WITH expr t_SELECT choice_stat select_name t_VarAsgn sel_var_list
-
- sel_var_list : expr t_WHEN choices t_Comma sel_var_list
- sel_var_list : sel_var_list_1
-
- sel_var_list_1 : expr t_WHEN choices t_Semicolon
-
-select_name:name
- | aggregate
-
-interface_subprogram_decl: iproc
- | ifunc
- ;
-iproc: t_PROCEDURE t_Identifier param
-ifunc: func_prec t_FUNCTION func_name param t_RETURN mark return_is
-ifunc: t_FUNCTION func_name param t_RETURN mark return_is
-
-
-func_name: t_Identifier
- | t_StringLit // "?<"
- ;
-
-return_is: /* empty */
- | t_IS t_Identifier
- | t_IS t_Box
-
-param: /* empty */
-param: t_PARAMETER
-param: t_PARAMETER t_LeftParen interf_element interf_list_1 t_RightParen
-param:t_LeftParen interf_element interf_list_1 t_RightParen
-
-interface_package_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name
-interface_package_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name gen_assoc_list
-
-gen_assoc_list : t_GENERIC t_MAP association_list
-
-
-gen_interface_list : t_GENERIC interf_list
-
+ | t_REJECT expr t_INERTIAL
+ | t_INERTIAL
+
+conditional_variable_assignment : variable_assign_stat_1 t_WHEN expr else_stat t_Semicolon
+conditional_variable_assignment : variable_assign_stat_1 t_WHEN expr t_Semicolon
+
+else_stat: t_ELSE expr t_WHEN expr
+else_stat: else_stat t_ELSE expr t_WHEN expr
+else_stat: t_ELSE expr
+
+selected_variable_assignment: t_WITH expr t_SELECT choice_stat select_name t_VarAsgn sel_var_list
+
+sel_var_list: expr t_WHEN choices t_Comma sel_var_list
+sel_var_list: sel_var_list_1
+
+sel_var_list_1: expr t_WHEN choices t_Semicolon
+
+select_name: name
+ | aggregate
+
+interface_subprogram_decl: iproc { $$ = $1; }
+ | ifunc { $$=$1; }
+ ;
+iproc: t_PROCEDURE t_Identifier param { $$ = "procedure "+$2+$3; current->name=$2; }
+
+ifunc: t_FUNCTION func_name param t_RETURN mark return_is
+ {
+ QCString s=$6;
+ if (!s.isEmpty())
+ {
+ s.prepend(" is ");
+ }
+ $$=" function "+$2+$3+$5+s;
+ current->name=$2;
+ }
+ifunc: func_prec t_FUNCTION func_name param t_RETURN mark return_is
+ {
+ QCString s=$7;
+ if (!s.isEmpty())
+ {
+ s.prepend(" is ");
+ }
+ $$=$1+" function "+$3+$4+" return "+$6+s;
+ current->name=$3;
+ }
+
+func_name: t_Identifier { $$=$1; }
+ | t_StringLit { $$=$1; } // "?<"
+ ;
+
+return_is: /* empty */ { $$=""; }
+ | t_IS t_Identifier { $$=$2; }
+ | t_IS t_Box { $$="<>"; }
+
+param: /* empty */ { $$=""; }
+param: t_PARAMETER { $$="parameter "; }
+param: t_PARAMETER { parse_sec=PARAM_SEC; }
+ t_LeftParen interf_element interf_list_1 t_RightParen
+ { parse_sec=0; }
+
+param: t_LeftParen interf_element interf_list_1 t_RightParen { $$="("+$2+")"; }
+
+interface_package_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name
+ {
+ $$="package "+$2+" is new "+$5;
+ current->name=$2;
+ }
+interface_package_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name gen_assoc_list
+ {
+ $$="package "+$2+" is new "+$5+"( ... )" ;
+ current->name=$2;
+ }
+
+gen_assoc_list: t_GENERIC t_MAP association_list
+
+gen_interface_list : t_GENERIC
+ {
+ //int u=s_str.iLine;
+ parse_sec=GEN_SEC;
+ }
+ interf_list
+ {
+ QCString vo=$3;
+ parse_sec=0;
+ }
+
external_name: t_SLSL sig_stat external_pathname t_Colon subtype_indic t_SRSR
+ {
+ QCString s="<<"+$2;
+ QCString s1=$3+":"+$5+">>";
+ $$=s+s1;
+ }
+
+sig_stat: t_CONSTANT { $$="constant "; }
+sig_stat: t_SIGNAL { $$="signal "; }
+sig_stat: t_VARIABLE { $$="variable "; }
-sig_stat: t_CONSTANT
-sig_stat: t_SIGNAL
-sig_stat: t_VARIABLE
+external_pathname: absolute_pathname { $$=$1; }
+ | relative_pathname { $$=$1; }
+ | package_path_name { $$=$1; }
+ ;
-external_pathname: absolute_pathname
- | relative_pathname
- | package_path_name
- ;
+absolute_pathname: t_Dot pathname_element_list t_Identifier { $$="."+$2+$3; }
+absolute_pathname: t_Dot t_Identifier { $$="."+$2; }
-absolute_pathname: t_Dot pathname_element_list t_Identifier
-absolute_pathname: t_Dot t_Identifier
+relative_pathname: neg_list pathname_element_list t_Identifier { $$=$1+$2+$3; }
+relative_pathname: neg_list t_Identifier { $$=$1+$2; }
-relative_pathname: t_Neg t_Dot pathname_element_list t_Identifier
-relative_pathname: t_Neg t_Dot t_Identifier
+neg_list: t_Neg t_Dot { $$="^."; }
+neg_list: neg_list t_Neg t_Dot { $$=$1+"^."; }
-pathname_element: t_Identifier
- | t_Identifier t_LeftParen expr t_RightParen
- ;
-
- pathname_element_list: pathname_element t_Dot
- | pathname_element_list pathname_element t_Dot
-
-package_path_name: t_At dot_name
+pathname_element: t_Identifier { $$=$1; }
+ | t_Identifier t_LeftParen expr t_RightParen { $$=$1+"("+$3+")"; }
+ ;
-tool_directive : t_ToolDir
+pathname_element_list: pathname_element t_Dot { $$=$1+"."; }
+ | pathname_element_list pathname_element t_Dot { $$=$1+$2+"."; }
+
+package_path_name: t_At dot_name { $$="@"+$2; }
+
+tool_directive: t_ToolDir
{
// fprintf(stderr,"\n tooldir %s",s_str.qstr.data() );
}
@@ -1980,11 +2075,11 @@ int MyParserVhdl::parse(MyParserVhdl* conv)
{
myconv=conv;
return vhdlScanYYparse();
-}
+}
int lex(void)
{
- return myconv->doLex();
+ return myconv->doLex();
}
struct s_contVhdl* getVhdlCont()
@@ -2000,19 +2095,19 @@ Entry* getVhdlCompound()
}
QList<ConfNode>& getVhdlConfiguration() { return configL; }
-
+
static void addCompInst(char *n, char* instName, char* comp,int iLine)
{
- current->spec=VhdlDocGen::COMPONENT_INST;
+ current->spec=VhdlDocGen::INSTANTIATION;
current->section=Entry::VARIABLE_SEC;
current->startLine=iLine;
current->bodyLine=iLine;
- current->type=instName; // foo:instname e.g proto or work. proto(ttt)
- current->exception=genLabels; // |arch|label1:label2...
- current->name=n; // foo
+ current->type=instName; // foo:instname e.g proto or work. proto(ttt)
+ current->exception=genLabels; // |arch|label1:label2...
+ current->name=n; // foo
current->args=lastCompound->name; // architecture name
- current->includeName=comp; // component/enity/configuration
+ current->includeName=comp; // component/enity/configuration
//printf(" \n genlable: [%s] inst: [%s] name: [%s] \n",genLabels.data(),instName,n);
@@ -2020,7 +2115,7 @@ static void addCompInst(char *n, char* instName, char* comp,int iLine)
{
current->args=lastCompound->name;
if (!findInstant(current->type))
- {
+ {
initEntry(current);
instFiles.append(new Entry(*current));
}
@@ -2031,7 +2126,7 @@ static void addCompInst(char *n, char* instName, char* comp,int iLine)
newEntry();
}
}
-
+
static void pushLabel(QCString label)
{
genLabels+="|"+label;
@@ -2041,11 +2136,11 @@ static void popLabel()
{
int u=genLabels.findRev("|");
if (u<0) return;
- genLabels=genLabels.left(u);
+ genLabels=genLabels.left(u);
}
static void popConfig()
-{
+{
assert(currNode);
currNode=currNode->prevNode;
// printf("\n pop arch %s ",currNode->arch.data());
@@ -2091,32 +2186,12 @@ static void addConfigureNode(const char* a,const char*b, bool isRoot,bool isLeav
}
}// addConfigure
-
-
//------------------------------------------------------------------------------------------------------------
-static bool addLibUseClause(const QCString &type)
-{
- static bool show=Config_getBool("SHOW_INCLUDE_FILES");
- static bool showIEEESTD=Config_getBool("FORCE_LOCAL_INCLUDES");
-
- if (!show) // all libraries and included packages are not shown
- {
- return FALSE;
- }
-
- if (!showIEEESTD) // all standard packages and libraries are not shown
- {
- if (type.lower().stripPrefix("ieee")) return FALSE;
- if (type.lower().stripPrefix("std")) return FALSE;
- }
- return TRUE;
-}
-
static bool isFuncProcProced()
{
- if (currP==VhdlDocGen::FUNCTION ||
- currP==VhdlDocGen::PROCEDURE ||
+ if (currP==VhdlDocGen::FUNCTION ||
+ currP==VhdlDocGen::PROCEDURE ||
currP==VhdlDocGen::PROCESS
)
{
@@ -2125,7 +2200,6 @@ static bool isFuncProcProced()
return FALSE;
}
-
static void initEntry(Entry *e)
{
e->fileName = s_str.fileName;
@@ -2136,7 +2210,7 @@ static void initEntry(Entry *e)
static void addProto(const char *s1,const char *s2,const char *s3,
const char *s4,const char *s5,const char *s6)
{
- (void)s3; // avoid unused warning
+ // (void)s3; // avoid unused warning
(void)s5; // avoid unused warning
static QRegExp reg("[\\s]");
QCString name=s2;
@@ -2146,9 +2220,29 @@ static void addProto(const char *s1,const char *s2,const char *s3,
{
Argument *arg=new Argument;
arg->name=(QCString)ql[u];
- arg->type=s4;
- arg->defval=s1;
- arg->attrib=s6;
+ if (s3)
+ {
+ arg->type=s3;
+ }
+ arg->type+=" ";
+ arg->type+=s4;
+ if (s6)
+ {
+ arg->type+=s6;
+ }
+ if (parse_sec==GEN_SEC && param_sec==0)
+ {
+ arg->defval="gen!";
+ }
+
+ if (parse_sec==PARAM_SEC)
+ {
+ assert(false);
+ }
+
+ arg->defval+=s1;
+ arg->attrib="";//s6;
+
current->argList->append(arg);
current->args+=s2;
current->args+=",";
@@ -2175,12 +2269,20 @@ static void createFunction(const QCString &impure,int spec,
{
int it=0;
current->bodyLine=getParsedLine(spec);
- current->spec=spec;
+ current->spec=spec;
current->section=Entry::FUNCTION_SEC;
current->exception=impure;
+
+ if (parse_sec==GEN_SEC)
+ {
+ current->spec= VhdlDocGen::GENERIC;
+ current->section=Entry::FUNCTION_SEC;
+ }
+
if (currP==VhdlDocGen::PROCEDURE)
{
current->name=impure;
+ current->exception="";
it=t_PROCEDURE;
}
else
@@ -2195,16 +2297,16 @@ static void createFunction(const QCString &impure,int spec,
current->args=fname;
current->name=impure;
if (!fname.isEmpty())
- {
+ {
QStringList q1=QStringList::split(',',fname);
for (uint ii=0;ii<q1.count();ii++)
{
- Argument *arg=new Argument;
- arg->name=(QCString)q1[ii];
- current->argList->append(arg);
+ Argument *arg=new Argument;
+ arg->name=(QCString)q1[ii];
+ current->argList->append(arg);
}
}
- }
+ }
current->startLine=getParsedLine(it);
current->bodyLine=getParsedLine(it);
@@ -2222,21 +2324,24 @@ static void addVhdlType(const QCString &name,int startLine,int section,int spec,
return;
}
+ if (parse_sec==GEN_SEC)
+ {
+ spec= VhdlDocGen::GENERIC;
+ }
+
// more than one name ?
QStringList ql=QStringList::split(",",name,FALSE);
for (uint u=0;u<ql.count();u++)
{
current->name=(QCString)ql[u];
- if (section==Entry::VARIABLE_SEC &&
- !(spec == VhdlDocGen::USE || spec == VhdlDocGen::LIBRARY)
- )
+ if (section==Entry::VARIABLE_SEC && !(spec == VhdlDocGen::USE || spec == VhdlDocGen::LIBRARY) )
{
current->name.prepend(VhdlDocGen::getRecordNumber());
}
current->startLine=startLine;
current->bodyLine=startLine;
- current->section=section;
+ current->section=section;
current->spec=spec;
current->fileName=s_str.fileName;
if (current->args.isEmpty())
@@ -2253,9 +2358,9 @@ static void addVhdlType(const QCString &name,int startLine,int section,int spec,
static void newEntry()
{
- if (current->spec==VhdlDocGen::ENTITY ||
- current->spec==VhdlDocGen::PACKAGE ||
- current->spec==VhdlDocGen::ARCHITECTURE ||
+ if (current->spec==VhdlDocGen::ENTITY ||
+ current->spec==VhdlDocGen::PACKAGE ||
+ current->spec==VhdlDocGen::ARCHITECTURE ||
current->spec==VhdlDocGen::PACKAGE_BODY
)
{
@@ -2263,7 +2368,7 @@ static void newEntry()
}
else
{
- if (lastCompound)
+ if (lastCompound)
{
lastCompound->addSubEntry(current);
}
@@ -2271,11 +2376,11 @@ static void newEntry()
{
if (lastEntity)
{
- lastEntity->addSubEntry(current);
+ lastEntity->addSubEntry(current);
}
- else
+ else
{
- current_root->addSubEntry(current);
+ current_root->addSubEntry(current);
}
}
}
diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l
index 3212b75..9a7cf3a 100644
--- a/src/vhdlscanner.l
+++ b/src/vhdlscanner.l
@@ -4,7 +4,7 @@
*
* This scanner is derived from a scanner of the ALLIANCE CAD toolset,
* release 1.1. That toolset was written from:
- * MASI/CAO-VLSI CAD Team
+ * MASI/CAO-VLSI CAD Team
* Laboratoire MASI/CAO-VLSI
* Tour 55-65, 2eme etage, Porte 13
* Universite Pierre et Marie Curie (PARIS VI)
@@ -107,6 +107,7 @@ static QMap<QCString, int> keyMap;
static void handleCommentBlock(const QCString &doc,bool brief);
static void mapLibPackage(const Entry* ce);
static Entry* getEntryAtLine(const Entry* ce,int line);
+static bool addLibUseClause(const QCString &type);
#define YY_NEVER_INTERACTIVE 1
@@ -321,12 +322,12 @@ static void makeInlineDoc(int endCode)
if (compound)
{
- compound->addSubEntry(temp);
+ compound->addSubEntry(temp);
}
else
{
- temp->type="misc"; // global code like library ieee...
- current_root->addSubEntry(temp);
+ temp->type="misc"; // global code like library ieee...
+ current_root->addSubEntry(temp);
}
strComment.resize(0);
gBlock.reset();
@@ -445,6 +446,19 @@ BR [ \t\n\r]
// printf("\n <<<< insert tok: %s %d %d>>>\n",vhdlScanYYtext,itoken,yyLineNr);
lineIndex[itoken]=yyLineNr;
}
+
+ // global members
+ if (( itoken==t_ARCHITECTURE ) ||
+ ( itoken==t_ENTITY) ||
+ ( itoken==t_PACKAGE ) ||
+ ( itoken==t_LIBRARY ) ||
+ ( itoken==t_USE ) ||
+ ( itoken==t_CONFIGURATION ) ||
+ ( itoken==t_CONTEXT ) )
+ {
+ lineIndex[itoken]=yyLineNr;
+ }
+
prevToken=itoken;
yycont->qstr=vhdlScanYYtext;
@@ -521,7 +535,7 @@ BR [ \t\n\r]
. { /* unknown characters */ }
-<*>{BR}*"--!"[^{}\n][^\n]*\n/{B}*"--!" { // multi line comment
+<*>{B}*"--!"[^{}\n][^\n]*\n/{B}*"--!" { // multi line comment
if (iDocLine==-1) iDocLine=yyLineNr;
QCString qc(vhdlScanYYtext);
int len=qc.contains('\n')+yyLineNr-1;
@@ -556,6 +570,7 @@ BR [ \t\n\r]
startCodeBlock(index);
}
lineCount();
+ BEGIN(Comment);
}
<Comment>.|\n {
@@ -566,12 +581,14 @@ BR [ \t\n\r]
{
startCodeBlock(index);
}
-
+
VhdlDocGen::prepareComment(strComment);
-
-
+
+
if (index==-1)
+ {
handleCommentBlock(strComment,FALSE);
+ }
strComment.resize(0);;
unput(*vhdlScanYYtext);
BEGIN(g_lastCommentContext);
@@ -658,11 +675,11 @@ BR [ \t\n\r]
if (c =='/')
{
unput('*');
- BEGIN(Vhdl2008Comment);
+ BEGIN(EndVhdl2008Comment);
}
else
{
- BEGIN(EndVhdl2008Comment);
+ BEGIN(Vhdl2008Comment);
}
}
@@ -825,30 +842,40 @@ static void mapLibPackage(const Entry* ce)
for (;(rt=eli.current()),eli1=eli;++eli)
{
if (rt->spec==VhdlDocGen::LIBRARY || rt->spec==VhdlDocGen::USE)
- // top level library or use statement
+ // top level library or use statement
{
- Entry *temp=0;
- for (;(temp=eli1.current());++eli1) // find next entity
- {
- if (temp->spec==VhdlDocGen::ENTITY || temp->spec==VhdlDocGen::PACKAGE || temp->spec==VhdlDocGen::ARCHITECTURE || temp->spec==VhdlDocGen::PACKAGE_BODY)
- {
- Entry *ee=new Entry(*rt); //append a copy to entries sublist
- temp->addSubEntry(ee);
- found=TRUE;
- rt->spec=-1; //nullify entry
- rt->section=0;
- lastComp=temp;
- break;
- }
- }//for
- if (lastComp && rt->spec!=-1)
- {
- Entry *ee=new Entry(*rt); //append a copy to entries sublist
- lastComp->addSubEntry(ee);
- found=TRUE;
- rt->spec=-1; //nullify entry
- rt->section=0;
- }
+ Entry *temp=0;
+ if(!addLibUseClause(rt->name))
+ {
+ rt->spec=-1;
+ rt->section=0;
+ // continue;
+ }
+
+ for (;(temp=eli1.current());++eli1) // find next entity
+ {
+ if (temp->spec==VhdlDocGen::ENTITY ||
+ temp->spec==VhdlDocGen::PACKAGE ||
+ temp->spec==VhdlDocGen::ARCHITECTURE ||
+ temp->spec==VhdlDocGen::PACKAGE_BODY)
+ {
+ Entry *ee=new Entry(*rt); //append a copy to entries sublist
+ temp->addSubEntry(ee);
+ found=TRUE;
+ rt->spec=-1; //nullify entry
+ rt->section=0;
+ lastComp=temp;
+ break;
+ }
+ }//for
+ if (lastComp && rt->spec!=-1)
+ {
+ Entry *ee=new Entry(*rt); //append a copy to entries sublist
+ lastComp->addSubEntry(ee);
+ found=TRUE;
+ rt->spec=-1; //nullify entry
+ rt->section=0;
+ }
}//if
}//for
if (!found) // nothing left to do
@@ -858,6 +885,24 @@ static void mapLibPackage(const Entry* ce)
}//while
}//MapLib
+static bool addLibUseClause(const QCString &type)
+{
+ static bool show=Config_getBool("SHOW_INCLUDE_FILES");
+ static bool showIEEESTD=Config_getBool("FORCE_LOCAL_INCLUDES");
+
+ if (!show) // all libraries and included packages will not be shown
+ {
+ return FALSE;
+ }
+
+ if (!showIEEESTD) // all standard packages and libraries will not be shown
+ {
+ if (type.lower().stripPrefix("ieee")) return FALSE;
+ if (type.lower().stripPrefix("std")) return FALSE;
+ }
+ return TRUE;
+}
+
static void handleCommentBlock(const QCString &doc,bool brief)
{
int position=0;
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 856d3d2..1e135ef 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -953,6 +953,19 @@ void XmlDocVisitor::visitPost(DocText *)
{
}
+void XmlDocVisitor::visitPre(DocHtmlBlockQuote *)
+{
+ if (m_hide) return;
+ m_t << "<blockquote>";
+}
+
+void XmlDocVisitor::visitPost(DocHtmlBlockQuote *)
+{
+ if (m_hide) return;
+ m_t << "</blockquote>";
+}
+
+
void XmlDocVisitor::filter(const char *str)
{
m_t << convertToXML(str);
diff --git a/src/xmldocvisitor.h b/src/xmldocvisitor.h
index 7d2ab4b..531cd38 100644
--- a/src/xmldocvisitor.h
+++ b/src/xmldocvisitor.h
@@ -131,6 +131,8 @@ class XmlDocVisitor : public DocVisitor
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
+ void visitPre(DocHtmlBlockQuote *);
+ void visitPost(DocHtmlBlockQuote *);
private:
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 886e921..b398ac3 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -119,8 +119,8 @@ inline void writeXMLCodeString(FTextStream &t,const char *s, int &col)
{
case '\t':
{
- int spacesToNextTabStop =
- Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
+ static int tabSize = Config_getInt("TAB_SIZE");
+ int spacesToNextTabStop = tabSize - (col%tabSize);
col+=spacesToNextTabStop;
while (spacesToNextTabStop--) t << "<sp/>";
break;
diff --git a/winbuild/Doxygen.sln b/winbuild/Doxygen.sln
index 7910673..6bfc6c9 100644
--- a/winbuild/Doxygen.sln
+++ b/winbuild/Doxygen.sln
@@ -1,16 +1,11 @@

Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
+# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Doxygen", "Doxygen.vcproj", "{309C9A4A-94D2-4837-9A11-45B0A6CF35C3}"
ProjectSection(ProjectDependencies) = postProject
{B6BB4771-8A4E-4656-AC08-1EF8AC182F64} = {B6BB4771-8A4E-4656-AC08-1EF8AC182F64}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Doxytag", "Doxytag.vcproj", "{EE0E8466-1E25-4FBC-B273-5EA6776EFE95}"
- ProjectSection(ProjectDependencies) = postProject
- {B6BB4771-8A4E-4656-AC08-1EF8AC182F64} = {B6BB4771-8A4E-4656-AC08-1EF8AC182F64}
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qtools", "qtools.vcproj", "{B6BB4771-8A4E-4656-AC08-1EF8AC182F64}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxywizard", "Doxywizard.vcproj", "{77C9C2D3-EA3F-3D59-8B4C-0ED852890172}"
@@ -18,25 +13,34 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Debug|Win32.ActiveCfg = Debug|Win32
{309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Debug|Win32.Build.0 = Debug|Win32
+ {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Debug|x64.ActiveCfg = Debug|x64
{309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Release|Win32.ActiveCfg = Release|Win32
{309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Release|Win32.Build.0 = Release|Win32
- {EE0E8466-1E25-4FBC-B273-5EA6776EFE95}.Debug|Win32.ActiveCfg = Debug|Win32
- {EE0E8466-1E25-4FBC-B273-5EA6776EFE95}.Debug|Win32.Build.0 = Debug|Win32
- {EE0E8466-1E25-4FBC-B273-5EA6776EFE95}.Release|Win32.ActiveCfg = Release|Win32
- {EE0E8466-1E25-4FBC-B273-5EA6776EFE95}.Release|Win32.Build.0 = Release|Win32
+ {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Release|x64.ActiveCfg = Release|x64
+ {309C9A4A-94D2-4837-9A11-45B0A6CF35C3}.Release|x64.Build.0 = Release|x64
{B6BB4771-8A4E-4656-AC08-1EF8AC182F64}.Debug|Win32.ActiveCfg = Debug|Win32
{B6BB4771-8A4E-4656-AC08-1EF8AC182F64}.Debug|Win32.Build.0 = Debug|Win32
+ {B6BB4771-8A4E-4656-AC08-1EF8AC182F64}.Debug|x64.ActiveCfg = Debug|x64
+ {B6BB4771-8A4E-4656-AC08-1EF8AC182F64}.Debug|x64.Build.0 = Debug|x64
{B6BB4771-8A4E-4656-AC08-1EF8AC182F64}.Release|Win32.ActiveCfg = Release|Win32
{B6BB4771-8A4E-4656-AC08-1EF8AC182F64}.Release|Win32.Build.0 = Release|Win32
+ {B6BB4771-8A4E-4656-AC08-1EF8AC182F64}.Release|x64.ActiveCfg = Release|x64
+ {B6BB4771-8A4E-4656-AC08-1EF8AC182F64}.Release|x64.Build.0 = Release|x64
{77C9C2D3-EA3F-3D59-8B4C-0ED852890172}.Debug|Win32.ActiveCfg = Debug|Win32
{77C9C2D3-EA3F-3D59-8B4C-0ED852890172}.Debug|Win32.Build.0 = Debug|Win32
+ {77C9C2D3-EA3F-3D59-8B4C-0ED852890172}.Debug|x64.ActiveCfg = Debug|x64
+ {77C9C2D3-EA3F-3D59-8B4C-0ED852890172}.Debug|x64.Build.0 = Debug|x64
{77C9C2D3-EA3F-3D59-8B4C-0ED852890172}.Release|Win32.ActiveCfg = Release|Win32
{77C9C2D3-EA3F-3D59-8B4C-0ED852890172}.Release|Win32.Build.0 = Release|Win32
+ {77C9C2D3-EA3F-3D59-8B4C-0ED852890172}.Release|x64.ActiveCfg = Release|x64
+ {77C9C2D3-EA3F-3D59-8B4C-0ED852890172}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj
index 22dfecb..07df324 100644
--- a/winbuild/Doxygen.vcproj
+++ b/winbuild/Doxygen.vcproj
@@ -11,6 +11,9 @@
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
<ToolFile
@@ -21,7 +24,7 @@
<Configuration
Name="Debug|Win32"
OutputDirectory="..\bin\Debug"
- IntermediateDirectory="..\objects\Debug"
+ IntermediateDirectory=".\Debug"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -64,7 +67,7 @@
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="true"
- DebugInformationFormat="4"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -118,9 +121,109 @@
/>
</Configuration>
<Configuration
+ Name="Debug|x64"
+ OutputDirectory="..\bin\Debug64"
+ IntermediateDirectory=".\Debug64"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="version.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="Lex"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug64/Doxygen.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm200 "
+ Optimization="0"
+ AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."
+ PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ PrecompiledHeaderFile=".\Debug64/Doxygen.pch"
+ AssemblerListingLocation=".\Debug64/"
+ ObjectFile=".\Debug64/"
+ ProgramDataBaseFileName=".\Debug64/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="qtools.lib ws2_32.lib iconv64.lib shell32.lib"
+ OutputFile="..\bin\Debug64\doxygen.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="Debug64"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\Debug64/Doxygen.pdb"
+ SubSystem="1"
+ LargeAddressAware="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Debug64/Doxygen.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
Name="Release|Win32"
- OutputDirectory="..\bin"
- IntermediateDirectory="..\objects"
+ OutputDirectory="..\bin\Release"
+ IntermediateDirectory=".\Release"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -166,6 +269,7 @@
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -182,7 +286,7 @@
Name="VCLinkerTool"
AdditionalOptions="/LTCG"
AdditionalDependencies="qtools.lib iconv.lib shell32.lib"
- OutputFile="..\bin\doxygen.exe"
+ OutputFile="..\bin\Release\doxygen.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="Release"
@@ -217,6 +321,108 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="..\bin\Release64"
+ IntermediateDirectory=".\Release64"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="version.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="Lex"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release64/Doxygen.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm200 "
+ Optimization="2"
+ InlineFunctionExpansion="2"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="..\src,..\qtools,..\libpng,..\libmd5,."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE; _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;LIBICONV_STATIC;CHARSET_STATIC"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release64/Doxygen.pch"
+ AssemblerListingLocation=".\Release64/"
+ ObjectFile=".\Release64/"
+ ProgramDataBaseFileName=".\Release64/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/LTCG"
+ AdditionalDependencies="qtools.lib iconv64.lib shell32.lib"
+ OutputFile="..\bin\Release64\doxygen.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="Release64"
+ ProgramDatabaseFile=".\Release64/Doxygen.pdb"
+ SubSystem="1"
+ LargeAddressAware="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release64/Doxygen.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
@@ -242,6 +448,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -250,6 +465,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\cite.cpp"
@@ -268,6 +492,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -276,6 +509,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\classlist.cpp"
@@ -290,6 +532,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -298,6 +549,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\cmdmapper.cpp"
@@ -312,6 +572,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -320,6 +589,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\code.cpp"
@@ -337,6 +615,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PcodeYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -344,6 +630,14 @@
CommandLine="flex -PcodeYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PcodeYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\commentcnv.cpp"
@@ -369,6 +663,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PcommentScanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -376,6 +678,14 @@
CommandLine="flex -PcommentScanYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PcommentScanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\config.cpp"
@@ -393,6 +703,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PconfigYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -400,6 +718,14 @@
CommandLine="flex -PconfigYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PconfigYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\configoptions.cpp"
@@ -419,6 +745,16 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PcppExpYY -t $(InputDir)constexp.l &gt;$(InputDir)ce_lex.cpp"
+ AdditionalDependencies="$(InputDir)constexp.l"
+ Output="$(InputDir)ce_lex.cpp"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -428,6 +764,16 @@
Output="$(InputDir)ce_lex.cpp"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PcppExpYY -t $(InputDir)constexp.l &gt;$(InputDir)ce_lex.cpp"
+ AdditionalDependencies="$(InputDir)constexp.l"
+ Output="$(InputDir)ce_lex.cpp"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\constexp.y"
@@ -443,6 +789,16 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Running bison on constexp.y"
+ CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
+ Outputs="$(InputDir)\..\src\ce_parse.cpp"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -452,6 +808,16 @@
Outputs="$(InputDir)\..\src\ce_parse.cpp"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Running bison on constexp.y"
+ CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
+ Outputs="$(InputDir)\..\src\ce_parse.cpp"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\cppvalue.cpp"
@@ -466,6 +832,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -474,6 +849,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\dbusxmlscanner.cpp"
@@ -492,6 +876,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -500,6 +893,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\declinfo.cpp"
@@ -517,6 +919,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PdeclinfoYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -524,6 +934,14 @@
CommandLine="flex -PdeclinfoYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PdeclinfoYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\defargs.cpp"
@@ -541,6 +959,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PdefargsYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -548,6 +974,14 @@
CommandLine="flex -PdefargsYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PdefargsYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\defgen.cpp"
@@ -562,6 +996,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -570,6 +1013,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\define.cpp"
@@ -584,6 +1036,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -592,6 +1053,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\definition.cpp"
@@ -606,6 +1076,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -614,6 +1093,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\diagram.cpp"
@@ -628,6 +1116,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -636,6 +1133,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\dirdef.cpp"
@@ -650,6 +1156,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -658,6 +1173,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\docparser.cpp"
@@ -672,6 +1196,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -680,6 +1213,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\docsets.cpp"
@@ -694,6 +1236,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -702,6 +1253,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\doctokenizer.cpp"
@@ -719,6 +1279,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PdoctokenizerYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -726,6 +1294,14 @@
CommandLine="flex -PdoctokenizerYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PdoctokenizerYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\dot.cpp"
@@ -740,6 +1316,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -748,6 +1333,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\doxygen.cpp"
@@ -762,6 +1356,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -770,6 +1373,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\eclipsehelp.cpp"
@@ -788,6 +1400,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -796,6 +1417,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\filedef.cpp"
@@ -810,6 +1440,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -818,6 +1457,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\filename.cpp"
@@ -832,6 +1480,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -840,6 +1497,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\formula.cpp"
@@ -854,6 +1520,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -862,6 +1537,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\fortrancode.cpp"
@@ -879,6 +1563,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -i -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -886,6 +1578,14 @@
CommandLine="flex -i -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -i -PfcodeYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\fortranscanner.cpp"
@@ -903,6 +1603,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -i -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -910,6 +1618,14 @@
CommandLine="flex -i -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -i -PfscanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\ftextstream.cpp"
@@ -928,6 +1644,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -936,6 +1661,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\groupdef.cpp"
@@ -950,6 +1684,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -958,6 +1701,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\htags.cpp"
@@ -972,6 +1724,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -980,6 +1741,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\htmldocvisitor.cpp"
@@ -994,6 +1764,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1002,6 +1781,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\htmlgen.cpp"
@@ -1016,6 +1804,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1024,6 +1821,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\htmlhelp.cpp"
@@ -1038,6 +1844,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1046,6 +1861,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\image.cpp"
@@ -1060,6 +1884,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1068,6 +1901,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\index.cpp"
@@ -1082,6 +1924,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1090,6 +1941,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\indexlog.cpp"
@@ -1104,7 +1964,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
+ Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
@@ -1112,12 +1972,8 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
- </File>
- <File
- RelativePath="..\src\instdox.cpp"
- >
<FileConfiguration
- Name="Debug|Win32"
+ Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
@@ -1126,7 +1982,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
+ Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
@@ -1148,6 +2004,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1156,6 +2021,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\latexdocvisitor.cpp"
@@ -1170,6 +2044,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1178,6 +2061,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\latexgen.cpp"
@@ -1192,6 +2084,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1200,6 +2101,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\layout.cpp"
@@ -1222,6 +2132,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1230,6 +2149,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\main.cpp"
@@ -1244,6 +2172,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1252,6 +2189,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\mandocvisitor.cpp"
@@ -1266,6 +2212,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1274,6 +2229,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\mangen.cpp"
@@ -1288,6 +2252,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1296,6 +2269,19 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\markdown.cpp"
+ >
</File>
<File
RelativePath="..\src\marshal.cpp"
@@ -1314,6 +2300,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1322,6 +2317,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\memberdef.cpp"
@@ -1336,6 +2340,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1344,6 +2357,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\membergroup.cpp"
@@ -1358,6 +2380,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1366,6 +2397,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\memberlist.cpp"
@@ -1380,6 +2420,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1388,6 +2437,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\membername.cpp"
@@ -1402,6 +2460,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1410,6 +2477,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\message.cpp"
@@ -1424,6 +2500,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1432,6 +2517,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\msc.cpp"
@@ -1450,6 +2544,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1458,6 +2561,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\objcache.cpp"
@@ -1476,6 +2588,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1484,6 +2605,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\outputlist.cpp"
@@ -1498,6 +2628,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1506,6 +2645,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\pagedef.cpp"
@@ -1520,6 +2668,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1528,6 +2685,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\perlmodgen.cpp"
@@ -1542,6 +2708,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1550,6 +2725,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\portable.cpp"
@@ -1575,6 +2759,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PpreYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1582,6 +2774,14 @@
CommandLine="flex -PpreYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PpreYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\pycode.cpp"
@@ -1599,6 +2799,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PpycodeYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1606,6 +2814,14 @@
CommandLine="flex -PpycodeYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PpycodeYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\pyscanner.cpp"
@@ -1623,6 +2839,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PpyscanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1630,6 +2854,14 @@
CommandLine="flex -PpyscanYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PpyscanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\qhp.cpp"
@@ -1644,6 +2876,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1652,6 +2893,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\qhpxmlwriter.cpp"
@@ -1666,6 +2916,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1674,6 +2933,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\reflist.cpp"
@@ -1688,6 +2956,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1696,6 +2973,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\rtfdocvisitor.cpp"
@@ -1710,6 +2996,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1718,6 +3013,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\rtfgen.cpp"
@@ -1732,6 +3036,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1740,6 +3053,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\rtfstyle.cpp"
@@ -1754,6 +3076,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1762,6 +3093,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\scanner.cpp"
@@ -1779,6 +3119,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PscanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1786,6 +3134,14 @@
CommandLine="flex -PscanYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PscanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\searchindex.cpp"
@@ -1800,6 +3156,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1808,6 +3173,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\store.cpp"
@@ -1826,6 +3200,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1834,6 +3217,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\tclscanner.cpp"
@@ -1851,6 +3243,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PtclscanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1858,6 +3258,14 @@
CommandLine="flex -PtclscanYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -PtclscanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\textdocvisitor.cpp"
@@ -1876,6 +3284,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1884,6 +3301,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\util.cpp"
@@ -1898,6 +3324,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1906,6 +3341,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\version.cpp"
@@ -1920,6 +3364,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1928,6 +3381,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\vhdlcode.l"
@@ -1941,6 +3403,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -i -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1948,34 +3418,52 @@
CommandLine="flex -i -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -i -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\vhdldocgen.cpp"
>
</File>
<File
- RelativePath="..\src\vhdlparser.cpp"
- >
- </File>
- <File
- RelativePath="..\src\vhdlparser.hpp"
- >
- </File>
- <File
- RelativePath="..\src\vhdlparser.y"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Running bison on vhdlparser.y"
- CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
- Outputs="$(InputDir)\..\src\vhdlparser.cpp"
- />
- </FileConfiguration>
- </File>
- <File
+ RelativePath="..\src\vhdlparser.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\vhdlparser.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\vhdlparser.y"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Running bison on vhdlparser.y"
+ CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
+ Outputs="$(InputDir)\..\src\vhdlparser.cpp"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Running bison on vhdlparser.y"
+ CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
+ Outputs="$(InputDir)\..\src\vhdlparser.cpp"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\src\vhdlscanner.l"
>
<FileConfiguration
@@ -1987,6 +3475,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -i -PvhdlScanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -1994,6 +3490,14 @@
CommandLine="flex -i -PvhdlScanYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="Lex"
+ CommandLine="flex -i -PvhdlScanYY [AllOptions] [AdditionalOptions] [inputs]"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\xmldocvisitor.cpp"
@@ -2008,6 +3512,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -2016,6 +3529,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\xmlgen.cpp"
@@ -2030,6 +3552,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -2038,6 +3569,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
@@ -2638,6 +4178,16 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"
+ AdditionalDependencies="..\src\ce_lex.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"
+ Outputs="$(InputPath)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release|Win32"
>
<Tool
@@ -2647,6 +4197,16 @@
Outputs="$(InputPath)"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"
+ AdditionalDependencies="..\src\ce_lex.cpp;..\src\code.cpp;..\src\commentcnv.cpp;..\src\config.cpp;..\src\declinfo.cpp;..\src\defargs.cpp;..\src\doctokenizer.cpp;..\src\formula.cpp;..\src\pre.cpp;..\src\scanner.cpp;..\src\util.cpp;"
+ Outputs="$(InputPath)"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\util.h"
diff --git a/winbuild/Doxytag.vcproj b/winbuild/Doxytag.vcproj
deleted file mode 100644
index a852a5e..0000000
--- a/winbuild/Doxytag.vcproj
+++ /dev/null
@@ -1,328 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="Doxytag"
- ProjectGUID="{EE0E8466-1E25-4FBC-B273-5EA6776EFE95}"
- RootNamespace="Doxytag"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- <ToolFile
- RelativePath=".\Lex.rules"
- />
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="..\bin\Debug"
- IntermediateDirectory="..\objects\Debug"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- CommandLine="version.bat"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="Lex"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TypeLibraryName=".\Debug/Doxytag.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\src,..\qtools"
- PreprocessorDefinitions="_CONSOLE;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- PrecompiledHeaderFile=".\Debug/Doxytag.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="qtools.lib ws2_32.lib"
- OutputFile="..\bin\Debug\doxytag.exe"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories="Debug"
- GenerateManifest="false"
- GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/Doxytag.pdb"
- SubSystem="1"
- LargeAddressAware="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- SuppressStartupBanner="true"
- OutputFile=".\Debug/Doxytag.bsc"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="..\bin"
- IntermediateDirectory="..\objects"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- CommandLine="version.bat"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="Lex"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TypeLibraryName=".\Release/Doxytag.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\src,..\qtools"
- PreprocessorDefinitions="_CONSOLE;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/Doxytag.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="qtools.lib "
- OutputFile="..\bin\doxytag.exe"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories="Release"
- ProgramDatabaseFile=".\Release/Doxytag.pdb"
- SubSystem="1"
- LargeAddressAware="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- SuppressStartupBanner="true"
- OutputFile=".\Release/Doxytag.bsc"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath="..\src\doxytag.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\doxytag.l"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Lex"
- CommandLine="flex -PtagYY [AllOptions] [AdditionalOptions] [inputs]"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Lex"
- CommandLine="flex -PtagYY [AllOptions] [AdditionalOptions] [inputs]"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\version.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath="..\src\config.h"
- >
- </File>
- <File
- RelativePath="..\src\unistd.h"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"
- AdditionalDependencies="..\src\doxytag.cpp;"
- Outputs="$(InputPath)"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo /* this is a dummy file, that is needed for compiling files that are &gt; $(InputPath)&#x0D;&#x0A;echo * generated with flex under Windows 95/NT. &gt;&gt; $(InputPath)&#x0D;&#x0A;echo */ &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #if defined(_MSC_VER) &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #include ^&lt;io.h^&gt; &gt;&gt; $(InputPath)&#x0D;&#x0A;echo #endif &gt;&gt; $(InputPath)&#x0D;&#x0A;"
- AdditionalDependencies="..\src\doxytag.cpp;"
- Outputs="$(InputPath)"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\version.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/winbuild/iconv.vcproj b/winbuild/iconv.vcproj
new file mode 100644
index 0000000..d865a54
--- /dev/null
+++ b/winbuild/iconv.vcproj
@@ -0,0 +1,464 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="iconv"
+ ProjectGUID="{B6BB4771-8A4E-4656-AC08-1EF8AC182F69}"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="2"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="iconv/windows;iconv/include;iconv/libcharset/include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;LIBCHARSET_STATIC;HAVE_STRING_H;"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release/iconv.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile=".\iconv.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release/iconv.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory=".\Release64"
+ IntermediateDirectory=".\Release64"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="2"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="iconv/windows;iconv/include;iconv/libcharset/include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;LIBCHARSET_STATIC;HAVE_STRING_H;"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release64/iconv.pch"
+ AssemblerListingLocation=".\Release64/"
+ ObjectFile=".\Release64/"
+ ProgramDataBaseFileName=".\Release64/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile=".\iconv64.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release64/iconv.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="iconv\lib\iconv.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="iconv\libcharset\lib\localcharset.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="iconv"
+ ProjectGUID="{B6BB4771-8A4E-4656-AC08-1EF8AC182F69}"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="2"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="iconv/windows;iconv/include;iconv/libcharset/include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;LIBCHARSET_STATIC;HAVE_STRING_H;"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release/iconv.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile=".\iconv.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release/iconv.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory=".\Release64"
+ IntermediateDirectory=".\Release64"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="2"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="iconv/windows;iconv/include;iconv/libcharset/include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;LIBCHARSET_STATIC;HAVE_STRING_H;"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release64/iconv.pch"
+ AssemblerListingLocation=".\Release64/"
+ ObjectFile=".\Release64/"
+ ProgramDataBaseFileName=".\Release64/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile=".\iconv64.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release64/iconv.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="iconv\lib\iconv.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="iconv\libcharset\lib\localcharset.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/winbuild/iconv64.lib b/winbuild/iconv64.lib
new file mode 100644
index 0000000..a1afc1c
--- /dev/null
+++ b/winbuild/iconv64.lib
Binary files differ
diff --git a/winbuild/qtools.vcproj b/winbuild/qtools.vcproj
index 6c11c85..573d633 100644
--- a/winbuild/qtools.vcproj
+++ b/winbuild/qtools.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9.00"
+ Version="9,00"
Name="qtools"
ProjectGUID="{B6BB4771-8A4E-4656-AC08-1EF8AC182F64}"
TargetFrameworkVersion="131072"
@@ -10,14 +10,17 @@
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Release|Win32"
- OutputDirectory="..\lib"
- IntermediateDirectory="..\objects"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -56,6 +59,7 @@
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -92,9 +96,88 @@
/>
</Configuration>
<Configuration
+ Name="Release|x64"
+ OutputDirectory=".\Release64"
+ IntermediateDirectory=".\Release64"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="2"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="..\qtools"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release64/qtools.pch"
+ AssemblerListingLocation=".\Release64/"
+ ObjectFile=".\Release64/"
+ ProgramDataBaseFileName=".\Release64/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile=".\Release64\qtools.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release64/qtools.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
Name="Debug|Win32"
- OutputDirectory="..\lib\Debug"
- IntermediateDirectory="..\objects\Debug"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -131,7 +214,7 @@
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="true"
- DebugInformationFormat="4"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -167,6 +250,83 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory=".\Debug64"
+ IntermediateDirectory=".\Debug64"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions=""
+ Optimization="0"
+ AdditionalIncludeDirectories="..\qtools"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ PrecompiledHeaderFile=".\Debug/qtools.pch"
+ AssemblerListingLocation=".\Debug64/"
+ ObjectFile=".\Debug64/"
+ ProgramDataBaseFileName=".\Debug64/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile=".\Debug64\qtools.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Debug64/qtools.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
@@ -188,6 +348,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -196,6 +365,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qcollection.cpp"
@@ -210,6 +388,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -218,6 +405,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qdatastream.cpp"
@@ -232,6 +428,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -240,6 +445,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qdatetime.cpp"
@@ -254,6 +468,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -262,6 +485,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qdir.cpp"
@@ -276,6 +508,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -284,6 +525,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qdir_win32.cpp"
@@ -298,6 +548,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -306,6 +565,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qfile.cpp"
@@ -320,6 +588,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -328,6 +605,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qfile_win32.cpp"
@@ -342,6 +628,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -350,6 +645,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qfileinfo.cpp"
@@ -364,6 +668,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -372,6 +685,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qfileinfo_win32.cpp"
@@ -386,6 +708,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -394,6 +725,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qgarray.cpp"
@@ -408,6 +748,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -416,6 +765,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qgcache.cpp"
@@ -430,6 +788,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -438,6 +805,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qgdict.cpp"
@@ -452,6 +828,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -460,6 +845,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qglist.cpp"
@@ -474,6 +868,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -482,6 +885,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qglobal.cpp"
@@ -496,6 +908,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -504,6 +925,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qgstring.cpp"
@@ -522,6 +952,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -530,6 +969,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qiodevice.cpp"
@@ -544,6 +992,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -552,6 +1009,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qmap.cpp"
@@ -566,6 +1032,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -574,6 +1049,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qmutex.cpp"
@@ -596,6 +1080,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -604,6 +1097,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qstring.cpp"
@@ -618,6 +1120,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -626,6 +1137,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qstringlist.cpp"
@@ -640,6 +1160,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -648,6 +1177,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qtextcodec.cpp"
@@ -662,6 +1200,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -670,6 +1217,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qtextstream.cpp"
@@ -684,6 +1240,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -692,6 +1257,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\qthread.cpp"
@@ -722,6 +1296,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -730,6 +1313,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\qtools\scstring.cpp"
@@ -744,6 +1336,15 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -752,6 +1353,15 @@
PreprocessorDefinitions=""
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter