From 5dfd148b5f3dfe5db7691b8dca017c828e800a3c Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Tue, 19 Aug 2008 13:23:22 +0000 Subject: Release-1.5.6-20080819 --- Doxyfile | 26 +- INSTALL | 4 +- Makefile.in | 3 +- README | 4 +- addon/doxmlparser/include/doxmlintf.h | 2 + addon/doxmlparser/src/dochandler.cpp | 1 - addon/doxmlparser/src/mainhandler.cpp | 6 +- addon/doxmlparser/src/stringimpl.h | 2 + configure | 2 +- doc/Doxyfile | 2 +- doc/config.doc | 43 +- doc/customize.doc | 248 ++++++++ doc/diagrams.doc | 31 +- doc/doxygen_manual.tex | 1 + doc/index.doc | 2 + doc/infoflow.eps | 401 ++++++------ doc/infoflow.fig | 160 ++--- doc/infoflow.gif | Bin 24468 -> 13383 bytes doc/language.doc | 7 +- doc/maintainers.txt | 1 + doc/output.doc | 2 +- doc/translator_report.txt | 18 +- src/classdef.cpp | 543 ++++++++++------ src/classdef.h | 17 +- src/config.l | 185 +++--- src/defgen.cpp | 1 - src/dirdef.cpp | 248 ++++++-- src/dirdef.h | 10 +- src/docsets.cpp | 4 +- src/dot.cpp | 4 +- src/doxygen.cpp | 60 +- src/doxytag.l | 1 + src/filedef.cpp | 511 +++++++++------ src/filedef.h | 16 +- src/groupdef.cpp | 458 ++++++++++---- src/groupdef.h | 17 +- src/htmlgen.cpp | 175 ++++- src/language.cpp | 2 +- src/latexdocvisitor.cpp | 67 +- src/latexdocvisitor.h | 4 + src/layout.cpp | 1121 +++++++++++++++++++++++++++++++++ src/layout.h | 187 ++++++ src/layout_default.h | 182 ++++++ src/layout_default.xml | 182 ++++++ src/libdoxygen.pro.in | 3 + src/libdoxygen.t | 3 + src/memberdef.cpp | 3 +- src/memberdef.h | 1 - src/memberlist.cpp | 4 +- src/namespacedef.cpp | 329 +++++++--- src/namespacedef.h | 14 +- src/perlmodgen.cpp | 2 +- src/pre.l | 7 +- src/qtbc.h | 2 +- src/translator_fi.h | 371 +++++------ src/translator_ro.h | 26 +- src/xmlgen.cpp | 1 - 57 files changed, 4421 insertions(+), 1306 deletions(-) create mode 100644 doc/customize.doc create mode 100644 src/layout.cpp create mode 100644 src/layout.h create mode 100644 src/layout_default.h create mode 100644 src/layout_default.xml diff --git a/Doxyfile b/Doxyfile index c9143e3..1ba1628 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,4 +1,4 @@ -# 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 = diff --git a/INSTALL b/INSTALL index abe6f0a..eb27c2d 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ -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) diff --git a/Makefile.in b/Makefile.in index 8f472c1..31ea1b3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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) diff --git a/README b/README index b2d8671..2063e27 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -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) diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h index 79d7bc7..88cb2e3 100644 --- a/addon/doxmlparser/include/doxmlintf.h +++ b/addon/doxmlparser/include/doxmlintf.h @@ -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. */ diff --git a/addon/doxmlparser/src/dochandler.cpp b/addon/doxmlparser/src/dochandler.cpp index 07971c3..ce7cb3f 100644 --- a/addon/doxmlparser/src/dochandler.cpp +++ b/addon/doxmlparser/src/dochandler.cpp @@ -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)); diff --git a/addon/doxmlparser/src/mainhandler.cpp b/addon/doxmlparser/src/mainhandler.cpp index 0ac0fe9..81d7d2f 100644 --- a/addon/doxmlparser/src/mainhandler.cpp +++ b/addon/doxmlparser/src/mainhandler.cpp @@ -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 *cel=0; - if ((cel=m_memberNameDict.find(m_curString))==0) + if ((cel=m_memberNameDict.find(m_curMember->name))==0) { cel = new QList; - m_memberNameDict.insert(m_curString,cel); + m_memberNameDict.insert(m_curMember->name,cel); } cel->append(m_curCompound); m_insideMember = FALSE; diff --git a/addon/doxmlparser/src/stringimpl.h b/addon/doxmlparser/src/stringimpl.h index ac4ee12..013858f 100644 --- a/addon/doxmlparser/src/stringimpl.h +++ b/addon/doxmlparser/src/stringimpl.h @@ -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 diff --git a/configure b/configure index efc8c8f..a0a1ffc 100755 --- a/configure +++ b/configure @@ -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"` diff --git a/doc/Doxyfile b/doc/Doxyfile index 7ea5784..0876ffa 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -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 \ diff --git a/doc/config.doc b/doc/config.doc index 31ff5a4..27fde41 100644 --- a/doc/config.doc +++ b/doc/config.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_inherit_docs
\c INHERIT_DOCS
@@ -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_inline_info
\c INLINE_INFO
@@ -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_dirs
\c SHOW_DIRECTORIES
@@ -949,6 +948,17 @@ Example filter for ClearCase: FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" \endverbatim +\anchor cfg_layout_file +
\c LAYOUT_FILE
+ 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
\c RECURSIVE
\addindex RECURSIVE @@ -1124,14 +1134,16 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" \anchor cfg_alphabetical_index
+ -\anchor cfg_cols_in_alpha_index
\c COLS_IN_ALPHA_INDEX
+ \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" ... different font using \c DOT_FONTNAME you can set the path where dot can find it using this tag. + \anchor cfg_uml_look
\c UML_LOOK
@@ -1967,6 +1981,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... inheritance and usage relations if the target is undocumented or is not a class. + \anchor cfg_call_graph
\c CALL_GRAPH
@@ -2060,10 +2076,11 @@ TAGFILES = file1=loc1 "file2 = loc2" ... \anchor cfg_dot_transparent
\c DOT_TRANSPARENT
\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). + Set the \c DOT_TRANSPARENT tag to \c YES to generate images with a transparent + 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
\c DOT_MULTI_TARGETS
diff --git a/doc/customize.doc b/doc/customize.doc new file mode 100644 index 0000000..e8bc99a --- /dev/null +++ b/doc/customize.doc @@ -0,0 +1,248 @@ +/****************************************************************************** + * + * + * + * 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 +cascading style sheet. +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 + + + ... + + + ... + + + ... + + + ... + + + ... + + + ... + + +\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: +
+
\c briefdescription +
Represents the brief description on a page. +
\c detaileddescription +
Represents the detailed description on a page. +
\c authorsection +
Represents the author section of a page (only used for man pages). +
\c memberdecl +
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. +
\c memberdef +
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. +
+ +The class page has the following specific tags: +
+
\c includes +
Represents the include file needed to obtain the definition for + this class. +
\c inheritancegraph +
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. +
\c collaborationgraph +
Represents the collaboration graph for a class. +
\c allmemberslink +
Represents the link to the list of all members for a class. +
\c usedfiles +
Represents the list of files from which documentation for the class was + extracted. +
+ +The file page has the following specific tags: +
+
\c includes +
Represents the list of \#include statements contained in this file. +
\c includegraph +
Represents the include dependency graph for the file. +
\c includedbygraph +
Represents the included by dependency graph for the file. +
\c sourcelink +
Represents the link to the source code of this file. +
+ +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. + + */ diff --git a/doc/diagrams.doc b/doc/diagrams.doc index f060bd9..9295360 100644 --- a/doc/diagrams.doc +++ b/doc/diagrams.doc @@ -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:
    -
  • if \ref cfg_graphical_hierarchy "GRAPHICAL_HIERARCHY" is set to \c YES, - a graphical representation of the class hierarchy will be drawn, along +
  • A graphical representation of the class hierarchy will be drawn, along with the textual one. Currently this feature is supported for HTML only.\n Warning: 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. -
  • if \ref cfg_class_graph "CLASS_GRAPH" is set to \c YES, - a graph will be generated for each documented class showing the +
  • 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. -
  • 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. -
  • if \ref cfg_collaboration_graph "COLLABORATION_GRAPH" is set to YES, a - graph is drawn for each documented class and struct that shows: +
  • 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. +
  • An inverse include dependency graph is also generated showing for + a (header) file, which other files include it. +
  • A graph is drawn for each documented class and struct that shows:
    • the inheritance relations with base classes.
    • the usage relations with other structs and classes (e.g. @@ -60,6 +58,13 @@ functions that the function is directly or indirectly called by.
    + 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:
      diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex index 5a46eb9..3020fd4 100644 --- a/doc/doxygen_manual.tex +++ b/doc/doxygen_manual.tex @@ -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} diff --git a/doc/index.doc b/doc/index.doc index 86052bf..87e419f 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -75,6 +75,8 @@ The first part forms a user manual: and members in the documentation.
    • Section \ref output shows how to generate the various output formats supported by doxygen. +
    • Section \ref customize explains how you can customize the output generated + by doxygen.
    • Section \ref custcmd show how to define and use custom commands in your comments.
    • Section \ref external explains how to let doxygen create links to externally generated documentation.
    • Section \ref faq gives answers to frequently asked questions. diff --git a/doc/infoflow.eps b/doc/infoflow.eps index 740c1e4..dd7f799 100644 --- a/doc/infoflow.eps +++ b/doc/infoflow.eps @@ -1,10 +1,10 @@ %!PS-Adobe-2.0 EPSF-2.0 -%%Title: infoflow.eps -%%Creator: fig2dev Version 3.2 Patchlevel 3c -%%CreationDate: Fri Aug 8 17:06:41 2003 -%%For: dimitri@pandora.home.nl (Dimitri van Heesch) -%%BoundingBox: 0 0 659 583 -%%Magnification: 1.0000 +%%Title: infoflow.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5 +%%CreationDate: Sun Aug 17 14:52:37 2008 +%%For: dimitri@macbook.home.nl (Dimitri Van Heesch) +%%BoundingBox: 0 0 661 582 +%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin @@ -47,8 +47,8 @@ $F2psDict /mtrx matrix put end save -newpath 0 583 moveto 0 0 lineto 659 0 lineto 659 583 lineto closepath clip newpath --53.0 600.0 translate +newpath 0 582 moveto 0 0 lineto 661 0 lineto 661 582 lineto closepath clip newpath +-53.3 599.2 translate 1 -1 scale /cp {closepath} bind def @@ -124,28 +124,21 @@ newfontname newfont definefont pop end } def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin -%%Page: 1 1 10 setmiterlimit +0 slj 0 slc 0.06000 0.06000 sc % % Fig objects follow % +% +% here starts figure with depth 50 +/Times-Roman-iso ff 200.00 scf sf +8100 7200 m +gs 1 -1 sc (import) col0 sh gr % Polyline +0 slj +0 slc 7.500 slw -n 3600 1950 m 3900 1650 l 4800 1650 l 4800 3150 l 3600 3150 l 3600 1950 l - 3900 1950 l - 3900 1650 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf -3900 2250 m -gs 1 -1 sc (Config file) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -3900 2550 m -gs 1 -1 sc (Doxyfile) col0 sh gr -% Polyline -n 900 3675 m 1200 3375 l 2100 3375 l 2100 4875 l 900 4875 l 900 3675 l - 1200 3675 l - 1200 3375 l gs col0 s gr -% Polyline n 975 3600 m 975 3300 l 2175 3300 l 2175 4800 l 2100 4800 l gs col0 s gr % Polyline @@ -167,13 +160,13 @@ n 1050 5325 m 1050 5250 l 2250 5250 l 2250 6750 l % Polyline n 1125 5250 m 1125 5175 l 2325 5175 l 2325 6675 l 2250 6675 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 1275 6075 m gs 1 -1 sc (- headers) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 1275 6675 m gs 1 -1 sc (- images) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 1275 6375 m gs 1 -1 sc (- footers) col0 sh gr % Polyline @@ -229,17 +222,25 @@ n 6750 525 m 6750 450 l 7950 450 l 7950 1950 l n 6825 450 m 6825 375 l 8025 375 l 8025 1875 l 7950 1875 l gs col0 s gr % Polyline -gs clippath -4020 3765 m 4080 3765 l 4080 3614 l 4050 3734 l 4020 3614 l cp -eoclip -n 4050 3150 m - 4050 3750 l gs col0 s gr gr - -% arrowhead -n 4020 3614 m 4050 3734 l 4080 3614 l 4020 3614 l cp gs 0.00 setgray ef gr col0 s +n 4350 1950 m 4650 1650 l 5550 1650 l 5550 3150 l 4350 3150 l 4350 1950 l + 4650 1950 l + 4650 1650 l gs col0 s gr +/Times-Roman-iso ff 200.00 scf sf +4575 2250 m +gs 1 -1 sc (Config file) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +4575 2550 m +gs 1 -1 sc (Doxyfile) col0 sh gr +% Polyline +n 2850 1950 m 3150 1650 l 4050 1650 l 4050 3150 l 2850 3150 l 2850 1950 l + 3150 1950 l + 3150 1650 l gs col0 s gr +/Times-Roman-iso ff 200.00 scf sf +3000 2475 m +gs 1 -1 sc (Layout file) col0 sh gr % Polyline gs clippath -3315 4155 m 3315 4095 l 3164 4095 l 3284 4125 l 3164 4155 l cp +3164 4155 m 3315 4155 l 3315 4095 l 3164 4095 l 3164 4095 l 3284 4125 l 3164 4155 l cp eoclip n 2100 4125 m 3300 4125 l gs col0 s gr gr @@ -248,7 +249,7 @@ n 2100 4125 m n 3164 4155 m 3284 4125 l 3164 4095 l 3164 4155 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -3315 4380 m 3315 4320 l 3164 4320 l 3284 4350 l 3164 4380 l cp +3164 4380 m 3315 4380 l 3315 4320 l 3164 4320 l 3164 4320 l 3284 4350 l 3164 4380 l cp eoclip n 2100 6225 m 2700 6225 l 2700 4350 l 3300 4350 l gs col0 s gr gr @@ -256,24 +257,12 @@ n 2100 6225 m 2700 6225 l 2700 4350 l % arrowhead n 3164 4380 m 3284 4350 l 3164 4320 l 3164 4380 l cp gs 0.00 setgray ef gr col0 s % Polyline -gs clippath -4380 3135 m 4320 3135 l 4320 3286 l 4350 3166 l 4380 3286 l cp -eoclip -n 4350 3150 m - 4350 3750 l gs col0 s gr gr - -% arrowhead -n 4380 3286 m 4350 3166 l 4320 3286 l 4380 3286 l cp gs 0.00 setgray ef gr col0 s -% Polyline n 3675 5925 m 3975 5625 l 4875 5625 l 4875 7125 l 3675 7125 l 3675 5925 l 3975 5925 l 3975 5625 l gs col0 s gr % Polyline -n 3300 300 m 5100 300 l 5100 1050 l 3300 1050 l - cp gs col32 1.00 shd ef gr gs col0 s gr -% Polyline gs clippath -4155 4635 m 4095 4635 l 4095 4786 l 4125 4666 l 4155 4786 l cp +4155 4786 m 4155 4635 l 4095 4635 l 4095 4786 l 4095 4786 l 4125 4666 l 4155 4786 l cp eoclip n 4125 5625 m 4125 4650 l gs col0 s gr gr @@ -282,7 +271,7 @@ n 4125 5625 m n 4155 4786 m 4125 4666 l 4095 4786 l 4155 4786 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -4320 5640 m 4380 5640 l 4380 5489 l 4350 5609 l 4320 5489 l cp +4320 5489 m 4320 5640 l 4380 5640 l 4380 5489 l 4380 5489 l 4350 5609 l 4320 5489 l cp eoclip n 4350 5625 m 4350 4650 l gs col0 s gr gr @@ -291,19 +280,7 @@ n 4350 5625 m n 4320 5489 m 4350 5609 l 4380 5489 l 4320 5489 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -4170 1665 m 4230 1665 l 4230 1514 l 4200 1634 l 4170 1514 l cp -4230 1035 m 4170 1035 l 4170 1186 l 4200 1066 l 4230 1186 l cp -eoclip -n 4200 1050 m - 4200 1650 l gs col0 s gr gr - -% arrowhead -n 4230 1186 m 4200 1066 l 4170 1186 l 4230 1186 l cp gs 0.00 setgray ef gr col0 s -% arrowhead -n 4170 1514 m 4200 1634 l 4230 1514 l 4170 1514 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -6615 1455 m 6615 1395 l 6464 1395 l 6584 1425 l 6464 1455 l cp +6464 1455 m 6615 1455 l 6615 1395 l 6464 1395 l 6464 1395 l 6584 1425 l 6464 1455 l cp eoclip n 5100 3900 m 6000 3900 l 6000 1425 l 6600 1425 l gs col0 s gr gr @@ -312,7 +289,7 @@ n 5100 3900 m 6000 3900 l 6000 1425 l n 6464 1455 m 6584 1425 l 6464 1395 l 6464 1455 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -6615 3480 m 6615 3420 l 6464 3420 l 6584 3450 l 6464 3480 l cp +6464 3480 m 6615 3480 l 6615 3420 l 6464 3420 l 6464 3420 l 6584 3450 l 6464 3480 l cp eoclip n 5100 4050 m 6300 4050 l 6300 3450 l 6600 3450 l gs col0 s gr gr @@ -321,7 +298,7 @@ n 5100 4050 m 6300 4050 l 6300 3450 l n 6464 3480 m 6584 3450 l 6464 3420 l 6464 3480 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -6615 5580 m 6615 5520 l 6464 5520 l 6584 5550 l 6464 5580 l cp +6464 5580 m 6615 5580 l 6615 5520 l 6464 5520 l 6464 5520 l 6584 5550 l 6464 5580 l cp eoclip n 5100 4200 m 6300 4200 l 6300 5550 l 6600 5550 l gs col0 s gr gr @@ -330,7 +307,7 @@ n 5100 4200 m 6300 4200 l 6300 5550 l n 6464 5580 m 6584 5550 l 6464 5520 l 6464 5580 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -6690 7380 m 6690 7320 l 6539 7320 l 6659 7350 l 6539 7380 l cp +6539 7380 m 6690 7380 l 6690 7320 l 6539 7320 l 6539 7320 l 6659 7350 l 6539 7380 l cp eoclip n 5100 4350 m 6000 4350 l 6000 7350 l 6675 7350 l gs col0 s gr gr @@ -339,7 +316,7 @@ n 5100 4350 m 6000 4350 l 6000 7350 l n 6539 7380 m 6659 7350 l 6539 7320 l 6539 7380 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -6690 9180 m 6690 9120 l 6539 9120 l 6659 9150 l 6539 9180 l cp +6539 9180 m 6690 9180 l 6690 9120 l 6539 9120 l 6539 9120 l 6659 9150 l 6539 9180 l cp eoclip n 5100 4500 m 5700 4500 l 5700 9150 l 6675 9150 l gs col0 s gr gr @@ -361,7 +338,7 @@ n 9075 900 m 10650 900 l 10650 1425 l 9075 1425 l cp gs col0 s gr % Polyline gs clippath -8790 1380 m 8790 1320 l 8639 1320 l 8759 1350 l 8639 1380 l cp +8639 1380 m 8790 1380 l 8790 1320 l 8639 1320 l 8639 1320 l 8759 1350 l 8639 1380 l cp eoclip n 7800 1350 m 8775 1350 l gs col0 s gr gr @@ -370,7 +347,7 @@ n 7800 1350 m n 8639 1380 m 8759 1350 l 8639 1320 l 8639 1380 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -11490 1380 m 11490 1320 l 11339 1320 l 11459 1350 l 11339 1380 l cp +11339 1380 m 11490 1380 l 11490 1320 l 11339 1320 l 11339 1320 l 11459 1350 l 11339 1380 l cp eoclip n 10800 1350 m 11475 1350 l gs col0 s gr gr @@ -379,7 +356,7 @@ n 10800 1350 m n 11339 1380 m 11459 1350 l 11339 1320 l 11339 1380 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -9015 3180 m 9015 3120 l 8864 3120 l 8984 3150 l 8864 3180 l cp +8864 3180 m 9015 3180 l 9015 3120 l 8864 3120 l 8864 3120 l 8984 3150 l 8864 3180 l cp eoclip n 7800 3150 m 9000 3150 l gs col0 s gr gr @@ -388,7 +365,7 @@ n 7800 3150 m n 8864 3180 m 8984 3150 l 8864 3120 l 8864 3180 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -9015 3555 m 9015 3495 l 8864 3495 l 8984 3525 l 8864 3555 l cp +8864 3555 m 9015 3555 l 9015 3495 l 8864 3495 l 8864 3495 l 8984 3525 l 8864 3555 l cp eoclip n 7800 3525 m 9000 3525 l gs col0 s gr gr @@ -400,7 +377,7 @@ n 9000 2925 m 10800 2925 l 10800 3675 l 9000 3675 l cp gs col32 1.00 shd ef gr gs col0 s gr % Polyline gs clippath -11490 3180 m 11490 3120 l 11339 3120 l 11459 3150 l 11339 3180 l cp +11339 3180 m 11490 3180 l 11490 3120 l 11339 3120 l 11339 3120 l 11459 3150 l 11339 3180 l cp eoclip n 10800 3150 m 11475 3150 l gs col0 s gr gr @@ -409,7 +386,7 @@ n 10800 3150 m n 11339 3180 m 11459 3150 l 11339 3120 l 11339 3180 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -11490 3555 m 11490 3495 l 11339 3495 l 11459 3525 l 11339 3555 l cp +11339 3555 m 11490 3555 l 11490 3495 l 11339 3495 l 11339 3495 l 11459 3525 l 11339 3555 l cp eoclip n 10800 3525 m 11475 3525 l gs col0 s gr gr @@ -417,11 +394,8 @@ n 10800 3525 m % arrowhead n 11339 3555 m 11459 3525 l 11339 3495 l 11339 3555 l cp gs 0.00 setgray ef gr col0 s % Polyline -n 9000 6900 m 10800 6900 l 10800 7650 l 9000 7650 l - cp gs col32 1.00 shd ef gr gs col0 s gr -% Polyline gs clippath -9015 7305 m 9015 7245 l 8864 7245 l 8984 7275 l 8864 7305 l cp +8864 7305 m 9015 7305 l 9015 7245 l 8864 7245 l 8864 7245 l 8984 7275 l 8864 7305 l cp eoclip n 7875 7275 m 9000 7275 l gs col0 s gr gr @@ -430,16 +404,7 @@ n 7875 7275 m n 8864 7305 m 8984 7275 l 8864 7245 l 8864 7305 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath -11415 7305 m 11415 7245 l 11264 7245 l 11384 7275 l 11264 7305 l cp -eoclip -n 10800 7275 m - 11400 7275 l gs col0 s gr gr - -% arrowhead -n 11264 7305 m 11384 7275 l 11264 7245 l 11264 7305 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -9015 9180 m 9015 9120 l 8864 9120 l 8984 9150 l 8864 9180 l cp +8864 9180 m 9015 9180 l 9015 9120 l 8864 9120 l 8864 9120 l 8984 9150 l 8864 9180 l cp eoclip n 7875 9150 m 9000 9150 l gs col0 s gr gr @@ -447,23 +412,11 @@ n 7875 9150 m % arrowhead n 8864 9180 m 8984 9150 l 8864 9120 l 8864 9180 l cp gs 0.00 setgray ef gr col0 s % Polyline -n 9000 8775 m 10875 8775 l 10875 9525 l 9000 9525 l - cp gs col32 1.00 shd ef gr gs col0 s gr -% Polyline -gs clippath -11415 9180 m 11415 9120 l 11264 9120 l 11384 9150 l 11264 9180 l cp -eoclip -n 10875 9150 m - 11400 9150 l gs col0 s gr gr - -% arrowhead -n 11264 9180 m 11384 9150 l 11264 9120 l 11264 9180 l cp gs 0.00 setgray ef gr col0 s -% Polyline n 3300 8850 m 5100 8850 l 5100 9525 l 3300 9525 l cp gs col32 1.00 shd ef gr gs col0 s gr % Polyline gs clippath -5085 9270 m 5085 9330 l 5236 9330 l 5116 9300 l 5236 9270 l cp +5236 9270 m 5085 9270 l 5085 9330 l 5236 9330 l 5236 9330 l 5116 9300 l 5236 9270 l cp eoclip n 6675 9300 m 5100 9300 l gs col0 s gr gr @@ -476,132 +429,218 @@ n 8700 6450 m 11850 6450 l 11850 9975 l 8700 9975 l cp gs col0 s gr [] 0 sd % Polyline gs clippath -4305 7110 m 4245 7110 l 4245 7261 l 4275 7141 l 4305 7261 l cp +4305 7261 m 4305 7110 l 4245 7110 l 4245 7261 l 4245 7261 l 4275 7141 l 4305 7261 l cp eoclip n 4275 8850 m 4275 7125 l gs col0 s gr gr % arrowhead n 4305 7261 m 4275 7141 l 4245 7261 l 4305 7261 l cp gs 0.00 setgray ef gr col0 s -/Times-Roman-iso ff 180.00 scf sf -4500 3525 m -gs 1 -1 sc (generate/update) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -3600 3525 m -gs 1 -1 sc (read) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +% Polyline +gs clippath +4845 1514 m 4845 1665 l 4905 1665 l 4905 1514 l 4905 1514 l 4875 1634 l 4845 1514 l cp +4905 1186 m 4905 1035 l 4845 1035 l 4845 1186 l 4845 1186 l 4875 1066 l 4905 1186 l cp +eoclip +n 4875 1050 m + 4875 1650 l gs col0 s gr gr + +% arrowhead +n 4905 1186 m 4875 1066 l 4845 1186 l 4905 1186 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 4845 1514 m 4875 1634 l 4905 1514 l 4845 1514 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 4125 300 m 5925 300 l 5925 1050 l 4125 1050 l + cp gs col32 1.00 shd ef gr gs col0 s gr +% Polyline +gs clippath +4905 3286 m 4905 3135 l 4845 3135 l 4845 3286 l 4845 3286 l 4875 3166 l 4905 3286 l cp +eoclip +n 4875 3150 m + 4875 3750 l gs col0 s gr gr + +% arrowhead +n 4905 3286 m 4875 3166 l 4845 3286 l 4905 3286 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +4620 3614 m 4620 3765 l 4680 3765 l 4680 3614 l 4680 3614 l 4650 3734 l 4620 3614 l cp +eoclip +n 4650 3150 m + 4650 3750 l gs col0 s gr gr + +% arrowhead +n 4620 3614 m 4650 3734 l 4680 3614 l 4620 3614 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3720 3614 m 3720 3765 l 3780 3765 l 3780 3614 l 3780 3614 l 3750 3734 l 3720 3614 l cp +eoclip +n 3750 3150 m + 3750 3750 l gs col0 s gr gr + +% arrowhead +n 3720 3614 m 3750 3734 l 3780 3614 l 3720 3614 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3555 3286 m 3555 3135 l 3495 3135 l 3495 3286 l 3495 3286 l 3525 3166 l 3555 3286 l cp +eoclip +n 3525 3150 m + 3525 3750 l gs col0 s gr gr + +% arrowhead +n 3555 3286 m 3525 3166 l 3495 3286 l 3555 3286 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 9000 8775 m 11175 8775 l 11175 9525 l 9000 9525 l + cp gs col32 1.00 shd ef gr gs col0 s gr +% Polyline +gs clippath +11639 7305 m 11790 7305 l 11790 7245 l 11639 7245 l 11639 7245 l 11759 7275 l 11639 7305 l cp +eoclip +n 11250 7275 m + 11775 7275 l gs col0 s gr gr + +% arrowhead +n 11639 7305 m 11759 7275 l 11639 7245 l 11639 7305 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 9000 6900 m 11250 6900 l 11250 7650 l 9000 7650 l + cp gs col32 1.00 shd ef gr gs col0 s gr +% Polyline +gs clippath +11564 9180 m 11715 9180 l 11715 9120 l 11564 9120 l 11564 9120 l 11684 9150 l 11564 9180 l cp +eoclip +n 11175 9150 m + 11700 9150 l gs col0 s gr gr + +% arrowhead +n 11564 9180 m 11684 9150 l 11564 9120 l 11564 9180 l cp gs 0.00 setgray ef gr col0 s +/Times-Roman-iso ff 200.00 scf sf 2850 3975 m gs 1 -1 sc (read) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 2850 4650 m gs 1 -1 sc (read) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -3975 6450 m -gs 1 -1 sc (Tag file\(s\)) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -3750 750 m -gs 1 -1 sc (Doxywizard) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 4425 5175 m gs 1 -1 sc (generate) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 3675 5175 m gs 1 -1 sc (read) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -4350 1425 m -gs 1 -1 sc (generate/edit) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -6900 1350 m -gs 1 -1 sc (XML files) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -6900 3300 m -gs 1 -1 sc (Latex files) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -6900 3750 m -gs 1 -1 sc (Makefile) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -7200 3525 m -gs 1 -1 sc (+) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 3900 4275 m gs 1 -1 sc (Doxygen) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -9225 750 m -gs 1 -1 sc (Your application) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -9300 1275 m -gs 1 -1 sc (doxmlparser lib) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -8175 3750 m -gs 1 -1 sc (make pdf) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 8175 3000 m gs 1 -1 sc (make ps) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 9675 3375 m gs 1 -1 sc (latex) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 11025 825 m gs 1 -1 sc (custom) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 11025 1050 m gs 1 -1 sc (output) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 11025 3000 m gs 1 -1 sc (postscript) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 11025 3825 m gs 1 -1 sc (PDF) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -6900 7350 m -gs 1 -1 sc (refman.rtf) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -9525 7350 m -gs 1 -1 sc (MS-Word) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -11100 7200 m -gs 1 -1 sc (doc) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -8175 7200 m -gs 1 -1 sc (import) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 6975 9075 m gs 1 -1 sc (HTML) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 6975 9300 m gs 1 -1 sc (pages) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -9075 9225 m -gs 1 -1 sc (HTML Help Workshop) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -11100 9000 m -gs 1 -1 sc (chm) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -6825 5625 m -gs 1 -1 sc (Man pages) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 5475 9525 m gs 1 -1 sc (parse) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 3825 9300 m gs 1 -1 sc (Doxytag) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -8325 9075 m -gs 1 -1 sc (read) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 8775 6675 m gs 1 -1 sc (Windows only) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 8250 1200 m gs 1 -1 sc (read) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 1200 4200 m gs 1 -1 sc (Sources) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 1275 5775 m gs 1 -1 sc (Custom) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf +/Times-Roman-iso ff 200.00 scf sf 4350 8175 m gs 1 -1 sc (generate) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +3675 1350 m +gs 1 -1 sc (generate/edit) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +4425 750 m +gs 1 -1 sc (Doxywizard) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +4050 3525 m +gs 1 -1 sc (read) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +5025 3375 m +gs 1 -1 sc (generate) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +5025 3600 m +gs 1 -1 sc (update) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +2625 3375 m +gs 1 -1 sc (generate) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +6825 1350 m +gs 1 -1 sc (XML files) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +6750 3300 m +gs 1 -1 sc (Latex files) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +6750 3750 m +gs 1 -1 sc (Makefile) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +7125 3525 m +gs 1 -1 sc (+) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +6750 5625 m +gs 1 -1 sc (Man pages) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +6900 7350 m +gs 1 -1 sc (refman.rtf) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +9075 9225 m +gs 1 -1 sc (HTML Help Workshop) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +8100 3750 m +gs 1 -1 sc (make pdf) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +9225 1275 m +gs 1 -1 sc (doxmlparser lib) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +9150 750 m +gs 1 -1 sc (Your application) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +3900 6450 m +gs 1 -1 sc (Tag file\(s\)) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +11325 7125 m +gs 1 -1 sc (doc) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +9750 7350 m +gs 1 -1 sc (MS-Word) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +11325 9000 m +gs 1 -1 sc (chm) col0 sh gr +/Times-Roman-iso ff 200.00 scf sf +8250 9075 m +gs 1 -1 sc (read) col0 sh gr +% Polyline +n 900 3675 m 1200 3375 l 2100 3375 l 2100 4875 l 900 4875 l 900 3675 l + 1200 3675 l + 1200 3375 l gs col0 s gr +% here ends figure; $F2psEnd rs +showpage +%%Trailer +%EOF diff --git a/doc/infoflow.fig b/doc/infoflow.fig index 501b81b..d09c571 100644 --- a/doc/infoflow.fig +++ b/doc/infoflow.fig @@ -1,4 +1,4 @@ -#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,23 +152,13 @@ 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 1 1 1.00 60.00 120.00 @@ -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 diff --git a/doc/infoflow.gif b/doc/infoflow.gif index 7b4468b..4bd30c5 100644 Binary files a/doc/infoflow.gif and b/doc/infoflow.gif differ diff --git a/doc/language.doc b/doc/language.doc index bb6caeb..b51310f 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -221,8 +221,8 @@ when the translator was updated. Romanian - Alexandru Iosup - aiosup at yahoo dot com + Ionut Dumitrascu
      Alexandru Iosup + reddumy at yahoo dot com
      aiosup at yahoo dot com 1.4.1 @@ -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 diff --git a/doc/maintainers.txt b/doc/maintainers.txt index cacf416..06d522b 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -100,6 +100,7 @@ TranslatorPortuguese Rui Godinho Lopes: ruiglopes@yahoo.com TranslatorRomanian +Ionut Dumitrascu: reddumy@yahoo.com Alexandru Iosup: aiosup@yahoo.com TranslatorRussian diff --git a/doc/output.doc b/doc/output.doc index f5a8d3d..6e87ce7 100644 --- a/doc/output.doc +++ b/doc/output.doc @@ -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 diff --git a/doc/translator_report.txt b/doc/translator_report.txt index 4c6b192..a75f78d 100644 --- a/doc/translator_report.txt +++ b/doc/translator_report.txt @@ -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 @@ -71,6 +71,16 @@ version of the translator for the language: 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 ---------------- diff --git a/src/classdef.cpp b/src/classdef.cpp index d30ee62..2362928 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -37,6 +37,9 @@ #include "docparser.h" #include "searchindex.h" #include "vhdldocgen.h" +#include "layout.h" + +//----------------------------------------------------------------------------- //static inline MemberList *createNewMemberList(MemberList::ListType lt) //{ @@ -842,8 +845,39 @@ static void writeTemplateSpec(OutputList &ol,Definition *d, } } +void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag) +{ + if (!briefDescription().isEmpty()) + { + ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::RTF); + ol.writeString(" \n"); + ol.enable(OutputGenerator::RTF); + + if (Config_getBool("REPEAT_BRIEF") || + !documentation().isEmpty() || + exampleFlag + ) + { + ol.disableAllBut(OutputGenerator::Html); + ol.startTextLink(0,"_details"); + ol.parseText(theTranslator->trMore()); + ol.endTextLink(); + } + ol.popGeneratorState(); + + ol.pushGeneratorState(); + ol.disable(OutputGenerator::RTF); + ol.newParagraph(); + ol.popGeneratorState(); + } + ol.writeSynopsis(); +} + // write the detailed description for this class -void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType, bool exampleFlag) +void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType, bool exampleFlag, + const QCString &title) { if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || !documentation().isEmpty() || @@ -852,13 +886,13 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType { 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(); + ol.startTextBlock(); writeTemplateSpec(ol,this,pageType); @@ -910,9 +944,11 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType void ClassDef::showUsedFiles(OutputList &ol) { + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Man); bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - if (Config_getBool("SHOW_USED_FILES")) - { + //if (Config_getBool("SHOW_USED_FILES")) + //{ ol.writeRuler(); if (fortranOpt) { @@ -993,11 +1029,12 @@ void ClassDef::showUsedFiles(OutputList &ol) file=m_impl->files.next(); } if (!first) ol.endItemList(); - } + //} + ol.popGeneratorState(); } -void ClassDef::writeClassDiagrams(OutputList &ol) +void ClassDef::writeInheritanceGraph(OutputList &ol) { // count direct inheritance relations int count=0; @@ -1025,7 +1062,7 @@ void ClassDef::writeClassDiagrams(OutputList &ol) bool renderDiagram = FALSE; - if (Config_getBool("HAVE_DOT") && Config_getBool("CLASS_GRAPH")) + if (Config_getBool("HAVE_DOT") && Config_getBool("CLASS_DIAGRAMS")) // write class diagram using dot { DotClassGraph inheritanceGraph(this,DotNode::Inheritance); @@ -1157,8 +1194,11 @@ void ClassDef::writeClassDiagrams(OutputList &ol) { ol.enableAll(); } +} - if (Config_getBool("HAVE_DOT") && Config_getBool("COLLABORATION_GRAPH")) +void ClassDef::writeCollaborationGraph(OutputList &ol) +{ + if (Config_getBool("HAVE_DOT") /*&& Config_getBool("COLLABORATION_GRAPH")*/) { DotClassGraph usageImplGraph(this,DotNode::Collaboration); if (!usageImplGraph.isTrivial()) @@ -1171,7 +1211,152 @@ void ClassDef::writeClassDiagrams(OutputList &ol) ol.popGeneratorState(); } } +} + +void ClassDef::writeIncludeFiles(OutputList &ol) +{ + if (m_impl->incInfo /*&& Config_getBool("SHOW_INCLUDE_FILES")*/) + { + QCString nm=m_impl->incInfo->includeName.isEmpty() ? + (m_impl->incInfo->fileDef ? + m_impl->incInfo->fileDef->docName().data() : "" + ) : + m_impl->incInfo->includeName.data(); + if (!nm.isEmpty()) + { + ol.startTypewriter(); + bool isIDLorJava = nm.right(4)==".idl" || + nm.right(5)==".pidl" || + nm.right(5)==".java"; + if (isIDLorJava) + { + ol.docify("import "); + } + else if (isObjectiveC()) + { + ol.docify("#import "); + } + else + { + ol.docify("#include "); + } + if (m_impl->incInfo->local || isIDLorJava) + ol.docify("\""); + else + ol.docify("<"); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Html); + ol.docify(nm); + ol.disableAllBut(OutputGenerator::Html); + ol.enable(OutputGenerator::Html); + if (m_impl->incInfo->fileDef) + { + ol.writeObjectLink(0,m_impl->incInfo->fileDef->includeName(),0,nm); + } + else + { + ol.docify(nm); + } + ol.popGeneratorState(); + if (m_impl->incInfo->local || isIDLorJava) + ol.docify("\""); + else + ol.docify(">"); + if (isIDLorJava) + ol.docify(";"); + ol.endTypewriter(); + ol.newParagraph(); + } + } +} + +void ClassDef::writeAllMembersLink(OutputList &ol) +{ + // write link to list of all members (HTML only) + if (m_impl->allMemberNameInfoSDict && + !Config_getBool("OPTIMIZE_OUTPUT_FOR_C") + ) + { + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.newParagraph(); + ol.startTextLink(getMemberListFileName(),0); + ol.parseText(theTranslator->trListOfAllMembers()); + ol.endTextLink(); + ol.enableAll(); + ol.popGeneratorState(); + } +} + +void ClassDef::writeMemberGroups(OutputList &ol) +{ + // write user defined member groups + if (m_impl->memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + if (!mg->allMembersInSameSection() || !m_impl->subGrouping) // group is in its own section + { + mg->writeDeclarations(ol,this,0,0,0); + } + else // add this group to the corresponding member section + { + //printf("addToDeclarationSection(%s)\n",mg->header().data()); + //mg->addToDeclarationSection(); + } + } + } +} +void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title) +{ + // nested classes + if (m_impl->innerClasses) + { + m_impl->innerClasses->writeDeclaration(ol,0,title,TRUE); + } +} + +void ClassDef::startMemberDocumentation(OutputList &ol) +{ + if (Config_getBool("SEPARATE_MEMBER_PAGES")) + { + ol.disable(OutputGenerator::Html); + Doxygen::suppressDocWarnings = TRUE; + } +} + +void ClassDef::endMemberDocumentation(OutputList &ol) +{ + if (Config_getBool("SEPARATE_MEMBER_PAGES")) + { + ol.enable(OutputGenerator::Html); + Doxygen::suppressDocWarnings = FALSE; + } +} + +void ClassDef::startMemberDeclarations(OutputList &ol) +{ + ol.startMemberSections(); +} + +void ClassDef::endMemberDeclarations(OutputList &ol) +{ + ol.endMemberSections(); +} + +void ClassDef::writeAuthorSection(OutputList &ol) +{ + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString("\n"); + ol.startGroupHeader(); + ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); + ol.endGroupHeader(); + ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); + ol.popGeneratorState(); } // write all documentation for this class @@ -1237,104 +1422,6 @@ void ClassDef::writeDocumentation(OutputList &ol) ol.popGeneratorState(); } - - if (Config_getBool("SEARCHENGINE")) - { - Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()); - Doxygen::searchIndex->addWord(localName(),TRUE); - } - - ol.startTextBlock(); - - //printf("Class %s brief=`%s' doc=`%s'\n",name().data(),briefDescription().data(),documentation().data()); - - bool exampleFlag=hasExamples(); - // write brief description - if (!briefDescription().isEmpty()) - { - if (!Config_getBool("DETAILS_AT_TOP")) - { - ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); - ol.pushGeneratorState(); - ol.disable(OutputGenerator::RTF); - ol.writeString(" \n"); - ol.enable(OutputGenerator::RTF); - ol.disableAllBut(OutputGenerator::Html); - ol.startTextLink(0,"_details"); - - if (Config_getBool("REPEAT_BRIEF") || - !documentation().isEmpty() || - exampleFlag - ) - { - ol.parseText(theTranslator->trMore()); - } - ol.endTextLink(); - ol.popGeneratorState(); - - ol.pushGeneratorState(); - ol.disable(OutputGenerator::RTF); - ol.newParagraph(); - ol.popGeneratorState(); - } - } - ol.writeSynopsis(); - - if (m_impl->incInfo && Config_getBool("SHOW_INCLUDE_FILES")) - { - QCString nm=m_impl->incInfo->includeName.isEmpty() ? - (m_impl->incInfo->fileDef ? - m_impl->incInfo->fileDef->docName().data() : "" - ) : - m_impl->incInfo->includeName.data(); - if (!nm.isEmpty()) - { - ol.startTypewriter(); - bool isIDLorJava = nm.right(4)==".idl" || - nm.right(5)==".pidl" || - nm.right(5)==".java"; - if (isIDLorJava) - { - ol.docify("import "); - } - else if (isObjectiveC()) - { - ol.docify("#import "); - } - else - { - ol.docify("#include "); - } - if (m_impl->incInfo->local || isIDLorJava) - ol.docify("\""); - else - ol.docify("<"); - ol.pushGeneratorState(); - ol.disable(OutputGenerator::Html); - ol.docify(nm); - ol.disableAllBut(OutputGenerator::Html); - ol.enable(OutputGenerator::Html); - if (m_impl->incInfo->fileDef) - { - ol.writeObjectLink(0,m_impl->incInfo->fileDef->includeName(),0,nm); - } - else - { - ol.docify(nm); - } - ol.popGeneratorState(); - if (m_impl->incInfo->local || isIDLorJava) - ol.docify("\""); - else - ol.docify(">"); - if (isIDLorJava) - ol.docify(";"); - ol.endTypewriter(); - ol.newParagraph(); - } - } - - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { Doxygen::tagFile << " setCurrentDoc(pageTitle,getOutputFileBase()); + Doxygen::searchIndex->addWord(localName(),TRUE); + } + bool exampleFlag=hasExamples(); - // write link to list of all members (HTML only) - if (m_impl->allMemberNameInfoSDict && - !Config_getBool("OPTIMIZE_OUTPUT_FOR_C") - ) + //---------------------------------------- start flexible part ------------------------------- + +#define NEW_LAYOUT +#ifdef NEW_LAYOUT // new flexible layout + + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Class)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::BriefDesc: + writeBriefDescription(ol,exampleFlag); + break; + case LayoutDocEntry::ClassIncludes: + writeIncludeFiles(ol); + break; + case LayoutDocEntry::ClassInheritanceGraph: + writeInheritanceGraph(ol); + break; + case LayoutDocEntry::ClassCollaborationGraph: + writeCollaborationGraph(ol); + break; + case LayoutDocEntry::ClassAllMembersLink: + writeAllMembersLink(ol); + break; + case LayoutDocEntry::MemberDeclStart: + startMemberDeclarations(ol); + break; + case LayoutDocEntry::MemberGroups: + writeMemberGroups(ol); + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + writeMemberDeclarations(ol,lmd->type,lmd->title,lmd->subscript); + } + break; + case LayoutDocEntry::ClassNestedClasses: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeNestedClasses(ol,ls->title); + } + break; + case LayoutDocEntry::MemberDeclEnd: + endMemberDeclarations(ol); + break; + case LayoutDocEntry::DetailedDesc: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeDetailedDescription(ol,pageType,exampleFlag,ls->title); + } + break; + case LayoutDocEntry::MemberDefStart: + startMemberDocumentation(ol); + break; + case LayoutDocEntry::MemberDef: + { + LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde; + writeMemberDocumentation(ol,lmd->type,lmd->title); + } + break; + case LayoutDocEntry::MemberDefEnd: + endMemberDocumentation(ol); + break; + case LayoutDocEntry::ClassUsedFiles: + showUsedFiles(ol); + break; + case LayoutDocEntry::AuthorSection: + writeAuthorSection(ol); + break; + 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::DirSubDirs: + case LayoutDocEntry::DirFiles: + case LayoutDocEntry::DirGraph: + err("Internal inconsistency: member %d should not be part of " + "LayoutDocManager::Class entry list\n",lde->kind()); + break; + } + } + +#else // old fixed layout + + //printf("Class %s brief=`%s' doc=`%s'\n",name().data(),briefDescription().data(),documentation().data()); + + //ol.startTextBlock(); + + // write brief description + if (!Config_getBool("DETAILS_AT_TOP")) { - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Html); - ol.newParagraph(); - ol.startTextLink(getMemberListFileName(),0); - ol.parseText(theTranslator->trListOfAllMembers()); - ol.endTextLink(); - ol.enableAll(); - ol.popGeneratorState(); + writeBriefDescription(ol,exampleFlag); } + + writeIncludeFiles(ol); + writeInheritanceGraph(ol); + writeCollaborationGraph(ol); + writeAllMembersLink(ol); - ol.endTextBlock(); + //ol.endTextBlock(); // write detailed description if the user wants it near the top if (Config_getBool("DETAILS_AT_TOP")) @@ -1383,27 +1573,10 @@ void ClassDef::writeDocumentation(OutputList &ol) //// Member declarations + brief descriptions /////////////////////////////////////////////////////////////////////////// - // write member groups - ol.startMemberSections(); + startMemberDeclarations(ol); - // write user defined member groups - if (m_impl->memberGroupSDict) - { - MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - if (!mg->allMembersInSameSection() || !m_impl->subGrouping) // group is in its own section - { - mg->writeDeclarations(ol,this,0,0,0); - } - else // add this group to the corresponding member section - { - //printf("addToDeclarationSection(%s)\n",mg->header().data()); - //mg->addToDeclarationSection(); - } - } - } + // write member groups + writeMemberGroups(ol); // public types writeMemberDeclarations(ol,MemberList::pubTypes,theTranslator->trPublicTypes()); @@ -1470,18 +1643,10 @@ void ClassDef::writeDocumentation(OutputList &ol) writeMemberDeclarations(ol,MemberList::related,theTranslator->trRelatedFunctions(), theTranslator->trRelatedSubscript() ); - //if (related) related->writeDeclarations(ol,this,0,0,0, - // theTranslator->trRelatedFunctions(), - // theTranslator->trRelatedSubscript() - // ); - // nested classes - if (m_impl->innerClasses) - { - m_impl->innerClasses->writeDeclaration(ol,0,0,TRUE); - } + writeNestedClasses(ol); - ol.endMemberSections(); + endMemberDeclarations(ol); // write detailed description if (!Config_getBool("DETAILS_AT_TOP")) @@ -1489,56 +1654,11 @@ void ClassDef::writeDocumentation(OutputList &ol) writeDetailedDescription(ol,pageType,exampleFlag); } - writeMemberDocumentation(ol); - - ///////////////////////////////////////////////////////////////////// - ol.startTextBlock(); - - // write the list of used files (not for man pages) - ol.pushGeneratorState(); - ol.disable(OutputGenerator::Man); - - showUsedFiles(ol); - - // write Author section (Man only) - ol.enable(OutputGenerator::Man); - ol.disableAllBut(OutputGenerator::Man); - ol.writeString("\n"); - ol.startGroupHeader(); - ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); - ol.endGroupHeader(); - ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); - ol.popGeneratorState(); - - ol.endTextBlock(); - ///////////////////////////////////////////////////////////////////// - - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - } - - endFile(ol); - - if (Config_getBool("SEPARATE_MEMBER_PAGES")) - { - writeMemberPages(ol); - } -} - -void ClassDef::writeMemberDocumentation(OutputList &ol) -{ /////////////////////////////////////////////////////////////////////////// //// Member definitions + detailed documentation /////////////////////////////////////////////////////////////////////////// - bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) - { - ol.disable(OutputGenerator::Html); - Doxygen::suppressDocWarnings = TRUE; - } + startMemberDocumentation(ol); writeMemberDocumentation(ol,MemberList::typedefMembers,theTranslator->trMemberTypedefDocumentation()); writeMemberDocumentation(ol,MemberList::enumMembers,theTranslator->trMemberEnumerationDocumentation()); @@ -1556,10 +1676,33 @@ void ClassDef::writeMemberDocumentation(OutputList &ol) writeMemberDocumentation(ol,MemberList::propertyMembers,theTranslator->trPropertyDocumentation()); writeMemberDocumentation(ol,MemberList::eventMembers,theTranslator->trEventDocumentation()); + endMemberDocumentation(ol); + ///////////////////////////////////////////////////////////////////// + //ol.startTextBlock(); + + // write the list of used files (not for man pages) + showUsedFiles(ol); + + // write Author section (Man only) + writeAuthorSection(ol); + + //ol.endTextBlock(); + ///////////////////////////////////////////////////////////////////// + //---------------------------------------- end flexible part ------------------------------- + +#endif + + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + { + writeDocAnchorsToTagFile(); + Doxygen::tagFile << " " << endl; + } + + endFile(ol); + if (Config_getBool("SEPARATE_MEMBER_PAGES")) { - ol.enable(OutputGenerator::Html); - Doxygen::suppressDocWarnings = FALSE; + writeMemberPages(ol); } } diff --git a/src/classdef.h b/src/classdef.h index 8659449..7c390c6 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -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; diff --git a/src/config.l b/src/config.l index 9fffc0b..21e7a39 100644 --- a/src/config.l +++ b/src/config.l @@ -1653,14 +1653,14 @@ void Config::create() "description. Set this tag to YES if you prefer the old behaviour instead. \n", FALSE ); - cb = addBool( - "DETAILS_AT_TOP", - "If the DETAILS_AT_TOP tag is set to YES then Doxygen \n" - "will output the detailed description near the top, like JavaDoc.\n" - "If set to NO, the detailed description appears after the member \n" - "documentation. \n", - FALSE - ); + //cb = addBool( + // "DETAILS_AT_TOP", + // "If the DETAILS_AT_TOP tag is set to YES then Doxygen \n" + // "will output the detailed description near the top, like JavaDoc.\n" + // "If set to NO, the detailed description appears after the member \n" + // "documentation. \n", + // FALSE + // ); cb = addBool( "INHERIT_DOCS", "If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \n" @@ -1901,13 +1901,13 @@ void Config::create() "documentation. If set to YES the scope will be hidden. \n", FALSE ); - cb = addBool( - "SHOW_INCLUDE_FILES", - "If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n" - "will put a list of the files that are included by a file in the documentation \n" - "of that file. \n", - TRUE - ); + //cb = addBool( + // "SHOW_INCLUDE_FILES", + // "If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n" + // "will put a list of the files that are included by a file in the documentation \n" + // "of that file. \n", + // TRUE + // ); cb = addBool( "INLINE_INFO", "If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \n" @@ -1993,13 +1993,13 @@ void Config::create() "command in the documentation regardless of this setting. \n", 0,10000,30 ); - cb = addBool( - "SHOW_USED_FILES", - "Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n" - "at the bottom of the documentation of classes and structs. If set to YES the \n" - "list will mention the files that were used to generate the documentation. \n", - TRUE - ); + //cb = addBool( + // "SHOW_USED_FILES", + // "Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n" + // "at the bottom of the documentation of classes and structs. If set to YES the \n" + // "list will mention the files that were used to generate the documentation. \n", + // TRUE + // ); cb = addBool( "SHOW_DIRECTORIES", "If the sources in your project are distributed over multiple directories \n" @@ -2031,6 +2031,25 @@ void Config::create() "is used as the file version. See the manual for examples. \n" ); cs->setWidgetType(ConfigString::File); + cs = addString( "LAYOUT_FILE", + "The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \n" + "doxygen. The layout file controls the global structure of the generated output files \n" + "in an output format independent way. The create the layout file that represents \n" + "doxygen's defaults, run doxygen with the -l option. You can optionally specify a \n" + "file name after the option, if omitted doxygenlayout.xml will be used as the name \n" + "of the layout file.\n" + ); + cs->setWidgetType(ConfigString::File); + addObsolete("DETAILS_AT_TOP"); + addObsolete("SHOW_INCLUDE_FILES"); + addObsolete("SHOW_USED_FILES"); + addObsolete("ALPHABETICAL_INDEX"); + addObsolete("CLASS_GRAPH"); + addObsolete("COLLABORATION_GRAPH"); + addObsolete("GROUP_GRAPHS"); + addObsolete("INCLUDE_GRAPH"); + addObsolete("INCLUDED_BY_GRAPH"); + //----------------------------------------------------------------------------------------------- addInfo( "Messages","configuration options related to warning and progress messages"); @@ -2276,13 +2295,13 @@ void Config::create() addInfo( "Index","configuration options related to the alphabetical class index"); //----------------------------------------------------------------------------------------------- - cb = addBool( - "ALPHABETICAL_INDEX", - "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n" - "of all compounds will be generated. Enable this if the project \n" - "contains a lot of classes, structs, unions or interfaces. \n", - FALSE - ); + //cb = addBool( + // "ALPHABETICAL_INDEX", + // "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n" + // "of all compounds will be generated. Enable this if the project \n" + // "contains a lot of classes, structs, unions or interfaces. \n", + // FALSE + // ); ci = addInt( "COLS_IN_ALPHA_INDEX", "If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \n" @@ -3029,31 +3048,31 @@ void Config::create() "different font using DOT_FONTNAME you can set the path where dot \n" "can find it using this tag. \n" ); - cb = addBool( - "CLASS_GRAPH", - "If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \n" - "will generate a graph for each documented class showing the direct and \n" - "indirect inheritance relations. Setting this tag to YES will force the \n" - "the CLASS_DIAGRAMS tag to NO.\n", - TRUE - ); - cb->addDependency("HAVE_DOT"); - cb = addBool( - "COLLABORATION_GRAPH", - "If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n" - "will generate a graph for each documented class showing the direct and \n" - "indirect implementation dependencies (inheritance, containment, and \n" - "class references variables) of the class with other documented classes. \n", - TRUE - ); - cb->addDependency("HAVE_DOT"); - cb = addBool( - "GROUP_GRAPHS", - "If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \n" - "will generate a graph for groups, showing the direct groups dependencies\n", - TRUE - ); - cb->addDependency("HAVE_DOT"); + //cb = addBool( + // "CLASS_GRAPH", + // "If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \n" + // "will generate a graph for each documented class showing the direct and \n" + // "indirect inheritance relations. Setting this tag to YES will force the \n" + // "the CLASS_DIAGRAMS tag to NO.\n", + // TRUE + // ); + //cb->addDependency("HAVE_DOT"); + //cb = addBool( + // "COLLABORATION_GRAPH", + // "If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n" + // "will generate a graph for each documented class showing the direct and \n" + // "indirect implementation dependencies (inheritance, containment, and \n" + // "class references variables) of the class with other documented classes. \n", + // TRUE + // ); + //cb->addDependency("HAVE_DOT"); + //cb = addBool( + // "GROUP_GRAPHS", + // "If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \n" + // "will generate a graph for groups, showing the direct groups dependencies\n", + // TRUE + // ); + //cb->addDependency("HAVE_DOT"); cb = addBool( "UML_LOOK", "If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n" @@ -3069,24 +3088,24 @@ void Config::create() FALSE ); cb->addDependency("HAVE_DOT"); - cb = addBool( - "INCLUDE_GRAPH", - "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n" - "tags are set to YES then doxygen will generate a graph for each documented \n" - "file showing the direct and indirect include dependencies of the file with \n" - "other documented files. \n", - TRUE - ); - cb->addDependency("HAVE_DOT"); - cb = addBool( - "INCLUDED_BY_GRAPH", - "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \n" - "HAVE_DOT tags are set to YES then doxygen will generate a graph for each \n" - "documented header file showing the documented files that directly or \n" - "indirectly include this file. \n", - TRUE - ); - cb->addDependency("HAVE_DOT"); + //cb = addBool( + // "INCLUDE_GRAPH", + // "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n" + // "tags are set to YES then doxygen will generate a graph for each documented \n" + // "file showing the direct and indirect include dependencies of the file with \n" + // "other documented files. \n", + // TRUE + // ); + //cb->addDependency("HAVE_DOT"); + //cb = addBool( + // "INCLUDED_BY_GRAPH", + // "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \n" + // "HAVE_DOT tags are set to YES then doxygen will generate a graph for each \n" + // "documented header file showing the documented files that directly or \n" + // "indirectly include this file. \n", + // TRUE + // ); + //cb->addDependency("HAVE_DOT"); cb = addBool( "CALL_GRAPH", "If the CALL_GRAPH and HAVE_DOT options are set to YES then \n" @@ -3115,12 +3134,12 @@ void Config::create() ); cb->addDependency("HAVE_DOT"); cb = addBool( - "DIRECTORY_GRAPH", - "If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \n" - "then doxygen will show the dependencies a directory has on other directories \n" - "in a graphical way. The dependency relations are determined by the #include\n" - "relations between the files in the directories.\n", - TRUE + "DIRECTORY_GRAPH", + "If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \n" + "then doxygen will show the dependencies a directory has on other directories \n" + "in a graphical way. The dependency relations are determined by the #include\n" + "relations between the files in the directories.\n", + TRUE ); cb->addDependency("HAVE_DOT"); ce = addEnum( @@ -3178,11 +3197,11 @@ void Config::create() cb = addBool( "DOT_TRANSPARENT", "Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \n" - "background. This is enabled by default, which results in a transparent \n" - "background. Warning: Depending on the platform used, enabling this option \n" - "may lead to badly anti-aliased labels on the edges of a graph (i.e. they \n" - "become hard to read). \n", - TRUE + "background. This is disabled by default, because dot on Windows does not \n" + "seem to support this out of the box. Warning: Depending on the platform used, \n" + "enabling this option may lead to badly anti-aliased labels on the edges of \n" + "a graph (i.e. they become hard to read). \n", + FALSE ); cb->addDependency("HAVE_DOT"); cb = addBool( diff --git a/src/defgen.cpp b/src/defgen.cpp index 4c52150..4f760e2 100644 --- a/src/defgen.cpp +++ b/src/defgen.cpp @@ -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; diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 9107627..23fe600 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -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.writeAnchor(0,"_details"); + 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); - ol.newParagraph(); + } + // 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.pushGeneratorState(); + ol.disable(OutputGenerator::RTF); 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.popGeneratorState(); + ol.pushGeneratorState(); - ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::RTF); - ol.disable(OutputGenerator::Man); - ol.startTextLink(0,"_details"); - ol.parseText(theTranslator->trMore()); - ol.endTextLink(); - ol.enableAll(); - ol.disableAllBut(OutputGenerator::Man); ol.newParagraph(); ol.popGeneratorState(); } + ol.writeSynopsis(); +} - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(displayName()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; - } - +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 << " " << endl; + Doxygen::tagFile << " " << endl; + Doxygen::tagFile << " " << convertToXML(displayName()) << "" << endl; + Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; + Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; } + + //---------------------------------------- start flexible part ------------------------------- +#define NEW_LAYOUT +#ifdef NEW_LAYOUT // new flexible layout + + QListIterator 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 << " " << endl; + } + endFile(ol); ol.popGeneratorState(); + + } #if 0 diff --git a/src/dirdef.h b/src/dirdef.h index 49dca57..90c9379 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -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); diff --git a/src/docsets.cpp b/src/docsets.cpp index f9f5114..6daad38 100644 --- a/src/docsets.cpp +++ b/src/docsets.cpp @@ -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: diff --git a/src/dot.cpp b/src/dot.cpp index 51a2506..87a7e08 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -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 << " " << convertToXML(edgeInfo->m_label.mid(p,ni-p)) << "" << endl; - p=ni+2; + p=ni+1; } t << " " << convertToXML(edgeInfo->m_label.right(edgeInfo->m_label.length()-p)) diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 826b86d..0c1bdae 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -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) @@ -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() @@ -9585,6 +9603,31 @@ void parseInput() 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")) diff --git a/src/doxytag.l b/src/doxytag.l index 687fd63..a7beff1 100644 --- a/src/doxytag.l +++ b/src/doxytag.l @@ -245,6 +245,7 @@ QCString unhtmlify(const char *str) } ^"" | // Qt-3.x.x "

      " | // Qt-4 +"

      " | // >Qt-4.4.0 ^"

      " { // Qt variant BEGIN( ReadClassName ); } diff --git a/src/filedef.cpp b/src/filedef.cpp index 053c1a5..e323dd5 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -35,6 +35,9 @@ #include "portable.h" #include "vhdldocgen.h" #include "debug.h" +#include "layout.h" + +//--------------------------------------------------------------------------- class DevNullCodeDocInterface : public CodeOutputInterface { @@ -55,6 +58,8 @@ class DevNullCodeDocInterface : public CodeOutputInterface virtual void linkableSymbol(int, const char *,Definition *,Definition *) {} }; +//--------------------------------------------------------------------------- + /*! create a new file definition, where \a p is the file path, \a nm the file name, and \a ref is an HTML anchor name if the file was read from a tag file or 0 otherwise @@ -154,21 +159,22 @@ void FileDef::findSectionsInDocumentation() } } -void FileDef::writeDetailedDocumentation(OutputList &ol) +void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) { if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || - !documentation().isEmpty() + !documentation().isEmpty() || + (Config_getBool("SOURCE_BROWSER") && getStartBodyLine()!=-1 && getBodyDef()) ) { ol.writeRuler(); ol.pushGeneratorState(); - ol.disable(OutputGenerator::Latex); - ol.disable(OutputGenerator::RTF); - ol.writeAnchor(0,"_details"); + ol.disableAllBut(OutputGenerator::Html); + ol.writeAnchor(0,"_details"); ol.popGeneratorState(); ol.startGroupHeader(); - ol.parseText(theTranslator->trDetailedDescription()); + ol.parseText(title); ol.endGroupHeader(); + ol.startTextBlock(); if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) { @@ -179,6 +185,7 @@ void FileDef::writeDetailedDocumentation(OutputList &ol) { ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); + ol.disable(OutputGenerator::RTF); ol.newParagraph(); ol.enableAll(); ol.disableAllBut(OutputGenerator::Man); @@ -187,8 +194,6 @@ void FileDef::writeDetailedDocumentation(OutputList &ol) } if (!documentation().isEmpty()) { - //if (doc.at(dl-1)!='.' && doc.at(dl-1)!='!' && doc.at(dl-1)!='?') - // doc+='.'; ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE); } //printf("Writing source ref for file %s\n",name().data()); @@ -211,113 +216,38 @@ void FileDef::writeDetailedDocumentation(OutputList &ol) } } -/*! Write the documentation page for this file to the file of output - generators \a ol. -*/ -void FileDef::writeDocumentation(OutputList &ol) +void FileDef::writeBriefDescription(OutputList &ol) { - bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - //funcList->countDecMembers(); - - //QCString fn = name(); - //if (Config_getBool("FULL_PATH_NAMES")) - //{ - // fn.prepend(stripFromPath(getPath().copy())); - //} - - //printf("WriteDocumentation diskname=%s\n",diskname.data()); - - QCString versionTitle; - if (!fileVersion.isEmpty()) - { - versionTitle=("("+fileVersion+")"); - } - QCString title = docname+versionTitle; - QCString pageTitle=theTranslator->trFileReference(docname); - - if (Config_getBool("SHOW_DIRECTORIES") && getDirDef()) - { - startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE); - getDirDef()->writeNavigationPath(ol); - ol.endQuickIndices(); - ol.startContents(); - QCString pageTitleShort=theTranslator->trFileReference(name()); - startTitle(ol,getOutputFileBase()); - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Html); - ol.parseText(pageTitleShort); // Html only - ol.enableAll(); - ol.disable(OutputGenerator::Html); - ol.parseText(pageTitle); // other output formats - ol.popGeneratorState(); - addGroupListToTitle(ol,this); - endTitle(ol,getOutputFileBase(),title); - } - else - { - startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible); - startTitle(ol,getOutputFileBase()); - ol.parseText(pageTitle); - addGroupListToTitle(ol,this); - endTitle(ol,getOutputFileBase(),title); - } - if (!fileVersion.isEmpty()) - { - ol.disableAllBut(OutputGenerator::Html); - ol.startProjectNumber(); - ol.docify(versionTitle); - ol.endProjectNumber(); - ol.enableAll(); - } - - if (Config_getBool("SEARCHENGINE")) - { - Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()); - Doxygen::searchIndex->addWord(localName(),TRUE); - } - - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getPath()) << "" << endl; - Doxygen::tagFile << " " - << convertToXML(getOutputFileBase()) - << "" << endl; - } - - if (Config_getBool("DETAILS_AT_TOP")) + if (!briefDescription().isEmpty()) { - ol.startTextBlock(); - writeDetailedDocumentation(ol); - ol.endTextBlock(); - + ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); ol.pushGeneratorState(); - ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::RTF); - ol.newParagraph(); + 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.popGeneratorState(); - } - else if (!briefDescription().isEmpty()) - { - ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); - //ol.writeString(" \n"); - ol.disableAllBut(OutputGenerator::Html); - ol.startTextLink(0,"_details"); - ol.parseText(theTranslator->trMore()); - ol.endTextLink(); - ol.enableAll(); ol.pushGeneratorState(); - ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::RTF); ol.newParagraph(); ol.popGeneratorState(); } ol.writeSynopsis(); - - if (Config_getBool("SHOW_INCLUDE_FILES") && includeList && +} + +void FileDef::writeIncludeFiles(OutputList &ol) +{ + if (/*Config_getBool("SHOW_INCLUDE_FILES") &&*/ includeList && includeList->count()>0) { ol.startTextBlock(TRUE); @@ -395,8 +325,11 @@ void FileDef::writeDocumentation(OutputList &ol) } ol.endTextBlock(); } - - if (Config_getBool("HAVE_DOT") && Config_getBool("INCLUDE_GRAPH")) +} + +void FileDef::writeIncludeGraph(OutputList &ol) +{ + if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDE_GRAPH")*/) { //printf("Graph for file %s\n",name().data()); DotInclDepGraph incDepGraph(this,FALSE); @@ -413,8 +346,11 @@ void FileDef::writeDocumentation(OutputList &ol) } //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase()); } +} - if (Config_getBool("HAVE_DOT") && Config_getBool("INCLUDED_BY_GRAPH")) +void FileDef::writeIncludedByGraph(OutputList &ol) +{ + if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDED_BY_GRAPH")*/) { //printf("Graph for file %s\n",name().data()); DotInclDepGraph incDepGraph(this,TRUE); @@ -431,7 +367,11 @@ void FileDef::writeDocumentation(OutputList &ol) } //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase()); } +} + +void FileDef::writeSourceLink(OutputList &ol) +{ //printf("%s: generateSourceFile()=%d\n",name().data(),generateSourceFile()); if (generateSourceFile()) { @@ -442,87 +382,278 @@ void FileDef::writeDocumentation(OutputList &ol) ol.endTextLink(); ol.enableAll(); } - +} + +void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title) +{ + // write list of namespaces + if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title); +} + +void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title) +{ + // write list of classes + if (classSDict) classSDict->writeDeclaration(ol,0,title,FALSE); +} + +void FileDef::startMemberDeclarations(OutputList &ol) +{ ol.startMemberSections(); +} + +void FileDef::endMemberDeclarations(OutputList &ol) +{ + ol.endMemberSections(); +} - if (namespaceSDict && namespaceSDict->count()>0) +void FileDef::startMemberDocumentation(OutputList &ol) +{ + if (Config_getBool("SEPARATE_MEMBER_PAGES")) { - NamespaceSDict::Iterator ndi(*namespaceSDict); - NamespaceDef *nd; - bool found=FALSE; - for (ndi.toFirst();(nd=ndi.current());++ndi) + ol.disable(OutputGenerator::Html); + Doxygen::suppressDocWarnings = TRUE; + } +} + +void FileDef::endMemberDocumentation(OutputList &ol) +{ + if (Config_getBool("SEPARATE_MEMBER_PAGES")) + { + ol.enable(OutputGenerator::Html); + Doxygen::suppressDocWarnings = FALSE; + } +} + +void FileDef::writeMemberGroups(OutputList &ol) +{ + /* write user defined member groups */ + if (memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) { - if (nd->name().find('@')==-1 && !nd->isArtificial()) + if ((!mg->allMembersInSameSection() || !m_subGrouping) + && mg->header()!="[NOHEADER]") { - if (!found) + mg->writeDeclarations(ol,0,0,this,0); + } + } + } +} + +void FileDef::writeAuthorSection(OutputList &ol) +{ + // write Author section (Man only) + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.startGroupHeader(); + ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); + ol.endGroupHeader(); + ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); + ol.popGeneratorState(); +} + +/*! Write the documentation page for this file to the file of output + generators \a ol. +*/ +void FileDef::writeDocumentation(OutputList &ol) +{ + //funcList->countDecMembers(); + + //QCString fn = name(); + //if (Config_getBool("FULL_PATH_NAMES")) + //{ + // fn.prepend(stripFromPath(getPath().copy())); + //} + + //printf("WriteDocumentation diskname=%s\n",diskname.data()); + + QCString versionTitle; + if (!fileVersion.isEmpty()) + { + versionTitle=("("+fileVersion+")"); + } + QCString title = docname+versionTitle; + QCString pageTitle=theTranslator->trFileReference(docname); + + if (Config_getBool("SHOW_DIRECTORIES") && getDirDef()) + { + startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE); + getDirDef()->writeNavigationPath(ol); + ol.endQuickIndices(); + ol.startContents(); + QCString pageTitleShort=theTranslator->trFileReference(name()); + startTitle(ol,getOutputFileBase()); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.parseText(pageTitleShort); // Html only + ol.enableAll(); + ol.disable(OutputGenerator::Html); + ol.parseText(pageTitle); // other output formats + ol.popGeneratorState(); + addGroupListToTitle(ol,this); + endTitle(ol,getOutputFileBase(),title); + } + else + { + startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible); + startTitle(ol,getOutputFileBase()); + ol.parseText(pageTitle); + addGroupListToTitle(ol,this); + endTitle(ol,getOutputFileBase(),title); + } + if (!fileVersion.isEmpty()) + { + ol.disableAllBut(OutputGenerator::Html); + ol.startProjectNumber(); + ol.docify(versionTitle); + ol.endProjectNumber(); + ol.enableAll(); + } + + if (Config_getBool("SEARCHENGINE")) + { + Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()); + Doxygen::searchIndex->addWord(localName(),TRUE); + } + + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + { + Doxygen::tagFile << " " << endl; + Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; + Doxygen::tagFile << " " << convertToXML(getPath()) << "" << endl; + Doxygen::tagFile << " " + << convertToXML(getOutputFileBase()) + << "" << endl; + } + + //---------------------------------------- start flexible part ------------------------------- + +#define NEW_LAYOUT +#ifdef NEW_LAYOUT // new flexible layout + + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::File)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::BriefDesc: + writeBriefDescription(ol); + break; + case LayoutDocEntry::MemberDeclStart: + startMemberDeclarations(ol); + break; + case LayoutDocEntry::FileIncludes: + writeIncludeFiles(ol); + break; + case LayoutDocEntry::FileIncludeGraph: + writeIncludeGraph(ol); + break; + case LayoutDocEntry::FileIncludedByGraph: + writeIncludedByGraph(ol); + break; + case LayoutDocEntry::FileSourceLink: + writeSourceLink(ol); + break; + case LayoutDocEntry::FileClasses: { - ol.startMemberHeader(); - if (fortranOpt) - { - ol.parseText(theTranslator->trModules()); - } - else - { - ol.parseText(theTranslator->trNamespaces()); - } - ol.endMemberHeader(); - ol.startMemberList(); - found=TRUE; + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeClassDeclarations(ol,ls->title); } - ol.startMemberItem(0); - if (fortranOpt) + break; + case LayoutDocEntry::FileNamespaces: { - ol.writeString("module "); + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeNamespaceDeclarations(ol,ls->title); } - else + break; + case LayoutDocEntry::MemberGroups: + writeMemberGroups(ol); + break; + case LayoutDocEntry::MemberDecl: { - ol.writeString("namespace "); + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + writeMemberDeclarations(ol,lmd->type,lmd->title); } - ol.insertMemberAlign(); - if (nd->isLinkable()) + break; + case LayoutDocEntry::MemberDeclEnd: + endMemberDeclarations(ol); + break; + case LayoutDocEntry::DetailedDesc: { - ol.writeObjectLink(nd->getReference(), - nd->getOutputFileBase(), - 0, - nd->displayName() - ); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(nd->name()) << "" << endl; - } + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeDetailedDescription(ol,ls->title); } - else + break; + case LayoutDocEntry::MemberDefStart: + startMemberDocumentation(ol); + break; + case LayoutDocEntry::MemberDef: { - ol.startBold(); - ol.docify(nd->displayName()); - ol.endBold(); + LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde; + writeMemberDocumentation(ol,lmd->type,lmd->title); } - ol.endMemberItem(); - } + break; + case LayoutDocEntry::MemberDefEnd: + endMemberDocumentation(ol); + break; + case LayoutDocEntry::AuthorSection: + writeAuthorSection(ol); + 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::GroupClasses: + case LayoutDocEntry::GroupNamespaces: + case LayoutDocEntry::GroupDirs: + case LayoutDocEntry::GroupNestedGroups: + case LayoutDocEntry::GroupFiles: + case LayoutDocEntry::GroupGraph: + case LayoutDocEntry::GroupPageDocs: + case LayoutDocEntry::DirSubDirs: + case LayoutDocEntry::DirFiles: + case LayoutDocEntry::DirGraph: + err("Internal inconsistency: member %d should not be part of " + "LayoutDocManager::File entry list\n",lde->kind()); + break; } - if (found) ol.endMemberList(); } - if (classSDict) classSDict->writeDeclaration(ol); - - /* write user defined member groups */ - if (memberGroupSDict) + +#else + + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + + if (Config_getBool("DETAILS_AT_TOP")) { - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - if ((!mg->allMembersInSameSection() || !m_subGrouping) - && mg->header()!="[NOHEADER]") - { - mg->writeDeclarations(ol,0,0,this,0); - } - } + writeDetailedDescription(ol,theTranslator->trDetailedDescription()); } + else + { + writeBriefDescription(ol); + } + + writeIncludeFiles(ol); + writeIncludeGraph(ol); + writeIncludedByGraph(ol); + writeSourceLink(ol); + + startMemberDeclarations(ol); - //allMemberList.writeDeclarations(ol,0,0,this,0,0,0); + writeNamespaceDeclarations(ol); + writeClassDeclarations(ol); + writeMemberGroups(ol); + writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines()); - writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos()); writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs()); writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations()); writeMemberDeclarations(ol,MemberList::decFuncMembers, @@ -530,22 +661,29 @@ void FileDef::writeDocumentation(OutputList &ol) vhdlOpt ? VhdlDocGen::trFunctionAndProc() : theTranslator->trFunctions()) ; writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables()); - ol.endMemberSections(); + + endMemberDeclarations(ol); if (!Config_getBool("DETAILS_AT_TOP")) { - writeDetailedDocumentation(ol); + writeDetailedDescription(ol,theTranslator->trDetailedDescription()); } - writeMemberDocumentation(ol); + startMemberDocumentation(ol); + + writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation()); + writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()); + writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()); + writeMemberDocumentation(ol,MemberList::docFuncMembers,theTranslator->trFunctionDocumentation()); + writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation()); + + endMemberDocumentation(ol); // write Author section (Man only) - ol.disableAllBut(OutputGenerator::Man); - ol.startGroupHeader(); - ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); - ol.endGroupHeader(); - ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); - ol.enableAll(); + writeAuthorSection(ol); + +#endif + //---------------------------------------- end flexible part ------------------------------- if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { @@ -563,27 +701,6 @@ void FileDef::writeDocumentation(OutputList &ol) } } -void FileDef::writeMemberDocumentation(OutputList &ol) -{ - bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) - { - ol.disable(OutputGenerator::Html); - } - - writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation()); - writeMemberDocumentation(ol,MemberList::docProtoMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionPrototypeDocumentation()); - writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()); - writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()); - writeMemberDocumentation(ol,MemberList::docFuncMembers,theTranslator->trFunctionDocumentation()); - writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation()); - - if (Config_getBool("SEPARATE_MEMBER_PAGES")) - { - ol.enable(OutputGenerator::Html); - } -} - void FileDef::writeMemberPages(OutputList &ol) { ol.pushGeneratorState(); @@ -775,10 +892,6 @@ void FileDef::insertMember(MemberDef *md) break; case MemberDef::EnumValue: // enum values are shown inside their enums break; - case MemberDef::Prototype: - addMemberToList(MemberList::decProtoMembers,md); - addMemberToList(MemberList::docProtoMembers,md); - break; case MemberDef::Define: addMemberToList(MemberList::decDefineMembers,md); addMemberToList(MemberList::docDefineMembers,md); diff --git a/src/filedef.h b/src/filedef.h index 6ea8d23..52282f7 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -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 *includeDict; QList *includeList; diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 984bb4f..b0fd61d 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -35,6 +35,9 @@ #include "searchindex.h" #include "dot.h" #include "vhdldocgen.h" +#include "layout.h" + +//--------------------------------------------------------------------------- GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t, const char *refFileName) : Definition(df,dl,na) @@ -297,13 +300,6 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly) } addMemberToList(MemberList::docEnumValMembers,md); break; - case MemberDef::Prototype: - if (!docOnly) - { - addMemberToList(MemberList::decProtoMembers,md); - } - addMemberToList(MemberList::docProtoMembers,md); - break; case MemberDef::Define: if (!docOnly) { @@ -420,10 +416,6 @@ void GroupDef::removeMember(MemberDef *md) removeMemberFromList(MemberList::decEnumValMembers,md); removeMemberFromList(MemberList::docEnumValMembers,md); break; - case MemberDef::Prototype: - removeMemberFromList(MemberList::decProtoMembers,md); - removeMemberFromList(MemberList::docProtoMembers,md); - break; case MemberDef::Define: removeMemberFromList(MemberList::decDefineMembers,md); removeMemberFromList(MemberList::docDefineMembers,md); @@ -505,32 +497,44 @@ void GroupDef::computeAnchors() setAnchors(0,'a',allMemberList); } -void GroupDef::writeDetailedDocumentation(OutputList &ol) +void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) { - if (!briefDescription().isEmpty() || !documentation().isEmpty()) + if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) + || !documentation().isEmpty() + ) { - - if (pageDict->count()!=countMembers()) // classical layout + if (pageDict->count()!=countMembers()) // not only pages -> classical layout { ol.writeRuler(); ol.pushGeneratorState(); - ol.disable(OutputGenerator::Latex); - ol.disable(OutputGenerator::RTF); - ol.writeAnchor(0,"_details"); + 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); - ol.newParagraph(); + } + // write 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 + // write detailed documentation if (!documentation().isEmpty()) { ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE); @@ -538,31 +542,37 @@ void GroupDef::writeDetailedDocumentation(OutputList &ol) } } - -void GroupDef::writeDocumentation(OutputList &ol) +void GroupDef::writeBriefDescription(OutputList &ol) { - bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - ol.pushGeneratorState(); - startFile(ol,getOutputFileBase(),name(),title); - startTitle(ol,getOutputFileBase()); - ol.parseText(title); - addGroupListToTitle(ol,this); - endTitle(ol,getOutputFileBase(),title); - - if (Config_getBool("SEARCHENGINE")) + if (!briefDescription().isEmpty()) { - Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase()); - static QRegExp we("[a-zA-Z_][a-zA-Z_0-9]*"); - int i=0,p=0,l=0; - while ((i=we.match(title,p,&l))!=-1) // foreach word in the title + ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::RTF); + ol.writeString(" \n"); + ol.enable(OutputGenerator::RTF); + + if (Config_getBool("REPEAT_BRIEF") || + !documentation().isEmpty() + ) { - Doxygen::searchIndex->addWord(title.mid(i,l),TRUE); - p=i+l; + ol.disableAllBut(OutputGenerator::Html); + ol.startTextLink(0,"_details"); + ol.parseText(theTranslator->trMore()); + ol.endTextLink(); } + ol.popGeneratorState(); + + ol.pushGeneratorState(); + ol.disable(OutputGenerator::RTF); + ol.newParagraph(); + ol.popGeneratorState(); } +} - if (Config_getBool("HAVE_DOT") && Config_getBool("GROUP_GRAPHS") ) +void GroupDef::writeGroupGraph(OutputList &ol) +{ + if (Config_getBool("HAVE_DOT") /*&& Config_getBool("GROUP_GRAPHS")*/ ) { DotGroupCollaboration graph(this); if (!graph.isTrivial()) @@ -577,45 +587,15 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.popGeneratorState(); } } +} - - if (Config_getBool("DETAILS_AT_TOP")) - { - writeDetailedDocumentation(ol); - ol.newParagraph(); - } - else 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.startTextLink(0,"_details"); - ol.parseText(theTranslator->trMore()); - ol.endTextLink(); - ol.enableAll(); - ol.disableAllBut(OutputGenerator::Man); - ol.newParagraph(); - ol.popGeneratorState(); - } - - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(title) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; - } - - ol.startMemberSections(); - +void GroupDef::writeFiles(OutputList &ol,const QCString &title) +{ // write list of files if (fileList->count()>0) { ol.startMemberHeader(); - ol.parseText(theTranslator->trFile(TRUE,FALSE)); + ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); FileDef *fd=fileList->first(); @@ -641,15 +621,21 @@ void GroupDef::writeDocumentation(OutputList &ol) } ol.endMemberList(); } +} +void GroupDef::writeNamespaces(OutputList &ol,const QCString &title) +{ // write list of namespaces - namespaceSDict->writeDeclaration(ol); + namespaceSDict->writeDeclaration(ol,title); +} +void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title) +{ // write list of groups if (groupList->count()>0) { ol.startMemberHeader(); - ol.parseText(theTranslator->trModules()); + ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); GroupDef *gd=groupList->first(); @@ -676,12 +662,15 @@ void GroupDef::writeDocumentation(OutputList &ol) } ol.endMemberList(); } +} +void GroupDef::writeDirs(OutputList &ol,const QCString &title) +{ // write list of directories if (dirList->count()>0) { ol.startMemberHeader(); - ol.parseText(theTranslator->trDirectories()); + ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); DirDef *dd=dirList->first(); @@ -708,46 +697,16 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.endMemberList(); } - - // write list of classes - classSDict->writeDeclaration(ol); - - // write list of members - if (allMemberList->count()>0) - { - /* write user defined member groups */ - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->writeDeclarations(ol,0,0,0,this); - } - - writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines()); - writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos()); - writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs()); - writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations()); - writeMemberDeclarations(ol,MemberList::decEnumValMembers,theTranslator->trEnumerationValues()); - writeMemberDeclarations(ol,MemberList::decFuncMembers, - fortranOpt ? theTranslator->trSubprograms() : - vhdlOpt ? VhdlDocGen::trFunctionAndProc() : - theTranslator->trFunctions()); - writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables()); - writeMemberDeclarations(ol,MemberList::decSignalMembers,theTranslator->trSignals()); - writeMemberDeclarations(ol,MemberList::decPubSlotMembers,theTranslator->trPublicSlots()); - writeMemberDeclarations(ol,MemberList::decProSlotMembers,theTranslator->trProtectedSlots()); - writeMemberDeclarations(ol,MemberList::decPriSlotMembers,theTranslator->trPrivateSlots()); - writeMemberDeclarations(ol,MemberList::decEventMembers,theTranslator->trEvents()); - writeMemberDeclarations(ol,MemberList::decPropMembers,theTranslator->trProperties()); - writeMemberDeclarations(ol,MemberList::decFriendMembers,theTranslator->trFriends()); - } - ol.endMemberSections(); +} - if (!Config_getBool("DETAILS_AT_TOP")) - { - writeDetailedDocumentation(ol); - } +void GroupDef::writeClasses(OutputList &ol,const QCString &title) +{ + // write list of classes + classSDict->writeDeclaration(ol,0,title,FALSE); +} +void GroupDef::writePageDocumentation(OutputList &ol) +{ PageDef *pd=0; PageSDict::Iterator pdi(*pageDict); for (pdi.toFirst();(pd=pdi.current());++pdi) @@ -774,36 +733,258 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.endTextBlock(); } } +} - writeMemberDocumentation(ol); - - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) +void GroupDef::writeMemberGroups(OutputList &ol) +{ + /* write user defined member groups */ + if (memberGroupSDict) { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; + /* write user defined member groups */ + MemberGroupSDict::Iterator mgli(*memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeDeclarations(ol,0,0,0,this); + } } +} - endFile(ol); - ol.popGeneratorState(); +void GroupDef::startMemberDeclarations(OutputList &ol) +{ + ol.startMemberSections(); +} + +void GroupDef::endMemberDeclarations(OutputList &ol) +{ + ol.endMemberSections(); +} +void GroupDef::startMemberDocumentation(OutputList &ol) +{ if (Config_getBool("SEPARATE_MEMBER_PAGES")) { - allMemberList->sort(); - writeMemberPages(ol); + ol.disable(OutputGenerator::Html); + Doxygen::suppressDocWarnings = TRUE; } - } -void GroupDef::writeMemberDocumentation(OutputList &ol) +void GroupDef::endMemberDocumentation(OutputList &ol) { - bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); if (Config_getBool("SEPARATE_MEMBER_PAGES")) { - ol.disable(OutputGenerator::Html); + ol.enable(OutputGenerator::Html); + Doxygen::suppressDocWarnings = FALSE; + } +} + +void GroupDef::writeAuthorSection(OutputList &ol) +{ + // write Author section (Man only) + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.startGroupHeader(); + ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); + ol.endGroupHeader(); + ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); + ol.popGeneratorState(); +} + +void GroupDef::writeDocumentation(OutputList &ol) +{ + ol.pushGeneratorState(); + startFile(ol,getOutputFileBase(),name(),title); + startTitle(ol,getOutputFileBase()); + ol.parseText(title); + addGroupListToTitle(ol,this); + endTitle(ol,getOutputFileBase(),title); + + if (Config_getBool("SEARCHENGINE")) + { + Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase()); + static QRegExp we("[a-zA-Z_][a-zA-Z_0-9]*"); + int i=0,p=0,l=0; + while ((i=we.match(title,p,&l))!=-1) // foreach word in the title + { + Doxygen::searchIndex->addWord(title.mid(i,l),TRUE); + p=i+l; + } + } + + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + { + Doxygen::tagFile << " " << endl; + Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; + Doxygen::tagFile << " " << convertToXML(title) << "" << endl; + Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; } + + //---------------------------------------- start flexible part ------------------------------- + +#define NEW_LAYOUT +#ifdef NEW_LAYOUT // new flexible layout + + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Group)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::BriefDesc: + writeBriefDescription(ol); + break; + case LayoutDocEntry::MemberDeclStart: + startMemberDeclarations(ol); + break; + case LayoutDocEntry::GroupClasses: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeClasses(ol,ls->title); + } + break; + case LayoutDocEntry::GroupNamespaces: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeNamespaces(ol,ls->title); + } + break; + case LayoutDocEntry::MemberGroups: + writeMemberGroups(ol); + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + writeMemberDeclarations(ol,lmd->type,lmd->title); + } + break; + case LayoutDocEntry::MemberDeclEnd: + endMemberDeclarations(ol); + break; + case LayoutDocEntry::DetailedDesc: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeDetailedDescription(ol,ls->title); + } + break; + case LayoutDocEntry::MemberDefStart: + startMemberDocumentation(ol); + break; + case LayoutDocEntry::MemberDef: + { + LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde; + writeMemberDocumentation(ol,lmd->type,lmd->title); + } + break; + case LayoutDocEntry::MemberDefEnd: + endMemberDocumentation(ol); + break; + case LayoutDocEntry::GroupNestedGroups: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeNestedGroups(ol,ls->title); + } + break; + case LayoutDocEntry::GroupPageDocs: + writePageDocumentation(ol); + break; + case LayoutDocEntry::GroupDirs: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeDirs(ol,ls->title); + } + break; + case LayoutDocEntry::GroupFiles: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeFiles(ol,ls->title); + } + break; + case LayoutDocEntry::GroupGraph: + writeGroupGraph(ol); + break; + case LayoutDocEntry::AuthorSection: + writeAuthorSection(ol); + 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::DirSubDirs: + case LayoutDocEntry::DirFiles: + case LayoutDocEntry::DirGraph: + err("Internal inconsistency: member %d should not be part of " + "LayoutDocManager::Group entry list\n",lde->kind()); + break; + } + } + +#else + + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + + + if (Config_getBool("DETAILS_AT_TOP")) + { + writeDetailedDescription(ol,theTranslator->trDetailedDescription()); + } + else + { + writeBriefDescription(ol); + } + + writeGroupGraph(ol); + + startMemberDeclarations(ol); + + writeFiles(ol); + writeNamespaces(ol); + writeNestedGroups(ol); + writeDirs(ol); + writeClasses(ol); + writeMemberGroups(ol); + + writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines()); + writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs()); + writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations()); + writeMemberDeclarations(ol,MemberList::decEnumValMembers,theTranslator->trEnumerationValues()); + writeMemberDeclarations(ol,MemberList::decFuncMembers, + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions()); + writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables()); + writeMemberDeclarations(ol,MemberList::decSignalMembers,theTranslator->trSignals()); + writeMemberDeclarations(ol,MemberList::decPubSlotMembers,theTranslator->trPublicSlots()); + writeMemberDeclarations(ol,MemberList::decProSlotMembers,theTranslator->trProtectedSlots()); + writeMemberDeclarations(ol,MemberList::decPriSlotMembers,theTranslator->trPrivateSlots()); + writeMemberDeclarations(ol,MemberList::decEventMembers,theTranslator->trEvents()); + writeMemberDeclarations(ol,MemberList::decPropMembers,theTranslator->trProperties()); + writeMemberDeclarations(ol,MemberList::decFriendMembers,theTranslator->trFriends()); + + endMemberDeclarations(ol); + + if (!Config_getBool("DETAILS_AT_TOP")) + { + writeDetailedDescription(ol,theTranslator->trDetailedDescription()); + } + + startMemberDocumentation(ol); + + writePageDocumentation(ol); + writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation()); - writeMemberDocumentation(ol,MemberList::docProtoMembers,theTranslator->trFunctionPrototypeDocumentation()); writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()); writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()); writeMemberDocumentation(ol,MemberList::docEnumValMembers,theTranslator->trEnumerationValueDocumentation()); @@ -817,10 +998,27 @@ void GroupDef::writeMemberDocumentation(OutputList &ol) writeMemberDocumentation(ol,MemberList::docPropMembers,theTranslator->trProperties()); // todo: add trPropertyDocumentation() writeMemberDocumentation(ol,MemberList::docFriendMembers,theTranslator->trFriends()); // todo: add trFriendDocumentation() + endMemberDocumentation(ol); + +#endif + + //---------------------------------------- end flexible part ------------------------------- + + endFile(ol); + ol.popGeneratorState(); + + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + { + writeDocAnchorsToTagFile(); + Doxygen::tagFile << " " << endl; + } + if (Config_getBool("SEPARATE_MEMBER_PAGES")) { - ol.enable(OutputGenerator::Html); + allMemberList->sort(); + writeMemberPages(ol); } + } void GroupDef::writeMemberPages(OutputList &ol) diff --git a/src/groupdef.h b/src/groupdef.h index 06eb035..0b6278e 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -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 diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 71f237d..bcc462c 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -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," "," "); } +#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 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 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="S"+searchFor.mid(1); + t << "
    • \n"; + t << "
      \n"; + t << " \n"; + t << " \n"; + t << " \n"; + if (!highlightSearch) + { + t << " \n"; + t << " \n"; + t << "
      \n"; + t << "
      \n"; + t << "
    • \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() { diff --git a/src/language.cpp b/src/language.cpp index e1bd947..a56ed44 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -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 diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 0516e37..a1baa95 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -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::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::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 << "&"; } diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h index 413ea68..1f8f2a9 100644 --- a/src/latexdocvisitor.h +++ b/src/latexdocvisitor.h @@ -22,6 +22,7 @@ #include "docvisitor.h" #include #include +#include class QTextStream; class CodeOutputInterface; @@ -160,6 +161,9 @@ class LatexDocVisitor : public DocVisitor bool m_insideTabbing; QStack m_enabled; QCString m_langExt; + QMap m_rowspanIndices; + int m_currentColumn; + bool m_inRowspan; }; #endif diff --git a/src/layout.cpp b/src/layout.cpp new file mode 100644 index 0000000..3a9949c --- /dev/null +++ b/src/layout.cpp @@ -0,0 +1,1121 @@ +/****************************************************************************** + * + * + * + * + * 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. + * + */ + +#include "layout.h" +#include "message.h" +#include "language.h" +#include "vhdldocgen.h" +#include "util.h" + +#include +#include +#include +#include +#include + +static const char layout_default[] = +#include "layout_default.h" +; + +//--------------------------------------------------------------------------------- + +LayoutNavEntry *LayoutNavEntry::find(LayoutNavEntry::Kind kind) const +{ + LayoutNavEntry *result=0; + QListIterator li(m_children); + LayoutNavEntry *entry; + for (li.toFirst();(entry=li.current());++li) + { + // depth first search, needed to find the entry furthest from the + // root in case an entry is in the tree twice + result = entry->find(kind); + if (result) return result; + if (entry->kind()==kind) + { + return entry; + } + } + return result; +} + +//--------------------------------------------------------------------------------- + +class LayoutParser : public QXmlDefaultHandler +{ + private: + class StartElementHandler + { + typedef void (LayoutParser::*Handler)(const QXmlAttributes &attrib); + public: + StartElementHandler(LayoutParser *parent, Handler h) + : m_parent(parent), m_handler(h) {} + virtual ~StartElementHandler() {} + virtual void operator()(const QXmlAttributes &attrib) + { + (m_parent->*m_handler)(attrib); + } + protected: + StartElementHandler() : m_parent(0), m_handler(0) {} + private: + LayoutParser *m_parent; + Handler m_handler; + }; + + class StartElementHandlerKind : public StartElementHandler + { + typedef void (LayoutParser::*Handler)(LayoutDocEntry::Kind kind, + const QXmlAttributes &attrib); + public: + StartElementHandlerKind(LayoutParser *parent, LayoutDocEntry::Kind k,Handler h) + : m_parent(parent), m_kind(k), m_handler(h) {} + void operator()(const QXmlAttributes &attrib) + { + (m_parent->*m_handler)(m_kind,attrib); + } + private: + LayoutParser *m_parent; + LayoutDocEntry::Kind m_kind; + Handler m_handler; + }; + + class StartElementHandlerSection : public StartElementHandler + { + typedef void (LayoutParser::*Handler)(LayoutDocEntry::Kind kind, + const QXmlAttributes &attrib, + const QCString &title); + public: + StartElementHandlerSection(LayoutParser *parent, LayoutDocEntry::Kind k,Handler h, + const QCString &title) + : m_parent(parent), m_kind(k), m_handler(h), m_title(title) {} + void operator()(const QXmlAttributes &attrib) + { + (m_parent->*m_handler)(m_kind,attrib,m_title); + } + private: + LayoutParser *m_parent; + LayoutDocEntry::Kind m_kind; + Handler m_handler; + QCString m_title; + }; + + class StartElementHandlerMember : public StartElementHandler + { + typedef void (LayoutParser::*Handler)(const QXmlAttributes &attrib, + MemberList::ListType type, + const QCString &title, + const QCString &subtitle); + public: + StartElementHandlerMember(LayoutParser *parent, + Handler h, + MemberList::ListType type, + const QCString &tl, + const QCString &ss = QCString() + ) + : m_parent(parent), m_handler(h), m_type(type), + m_title(tl), m_subscript(ss) {} + void operator()(const QXmlAttributes &attrib) + { + (m_parent->*m_handler)(attrib,m_type,m_title,m_subscript); + } + private: + LayoutParser *m_parent; + Handler m_handler; + MemberList::ListType m_type; + QCString m_title; + QCString m_subscript; + }; + + class StartElementHandlerNavEntry : public StartElementHandler + { + typedef void (LayoutParser::*Handler)(LayoutNavEntry::Kind kind, + const QXmlAttributes &attrib, + const QCString &title); + public: + StartElementHandlerNavEntry(LayoutParser *parent, + LayoutNavEntry::Kind kind, + Handler h, + const QCString &tl + ) + : m_parent(parent), m_kind(kind), m_handler(h), m_title(tl) {} + void operator()(const QXmlAttributes &attrib) + { + (m_parent->*m_handler)(m_kind,attrib,m_title); + } + private: + LayoutParser *m_parent; + LayoutNavEntry::Kind m_kind; + Handler m_handler; + QCString m_title; + }; + + class EndElementHandler + { + typedef void (LayoutParser::*Handler)(); + public: + EndElementHandler(LayoutParser *parent, Handler h) : m_parent(parent), m_handler(h) {} + void operator()() { (m_parent->*m_handler)(); } + private: + LayoutParser *m_parent; + Handler m_handler; + }; + + + public: + static LayoutParser &instance() + { + static LayoutParser *theInstance = new LayoutParser; + return *theInstance; + } + void init() + { + m_sHandler.setAutoDelete(TRUE); + m_eHandler.setAutoDelete(TRUE); + m_part = -1; // invalid + m_rootNav = 0; + + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + + // start & end handlers + m_sHandler.insert("doxygenlayout", + new StartElementHandler(this,&LayoutParser::startLayout)); + m_eHandler.insert("doxygenlayout", + new EndElementHandler(this,&LayoutParser::endLayout)); + + // class layout handlers + m_sHandler.insert("navindex", + new StartElementHandler(this,&LayoutParser::startNavIndex)); + m_sHandler.insert("navindex/tab", + new StartElementHandler(this,&LayoutParser::startNavEntry)); + m_eHandler.insert("navindex/tab", + new EndElementHandler(this,&LayoutParser::endNavEntry)); + m_eHandler.insert("navindex", + new EndElementHandler(this,&LayoutParser::endNavIndex)); + + // class layout handlers + m_sHandler.insert("class", + new StartElementHandler(this,&LayoutParser::startClass)); + m_sHandler.insert("class/briefdescription", + new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("class/detaileddescription", + new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry, + theTranslator->trDetailedDescription())); + m_sHandler.insert("class/authorsection", + new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("class/includes", + new StartElementHandlerKind(this,LayoutDocEntry::ClassIncludes,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("class/inheritancegraph", + new StartElementHandlerKind(this,LayoutDocEntry::ClassInheritanceGraph,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("class/collaborationgraph", + new StartElementHandlerKind(this,LayoutDocEntry::ClassCollaborationGraph,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("class/allmemberslink", + new StartElementHandlerKind(this,LayoutDocEntry::ClassAllMembersLink,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("class/usedfiles", + new StartElementHandlerKind(this,LayoutDocEntry::ClassUsedFiles,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("class/memberdecl", + new StartElementHandler(this,&LayoutParser::startMemberDecl)); + m_sHandler.insert("class/memberdecl/membergroups", + new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("class/memberdecl/nestedclasses", + new StartElementHandlerSection(this,LayoutDocEntry::ClassNestedClasses,&LayoutParser::startSectionEntry, + vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) : + fortranOpt ? theTranslator->trDataTypes() : + theTranslator->trCompounds() + )); + m_sHandler.insert("class/memberdecl/publictypes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pubTypes,theTranslator->trPublicTypes())); + m_sHandler.insert("class/memberdecl/publicslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pubSlots,theTranslator->trPublicSlots())); + m_sHandler.insert("class/memberdecl/signals", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::signals,theTranslator->trSignals())); + m_sHandler.insert("class/memberdecl/publicmethods", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pubMethods,theTranslator->trPublicMembers())); + m_sHandler.insert("class/memberdecl/publicstaticmethods", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pubStaticMethods,theTranslator->trStaticPublicMembers())); + m_sHandler.insert("class/memberdecl/publicattributes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pubAttribs,theTranslator->trPublicAttribs())); + m_sHandler.insert("class/memberdecl/publicstaticattributes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pubStaticAttribs,theTranslator->trStaticPublicAttribs())); + m_sHandler.insert("class/memberdecl/protectedtypes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::proTypes,theTranslator->trProtectedTypes())); + m_sHandler.insert("class/memberdecl/protectedslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::proSlots,theTranslator->trProtectedSlots())); + m_sHandler.insert("class/memberdecl/protectedmethods", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::proMethods,theTranslator->trProtectedMembers())); + m_sHandler.insert("class/memberdecl/protectedstaticmethods", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::proStaticMethods,theTranslator->trStaticProtectedMembers())); + m_sHandler.insert("class/memberdecl/protectedattributes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::proAttribs,theTranslator->trProtectedAttribs())); + m_sHandler.insert("class/memberdecl/protectedstaticattributes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::proStaticAttribs,theTranslator->trStaticProtectedAttribs())); + m_sHandler.insert("class/memberdecl/packagetypes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pacTypes,theTranslator->trPackageTypes())); + m_sHandler.insert("class/memberdecl/packagemethods", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pacMethods,theTranslator->trPackageMembers())); + m_sHandler.insert("class/memberdecl/packagestaticmethods", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pacStaticMethods,theTranslator->trStaticPackageMembers())); + m_sHandler.insert("class/memberdecl/packageattributes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pacAttribs,theTranslator->trPackageAttribs())); + m_sHandler.insert("class/memberdecl/packagestaticattributes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::pacStaticAttribs,theTranslator->trStaticPackageAttribs())); + m_sHandler.insert("class/memberdecl/properties", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::properties,theTranslator->trProperties())); + m_sHandler.insert("class/memberdecl/events", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::events,theTranslator->trEvents())); + m_sHandler.insert("class/memberdecl/privatetypes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::priTypes,theTranslator->trPrivateTypes())); + m_sHandler.insert("class/memberdecl/privateslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::priSlots,theTranslator->trPrivateSlots())); + m_sHandler.insert("class/memberdecl/privatemethods", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::priMethods,theTranslator->trPrivateMembers())); + m_sHandler.insert("class/memberdecl/privatestaticmethods", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::priStaticMethods,theTranslator->trStaticPrivateMembers())); + m_sHandler.insert("class/memberdecl/privateattributes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::priAttribs,theTranslator->trPrivateAttribs())); + m_sHandler.insert("class/memberdecl/privatestaticattributes", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::priStaticAttribs,theTranslator->trStaticPrivateAttribs())); + m_sHandler.insert("class/memberdecl/friends", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::friends,theTranslator->trFriends())); + m_sHandler.insert("class/memberdecl/related", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::related,theTranslator->trRelatedFunctions(), + theTranslator->trRelatedSubscript())); + m_eHandler.insert("class/memberdecl", + new EndElementHandler(this,&LayoutParser::endMemberDecl)); + m_sHandler.insert("class/memberdef", + new StartElementHandler(this,&LayoutParser::startMemberDef)); + m_sHandler.insert("class/memberdef/typedefs", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::typedefMembers,theTranslator->trMemberTypedefDocumentation())); + m_sHandler.insert("class/memberdef/enums", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::enumMembers,theTranslator->trMemberEnumerationDocumentation())); + m_sHandler.insert("class/memberdef/constructors", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::constructors,theTranslator->trConstructorDocumentation())); + m_sHandler.insert("class/memberdef/functions", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::functionMembers, + fortranOpt ? + theTranslator->trMemberFunctionDocumentationFortran() : + theTranslator->trMemberFunctionDocumentation())); + m_sHandler.insert("class/memberdef/related", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::relatedMembers,theTranslator->trRelatedFunctionDocumentation())); + m_sHandler.insert("class/memberdef/variables", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::variableMembers,theTranslator->trMemberDataDocumentation())); + m_sHandler.insert("class/memberdef/properties", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::propertyMembers,theTranslator->trPropertyDocumentation())); + m_sHandler.insert("class/memberdef/events", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::eventMembers,theTranslator->trEventDocumentation())); + m_eHandler.insert("class/memberdef", + new EndElementHandler(this,&LayoutParser::endMemberDef)); + m_eHandler.insert("class", + new EndElementHandler(this,&LayoutParser::endClass)); + + + // namespace layout handlers + m_sHandler.insert("namespace", + new StartElementHandler(this,&LayoutParser::startNamespace)); + m_sHandler.insert("namespace/briefdescription", + new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("namespace/detaileddescription", + new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry, + theTranslator->trDetailedDescription())); + m_sHandler.insert("namespace/authorsection", + new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("namespace/memberdecl", + new StartElementHandler(this,&LayoutParser::startMemberDecl)); + m_sHandler.insert("namespace/memberdecl/nestednamespaces", + new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry, + javaOpt ? theTranslator->trPackages() : + fortranOpt ? theTranslator->trModules() : + theTranslator->trNamespaces() + )); + m_sHandler.insert("namespace/memberdecl/classes", + new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry, + vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) : + fortranOpt ? theTranslator->trDataTypes() : + theTranslator->trCompounds() + )); + m_sHandler.insert("namespace/memberdecl/membergroups", + new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("namespace/memberdecl/typedefs", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decTypedefMembers,theTranslator->trTypedefs())); + m_sHandler.insert("namespace/memberdecl/enums", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decEnumMembers,theTranslator->trEnumerations())); + m_sHandler.insert("namespace/memberdecl/functions", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decFuncMembers, + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions())); + m_sHandler.insert("namespace/memberdecl/variables", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decVarMembers,theTranslator->trVariables())); + m_eHandler.insert("namespace/memberdecl", + new EndElementHandler(this,&LayoutParser::endMemberDecl)); + m_sHandler.insert("namespace/memberdef", + new StartElementHandler(this,&LayoutParser::startMemberDef)); + m_sHandler.insert("namespace/memberdef/typedefs", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation())); + m_sHandler.insert("namespace/memberdef/enums", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation())); + m_sHandler.insert("namespace/memberdef/functions", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docFuncMembers, + fortranOpt ? + theTranslator->trSubprogramDocumentation() : + theTranslator->trFunctionDocumentation())); + m_sHandler.insert("namespace/memberdef/variables", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docVarMembers,theTranslator->trVariableDocumentation())); + m_eHandler.insert("namespace/memberdef", + new EndElementHandler(this,&LayoutParser::endMemberDef)); + m_eHandler.insert("namespace", + new EndElementHandler(this,&LayoutParser::endNamespace)); + + // file layout handlers + m_sHandler.insert("file", + new StartElementHandler(this,&LayoutParser::startFile)); + m_sHandler.insert("file/briefdescription", + new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("file/detaileddescription", + new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry, + theTranslator->trDetailedDescription())); + m_sHandler.insert("file/authorsection", + new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("file/includes", + new StartElementHandlerKind(this,LayoutDocEntry::FileIncludes,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("file/includegraph", + new StartElementHandlerKind(this,LayoutDocEntry::FileIncludeGraph,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("file/includedbygraph", + new StartElementHandlerKind(this,LayoutDocEntry::FileIncludedByGraph,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("file/sourcelink", + new StartElementHandlerKind(this,LayoutDocEntry::FileSourceLink,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("file/memberdecl", + new StartElementHandler(this,&LayoutParser::startMemberDecl)); + m_sHandler.insert("file/memberdecl/classes", + new StartElementHandlerSection(this,LayoutDocEntry::FileClasses,&LayoutParser::startSectionEntry, + vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) : + fortranOpt ? theTranslator->trDataTypes() : + theTranslator->trCompounds() + )); + m_sHandler.insert("file/memberdecl/namespaces", + new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry, + javaOpt ? theTranslator->trPackages() : + fortranOpt ? theTranslator->trModules() : + theTranslator->trNamespaces() + )); + m_sHandler.insert("file/memberdecl/defines", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decDefineMembers,theTranslator->trDefines())); + m_sHandler.insert("file/memberdecl/typedefs", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decTypedefMembers,theTranslator->trTypedefs())); + m_sHandler.insert("file/memberdecl/enums", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decEnumMembers,theTranslator->trEnumerations())); + m_sHandler.insert("file/memberdecl/functions", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decFuncMembers, + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions())) ; + m_sHandler.insert("file/memberdecl/variables", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decVarMembers,theTranslator->trVariables())); + + m_eHandler.insert("file/memberdecl", + new EndElementHandler(this,&LayoutParser::endMemberDecl)); + m_sHandler.insert("file/memberdef", + new StartElementHandler(this,&LayoutParser::startMemberDef)); + m_sHandler.insert("file/memberdef/defines", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docDefineMembers,theTranslator->trDefineDocumentation())); + m_sHandler.insert("file/memberdef/typedefs", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation())); + m_sHandler.insert("file/memberdef/enums", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation())); + m_sHandler.insert("file/memberdef/functions", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docFuncMembers,theTranslator->trFunctionDocumentation())); + m_sHandler.insert("file/memberdef/variables", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docVarMembers,theTranslator->trVariableDocumentation())); + m_eHandler.insert("file/memberdef", + new EndElementHandler(this,&LayoutParser::endMemberDef)); + m_eHandler.insert("file", + new EndElementHandler(this,&LayoutParser::endFile)); + + // group layout handlers + m_sHandler.insert("group", + new StartElementHandler(this,&LayoutParser::startGroup)); + m_sHandler.insert("group/briefdescription", + new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("group/detaileddescription", + new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry, + theTranslator->trDetailedDescription())); + m_sHandler.insert("group/authorsection", + new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("group/groupgraph", + new StartElementHandlerKind(this,LayoutDocEntry::GroupGraph,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("group/memberdecl", + new StartElementHandler(this,&LayoutParser::startMemberDecl)); + m_sHandler.insert("group/memberdecl/classes", + new StartElementHandlerSection(this,LayoutDocEntry::GroupClasses,&LayoutParser::startSectionEntry, + vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) : + fortranOpt ? theTranslator->trDataTypes() : + theTranslator->trCompounds() + )); + m_sHandler.insert("group/memberdecl/namespaces", + new StartElementHandlerSection(this,LayoutDocEntry::GroupNamespaces,&LayoutParser::startSectionEntry, + javaOpt ? theTranslator->trPackages() : + fortranOpt ? theTranslator->trModules() : + theTranslator->trNamespaces() + )); + m_sHandler.insert("group/memberdecl/dirs", + new StartElementHandlerSection(this,LayoutDocEntry::GroupDirs,&LayoutParser::startSectionEntry, + theTranslator->trDirectories() + )); + m_sHandler.insert("group/memberdecl/nestedgroups", + new StartElementHandlerSection(this,LayoutDocEntry::GroupNestedGroups,&LayoutParser::startSectionEntry, + theTranslator->trModules() + )); + m_sHandler.insert("group/memberdecl/files", + new StartElementHandlerSection(this,LayoutDocEntry::GroupFiles,&LayoutParser::startSectionEntry, + theTranslator->trFile(TRUE,FALSE) + )); + + m_sHandler.insert("group/memberdecl/defines", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decDefineMembers,theTranslator->trDefines())); + m_sHandler.insert("group/memberdecl/typedefs", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decTypedefMembers,theTranslator->trTypedefs())); + m_sHandler.insert("group/memberdecl/enums", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decEnumMembers,theTranslator->trEnumerations())); + m_sHandler.insert("group/memberdecl/enumvalues", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decEnumValMembers,theTranslator->trEnumerationValues())); + m_sHandler.insert("group/memberdecl/functions", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decFuncMembers, + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions())); + m_sHandler.insert("group/memberdecl/variables", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decVarMembers,theTranslator->trVariables())); + m_sHandler.insert("group/memberdecl/signals", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decSignalMembers,theTranslator->trSignals())); + m_sHandler.insert("group/memberdecl/publicslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decPubSlotMembers,theTranslator->trPublicSlots())); + m_sHandler.insert("group/memberdecl/protectedslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decProSlotMembers,theTranslator->trProtectedSlots())); + m_sHandler.insert("group/memberdecl/privateslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decPriSlotMembers,theTranslator->trPrivateSlots())); + m_sHandler.insert("group/memberdecl/events", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decEventMembers,theTranslator->trEvents())); + m_sHandler.insert("group/memberdecl/properties", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decPropMembers,theTranslator->trProperties())); + m_sHandler.insert("group/memberdecl/friends", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberList::decFriendMembers,theTranslator->trFriends())); + m_eHandler.insert("group/memberdecl", + new EndElementHandler(this,&LayoutParser::endMemberDecl)); + m_sHandler.insert("group/memberdef", + new StartElementHandler(this,&LayoutParser::startMemberDef)); + m_sHandler.insert("group/memberdef/pagedocs", + new StartElementHandlerKind(this,LayoutDocEntry::GroupPageDocs,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("group/memberdef/defines", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docDefineMembers,theTranslator->trDefineDocumentation())); + m_sHandler.insert("group/memberdef/typedefs", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation())); + m_sHandler.insert("group/memberdef/enums", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation())); + m_sHandler.insert("group/memberdef/enumvalues", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docEnumValMembers,theTranslator->trEnumerationValueDocumentation())); + m_sHandler.insert("group/memberdef/functions", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docFuncMembers, + fortranOpt? + theTranslator->trSubprogramDocumentation(): + theTranslator->trFunctionDocumentation())); + m_sHandler.insert("group/memberdef/variables", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docVarMembers,theTranslator->trVariableDocumentation())); + m_sHandler.insert("group/memberdef/signals", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docSignalMembers,theTranslator->trSignals())); + m_sHandler.insert("group/memberdef/publicslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docPubSlotMembers,theTranslator->trPublicSlots())); + m_sHandler.insert("group/memberdef/protectedslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docProSlotMembers,theTranslator->trProtectedSlots())); + m_sHandler.insert("group/memberdef/privateslots", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docPriSlotMembers,theTranslator->trPrivateSlots())); + m_sHandler.insert("group/memberdef/events", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docEventMembers,theTranslator->trEvents())); + m_sHandler.insert("group/memberdef/properties", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docPropMembers,theTranslator->trProperties())); + m_sHandler.insert("group/memberdef/friends", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberList::docFriendMembers,theTranslator->trFriends())); + m_eHandler.insert("group/memberdef", + new EndElementHandler(this,&LayoutParser::endMemberDef)); + m_eHandler.insert("group", + new EndElementHandler(this,&LayoutParser::endGroup)); + + // directory layout handlers + m_sHandler.insert("directory", + new StartElementHandler(this,&LayoutParser::startDirectory)); + m_sHandler.insert("directory/briefdescription", + new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("directory/detaileddescription", + new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry, + theTranslator->trDetailedDescription())); + m_sHandler.insert("directory/directorygraph", + new StartElementHandlerKind(this,LayoutDocEntry::DirGraph,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("directory/memberdecl", + new StartElementHandler(this,&LayoutParser::startMemberDecl)); + m_sHandler.insert("directory/memberdecl/dirs", + new StartElementHandlerKind(this,LayoutDocEntry::DirSubDirs,&LayoutParser::startSimpleEntry)); + m_sHandler.insert("directory/memberdecl/files", + new StartElementHandlerKind(this,LayoutDocEntry::DirFiles,&LayoutParser::startSimpleEntry)); + m_eHandler.insert("directory/memberdecl", + new EndElementHandler(this,&LayoutParser::endMemberDecl)); + m_eHandler.insert("directory", + new EndElementHandler(this,&LayoutParser::endDirectory)); + } + + void startSimpleEntry(LayoutDocEntry::Kind k,const QXmlAttributes &attrib) + { + QCString visible = convertToQCString(attrib.value("visible")); + bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0"); + if (m_part!=-1 && isVisible) + { + LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part, + new LayoutDocEntrySimple(k)); + } + } + + void startSectionEntry(LayoutDocEntry::Kind k,const QXmlAttributes &attrib, + const QCString &title) + { + QCString visible = convertToQCString(attrib.value("visible")); + bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0"); + QCString userTitle = convertToQCString(attrib.value("title")); + //printf("startSectionEntry: title='%s' userTitle='%s'\n", + // title.data(),userTitle.data()); + if (userTitle.isEmpty()) userTitle = title; + if (m_part!=-1 && isVisible) + { + LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part, + new LayoutDocEntrySection(k,userTitle)); + } + } + + + void startMemberDeclEntry(const QXmlAttributes &attrib,MemberList::ListType type, + const QCString &title,const QCString &subscript) + { + //QCString visible = convertToQCString(attrib.value("visible")); + //bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0"); + QCString userTitle = convertToQCString(attrib.value("title")); + QCString userSubscript = convertToQCString(attrib.value("subtitle")); + if (userTitle.isEmpty()) userTitle = title; + if (userSubscript.isEmpty()) userSubscript = subscript; + //printf("memberdecl: %s\n",userTitle.data()); + if (m_part!=-1 /*&& isVisible*/) + { + LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part, + new LayoutDocEntryMemberDecl(type,userTitle,userSubscript)); + } + } + + void startMemberDefEntry(const QXmlAttributes &attrib,MemberList::ListType type, + const QCString &title,const QCString &) + { + //QCString visible = convertToQCString(attrib.value("visible")); + //bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0"); + QCString userTitle = convertToQCString(attrib.value("title")); + if (userTitle.isEmpty()) userTitle = title; + //printf("memberdef: %s\n",userTitle.data()); + if (m_part!=-1 /*&& isVisible*/) + { + LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part, + new LayoutDocEntryMemberDef(type,userTitle)); + } + } + + void startLayout(const QXmlAttributes &) + { + } + + void endLayout() + { + } + + void startNavIndex(const QXmlAttributes &) + { + m_scope="navindex/"; + m_rootNav = LayoutDocManager::instance().rootNavEntry(); + m_rootNav->clear(); + } + + void endNavIndex() + { + m_scope=""; + if (!m_rootNav->find(LayoutNavEntry::MainPage)) + { + // no MainPage node... add one the first item of the root node... + new LayoutNavEntry(m_rootNav,LayoutNavEntry::MainPage, TRUE, usingTreeIndex() ? "main" : "index",theTranslator->trMainPage(),TRUE); + } + } + + void startNavEntry(const QXmlAttributes &attrib) + { + bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static struct NavEntryMap + { + const char *typeStr; // type attribute name in the XML file + LayoutNavEntry::Kind kind; // corresponding enum name + QCString mainName; // default title for an item if it has children + QCString subName; // optional name for an item if it is rendered as a child + QCString baseFile; // base name of the file containing the index page + } mapping[] = + { + { "mainpage", LayoutNavEntry::MainPage, theTranslator->trMainPage(), QCString(), usingTreeIndex() ? "main" : "index" }, + { "pages", LayoutNavEntry::Pages, theTranslator->trRelatedPages(), QCString(), "pages" }, + { "modules", LayoutNavEntry::Modules, theTranslator->trModules(), QCString(), "modules" }, + { "namespaces", LayoutNavEntry::Namespaces, javaOpt ? theTranslator->trPackages() : + fortranOpt ? theTranslator->trModules() : + theTranslator->trNamespaces(), + javaOpt ? theTranslator->trPackages() : + fortranOpt ? theTranslator->trModulesList() : + theTranslator->trNamespaceList(), "namespaces" }, + { "namespacemembers", LayoutNavEntry::NamespaceMembers, javaOpt ? theTranslator->trPackageMembers() : + fortranOpt ? theTranslator->trModulesMembers() : + theTranslator->trNamespaceMembers(), QCString(), "namespacemembers" }, + { "classindex", LayoutNavEntry::Classes, fortranOpt ? theTranslator->trDataTypes() : + vhdlOpt ? VhdlDocGen::trDesignUnits() : + theTranslator->trCompoundIndex(), + QCString(), "classes" }, + { "classes", LayoutNavEntry::ClassAnnotated, fortranOpt ? theTranslator->trCompoundListFortran() : + vhdlOpt ? VhdlDocGen::trDesignUnitList() : + theTranslator->trClasses(), + theTranslator->trCompoundList(), "annotated" }, + { "hierarchy", LayoutNavEntry::ClassHierarchy, vhdlOpt ? VhdlDocGen::trDesignUnitHierarchy() : + theTranslator->trClassHierarchy(), QCString(), "hierarchy" }, + { "classmembers", LayoutNavEntry::ClassMembers, fortranOpt ? theTranslator->trCompoundMembersFortran() : + vhdlOpt ? VhdlDocGen::trDesignUnitMembers() : + theTranslator->trCompoundMembers(), QCString(), "functions" }, + { "files", LayoutNavEntry::Files, theTranslator->trFile(TRUE,FALSE), + theTranslator->trFileList(), "files" }, + { "globals", LayoutNavEntry::FileGlobals, theTranslator->trFileMembers(), QCString(), "globals" }, + { "dirs", LayoutNavEntry::Dirs, theTranslator->trDirectories(), QCString(), "dirs" }, + { "examples", LayoutNavEntry::Examples, theTranslator->trExamples(), QCString(), "examples" }, + { 0, (LayoutNavEntry::Kind)0, QCString(), QCString(), QCString() } + }; + LayoutNavEntry::Kind kind; + // find type in the table + int i=0; + QString type = attrib.value("type"); + while (mapping[i].typeStr) + { + if (mapping[i].typeStr==type) + { + kind = mapping[i].kind; + break; + } + i++; + } + if (mapping[i].typeStr==0) + { + if (type.isEmpty()) + { + err("Warning: an entry tag within a navindex has no type attribute! Check your layout file!\n"); + } + else + { + err("Warning: the type '%s' is not supported for the entry tag within a navindex! Check your layout file!\n"); + } + return; + } + QCString baseFile = mapping[i].baseFile; + QCString title = convertToQCString(attrib.value("title")); + QCString visible = convertToQCString(attrib.value("visible")); + bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0"); + if (title.isEmpty()) // use default title + { + title = mapping[i].mainName; // use title for main row + if (m_rootNav!=LayoutDocManager::instance().rootNavEntry() && !mapping[i].subName.isEmpty()) + { + title = mapping[i].subName; // if this is a child of another row, use the subName if available + // this is mainly done to get compatible naming with older versions. + } + } + // create new item and make it the new root + m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title); + } + + void endNavEntry() + { + // set the root back to the parent + m_rootNav = m_rootNav->parent(); + } + + void startClass(const QXmlAttributes &) + { + LayoutDocManager::instance().clear(LayoutDocManager::Class); + m_scope="class/"; + m_part = (int)LayoutDocManager::Class; + } + + void endClass() + { + m_scope=""; + m_part = -1; + } + + void startNamespace(const QXmlAttributes &) + { + LayoutDocManager::instance().clear(LayoutDocManager::Namespace); + m_scope="namespace/"; + m_part = (int)LayoutDocManager::Namespace; + } + + void endNamespace() + { + m_scope=""; + m_part = -1; + } + + void startFile(const QXmlAttributes &) + { + LayoutDocManager::instance().clear(LayoutDocManager::File); + m_scope="file/"; + m_part = (int)LayoutDocManager::File; + } + + void endFile() + { + m_scope=""; + m_part = -1; + } + + void startGroup(const QXmlAttributes &) + { + LayoutDocManager::instance().clear(LayoutDocManager::Group); + m_scope="group/"; + m_part = (int)LayoutDocManager::Group; + } + + void endGroup() + { + m_scope=""; + m_part = -1; + } + + void startDirectory(const QXmlAttributes &) + { + LayoutDocManager::instance().clear(LayoutDocManager::Directory); + m_scope="directory/"; + m_part = (int)LayoutDocManager::Directory; + } + + void endDirectory() + { + m_scope=""; + m_part = -1; + } + + void startMemberDef(const QXmlAttributes &) + { + m_scope+="memberdef/"; + if (m_part!=-1) + { + LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part, + new LayoutDocEntrySimple(LayoutDocEntry::MemberDefStart)); + } + } + + void endMemberDef() + { + int i=m_scope.findRev("memberdef/"); + if (i!=-1) + { + m_scope=m_scope.left(i); + if (m_part!=-1) + { + LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part, + new LayoutDocEntrySimple(LayoutDocEntry::MemberDefEnd)); + } + } + } + + void startMemberDecl(const QXmlAttributes &) + { + m_scope+="memberdecl/"; + if (m_part!=-1) + { + LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part, + new LayoutDocEntrySimple(LayoutDocEntry::MemberDeclStart)); + } + } + + void endMemberDecl() + { + int i=m_scope.findRev("memberdecl/"); + if (i!=-1) + { + m_scope=m_scope.left(i); + if (m_part!=-1) + { + LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part, + new LayoutDocEntrySimple(LayoutDocEntry::MemberDeclEnd)); + } + } + } + + // reimplemented from QXmlDefaultHandler + bool startElement( const QString&, const QString&, + const QString& name, const QXmlAttributes& attrib ) + { + //printf("startElement [%s]::[%s]\n",m_scope.data(),name.data()); + StartElementHandler *handler = m_sHandler[m_scope+name]; + if (handler) + { + (*handler)(attrib); + } + else + { + err("Warning: Unexpected start tag `%s' found in scope='%s'!\n", + name.data(),m_scope.data()); + } + return TRUE; + } + bool endElement( const QString&, const QString&, const QString& name ) + { + //printf("endElement [%s]::[%s]\n",m_scope.data(),name.data()); + EndElementHandler *handler; + if (!m_scope.isEmpty() && m_scope.right(name.length()+1)==name+"/") + { // element ends current scope + handler = m_eHandler[m_scope.left(m_scope.length()-1)]; + } + else // continue with current scope + { + handler = m_eHandler[m_scope+name]; + } + if (handler) + { + (*handler)(); + } + return TRUE; + } + bool startDocument() + { + return TRUE; + } + + private: + LayoutParser() : m_sHandler(163), m_eHandler(17) { } + + QDict m_sHandler; + QDict m_eHandler; + QString m_scope; + int m_part; + LayoutNavEntry *m_rootNav; +}; + +//--------------------------------------------------------------------------------- + +class LayoutErrorHandler : public QXmlErrorHandler +{ + public: + bool warning( const QXmlParseException &exception ) + { + err("Warning at line %d column %d: %s\n", + exception.lineNumber(),exception.columnNumber(), + exception.message().data()); + return FALSE; + } + bool error( const QXmlParseException &exception ) + { + err("Error at line %d column %d: %s\n", + exception.lineNumber(),exception.columnNumber(), + exception.message().data()); + return FALSE; + } + bool fatalError( const QXmlParseException &exception ) + { + err("Fatal error at line %d column %d: %s\n", + exception.lineNumber(),exception.columnNumber(), + exception.message().data()); + return FALSE; + } + QString errorString() { return ""; } + + private: + QString errorMsg; +}; + +//--------------------------------------------------------------------------------- + +class LayoutDocManager::Private +{ + public: + QList docEntries[LayoutDocManager::NrParts]; + LayoutNavEntry *rootNav; +}; + +LayoutDocManager::LayoutDocManager() +{ + d = new Private; + int i; + for (i=0;idocEntries[i].setAutoDelete(TRUE); + } + d->rootNav = new LayoutNavEntry; + LayoutParser::instance().init(); +} + + +void LayoutDocManager::init() +{ + // parse the default layout + LayoutErrorHandler errorHandler; + QXmlInputSource source; + source.setData( layout_default ); + QXmlSimpleReader reader; + reader.setContentHandler( &LayoutParser::instance() ); + reader.setErrorHandler( &errorHandler ); + reader.parse( source ); +} + +LayoutDocManager::~LayoutDocManager() +{ + delete d->rootNav; + delete d; +} + +LayoutDocManager & LayoutDocManager::instance() +{ + static LayoutDocManager *theInstance = new LayoutDocManager; + return *theInstance; +} + +const QList &LayoutDocManager::docEntries(LayoutDocManager::LayoutPart part) const +{ + return d->docEntries[(int)part]; +} + +LayoutNavEntry* LayoutDocManager::rootNavEntry() const +{ + return d->rootNav; +} + +void LayoutDocManager::addEntry(LayoutDocManager::LayoutPart p,LayoutDocEntry *e) +{ + d->docEntries[(int)p].append(e); +} + +void LayoutDocManager::clear(LayoutDocManager::LayoutPart p) +{ + d->docEntries[(int)p].clear(); +} + +void LayoutDocManager::parse(QTextStream &t) +{ + LayoutErrorHandler errorHandler; + QXmlInputSource source( t ); + QXmlSimpleReader reader; + reader.setContentHandler( &LayoutParser::instance() ); + reader.setErrorHandler( &errorHandler ); + reader.parse( source ); +} + +//--------------------------------------------------------------------------------- + +void writeDefaultLayoutFile(const char *fileName) +{ + QFile f(fileName); + if (!f.open(IO_WriteOnly)) + { + err("Failed to open file %s for writing!\n",fileName); + return; + } + QTextStream t(&f); + t << layout_default; +} diff --git a/src/layout.h b/src/layout.h new file mode 100644 index 0000000..f1228d1 --- /dev/null +++ b/src/layout.h @@ -0,0 +1,187 @@ +/****************************************************************************** + * + * + * + * + * 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 + +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 &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 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 &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 + diff --git a/src/layout_default.h b/src/layout_default.h new file mode 100644 index 0000000..1067d12 --- /dev/null +++ b/src/layout_default.h @@ -0,0 +1,182 @@ +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" diff --git a/src/layout_default.xml b/src/layout_default.xml new file mode 100644 index 0000000..6532a9e --- /dev/null +++ b/src/layout_default.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in index 61218d8..c32b29f 100644 --- a/src/libdoxygen.pro.in +++ b/src/libdoxygen.pro.in @@ -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 \ diff --git a/src/libdoxygen.t b/src/libdoxygen.t index 42001de..b37eb1b 100644 --- a/src/libdoxygen.t +++ b/src/libdoxygen.t @@ -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 diff --git a/src/memberdef.cpp b/src/memberdef.cpp index a57238b..960699a 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -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"; diff --git a/src/memberdef.h b/src/memberdef.h index 8dbcf0e..d476f5d 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -57,7 +57,6 @@ class MemberDef : public Definition Typedef, Enumeration, EnumValue, - Prototype, Signal, Slot, Friend, diff --git a/src/memberlist.cpp b/src/memberlist.cpp index a14dfeb..d6b389b 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -87,7 +87,7 @@ void MemberList::countDecMembers(bool countEnumValues) m_enumValCnt++,m_numDecMembers++; break; case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break; - case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break; + //case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break; case MemberDef::Define: if (Config_getBool("EXTRACT_ALL") || md->argsString() || !md->initializer().isEmpty() || @@ -200,7 +200,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, switch(md->memberType()) { case MemberDef::Define: // fall through - case MemberDef::Prototype: // fall through + //case MemberDef::Prototype: // fall through case MemberDef::Typedef: // fall through case MemberDef::Variable: // fall through case MemberDef::Function: // fall through diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 09dab2d..a396257 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -28,6 +28,9 @@ #include "docparser.h" #include "searchindex.h" #include "vhdldocgen.h" +#include "layout.h" + +//------------------------------------------------------------------ NamespaceDef::NamespaceDef(const char *df,int dl, const char *name,const char *lref, @@ -202,10 +205,6 @@ void NamespaceDef::insertMember(MemberDef *md) break; case MemberDef::EnumValue: break; - case MemberDef::Prototype: - addMemberToList(MemberList::decProtoMembers,md); - addMemberToList(MemberList::docProtoMembers,md); - break; case MemberDef::Define: addMemberToList(MemberList::decDefineMembers,md); addMemberToList(MemberList::docDefineMembers,md); @@ -225,22 +224,21 @@ void NamespaceDef::computeAnchors() if (allMemberList) setAnchors(0,'a',allMemberList); } -void NamespaceDef::writeDetailedDocumentation(OutputList &ol) +void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title) { if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || - !documentation().isEmpty()) + !documentation().isEmpty() + ) { ol.writeRuler(); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - //bool latexOn = ol.isEnabled(OutputGenerator::Latex); - //if (latexOn) ol.disable(OutputGenerator::Latex); - ol.writeAnchor(0,"_details"); - //if (latexOn) ol.enable(OutputGenerator::Latex); + ol.writeAnchor(0,"_details"); ol.popGeneratorState(); ol.startGroupHeader(); - ol.parseText(theTranslator->trDetailedDescription()); + ol.parseText(title); ol.endGroupHeader(); + ol.startTextBlock(); if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) { @@ -251,6 +249,7 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol) { ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); + ol.disable(OutputGenerator::RTF); ol.newParagraph(); ol.enableAll(); ol.disableAllBut(OutputGenerator::Man); @@ -260,16 +259,112 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol) if (!documentation().isEmpty()) { ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE); - //ol.newParagraph(); } ol.endTextBlock(); + ol.newParagraph(); + } +} + +void NamespaceDef::writeBriefDescription(OutputList &ol) +{ + if (!briefDescription().isEmpty()) + { + ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::RTF); + 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.popGeneratorState(); + + ol.pushGeneratorState(); + ol.disable(OutputGenerator::RTF); + ol.newParagraph(); + ol.popGeneratorState(); + } + ol.writeSynopsis(); +} + +void NamespaceDef::startMemberDeclarations(OutputList &ol) +{ + ol.startMemberSections(); +} + +void NamespaceDef::endMemberDeclarations(OutputList &ol) +{ + ol.endMemberSections(); +} + +void NamespaceDef::startMemberDocumentation(OutputList &ol) +{ + if (Config_getBool("SEPARATE_MEMBER_PAGES")) + { + ol.disable(OutputGenerator::Html); + Doxygen::suppressDocWarnings = TRUE; + } +} + +void NamespaceDef::endMemberDocumentation(OutputList &ol) +{ + if (Config_getBool("SEPARATE_MEMBER_PAGES")) + { + ol.enable(OutputGenerator::Html); + Doxygen::suppressDocWarnings = FALSE; + } +} + +void NamespaceDef::writeClassDeclarations(OutputList &ol,const QCString &title) +{ + if (classSDict) classSDict->writeDeclaration(ol,0,title,TRUE); +} + +void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title) +{ + if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,TRUE); +} + +void NamespaceDef::writeMemberGroups(OutputList &ol) +{ + /* write user defined member groups */ + if (memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + if ((!mg->allMembersInSameSection() || !m_subGrouping) + && mg->header()!="[NOHEADER]") + { + mg->writeDeclarations(ol,0,this,0,0); + } + } } } +void NamespaceDef::writeAuthorSection(OutputList &ol) +{ + // write Author section (Man only) + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.startGroupHeader(); + ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); + ol.endGroupHeader(); + ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); + ol.popGeneratorState(); +} + void NamespaceDef::writeDocumentation(OutputList &ol) { bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); QCString pageTitle; if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) @@ -308,59 +403,123 @@ void NamespaceDef::writeDocumentation(OutputList &ol) Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; } - - ol.startTextBlock(); + + //---------------------------------------- start flexible part ------------------------------- + +#define NEW_LAYOUT +#ifdef NEW_LAYOUT // new flexible layout + + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::BriefDesc: + writeBriefDescription(ol); + break; + case LayoutDocEntry::MemberDeclStart: + startMemberDeclarations(ol); + break; + case LayoutDocEntry::NamespaceClasses: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeClassDeclarations(ol,ls->title); + } + break; + case LayoutDocEntry::NamespaceNestedNamespaces: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeNamespaceDeclarations(ol,ls->title); + } + break; + case LayoutDocEntry::MemberGroups: + writeMemberGroups(ol); + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + writeMemberDeclarations(ol,lmd->type,lmd->title); + } + break; + case LayoutDocEntry::MemberDeclEnd: + endMemberDeclarations(ol); + break; + case LayoutDocEntry::DetailedDesc: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeDetailedDescription(ol,ls->title); + } + break; + case LayoutDocEntry::MemberDefStart: + startMemberDocumentation(ol); + break; + case LayoutDocEntry::MemberDef: + { + LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde; + writeMemberDocumentation(ol,lmd->type,lmd->title); + } + break; + case LayoutDocEntry::MemberDefEnd: + endMemberDocumentation(ol); + break; + case LayoutDocEntry::AuthorSection: + writeAuthorSection(ol); + break; + case LayoutDocEntry::ClassIncludes: + case LayoutDocEntry::ClassInheritanceGraph: + case LayoutDocEntry::ClassNestedClasses: + case LayoutDocEntry::ClassCollaborationGraph: + case LayoutDocEntry::ClassAllMembersLink: + case LayoutDocEntry::ClassUsedFiles: + 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::DirSubDirs: + case LayoutDocEntry::DirFiles: + case LayoutDocEntry::DirGraph: + err("Internal inconsistency: member %d should not be part of " + "LayoutDocManager::Namespace entry list\n",lde->kind()); + break; + } + } + +#else // old fixed layout + + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + + //ol.startTextBlock(); if (Config_getBool("DETAILS_AT_TOP")) { - writeDetailedDocumentation(ol); - ol.newParagraph(); + writeDetailedDescription(ol,theTranslator->trDetailedDescription()); } - else if (!briefDescription().isEmpty()) + + if (!Config_getBool("DETAILS_AT_TOP")) { - ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); - ol.writeString(" \n"); - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Html); - ol.startTextLink(0,"_details"); - ol.parseText(theTranslator->trMore()); - ol.endTextLink(); - ol.enableAll(); - ol.disableAllBut(OutputGenerator::Man); - ol.newParagraph(); - ol.popGeneratorState(); + writeBriefDescription(ol); } - ol.disable(OutputGenerator::Man); - ol.disable(OutputGenerator::RTF); - ol.newParagraph(); - ol.enable(OutputGenerator::Man); - ol.enable(OutputGenerator::RTF); - ol.writeSynopsis(); - ol.endTextBlock(); + //ol.endTextBlock(); - ol.startMemberSections(); - classSDict->writeDeclaration(ol,0,0,TRUE); + startMemberDeclarations(ol); - namespaceSDict->writeDeclaration(ol,TRUE); - - /* write user defined member groups */ - if (memberGroupSDict) - { - MemberGroupSDict::Iterator mgli(*memberGroupSDict); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - if ((!mg->allMembersInSameSection() || !m_subGrouping) - && mg->header()!="[NOHEADER]") - { - mg->writeDeclarations(ol,0,this,0,0); - } - } - } + writeClassDeclarations(ol); + writeNamespaceDeclarations(ol); + writeMemberGroups(ol); writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines()); - writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos()); writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs()); writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations()); writeMemberDeclarations(ol,MemberList::decFuncMembers, @@ -368,22 +527,31 @@ void NamespaceDef::writeDocumentation(OutputList &ol) vhdlOpt ? VhdlDocGen::trFunctionAndProc() : theTranslator->trFunctions()); writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables()); - ol.endMemberSections(); + endMemberDeclarations(ol); if (!Config_getBool("DETAILS_AT_TOP")) { - writeDetailedDocumentation(ol); + writeDetailedDescription(ol,theTranslator->trDetailedDescription()); } - writeMemberDocumentation(ol); + startMemberDocumentation(ol); + + writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation()); + writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()); + writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()); + writeMemberDocumentation(ol,MemberList::docFuncMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionDocumentation()); + writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation()); + + endMemberDocumentation(ol); + + writeAuthorSection(ol); + +#endif + + //---------------------------------------- end flexible part ------------------------------- + + endFile(ol); - // write Author section (Man only) - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Man); - ol.startGroupHeader(); - ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); - ol.endGroupHeader(); - ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { @@ -391,9 +559,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol) Doxygen::tagFile << "
      " << endl; } - ol.popGeneratorState(); - endFile(ol); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) { MemberList *allMemberList = getMemberList(MemberList::allMembersList); @@ -402,27 +567,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol) } } -void NamespaceDef::writeMemberDocumentation(OutputList &ol) -{ - bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) - { - ol.disable(OutputGenerator::Html); - } - - writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation()); - writeMemberDocumentation(ol,MemberList::docProtoMembers,theTranslator->trFunctionPrototypeDocumentation()); - writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()); - writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()); - writeMemberDocumentation(ol,MemberList::docFuncMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionDocumentation()); - writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation()); - - if (Config_getBool("SEPARATE_MEMBER_PAGES")) - { - ol.enable(OutputGenerator::Html); - } -} - void NamespaceDef::writeMemberPages(OutputList &ol) { ol.pushGeneratorState(); @@ -628,7 +772,7 @@ void NamespaceDef::combineUsingRelations() } } -void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName) +void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool localName) { if (count()==0) return; // no namespaces in the list @@ -643,8 +787,9 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName) // write list of namespaces ol.startMemberHeader(); - bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); +#if 0 if (javaOpt) { ol.parseText(theTranslator->trPackages()); @@ -657,6 +802,8 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName) { ol.parseText(theTranslator->trNamespaces()); } +#endif + ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); for (ni.toFirst();(nd=ni.current());++ni) diff --git a/src/namespacedef.h b/src/namespacedef.h index b8bc093..b492e7e 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -45,9 +45,7 @@ class NamespaceDef : public Definition QCString getOutputFileBase() const; void insertUsedFile(const char *fname); - void writeDetailedDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol); - void writeMemberDocumentation(OutputList &ol); void writeMemberPages(OutputList &ol); void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const; @@ -93,6 +91,16 @@ class NamespaceDef : 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 writeDetailedDescription(OutputList &ol,const QCString &title); + void writeBriefDescription(OutputList &ol); + void startMemberDeclarations(OutputList &ol); + void endMemberDeclarations(OutputList &ol); + void writeClassDeclarations(OutputList &ol,const QCString &title); + void writeNamespaceDeclarations(OutputList &ol,const QCString &title); + void writeMemberGroups(OutputList &ol); + void writeAuthorSection(OutputList &ol); + void startMemberDocumentation(OutputList &ol); + void endMemberDocumentation(OutputList &ol); QCString fileName; QStrList files; @@ -146,7 +154,7 @@ class NamespaceSDict : public SDict ((NamespaceDef *)item2)->name() ); } - void writeDeclaration(OutputList &ol,bool localName=FALSE); + void writeDeclaration(OutputList &ol,const char *title,bool localName=FALSE); }; diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 0c6d6c1..44a54e8 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -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; diff --git a/src/pre.l b/src/pre.l index 5d5a79c..0917d3a 100644 --- a/src/pre.l +++ b/src/pre.l @@ -170,14 +170,15 @@ static Define *isDefined(const char *name) return 0; } -static FILE *checkAndOpenFile(const QCString &absName) +static FILE *checkAndOpenFile(const QCString &fileName) { FILE *f = 0; //printf("checkAndOpenFile(%s)\n",absName.data()); - QFileInfo fi(absName); + QFileInfo fi(fileName); if (fi.exists() && fi.isFile()) { - // check include stack for absFileName + QCString absName = convertToQCString(fi.absFilePath()); + // check include stack for absName QStack tmpStack; g_includeStack.setAutoDelete(FALSE); diff --git a/src/qtbc.h b/src/qtbc.h index 22ab1d5..173728e 100644 --- a/src/qtbc.h +++ b/src/qtbc.h @@ -32,7 +32,7 @@ #include #include -inline QCString convertToQCString(const QString &s) { return s.latin1(); } +inline QCString convertToQCString(const QString &s) { return s.utf8(); } #else /* QT_VERSION < 200 */ diff --git a/src/translator_fi.h b/src/translator_fi.h index eb4cf19..118e6f8 100644 --- a/src/translator_fi.h +++ b/src/translator_fi.h @@ -16,40 +16,43 @@ */ /* ================================================================================== -Suomenkielinen käännös: +Suomenkielinen käännös: Olli Korhonen ( -> 0.49-990425) Antti Laine (0.49-990425 -> ) ================================================================================== 1999/10/19 -* Alustava käännös valmis. - -* Huom: Kaikille termeille on keksitty käännösvastine, mikä ei ehkä ole - kaikissa tapauksissa hyvä ratkaisu, ja parempikin termi voi - olla vakiintuneessa käytössä. - -2008/04/08 -* Käännetty versioon 1.5.5 asti. - -* Tehtävää: - - Termien kokoaminen listaksi ja suomennosten järkevyyden tarkastelu. (lista on jo melko kattava) - Author = Tekijä +* Alustava käännös valmis. + +* Huom: Kaikille termeille on keksitty käännösvastine, mikä ei ehkä ole + kaikissa tapauksissa hyvä ratkaisu, ja parempikin termi voi + olla vakiintuneessa käytössä. + +2008-04-08 +* Käännetty versioon 1.5.5 asti. +2008-08-26 +* MAX_DOT_GRAPH_HEIGHT poistettu, versio 1.5.6 +* Tekstit muutettu UTF-8:ksi +* +* Tehtävää: + - Termien kokoaminen listaksi ja suomennosten järkevyyden tarkastelu. (lista on jo melko kattava) + Author = Tekijä Class = Luokka Compound = Kooste Data = Data Documentation = Dokumentaatio - Defines = Määrittelyt + Defines = Määrittelyt Description = Selite Detailed = Yksityiskohtainen Diagram = Kaavio Enum = Enumeraatio / Luettelotyyppi Exceptions = Poikkeukset File = Tiedosto - Friends = Ystävät + Friends = Ystävät Functions = Funktiot Hierarchical = Hierarkinen Index = Indeksi Inherits = Perii - Member = Jäsen + Member = Jäsen Module = Moduli Namespace = Nimiavaruus Parameters = Parametrit @@ -57,19 +60,19 @@ Antti Laine (0.49-990425 -> ) Protected = Suojattu Prototypes = Prototyypit Public = Julkinen - Reference Manual= Käsikirja + Reference Manual= Käsikirja Reimplemented = Uudelleen toteutettu - Related = Liittyvä + Related = Liittyvä Signals = Signaalit Slots = Vastineet Static = Staattinen Struct = Tietue - Typedef = Tyyppimäärittely + Typedef = Tyyppimäärittely Union = Yhdiste Variables = Muuttujat - - Taivutusmuotojen virheettömyyden tarkastelu prepositioiden korvauskohdissa. - - Sanasta sanaan käännöskohtien mielekkyyden tarkastelu valmiista dokumentista. - - umlaut vastineiden käyttö scandien kohdalla. + - Taivutusmuotojen virheettömyyden tarkastelu prepositioiden korvauskohdissa. + - Sanasta sanaan käännöskohtien mielekkyyden tarkastelu valmiista dokumentista. + - umlaut vastineiden käyttö scandien kohdalla. positiiviset kommentit otetaan ilolla vastaan. =================================================================================== @@ -78,7 +81,7 @@ positiiviset kommentit otetaan ilolla vastaan. #ifndef TRANSLATOR_FI_H #define TRANSLATOR_FI_H -class TranslatorFinnish : public Translator +class TranslatorFinnish : public TranslatorEnglish { public: /*! This method is used to generate a warning message to signal @@ -125,18 +128,18 @@ class TranslatorFinnish : public Translator /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { - return "iso-8859-1"; + return "utf-8"; } // --- Language translation methods ------------------- /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() - { return "Liittyvät funktiot"; } // "Related Functions"; + { return "Liittyvät funktiot"; } // "Related Functions"; /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() - { return "(Huomaa, että nämä eivät ole jäsenfunktioita.)"; } // "(Note that these are not member functions.)" + { return "(Huomaa, että nämä eivät ole jäsenfunktioita.)"; } // "(Note that these are not member functions.)" /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() @@ -145,15 +148,15 @@ class TranslatorFinnish : public Translator /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() // header that is put before the list of typedefs. - { return "Jäsentyyppimäärittelyiden dokumentaatio"; } // "Member Typedef Documentation" + { return "Jäsentyyppimäärittelyiden dokumentaatio"; } // "Member Typedef Documentation" /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() - { return "Jäsenenumeraatioiden dokumentaatio"; } // "Member Enumeration Documentation" + { return "Jäsenenumeraatioiden dokumentaatio"; } // "Member Enumeration Documentation" /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() - { return "Jäsenfunktioiden dokumentaatio"; } // "Member Function Documentation" + { return "Jäsenfunktioiden dokumentaatio"; } // "Member Function Documentation" /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() @@ -164,42 +167,42 @@ class TranslatorFinnish : public Translator } else { - return "Jäsendatan dokumentaatio"; // "Member Data Documentation" + return "Jäsendatan dokumentaatio"; // "Member Data Documentation" } } /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() - { return "Lisää..."; } // "More..." + { return "Lisää..."; } // "More..." /*! put in the class documentation */ virtual QCString trListOfAllMembers() - { return "Lista kaikista jäsenistä."; } // "List of all members." + { return "Lista kaikista jäsenistä."; } // "List of all members." virtual QCString trMemberList() /*! used as the title of the "list of all members" page of a class */ - { return "Jäsenlista"; } // "Member List" + { return "Jäsenlista"; } // "Member List" /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() - { return "Tämä on lista kaikista jäsenistä"; } // "This is the complete list of members for " + { return "Tämä on lista kaikista jäsenistä"; } // "This is the complete list of members for " /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() - { return ", sisältäen kaikki perityt jäsenet."; } // ", including all inherited members." + { return ", sisältäen kaikki perityt jäsenet."; } // ", including all inherited members." /*! this is put at the author sections at the bottom of man pages. * parameter s is name of the project name. */ virtual QCString trGeneratedAutomatically(const char *s) { QCString result=(QCString)"Automaattisesti generoitu Doxygenilla " - "lähdekoodista projektille "+s; // "Generated automatically by Doxygen" ... "for" ... "from the sourcecode" + "lähdekoodista projektille "+s; // "Generated automatically by Doxygen" ... "for" ... "from the sourcecode" //if (s) result+=(QCString)" voor "+s; - // tässä on ongelma, kuinka taivuttaa parametria, esim. "Jcad"+"in"; "IFC2VRML konversio"+"n" - // mutta ratkaistaan ongelma kätevästi kaksoispisteellä -> "Jcad:n" / "IFC2VRML konversio:n" - // lopputulos on vähemmän kökkö ja täysin luettava, mutta ei kuitenkaan täydellinen. + // tässä on ongelma, kuinka taivuttaa parametria, esim. "Jcad"+"in"; "IFC2VRML konversio"+"n" + // mutta ratkaistaan ongelma kätevästi kaksoispisteellä -> "Jcad:n" / "IFC2VRML konversio:n" + // lopputulos on vähemmän kökkö ja täysin luettava, mutta ei kuitenkaan täydellinen. // - // kierretään ongelma taivuttamalla sanaa projekti :) + // kierretään ongelma taivuttamalla sanaa projekti :) return result; } @@ -213,7 +216,7 @@ class TranslatorFinnish : public Translator /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() - { return "määritelty"; } // "defined in" + { return "määritelty"; } // "defined in" // quick reference sections @@ -249,11 +252,11 @@ class TranslatorFinnish : public Translator { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Tietueen kentät"; // "Data Fields" + return "Tietueen kentät"; // "Data Fields" } else { - return "Luokan jäsenet"; // "Class Members" + return "Luokan jäsenet"; // "Class Members" } } @@ -266,13 +269,13 @@ class TranslatorFinnish : public Translator } else { - return "Tiedoston jäsenet"; // "File Members" + return "Tiedoston jäsenet"; // "File Members" } } /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { return "Liittyvät sivut"; } // "Related Pages" + { return "Liittyvät sivut"; } // "Related Pages" /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() @@ -284,14 +287,14 @@ class TranslatorFinnish : public Translator /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() - { return "Tämä periytymislista on päätasoltaan aakkostettu " // "This inheritance list is sorted roughly, " - "mutta alijäsenet on aakkostettu itsenäisesti:"; // "but not completely, alphabetically:"; + { return "Tämä periytymislista on päätasoltaan aakkostettu " // "This inheritance list is sorted roughly, " + "mutta alijäsenet on aakkostettu itsenäisesti:"; // "but not completely, alphabetically:"; } /*! This is an introduction to the list with all files. */ virtual QCString trFileListDescription(bool extractAll) { - QCString result="Tässä on lista kaikista "; + QCString result="Tässä on lista kaikista "; if (!extractAll) result+="dokumentoiduista "; // "documented " result+="tiedostoista lyhyen selitteen kera:"; // "files with brief descriptions:" return result; @@ -303,11 +306,11 @@ class TranslatorFinnish : public Translator if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Tällä ovat tietueet lyhyen selitteen kera:"; // "Here are the data structures with brief descriptions:" + return "Tässä ovat tietueet lyhyen selitteen kera:"; // "Here are the data structures with brief descriptions:" } else { - return "Tässä ovat luokat, tietueet ja " // "Here are the classes, structs and " + return "Tässä ovat luokat, tietueet ja " // "Here are the classes, structs and " "yhdisteet lyhyen selitteen kera:"; // "unions with brief descriptions:" } } @@ -315,29 +318,29 @@ class TranslatorFinnish : public Translator /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Tässä on lista kaikista "; // "Here is a list of all " + QCString result="Tässä on lista kaikista "; // "Here is a list of all " if (!extractAll) { result+="dokumentoiduista "; // "documented " } if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="tietuiden ja yhdisteiden kentistä"; // "struct and union fields" + result+="tietuiden ja yhdisteiden kentistä"; // "struct and union fields" } else { - result+="luokkien jäsenistä"; // "class members" + result+="luokkien jäsenistä"; // "class members" } - result+=" linkitettyinä "; // " with links to " + result+=" linkitettyinä "; // " with links to " if (!extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="jokaisen kentän tietueen/yhdisteen dokumentaatioon:"; // "the struct/union documentation for each field:" + result+="jokaisen kentän tietueen/yhdisteen dokumentaatioon:"; // "the struct/union documentation for each field:" } else { - result+="jokaisen jäsenen luokkadokumentaatioon:"; // "the class documentation for each member:" + result+="jokaisen jäsenen luokkadokumentaatioon:"; // "the class documentation for each member:" } } else @@ -357,18 +360,18 @@ class TranslatorFinnish : public Translator /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="Tässä on lista kaikista "; // "Here is a list of all " + QCString result="Tässä on lista kaikista "; // "Here is a list of all " if (!extractAll) result+="dokumentoiduista "; // "documented " if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="funktioista, muuttujista, määrittelyistä, luetteloista ja tyyppimäärittelyistä"; // "functions, variables, defines, enums, and typedefs" + result+="funktioista, muuttujista, määrittelyistä, luetteloista ja tyyppimäärittelyistä"; // "functions, variables, defines, enums, and typedefs" } else { - result+="tiedoston jäsenistä"; // "file members" + result+="tiedoston jäsenistä"; // "file members" } - result+=" linkitettyinä "; // " with links to " + result+=" linkitettyinä "; // " with links to " if (extractAll) result+="tiedostoon, johon ne kuuluvat:"; // "the files they belong to:" else @@ -378,15 +381,15 @@ class TranslatorFinnish : public Translator /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() - { return "Tässä on lista kaikista esimerkeistä:"; } // "Here is a list of all examples:" + { return "Tässä on lista kaikista esimerkeistä:"; } // "Here is a list of all examples:" /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return "Tässä on lista kaikista liittyvistä dokumentaatiosivuista:"; } // "Here is a list of all related documentation pages:" + { return "Tässä on lista kaikista liittyvistä dokumentaatiosivuista:"; } // "Here is a list of all related documentation pages:" /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() - { return "Tässä on lista kaikista moduleista:"; } // "Here is a list of all modules:" + { return "Tässä on lista kaikista moduleista:"; } // "Here is a list of all modules:" // index titles (the project name is prepended for these) @@ -468,13 +471,13 @@ class TranslatorFinnish : public Translator /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() - { return "Käsikirja"; } // "Reference Manual" + { return "Käsikirja"; } // "Reference Manual" /*! This is used in the documentation of a file as a header before the * list of defines */ virtual QCString trDefines() - { return "Määrittelyt"; } // "Defines" + { return "Määrittelyt"; } // "Defines" /*! This is used in the documentation of a file as a header before the * list of function prototypes @@ -486,7 +489,7 @@ class TranslatorFinnish : public Translator * list of typedefs */ virtual QCString trTypedefs() - { return "Tyyppimäärittelyt"; } // "Typedefs" + { return "Tyyppimäärittelyt"; } // "Typedefs" /*! This is used in the documentation of a file as a header before the * list of enumerations @@ -516,7 +519,7 @@ class TranslatorFinnish : public Translator * documentation blocks for defines */ virtual QCString trDefineDocumentation() - { return "Määritysten dokumentointi"; } // "Define Documentation" + { return "Määritysten dokumentointi"; } // "Define Documentation" /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes @@ -528,7 +531,7 @@ class TranslatorFinnish : public Translator * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() - { return "Tyyppimääritysten dokumentaatio"; } // "Typedef Documentation" + { return "Tyyppimääritysten dokumentaatio"; } // "Typedef Documentation" /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types @@ -568,7 +571,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trGeneratedAt(const char *date,const char *projName) { - // funktio on hiukan vaikea kääntää prepositioihin sidotun rakenteen vuoksi. + // funktio on hiukan vaikea kääntää prepositioihin sidotun rakenteen vuoksi. // Muutetaan siis lauserakennetta suomalaisemmaksi // Generated on $date for $project by: // -> Generated for $project on $date by: @@ -592,7 +595,7 @@ class TranslatorFinnish : public Translator /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() - { return "Vain sisäiseen käyttöön."; } // "For internal use only." + { return "Vain sisäiseen käyttöön."; } // "For internal use only." /*! this text is generated when the \\warning command is used. */ virtual QCString trWarning() @@ -604,7 +607,7 @@ class TranslatorFinnish : public Translator /*! this text is generated when the \\date command is used. */ virtual QCString trDate() - { return "Päiväys"; } // "Date" + { return "Päiväys"; } // "Date" /*! this text is generated when the \\return command is used. */ virtual QCString trReturns() @@ -612,7 +615,7 @@ class TranslatorFinnish : public Translator /*! this text is generated when the \\sa command is used. */ virtual QCString trSeeAlso() - { return "Katso myös"; } // "See also" + { return "Katso myös"; } // "See also" /*! this text is generated when the \\param command is used. */ virtual QCString trParameters() @@ -637,7 +640,7 @@ class TranslatorFinnish : public Translator /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { - QCString result="Tässä on lista kaikista "; // "Here is a list of all " + QCString result="Tässä on lista kaikista "; // "Here is a list of all " if (!extractAll) result+="dokumentoiduista "; // "documented " result+="nimiavaruuksista lyhyen selitteen kera:"; // "namespaces with brief descriptions:" return result; @@ -647,7 +650,7 @@ class TranslatorFinnish : public Translator * friends of a class */ virtual QCString trFriends() - { return "Ystävät"; } // "Friends" + { return "Ystävät"; } // "Friends" ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 @@ -657,7 +660,7 @@ class TranslatorFinnish : public Translator * related classes */ virtual QCString trRelatedFunctionDocumentation() - { return "Ystävät ja niihin liittyvien funktioiden dokumentaatio"; } // "Friends And Related Function Documentation" + { return "Ystävät ja niihin liittyvien funktioiden dokumentaatio"; } // "Friends And Related Function Documentation" ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -671,13 +674,13 @@ class TranslatorFinnish : public Translator QCString result=(QCString)clName; switch(compType) { - case ClassDef::Class: result+=" Luokka"; break; // " Class" - case ClassDef::Struct: result+=" Tietue"; break; // " Struct" - case ClassDef::Union: result+=" Yhdiste"; break; // " Union" - case ClassDef::Interface: result+=" Rajapinta"; break; // " Interface" - case ClassDef::Protocol: result+=" Protokolla"; break; // " Protocol" - case ClassDef::Category: result+=" Kategoria"; break; // " Category" - case ClassDef::Exception: result+=" Poikkeus"; break; // " Exception" + case ClassDef::Class: result+=" luokka"; break; // " Class" + case ClassDef::Struct: result+=" tietue"; break; // " Struct" + case ClassDef::Union: result+=" yhdiste"; break; // " Union" + case ClassDef::Interface: result+=" rajapinta"; break; // " Interface" + case ClassDef::Protocol: result+=" protokolla"; break; // " Protocol" + case ClassDef::Category: result+=" kategoria"; break; // " Category" + case ClassDef::Exception: result+=" poikkeus"; break; // " Exception" } if (isTemplate) result+="malli"; // " Template" result+="referenssi"; // " Reference" @@ -688,7 +691,7 @@ class TranslatorFinnish : public Translator virtual QCString trFileReference(const char *fileName) { QCString result=fileName; - result+=" Tiedostoreferenssi"; // " File Reference" + result+=" tiedostoreferenssi"; // " File Reference" return result; } @@ -696,30 +699,30 @@ class TranslatorFinnish : public Translator virtual QCString trNamespaceReference(const char *namespaceName) { QCString result=namespaceName; - result+=" Nimiavaruusreferenssi"; // " Namespace Reference" + result+=" nimiavaruusreferenssi"; // " Namespace Reference" return result; } virtual QCString trPublicMembers() - { return "Julkiset jäsenfunktiot"; } // "Public Member Functions" + { return "Julkiset jäsenfunktiot"; } // "Public Member Functions" virtual QCString trPublicSlots() { return "Julkiset vastineet"; } // "Public Slots" virtual QCString trSignals() { return "Signaalit"; } // "Signals" virtual QCString trStaticPublicMembers() - { return "Staattiset julkiset jäsenfunktiot"; } // "Static Public Member Functions" + { return "Staattiset julkiset jäsenfunktiot"; } // "Static Public Member Functions" virtual QCString trProtectedMembers() - { return "Suojatut jäsenfunktiot"; } // "Protected Member Functions" + { return "Suojatut jäsenfunktiot"; } // "Protected Member Functions" virtual QCString trProtectedSlots() { return "Suojatut vastineet"; } // "Protected Slots" virtual QCString trStaticProtectedMembers() - { return "Staattiset suojatut jäsenfunktiot"; } // "Static Protected Member Functions" + { return "Staattiset suojatut jäsenfunktiot"; } // "Static Protected Member Functions" virtual QCString trPrivateMembers() - { return "Yksityiset jäsenfunktiot"; } // "Private Member Functions" + { return "Yksityiset jäsenfunktiot"; } // "Private Member Functions" virtual QCString trPrivateSlots() { return "Yksityiset vastineet"; } // "Private Slots" virtual QCString trStaticPrivateMembers() - { return "Staattiset yksityiset jäsenfunktiot"; } // "Static Private Member Functions" + { return "Staattiset yksityiset jäsenfunktiot"; } // "Static Private Member Functions" /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -751,7 +754,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trInheritsList(int numEntries) { - return "Perijät "+trWriteList(numEntries)+"."; // "Inherits " + return (QCString)"Periytyy "+(numEntries > 1 ? "luokista " : "luokasta ")+trWriteList(numEntries)+"."; // "Inherits " } /*! used in class documentation to produce a list of super classes, @@ -759,7 +762,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trInheritedByList(int numEntries) { - return "Periytyy "+trWriteList(numEntries)+"."; // "Inherited by " + return (QCString)"Periytetään "+(numEntries > 1 ? "luokissa " : "luokassa ")+trWriteList(numEntries)+"."; // "Inherited by " } /*! used in member documentation blocks to produce a list of @@ -767,7 +770,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trReimplementedFromList(int numEntries) { - return "Uudelleen toteutettaa "+trWriteList(numEntries)+"."; // "Reimplemented from " + return (QCString)"Uudelleen toteuttaa "+(numEntries > 1 ? "luokat " : "luokan ")+trWriteList(numEntries)+"."; // "Reimplemented from " } /*! used in member documentation blocks to produce a list of @@ -775,19 +778,19 @@ class TranslatorFinnish : public Translator */ virtual QCString trReimplementedInList(int numEntries) { - return "Uudelleen toteutettu "+trWriteList(numEntries)+"."; // "Reimplemented in " + return (QCString)"Uudelleen toteutettu "+(numEntries > 1 ? "luokissa " : "luokassa ")+trWriteList(numEntries)+"."; // "Reimplemented in " } /*! This is put above each page as a link to all members of namespaces. */ virtual QCString trNamespaceMembers() - { return "Nimiavaruuden jäsenet"; } // "Namespace Members" + { return "Nimiavaruuden jäsenet"; } // "Namespace Members" /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="Tässä on lista kaikista "; // "Here is a list of all " + QCString result="Tässä on lista kaikista "; // "Here is a list of all " if (!extractAll) result+="dokumentoiduista "; // "documented " - result+="nimiavaruuden jäsenistä linkitettynä "; // "namespace members with links to " + result+="nimiavaruuden jäsenistä linkitettynä "; // "namespace members with links to " if (extractAll) result+="nimiavaruuden dokumentaatioon johon ne kuuluvat:"; // "the namespace documentation for each member:"; else @@ -827,7 +830,7 @@ class TranslatorFinnish : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this " + QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this " switch(compType) { case ClassDef::Class: result+="luokalle"; break; // "class" @@ -860,7 +863,7 @@ class TranslatorFinnish : public Translator /*! This is in the (quick) index as a link to the main page (index.html) */ virtual QCString trMainPage() - { return "Pääsivu"; } // "Main Page" + { return "Pääsivu"; } // "Main Page" /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. @@ -874,11 +877,11 @@ class TranslatorFinnish : public Translator virtual QCString trDefinedAtLineInSourceFile() { - return "Määrittely tiedoston @1 rivillä @0."; // "Definition at line @0 of file @1." + return "Määrittely tiedoston @1 rivillä @0."; // "Definition at line @0 of file @1." } virtual QCString trDefinedInSourceFile() { - return "Määrittely tiedostossa @0."; // "Definition in file @0." + return "Määrittely tiedostossa @0."; // "Definition in file @0." } ////////////////////////////////////////////////////////////////////////// @@ -897,12 +900,12 @@ class TranslatorFinnish : public Translator /*! this text is put before a collaboration diagram */ virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)"Yhteistyökaavio luokalle "+clName+":"; // "Collaboration diagram for "+clName+":" + return (QCString)"Yhteistyökaavio luokalle "+clName+":"; // "Collaboration diagram for "+clName+":" } /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)"Sisällytysriippuvuuskaavio tiedostolle "+fName+":"; // "Include dependency graph for "+fName+":" + return (QCString)"Sisällytysriippuvuuskaavio tiedostolle "+fName+":"; // "Include dependency graph for "+fName+":" } /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() @@ -912,12 +915,12 @@ class TranslatorFinnish : public Translator /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { - return "Siirry tämän tiedoston lähdekoodiin."; // "Go to the source code of this file." + return "Siirry tämän tiedoston lähdekoodiin."; // "Go to the source code of this file." } /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { - return "Mene tämän tiedoston dokumentaatioon."; // "Go to the documentation of this file." + return "Mene tämän tiedoston dokumentaatioon."; // "Go to the documentation of this file." } /*! Text for the \\pre command */ virtual QCString trPrecondition() @@ -927,12 +930,12 @@ class TranslatorFinnish : public Translator /*! Text for the \\post command */ virtual QCString trPostcondition() { - return "Jälkiehto"; // "Postcondition" + return "Jälkiehto"; // "Postcondition" } /*! Text for the \\invariant command */ virtual QCString trInvariant() { - return "Invariantti"; // vai "Pysyväisväittämä"? "Invariant" + return "Invariantti"; // vai "Pysyväisväittämä"? "Invariant" } /*! Text shown before a multi-line variable/enum initialization */ virtual QCString trInitialValue() @@ -950,7 +953,7 @@ class TranslatorFinnish : public Translator } virtual QCString trGotoGraphicalHierarchy() { - return "Siirry graafiseen luokkahiearkiaan"; // "Go to the graphical class hierarchy" + return "Siirry graafiseen luokkahierarkiaan"; // "Go to the graphical class hierarchy" } virtual QCString trGotoTextualHierarchy() { @@ -967,7 +970,7 @@ class TranslatorFinnish : public Translator virtual QCString trNote() { - // FIXME: Missähän merkityksessä tätä käytetään? + // FIXME: Missähän merkityksessä tätä käytetään? return "Huomautus"; // "Note" } virtual QCString trPublicTypes() @@ -978,7 +981,7 @@ class TranslatorFinnish : public Translator { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Tietueen kentät"; // "Data Fields" + return "Tietueen kentät"; // "Data Fields" } else { @@ -999,7 +1002,7 @@ class TranslatorFinnish : public Translator } virtual QCString trStaticProtectedAttribs() { - return "Stattiset suojellut attribuutit"; // "Static Protected Attributes" + return "Staattiset suojellut attribuutit"; // "Static Protected Attributes" } virtual QCString trPrivateTypes() { @@ -1021,12 +1024,12 @@ class TranslatorFinnish : public Translator /*! Used as a marker that is put before a \\todo item */ virtual QCString trTodo() { - return "Vielä tehtävä"; // "Todo" + return "Vielä tehtävä"; // "Todo" } /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "Tehtävälista"; // "Todo List" + return "Tehtävälista"; // "Todo List" } ////////////////////////////////////////////////////////////////////////// @@ -1047,15 +1050,15 @@ class TranslatorFinnish : public Translator } virtual QCString trInclByDepGraph() { - return "Tämä kaavio näyttää, mitkä tiedostot suorasti" - "tai epäsuorasti sisällyttävät tämän tiedoston"; + return "Tämä kaavio näyttää, mitkä tiedostot suorasti" + "tai epäsuorasti sisällyttävät tämän tiedoston"; // "This graph shows which files directly or " // "indirectly include this file:" } virtual QCString trSince() { - // FIXME: Missä merkityksessä tätä käytetään? - return "Lähtien"; // "Since" + // FIXME: Missä merkityksessä tätä käytetään? + return "Lähtien"; // "Since" } ////////////////////////////////////////////////////////////////////////// @@ -1073,13 +1076,13 @@ class TranslatorFinnish : public Translator virtual QCString trLegendDocs() { return - "Tämä sivu selittää, kuinka doxygenin generoimia kaavioita tulkitaan.

      \n" + "Tämä sivu selittää, kuinka doxygenin generoimia kaavioita tulkitaan.

      \n" // "This page explains how to interpret the graphs that are generated " // "by doxygen.

      \n" - "Ajattele seuraavaa esimerkkiä:\n" + "Ajattele seuraavaa esimerkkiä:\n" // "Consider the following example:\n" "\\code\n" - "/*! Näkymätön luokka katkaisun vuoksi */\n" + "/*! Näkymätön luokka katkaisun vuoksi */\n" // "/*! Invisible class because of truncation */\n" "class Nakymaton { };\n\n" // "class Invisible { };\n\n" @@ -1089,9 +1092,9 @@ class TranslatorFinnish : public Translator // "class Truncated : public Invisible { };\n\n" "/* Luokkaa ei ole dokumentoitu doxygen-kommenteilla */\n" // "/* Class not documented with doxygen comments */\n" - "class Dokumentoimaton { };\n\n" + "class Dokumentoimaton { };\n\n" // "class Undocumented { };\n\n" - "/*! Julkista periyttämistä käyttäen periytetty luokka */\n" + "/*! Julkista periyttämistä käyttäen periytetty luokka */\n" // "/*! Class that is inherited using public inheritance */\n" "class JulkinenKanta : public Katkaistu { };\n\n" // "class PublicBase : public Truncated { };\n\n" @@ -1099,15 +1102,15 @@ class TranslatorFinnish : public Translator // "/*! A template class */\n" "template class Malli { };\n\n" // "template class Templ { };\n\n" - "/*! Suojeltua periytymistä käyttäen periytetty luokka */\n" + "/*! Suojeltua periytymistä käyttäen periytetty luokka */\n" // "/*! Class that is inherited using protected inheritance */\n" "class SuojeltuKanta { };\n\n" // "class ProtectedBase { };\n\n" - "/*! Yksityistä periytymistä käyttäen periytetty luokka */\n" + "/*! Yksityistä periytymistä käyttäen periytetty luokka */\n" // "/*! Class that is inherited using private inheritance */\n" "class YksityisKanta { };\n\n" // "class PrivateBase { };\n\n" - "/*! Luokka jota periytetty luokka käyttää */\n" + "/*! Luokka jota periytetty luokka käyttää */\n" // "/*! Class that is used by the Inherited class */\n" "class Kaytetty { };\n\n" // "class Used { };\n\n" @@ -1132,16 +1135,14 @@ class TranslatorFinnish : public Translator // " Used *m_usedClass;\n" // "};\n" "\\endcode\n" - "Jos \\c MAX_DOT_GRAPH_HEIGHT-kenttä asetustiedostossa " - // "If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file " - "on asetettu arvoon 240, on tuloksena seuraavanlainen kaavio:" - // "is set to 240 this will result in the following graph:" + "Tuloksena on seuraavanlainen kaavio:" + //"This will result in the following graph:" "

      \"\"
      \n" "

      \n" - "Ylläolevassa kaaviossa laatikoilla on seuraavat merkitykset\n:" + "Ylläolevassa kaaviossa laatikoilla on seuraavat merkitykset\n:" // "The boxes in the above graph have the following meaning:\n" "

        \n" - "
      • Täytetty harmaa laatikko esittää tietuetta tai luokkaa, jolle " + "
      • Täytetty harmaa laatikko esittää tietuetta tai luokkaa, jolle " // "
      • %A filled gray box represents the struct or class for which the " "kaavio on generoitu.\n" // "graph is generated.\n" @@ -1151,33 +1152,33 @@ class TranslatorFinnish : public Translator // "
      • %A box with a grey border denotes an undocumented struct or class.\n" "
      • Punareunainen laatikko merkistee dokumentoitua luokkaa tai structia " // "
      • %A box with a red border denotes a documented struct or class for" - "jolle ei näytetä kaikkia periytymis-/sisällyssuhteita. Kaavio " + "jolle ei näytetä kaikkia periytymis-/sisällyssuhteita. Kaavio " // "which not all inheritance/containment relations are shown. %A graph is " - "katkaistaan, jos se ei mahdu määriteltyjen rajojen sisään.\n" + "katkaistaan, jos se ei mahdu määriteltyjen rajojen sisään.\n" // "truncated if it does not fit within the specified boundaries.\n" "
      \n" "Nuolilla on seuraavat merkitykset:\n" // "The arrows have the following meaning:\n" "
        \n" - "
      • Tummansinistä nuolta käytetään osoittamaan julkista periytymis" + "
      • Tummansinistä nuolta käytetään osoittamaan julkista periytymis" // "
      • %A dark blue arrow is used to visualize a public inheritance " - "suhdetta kahden luokan välillä.\n" + "suhdetta kahden luokan välillä.\n" // "relation between two classes.\n" - "
      • Tummanvihreää nuolta käytetään suojellussa periytymisessä.\n" + "
      • Tummanvihreää nuolta käytetään suojellussa periytymisessä.\n" // "
      • %A dark green arrow is used for protected inheritance.\n" - "
      • Tummanpunaista nuolta käytetään yksityisessä periytymisessä.\n" + "
      • Tummanpunaista nuolta käytetään yksityisessä periytymisessä.\n" // "
      • %A dark red arrow is used for private inheritance.\n" - "
      • Purppuranväristä katkoviivaa käytetään, jos luokka sisältyy tai " + "
      • Purppuranväristä katkoviivaa käytetään, jos luokka sisältyy tai " // "
      • %A purple dashed arrow is used if a class is contained or used " - "on toisen luokan käyttämä. Nuoli nimetään sillä muuttujalla/muuttujilla " + "on toisen luokan käyttämä. Nuoli nimetään sillä muuttujalla/muuttujilla " // "by another class. The arrow is labeled with the variable(s) " - "jonka läpi osoitettua luokkaa tai tietuetta käytetään.\n" + "jonka läpi osoitettua luokkaa tai tietuetta käytetään.\n" // "through which the pointed class or struct is accessible.\n" - "
      • Keltainen katkoviivalla piirretty nuoli merkitsee suhdetta mallin esiintymän ja " + "
      • Keltainen katkoviivalla piirretty nuoli merkitsee suhdetta mallin esiintymän ja " // "
      • %A yellow dashed arrow denotes a relation between a template instance and " - "malliluokan välillä. Nuoli nimetään " + "malliluokan välillä. Nuoli nimetään " // "the template class it was instantiated from. The arrow is labeled with " - "mallin esiintymän malliparametrilla.\n" + "mallin esiintymän malliparametrilla.\n" // "the template parameters of the instance.\n" "
      \n"; } @@ -1209,7 +1210,7 @@ class TranslatorFinnish : public Translator /*! Used as a section header for KDE-2 IDL methods */ virtual QCString trDCOPMethods() { - return "DCOP-jäsenfunktiot"; // "DCOP Member Functions" + return "DCOP-jäsenfunktiot"; // "DCOP Member Functions" } ////////////////////////////////////////////////////////////////////////// @@ -1256,7 +1257,7 @@ class TranslatorFinnish : public Translator /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "Tässä ovat paketit lyhyiden selitysten kanssa (jos saatavilla):"; // "Here are the packages with brief descriptions (if available):" + return "Tässä ovat paketit lyhyiden selitysten kanssa (jos saatavilla):"; // "Here are the packages with brief descriptions (if available):" } /*! The link name in the Quick links header for each page */ virtual QCString trPackages() @@ -1372,7 +1373,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trGroup(bool first_capital, bool singular) { - QCString result((first_capital ? "Ryhmä" : "ryhmä")); // "Group" / "group" + QCString result((first_capital ? "Ryhmä" : "ryhmä")); // "Group" / "group" if (!singular) result+="t"; // "+s" return result; } @@ -1394,7 +1395,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trMember(bool first_capital, bool singular) { - QCString result((first_capital ? "Jäsen" : "jäsen")); // "Member" / "member" + QCString result((first_capital ? "Jäsen" : "jäsen")); // "Member" / "member" if (!singular) result+="et"; // "+s" return result; } @@ -1418,7 +1419,7 @@ class TranslatorFinnish : public Translator * for the author section in man pages. */ virtual QCString trAuthor(bool first_capital, bool singular) { - QCString result((first_capital ? "Tekijä" : "tekijä")); // "Author" / "author" + QCString result((first_capital ? "Tekijä" : "tekijä")); // "Author" / "author" if (!singular) result+="t"; // "+s" return result; } @@ -1443,7 +1444,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trImplementedFromList(int numEntries) { - return "Toteuttaa "+trWriteList(numEntries)+"."; // "Implements " + return "Toteuttaa luokan "+trWriteList(numEntries)+"."; // "Implements " } /*! used in member documentation blocks to produce a list of @@ -1451,7 +1452,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trImplementedInList(int numEntries) { - return "Toteutettu "+trWriteList(numEntries)+"."; // "Implemented in " + return "Toteutettu luokassa "+trWriteList(numEntries)+"."; // "Implemented in " } ////////////////////////////////////////////////////////////////////////// @@ -1463,7 +1464,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trRTFTableOfContents() { - return "Sisällysluettelo"; // "Table of Contents" + return "Sisällysluettelo"; // "Table of Contents" } ////////////////////////////////////////////////////////////////////////// @@ -1548,7 +1549,7 @@ class TranslatorFinnish : public Translator /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the call graph for this function:" + return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the call graph for this function:" } ////////////////////////////////////////////////////////////////////////// @@ -1582,16 +1583,16 @@ class TranslatorFinnish : public Translator { if (numDocuments==0) { - return "Valitettavasti yksikään dokumentti ei vastannut hakuasi."; // "Sorry, no documents matching your query." + return "Valitettavasti yksikään dokumentti ei vastannut hakuasi."; // "Sorry, no documents matching your query." } else if (numDocuments==1) { - return "Löytyi 1 dokumentti, joka vastasi hakuasi."; // "Found 1 document matching your query."; + return "Löytyi 1 dokumentti, joka vastasi hakuasi."; // "Found 1 document matching your query."; } else { - return "Löytyi $num dokumenttia, jotka vastasivat hakuasi. " // "Found $num documents matching your query. " - "Parhaat tulokset näytetään ensin."; // "Showing best matches first." + return "Löytyi $num dokumenttia, jotka vastasivat hakuasi. " // "Found $num documents matching your query. " + "Parhaat tulokset näytetään ensin."; // "Showing best matches first." } } /*! This string is put before the list of matched words, for each search @@ -1610,7 +1611,7 @@ class TranslatorFinnish : public Translator */ virtual QCString trSourceFile(QCString& filename) { - return filename + " lähdekooditiedosto"; // " Source File" + return filename + " lähdekooditiedosto"; // " Source File" } ////////////////////////////////////////////////////////////////////////// @@ -1639,7 +1640,7 @@ class TranslatorFinnish : public Translator * and the fact that it is sorted alphabetically per level */ virtual QCString trDirDescription() - { return "Tämä hakemistohierarkia on järjestetty aakkosellisesti tasoittain:"; + { return "Tämä hakemistohierarkia on järjestetty aakkosellisesti tasoittain:"; //This directory hierarchy is sorted roughly, " // "but not completely, alphabetically:"; } @@ -1648,7 +1649,7 @@ class TranslatorFinnish : public Translator * directory is passed via \a dirName. */ virtual QCString trDirReference(const char *dirName) - { QCString result=dirName; result+=" Hakemistoreferenssi"; return result; } + { QCString result=dirName; result+=" hakemistoreferenssi"; return result; } // " Directory Reference" /*! This returns the word directory with or without starting capital @@ -1670,9 +1671,9 @@ class TranslatorFinnish : public Translator */ virtual QCString trOverloadText() { - return "Tämä on ylikuormitettu jäsenfunktio, ja se tarjotaan " - "käytön helpottamiseksi. Se eroaa ylläolevasta " - "funktiosta ainoastaan hyväksymiltä parametreiltaan."; + return "Tämä on ylikuormitettu jäsenfunktio, ja se tarjotaan " + "käytön helpottamiseksi. Se eroaa ylläolevasta " + "funktiosta ainoastaan hyväksymiltä parametreiltaan."; // "This is an overloaded member function, " // "provided for convenience. It differs from the above " // "function only in what argument(s) it accepts." @@ -1685,7 +1686,7 @@ class TranslatorFinnish : public Translator /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the caller graph for this function:" + return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the caller graph for this function:" } /*! This is used in the documentation of a file/namespace before the list @@ -1700,7 +1701,7 @@ class TranslatorFinnish : public Translator /*! header that is put before the list of member subprograms (Fortran). */ virtual QCString trMemberFunctionDocumentationFortran() - { return "Jäsenfunktioiden/aliohjelmien dokumentaatio"; } // "Member Function/Subroutine Documentation" + { return "Jäsenfunktioiden/aliohjelmien dokumentaatio"; } // "Member Function/Subroutine Documentation" /*! This is put above each page as a link to the list of annotated data types (Fortran). */ virtual QCString trCompoundListFortran() @@ -1708,25 +1709,25 @@ class TranslatorFinnish : public Translator /*! This is put above each page as a link to all members of compounds (Fortran). */ virtual QCString trCompoundMembersFortran() - { return "Kentät"; } // "Data Fields"; + { return "Kentät"; } // "Data Fields"; /*! This is an introduction to the annotated compound list (Fortran). */ virtual QCString trCompoundListDescriptionFortran() - { return "Tässä ovat tietotyypit lyhyillä selityksillä:"; } // "Here are the data types with brief descriptions:" + { return "Tässä ovat tietotyypit lyhyillä selityksillä:"; } // "Here are the data types with brief descriptions:" /*! This is an introduction to the page with all data types (Fortran). */ virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) { - QCString result="Tässä on lista kaikista "; // "Here is a list of all " + QCString result="Tässä on lista kaikista "; // "Here is a list of all " if (!extractAll) { result+="dokumentoiduista "; // "documented " } - result+="tietotyyppien jäsenistä"; // "data types members" - result+=", sekä linkit "; // " with links to " + result+="tietotyyppien jäsenistä"; // "data types members" + result+=", sekä linkit "; // " with links to " if (!extractAll) { - result+="tietueen dokumentaatioon jokaiselle jäsenelle"; // "the data structure documentation for each member" + result+="tietueen dokumentaatioon jokaiselle jäsenelle"; // "the data structure documentation for each member" } else { @@ -1772,9 +1773,9 @@ class TranslatorFinnish : public Translator /*! used as an introduction to the modules list (Fortran) */ virtual QCString trModulesListDescription(bool extractAll) { - QCString result="Tässä on lista kaikista "; // "Here is a list of all " + QCString result="Tässä on lista kaikista "; // "Here is a list of all " if (!extractAll) result+="dokumentoiduista "; // "documented " - result+="moduuleista lyhillä selityksillä:"; // "modules with brief descriptions:" + result+="moduuleista lyhillä selityksillä:"; // "modules with brief descriptions:" return result; } @@ -1786,13 +1787,13 @@ class TranslatorFinnish : public Translator QCString result=(QCString)clName; switch(compType) { - case ClassDef::Class: result+=" Moduuli"; break; // " Module" - case ClassDef::Struct: result+=" Tyyppi"; break; // " Type" - case ClassDef::Union: result+=" Yhdiste"; break; // " Union" - case ClassDef::Interface: result+=" Rajapinta"; break; // " Interface" - case ClassDef::Protocol: result+=" Protokolla"; break; // " Protocol" - case ClassDef::Category: result+=" Kategoria"; break; // " Category" - case ClassDef::Exception: result+=" Poikkeus"; break; // " Exception" + case ClassDef::Class: result+=" moduuli"; break; // " Module" + case ClassDef::Struct: result+=" tyyppi"; break; // " Type" + case ClassDef::Union: result+=" yhdiste"; break; // " Union" + case ClassDef::Interface: result+=" rajapinta"; break; // " Interface" + case ClassDef::Protocol: result+=" protokolla"; break; // " Protocol" + case ClassDef::Category: result+=" kategoria"; break; // " Category" + case ClassDef::Exception: result+=" poikkeus"; break; // " Exception" } if (isTemplate) result+="malli"; // " Template" result+="referenssi"; // " Reference" @@ -1802,23 +1803,23 @@ class TranslatorFinnish : public Translator virtual QCString trModuleReference(const char *namespaceName) { QCString result=namespaceName; - result+=" Moduulin referenssi"; // " Module Reference" + result+=" moduulin referenssi"; // " Module Reference" return result; } /*! This is put above each page as a link to all members of modules. (Fortran) */ virtual QCString trModulesMembers() - { return "Moduulin jäsenet"; } // "Module Members" + { return "Moduulin jäsenet"; } // "Module Members" /*! This is an introduction to the page with all modules members (Fortran) */ virtual QCString trModulesMemberDescription(bool extractAll) { - QCString result="Tässä on lista moduulin kaikista "; // "Here is a list of all " + QCString result="Tässä on lista moduulin kaikista "; // "Here is a list of all " if (!extractAll) result+="dokumentoiduista"; // "documented " - result+="jäsenistä, sekä linkit "; // "module members with links to " + result+="jäsenistä, sekä linkit "; // "module members with links to " if (extractAll) { - result+="moduulin dokumentaatioon jokaiselle jäsenelle:"; // "the module documentation for each member:" + result+="moduulin dokumentaatioon jokaiselle jäsenelle:"; // "the module documentation for each member:" } else { @@ -1850,7 +1851,7 @@ class TranslatorFinnish : public Translator bool single) { // here s is one of " Module", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this " + QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this " switch(compType) { case ClassDef::Class: result+="moduulille"; break; // "module" diff --git a/src/translator_ro.h b/src/translator_ro.h index 7c93c87..af26d05 100644 --- a/src/translator_ro.h +++ b/src/translator_ro.h @@ -16,6 +16,7 @@ */ /* The translation from English to Romanian by Alexandru Iosup [aiosup@yahoo.com]. + * Updated by Ionut Dumitrascu [reddumy@yahoo.com] * * Disclaimer: I hope I translated these to Romanian keeping * the meaning of the sentences intact. I used C-words were possible, @@ -33,6 +34,7 @@ * * Revision history * ---------------- + * 28.07.2008 - Updated version - covering Doxygen 1.5.6 - and some minor changes * 01.Mar.2k5 Third revision, covering Doxygen 1.4.1 * * 07.Mar.2k2 Second revision, covering Doxygen 1.2.14 @@ -657,13 +659,13 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1 QCString result="Referinþã la "; switch(compType) { - case ClassDef::Class: result+="clasa"; break; - case ClassDef::Struct: result+="structura"; break; - case ClassDef::Union: result+="uniunea"; break; - case ClassDef::Interface: result+="interfaþa"; break; - case ClassDef::Protocol: result+="protocol"; break; // translate me! - case ClassDef::Category: result+="category"; break; // translate me! - case ClassDef::Exception: result+="excepþia"; break; + case ClassDef::Class: result+="clasa "; break; + case ClassDef::Struct: result+="structura "; break; + case ClassDef::Union: result+="uniunea "; break; + case ClassDef::Interface: result+="interfaþa "; break; + case ClassDef::Protocol: result+="protocolul "; break; + case ClassDef::Category: result+="categoria "; break; + case ClassDef::Exception: result+="excepþia "; break; } if (isTemplate) result+=" (Template) "; result+=(QCString)clName; @@ -674,7 +676,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1 /*! used as the title of the HTML page of a file */ virtual QCString trFileReference(const char *fileName) { - QCString result="Referinþã la fiºierul"; + QCString result="Referinþã la fiºierul "; result+=fileName; return result; } @@ -823,8 +825,8 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1 case ClassDef::Struct: result+="structurã"; break; case ClassDef::Union: result+="uniune"; break; case ClassDef::Interface: result+="interfaþã"; break; - case ClassDef::Protocol: result+="protocol"; break; // translate me! - case ClassDef::Category: result+="category"; break; // translate me! + case ClassDef::Protocol: result+="protocol"; break; + case ClassDef::Category: result+="categorie"; break; case ClassDef::Exception: result+="excepþie"; break; } result+=" a fost generatã din fiºier"; @@ -1073,7 +1075,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1 "class Undocumented { };\n\n" "/*! Clasã care este moºtenitã în mod public */\n" "class PublicBase : public Truncated { };\n\n" - "/*! A template class */\n" + "/*! Clasã template */\n" "template class Templ { };\n\n" "/*! Clasã care este moºtenitã în mod protejat */\n" "class ProtectedBase { };\n\n" @@ -1093,7 +1095,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_4_1 "};\n" "\\endcode\n" "Dacã tagul \\c MAX_DOT_GRAPH_HEIGHT din fiºierul de configuraþie " - "Este setat la 200 acesta este graful rezultat:" + "este setat la 200, acesta este graful rezultat:" "

      \n" "

      \n" "Cãsuþele din partea de sus au urmãtoarea semnificaþie:\n" diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 2906799..1ae435e 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -582,7 +582,6 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De 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; -- cgit v0.12