Commit 5dfd148b authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.5.6-20080819

parent 6bf92c5d
# Doxyfile 1.5.4
# Doxyfile 1.5.6
#---------------------------------------------------------------------------
# Project related configuration options
......@@ -21,7 +21,6 @@ SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
......@@ -29,12 +28,15 @@ ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
TYPEDEF_HIDES_STRUCT = NO
SYMBOL_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
......@@ -51,10 +53,10 @@ HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
......@@ -62,9 +64,11 @@ GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = YES
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
......@@ -131,7 +135,6 @@ VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
......@@ -151,13 +154,18 @@ DOCSET_BUNDLE_ID = org.doxygen.Doxygen
HTML_DYNAMIC_SECTIONS = YES
CHM_FILE =
HHC_LOCATION =
QTHELP_FILE =
QTHELP_CONFIG =
DOXYGEN2QTHELP_LOC =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
TREEVIEW_WIDTH = 250
FORMULA_FONTSIZE = 10
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
......@@ -235,17 +243,13 @@ CLASS_DIAGRAMS = NO
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
DOT_FONTNAME = FreeSans
DOT_FONTPATH =
UML_LOOK = NO
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = NO
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
......
DOXYGEN Version 1.5.6-20080727
DOXYGEN Version 1.5.6-20080819
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (27 July 2008)
Dimitri van Heesch (19 August 2008)
......@@ -94,8 +94,7 @@ dist: clean
rm -rf $(DISTDIR)
mkdir $(DISTDIR)
cp -a $(DISTFILES) README $(DISTDIR)
find $(DISTDIR) \( -name "CVS" -o -name ".cvsignore" \) \
-print0 | xargs -0 rm -rf
find $(DISTDIR) \( -name ".svn" \) -print0 | xargs -0 rm -rf
tar zcvf $(DISTDIR).src.tar.gz $(DISTDIR)
rm -rf $(DISTDIR)
......
DOXYGEN Version 1.5.6_20080727
DOXYGEN Version 1.5.6_20080819
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (27 July 2008)
Dimitri van Heesch (dimitri@stack.nl) (19 August 2008)
......@@ -45,6 +45,8 @@ class IString
VIRTUAL_DESTRUCTOR(IString)
/*! Returns a latin1 character representation of the string. */
virtual const char *latin1() const = 0;
/*! Returns a utf8 character representation of the string. */
virtual const char *utf8() const = 0;
/*! Returns a 16-bit unicode character representation of the character at
* position \a index in the string. The first character is at index 0.
*/
......
......@@ -1118,7 +1118,6 @@ void HighlightHandler::startSpace(const QXmlAttributes&)
void HighlightHandler::addTextNode()
{
printf("m_curString=`%s'\n",m_curString.data());
if (!m_curString.isEmpty())
{
m_children.append(new TextNode(m_curString,IDocMarkup::Normal,0));
......
......@@ -148,12 +148,12 @@ void MainHandler::startMember(const QXmlAttributes& attrib)
void MainHandler::endMember()
{
m_curCompound->memberDict.insert(m_curString,m_curMember);
m_curCompound->memberDict.insert(m_curMember->name,m_curMember);
QList<CompoundEntry> *cel=0;
if ((cel=m_memberNameDict.find(m_curString))==0)
if ((cel=m_memberNameDict.find(m_curMember->name))==0)
{
cel = new QList<CompoundEntry>;
m_memberNameDict.insert(m_curString,cel);
m_memberNameDict.insert(m_curMember->name,cel);
}
cel->append(m_curCompound);
m_insideMember = FALSE;
......
......@@ -16,6 +16,8 @@ class StringImpl : public QString, public IString
// IString
const char *latin1() const
{ return QString::latin1(); }
const char *utf8() const
{ return QString::utf8(); }
unsigned short unicodeCharAt(int index) const
{ return QString::unicode()[index].unicode(); }
bool isEmpty() const
......
......@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=6
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20080727
doxygen_version_mmn=20080819
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -33,7 +33,7 @@ CASE_SENSE_NAMES = NO
IMAGE_PATH = .
INPUT = index.doc install.doc starting.doc docblocks.doc lists.doc \
grouping.doc formulas.doc diagrams.doc preprocessing.doc \
autolink.doc output.doc custcmd.doc external.doc faq.doc trouble.doc history.doc features.doc \
autolink.doc output.doc customize.doc custcmd.doc external.doc faq.doc trouble.doc history.doc features.doc \
doxygen_usage.doc doxytag_usage.doc \
doxywizard_usage.doc installdox_usage.doc \
config.doc commands.doc htmlcmds.doc xmlcmds.doc language.doc \
......
......@@ -58,7 +58,6 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_abbreviate_brief ABBREVIATE_BRIEF
\refitem cfg_aliases ALIASES
\refitem cfg_allexternals ALLEXTERNALS
\refitem cfg_alphabetical_index ALPHABETICAL_INDEX
\refitem cfg_always_detailed_sec ALWAYS_DETAILED_SEC
\refitem cfg_binary_toc BINARY_TOC
\refitem cfg_builtin_stl_support BUILTIN_STL_SUPPORT
......@@ -68,14 +67,11 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_case_sense_names CASE_SENSE_NAMES
\refitem cfg_chm_file CHM_FILE
\refitem cfg_class_diagrams CLASS_DIAGRAMS
\refitem cfg_class_graph CLASS_GRAPH
\refitem cfg_collaboration_graph COLLABORATION_GRAPH
\refitem cfg_cols_in_alpha_index COLS_IN_ALPHA_INDEX
\refitem cfg_compact_latex COMPACT_LATEX
\refitem cfg_compact_rtf COMPACT_RTF
\refitem cfg_cpp_cli_support CPP_CLI_SUPPORT
\refitem cfg_create_subdirs CREATE_SUBDIRS
\refitem cfg_details_at_top DETAILS_AT_TOP
\refitem cfg_directory_graph DIRECTORY_GRAPH
\refitem cfg_disable_index DISABLE_INDEX
\refitem cfg_distribute_group_doc DISTRIBUTE_GROUP_DOC
......@@ -134,7 +130,6 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_generate_treeview GENERATE_TREEVIEW
\refitem cfg_generate_xml GENERATE_XML
\refitem cfg_graphical_hierarchy GRAPHICAL_HIERARCHY
\refitem cfg_group_graphs GROUP_GRAPHS
\refitem cfg_have_dot HAVE_DOT
\refitem cfg_hhc_location HHC_LOCATION
\refitem cfg_hide_friend_compounds HIDE_FRIEND_COMPOUNDS
......@@ -152,7 +147,6 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_idl_property_support IDL_PROPERTY_SUPPORT
\refitem cfg_ignore_prefix IGNORE_PREFIX
\refitem cfg_image_path IMAGE_PATH
\refitem cfg_include_graph INCLUDE_GRAPH
\refitem cfg_include_path INCLUDE_PATH
\refitem cfg_inherit_docs INHERIT_DOCS
\refitem cfg_inline_info INLINE_INFO
......@@ -168,6 +162,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_latex_header LATEX_HEADER
\refitem cfg_latex_hide_indices LATEX_HIDE_INDICES
\refitem cfg_latex_output LATEX_OUTPUT
\refitem cfg_layout_file LAYOUT_FILE
\refitem cfg_macro_expansion MACRO_EXPANSION
\refitem cfg_makeindex_cmd_name MAKEINDEX_CMD_NAME
\refitem cfg_man_extension MAN_EXTENSION
......@@ -211,9 +206,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_short_names SHORT_NAMES
\refitem cfg_show_dirs SHOW_DIRECTORIES
\refitem cfg_show_files SHOW_FILES
\refitem cfg_show_include_files SHOW_INCLUDE_FILES
\refitem cfg_show_namespaces SHOW_NAMESPACES
\refitem cfg_show_used_files SHOW_USED_FILES
\refitem cfg_sip_support SIP_SUPPORT
\refitem cfg_skip_function_macros SKIP_FUNCTION_MACROS
\refitem cfg_sort_brief_docs SORT_BRIEF_DOCS
......@@ -480,6 +473,7 @@ followed by the descriptions of the tags grouped by category.
Note that setting this tag to YES also means that rational rose comments
are not recognized any more.
<!--
\anchor cfg_details_at_top
<dt>\c DETAILS_AT_TOP <dd>
\addindex DETAILS_AT_TOP
......@@ -487,6 +481,7 @@ followed by the descriptions of the tags grouped by category.
will output the detailed description near the top, like JavaDoc.
If set to NO, the detailed description appears after the member
documentation.
-->
\anchor cfg_inherit_docs
<dt>\c INHERIT_DOCS <dd>
......@@ -692,12 +687,14 @@ function's detailed documentation block.
will show members with their full class and namespace scopes in the
documentation. If set to \c YES the scope will be hidden.
<!--
\anchor cfg_show_include_files
<dt>\c SHOW_INCLUDE_FILES <dd>
\addindex SHOW_INCLUDE_FILES
If the SHOW_INCLUDE_FILES tag is set to YES (the default) then doxygen
will put a list of the files that are included by a file in the documentation
of that file.
-->
\anchor cfg_inline_info
<dt>\c INLINE_INFO <dd>
......@@ -789,12 +786,14 @@ function's detailed documentation block.
individual variables and defines can be controlled using \ref cmdshowinitializer "\\showinitializer"
or \ref cmdhideinitializer "\\hideinitializer" command in the documentation.
<!--
\anchor cfg_show_used_files
<dt>\c SHOW_USED_FILES <dd>
\addindex SHOW_USED_FILES
Set the \c SHOW_USED_FILES tag to \c NO to disable the list of files generated
at the bottom of the documentation of classes and structs. If set to \c YES the
list will mention the files that were used to generate the documentation.
-->
\anchor cfg_show_dirs
<dt>\c SHOW_DIRECTORIES <dd>
......@@ -949,6 +948,17 @@ Example filter for ClearCase:
FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
\endverbatim
\anchor cfg_layout_file
<dt>\c LAYOUT_FILE <dd>
The \c LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
doxygen. The layout file controls the global structure of the generated output files
in an output format independent way. The create the layout file that represents
doxygen's defaults, run doxygen with the -l option. You can optionally specify a
file name after the option, if omitted doxygenlayout.xml will be used as the name
of the layout file. Note that if you run doxygen from a directory containing
a file called doxygenlayout.xml, doxygen will parse it automatically even if
the \c LAYOUT_FILE tag is left empty.
\anchor cfg_recursive
<dt>\c RECURSIVE <dd>
\addindex RECURSIVE
......@@ -1124,14 +1134,16 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
\anchor cfg_alphabetical_index
<dl>
<!--
<dt>\c ALPHABETICAL_INDEX <dd>
\addindex ALPHABETICAL_INDEX
If the \c ALPHABETICAL_INDEX tag is set to \c YES, an alphabetical index
of all compounds will be generated. Enable this if the project contains
a lot of classes, structs, unions or interfaces.
-->
\anchor cfg_cols_in_alpha_index
<dt>\c COLS_IN_ALPHA_INDEX <dd>
\anchor cfg_cols_in_alpha_index
\addindex COLS_IN_ALPHA_INDEX
If the alphabetical index is enabled
(see \c ALPHABETICAL_INDEX) then the \c COLS_IN_ALPHA_INDEX tag can be
......@@ -1925,6 +1937,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
different font using \c DOT_FONTNAME you can set the path where dot
can find it using this tag.
<!--
\anchor cfg_class_graph
<dt>\c CLASS_GRAPH <dd>
\addindex CLASS_GRAPH
......@@ -1946,6 +1959,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
\addindex GROUP_GRAPHS
If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
will generate a graph for groups, showing the direct groups dependencies.
-->
\anchor cfg_uml_look
<dt>\c UML_LOOK <dd>
......@@ -1967,6 +1981,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
inheritance and usage relations if the target is undocumented
or is not a class.
<!--
\anchor cfg_include_graph
<dt>\c INCLUDE_GRAPH <dd>
\addindex INCLUDE_GRAPH
......@@ -1982,6 +1997,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
\c HAVE_DOT tags are set to \c YES then doxygen will generate a graph for each
documented header file showing the documented files that directly or indirectly
include this file.
-->
\anchor cfg_call_graph
<dt>\c CALL_GRAPH <dd>
......@@ -2061,9 +2077,10 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
<dt>\c DOT_TRANSPARENT <dd>
\addindex DOT_TRANSPARENT
Set the \c DOT_TRANSPARENT tag to \c YES to generate images with a transparent
background. This is enabled by default, which results in a transparent background.
Warning: Depending on the platform used, enabling this option may lead to badly
anti-aliased labels on the edges of a graph (i.e. they become hard to read).
background. This is disabled by default, because dot on Windows does not
seem to support this out of the box. Warning: Depending on the platform used,
enabling this option may lead to badly anti-aliased labels on the edges of
a graph (i.e. they become hard to read).
\anchor cfg_dot_multi_targets
<dt>\c DOT_MULTI_TARGETS <dd>
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2008 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
/*! \page customize Customizing the output
Doxygen provides various levels of customization.
The \ref minor_tweaks "first section" discusses what to
do if you want to do minor tweaker to the look and feel of the output.
The \ref layout "next" section show how to reorder and hide certain
information on a page.
The \ref xmlgenerator "last" section show how to generate whatever output
you want based on the XML output produced by doxygen.
\section minor_tweaks Minor Tweaks
To simply tweak things like fonts or colors, margins, or other look \& feel
espects of the HTML output you can create a different
<a href="http://www.w3schools.com/css/default.asp">cascading style sheet</a>.
You can also let doxygen use a custom header and footer for each HTML
page it generates, for instance to include a logo or to make the
doxygen output blend in with the rest of the web site.
To do this first run doxygen as follows:
\verbatim
doxygen -w html header.html footer.html customdoxygen.css
\endverbatim
This will create 3 files:
- header.html is a HTML fragment which doxygen normally uses to start
a HTML page. Note that the fragment ends with a body tag and that is
contains a couple of commands of the form \$word. These will be replaced
by doxygen on the fly.
- footer.html is a HTML fragment which doxygen normally uses to end
a HTML page. Also here special commands can be used. This file contain the
link to www.doxygen.org and the body and html end tags.
- customdoxygen.css is the default cascading style sheet
used by doxygen.
You should edit these files and then reference them from the config file.
\verbatim
HTML_HEADER = header.html
HTML_FOOTER = footer.html
HTML_STYLESHEET = customdoxygen.css
\endverbatim
See the documentation of the \ref cfg_html_header "HTML_HEADER" tag
for more information about the possible meta commands.
\note You should not put the style sheet in the HTML output directory. Treat
it is a source file. Doxygen will copy it for you.
\note If you use images or other external content in a custom header you
need to make sure these end up in the HTML output directory yourself,
for instance by writing a script that runs doxygen can then copies the
images to the output.
\section layout Changing the layout of pages
In some cases you may want to change the way the output is structured.
A different style sheet or custom headers and footers do not help in such
case.
The solution doxygen provides is a layout file, which you can
modify and doxygen will use to control what information is presented,
in which order, and to some extent also how information is presented.
The layout file is an XML file.
The default layout can be generated
by doxygen using the following command:
\verbatim
doxygen -l
\endverbatim
optionally the name of the layout file can be specified, if omitted
\c doxygenlayout.xml will be used.
The toplevel structure of the file looks as follows:
\verbatim
<doxygenlayout version="1.0">
<navindex>
...
</navindex>
<class>
...
</class>
<namespace>
...
</namespace>
<file>
...
</file>
<group>
...
</group>
<directory>
...
</directory>
</doxygenlayout>
\endverbatim
The root tag of the XML is \c doxygenlayout, it has an attribute named
\c version, which will be used in the future to cope with changes that are
not backward compatible.
The first section, enclosed by \c navindex tags represents the layout of
the navigation tabs displayed at the top of each HTML page.
Each tab is represented by a \c tab tag in the XML file.
You can hide tabs by setting the \c visible attribute to \c no.
You can also override the default title of a tab by specifying it as
the value of the \c title attribute. If the title field is the empty string
(the default) then doxygen will fill in an appropriate title.
You can reorder the tabs by moving the tab tags in the XML file
within the \c navindex section and even change the tree structure.
Do not change the value of the \c type attribute however.
Only a fixed set of types are supported, each representing a link to a
specific index.
The sections after \c navindex represent the layout of the different
pages generated by doxygen:
- The \c class section represents the layout of all pages generated for
documented classes, structs, unions, and interfaces.
- The \c namespace section represents the layout of all pages generated for
documented namespaces (and also Java packages).
- The \c file section represents the layout of all pages generated for
documented files.
- The \c group section represents the layout of all pages generated for
documented groups (or modules).
- The \c directory section represents the layout of all pages generated for
documented directories.
Each XML tag within one of the above page sections represents a certain
piece of information. Some pieces can appear in each type of page,
others are specific for a certain type of page.
Doxygen will list the pieces in the order in which they appear
in the XML file.
Some tags have a \c visible attribute which can be
used to hide the fragment from the generated output.
Note that the \c visible attribute is just a hint for doxygen.
If no relevant information is available for a certain piece it is
omitted even if it is set to \c yes.
Some tags have a \c title attribute. This attribute can be used
to customize the title doxygen will use as a header for the piece.
@warning at the moment you should not remove tags from the layout file
as a way to hide information. Doing so can cause broken links in the
generated output!
At the moment the following generic tags are possible for each page:
<dl>
<dt>\c briefdescription
<dd>Represents the brief description on a page.
<dt>\c detaileddescription
<dd>Represents the detailed description on a page.
<dt>\c authorsection
<dd>Represents the author section of a page (only used for man pages).
<dt>\c memberdecl
<dd>Represents the quick overview of members on a page (member declarations).
This tag has child tags each representing a list of
members of a certain type.
The possible child tags are not listed in detail in the document,
but the name of the tag should be a good indication of the type
of members that the tag represents.
<dt>\c memberdef
<dd>Represents the detailed member list on a page (member definition).
Like the \c memberdecl tag, also this tag has a number of
possible child tags.
</dl>
The class page has the following specific tags:
<dl>
<dt>\c includes
<dd>Represents the include file needed to obtain the definition for
this class.
<dt>\c inheritancegraph
<dd>Represents the inheritance relations for a class.
Note that the CLASS_DIAGRAM option determines
if the inheritance relation is a list of base and derived classes or
a graph.
<dt>\c collaborationgraph
<dd>Represents the collaboration graph for a class.
<dt>\c allmemberslink
<dd>Represents the link to the list of all members for a class.
<dt>\c usedfiles
<dd>Represents the list of files from which documentation for the class was
extracted.
</dl>
The file page has the following specific tags:
<dl>
<dt>\c includes
<dd>Represents the list of \#include statements contained in this file.
<dt>\c includegraph
<dd>Represents the include dependency graph for the file.
<dt>\c includedbygraph
<dd>Represents the included by dependency graph for the file.
<dt>\c sourcelink
<dd>Represents the link to the source code of this file.
</dl>
The group page has a specific \c groupgraph tag which represents the
graph showing the dependencies between groups.
Similarily, the directory page has a specific \c directorygraph tag
which represents the graph showing the dependencies between the directories
based on the \#include relations of the files inside the directories.
\section xmlgenerator Using the XML output
If the above two methods still do not provide enough flexibility, you
can also use the XML output produced by doxygen as a basis to
generate the output you like. To do this set GENERATE_XML to YES.
The XML output consists of an index file named \c index.xml which
lists all items extracted by doxygen with references to the other XML files
for details. The structure of the index is described by a schema file
\c index.xsd. All other XML files are described by the schema file
named \c compound.xsd. If you prefer one big XML file
you can combine the index and the other files using the
XSLT file \c combine.xslt.
You can use any XML parser to parse the file or use the one that can be found
in the \c addon/doxmlparser directory of doxygen source distribution.
Look at \c addon/doxmlparser/include/doxmlintf.h for the interface of the
parser and in \c addon/doxmlparser/example for examples.
The advantage of using the doxmlparser is that it
will only read the index file into memory and then only those XML
files that you implicitly load via navigating through the index. As a
result this works even for very large projects where reading all XML
files as one big DOM tree would not fit into memory.
*/
......@@ -19,33 +19,31 @@
Doxygen has built-in support to generate inheritance diagrams for C++
classes.
Doxygen can use the "dot" tool from graphviz 1.5 to generate
more advanced diagrams and graphs. Graphviz is an "open-sourced",
Doxygen can use the "dot" tool from graphviz to generate
more advanced diagrams and graphs. Graphviz is an open-source,
cross-platform graph drawing toolkit and can be found
at http://www.graphviz.org/
If you have the "dot" tool available in the path, you can set
If you have the "dot" tool in the path, you can set
\ref cfg_have_dot "HAVE_DOT" to \c YES in the configuration file to
let doxygen use it.
Doxygen uses the "dot" tool to generate the following graphs:
<ul>
<li>if \ref cfg_graphical_hierarchy "GRAPHICAL_HIERARCHY" is set to \c YES,
a graphical representation of the class hierarchy will be drawn, along
<li>A graphical representation of the class hierarchy will be drawn, along
with the textual one. Currently this feature is supported for HTML only.\n
<b>Warning:</b> When you have a very large class hierarchy where many
classes derive from a common base class, the resulting image may become
too big to handle for some browsers.
<li>if \ref cfg_class_graph "CLASS_GRAPH" is set to \c YES,
a graph will be generated for each documented class showing the
<li>An inheritance graph will be generated for each documented class showing the
direct and indirect inheritance relations. This disables the
generation of the built-in class inheritance diagrams.
<li>if \ref cfg_include_graph "INCLUDE_GRAPH" is set to \c YES, an include
dependency graph is generated for each documented file that includes at
least one other file. This feature is currently supported for HTML and RTF
only.
<li>if \ref cfg_collaboration_graph "COLLABORATION_GRAPH" is set to YES, a
graph is drawn for each documented class and struct that shows:
<li>An include dependency graph is generated for each documented file that
includes at least one other file. This feature is currently supported
for HTML and RTF only.
<li>An inverse include dependency graph is also generated showing for
a (header) file, which other files include it.
<li>A graph is drawn for each documented class and struct that shows:
<ul>
<li> the inheritance relations with base classes.
<li> the usage relations with other structs and classes (e.g.
......@@ -60,6 +58,13 @@
functions that the function is directly or indirectly called by.
</ul>
Using a \ref customize "layout file" you can determine which of the
graphs are actually shown.
The options \ref cfg_dot_graph_max_nodes "DOT_GRAPH_MAX_NODES" and
\ref cfg_max_dot_graph_depth "MAX_DOT_GRAPH_DEPTH" can be used to
limit the size of the various graphs.
The elements in the class diagrams in HTML and RTF
have the following meaning:
<ul>
......
......@@ -56,6 +56,7 @@ Written by Dimitri van Heesch\\[2ex]
\chapter{Preprocessing}\label{preprocessing}\hypertarget{preprocessing}{}\input{preprocessing}
\chapter{Automatic link generation}\label{autolink}\hypertarget{autolink}{}\input{autolink}
\chapter{Output Formats}\label{output}\hypertarget{output}{}\input{output}
\chapter{Customizing the Output}\label{customize}\hypertarget{customize}{}\input{customize}
\chapter{Custom Commands}\label{custcmd}\hypertarget{custcmd}{}\input{custcmd}
\chapter{Link to external documentation}\label{external}\hypertarget{external}{}\input{external}
\chapter{Frequently Asked Questions}\label{faq}\hypertarget{faq}{}\input{faq}
......
......@@ -75,6 +75,8 @@ The first part forms a user manual:
and members in the documentation.
<li>Section \ref output shows how to generate the various output formats
supported by doxygen.
<li>Section \ref customize explains how you can customize the output generated
by doxygen.
<li>Section \ref custcmd show how to define and use custom commands in your comments.
<li>Section \ref external explains how to let doxygen create links to externally generated documentation.
<li>Section \ref faq gives answers to frequently asked questions.
......
This diff is collapsed.
#FIG 3.2
#FIG 3.2 Produced by xfig version 3.2.5
Landscape
Center
Inches
......@@ -9,13 +9,6 @@ Single
1200 2
0 32 #e0e0e0
0 33 #000000
6 3600 1650 4800 3150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
3600 1950 3900 1650 4800 1650 4800 3150 3600 3150 3600 1950
3900 1950 3900 1650
4 0 0 50 0 0 12 0.0000 4 180 780 3900 2250 Config file\001
4 0 0 50 0 0 12 0.0000 4 180 645 3900 2550 Doxyfile\001
-6
6 900 3150 2325 4875
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
900 3675 1200 3375 2100 3375 2100 4875 900 4875 900 3675
......@@ -39,9 +32,9 @@ Single
1125 5250 1125 5175 2325 5175 2325 6675 2250 6675
-6
6 1275 5925 2025 6750
4 0 0 50 0 0 12 0.0000 4 135 750 1275 6075 - headers\001
4 0 0 50 0 0 12 0.0000 4 180 690 1275 6675 - images\001
4 0 0 50 0 0 12 0.0000 4 135 690 1275 6375 - footers\001
4 0 0 50 0 0 12 0.0000 4 150 795 1275 6075 - headers\001
4 0 0 50 0 0 12 0.0000 4 195 720 1275 6675 - images\001
4 0 0 50 0 0 12 0.0000 4 150 705 1275 6375 - footers\001
-6
6 6675 8250 8100 9975
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
......@@ -87,33 +80,34 @@ Single
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6825 450 6825 375 8025 375 8025 1875 7950 1875
-6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
4050 3150 4050 3750
6 4350 1650 5550 3150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
4350 1950 4650 1650 5550 1650 5550 3150 4350 3150 4350 1950
4650 1950 4650 1650
4 0 0 50 0 0 12 0.0000 4 195 870 4575 2250 Config file\001
4 0 0 50 0 0 12 0.0000 4 195 720 4575 2550 Doxyfile\001
-6
6 2850 1650 4050 3150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
2850 1950 3150 1650 4050 1650 4050 3150 2850 3150 2850 1950
3150 1950 3150 1650
4 0 0 50 -1 0 12 0.0000 4 195 915 3000 2475 Layout file\001
-6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
2100 4125 3300 4125
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
2100 6225 2700 6225 2700 4350 3300 4350
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
1 1 1.00 60.00 120.00
4350 3150 4350 3750
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
3675 5925 3975 5625 4875 5625 4875 7125 3675 7125 3675 5925
3975 5925 3975 5625
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
3300 300 5100 300 5100 1050 3300 1050 3300 300
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
4125 5625 4125 4650
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
1 1 1.00 60.00 120.00
4350 5625 4350 4650
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2
1 1 1.00 60.00 120.00
1 1 1.00 60.00 120.00
4200 1050 4200 1650
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
5100 3900 6000 3900 6000 1425 6600 1425
......@@ -158,22 +152,12 @@ Single
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10800 3525 11475 3525
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
9000 6900 10800 6900 10800 7650 9000 7650 9000 6900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7875 7275 9000 7275
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10800 7275 11400 7275
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7875 9150 9000 9150
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
9000 8775 10875 8775 10875 9525 9000 9525 9000 8775
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10875 9150 11400 9150
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
3300 8850 5100 8850 5100 9525 3300 9525 3300 8850
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
......@@ -184,43 +168,73 @@ Single
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
4275 8850 4275 7125
4 0 0 50 0 0 12 0.0000 4 180 1215 4500 3525 generate/update\001
4 0 0 50 0 0 12 0.0000 4 135 330 3600 3525 read\001
4 0 0 50 0 0 12 0.0000 4 135 330 2850 3975 read\001
4 0 0 50 0 0 12 0.0000 4 135 330 2850 4650 read\001
4 0 0 50 0 0 12 0.0000 4 180 810 3975 6450 Tag file(s)\001
4 0 0 50 0 0 12 0.0000 4 180 915 3750 750 Doxywizard\001
4 0 0 50 0 0 12 0.0000 4 150 660 4425 5175 generate\001
4 0 0 50 0 0 12 0.0000 4 135 330 3675 5175 read\001
4 0 0 50 0 0 12 0.0000 4 180 990 4350 1425 generate/edit\001
4 0 0 50 0 0 12 0.0000 4 135 780 6900 1350 XML files\001
4 0 0 50 0 0 12 0.0000 4 135 810 6900 3300 Latex files\001
4 0 0 50 0 0 12 0.0000 4 135 675 6900 3750 Makefile\001
4 0 0 50 0 0 12 0.0000 4 75 105 7200 3525 +\001
4 0 0 50 0 0 12 0.0000 4 180 675 3900 4275 Doxygen\001
4 0 0 50 0 0 12 0.0000 4 180 1245 9225 750 Your application\001
4 0 0 50 0 0 12 0.0000 4 180 1155 9300 1275 doxmlparser lib\001
4 0 0 50 0 0 12 0.0000 4 180 690 8175 3750 make pdf\001
4 0 0 50 0 0 12 0.0000 4 180 630 8175 3000 make ps\001
4 0 0 50 0 0 12 0.0000 4 135 375 9675 3375 latex\001
4 0 0 50 0 0 12 0.0000 4 105 555 11025 825 custom\001
4 0 0 50 0 0 12 0.0000 4 150 480 11025 1050 output\001
4 0 0 50 0 0 12 0.0000 4 180 765 11025 3000 postscript\001
4 0 0 50 0 0 12 0.0000 4 135 345 11025 3825 PDF\001
4 0 0 50 0 0 12 0.0000 4 135 750 6900 7350 refman.rtf\001
4 0 0 50 0 0 12 0.0000 4 135 795 9525 7350 MS-Word\001
4 0 0 50 0 0 12 0.0000 4 135 270 11100 7200 doc\001
4 0 0 50 0 0 12 0.0000 4 180 480 8175 7200 import\001
4 0 0 50 0 0 12 0.0000 4 135 510 6975 9075 HTML\001
4 0 0 50 0 0 12 0.0000 4 135 450 6975 9300 pages\001
4 0 0 50 0 0 12 0.0000 4 180 1740 9075 9225 HTML Help Workshop\001
4 0 0 50 0 0 12 0.0000 4 135 315 11100 9000 chm\001
4 0 0 50 0 0 12 0.0000 4 180 840 6825 5625 Man pages\001
4 0 0 50 0 0 12 0.0000 4 135 420 5475 9525 parse\001
4 0 0 50 0 0 12 0.0000 4 180 645 3825 9300 Doxytag\001
4 0 0 50 0 0 12 0.0000 4 135 330 8325 9075 read\001
4 0 0 50 0 0 12 0.0000 4 180 1080 8775 6675 Windows only\001
4 0 0 50 0 0 12 0.0000 4 135 330 8250 1200 read\001
4 0 0 50 0 0 12 0.0000 4 135 615 1200 4200 Sources\001
4 0 0 50 0 0 12 0.0000 4 135 585 1275 5775 Custom\001
4 0 0 50 0 0 12 0.0000 4 150 660 4350 8175 generate\001
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2
1 1 1.00 60.00 120.00
1 1 1.00 60.00 120.00
4875 1050 4875 1650
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
4125 300 5925 300 5925 1050 4125 1050 4125 300
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
1 1 1.00 60.00 120.00
4875 3150 4875 3750
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
4650 3150 4650 3750
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
3750 3150 3750 3750
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
1 1 1.00 60.00 120.00
3525 3150 3525 3750
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
9000 8775 11175 8775 11175 9525 9000 9525 9000 8775
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
11250 7275 11775 7275
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
9000 6900 11250 6900 11250 7650 9000 7650 9000 6900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
11175 9150 11700 9150
4 0 0 50 0 0 12 0.0000 4 150 390 2850 3975 read\001
4 0 0 50 0 0 12 0.0000 4 150 390 2850 4650 read\001
4 0 0 50 0 0 12 0.0000 4 165 765 4425 5175 generate\001
4 0 0 50 0 0 12 0.0000 4 150 390 3675 5175 read\001
4 0 0 50 0 0 12 0.0000 4 195 780 3900 4275 Doxygen\001
4 0 0 50 0 0 12 0.0000 4 195 720 8175 3000 make ps\001
4 0 0 50 0 0 12 0.0000 4 150 420 9675 3375 latex\001
4 0 0 50 0 0 12 0.0000 4 120 630 11025 825 custom\001
4 0 0 50 0 0 12 0.0000 4 165 540 11025 1050 output\001
4 0 0 50 0 0 12 0.0000 4 195 840 11025 3000 postscript\001
4 0 0 50 0 0 12 0.0000 4 150 390 11025 3825 PDF\001
4 0 0 50 0 0 12 0.0000 4 150 615 6975 9075 HTML\001
4 0 0 50 0 0 12 0.0000 4 150 510 6975 9300 pages\001
4 0 0 50 0 0 12 0.0000 4 150 480 5475 9525 parse\001
4 0 0 50 0 0 12 0.0000 4 195 735 3825 9300 Doxytag\001
4 0 0 50 0 0 12 0.0000 4 195 1215 8775 6675 Windows only\001
4 0 0 50 0 0 12 0.0000 4 150 390 8250 1200 read\001
4 0 0 50 0 0 12 0.0000 4 150 705 1200 4200 Sources\001
4 0 0 50 0 0 12 0.0000 4 150 675 1275 5775 Custom\001
4 0 0 50 0 0 12 0.0000 4 165 765 4350 8175 generate\001
4 0 0 50 0 0 12 0.0000 4 195 1140 3675 1350 generate/edit\001
4 0 0 50 0 0 12 0.0000 4 195 1050 4425 750 Doxywizard\001
4 0 0 50 0 0 12 0.0000 4 150 390 4050 3525 read\001
4 0 0 50 0 0 12 0.0000 4 165 765 5025 3375 generate\001
4 0 0 50 -1 0 12 0.0000 4 195 585 5025 3600 update\001
4 0 0 50 0 0 12 0.0000 4 165 765 2625 3375 generate\001
4 0 0 50 0 0 12 0.0000 4 150 870 6825 1350 XML files\001
4 0 0 50 0 0 12 0.0000 4 150 900 6750 3300 Latex files\001
4 0 0 50 0 0 12 0.0000 4 150 765 6750 3750 Makefile\001
4 0 0 50 0 0 12 0.0000 4 105 120 7125 3525 +\001
4 0 0 50 0 0 12 0.0000 4 195 960 6750 5625 Man pages\001
4 0 0 50 0 0 12 0.0000 4 150 870 6900 7350 refman.rtf\001
4 0 0 50 0 0 12 0.0000 4 195 1995 9075 9225 HTML Help Workshop\001
4 0 0 50 0 0 12 0.0000 4 195 795 8100 3750 make pdf\001
4 0 0 50 0 0 12 0.0000 4 195 1320 9225 1275 doxmlparser lib\001
4 0 0 50 0 0 12 0.0000 4 195 1395 9150 750 Your application\001
4 0 0 50 0 0 12 0.0000 4 195 885 3900 6450 Tag file(s)\001
4 0 0 50 0 0 12 0.0000 4 150 315 11325 7125 doc\001
4 0 0 50 0 0 12 0.0000 4 150 855 9750 7350 MS-Word\001
4 0 0 50 0 0 12 0.0000 4 150 375 11325 9000 chm\001
4 0 0 50 0 0 12 0.0000 4 150 390 8250 9075 read\001
4 0 0 50 0 0 12 0.0000 4 195 555 8100 7200 import\001
doc/infoflow.gif

23.9 KB | W: | H:

doc/infoflow.gif

13.1 KB | W: | H:

doc/infoflow.gif
doc/infoflow.gif
doc/infoflow.gif
doc/infoflow.gif
  • 2-up
  • Swipe
  • Onion skin
......@@ -221,8 +221,8 @@ when the translator was updated.
</tr>
<tr bgcolor="#ffffff">
<td>Romanian</td>
<td>Alexandru Iosup</td>
<td>aiosup at yahoo dot com</td>
<td>Ionut Dumitrascu<br>Alexandru Iosup</td>
<td>reddumy at yahoo dot com<br>aiosup at yahoo dot com</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
......@@ -356,7 +356,8 @@ when the translator was updated.
\hline
Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
\hline
Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.4.1 \\
Romanian & Ionut Dumitrascu & {\tt\tiny reddumy@yahoo.com} & 1.4.1 \\
~ & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & ~ \\
\hline
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\
\hline
......
......@@ -100,6 +100,7 @@ TranslatorPortuguese
Rui Godinho Lopes: ruiglopes@yahoo.com
TranslatorRomanian
Ionut Dumitrascu: reddumy@yahoo.com
Alexandru Iosup: aiosup@yahoo.com
TranslatorRussian
......
......@@ -14,7 +14,7 @@
* input used in their production; they are not affected by this license.
*
*/
/*! \page output.html Output Formats
/*! \page output Output Formats
\section output Output Formats
......
......@@ -26,7 +26,7 @@ still may be some details listed even for them:
TranslatorCzech
TranslatorDutch
TranslatorEnglish
TranslatorFinnish
TranslatorFinnish -- Change the base class to Translator.
TranslatorGerman
TranslatorItalian
TranslatorKorean
......@@ -70,6 +70,16 @@ version of the translator for the language:
TranslatorJapaneseEn implements 5 methods
TranslatorKoreanEn implements 5 methods
======================================================================
WARNING: The following translator methods are declared in the
Translator class but their identifiers do not appear in source files.
The situation should be checked. The .cpp files and .h files excluding
the '*translator*' files in doxygen/src directory were simply searched
for occurence of the method identifiers:
QCString trFunctionPrototypeDocumentation()
======================================================================
Details for translators (classes sorted alphabetically):
......@@ -183,6 +193,12 @@ TranslatorDanish (TranslatorAdapter_1_5_4) 22 methods to implement
virtual QCString trSubprogramDocumentation()
TranslatorFinnish (TranslatorEnglish)
-----------------
Implements 216 of the required methods.
TranslatorFrench (TranslatorAdapter_1_5_4) 22 methods to implement
----------------
......
This diff is collapsed.
......@@ -306,13 +306,10 @@ class ClassDef : public Definition
void mergeMembers();
void distributeMemberGroupDocumentation();
void writeDocumentation(OutputList &ol);
void writeClassDiagrams(OutputList &ol);
void writeDocumentationForInnerClasses(OutputList &ol);
void writeMemberDocumentation(OutputList &ol);
void writeMemberPages(OutputList &ol);
void writeMemberList(OutputList &ol);
void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup);
void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag);
void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const;
void reclassifyMember(MemberDef *md,MemberDef::MemberType t);
......@@ -333,6 +330,20 @@ class ClassDef : public Definition
const char *subTitle=0);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
void writePlainMemberDeclaration(OutputList &ol,MemberList::ListType lt,bool inGroup);
void writeBriefDescription(OutputList &ol,bool exampleFlag);
void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
const QCString &title);
void writeIncludeFiles(OutputList &ol);
void writeAllMembersLink(OutputList &ol);
void writeInheritanceGraph(OutputList &ol);
void writeCollaborationGraph(OutputList &ol);
void writeMemberGroups(OutputList &ol);
void writeNestedClasses(OutputList &ol,const QCString &title);
void startMemberDeclarations(OutputList &ol);
void endMemberDeclarations(OutputList &ol);
void startMemberDocumentation(OutputList &ol);
void endMemberDocumentation(OutputList &ol);
void writeAuthorSection(OutputList &ol);
ClassDefImpl *m_impl;
......
This diff is collapsed.
......@@ -94,7 +94,6 @@ void generateDEFForMember(MemberDef *md,
case MemberDef::Enumeration: memType="enum"; break;
case MemberDef::Function: memType="function"; isFunc=TRUE; break;
case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
......
......@@ -8,6 +8,7 @@
#include "language.h"
#include "message.h"
#include "dot.h"
#include "layout.h"
//----------------------------------------------------------------------
// method implementation
......@@ -107,25 +108,37 @@ QCString DirDef::getOutputFileBase() const
//return QCString().sprintf("dir_%06d",m_dirCount);
}
void DirDef::writeDetailedDocumentation(OutputList &ol)
void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if (!briefDescription().isEmpty() || !documentation().isEmpty())
if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!documentation().isEmpty())
{
ol.writeRuler();
ol.pushGeneratorState();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.disableAllBut(OutputGenerator::Html);
ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
ol.parseText(theTranslator->trDetailedDescription());
ol.parseText(title);
ol.endGroupHeader();
// repeat brief description
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
}
// separator between brief and details
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
{
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::RTF);
ol.newParagraph();
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
ol.writeString("\n\n");
ol.popGeneratorState();
}
// write documentation
......@@ -136,63 +149,39 @@ void DirDef::writeDetailedDocumentation(OutputList &ol)
}
}
void DirDef::writeDocumentation(OutputList &ol)
void DirDef::writeBriefDescription(OutputList &ol)
{
ol.pushGeneratorState();
QCString shortTitle=theTranslator->trDirReference(m_shortName);
QCString title=theTranslator->trDirReference(m_dispName);
startFile(ol,getOutputFileBase(),name(),title,HLI_None,TRUE);
// write navigation path
writeNavigationPath(ol);
ol.endQuickIndices();
ol.startContents();
startTitle(ol,getOutputFileBase());
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.parseText(shortTitle);
ol.enableAll();
ol.disable(OutputGenerator::Html);
ol.parseText(title);
ol.popGeneratorState();
endTitle(ol,getOutputFileBase(),title);
// write brief or details (if DETAILS_AT_TOP)
if (Config_getBool("DETAILS_AT_TOP"))
{
writeDetailedDocumentation(ol);
ol.newParagraph();
}
else if (!briefDescription().isEmpty())
if (!briefDescription().isEmpty())
{
ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
ol.writeString(" \n");
ol.pushGeneratorState();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
ol.writeString(" \n");
ol.enable(OutputGenerator::RTF);
if (Config_getBool("REPEAT_BRIEF") ||
!documentation().isEmpty()
)
{
ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(0,"_details");
ol.parseText(theTranslator->trMore());
ol.endTextLink();
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
ol.newParagraph();
ol.popGeneratorState();
}
ol.popGeneratorState();
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
Doxygen::tagFile << " <compound kind=\"dir\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl;
Doxygen::tagFile << " <path>" << convertToXML(name()) << "</path>" << endl;
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
ol.pushGeneratorState();
ol.disable(OutputGenerator::RTF);
ol.newParagraph();
ol.popGeneratorState();
}
ol.writeSynopsis();
}
void DirDef::writeDirectoryGraph(OutputList &ol)
{
// write graph dependency graph
if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT"))
if (/*Config_getBool("DIRECTORY_GRAPH") &&*/ Config_getBool("HAVE_DOT"))
{
DotDirDeps dirDep(this);
if (!dirDep.isTrivial())
......@@ -206,8 +195,10 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.enableAll();
}
}
}
ol.startMemberSections();
void DirDef::writeSubDirList(OutputList &ol)
{
// write subdir list
if (m_subdirs.count()>0)
{
......@@ -245,7 +236,10 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.endMemberList();
}
}
void DirDef::writeFileList(OutputList &ol)
{
// write file list
if (m_fileList->count()>0)
{
......@@ -303,22 +297,160 @@ void DirDef::writeDocumentation(OutputList &ol)
}
ol.endMemberList();
}
}
void DirDef::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
void DirDef::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
void DirDef::writeDocumentation(OutputList &ol)
{
ol.pushGeneratorState();
QCString shortTitle=theTranslator->trDirReference(m_shortName);
QCString title=theTranslator->trDirReference(m_dispName);
startFile(ol,getOutputFileBase(),name(),title,HLI_None,TRUE);
// write navigation path
writeNavigationPath(ol);
ol.endQuickIndices();
ol.startContents();
startTitle(ol,getOutputFileBase());
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.parseText(shortTitle);
ol.enableAll();
ol.disable(OutputGenerator::Html);
ol.parseText(title);
ol.popGeneratorState();
endTitle(ol,getOutputFileBase(),title);
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
writeDocAnchorsToTagFile();
Doxygen::tagFile << " </compound>" << endl;
Doxygen::tagFile << " <compound kind=\"dir\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl;
Doxygen::tagFile << " <path>" << convertToXML(name()) << "</path>" << endl;
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
}
//---------------------------------------- start flexible part -------------------------------
#define NEW_LAYOUT
#ifdef NEW_LAYOUT // new flexible layout
QListIterator<LayoutDocEntry> eli(
LayoutDocManager::instance().docEntries(LayoutDocManager::Directory));
LayoutDocEntry *lde;
for (eli.toFirst();(lde=eli.current());++eli)
{
switch (lde->kind())
{
case LayoutDocEntry::BriefDesc:
writeBriefDescription(ol);
break;
case LayoutDocEntry::DirGraph:
writeDirectoryGraph(ol);
break;
case LayoutDocEntry::MemberDeclStart:
startMemberDeclarations(ol);
break;
case LayoutDocEntry::DirSubDirs:
writeSubDirList(ol);
break;
case LayoutDocEntry::DirFiles:
writeFileList(ol);
break;
case LayoutDocEntry::MemberDeclEnd:
endMemberDeclarations(ol);
break;
case LayoutDocEntry::DetailedDesc:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeDetailedDescription(ol,ls->title);
}
break;
case LayoutDocEntry::ClassIncludes:
case LayoutDocEntry::ClassInheritanceGraph:
case LayoutDocEntry::ClassNestedClasses:
case LayoutDocEntry::ClassCollaborationGraph:
case LayoutDocEntry::ClassAllMembersLink:
case LayoutDocEntry::ClassUsedFiles:
case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::FileClasses:
case LayoutDocEntry::FileNamespaces:
case LayoutDocEntry::FileIncludes:
case LayoutDocEntry::FileIncludeGraph:
case LayoutDocEntry::FileIncludedByGraph:
case LayoutDocEntry::FileSourceLink:
case LayoutDocEntry::GroupClasses:
case LayoutDocEntry::GroupNamespaces:
case LayoutDocEntry::GroupDirs:
case LayoutDocEntry::GroupNestedGroups:
case LayoutDocEntry::GroupFiles:
case LayoutDocEntry::GroupGraph:
case LayoutDocEntry::GroupPageDocs:
case LayoutDocEntry::AuthorSection:
case LayoutDocEntry::MemberGroups:
case LayoutDocEntry::MemberDecl:
case LayoutDocEntry::MemberDef:
case LayoutDocEntry::MemberDefStart:
case LayoutDocEntry::MemberDefEnd:
err("Internal inconsistency: member %d should not be part of "
"LayoutDocManager::Directory entry list\n",lde->kind());
break;
}
}
#else
// write brief or details (if DETAILS_AT_TOP)
if (Config_getBool("DETAILS_AT_TOP"))
{
writeDetailedDescription(ol,theTranslator->trDetailedDescription());
}
else if (!briefDescription().isEmpty())
{
writeBriefDescription(ol);
}
writeDirectoryGraph(ol);
startMemberDeclarations(ol);
writeSubDirList(ol);
writeFileList(ol);
endMemberDeclarations(ol);
if (!Config_getBool("DETAILS_AT_TOP"))
{
writeDetailedDocumentation(ol);
writeDetailedDescription(ol,theTranslator->trDetailedDescription());
}
#endif
//---------------------------------------- end flexible part -------------------------------
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
writeDocAnchorsToTagFile();
Doxygen::tagFile << " </compound>" << endl;
}
endFile(ol);
ol.popGeneratorState();
}
#if 0
......
......@@ -68,7 +68,6 @@ class DirDef : public Definition
bool depGraphIsTrivial() const;
// generate output
void writeDetailedDocumentation(OutputList &ol);
void writeDocumentation(OutputList &ol);
void writeDepGraph(QTextStream &t);
......@@ -77,6 +76,15 @@ class DirDef : public Definition
private:
friend void computeDirDependencies();
void writeDetailedDescription(OutputList &ol,const QCString &title);
void writeBriefDescription(OutputList &ol);
void writeDirectoryGraph(OutputList &ol);
void writeSubDirList(OutputList &ol);
void writeFileList(OutputList &ol);
void startMemberDeclarations(OutputList &ol);
void endMemberDeclarations(OutputList &ol);
void setLevel();
static DirDef *createNewDir(const char *path);
static bool matchPath(const QCString &path,QStrList &l);
......
......@@ -329,8 +329,8 @@ void DocSets::addIndexItem(const char *, const char *,
type="enum"; break;
case MemberDef::EnumValue:
type="econst"; break;
case MemberDef::Prototype:
type="prototype"; break;
//case MemberDef::Prototype:
// type="prototype"; break;
case MemberDef::Signal:
type="signal"; break;
case MemberDef::Slot:
......
......@@ -842,12 +842,12 @@ void DotNode::writeXML(QTextStream &t,bool isClassGraph)
{
int p=0;
int ni;
while ((ni=edgeInfo->m_label.find("\\n",p))!=-1)
while ((ni=edgeInfo->m_label.find('\n',p))!=-1)
{
t << " <edgelabel>"
<< convertToXML(edgeInfo->m_label.mid(p,ni-p))
<< "</edgelabel>" << endl;
p=ni+2;
p=ni+1;
}
t << " <edgelabel>"
<< convertToXML(edgeInfo->m_label.right(edgeInfo->m_label.length()-p))
......
......@@ -76,6 +76,8 @@
#include "portable.h"
#include "vhdlscanner.h"
#include "layout.h"
#define RECURSE_ENTRYTREE(func,var) \
do { if (var->children()) { \
EntryNavListIterator eli(*var->children()); \
......@@ -7165,11 +7167,11 @@ static void generateClassDocs()
msg("Generating annotated compound index...\n");
writeAnnotatedIndex(*outputList);
if (Config_getBool("ALPHABETICAL_INDEX"))
{
//if (Config_getBool("ALPHABETICAL_INDEX"))
//{
msg("Generating alphabetical compound index...\n");
writeAlphabeticalIndex(*outputList);
}
//}
msg("Generating hierarchical class index...\n");
writeHierarchicalIndex(*outputList);
......@@ -8910,11 +8912,14 @@ static void usage(const char *name)
msg("configuration file:\n");
msg(" %s [configName]\n\n",name);
msg(" If - is used for configName doxygen will read from standard input.\n\n");
msg("4) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
msg("4) Use doxygen to generate a template file controlling the layout of the\n");
msg(" generated documentation:\n");
msg(" %s -l layoutFileName.xml\n\n",name);
msg("5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
msg(" RTF: %s -w rtf styleSheetFile\n",name);
msg(" HTML: %s -w html headerFile footerFile styleSheetFile [configFile]\n",name);
msg(" LaTeX: %s -w latex headerFile styleSheetFile [configFile]\n\n",name);
msg("5) Use doxygen to generate an rtf extensions file\n");
msg("6) Use doxygen to generate an rtf extensions file\n");
msg(" RTF: %s -e rtf extensionsFile\n\n",name);
msg("If -s is specified the comments in the config file will be omitted.\n");
msg("If configName is omitted `Doxyfile' will be used as a default.\n\n");
......@@ -8957,10 +8962,8 @@ void initDoxygen()
Doxygen::parserManager->registerParser(".f90", new FortranLanguageScanner);
Doxygen::parserManager->registerParser(".vhd", new VHDLLanguageScanner);
// register any additional parsers here...
initClassMemberIndices();
initNamespaceMemberIndices();
initFileMemberIndices();
......@@ -9028,11 +9031,13 @@ void readConfiguration(int argc, char **argv)
int optind=1;
const char *configName=0;
const char *layoutName=0;
const char *debugLabel;
const char *formatName;
bool genConfig=FALSE;
bool shortList=FALSE;
bool updateConfig=FALSE;
bool genLayout=FALSE;
while (optind<argc && argv[optind][0]=='-' &&
(isalpha(argv[optind][1]) || argv[optind][1]=='?' ||
argv[optind][1]=='-')
......@@ -9048,6 +9053,12 @@ void readConfiguration(int argc, char **argv)
if (!configName)
{ configName="Doxyfile"; }
break;
case 'l':
genLayout=TRUE;
layoutName=getArg(argc,argv,optind);
if (!layoutName)
{ layoutName="doxygenlayout.xml"; }
break;
case 'd':
debugLabel=getArg(argc,argv,optind);
Debug::setFlag(debugLabel);
......@@ -9251,6 +9262,12 @@ void readConfiguration(int argc, char **argv)
cleanUpDoxygen();
exit(0);
}
if (genLayout)
{
writeDefaultLayoutFile(layoutName);
cleanUpDoxygen();
exit(0);
}
QFileInfo configFileInfo1("Doxyfile"),configFileInfo2("doxyfile");
if (optind>=argc)
......@@ -9301,6 +9318,7 @@ void readConfiguration(int argc, char **argv)
/* Perlmod wants to know the path to the config file.*/
QFileInfo configFileInfo(configName);
setPerlModDoxyfile(configFileInfo.absFilePath());
}
void checkConfiguration()
......@@ -9584,6 +9602,31 @@ void parseInput()
cleanUpDoxygen();
exit(1);
}
/**************************************************************************
* Handle layout file *
**************************************************************************/
LayoutDocManager::instance().init();
QCString layoutFileName = Config_getString("LAYOUT_FILE");
bool defaultLayoutUsed = FALSE;
if (layoutFileName.isEmpty())
{
layoutFileName = "doxygenlayout.xml";
defaultLayoutUsed = TRUE;
}
QFile layoutFile(layoutFileName);
if (layoutFile.open(IO_ReadOnly))
{
msg("Parsing layout file %s...\n",layoutFileName.data());
QTextStream t(&layoutFile);
LayoutDocManager::instance().parse(t);
}
else if (!defaultLayoutUsed)
{
err("Warning: failed to open layout file '%s' for reading!\n",layoutFileName.data());
}
/**************************************************************************
* Read and preprocess input *
**************************************************************************/
......@@ -9963,6 +10006,8 @@ void parseInput()
msg("Combining using relations...\n");
combineUsingRelations();
msg("Adding members to index pages...\n");
addMembersToIndex();
}
void generateOutput()
......@@ -10107,7 +10152,6 @@ void generateOutput()
writeGroupIndex(*outputList);
msg("Generating class documentation...\n");
addMembersToIndex();
generateClassDocs();
if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
......
......@@ -245,6 +245,7 @@ QCString unhtmlify(const char *str)
}
<Start>^"<td"[^\n]*"<h1 align=center>" | // Qt-3.x.x
<Start>"</table><h1 align=\"center\">" | // Qt-4
<Start>"</table><h1 class=\"title\">" | // >Qt-4.4.0
<Start>^"<h1 align=center>" { // Qt variant
BEGIN( ReadClassName );
}
......
This diff is collapsed.
......@@ -126,9 +126,7 @@ class FileDef : public Definition
bool isJava() const { return m_isJava; }
void writeDetailedDocumentation(OutputList &ol);
void writeDocumentation(OutputList &ol);
void writeMemberDocumentation(OutputList &ol);
void writeMemberPages(OutputList &ol);
void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
......@@ -188,6 +186,20 @@ class FileDef : public Definition
void addMemberToList(MemberList::ListType lt,MemberDef *md);
void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
void writeIncludeFiles(OutputList &ol);
void writeIncludeGraph(OutputList &ol);
void writeIncludedByGraph(OutputList &ol);
void writeMemberGroups(OutputList &ol);
void writeAuthorSection(OutputList &ol);
void writeSourceLink(OutputList &ol);
void writeNamespaceDeclarations(OutputList &ol,const QCString &title);
void writeClassDeclarations(OutputList &ol,const QCString &title);
void startMemberDeclarations(OutputList &ol);
void endMemberDeclarations(OutputList &ol);
void startMemberDocumentation(OutputList &ol);
void endMemberDocumentation(OutputList &ol);
void writeDetailedDescription(OutputList &ol,const QCString &title);
void writeBriefDescription(OutputList &ol);
QDict<IncludeInfo> *includeDict;
QList<IncludeInfo> *includeList;
......
This diff is collapsed.
......@@ -62,9 +62,7 @@ class GroupDef : public Definition
bool insertMember(MemberDef *def,bool docOnly=FALSE);
void removeMember(MemberDef *md);
bool containsGroup(const GroupDef *def); // true if def is already a subgroup
void writeDetailedDocumentation(OutputList &ol);
void writeDocumentation(OutputList &ol);
void writeMemberDocumentation(OutputList &ol);
void writeMemberPages(OutputList &ol);
void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
int countMembers() const;
......@@ -116,6 +114,21 @@ class GroupDef : public Definition
void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
void removeMemberFromList(MemberList::ListType lt,MemberDef *md);
void writeGroupGraph(OutputList &ol);
void writeFiles(OutputList &ol,const QCString &title);
void writeNamespaces(OutputList &ol,const QCString &title);
void writeNestedGroups(OutputList &ol,const QCString &title);
void writeDirs(OutputList &ol,const QCString &title);
void writeClasses(OutputList &ol,const QCString &title);
void writePageDocumentation(OutputList &ol);
void writeDetailedDescription(OutputList &ol,const QCString &title);
void writeBriefDescription(OutputList &ol);
void writeMemberGroups(OutputList &ol);
void startMemberDeclarations(OutputList &ol);
void endMemberDeclarations(OutputList &ol);
void startMemberDocumentation(OutputList &ol);
void endMemberDocumentation(OutputList &ol);
void writeAuthorSection(OutputList &ol);
QCString title; // title of the group
bool titleSet; // true if title is not the same as the name
......
......@@ -37,6 +37,7 @@
#include "debug.h"
#include "dirdef.h"
#include "vhdldocgen.h"
#include "layout.h"
// #define GROUP_COLOR "#ff8080"
......@@ -1731,6 +1732,178 @@ static QCString fixSpaces(const QCString &s)
return substitute(s," ","&nbsp;");
}
#define NEW_LAYOUT
#ifdef NEW_LAYOUT
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
{
switch (kind)
{
case LayoutNavEntry::MainPage: return TRUE;
case LayoutNavEntry::Pages: return indexedPages>0;
case LayoutNavEntry::Modules: return documentedGroups>0;
case LayoutNavEntry::Namespaces: return documentedNamespaces>0;
case LayoutNavEntry::NamespaceMembers: return documentedNamespaceMembers[NMHL_All]>0;
case LayoutNavEntry::Classes: return annotatedClasses>0;
case LayoutNavEntry::ClassAnnotated: return annotatedClasses>0;
case LayoutNavEntry::ClassHierarchy: return hierarchyClasses>0;
case LayoutNavEntry::ClassMembers: return documentedClassMembers[CMHL_All]>0;
case LayoutNavEntry::Files: return documentedHtmlFiles>0;
case LayoutNavEntry::FileGlobals: return documentedFileMembers[FMHL_All]>0;
case LayoutNavEntry::Dirs: return documentedDirs>0;
case LayoutNavEntry::Examples: return Doxygen::exampleSDict->count()>0;
}
return FALSE;
}
static void renderQuickLinksAsTree(QTextStream &t,const QCString &relPath,LayoutNavEntry *root)
{
QListIterator<LayoutNavEntry> li(root->children());
LayoutNavEntry *entry;
int count=0;
for (li.toFirst();(entry=li.current());++li)
{
if (entry->visible() && quickLinkVisible(entry->kind())) count++;
}
if (count>0) // at least one item is visible
{
startQuickIndexList(t,FALSE);
for (li.toFirst();(entry=li.current());++li)
{
if (entry->visible() && quickLinkVisible(entry->kind()))
{
startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
FALSE,FALSE,relPath);
t << fixSpaces(entry->title());
endQuickIndexItem(t);
// recursive into child list
renderQuickLinksAsTree(t,relPath,entry);
}
}
endQuickIndexList(t,FALSE);
}
}
static void renderQuickLinksAsTabs(QTextStream &t,const QCString &relPath,
LayoutNavEntry *hlEntry,LayoutNavEntry::Kind kind,
bool highlightParent,bool highlightSearch)
{
if (hlEntry->parent()) // first draw the tabs for the parent of hlEntry
{
renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
}
if (hlEntry->parent() && hlEntry->parent()->children().count()>0) // draw tabs for row containing hlEntry
{
QListIterator<LayoutNavEntry> li(hlEntry->parent()->children());
LayoutNavEntry *entry;
int count=0;
for (li.toFirst();(entry=li.current());++li)
{
if (entry->visible() && quickLinkVisible(entry->kind())) count++;
}
if (count>0) // at least one item is visible
{
startQuickIndexList(t,TRUE);
for (li.toFirst();(entry=li.current());++li)
{
if (entry->visible() && quickLinkVisible(entry->kind()))
{
startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
entry==hlEntry && (entry->children().count()>0 || (entry->kind()==kind && !highlightParent)),
TRUE,relPath);
t << fixSpaces(entry->title());
endQuickIndexItem(t);
}
}
if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry())
{
// last item of the top row -> special case for search engine
if (Config_getBool("SEARCHENGINE"))
{
QCString searchFor = fixSpaces(theTranslator->trSearchForIndex());
if (searchFor.at(0)=='S') searchFor="<u>S</u>"+searchFor.mid(1);
t << " <li>\n";
t << " <form action=\"" << relPath << "search.php\" method=\"get\">\n";
t << " <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
t << " <tr>\n";
t << " <td><label>&nbsp;" << searchFor << "&nbsp;</label></td>\n";
if (!highlightSearch)
{
t << " <td><input type=\"text\" name=\"query\" value=\"\" size=\"20\" accesskey=\"s\"/></td>\n";
t << " </tr>\n";
t << " </table>\n";
t << " </form>\n";
t << " </li>\n";
}
}
if (!highlightSearch) // on the search page the page will be ended by the
// page itself
{
endQuickIndexList(t,TRUE);
}
}
else // normal case
{
endQuickIndexList(t,TRUE);
}
}
}
}
static void writeDefaultQuickLinks(QTextStream &t,bool compact,
HighlightedItem hli,const QCString &relPath)
{
LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry();
LayoutNavEntry::Kind kind = (LayoutNavEntry::Kind)-1;
bool highlightParent=FALSE;
switch (hli) // map HLI enums to LayoutNavEntry::Kind enums
{
case HLI_Main: kind = LayoutNavEntry::MainPage; break;
case HLI_Modules: kind = LayoutNavEntry::Modules; break;
case HLI_Directories: kind = LayoutNavEntry::Dirs; break;
case HLI_Namespaces: kind = LayoutNavEntry::Namespaces; break;
case HLI_Hierarchy: kind = LayoutNavEntry::ClassHierarchy; break;
case HLI_Classes: kind = LayoutNavEntry::Classes; break;
case HLI_Annotated: kind = LayoutNavEntry::ClassAnnotated; break;
case HLI_Files: kind = LayoutNavEntry::Files; break;
case HLI_NamespaceMembers: kind = LayoutNavEntry::NamespaceMembers; break;
case HLI_Functions: kind = LayoutNavEntry::ClassMembers; break;
case HLI_Globals: kind = LayoutNavEntry::FileGlobals; break;
case HLI_Pages: kind = LayoutNavEntry::Pages; break;
case HLI_Examples: kind = LayoutNavEntry::Examples; break;
case HLI_ClassVisible: kind = LayoutNavEntry::Classes; highlightParent = TRUE; break;
case HLI_NamespaceVisible: kind = LayoutNavEntry::Namespaces; highlightParent = TRUE; break;
case HLI_FileVisible: kind = LayoutNavEntry::Files; highlightParent = TRUE; break;
case HLI_None: break;
case HLI_Search: break;
}
if (compact)
{
// find highlighted index item
LayoutNavEntry *hlEntry = root->find(kind);
if (!hlEntry) // highlighted item not found in the index! -> just show the level 1 index...
{
highlightParent=TRUE;
hlEntry = root->children().getFirst();
if (hlEntry==0)
{
return; // argl, empty index!
}
}
renderQuickLinksAsTabs(t,relPath,hlEntry,kind,highlightParent,hli==HLI_Search);
}
else
{
renderQuickLinksAsTree(t,relPath,root);
}
}
#else // old fixed layout
static void writeNamespaceSubIndex(QTextStream &t,bool compact,
HighlightedItem hli,const QCString &relPath
)
......@@ -1957,7 +2130,6 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
}
}
// -------------- File
if (documentedHtmlFiles>0)
......@@ -2047,6 +2219,7 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
}
}
#endif
void HtmlGenerator::startQuickIndices()
{
......
......@@ -220,7 +220,7 @@ bool setTranslator(const char *langName)
#ifdef LANG_FI
else if (L_EQUAL("finnish"))
{
theTranslator=new TranslatorDecoder(new TranslatorFinnish);
theTranslator=new TranslatorFinnish;
}
#endif
#ifdef LANG_RU
......
......@@ -26,6 +26,7 @@
#include "message.h"
#include "parserintf.h"
#include "msc.h"
#include "htmlattrib.h"
static QString escapeLabelName(const char *s)
{
......@@ -57,6 +58,21 @@ static const char *getSectionName(int level)
return secLabels[QMIN(maxLevels-1,l)];
}
static int rowspan(DocHtmlCell *cell)
{
int retval = 0;
HtmlAttribList attrs = cell->attribs ();
for (unsigned int i = 0; i < attrs.count(); ++i)
{
if ("rowspan" == attrs.at(i)->name.lower())
{
retval = attrs.at(i)->value.toInt();
break;
}
}
return retval;
}
QString LatexDocVisitor::escapeMakeIndexChars(const char *s)
{
QString result;
......@@ -84,7 +100,7 @@ LatexDocVisitor::LatexDocVisitor(QTextStream &t,CodeOutputInterface &ci,
const char *langExt,bool insideTabbing)
: DocVisitor(DocVisitor_Latex), m_t(t), m_ci(ci), m_insidePre(FALSE),
m_insideItem(FALSE), m_hide(FALSE), m_insideTabbing(insideTabbing),
m_langExt(langExt)
m_langExt(langExt), m_currentColumn(0), m_inRowspan(FALSE)
{
}
......@@ -672,6 +688,7 @@ void LatexDocVisitor::visitPost(DocHtmlDescData *)
void LatexDocVisitor::visitPre(DocHtmlTable *t)
{
m_rowspanIndices.clear();
if (m_hide) return;
if (t->hasCaption())
{
......@@ -707,21 +724,65 @@ void LatexDocVisitor::visitPost(DocHtmlCaption *)
void LatexDocVisitor::visitPre(DocHtmlRow *)
{
m_currentColumn = 0;
}
void LatexDocVisitor::visitPost(DocHtmlRow *)
{
if (m_hide) return;
m_t << "\\\\\\hline\n";
m_t << "\\\\";
QMap<int, int>::Iterator it;
int col = 1;
for (it = m_rowspanIndices.begin(); it != m_rowspanIndices.end(); ++it)
{
it.data()--;
if (it.data () <= 0)
m_rowspanIndices.remove (it);
else if (0 < it.data() - col)
m_t << "\\cline{" << col << "-" << it.data() - col << "}";
col = 1 + it.data ();
}
if (col <= m_currentColumn)
m_t << "\\cline{" << col << "-" << m_currentColumn << "}";
m_t << "\n";
}
void LatexDocVisitor::visitPre(DocHtmlCell *)
void LatexDocVisitor::visitPre(DocHtmlCell *cell)
{
if (m_hide) return;
m_currentColumn++;
//Skip columns that span from above.
QMap<int, int>::Iterator it = m_rowspanIndices.find(m_currentColumn);
while (0 < it.data() && it != m_rowspanIndices.end())
{
m_t << "&";
m_currentColumn++;
it++;
}
int rs = rowspan(cell);
if (0 < rs)
{
m_inRowspan = TRUE;
m_rowspanIndices[m_currentColumn] = rs;
m_t << "\\multirow{" << rs << "}{\\linewidth}{";
}
}
void LatexDocVisitor::visitPost(DocHtmlCell *c)
{
if (m_hide) return;
if (m_inRowspan)
{
m_inRowspan = FALSE;
m_t << "}";
}
if (!c->isLast()) m_t << "&";
}
......
......@@ -22,6 +22,7 @@
#include "docvisitor.h"
#include <qstack.h>
#include <qcstring.h>
#include <qmap.h>
class QTextStream;
class CodeOutputInterface;
......@@ -160,6 +161,9 @@ class LatexDocVisitor : public DocVisitor
bool m_insideTabbing;
QStack<bool> m_enabled;
QCString m_langExt;
QMap<int, int> m_rowspanIndices;
int m_currentColumn;
bool m_inRowspan;
};
#endif
This diff is collapsed.
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2008 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef LAYOUT_H
#define LAYOUT_H
#include "qtbc.h"
#include "memberlist.h"
#include <qlist.h>
class LayoutParser;
/** @brief Base class representing a piece of a documentation page */
struct LayoutDocEntry
{
virtual ~LayoutDocEntry() {}
enum Kind {
// Generic items for all pages
MemberGroups,
MemberDeclStart, MemberDeclEnd, MemberDecl,
MemberDefStart, MemberDefEnd, MemberDef,
BriefDesc, DetailedDesc,
AuthorSection,
// Class specific items
ClassIncludes,
ClassInheritanceGraph, ClassNestedClasses,
ClassCollaborationGraph, ClassAllMembersLink,
ClassUsedFiles,
// Namespace specific items
NamespaceNestedNamespaces, NamespaceClasses,
// File specific items
FileClasses, FileNamespaces,
FileIncludes, FileIncludeGraph,
FileIncludedByGraph, FileSourceLink,
// Group specific items
GroupClasses, GroupNamespaces,
GroupDirs, GroupNestedGroups, GroupFiles,
GroupGraph, GroupPageDocs,
// Directory specific items
DirSubDirs, DirFiles, DirGraph
};
virtual Kind kind() const = 0;
};
/** @brief Represents of a piece of a documentation page without configurable parts */
struct LayoutDocEntrySimple : LayoutDocEntry
{
public:
LayoutDocEntrySimple(Kind k) : m_kind(k) {}
Kind kind() const { return m_kind; }
private:
Kind m_kind;
};
struct LayoutDocEntrySection: public LayoutDocEntrySimple
{
LayoutDocEntrySection(Kind k,const QCString &tl) :
LayoutDocEntrySimple(k), title(tl) {}
QCString title;
};
/** @brief Represents of a member declaration list with configurable title and subtitle. */
struct LayoutDocEntryMemberDecl: public LayoutDocEntry
{
LayoutDocEntryMemberDecl(MemberList::ListType tp,
const QCString &tl,const QCString &ss)
: type(tp), title(tl),subscript(ss) {}
Kind kind() const { return MemberDecl; }
MemberList::ListType type;
QCString title;
QCString subscript;
};
/** @brief Represents of a member definition list with configurable title. */
struct LayoutDocEntryMemberDef: public LayoutDocEntry
{
LayoutDocEntryMemberDef(MemberList::ListType tp,const QCString &tl)
: type(tp), title(tl) {}
Kind kind() const { return MemberDef; }
MemberList::ListType type;
QCString title;
};
/** @brief Base class for the layout of a navigation item at the top of the HTML pages. */
struct LayoutNavEntry
{
public:
enum Kind {
MainPage,
Pages,
Modules,
Namespaces,
NamespaceMembers,
Classes,
ClassAnnotated,
ClassHierarchy,
ClassMembers,
Files,
FileGlobals,
Dirs,
Examples
};
LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QString &bf, const QString &tl,bool prepend=FALSE)
: m_parent(parent), m_kind(k), m_visible(vs), m_baseFile(bf), m_title(tl)
{ m_children.setAutoDelete(TRUE);
if (parent) { if (prepend) parent->prependChild(this); else parent->addChild(this); }
}
LayoutNavEntry *parent() const { return m_parent; }
Kind kind() const { return m_kind; }
QCString baseFile() const { return m_baseFile; }
QCString title() const { return m_title; }
bool visible() { return m_visible; }
void clear() { m_children.clear(); }
void addChild(LayoutNavEntry *e) { m_children.append(e); }
void prependChild(LayoutNavEntry *e) { m_children.prepend(e); }
const QList<LayoutNavEntry> &children() const { return m_children; }
LayoutNavEntry *find(LayoutNavEntry::Kind k) const;
private:
LayoutNavEntry() : m_parent(0) {}
LayoutNavEntry *m_parent;
Kind m_kind;
bool m_visible;
QCString m_baseFile;
QCString m_title;
QList<LayoutNavEntry> m_children;
friend class LayoutDocManager;
};
/** @brief Singleton providing access to the (user configurable) layout of the documentation */
class LayoutDocManager
{
class Private;
public:
enum LayoutPart
{
Class, Namespace, File, Group, Directory,
NrParts
};
/** Returns a reference to this singleton. */
static LayoutDocManager &instance();
/** Returns the list of LayoutDocEntry's in representation order for a given page identified by @a part. */
const QList<LayoutDocEntry> &docEntries(LayoutPart part) const;
/** returns the (invisible) root of the navigation tree. */
LayoutNavEntry *rootNavEntry() const;
/** Parses a user provided layout */
void parse(QTextStream &t);
void init();
private:
void addEntry(LayoutPart p,LayoutDocEntry*e);
void clear(LayoutPart p);
LayoutDocManager();
~LayoutDocManager();
Private *d;
friend class LayoutParser;
};
void writeDefaultLayoutFile(const char *fileName);
#endif
"<doxygenlayout version=\"1.0\">\n"
" <!-- Navigation index tabs for HTML output -->\n"
" <navindex>\n"
" <tab type=\"mainpage\" visible=\"yes\" title=\"\"/>\n"
" <tab type=\"pages\" visible=\"yes\" title=\"\"/>\n"
" <tab type=\"modules\" visible=\"yes\" title=\"\"/>\n"
" <tab type=\"namespaces\" visible=\"yes\" title=\"\">\n"
" <tab type=\"namespaces\" visible=\"yes\" title=\"\"/>\n"
" <tab type=\"namespacemembers\" visible=\"yes\" title=\"\"/>\n"
" </tab>\n"
" <tab type=\"classes\" visible=\"yes\" title=\"\">\n"
" <tab type=\"classes\" visible=\"yes\" title=\"\"/>\n"
" <tab type=\"classindex\" visible=\"no\" title=\"\"/> \n"
" <tab type=\"hierarchy\" visible=\"yes\" title=\"\"/>\n"
" <tab type=\"classmembers\" visible=\"yes\" title=\"\"/>\n"
" </tab>\n"
" <tab type=\"files\" visible=\"yes\" title=\"\">\n"
" <tab type=\"files\" visible=\"yes\" title=\"\"/>\n"
" <tab type=\"globals\" visible=\"yes\" title=\"\"/>\n"
" </tab>\n"
" <tab type=\"dirs\" visible=\"yes\" title=\"\"/>\n"
" <tab type=\"examples\" visible=\"yes\" title=\"\"/> \n"
" </navindex>\n"
"\n"
" <!-- Layout definition for a class page -->\n"
" <class>\n"
" <briefdescription visible=\"yes\"/>\n"
" <includes visible=\"yes\"/>\n"
" <inheritancegraph visible=\"yes\"/>\n"
" <collaborationgraph visible=\"yes\"/>\n"
" <allmemberslink visible=\"yes\"/>\n"
" <memberdecl>\n"
" <membergroups visible=\"yes\"/>\n"
" <nestedclasses visible=\"yes\" title=\"\"/>\n"
" <publictypes title=\"\"/>\n"
" <publicslots title=\"\"/>\n"
" <signals title=\"\"/>\n"
" <publicmethods title=\"\"/>\n"
" <publicstaticmethods title=\"\"/>\n"
" <publicattributes title=\"\"/>\n"
" <publicstaticattributes title=\"\"/>\n"
" <protectedtypes title=\"\"/>\n"
" <protectedslots title=\"\"/>\n"
" <protectedmethods title=\"\"/>\n"
" <protectedstaticmethods title=\"\"/>\n"
" <protectedattributes title=\"\"/>\n"
" <protectedstaticattributes title=\"\"/>\n"
" <packagetypes title=\"\"/>\n"
" <packagemethods title=\"\"/>\n"
" <packagestaticmethods title=\"\"/>\n"
" <packageattributes title=\"\"/>\n"
" <packagestaticattributes title=\"\"/>\n"
" <properties title=\"\"/>\n"
" <events title=\"\"/>\n"
" <privatetypes title=\"\"/>\n"
" <privateslots title=\"\"/>\n"
" <privatemethods title=\"\"/>\n"
" <privatestaticmethods title=\"\"/>\n"
" <privateattributes title=\"\"/>\n"
" <privatestaticattributes title=\"\"/>\n"
" <friends title=\"\"/>\n"
" <related title=\"\" subtitle=\"\"/>\n"
" </memberdecl>\n"
" <detaileddescription title=\"\"/>\n"
" <memberdef>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
" <constructors title=\"\"/>\n"
" <functions title=\"\"/>\n"
" <related title=\"\"/>\n"
" <variables title=\"\"/>\n"
" <properties title=\"\"/>\n"
" <events title=\"\"/>\n"
" </memberdef>\n"
" <usedfiles visible=\"yes\"/>\n"
" <authorsection visible=\"yes\"/>\n"
" </class>\n"
"\n"
" <!-- Layout definition for a namespace page -->\n"
" <namespace>\n"
" <briefdescription visible=\"yes\"/>\n"
" <memberdecl>\n"
" <nestednamespaces visible=\"yes\" title=\"\"/>\n"
" <classes visible=\"yes\" title=\"\"/>\n"
" <membergroups visible=\"yes\"/>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
" <functions title=\"\"/>\n"
" <variables title=\"\"/>\n"
" </memberdecl>\n"
" <detaileddescription title=\"\"/>\n"
" <memberdef>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
" <functions title=\"\"/>\n"
" <variables title=\"\"/>\n"
" </memberdef>\n"
" <authorsection visible=\"yes\"/>\n"
" </namespace>\n"
"\n"
" <!-- Layout definition for a file page -->\n"
" <file>\n"
" <briefdescription visible=\"yes\"/>\n"
" <includes visible=\"yes\"/>\n"
" <includegraph visible=\"yes\"/>\n"
" <includedbygraph visible=\"yes\"/>\n"
" <sourcelink visible=\"yes\"/>\n"
" <memberdecl>\n"
" <classes visible=\"yes\" title=\"\"/>\n"
" <namespaces visible=\"yes\" title=\"\"/>\n"
" <defines title=\"\"/>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
" <functions title=\"\"/>\n"
" <variables title=\"\"/>\n"
" </memberdecl>\n"
" <detaileddescription title=\"\"/>\n"
" <memberdef>\n"
" <defines title=\"\"/>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
" <functions title=\"\"/>\n"
" <variables title=\"\"/>\n"
" </memberdef>\n"
" <authorsection/>\n"
" </file>\n"
"\n"
" <!-- Layout definition for a group page -->\n"
" <group>\n"
" <briefdescription visible=\"yes\"/>\n"
" <groupgraph visible=\"yes\"/>\n"
" <memberdecl>\n"
" <classes visible=\"yes\" title=\"\"/>\n"
" <namespaces visible=\"yes\" title=\"\"/>\n"
" <dirs visible=\"yes\" title=\"\"/>\n"
" <nestedgroups visible=\"yes\" title=\"\"/>\n"
" <files visible=\"yes\" title=\"\"/>\n"
" <defines title=\"\"/>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
" <enumvalues title=\"\"/>\n"
" <functions title=\"\"/>\n"
" <variables title=\"\"/>\n"
" <signals title=\"\"/>\n"
" <publicslots title=\"\"/>\n"
" <protectedslots title=\"\"/>\n"
" <privateslots title=\"\"/>\n"
" <events title=\"\"/>\n"
" <properties title=\"\"/>\n"
" <friends title=\"\"/>\n"
" </memberdecl>\n"
" <detaileddescription title=\"\"/>\n"
" <memberdef>\n"
" <pagedocs/>\n"
" <defines title=\"\"/>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
" <enumvalues title=\"\"/>\n"
" <functions title=\"\"/>\n"
" <variables title=\"\"/>\n"
" <signals title=\"\"/>\n"
" <publicslots title=\"\"/>\n"
" <protectedslots title=\"\"/>\n"
" <privateslots title=\"\"/>\n"
" <events title=\"\"/>\n"
" <properties title=\"\"/>\n"
" <friends title=\"\"/>\n"
" </memberdef>\n"
" <authorsection visible=\"yes\"/>\n"
" </group>\n"
"\n"
" <!-- Layout definition for a directory page -->\n"
" <directory>\n"
" <briefdescription visible=\"yes\"/>\n"
" <directorygraph visible=\"yes\"/>\n"
" <memberdecl>\n"
" <dirs visible=\"yes\"/>\n"
" <files visible=\"yes\"/>\n"
" </memberdecl>\n"
" <detaileddescription title=\"\"/>\n"
" </directory>\n"
"</doxygenlayout>\n"
This diff is collapsed.
......@@ -61,6 +61,8 @@ HEADERS = bufstr.h \
language.h \
latexdocvisitor.h \
latexgen.h \
layout.h \
layout_default.h \
lockingptr.h \
logos.h \
mandocvisitor.h \
......@@ -178,6 +180,7 @@ SOURCES = ce_lex.cpp \
language.cpp \
latexdocvisitor.cpp \
latexgen.cpp \
layout.cpp \
logos.cpp \
mandocvisitor.cpp \
mangen.cpp \
......
......@@ -105,6 +105,9 @@ index_xsd.h: index.xsd
compound_xsd.h: compound.xsd
cat compound.xsd | $(TO_C_CMD) >compound_xsd.h
layout_default.h: layout_default.xml
cat layout_default.xml | $(TO_C_CMD) >layout_default.h
search_php.h: search.php
cat search.php | $(TO_C_CMD) >search_php.h
......
......@@ -1102,7 +1102,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
case Enumeration: Doxygen::tagFile << "enumeration"; break;
case Function: Doxygen::tagFile << "function"; break;
case Signal: Doxygen::tagFile << "signal"; break;
case Prototype: Doxygen::tagFile << "prototype"; break;
//case Prototype: Doxygen::tagFile << "prototype"; break;
case Friend: Doxygen::tagFile << "friend"; break;
case DCOP: Doxygen::tagFile << "dcop"; break;
case Slot: Doxygen::tagFile << "slot"; break;
......@@ -2320,7 +2320,6 @@ QCString MemberDef::memberTypeName() const
case Typedef: return "typedef";
case Enumeration: return "enumeration";
case EnumValue: return "enumvalue";
case Prototype: return "prototype";
case Signal: return "signal";
case Slot: return "slot";
case Friend: return "friend";
......
......@@ -57,7 +57,6 @@ class MemberDef : public Definition
Typedef,
Enumeration,
EnumValue,
Prototype,
Signal,
Slot,
Friend,
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -1430,7 +1430,7 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
case MemberDef::Enumeration: memType="enum"; break;
case MemberDef::Function: memType="function"; isFunc=TRUE; break;
case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
//case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
......
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