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

Release-1.7.6.1-20120110

parent 8a65c23b
No related merge requests found
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)
......@@ -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)
......
......@@ -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:
......
......@@ -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
......
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)
......@@ -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
......
......@@ -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
......
......@@ -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>
......
......@@ -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
......
......@@ -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>
......
......@@ -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).
%
%
%
% 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}
......@@ -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}
......
.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).
/******************************************************************************
*
*
*
* 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
*/
......@@ -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)
......@@ -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>.
......
......@@ -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.
......
......@@ -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
......
%!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
%
......@@ -411,33 +420,12 @@ 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
#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
......
doc/infoflow.gif

13.1 KB | W: 0px | H: 0px

doc/infoflow.gif

12.6 KB | W: 0px | H: 0px

  • 2-up
  • Swipe
  • Onion skin
......@@ -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
......
/******************************************************************************
*
*
*
* 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.
*/
......@@ -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>
......
......@@ -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.
......
......@@ -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();
//@}
//!@}
......@@ -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?
......
......@@ -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();
......
......@@ -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 \
......
......@@ -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();
}
......
......@@ -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;
......
......@@ -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
......
......@@ -156,6 +156,7 @@ enum HtmlTagType
HTML_H6 = 30,
HTML_SPAN = 31,
HTML_DIV = 32,
HTML_BLOCKQUOTE= 33,
XML_CmdMask = 0x100,
......
......@@ -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;
}
......
......@@ -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>
......
......@@ -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"
......
......@@ -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;
}
}
......
......@@ -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='
......
......@@ -349,6 +349,17 @@ void addConfigOptions(Config *cfg)
"you also need to set FILE_PATTERNS otherwise the files are not read by doxygen."
);
//----
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"
......@@ -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);
//----
......
......@@ -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()); }
......
......@@ -44,6 +44,7 @@ static LabelMap s_labels[] =
{ "printtree", Debug::PrintTree },
{ "time", Debug::Time },
{ "extcmd", Debug::ExtCmd },
{ "markdown", Debug::Markdown },
{ 0, (Debug::DebugMask)0 }
};
......
......@@ -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);
......
......@@ -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");
......
......@@ -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;
......
......@@ -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();
......
......@@ -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;
......
......@@ -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
......
......@@ -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" {
......
......@@ -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;
/*! @} */
};
......
......@@ -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
......
......@@ -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 {
......
......@@ -134,6 +134,7 @@ class Doxygen
static int subpageNestingLevel;
static QCString spaces;
static bool generatingXmlOutput;
static bool markdownSupport;
};
void initDoxygen();
......
......@@ -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"
......
This diff is collapsed.
#
#
#
# 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
#
#
#
# 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
......@@ -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);
......
#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
......@@ -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;
......
......@@ -126,6 +126,8 @@ class HtmlDocVisitor : public DocVisitor
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
void visitPre(DocHtmlBlockQuote *);
void visitPost(DocHtmlBlockQuote *);
private:
......
......@@ -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 *)
......
......@@ -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())
{
......
/******************************************************************************
*
*
*
* 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
}
......@@ -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);
......
......@@ -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:
......
......@@ -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;
......
......@@ -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 \
......
......@@ -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)
......
......@@ -129,6 +129,8 @@ class ManDocVisitor : public DocVisitor
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
void visitPre(DocHtmlBlockQuote *);
void visitPost(DocHtmlBlockQuote *);
private:
......
This diff is collapsed.
/******************************************************************************
*
*
*
* Copyright (C) 1997-2011 by Dimitri van Heesch.
*
......@@ -15,9 +13,40 @@
*
*/
#ifndef INSTDOX_H
#define INSTDOX_H
#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);
};
extern void writeInstallScript();
#endif
......@@ -575,7 +575,7 @@ void MemberList::writeDocumentationPage(OutputList &ol,
container->getOutputFileBase());
if (!generateTreeView)
{
container->writeNavigationPath(ol,FALSE);
container->writeNavigationPath(ol);
ol.endQuickIndices();
}
ol.startContents();
......
......@@ -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
......
......@@ -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;
......
......@@ -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
......
......@@ -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];
......
......@@ -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:
......
......@@ -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
}
......
This diff is collapsed.
......@@ -126,6 +126,8 @@ class TextDocVisitor : public DocVisitor
void visitPost(DocCopy *) {}
void visitPre(DocText *) {}
void visitPost(DocText *) {}
void visitPre(DocHtmlBlockQuote *) {}
void visitPost(DocHtmlBlockQuote *) {}
private:
......
This diff is collapsed.
......@@ -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
......@@ -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())
......
This diff is collapsed.
......@@ -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
This diff is collapsed.
......@@ -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;
......
......@@ -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);
......
......@@ -131,6 +131,8 @@ class XmlDocVisitor : public DocVisitor
void visitPost(DocCopy *);
void visitPre(DocText *);
void visitPost(DocText *);
void visitPre(DocHtmlBlockQuote *);
void visitPost(DocHtmlBlockQuote *);
private:
......
......@@ -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;
......

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
......
This diff is collapsed.
File added
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment