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
(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.
......@@ -26,4 +26,4 @@ forum.
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
* 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
* 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
* 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
# documentation under the terms of the GNU General Public License is hereby
......
......@@ -2,7 +2,7 @@
*
* $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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -191,7 +191,7 @@ void MainWindow::about()
t << QString::fromAscii("<qt><center>A tool to configure and run doxygen version ")+
QString::fromAscii(versionString)+
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>");
QMessageBox::about(this,tr("Doxygen GUI"),msg);
}
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -17,7 +17,7 @@
doxygen_version_major=1
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.
doxygen_version_mmn=NO
......@@ -640,9 +640,9 @@ EOF
if test $f_wizard = YES; then
EXTRADEPS=doxywizard
fi
if test $f_search = YES; then
EXTRADEPS="$EXTRADEPS doxysearch"
fi
# if test $f_search = YES; then
# EXTRADEPS="$EXTRADEPS doxysearch"
# fi
echo "all: src/version.cpp $EXTRADEPS" >> $DST
echo " \$(MAKE) -C qtools" >> $DST
echo " \$(MAKE) -C libmd5" >> $DST
......
......@@ -12,7 +12,7 @@
# Documents produced by Doxygen are derivative works derived from the
# input used in their production; they are not affected by this license.
PROJECT_NAME =
PROJECT_NAME = "Doxygen"
OUTPUT_DIRECTORY = ..
HTML_HEADER =
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
# 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
# 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
# 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
# documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* 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
* 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.
\refitem cfg_extension_mapping EXTENSION_MAPPING
\refitem cfg_external_groups EXTERNAL_GROUPS
\refitem cfg_external_search EXTERNAL_SEARCH
\refitem cfg_external_search_id EXTERNAL_SEARCH_ID
\refitem cfg_extra_packages EXTRA_PACKAGES
\refitem cfg_extra_search_mappings EXTRA_SEARCH_MAPPINGS
\refitem cfg_extract_all EXTRACT_ALL
......@@ -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.
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,
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),
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
<dt>\c SUBGROUPING <dd>
......@@ -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
the javascript and style sheets needed for the MathJax feature
(or an empty string when \ref cfg_use_mathjax "USE_MATHJAX" is disabled).
<dt><code>\$relpath\$</code><dd>
If \c CREATE_SUBDIRS is enabled, the command <code>\$relpath\$</code> can be
<dt><code>\$relpath^</code><dd>
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,
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>
To cope with differences in the layout of the header and footer that depend on
......@@ -1515,7 +1520,7 @@ hr.footer {
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
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
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
\c SEARCHDATA_FILE tag the name of this file can be specified.
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
<dt>\c EXTRA_SEARCH_MAPPINGS <dd>
\addindex EXTRA_SEARCH_MAPPINGS
The \c EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through other
doxygen projects that are not otherwise connected via tags files, but are
all added to the same search index. Each project needs to have a tag file set
via \ref cfg_generate_tagfile "GENERATE_TAGFILE". The search mapping then
maps the name of tag file to a relative location where the documentation
can be found, similar to the \ref cfg_tagfiles "TAGFILES" option but without
actually processing the tag file. The format is:
The \c EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
projects other than the one defined by this configuration file, but that are
all added to the same external search index. Each project needs to have a
unique id set via \ref cfg_external_search_id "EXTERNAL_SEARCH_ID".
The search mapping then maps the id of to a relative location where the
documentation can be found.
The format is:
\verbatim
EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
\endverbatim
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -250,7 +250,18 @@ defined group with title "My Group":
</navindex>
\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
pages generated by doxygen:
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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 configName is omitted `Doxyfile' will be used as a default.
.SH AUTHOR
Doxygen version VERSION, Copyright Dimitri van Heesch 1997-2012
Doxygen version VERSION, Copyright Dimitri van Heesch 1997-2013
.SH SEE ALSO
doxywizard(1).
......@@ -983,6 +983,8 @@ dl.section dd {
margin: 0px;
width: 100%;
border-bottom: 1px solid #848484;
visibility: hidden;
height: 0px;
}
.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
% documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* 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
* documentation under the terms of the GNU General Public License is hereby
......@@ -14,6 +14,8 @@
*/
/*! \page extsearch External Indexing and Searching
[TOC]
\section extsearch_intro Introduction
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`
for indexing the data and `doxysearch.cgi` for searching through the index.
The data flow is shown in the following diagram:
\dot
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 "];
}
\enddot
\image html extsearch_flow.png "External Search Data Flow"
\image latex extsearch_flow.eps "External Search Data Flow" height=10cm
- `doxygen` produces the raw search data
- `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.
\subsection extsearch_multi Multi project index
In case you have two doxygen projects A and B where B depends on A via a
tag file, i.e. the configuration of project A says:
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.
In case you have more than one doxygen project and these projects are related,
it may be desirable to allow searching for words in all projects from within
the documentation of any of the projects.
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
and then copy the resulting `doxysearch.db` to the directory where also
`doxysearch.cgi` used by project B is located.
In case you also want to link to search results in project B
from the search page of project A (or in general
between two projects that are otherwise unrelated),
you need to give some additional information in order for doxygen to make
the right links. This is what the
\ref cfg_extra_search_mappings "EXTRA_SEARCH_MAPPINGS" option is for.
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:
GENERATE_TAGFILES = B.tag
then project A can define the mapping as follows:
EXTRA_SEARCH_MAPPINGS = B.tag=../../project_B/html
with this addition, projects A and B can share the same search database.
@note The mapping defined by `EXTRA_SEARCH_MAPPINGS` is treated as an
extension of the mappings already defined by `TAGFILES`. In case the same
tag file is mentioned in both options, the one in `TAGFILES` is used.
`doxysearch.cgi` is located.
The `searchdata.xml` file doesn't contain any absolute paths or links,
so how can the search results from multiple projects be linked back to the right documentation set?
This is where the `EXTERNAL_SEARCH_ID` and `EXTRA_SEARCH_MAPPINGS` options come into play.
To be able to identify the different projects, one needs to
set a unique ID using \ref cfg_external_search_id "EXTERNAL_SEARCH_ID"
for each project.
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.
With this option to can define the mapping from IDs of other projects to the
(relative) location of documentation of those projects.
So for projects A and B the relevant part of the configuration file
could look as follows:
project_A/Doxyfile
------------------
EXTERNAL_SEARCH_ID = A
EXTRA_SEARCH_MAPPINGS = B=../../project_B/html
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
......
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 @@
*
*
*
* 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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -14,7 +14,9 @@
* input used in their production; they are not affected by this license.
*
*/
/*! \mainpage Doxygen Manual
/*!
\mainpage
<!--Doxygen Manual-->
\if logo_on
<center>
\htmlonly
......@@ -25,10 +27,12 @@ Version: $(VERSION)
\endif
<h2>Introduction</h2>
Doxygen is a documentation system for C++, C, Java, Objective-C, Python, IDL
(Corba and Microsoft flavors), Fortran, VHDL, PHP, C#, and to some extent D.
Doxygen is the de facto standard tool for generating documentation from
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>
<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
......@@ -41,20 +45,19 @@ It can help you in three ways:
<li> You can \ref extract_all "configure" doxygen to extract the code structure
from undocumented source files. This is very useful to quickly
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,
and collaboration diagrams, which are all generated automatically.
<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>
Doxygen is developed under <a href="http://www.linux.org">Linux</a>
and Mac OS X, but is set-up to be highly portable. As a result, it
runs on most other Unix flavors as well. Furthermore, executables for
Windows are available.
Doxygen is developed under Mac OS X and Linux, but is set-up to be highly
portable. As a result, it runs on most other Unix flavors as well.
Furthermore, executables for Windows are available.
\n This manual is divided into three parts, each of which is divided into several
sections.
\n
This manual is divided into three parts, each of which is divided into several sections.
The first part forms a user manual:
<ul>
......@@ -115,7 +118,7 @@ The third part provides information for developers:
\addindex license
\addindex GPL
Copyright &copy; 1997-2012 by
Copyright &copy; 1997-2013 by
<a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>.<p>
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
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.
<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>
Although doxygen is successfully used by large number of companies and
open source projects already, there is always room for improvement.
......
......@@ -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
* 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.
*
* 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
* 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
than English (the default). The output language is chosen through the
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):
Afrikaans, Arabic, Armenian, Brazilian Portuguese, Catalan, Chinese,
Chinese Traditional, Croatian, Czech, Danish, Dutch, English,
......
......@@ -5,7 +5,7 @@ change the language.doc, make the changes here and inside maintainers.txt.
/******************************************************************************
* %(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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* 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):
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -16,7 +16,7 @@
*/
/*! \page trouble Troubleshooting
<h2>Known problems:</h2>
\section knowproblems Known Problems
<ul>
<li>If you have problems building doxygen from sources, please
read \ref unix_problems "this section" first.
......@@ -76,15 +76,14 @@
</ul>
<h2>How to help</h2>
\section howtohelp How to Help
The development of Doxygen highly depends on your input!
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
know why.
\anchor bug_reports
<h2>How to report a bug</h2>
\section bug_reports How to report a bug
Bugs are tracked in GNOME's <a href="http://bugzilla.gnome.org">bugzilla</a> database.
Before submitting a
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -46,6 +46,10 @@
#include <stdlib.h>
#include <string.h>
#if !defined(_OS_WIN32_)
#include <stdint.h>
#endif
#if defined(_OS_SUN_) && defined(_CC_GNU_)
#include <strings.h>
#endif
......@@ -98,25 +102,26 @@ Q_EXPORT inline char *cstrcpy( char *dst, const char *src )
Q_EXPORT inline char *qstrcpy( char *dst, const char *src )
{ 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 )
{ return strcmp(str1,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 )
{ return strncmp(str1,str2,len); }
Q_EXPORT inline int qstrncmp( const char *str1, const char *str2, uint 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
// !defined(QT_CLEAN_NAMESPACE)
// We want to keep source compatibility for 2.x
......@@ -142,6 +147,7 @@ Q_EXPORT int qstrnicmp( const char *, const char *, uint len );
#undef strnicmp
#define strnicmp qstrnicmp
#endif
#endif
// qChecksum: Internet checksum
......@@ -274,24 +280,28 @@ inline void QCString::duplicate( const QCString &s )
{
if (!s.isEmpty())
{
uint l = strlen(s.data());
uint l = (uint)strlen(s.data());
m_data = (char *)malloc(l+1);
if (m_data) memcpy(m_data,s.data(),l+1);
}
else
{
m_data=0;
}
}
inline void QCString::duplicate( const char *str)
{
if (str && str[0]!='\0')
{
uint l = strlen(str);
uint l = (uint)strlen(str);
m_data = (char *)malloc(l+1);
if (m_data) memcpy(m_data,str,l+1);
}
else
{
m_data=0;
}
}
inline QCString &QCString::duplicate( const char *str, int)
......
......@@ -82,12 +82,14 @@ QString QDir::canonicalPath() const
char cur[PATH_MAX];
char tmp[PATH_MAX];
(void)GETCWD( cur, PATH_MAX );
if ( CHDIR(QFile::encodeName(dPath)) >= 0 ) {
(void)GETCWD( tmp, PATH_MAX );
r = QFile::decodeName(tmp);
if (GETCWD( cur, PATH_MAX )) {
if ( CHDIR(QFile::encodeName(dPath)) >= 0 ) {
if (GETCWD( tmp, PATH_MAX )) {
r = QFile::decodeName(tmp);
}
(void)CHDIR( cur );
}
}
(void)CHDIR( cur );
slashify( r );
return r;
......
......@@ -190,10 +190,17 @@
#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 STATBUF4TSTAT struct stat
# define STAT ::stat
# define FSTAT ::fstat
#endif
# define STAT_REG S_IFREG
# define STAT_DIR S_IFDIR
# define STAT_MASK S_IFMT
......
......@@ -635,7 +635,7 @@ extern "C" {
static int cmp_arr( const void *n1, const void *n2 )
{
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
}
......
......@@ -216,7 +216,7 @@ public:
bool remove_ascii( QCacheItem *item )
{ return QGDict::remove_ascii((const char *)item->key,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(); }
};
......@@ -406,7 +406,7 @@ bool QGCache::insert_other( const char *key, QCollection::Item data,
if ( keytype == AsciiKey )
dict->insert_ascii( key, ci );
else
dict->insert_int( (long)key, ci );
dict->insert_int( (intptr_t)key, ci );
tCost += cost;
return TRUE;
}
......@@ -469,7 +469,7 @@ QCollection::Item QGCache::take_other( const char *key )
if ( keytype == AsciiKey )
ci = dict->take_ascii( key );
else
ci = dict->take_int( (long)key );
ci = dict->take_int( (intptr_t)key );
Item d;
if ( ci ) {
d = ci->data;
......@@ -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
{
QCacheItem *ci = keytype == AsciiKey ? dict->find_ascii(key)
: dict->find_int((long)key);
: dict->find_int((intptr_t)key);
#if defined(DEBUG)
lruList->finds++;
#endif
......@@ -816,10 +816,10 @@ const char *QGCacheIterator::getKeyAscii() const
Returns the key of the current item, as a long.
*/
long QGCacheIterator::getKeyInt() const
intptr_t QGCacheIterator::getKeyInt() const
{
QCacheItem *item = it->current();
return item ? (long)item->key : 0;
return item ? (intptr_t)item->key : 0;
}
/*!
......
......@@ -114,7 +114,7 @@ protected:
QCollection::Item get() const;
QString getKeyString() const;
const char *getKeyAscii() const;
long getKeyInt() const;
intptr_t getKeyInt() const;
QCollection::Item operator()();
QCollection::Item operator++();
......
......@@ -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 )
{
QPtrBucket *n;
int index = (int)((ulong)key % vlen); // simple hash
int index = (int)((uintptr_t)key % vlen); // simple hash
if ( op == op_find ) { // find
for ( n=(QPtrBucket*)vec[index]; n;
n=(QPtrBucket*)n->getNext() ) {
......@@ -681,7 +681,7 @@ QPtrBucket *QGDict::unlink_ptr( void *key, QCollection::Item d )
return 0;
QPtrBucket *n;
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() ) {
bool found = (n->getKey() == key);
if ( found && d )
......@@ -1012,7 +1012,7 @@ QDataStream &QGDict::read( QDataStream &s )
// but hey, serializing pointers? can it be done
// at all, ever?
if ( k )
look_ptr( (void *)k, d, op_insert );
look_ptr( (void *)(uintptr_t)k, d, op_insert );
}
break;
}
......
......@@ -83,11 +83,11 @@ private:
class QIntBucket : public QBaseBucket
{
public:
QIntBucket( long k, QCollection::Item d, QBaseBucket *n )
QIntBucket( intptr_t k, QCollection::Item d, QBaseBucket *n )
: QBaseBucket(d,n), key(k) {}
long getKey() const { return key; }
intptr_t getKey() const { return key; }
private:
long key;
intptr_t key;
};
class QPtrBucket : public QBaseBucket
......@@ -178,7 +178,7 @@ public:
QCollection::Item get() const;
QString getKeyString() const;
const char *getKeyAscii() const;
long getKeyInt() const;
intptr_t getKeyInt() const;
void *getKeyPtr() const;
QCollection::Item operator()();
......@@ -208,7 +208,7 @@ inline const char *QGDictIterator::getKeyAscii() const
return curNode ? ((QAsciiBucket*)curNode)->getKey() : 0;
}
inline long QGDictIterator::getKeyInt() const
inline intptr_t QGDictIterator::getKeyInt() const
{
return curNode ? ((QIntBucket*)curNode)->getKey() : 0;
}
......
......@@ -593,7 +593,7 @@ int QIODevice::readLine( char *data, uint maxlen )
break;
}
*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 )
setf( hex, basefield );
setf( showbase );
unsetf( uppercase );
output_int( I_LONG | I_UNSIGNED, (ulong)ptr, FALSE );
output_int( I_LONG | I_UNSIGNED, (uintptr_t)ptr, FALSE );
flags( f );
return *this;
}
......
......@@ -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
# 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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -2206,7 +2206,7 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.parseText(" "+theTranslator->trEnumValue());
else if (md->isTypedef())
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.writeString("\n");
}
......@@ -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());
if (level>256)
{
err("Possible recursive class relation while inside %s and looking for %s\n",qPrint(name()),qPrint(bcd->name()));
abort();
err("Possible recursive class relation while inside %s and looking for base class %s\n",qPrint(name()),qPrint(bcd->name()));
return FALSE;
}
if (baseClasses())
......@@ -2597,6 +2596,31 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level)
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)
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -185,6 +185,11 @@ class ClassDef : public Definition
*/
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
* the public/protected members of a base class
*/
......@@ -501,7 +506,7 @@ class BaseClassList : public QList<BaseClassDef>
if (c1==0 || c2==0)
return FALSE;
else
return stricmp(c1->name(),c2->name());
return qstricmp(c1->name(),c2->name());
}
};
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -41,12 +41,12 @@ static int compItems(void *item1,void *item2)
//printf("compItems: %d %s<->%s\n",b,c1->name().data(),c2->name().data());
if (b)
{
return stricmp(c1->name(),
return qstricmp(c1->name(),
c2->name());
}
else
{
return stricmp(c1->className(),
return qstricmp(c1->className(),
c2->className());
}
}
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -2414,14 +2414,14 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
codifyLines(yytext);
endFontClass();
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);
}
<Body>{FLOWKW}/([^a-z_A-Z0-9]) {
startFontClass("keywordflow");
codifyLines(yytext);
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;
}
......@@ -2773,7 +2773,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
/*
<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"
g_theCallContext.setClass(getClass(g_curClassName));
......@@ -2944,10 +2944,10 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
}
<MemberCall2,FuncCall>{OPERATOR} { // operator
if (strcmp(yytext,"*") &&
strcmp(yytext,"&") &&
strcmp(yytext,"^") &&
strcmp(yytext,"%")) // typically a pointer or reference
if (qstrcmp(yytext,"*") &&
qstrcmp(yytext,"&") &&
qstrcmp(yytext,"^") &&
qstrcmp(yytext,"%")) // typically a pointer or reference
{
// not a * or &, or C++/CLI's ^ or %
g_parmType.resize(0);g_parmName.resize(0);
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -88,6 +88,7 @@ static bool g_pythonDocString;
static GuardType guardType; // kind of guard for conditional section
static SrcLangExt g_lang;
static bool isFixedForm; // For Fortran
static void replaceCommentMarker(const char *s,int len)
{
......@@ -270,8 +271,8 @@ void replaceComment(int offset);
BEGIN(CComment);
}
}
<Scan>"!>"|"!<"|"!!" {
if (g_lang!=SrcLangExt_Fortran)
<Scan>![><!]/.*\n {
if (g_lang!=SrcLangExt_Fortran)
{
REJECT;
}
......@@ -280,6 +281,52 @@ void replaceComment(int offset);
copyToOutput(yytext,(int)yyleng);
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 */
copyToOutput(yytext,(int)yyleng);
......@@ -294,7 +341,7 @@ void replaceComment(int offset);
<Scan>\n { /* new line */
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)
{
REJECT; // bail out if we do not need to convert
......@@ -357,7 +404,7 @@ void replaceComment(int offset);
BEGIN(CComment);
}
}
<Scan>"!>"|"!<"|"!!" {
<Scan>![><!] {
if (g_lang!=SrcLangExt_Fortran)
{
REJECT;
......@@ -402,7 +449,7 @@ void replaceComment(int offset);
g_lastCommentContext = YY_START;
BEGIN(Verbatim);
}
<Scan>. { /* any other character */
<Scan>. { /* any ather character */
copyToOutput(yytext,(int)yyleng);
}
<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */
......@@ -549,6 +596,11 @@ void replaceComment(int offset);
}
<CComment>\n { /* new line in comment */
copyToOutput(yytext,(int)yyleng);
/* in case of Fortran always end of comment */
if (g_lang==SrcLangExt_Fortran)
{
BEGIN(Scan);
}
}
<CComment>"*"+"/" { /* end of C comment */
if (g_lang==SrcLangExt_Python)
......@@ -583,17 +635,6 @@ void replaceComment(int offset);
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)
<CComment>"'" {
g_charContext = YY_START;
......@@ -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:
* -# 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).
......@@ -860,6 +940,13 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
g_lineNr = 1;
g_condStack.clear();
g_condStack.setAutoDelete(TRUE);
isFixedForm = FALSE;
if (g_lang==SrcLangExt_Fortran)
{
isFixedForm = recognizeFixedForm(inBuf->data());
}
if (g_lang==SrcLangExt_Markdown)
{
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
* 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
* 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,
QListIterator<ListItemInfo> slii(*docEntry->sli);
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);
break;
......@@ -1074,7 +1074,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>{B}*{CMD}"~"[a-z_A-Z]* { // language switch command
QCString langId = QString(yytext).stripWhiteSpace().data()+2;
if (!langId.isEmpty() &&
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
{ // enable language specific section
BEGIN(SkipLang);
}
......@@ -1160,6 +1160,9 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>"--" { // 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
addOutput(yytext);
}
......@@ -2057,7 +2060,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<SkipLang>[\\@]"~"[a-zA-Z]* { /* language switch */
QCString langId = &yytext[2];
if (langId.isEmpty() ||
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
{ // enable language specific section
BEGIN(Comment);
}
......@@ -2408,6 +2411,11 @@ static bool handleSubpage(const QCString &s)
warn(yyFileName,yyLineNr,
"warning: found \\subpage command in a comment block that is not marked as a page!");
}
if (g_spaceBeforeCmd)
{
addOutput(' ');
g_spaceBeforeCmd=FALSE;
}
addOutput("@"+s+" ");
BEGIN(SubpageLabel);
return FALSE;
......@@ -2849,7 +2857,7 @@ static int findExistingGroup(int &groupId,const MemberGroupInfo *info)
{
if (g_compoundName==mi->compoundName && // same file or scope
!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");
......
/**
* 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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -2,7 +2,7 @@
#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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* 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
* 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
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.
' 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='
The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through other
doxygen projects that are not otherwise connected via tags files, but are
all added to the same search index. Each project needs to have a tag file set
via GENERATE_TAGFILE. The search mapping then maps the name of the tag file
to a relative location where the documentation can be found, similar to the
TAGFILES option but without actually processing the tag file.
The format is: EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
projects other than the one defined by this configuration file, but that are
all added to the same external search index. Each project needs to have a
unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
of to a relative location where the documentation can be found.
The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
' defval='0' depends='SEARCHENGINE'/>
</group>
<group name='LaTeX' docs='configuration options related to the LaTeX output'>
......
# 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
# documentation under the terms of the GNU General Public License is hereby
......
......@@ -1723,16 +1723,22 @@ void addConfigOptions(Config *cfg)
cs->setWidgetType(ConfigString::File);
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(
"EXTRA_SEARCH_MAPPINGS",
"The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through other\n"
"doxygen projects that are not otherwise connected via tags files, but are\n"
"all added to the same search index. Each project needs to have a tag file set\n"
"via GENERATE_TAGFILE. The search mapping then maps the name of the tag file\n"
"to a relative location where the documentation can be found,\n"
"similar to the\n"
"TAGFILES option but without actually processing the tag file.\n"
"The format is: EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ..."
"The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n"
"projects other than the one defined by this configuration file, but that are\n"
"all added to the same external search index. Each project needs to have a\n"
"unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id\n"
"of to a relative location where the documentation can be found.\n"
"The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ..."
);
cl->addDependency("SEARCHENGINE");
//---------------------------------------------------------------------------
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......
......@@ -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
* 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