Commit 0c3ef4a7 authored by dimitri's avatar dimitri

Release-1.8.3.1

parent c236776b
DOXYGEN Version 1.8.3 DOXYGEN Version 1.8.3.1
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (27 December 2012) Dimitri van Heesch (20 January 2013)
DOXYGEN Version 1.8.3 DOXYGEN Version 1.8.3.1
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -26,4 +26,4 @@ forum. ...@@ -26,4 +26,4 @@ forum.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (27 December 2012) Dimitri van Heesch (dimitri@stack.nl) (20 January 2013)
/****************************************************************************** /******************************************************************************
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
/****************************************************************************** /******************************************************************************
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
/****************************************************************************** /******************************************************************************
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
# #
# #
# #
# Copyright (C) 1997-2012 by Dimitri van Heesch. # Copyright (C) 1997-2013 by Dimitri van Heesch.
# #
# Permission to use, copy, modify, and distribute this software and its # Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby # documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* $Id: config_templ.l,v 1.8 2001/01/01 10:15:16 root Exp $ * $Id: config_templ.l,v 1.8 2001/01/01 10:15:16 root Exp $
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -191,7 +191,7 @@ void MainWindow::about() ...@@ -191,7 +191,7 @@ void MainWindow::about()
t << QString::fromAscii("<qt><center>A tool to configure and run doxygen version ")+ t << QString::fromAscii("<qt><center>A tool to configure and run doxygen version ")+
QString::fromAscii(versionString)+ QString::fromAscii(versionString)+
QString::fromAscii(" on your source files.</center><p><br>" QString::fromAscii(" on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2012</center><p>" "<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2013</center><p>"
"</qt>"); "</qt>");
QMessageBox::about(this,tr("Doxygen GUI"),msg); QMessageBox::about(this,tr("Doxygen GUI"),msg);
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
doxygen_version_major=1 doxygen_version_major=1
doxygen_version_minor=8 doxygen_version_minor=8
doxygen_version_revision=3 doxygen_version_revision=3.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO doxygen_version_mmn=NO
...@@ -640,9 +640,9 @@ EOF ...@@ -640,9 +640,9 @@ EOF
if test $f_wizard = YES; then if test $f_wizard = YES; then
EXTRADEPS=doxywizard EXTRADEPS=doxywizard
fi fi
if test $f_search = YES; then # if test $f_search = YES; then
EXTRADEPS="$EXTRADEPS doxysearch" # EXTRADEPS="$EXTRADEPS doxysearch"
fi # fi
echo "all: src/version.cpp $EXTRADEPS" >> $DST echo "all: src/version.cpp $EXTRADEPS" >> $DST
echo " \$(MAKE) -C qtools" >> $DST echo " \$(MAKE) -C qtools" >> $DST
echo " \$(MAKE) -C libmd5" >> $DST echo " \$(MAKE) -C libmd5" >> $DST
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
# Documents produced by Doxygen are derivative works derived from the # Documents produced by Doxygen are derivative works derived from the
# input used in their production; they are not affected by this license. # input used in their production; they are not affected by this license.
PROJECT_NAME = PROJECT_NAME = "Doxygen"
OUTPUT_DIRECTORY = .. OUTPUT_DIRECTORY = ..
HTML_HEADER = HTML_HEADER =
HTML_FOOTER = HTML_FOOTER =
......
# #
# #
# #
# Copyright (C) 1997-2012 by Dimitri van Heesch. # Copyright (C) 1997-2013 by Dimitri van Heesch.
# #
# Permission to use, copy, modify, and distribute this software and its # Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby # documentation under the terms of the GNU General Public License is hereby
......
# #
# #
# #
# Copyright (C) 1997-2012 by Dimitri van Heesch. # Copyright (C) 1997-2013 by Dimitri van Heesch.
# #
# Permission to use, copy, modify, and distribute this software and its # Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby # documentation under the terms of the GNU General Public License is hereby
......
# #
# #
# #
# Copyright (C) 1997-2012 by Dimitri van Heesch. # Copyright (C) 1997-2013 by Dimitri van Heesch.
# #
# Permission to use, copy, modify, and distribute this software and its # Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby # documentation under the terms of the GNU General Public License is hereby
......
# #
# #
# #
# Copyright (C) 1997-2012 by Dimitri van Heesch. # Copyright (C) 1997-2013 by Dimitri van Heesch.
# #
# Permission to use, copy, modify, and distribute this software and its # Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby # documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
/****************************************************************************** e******************************************************************************
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -115,6 +115,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -115,6 +115,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_extension_mapping EXTENSION_MAPPING \refitem cfg_extension_mapping EXTENSION_MAPPING
\refitem cfg_external_groups EXTERNAL_GROUPS \refitem cfg_external_groups EXTERNAL_GROUPS
\refitem cfg_external_search EXTERNAL_SEARCH \refitem cfg_external_search EXTERNAL_SEARCH
\refitem cfg_external_search_id EXTERNAL_SEARCH_ID
\refitem cfg_extra_packages EXTRA_PACKAGES \refitem cfg_extra_packages EXTRA_PACKAGES
\refitem cfg_extra_search_mappings EXTRA_SEARCH_MAPPINGS \refitem cfg_extra_search_mappings EXTRA_SEARCH_MAPPINGS
\refitem cfg_extract_all EXTRACT_ALL \refitem cfg_extract_all EXTRACT_ALL
...@@ -623,9 +624,13 @@ followed by the descriptions of the tags grouped by category. ...@@ -623,9 +624,13 @@ followed by the descriptions of the tags grouped by category.
Doxygen has a built-in mapping, but you can override or extend it using this tag. Doxygen has a built-in mapping, but you can override or extend it using this tag.
The format is ext=language, where ext is a file extension, and language is one of The format is ext=language, where ext is a file extension, and language is one of
the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
Objective-C, Python, Fortran, VHDL. For instance to make doxygen treat Objective-C, Python, Fortran, VHDL.
For instance to make doxygen treat
.inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
use: inc=Fortran f=C use: `inc=Fortran f=C`.
For files without extension you can use `no_extension` as a placeholder.
\anchor cfg_subgrouping \anchor cfg_subgrouping
<dt>\c SUBGROUPING <dd> <dt>\c SUBGROUPING <dd>
...@@ -1388,10 +1393,10 @@ doxygen -w html new_header.html new_footer.html new_stylesheet.css YourConfigFil ...@@ -1388,10 +1393,10 @@ doxygen -w html new_header.html new_footer.html new_stylesheet.css YourConfigFil
<dt><code>\$mathjax</code><dd>will be replaced with a links to <dt><code>\$mathjax</code><dd>will be replaced with a links to
the javascript and style sheets needed for the MathJax feature the javascript and style sheets needed for the MathJax feature
(or an empty string when \ref cfg_use_mathjax "USE_MATHJAX" is disabled). (or an empty string when \ref cfg_use_mathjax "USE_MATHJAX" is disabled).
<dt><code>\$relpath\$</code><dd> <dt><code>\$relpath^</code><dd>
If \c CREATE_SUBDIRS is enabled, the command <code>\$relpath\$</code> can be If \c CREATE_SUBDIRS is enabled, the command <code>\$relpath^</code> can be
used to produce a relative path to the root of the HTML output directory, used to produce a relative path to the root of the HTML output directory,
e.g. use \$relpath\$doxygen.css, to refer to the standard style sheet. e.g. use \$relpath^doxygen.css, to refer to the standard style sheet.
</dl> </dl>
To cope with differences in the layout of the header and footer that depend on To cope with differences in the layout of the header and footer that depend on
...@@ -1515,7 +1520,7 @@ hr.footer { ...@@ -1515,7 +1520,7 @@ hr.footer {
The \c HTML_EXTRA_FILES tag can be used to specify one or more extra images or The \c HTML_EXTRA_FILES tag can be used to specify one or more extra images or
other source files which should be copied to the HTML output directory. Note other source files which should be copied to the HTML output directory. Note
that these files will be copied to the base HTML output directory. Use the that these files will be copied to the base HTML output directory. Use the
$relpath$ marker in the \c HTML_HEADER and/or \c HTML_FOOTER files to load these $relpath^ marker in the \c HTML_HEADER and/or \c HTML_FOOTER files to load these
files. In the \c HTML_STYLESHEET file, use the file name only. Also note that files. In the \c HTML_STYLESHEET file, use the file name only. Also note that
the files will be copied as-is; there are no commands or markers available. the files will be copied as-is; there are no commands or markers available.
...@@ -1943,18 +1948,27 @@ search data is written to a file for indexing by an external tool. With the ...@@ -1943,18 +1948,27 @@ search data is written to a file for indexing by an external tool. With the
\c SEARCHDATA_FILE tag the name of this file can be specified. \c SEARCHDATA_FILE tag the name of this file can be specified.
The default is searchdata.xml. The default is searchdata.xml.
\anchor cfg_external_search_id
<dt>\c EXTERNAL_SEARCH_ID <dd>
\addindex EXTERNAL_SEARCH_ID
When \c SERVER_BASED_SEARCH AND \c EXTERNAL_SEARCH are both enabled the
\c EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
useful in combination with \ref cfg_extra_search_mappings "EXTRA_SEARCH_MAPPINGS"
to search through multiple projects and redirect the results back to the right project.
\anchor cfg_extra_search_mappings \anchor cfg_extra_search_mappings
<dt>\c EXTRA_SEARCH_MAPPINGS <dd> <dt>\c EXTRA_SEARCH_MAPPINGS <dd>
\addindex EXTRA_SEARCH_MAPPINGS \addindex EXTRA_SEARCH_MAPPINGS
The \c EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through other The \c EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
doxygen projects that are not otherwise connected via tags files, but are projects other than the one defined by this configuration file, but that are
all added to the same search index. Each project needs to have a tag file set all added to the same external search index. Each project needs to have a
via \ref cfg_generate_tagfile "GENERATE_TAGFILE". The search mapping then unique id set via \ref cfg_external_search_id "EXTERNAL_SEARCH_ID".
maps the name of tag file to a relative location where the documentation The search mapping then maps the id of to a relative location where the
can be found, similar to the \ref cfg_tagfiles "TAGFILES" option but without documentation can be found.
actually processing the tag file. The format is:
The format is:
\verbatim \verbatim
EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
\endverbatim \endverbatim
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -250,7 +250,18 @@ defined group with title "My Group": ...@@ -250,7 +250,18 @@ defined group with title "My Group":
</navindex> </navindex>
\endverbatim \endverbatim
Groups can be nested to form a hierarchy. Groups can be nested to form a hierarchy.
By default a usergroup entry in the navigation tree is a link to
a landing page with the contents of the group. You can link to a
different page using the `url` attribute just like you can for the
`<tab>` element and prevent any link using `url="[none]"`, i.e.
\verbatim
<tab type="usergroup" title="Group without link" url="[none]">
...
</tab>
\endverbatim
The elements after \c navindex represent the layout of the different The elements after \c navindex represent the layout of the different
pages generated by doxygen: pages generated by doxygen:
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -41,6 +41,6 @@ doxygen \fB\-e\fR rtf extensionsFile ...@@ -41,6 +41,6 @@ doxygen \fB\-e\fR rtf extensionsFile
If \fB\-s\fR is specified the comments in the config file will be omitted. If \fB\-s\fR is specified the comments in the config file will be omitted.
If configName is omitted `Doxyfile' will be used as a default. If configName is omitted `Doxyfile' will be used as a default.
.SH AUTHOR .SH AUTHOR
Doxygen version VERSION, Copyright Dimitri van Heesch 1997-2012 Doxygen version VERSION, Copyright Dimitri van Heesch 1997-2013
.SH SEE ALSO .SH SEE ALSO
doxywizard(1). doxywizard(1).
...@@ -983,6 +983,8 @@ dl.section dd { ...@@ -983,6 +983,8 @@ dl.section dd {
margin: 0px; margin: 0px;
width: 100%; width: 100%;
border-bottom: 1px solid #848484; border-bottom: 1px solid #848484;
visibility: hidden;
height: 0px;
} }
.image .image
......
% %
% %
% %
% Copyright (C) 1997-2011 by Dimitri van Heesch. % Copyright (C) 1997-2013 by Dimitri van Heesch.
% %
% Permission to use, copy, modify, and distribute this software and its % Permission to use, copy, modify, and distribute this software and its
% documentation under the terms of the GNU General Public License is hereby % documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
/****************************************************************************** /******************************************************************************
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
*/ */
/*! \page extsearch External Indexing and Searching /*! \page extsearch External Indexing and Searching
[TOC]
\section extsearch_intro Introduction \section extsearch_intro Introduction
With release 1.8.3, doxygen provides the ability to search through HTML using With release 1.8.3, doxygen provides the ability to search through HTML using
...@@ -34,26 +36,9 @@ engine, doxygen provides an example tool for each action: `doxyindexer` ...@@ -34,26 +36,9 @@ engine, doxygen provides an example tool for each action: `doxyindexer`
for indexing the data and `doxysearch.cgi` for searching through the index. for indexing the data and `doxysearch.cgi` for searching through the index.
The data flow is shown in the following diagram: The data flow is shown in the following diagram:
\dot
digraph Flow { \image html extsearch_flow.png "External Search Data Flow"
edge [fontname="helvetica",fontsize="10pt"]; \image latex extsearch_flow.eps "External Search Data Flow" height=10cm
node [shape=ellipse,fontname="helvetica",fontsize="10pt"];
doxygen;
doxyindexer;
doxysearch [label="doxysearch.cgi"];
browser [label="HTML page\nin browser"];
node [shape=note];
searchdata [label="searchdata.xml"];
searchindex [label="doxysearch.db"];
doxygen -> searchdata [label=" writes"];
searchdata -> doxyindexer [label=" reads"];
doxyindexer -> searchindex [label=" writes"];
searchindex -> doxysearch [label=" reads"];
doxysearch -> browser [label=" get results "];
browser -> doxysearch [label=" query "];
}
\enddot
- `doxygen` produces the raw search data - `doxygen` produces the raw search data
- `doxyindexer` indexes the data into a search database `doxysearch.db` - `doxyindexer` indexes the data into a search database `doxysearch.db`
...@@ -135,47 +120,49 @@ Now you should be enable to search for words and symbols from the HTML output. ...@@ -135,47 +120,49 @@ Now you should be enable to search for words and symbols from the HTML output.
\subsection extsearch_multi Multi project index \subsection extsearch_multi Multi project index
In case you have two doxygen projects A and B where B depends on A via a In case you have more than one doxygen project and these projects are related,
tag file, i.e. the configuration of project A says: it may be desirable to allow searching for words in all projects from within
the documentation of any of the projects.
GENERATE_TAGFILES = A.tag
and the configuration of project B has its dependency on A configured as
follows:
TAGFILES = ../project_A/A.tag=../../project_A/html
then it may be desirable to allow searching for words in both projects.
To make this possible all that is needed is to combine the search data To make this possible all that is needed is to combine the search data
for both projects into one index, i.e. run for all projects into a single index, e.g. for two projects A and B for which the
searchdata.xml is generated in directories project_A and project_B run:
doxyindexer project_A/searchdata.xml project_B/searchdata.xml doxyindexer project_A/searchdata.xml project_B/searchdata.xml
and then copy the resulting `doxysearch.db` to the directory where also and then copy the resulting `doxysearch.db` to the directory where also
`doxysearch.cgi` used by project B is located. `doxysearch.cgi` is located.
In case you also want to link to search results in project B The `searchdata.xml` file doesn't contain any absolute paths or links,
from the search page of project A (or in general so how can the search results from multiple projects be linked back to the right documentation set?
between two projects that are otherwise unrelated), This is where the `EXTERNAL_SEARCH_ID` and `EXTRA_SEARCH_MAPPINGS` options come into play.
you need to give some additional information in order for doxygen to make
the right links. This is what the To be able to identify the different projects, one needs to
\ref cfg_extra_search_mappings "EXTRA_SEARCH_MAPPINGS" option is for. set a unique ID using \ref cfg_external_search_id "EXTERNAL_SEARCH_ID"
for each project.
Each project needs to have a tag file defined, i.e. in the above example
involving project A and B, also project B should define a tag file: To link the search results to the right project, you need to define a
mapping per project using the \ref cfg_extra_search_mappings "EXTRA_SEARCH_MAPPINGS" tag.
GENERATE_TAGFILES = B.tag With this option to can define the mapping from IDs of other projects to the
(relative) location of documentation of those projects.
then project A can define the mapping as follows:
So for projects A and B the relevant part of the configuration file
EXTRA_SEARCH_MAPPINGS = B.tag=../../project_B/html could look as follows:
with this addition, projects A and B can share the same search database. project_A/Doxyfile
------------------
@note The mapping defined by `EXTRA_SEARCH_MAPPINGS` is treated as an EXTERNAL_SEARCH_ID = A
extension of the mappings already defined by `TAGFILES`. In case the same EXTRA_SEARCH_MAPPINGS = B=../../project_B/html
tag file is mentioned in both options, the one in `TAGFILES` is used.
for project A and for project B
project_B/Doxyfile
------------------
EXTERNAL_SEARCH_ID = B
EXTRA_SEARCH_MAPPINGS = A=../../project_A/html
with these settings, projects A and B can share the same search database,
and the search results will link to the right documentation set.
\section extsearch_update Updating the index \section extsearch_update Updating the index
......
digraph Flow {
edge [fontname="helvetica",fontsize="10pt"];
node [shape=ellipse,fontname="helvetica",fontsize="10pt"];
doxygen;
doxyindexer;
doxysearch [label="doxysearch.cgi"];
browser [label="HTML page\nin browser"];
node [shape=note];
searchdata [label="searchdata.xml"];
searchindex [label="doxysearch.db"];
doxygen -> searchdata [label=" writes"];
searchdata -> doxyindexer [label=" reads"];
doxyindexer -> searchindex [label=" writes"];
searchindex -> doxysearch [label=" reads"];
doxysearch -> browser [label=" get results "];
browser -> doxysearch [label=" query "];
}
This diff is collapsed.
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -14,7 +14,9 @@ ...@@ -14,7 +14,9 @@
* input used in their production; they are not affected by this license. * input used in their production; they are not affected by this license.
* *
*/ */
/*! \mainpage Doxygen Manual /*!
\mainpage
<!--Doxygen Manual-->
\if logo_on \if logo_on
<center> <center>
\htmlonly \htmlonly
...@@ -25,10 +27,12 @@ Version: $(VERSION) ...@@ -25,10 +27,12 @@ Version: $(VERSION)
\endif \endif
<h2>Introduction</h2> <h2>Introduction</h2>
Doxygen is a documentation system for C++, C, Java, Objective-C, Python, IDL Doxygen is the de facto standard tool for generating documentation from
(Corba and Microsoft flavors), Fortran, VHDL, PHP, C#, and to some extent D. annotated C++ sources, but it also supports other popular programming
languages such as C, Objective-C, C#, PHP, Java, Python, IDL
(Corba and Microsoft flavors), Fortran, VHDL, Tcl, and to some extent D.
It can help you in three ways: Doxygen can help you in three ways:
<ol> <ol>
<li> It can generate an on-line documentation browser (in HTML) and/or an <li> It can generate an on-line documentation browser (in HTML) and/or an
off-line reference manual (in \f$\mbox{\LaTeX}\f$) from a set off-line reference manual (in \f$\mbox{\LaTeX}\f$) from a set
...@@ -41,20 +45,19 @@ It can help you in three ways: ...@@ -41,20 +45,19 @@ It can help you in three ways:
<li> You can \ref extract_all "configure" doxygen to extract the code structure <li> You can \ref extract_all "configure" doxygen to extract the code structure
from undocumented source files. This is very useful to quickly from undocumented source files. This is very useful to quickly
find your way in large source distributions. find your way in large source distributions.
You can also visualize the relations between the various elements Doxygen can also visualize the relations between the various elements
by means of include dependency graphs, inheritance diagrams, by means of include dependency graphs, inheritance diagrams,
and collaboration diagrams, which are all generated automatically. and collaboration diagrams, which are all generated automatically.
<li> You can also use doxygen for creating normal documentation (as I did <li> You can also use doxygen for creating normal documentation (as I did
for this manual). for the doxygen user manual and web-site).
</ol> </ol>
Doxygen is developed under <a href="http://www.linux.org">Linux</a> Doxygen is developed under Mac OS X and Linux, but is set-up to be highly
and Mac OS X, but is set-up to be highly portable. As a result, it portable. As a result, it runs on most other Unix flavors as well.
runs on most other Unix flavors as well. Furthermore, executables for Furthermore, executables for Windows are available.
Windows are available.
\n This manual is divided into three parts, each of which is divided into several \n
sections. This manual is divided into three parts, each of which is divided into several sections.
The first part forms a user manual: The first part forms a user manual:
<ul> <ul>
...@@ -115,7 +118,7 @@ The third part provides information for developers: ...@@ -115,7 +118,7 @@ The third part provides information for developers:
\addindex license \addindex license
\addindex GPL \addindex GPL
Copyright &copy; 1997-2012 by Copyright &copy; 1997-2013 by
<a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>.<p> <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>.<p>
Permission to use, copy, modify, and distribute this software and its Permission to use, copy, modify, and distribute this software and its
...@@ -153,21 +156,6 @@ list of projects that use doxygen (see {\tt http://www.doxygen.org/projects.html ...@@ -153,21 +156,6 @@ list of projects that use doxygen (see {\tt http://www.doxygen.org/projects.html
If you know other projects, let <a href="mailto:dimitri@stack.nl?subject=New%20project%20using%20Doxygen">me</a> If you know other projects, let <a href="mailto:dimitri@stack.nl?subject=New%20project%20using%20Doxygen">me</a>
know and I'll add them. know and I'll add them.
<h2>Commercial Support</h2>
I'm currently investigating the possibilities of providing
commercial support for doxygen. The forms of support I'm thinking of
are:
<ul>
<li>implementing features,
<li>fixing bugs,
<li>providing priority help in answering questions.
</ul>
To get a better understanding of the feasibility,
please let <a href="mailto:dimitri@stack.nl?subject=Doxygen%20Commercial%20Support">me</a> know if you
have a need for this type (or another type)
of doxygen related commercial support.
<h2>Future work</h2> <h2>Future work</h2>
Although doxygen is successfully used by large number of companies and Although doxygen is successfully used by large number of companies and
open source projects already, there is always room for improvement. open source projects already, there is always room for improvement.
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
/****************************************************************************** /******************************************************************************
* Do not edit this file. It was generated by the translator.py script. * Do not edit this file. It was generated by the translator.py script.
* *
* Copyright (C) 1997-2011 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). configuration file (with default name and known as Doxyfile).
Currently (version 1.8.2), 39 languages Currently (version 1.8.3), 39 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Arabic, Armenian, Brazilian Portuguese, Catalan, Chinese, Afrikaans, Arabic, Armenian, Brazilian Portuguese, Catalan, Chinese,
Chinese Traditional, Croatian, Czech, Danish, Dutch, English, Chinese Traditional, Croatian, Czech, Danish, Dutch, English,
......
...@@ -5,7 +5,7 @@ change the language.doc, make the changes here and inside maintainers.txt. ...@@ -5,7 +5,7 @@ change the language.doc, make the changes here and inside maintainers.txt.
/****************************************************************************** /******************************************************************************
* %(editnote)s * %(editnote)s
* *
* Copyright (C) 1997-2011 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
(1.8.2) (1.8.3)
Doxygen supports the following 39 languages (sorted alphabetically): Doxygen supports the following 39 languages (sorted alphabetically):
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
*/ */
/*! \page trouble Troubleshooting /*! \page trouble Troubleshooting
<h2>Known problems:</h2> \section knowproblems Known Problems
<ul> <ul>
<li>If you have problems building doxygen from sources, please <li>If you have problems building doxygen from sources, please
read \ref unix_problems "this section" first. read \ref unix_problems "this section" first.
...@@ -76,15 +76,14 @@ ...@@ -76,15 +76,14 @@
</ul> </ul>
<h2>How to help</h2> \section howtohelp How to Help
The development of Doxygen highly depends on your input! The development of Doxygen highly depends on your input!
If you are trying Doxygen let me know what you think of it (do you If you are trying Doxygen let me know what you think of it (do you
miss certain features?). Even if you decide not to use it, please let me miss certain features?). Even if you decide not to use it, please let me
know why. know why.
\anchor bug_reports \section bug_reports How to report a bug
<h2>How to report a bug</h2>
Bugs are tracked in GNOME's <a href="http://bugzilla.gnome.org">bugzilla</a> database. Bugs are tracked in GNOME's <a href="http://bugzilla.gnome.org">bugzilla</a> database.
Before submitting a Before submitting a
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -46,6 +46,10 @@ ...@@ -46,6 +46,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#if !defined(_OS_WIN32_)
#include <stdint.h>
#endif
#if defined(_OS_SUN_) && defined(_CC_GNU_) #if defined(_OS_SUN_) && defined(_CC_GNU_)
#include <strings.h> #include <strings.h>
#endif #endif
...@@ -98,25 +102,26 @@ Q_EXPORT inline char *cstrcpy( char *dst, const char *src ) ...@@ -98,25 +102,26 @@ Q_EXPORT inline char *cstrcpy( char *dst, const char *src )
Q_EXPORT inline char *qstrcpy( char *dst, const char *src ) Q_EXPORT inline char *qstrcpy( char *dst, const char *src )
{ return src ? strcpy(dst, src) : 0; } { return src ? strcpy(dst, src) : 0; }
Q_EXPORT char *qstrncpy( char *dst, const char *src, uint len ); Q_EXPORT char * qstrncpy(char *src,const char *dst, uint len);
Q_EXPORT inline int cstrcmp( const char *str1, const char *str2 ) Q_EXPORT inline int cstrcmp( const char *str1, const char *str2 )
{ return strcmp(str1,str2); } { return strcmp(str1,str2); }
Q_EXPORT inline int qstrcmp( const char *str1, const char *str2 ) Q_EXPORT inline int qstrcmp( const char *str1, const char *str2 )
{ return (str1 && str2) ? strcmp(str1,str2) : (int)((long)str2 - (long)str1); } { return (str1 && str2) ? strcmp(str1,str2) : (int)((intptr_t)str2 - (intptr_t)str1); }
Q_EXPORT inline int cstrncmp( const char *str1, const char *str2, uint len ) Q_EXPORT inline int cstrncmp( const char *str1, const char *str2, uint len )
{ return strncmp(str1,str2,len); } { return strncmp(str1,str2,len); }
Q_EXPORT inline int qstrncmp( const char *str1, const char *str2, uint len ) Q_EXPORT inline int qstrncmp( const char *str1, const char *str2, uint len )
{ return (str1 && str2) ? strncmp(str1,str2,len) : { return (str1 && str2) ? strncmp(str1,str2,len) :
(int)((long)str2 - (long)str1); } (int)((intptr_t)str2 - (intptr_t)str1); }
Q_EXPORT int qstricmp( const char *, const char * ); Q_EXPORT int qstricmp( const char *str1, const char *str2 );
Q_EXPORT int qstrnicmp( const char *, const char *, uint len ); Q_EXPORT int qstrnicmp( const char *str1, const char *str2, uint len );
#if 0
// ### TODO for 3.0: these and the cstr* functions should be used if // ### TODO for 3.0: these and the cstr* functions should be used if
// !defined(QT_CLEAN_NAMESPACE) // !defined(QT_CLEAN_NAMESPACE)
// We want to keep source compatibility for 2.x // We want to keep source compatibility for 2.x
...@@ -142,6 +147,7 @@ Q_EXPORT int qstrnicmp( const char *, const char *, uint len ); ...@@ -142,6 +147,7 @@ Q_EXPORT int qstrnicmp( const char *, const char *, uint len );
#undef strnicmp #undef strnicmp
#define strnicmp qstrnicmp #define strnicmp qstrnicmp
#endif
#endif #endif
// qChecksum: Internet checksum // qChecksum: Internet checksum
...@@ -274,24 +280,28 @@ inline void QCString::duplicate( const QCString &s ) ...@@ -274,24 +280,28 @@ inline void QCString::duplicate( const QCString &s )
{ {
if (!s.isEmpty()) if (!s.isEmpty())
{ {
uint l = strlen(s.data()); uint l = (uint)strlen(s.data());
m_data = (char *)malloc(l+1); m_data = (char *)malloc(l+1);
if (m_data) memcpy(m_data,s.data(),l+1); if (m_data) memcpy(m_data,s.data(),l+1);
} }
else else
{
m_data=0; m_data=0;
}
} }
inline void QCString::duplicate( const char *str) inline void QCString::duplicate( const char *str)
{ {
if (str && str[0]!='\0') if (str && str[0]!='\0')
{ {
uint l = strlen(str); uint l = (uint)strlen(str);
m_data = (char *)malloc(l+1); m_data = (char *)malloc(l+1);
if (m_data) memcpy(m_data,str,l+1); if (m_data) memcpy(m_data,str,l+1);
} }
else else
{
m_data=0; m_data=0;
}
} }
inline QCString &QCString::duplicate( const char *str, int) inline QCString &QCString::duplicate( const char *str, int)
......
...@@ -82,12 +82,14 @@ QString QDir::canonicalPath() const ...@@ -82,12 +82,14 @@ QString QDir::canonicalPath() const
char cur[PATH_MAX]; char cur[PATH_MAX];
char tmp[PATH_MAX]; char tmp[PATH_MAX];
(void)GETCWD( cur, PATH_MAX ); if (GETCWD( cur, PATH_MAX )) {
if ( CHDIR(QFile::encodeName(dPath)) >= 0 ) { if ( CHDIR(QFile::encodeName(dPath)) >= 0 ) {
(void)GETCWD( tmp, PATH_MAX ); if (GETCWD( tmp, PATH_MAX )) {
r = QFile::decodeName(tmp); r = QFile::decodeName(tmp);
}
(void)CHDIR( cur );
}
} }
(void)CHDIR( cur );
slashify( r ); slashify( r );
return r; return r;
......
...@@ -190,10 +190,17 @@ ...@@ -190,10 +190,17 @@
#else // all other systems #else // all other systems
#ifdef __MINGW32__
# define STATBUF struct _stat
# define STATBUF4TSTAT struct _stat
# define STAT _stat
# define FSTAT _fstat
#else
# define STATBUF struct stat # define STATBUF struct stat
# define STATBUF4TSTAT struct stat # define STATBUF4TSTAT struct stat
# define STAT ::stat # define STAT ::stat
# define FSTAT ::fstat # define FSTAT ::fstat
#endif
# define STAT_REG S_IFREG # define STAT_REG S_IFREG
# define STAT_DIR S_IFDIR # define STAT_DIR S_IFDIR
# define STAT_MASK S_IFMT # define STAT_MASK S_IFMT
......
...@@ -635,7 +635,7 @@ extern "C" { ...@@ -635,7 +635,7 @@ extern "C" {
static int cmp_arr( const void *n1, const void *n2 ) static int cmp_arr( const void *n1, const void *n2 )
{ {
return ( n1 && n2 ) ? memcmp( n1, n2, cmp_item_size ) return ( n1 && n2 ) ? memcmp( n1, n2, cmp_item_size )
: (int)((long)n1 - (long)n2); : (int)((intptr_t)n1 - (intptr_t)n2);
// Qt 3.0: Add a virtual compareItems() method and call that instead // Qt 3.0: Add a virtual compareItems() method and call that instead
} }
......
...@@ -216,7 +216,7 @@ public: ...@@ -216,7 +216,7 @@ public:
bool remove_ascii( QCacheItem *item ) bool remove_ascii( QCacheItem *item )
{ return QGDict::remove_ascii((const char *)item->key,item); } { return QGDict::remove_ascii((const char *)item->key,item); }
bool remove_int( QCacheItem *item ) bool remove_int( QCacheItem *item )
{ return QGDict::remove_int((long)item->key,item);} { return QGDict::remove_int((intptr_t)item->key,item);}
void statistics() { QGDict::statistics(); } void statistics() { QGDict::statistics(); }
}; };
...@@ -406,7 +406,7 @@ bool QGCache::insert_other( const char *key, QCollection::Item data, ...@@ -406,7 +406,7 @@ bool QGCache::insert_other( const char *key, QCollection::Item data,
if ( keytype == AsciiKey ) if ( keytype == AsciiKey )
dict->insert_ascii( key, ci ); dict->insert_ascii( key, ci );
else else
dict->insert_int( (long)key, ci ); dict->insert_int( (intptr_t)key, ci );
tCost += cost; tCost += cost;
return TRUE; return TRUE;
} }
...@@ -469,7 +469,7 @@ QCollection::Item QGCache::take_other( const char *key ) ...@@ -469,7 +469,7 @@ QCollection::Item QGCache::take_other( const char *key )
if ( keytype == AsciiKey ) if ( keytype == AsciiKey )
ci = dict->take_ascii( key ); ci = dict->take_ascii( key );
else else
ci = dict->take_int( (long)key ); ci = dict->take_int( (intptr_t)key );
Item d; Item d;
if ( ci ) { if ( ci ) {
d = ci->data; d = ci->data;
...@@ -549,7 +549,7 @@ QCollection::Item QGCache::find_string( const QString &key, bool ref ) const ...@@ -549,7 +549,7 @@ QCollection::Item QGCache::find_string( const QString &key, bool ref ) const
QCollection::Item QGCache::find_other( const char *key, bool ref ) const QCollection::Item QGCache::find_other( const char *key, bool ref ) const
{ {
QCacheItem *ci = keytype == AsciiKey ? dict->find_ascii(key) QCacheItem *ci = keytype == AsciiKey ? dict->find_ascii(key)
: dict->find_int((long)key); : dict->find_int((intptr_t)key);
#if defined(DEBUG) #if defined(DEBUG)
lruList->finds++; lruList->finds++;
#endif #endif
...@@ -816,10 +816,10 @@ const char *QGCacheIterator::getKeyAscii() const ...@@ -816,10 +816,10 @@ const char *QGCacheIterator::getKeyAscii() const
Returns the key of the current item, as a long. Returns the key of the current item, as a long.
*/ */
long QGCacheIterator::getKeyInt() const intptr_t QGCacheIterator::getKeyInt() const
{ {
QCacheItem *item = it->current(); QCacheItem *item = it->current();
return item ? (long)item->key : 0; return item ? (intptr_t)item->key : 0;
} }
/*! /*!
......
...@@ -114,7 +114,7 @@ protected: ...@@ -114,7 +114,7 @@ protected:
QCollection::Item get() const; QCollection::Item get() const;
QString getKeyString() const; QString getKeyString() const;
const char *getKeyAscii() const; const char *getKeyAscii() const;
long getKeyInt() const; intptr_t getKeyInt() const;
QCollection::Item operator()(); QCollection::Item operator()();
QCollection::Item operator++(); QCollection::Item operator++();
......
...@@ -466,7 +466,7 @@ QCollection::Item QGDict::look_int( long key, QCollection::Item d, int op ) ...@@ -466,7 +466,7 @@ QCollection::Item QGDict::look_int( long key, QCollection::Item d, int op )
QCollection::Item QGDict::look_ptr( void *key, QCollection::Item d, int op ) QCollection::Item QGDict::look_ptr( void *key, QCollection::Item d, int op )
{ {
QPtrBucket *n; QPtrBucket *n;
int index = (int)((ulong)key % vlen); // simple hash int index = (int)((uintptr_t)key % vlen); // simple hash
if ( op == op_find ) { // find if ( op == op_find ) { // find
for ( n=(QPtrBucket*)vec[index]; n; for ( n=(QPtrBucket*)vec[index]; n;
n=(QPtrBucket*)n->getNext() ) { n=(QPtrBucket*)n->getNext() ) {
...@@ -681,7 +681,7 @@ QPtrBucket *QGDict::unlink_ptr( void *key, QCollection::Item d ) ...@@ -681,7 +681,7 @@ QPtrBucket *QGDict::unlink_ptr( void *key, QCollection::Item d )
return 0; return 0;
QPtrBucket *n; QPtrBucket *n;
QPtrBucket *prev = 0; QPtrBucket *prev = 0;
int index = (int)((ulong)key % vlen); int index = (int)((uintptr_t)key % vlen);
for ( n=(QPtrBucket *)vec[index]; n; n=(QPtrBucket *)n->getNext() ) { for ( n=(QPtrBucket *)vec[index]; n; n=(QPtrBucket *)n->getNext() ) {
bool found = (n->getKey() == key); bool found = (n->getKey() == key);
if ( found && d ) if ( found && d )
...@@ -1012,7 +1012,7 @@ QDataStream &QGDict::read( QDataStream &s ) ...@@ -1012,7 +1012,7 @@ QDataStream &QGDict::read( QDataStream &s )
// but hey, serializing pointers? can it be done // but hey, serializing pointers? can it be done
// at all, ever? // at all, ever?
if ( k ) if ( k )
look_ptr( (void *)k, d, op_insert ); look_ptr( (void *)(uintptr_t)k, d, op_insert );
} }
break; break;
} }
......
...@@ -83,11 +83,11 @@ private: ...@@ -83,11 +83,11 @@ private:
class QIntBucket : public QBaseBucket class QIntBucket : public QBaseBucket
{ {
public: public:
QIntBucket( long k, QCollection::Item d, QBaseBucket *n ) QIntBucket( intptr_t k, QCollection::Item d, QBaseBucket *n )
: QBaseBucket(d,n), key(k) {} : QBaseBucket(d,n), key(k) {}
long getKey() const { return key; } intptr_t getKey() const { return key; }
private: private:
long key; intptr_t key;
}; };
class QPtrBucket : public QBaseBucket class QPtrBucket : public QBaseBucket
...@@ -178,7 +178,7 @@ public: ...@@ -178,7 +178,7 @@ public:
QCollection::Item get() const; QCollection::Item get() const;
QString getKeyString() const; QString getKeyString() const;
const char *getKeyAscii() const; const char *getKeyAscii() const;
long getKeyInt() const; intptr_t getKeyInt() const;
void *getKeyPtr() const; void *getKeyPtr() const;
QCollection::Item operator()(); QCollection::Item operator()();
...@@ -208,7 +208,7 @@ inline const char *QGDictIterator::getKeyAscii() const ...@@ -208,7 +208,7 @@ inline const char *QGDictIterator::getKeyAscii() const
return curNode ? ((QAsciiBucket*)curNode)->getKey() : 0; return curNode ? ((QAsciiBucket*)curNode)->getKey() : 0;
} }
inline long QGDictIterator::getKeyInt() const inline intptr_t QGDictIterator::getKeyInt() const
{ {
return curNode ? ((QIntBucket*)curNode)->getKey() : 0; return curNode ? ((QIntBucket*)curNode)->getKey() : 0;
} }
......
...@@ -593,7 +593,7 @@ int QIODevice::readLine( char *data, uint maxlen ) ...@@ -593,7 +593,7 @@ int QIODevice::readLine( char *data, uint maxlen )
break; break;
} }
*p++ = '\0'; *p++ = '\0';
return (int)((long)p - (long)data); return (int)((intptr_t)p - (intptr_t)data);
} }
......
...@@ -1894,7 +1894,7 @@ QTextStream &QTextStream::operator<<( void *ptr ) ...@@ -1894,7 +1894,7 @@ QTextStream &QTextStream::operator<<( void *ptr )
setf( hex, basefield ); setf( hex, basefield );
setf( showbase ); setf( showbase );
unsetf( uppercase ); unsetf( uppercase );
output_int( I_LONG | I_UNSIGNED, (ulong)ptr, FALSE ); output_int( I_LONG | I_UNSIGNED, (uintptr_t)ptr, FALSE );
flags( f ); flags( f );
return *this; return *this;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# #
# #
# #
# Copyright (C) 1997-2012 by Dimitri van Heesch. # Copyright (C) 1997-2013 by Dimitri van Heesch.
# #
# Permission to use, copy, modify, and distribute this software and its # Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby # documentation under the terms of the GNU General Public License is hereby
......
/****************************************************************************** /******************************************************************************
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -2206,7 +2206,7 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -2206,7 +2206,7 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.parseText(" "+theTranslator->trEnumValue()); ol.parseText(" "+theTranslator->trEnumValue());
else if (md->isTypedef()) else if (md->isTypedef())
ol.docify(" typedef"); ol.docify(" typedef");
else if (md->isFriend() && !strcmp(md->typeString(),"friend class")) else if (md->isFriend() && !qstrcmp(md->typeString(),"friend class"))
ol.docify(" class"); ol.docify(" class");
//ol.writeString("\n"); //ol.writeString("\n");
} }
...@@ -2574,8 +2574,7 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level) ...@@ -2574,8 +2574,7 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level)
//printf("isBaseClass(cd=%s) looking for %s\n",name().data(),bcd->name().data()); //printf("isBaseClass(cd=%s) looking for %s\n",name().data(),bcd->name().data());
if (level>256) if (level>256)
{ {
err("Possible recursive class relation while inside %s and looking for %s\n",qPrint(name()),qPrint(bcd->name())); err("Possible recursive class relation while inside %s and looking for base class %s\n",qPrint(name()),qPrint(bcd->name()));
abort();
return FALSE; return FALSE;
} }
if (baseClasses()) if (baseClasses())
...@@ -2597,6 +2596,31 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level) ...@@ -2597,6 +2596,31 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level)
return found; return found;
} }
//----------------------------------------------------------------------
bool ClassDef::isSubClass(ClassDef *cd,int level)
{
bool found=FALSE;
if (level>256)
{
err("Possible recursive class relation while inside %s and looking for derived class %s\n",qPrint(name()),qPrint(cd->name()));
return FALSE;
}
if (subClasses())
{
BaseClassListIterator bcli(*subClasses());
for ( ; bcli.current() && !found ; ++bcli)
{
ClassDef *ccd=bcli.current()->classDef;
if (ccd==cd)
found=TRUE;
else
found=ccd->isSubClass(cd,level+1);
}
}
return found;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
static bool isStandardFunc(MemberDef *md) static bool isStandardFunc(MemberDef *md)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -185,6 +185,11 @@ class ClassDef : public Definition ...@@ -185,6 +185,11 @@ class ClassDef : public Definition
*/ */
bool isBaseClass(ClassDef *bcd,bool followInstances,int level=0); bool isBaseClass(ClassDef *bcd,bool followInstances,int level=0);
/** Returns TRUE iff \a bcd is a direct or indirect sub class of this
* class.
*/
bool isSubClass(ClassDef *bcd,int level=0);
/** returns TRUE iff \a md is a member of this class or of the /** returns TRUE iff \a md is a member of this class or of the
* the public/protected members of a base class * the public/protected members of a base class
*/ */
...@@ -501,7 +506,7 @@ class BaseClassList : public QList<BaseClassDef> ...@@ -501,7 +506,7 @@ class BaseClassList : public QList<BaseClassDef>
if (c1==0 || c2==0) if (c1==0 || c2==0)
return FALSE; return FALSE;
else else
return stricmp(c1->name(),c2->name()); return qstricmp(c1->name(),c2->name());
} }
}; };
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -41,12 +41,12 @@ static int compItems(void *item1,void *item2) ...@@ -41,12 +41,12 @@ static int compItems(void *item1,void *item2)
//printf("compItems: %d %s<->%s\n",b,c1->name().data(),c2->name().data()); //printf("compItems: %d %s<->%s\n",b,c1->name().data(),c2->name().data());
if (b) if (b)
{ {
return stricmp(c1->name(), return qstricmp(c1->name(),
c2->name()); c2->name());
} }
else else
{ {
return stricmp(c1->className(), return qstricmp(c1->className(),
c2->className()); c2->className());
} }
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -2414,14 +2414,14 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" ...@@ -2414,14 +2414,14 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
codifyLines(yytext); codifyLines(yytext);
endFontClass(); endFontClass();
g_name.resize(0);g_type.resize(0); g_name.resize(0);g_type.resize(0);
g_inForEachExpression = (strcmp(yytext,"for each")==0 || strcmp(yytext, "foreach")==0); g_inForEachExpression = (qstrcmp(yytext,"for each")==0 || qstrcmp(yytext, "foreach")==0);
BEGIN(FuncCall); BEGIN(FuncCall);
} }
<Body>{FLOWKW}/([^a-z_A-Z0-9]) { <Body>{FLOWKW}/([^a-z_A-Z0-9]) {
startFontClass("keywordflow"); startFontClass("keywordflow");
codifyLines(yytext); codifyLines(yytext);
endFontClass(); endFontClass();
if (g_inFunctionTryBlock && (strcmp(yytext,"catch")==0 || strcmp(yytext,"finally")==0)) if (g_inFunctionTryBlock && (qstrcmp(yytext,"catch")==0 || qstrcmp(yytext,"finally")==0))
{ {
g_inFunctionTryBlock=FALSE; g_inFunctionTryBlock=FALSE;
} }
...@@ -2773,7 +2773,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" ...@@ -2773,7 +2773,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
} }
/* /*
<ObjCMemberCall>{ID} { <ObjCMemberCall>{ID} {
if (strcmp(yytext,"self")==0 || strcmp(yytext,"super")==0) if (qstrcmp(yytext,"self")==0 || qstrcmp(yytext,"super")==0)
{ {
// TODO: get proper base class for "super" // TODO: get proper base class for "super"
g_theCallContext.setClass(getClass(g_curClassName)); g_theCallContext.setClass(getClass(g_curClassName));
...@@ -2944,10 +2944,10 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" ...@@ -2944,10 +2944,10 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
} }
} }
<MemberCall2,FuncCall>{OPERATOR} { // operator <MemberCall2,FuncCall>{OPERATOR} { // operator
if (strcmp(yytext,"*") && if (qstrcmp(yytext,"*") &&
strcmp(yytext,"&") && qstrcmp(yytext,"&") &&
strcmp(yytext,"^") && qstrcmp(yytext,"^") &&
strcmp(yytext,"%")) // typically a pointer or reference qstrcmp(yytext,"%")) // typically a pointer or reference
{ {
// not a * or &, or C++/CLI's ^ or % // not a * or &, or C++/CLI's ^ or %
g_parmType.resize(0);g_parmName.resize(0); g_parmType.resize(0);g_parmName.resize(0);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -88,6 +88,7 @@ static bool g_pythonDocString; ...@@ -88,6 +88,7 @@ static bool g_pythonDocString;
static GuardType guardType; // kind of guard for conditional section static GuardType guardType; // kind of guard for conditional section
static SrcLangExt g_lang; static SrcLangExt g_lang;
static bool isFixedForm; // For Fortran
static void replaceCommentMarker(const char *s,int len) static void replaceCommentMarker(const char *s,int len)
{ {
...@@ -270,8 +271,8 @@ void replaceComment(int offset); ...@@ -270,8 +271,8 @@ void replaceComment(int offset);
BEGIN(CComment); BEGIN(CComment);
} }
} }
<Scan>"!>"|"!<"|"!!" { <Scan>![><!]/.*\n {
if (g_lang!=SrcLangExt_Fortran) if (g_lang!=SrcLangExt_Fortran)
{ {
REJECT; REJECT;
} }
...@@ -280,6 +281,52 @@ void replaceComment(int offset); ...@@ -280,6 +281,52 @@ void replaceComment(int offset);
copyToOutput(yytext,(int)yyleng); copyToOutput(yytext,(int)yyleng);
BEGIN(CComment); BEGIN(CComment);
} }
}
<Scan>[Cc\*][><!]/.*\n {
if (g_lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
/* check for fixed format; we might have some conditional as part of multilene if like C<5 .and. & */
if (isFixedForm && (g_col == 0))
{
copyToOutput(yytext,(int)yyleng);
BEGIN(CComment);
}
else
{
REJECT;
}
}
}
<Scan>!.*\n {
if (g_lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
copyToOutput(yytext,(int)yyleng);
}
}
<Scan>[Cc\*].*\n {
if (g_lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
if (g_col == 0)
{
copyToOutput(yytext,(int)yyleng);
}
else
{
REJECT;
}
}
} }
<Scan>"\"" { /* start of a string */ <Scan>"\"" { /* start of a string */
copyToOutput(yytext,(int)yyleng); copyToOutput(yytext,(int)yyleng);
...@@ -294,7 +341,7 @@ void replaceComment(int offset); ...@@ -294,7 +341,7 @@ void replaceComment(int offset);
<Scan>\n { /* new line */ <Scan>\n { /* new line */
copyToOutput(yytext,(int)yyleng); copyToOutput(yytext,(int)yyleng);
} }
<Scan>("//!"|"///")/.*\n[ \t]*"//"[\/!][^\/] { /* start C++ style special comment block */ <Scan>("//!"|"///"[/]*)/.*\n[ \t]*"//"[\/!][^\/] { /* start C++ style special comment block */
if (g_mlBrief) if (g_mlBrief)
{ {
REJECT; // bail out if we do not need to convert REJECT; // bail out if we do not need to convert
...@@ -357,7 +404,7 @@ void replaceComment(int offset); ...@@ -357,7 +404,7 @@ void replaceComment(int offset);
BEGIN(CComment); BEGIN(CComment);
} }
} }
<Scan>"!>"|"!<"|"!!" { <Scan>![><!] {
if (g_lang!=SrcLangExt_Fortran) if (g_lang!=SrcLangExt_Fortran)
{ {
REJECT; REJECT;
...@@ -402,7 +449,7 @@ void replaceComment(int offset); ...@@ -402,7 +449,7 @@ void replaceComment(int offset);
g_lastCommentContext = YY_START; g_lastCommentContext = YY_START;
BEGIN(Verbatim); BEGIN(Verbatim);
} }
<Scan>. { /* any other character */ <Scan>. { /* any ather character */
copyToOutput(yytext,(int)yyleng); copyToOutput(yytext,(int)yyleng);
} }
<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */ <Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */
...@@ -549,6 +596,11 @@ void replaceComment(int offset); ...@@ -549,6 +596,11 @@ void replaceComment(int offset);
} }
<CComment>\n { /* new line in comment */ <CComment>\n { /* new line in comment */
copyToOutput(yytext,(int)yyleng); copyToOutput(yytext,(int)yyleng);
/* in case of Fortran always end of comment */
if (g_lang==SrcLangExt_Fortran)
{
BEGIN(Scan);
}
} }
<CComment>"*"+"/" { /* end of C comment */ <CComment>"*"+"/" { /* end of C comment */
if (g_lang==SrcLangExt_Python) if (g_lang==SrcLangExt_Python)
...@@ -583,17 +635,6 @@ void replaceComment(int offset); ...@@ -583,17 +635,6 @@ void replaceComment(int offset);
BEGIN(Scan); BEGIN(Scan);
} }
} }
<CComment>"\n"/[ \t]*[^!] { /* end of Fortran comment */
if (g_lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
copyToOutput(yytext,(int)yyleng);
BEGIN(Scan);
}
}
/* removed for bug 674842 (bug was introduced in rev 768) /* removed for bug 674842 (bug was introduced in rev 768)
<CComment>"'" { <CComment>"'" {
g_charContext = YY_START; g_charContext = YY_START;
...@@ -839,6 +880,45 @@ void replaceComment(int offset) ...@@ -839,6 +880,45 @@ void replaceComment(int offset)
} }
} }
// simplified way to know if this is fixed form
// duplicate in fortrancode.l
static bool recognizeFixedForm(const char* contents)
{
int column=0;
bool skipLine=FALSE;
for(int i=0;;i++) {
column++;
switch(contents[i]) {
case '\n':
column=0;
skipLine=FALSE;
break;
case ' ':
break;
case '\000':
return FALSE;
case 'C':
case 'c':
case '*':
if(column==1) return TRUE;
if(skipLine) break;
return FALSE;
case '!':
if(column>1 && column<7) return FALSE;
skipLine=TRUE;
break;
default:
if(skipLine) break;
if(column==7) return TRUE;
return FALSE;
}
}
return FALSE;
}
/*! This function does three things: /*! This function does three things:
* -# It converts multi-line C++ style comment blocks (that are aligned) * -# It converts multi-line C++ style comment blocks (that are aligned)
* to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO). * to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO).
...@@ -860,6 +940,13 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName) ...@@ -860,6 +940,13 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
g_lineNr = 1; g_lineNr = 1;
g_condStack.clear(); g_condStack.clear();
g_condStack.setAutoDelete(TRUE); g_condStack.setAutoDelete(TRUE);
isFixedForm = FALSE;
if (g_lang==SrcLangExt_Fortran)
{
isFixedForm = recognizeFixedForm(inBuf->data());
}
if (g_lang==SrcLangExt_Markdown) if (g_lang==SrcLangExt_Markdown)
{ {
BEGIN(CComment); BEGIN(CComment);
......
/****************************************************************************** /******************************************************************************
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
/***************************************************************************** /*****************************************************************************
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -526,7 +526,7 @@ static void addXRefItem(const char *listName,const char *itemTitle, ...@@ -526,7 +526,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,
QListIterator<ListItemInfo> slii(*docEntry->sli); QListIterator<ListItemInfo> slii(*docEntry->sli);
for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii)
{ {
if (strcmp(lii->type,listName)==0) if (qstrcmp(lii->type,listName)==0)
{ {
//printf("found %s lii->type=%s\n",listName,lii->type); //printf("found %s lii->type=%s\n",listName,lii->type);
break; break;
...@@ -1074,7 +1074,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" ...@@ -1074,7 +1074,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>{B}*{CMD}"~"[a-z_A-Z]* { // language switch command <Comment>{B}*{CMD}"~"[a-z_A-Z]* { // language switch command
QCString langId = QString(yytext).stripWhiteSpace().data()+2; QCString langId = QString(yytext).stripWhiteSpace().data()+2;
if (!langId.isEmpty() && if (!langId.isEmpty() &&
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0) qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
{ // enable language specific section { // enable language specific section
BEGIN(SkipLang); BEGIN(SkipLang);
} }
...@@ -1160,6 +1160,9 @@ RCSTAG "$"{ID}":"[^\n$]+"$" ...@@ -1160,6 +1160,9 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>"--" { // ndash <Comment>"--" { // ndash
addOutput(insidePre || Doxygen::markdownSupport ? yytext : "&ndash;"); addOutput(insidePre || Doxygen::markdownSupport ? yytext : "&ndash;");
} }
<Comment>"-#"{B}+ { // numbered item
addOutput(yytext);
}
<Comment>("."+)[a-z_A-Z0-9\)] { // . at start or in the middle of a word, or ellipsis <Comment>("."+)[a-z_A-Z0-9\)] { // . at start or in the middle of a word, or ellipsis
addOutput(yytext); addOutput(yytext);
} }
...@@ -2057,7 +2060,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" ...@@ -2057,7 +2060,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<SkipLang>[\\@]"~"[a-zA-Z]* { /* language switch */ <SkipLang>[\\@]"~"[a-zA-Z]* { /* language switch */
QCString langId = &yytext[2]; QCString langId = &yytext[2];
if (langId.isEmpty() || if (langId.isEmpty() ||
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0) qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
{ // enable language specific section { // enable language specific section
BEGIN(Comment); BEGIN(Comment);
} }
...@@ -2408,6 +2411,11 @@ static bool handleSubpage(const QCString &s) ...@@ -2408,6 +2411,11 @@ static bool handleSubpage(const QCString &s)
warn(yyFileName,yyLineNr, warn(yyFileName,yyLineNr,
"warning: found \\subpage command in a comment block that is not marked as a page!"); "warning: found \\subpage command in a comment block that is not marked as a page!");
} }
if (g_spaceBeforeCmd)
{
addOutput(' ');
g_spaceBeforeCmd=FALSE;
}
addOutput("@"+s+" "); addOutput("@"+s+" ");
BEGIN(SubpageLabel); BEGIN(SubpageLabel);
return FALSE; return FALSE;
...@@ -2849,7 +2857,7 @@ static int findExistingGroup(int &groupId,const MemberGroupInfo *info) ...@@ -2849,7 +2857,7 @@ static int findExistingGroup(int &groupId,const MemberGroupInfo *info)
{ {
if (g_compoundName==mi->compoundName && // same file or scope if (g_compoundName==mi->compoundName && // same file or scope
!mi->header.isEmpty() && // not a nameless group !mi->header.isEmpty() && // not a nameless group
stricmp(mi->header,info->header)==0 // same header name qstricmp(mi->header,info->header)==0 // same header name
) )
{ {
//printf("Found it!\n"); //printf("Found it!\n");
......
/** /**
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#define CONDPARSER_H #define CONDPARSER_H
/** /**
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
/****************************************************************************** /******************************************************************************
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -1176,14 +1176,19 @@ When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ...@@ -1176,14 +1176,19 @@ When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
search data is written to a file for indexing by an external tool. With the search data is written to a file for indexing by an external tool. With the
SEARCHDATA_FILE tag the name of this file can be specified. SEARCHDATA_FILE tag the name of this file can be specified.
' defval='searchdata.xml' depends='SEARCHENGINE'/> ' defval='searchdata.xml' depends='SEARCHENGINE'/>
<option type='string' id='EXTERNAL_SEARCH_ID' docs='
When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
projects and redirect the results back to the right project.
' defval='' dependes='SEARCHENGINE'/>
<option type='list' id='EXTRA_SEARCH_MAPPINGS' docs=' <option type='list' id='EXTRA_SEARCH_MAPPINGS' docs='
The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through other The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
doxygen projects that are not otherwise connected via tags files, but are projects other than the one defined by this configuration file, but that are
all added to the same search index. Each project needs to have a tag file set all added to the same external search index. Each project needs to have a
via GENERATE_TAGFILE. The search mapping then maps the name of the tag file unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
to a relative location where the documentation can be found, similar to the of to a relative location where the documentation can be found.
TAGFILES option but without actually processing the tag file. The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
The format is: EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
' defval='0' depends='SEARCHENGINE'/> ' defval='0' depends='SEARCHENGINE'/>
</group> </group>
<group name='LaTeX' docs='configuration options related to the LaTeX output'> <group name='LaTeX' docs='configuration options related to the LaTeX output'>
......
# python script to generate configoptions.cpp from config.xml # python script to generate configoptions.cpp from config.xml
# #
# Copyright (C) 1997-2012 by Dimitri van Heesch. # Copyright (C) 1997-2013 by Dimitri van Heesch.
# #
# Permission to use, copy, modify, and distribute this software and its # Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby # documentation under the terms of the GNU General Public License is hereby
......
...@@ -1723,16 +1723,22 @@ void addConfigOptions(Config *cfg) ...@@ -1723,16 +1723,22 @@ void addConfigOptions(Config *cfg)
cs->setWidgetType(ConfigString::File); cs->setWidgetType(ConfigString::File);
cs->addDependency("SEARCHENGINE"); cs->addDependency("SEARCHENGINE");
//---- //----
cs = cfg->addString(
"EXTERNAL_SEARCH_ID",
"When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the\n"
"EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n"
"useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n"
"projects and redirect the results back to the right project."
);
//----
cl = cfg->addList( cl = cfg->addList(
"EXTRA_SEARCH_MAPPINGS", "EXTRA_SEARCH_MAPPINGS",
"The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through other\n" "The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n"
"doxygen projects that are not otherwise connected via tags files, but are\n" "projects other than the one defined by this configuration file, but that are\n"
"all added to the same search index. Each project needs to have a tag file set\n" "all added to the same external search index. Each project needs to have a\n"
"via GENERATE_TAGFILE. The search mapping then maps the name of the tag file\n" "unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id\n"
"to a relative location where the documentation can be found,\n" "of to a relative location where the documentation can be found.\n"
"similar to the\n" "The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ..."
"TAGFILES option but without actually processing the tag file.\n"
"The format is: EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ..."
); );
cl->addDependency("SEARCHENGINE"); cl->addDependency("SEARCHENGINE");
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2012 by Dimitri van Heesch. * Copyright (C) 1997-2013 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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