From 8a65c23b74c33c38b4d1234e76cec74bd08cea69 Mon Sep 17 00:00:00 2001
From: Dimitri van Heesch
Date: Mon, 26 Dec 2011 14:28:40 +0000
Subject: Release-1.7.6.1-20111226
---
INSTALL | 4 +-
README | 4 +-
configure | 2 +-
doc/Doxyfile | 2 +-
doc/customize.doc | 238 ++++++++++++-----
doc/docblocks.doc | 2 +-
doc/starting.doc | 4 +-
qtools/Doxyfile | 8 +-
src/classdef.cpp | 8 +-
src/code.l | 54 +++-
src/definition.cpp | 25 +-
src/definition.h | 5 +-
src/dirdef.cpp | 8 +-
src/docparser.cpp | 1 +
src/docparser.h | 1 +
src/dot.cpp | 43 ++-
src/doxygen.cpp | 101 ++------
src/filedef.h | 7 +-
src/ftvhelp.cpp | 36 ++-
src/groupdef.cpp | 21 +-
src/groupdef.h | 7 +-
src/htmldocvisitor.cpp | 26 +-
src/htmlgen.cpp | 81 +++---
src/htmlgen.h | 8 +-
src/htmlhelp.cpp | 17 +-
src/htmlhelp.h | 1 +
src/index.cpp | 690 +++++++++++++++++++++++++++++--------------------
src/index.h | 1 +
src/latexgen.cpp | 15 +-
src/latexgen.h | 8 +-
src/layout.cpp | 68 ++++-
src/layout.h | 6 +-
src/mangen.cpp | 2 +-
src/mangen.h | 8 +-
src/memberdef.cpp | 35 ++-
src/memberdef.h | 2 +
src/memberlist.cpp | 4 +-
src/namespacedef.cpp | 10 +-
src/navtree.js | 205 ++++++---------
src/navtree_js.h | 205 ++++++---------
src/outputgen.h | 10 +-
src/outputlist.cpp | 5 +-
src/outputlist.h | 21 +-
src/pagedef.h | 1 +
src/portable.cpp | 1 +
src/pre.l | 75 +++++-
src/pycode.l | 123 +++++----
src/pyscanner.l | 116 ++++++---
src/rtfgen.cpp | 4 +-
src/rtfgen.h | 8 +-
src/searchindex.cpp | 9 +-
src/tclscanner.l | 4 +-
src/util.cpp | 44 +++-
src/util.h | 5 +-
src/vhdldocgen.cpp | 98 +++----
src/vhdldocgen.h | 2 +
src/vhdlscanner.l | 54 ++--
57 files changed, 1470 insertions(+), 1083 deletions(-)
diff --git a/INSTALL b/INSTALL
index 0d5d47b..d374629 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.7.6.1
+DOXYGEN Version 1.7.6.1-20111226
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (10 December 2011)
+Dimitri van Heesch (26 December 2011)
diff --git a/README b/README
index f625b3b..bafcc8a 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.7.6.1
+DOXYGEN Version 1.7.6.1_20111226
Please read INSTALL for compilation instructions.
@@ -26,4 +26,4 @@ forum.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (10 December 2011)
+Dimitri van Heesch (dimitri@stack.nl) (26 December 2011)
diff --git a/configure b/configure
index 2653c4b..68e628a 100755
--- a/configure
+++ b/configure
@@ -20,7 +20,7 @@ doxygen_version_minor=7
doxygen_version_revision=6.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=NO
+doxygen_version_mmn=20111226
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
diff --git a/doc/Doxyfile b/doc/Doxyfile
index b0f281e..5c666af 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -12,7 +12,7 @@
# Documents produced by Doxygen are derivative works derived from the
# input used in their production; they are not affected by this license.
-PROJECT_NAME = "Doxygen manual"
+PROJECT_NAME =
OUTPUT_DIRECTORY = ..
HTML_HEADER =
HTML_FOOTER =
diff --git a/doc/customize.doc b/doc/customize.doc
index 1a8b3dd..d1be915 100644
--- a/doc/customize.doc
+++ b/doc/customize.doc
@@ -17,21 +17,83 @@
/*! \page customize Customizing the output
Doxygen provides various levels of customization.
-The \ref minor_tweaks "first section" discusses what to
+The section \ref minor_tweaks "Minor Tweaks" discusses what to
do if you want to do minor tweaking to the look and feel of the output.
-The \ref layout "next" section show how to reorder and hide certain
+The section \ref layout "Layout" 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.
+The section \ref xmlgenerator "XML output" 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
-expects of the HTML output you can create a different
+The next subsections describe some aspects that can be tweaked with
+little effort.
+
+\subsection minor_tweaks_colors Overall Color
+
+To change the overall color of the HTML output doxygen provides three options
+- \ref cfg_html_colorstyle_hue "HTML_COLORSTYLE_HUE"
+- \ref cfg_html_colorstyle_sat "HTML_COLORSTYLE_SAT"
+- \ref cfg_html_colorstyle_gamma "HTML_COLORSTYLE_GAMMA"
+
+to change the hue, saturation, and gamma correction of the colors respectively.
+
+For your convenience the GUI frontend \ref doxywizard_usage "Doxywizard"
+has a control that allows you to see the effect of changing the values of these options
+on the output in real time.
+
+\subsection minor_tweaks_treeview Navigation
+
+By default doxygen shows navigation tabs on top of every HTML page,
+corresponding with the following settings:
+
+- \ref cfg_disable_index "DISABLE_INDEX" = \c NO
+- \ref cfg_generate_treeview "GENERATE_TREEVIEW" = \c NO
+
+you can switch to an interactive navigation tree as sidebar using
+
+- \ref cfg_disable_index "DISABLE_INDEX" = \c YES
+- \ref cfg_generate_treeview "GENERATE_TREEVIEW" = \c YES
+
+or even have both forms of navigation:
+
+- \ref cfg_disable_index "DISABLE_INDEX" = \c NO
+- \ref cfg_generate_treeview "GENERATE_TREEVIEW" = \c YES
+
+if you already use an external index (i.e. have one of the following
+options enabled
+\ref cfg_generate_htmlhelp "GENERATE_HTMLHELP",
+\ref cfg_generate_eclipsehelp "GENERATE_ECLIPSEHELP",
+\ref cfg_generate_qhp "GENERATE_QHP", or
+\ref cfg_generate_docset "GENERATE_DOCSET")
+then you can also disable all indices, like so:
+
+- \ref cfg_disable_index "DISABLE_INDEX" = \c YES
+- \ref cfg_generate_treeview "GENERATE_TREEVIEW" = \c NO
+
+\subsection minor_tweaks_dynsection Dynamic Content
+
+To make the HTML output more interactive, doxygen provides a number of options
+that are disabled by default:
+- enabling \ref cfg_html_dynamic_sections "HTML_DYNAMIC_SECTIONS" will make
+ doxygen hide certain content (like graphs) in the HTML by default,
+ and let the reader expand these sections on request.
+- enabling \ref cfg_use_inline_trees "USE_INLINE_TREES" will make some
+ tree structures in the output dynamically expandable.
+- enabling \ref cfg_have_dot "HAVE_DOT" along
+ with \ref cfg_interactive_svg "INTERACTIVE_SVG" while setting
+ \ref cfg_dot_image_format "DOT_IMAGE_FORMAT" to \c svg, will make doxygen
+ produce SVG images that will allow the user to zoom and pan (this only
+ happens when th size of the images exceeds a certain size).
+
+\subsection minor_tweaks_header_css Header, Footer, and Stylesheet changes
+
+To tweak things like fonts or colors, margins, or other look \& feel
+aspects of the HTML output in detail, 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.
+page it generates, for instance to make the output comform to the style
+used on the rest of your web site.
To do this first run doxygen as follows:
\verbatim
@@ -50,14 +112,13 @@ This will create 3 files:
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
+- \ref cfg_html_header "HTML_HEADER" = \c header.html
+- \ref cfg_html_footer "HTML_FOOTER" = \c footer.html
+- \ref cfg_html_stylesheet "HTML_STYLESHEET" = \c customdoxygen.css
See the documentation of the \ref cfg_html_header "HTML_HEADER" tag
-for more information about the possible meta commands.
+for more information about the possible meta commands you can use inside
+your custom header.
\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.
@@ -67,7 +128,6 @@ 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.
@@ -91,7 +151,7 @@ The next step is to mention the layout file in the config file
\verbatim
LAYOUT_FILE = DoxygenLayout.xml
\endverbatim
-The change the layout all you need to do is edit the layout file.
+To change the layout all you need to do is edit the layout file.
The toplevel structure of the file looks as follows:
\verbatim
@@ -117,66 +177,90 @@ The toplevel structure of the file looks as follows:
\endverbatim
-The root tag of the XML is \c doxygenlayout, it has an attribute named
+The root element of the XML file 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.
+The first section, identified by the \c navindex element, represents the
+layout of the navigation tabs displayed at the top of each HTML page. At the
+same time it also controls the items in the navigation tree in case
+\ref cfg_generate_treeview "GENERATE_TREEVIEW" is enabled.
+Each tab is represented by a \c tab element 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.
+(the default) then doxygen will fill in an appropriate language specific title.
+
+You can reorder the tabs by moving the tab elements in the XML file
+within the \c navindex element 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
+You can also add custom tabs using a type with name "user". Here is an
+example that shows how to add a tab with title "Google" pointing to
+www.google.com:
+
+\verbatim
+
+ ...
+
+ ...
+
+\endverbatim
+
+The url field can also be a relative URL. If the URL starts with \@ref
+the link will point to a documented entities, such as a class, a function,
+a group, or a related page. Suppose we have defined a page using \@page with
+label mypage, then a tab with label "My Page" to this page would look
+as follows:
+
+\verbatim
+
+ ...
+
+ ...
+
+\endverbatim
+
+You can also group tabs together in a custom group using a tab with
+type "usergroup". The following example puts the above tabs in a user
+defined group with title "My Group":
+
+\verbatim
+
+ ...
+
+
+
+
+ ...
+
+\endverbatim
+
+Groups can be nested to form a hierarchy.
+
+The elements 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
+- The \c class element 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
+- The \c namespace element 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
+- The \c file element represents the layout of all pages generated for
documented files.
-- The \c group section represents the layout of all pages generated for
+- The \c group element represents the layout of all pages generated for
documented groups (or modules).
-- The \c directory section represents the layout of all pages generated for
+- The \c directory element represents the layout of all pages generated for
documented directories.
-Each XML tag within one of the above page sections represents a certain
+Each XML element within one of the above page elements 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, by setting the attribute's
-value to "no". You can also use the value of a configuration option to
-determine the visibility, by using
-its name prefixed with a dollar sign, e.g.
-\verbatim
- ...
-
- ...
-\endverbatim
-This was mainly added for backward compatibility.
-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 (i.e. no empty sections are generated).
-
-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:
+The following generic elements are possible for each page:
\c briefdescription
Represents the brief description on a page.
@@ -186,18 +270,17 @@ At the moment the following generic tags are possible for each page:
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.
+ This elements has child elements per type of member list.
+ The possible child elements are not listed in detail in the document,
+ but the name of the element should be a good indication of the type
+ of members that the element 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.
+ Like the \c memberdecl element, also this element has a number of
+ possible child elements.
-The class page has the following specific tags:
+The class page has the following specific elements:
\c includes
Represents the include file needed to obtain the definition for
@@ -216,7 +299,7 @@ The class page has the following specific tags:
extracted.
-The file page has the following specific tags:
+The file page has the following specific elements:
\c includes
Represents the list of \#include statements contained in this file.
@@ -228,13 +311,36 @@ The file page has the following specific tags:
Represents the link to the source code of this file.
-The group page has a specific \c groupgraph tag which represents the
+The group page has a specific \c groupgraph element which represents the
graph showing the dependencies between groups.
-Similarly, the directory page has a specific \c directorygraph tag
+Similarly, the directory page has a specific \c directorygraph element
which represents the graph showing the dependencies between the directories
based on the \#include relations of the files inside the directories.
+Some elements have a \c visible attribute which can be
+used to hide the fragment from the generated output, by setting the attribute's
+value to "no". You can also use the value of a configuration option to
+determine the visibility, by using
+its name prefixed with a dollar sign, e.g.
+\verbatim
+ ...
+
+ ...
+\endverbatim
+This was mainly added for backward compatibility.
+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 (i.e. no empty sections are generated).
+
+Some elements 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 elements from the layout file
+as a way to hide information. Doing so can cause broken links in the
+generated output!
+
+
\section xmlgenerator Using the XML output
If the above two methods still do not provide enough flexibility, you
@@ -260,4 +366,8 @@ 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.
+See the Breathe project for
+a example that uses doxygen XML output from Python to bridge it with the
+Sphinx document generator.
+
*/
diff --git a/doc/docblocks.doc b/doc/docblocks.doc
index 2e6878d..bf0466a 100644
--- a/doc/docblocks.doc
+++ b/doc/docblocks.doc
@@ -113,7 +113,7 @@ or
-For the brief description there are also several posibilities:
+For the brief description there are also several possibilities:
One could use the \ref cmdbrief "\\brief" command with one of the
above comment blocks. This command ends at the end of a paragraph,
diff --git a/doc/starting.doc b/doc/starting.doc
index e6edf1d..caed175 100644
--- a/doc/starting.doc
+++ b/doc/starting.doc
@@ -42,8 +42,8 @@ tries to be complete):
First, assure that your programming language has a reasonable chance of being
recognized by Doxygen. These languages are supported by default: C, C++, C#,
-Objective-C, IDL, Java, VHDL, PHP, Python, Fortran, and D. It
-is possible to configure certain filetype extensions to use certain parsers:
+Objective-C, IDL, Java, VHDL, PHP, Python, Tcl, Fortran, and D. It
+is possible to configure certain file type extensions to use certain parsers:
see the \ref cfg_extension_mapping "Configuration/ExtensionMappings" for details.
Also, completely different languages can be supported by using preprocessor
programs: see the Helpers page
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index ddf9909..8980dfe 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -164,8 +164,8 @@ QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = YES
ECLIPSE_DOC_ID = org.doxygen.qtools
-DISABLE_INDEX = NO
-GENERATE_TREEVIEW = NO
+DISABLE_INDEX = YES
+GENERATE_TREEVIEW = YES
ENUM_VALUES_PER_LINE = 4
USE_INLINE_TREES = YES
TREEVIEW_WIDTH = 250
@@ -266,8 +266,8 @@ UML_LOOK = NO
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
-CALL_GRAPH = NO
-CALLER_GRAPH = NO
+CALL_GRAPH = YES
+CALLER_GRAPH = YES
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = svg
diff --git a/src/classdef.cpp b/src/classdef.cpp
index a0b1527..be7429e 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1745,7 +1745,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
Doxygen::tagFile << " " << convertToXML(name()) << "" << endl;
}
- ol.startMemberItem(FALSE);
+ ol.startMemberItem(anchor(),FALSE);
QCString ctype = compoundTypeString();
QCString cname;
if (localNames)
@@ -1792,7 +1792,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
// add the brief description if available
if (!briefDescription().isEmpty())
{
- ol.startMemberDescription();
+ ol.startMemberDescription(anchor());
ol.parseDoc(briefFile(),briefLine(),this,0,
briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
if (isLinkableInProject())
@@ -2001,7 +2001,7 @@ void ClassDef::writeMemberPages(OutputList &ol)
{
if (ml->listType()&MemberList::detailedLists)
{
- ml->writeDocumentationPage(ol,name(),this);
+ ml->writeDocumentationPage(ol,displayName(),this);
}
}
@@ -3737,7 +3737,7 @@ void ClassDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,c
{
//printf("%s: ClassDef::writeMemberDocumentation()\n",name().data());
MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDocumentation(ol,name(),this,title,FALSE,showInline);
+ if (ml) ml->writeDocumentation(ol,displayName(),this,title,FALSE,showInline);
}
void ClassDef::writeSimpleMemberDocumentation(OutputList &ol,MemberList::ListType lt)
diff --git a/src/code.l b/src/code.l
index ffcc64c..36ebec6 100644
--- a/src/code.l
+++ b/src/code.l
@@ -140,6 +140,7 @@ static int g_braceCount=0;
static void saveObjCContext();
static void restoreObjCContext();
+static QCString g_forceTagReference;
//-------------------------------------------------------------------
@@ -780,7 +781,9 @@ static MemberDef *setCallContextForVar(const QCString &name)
// in case there are multiple members we could link to, we
// only link to members if defined in the same file or
// defined as external.
- if (!md->isStatic() || md->getBodyDef()==g_sourceFileDef)
+ if ((!md->isStatic() || md->getBodyDef()==g_sourceFileDef) &&
+ (g_forceTagReference.isEmpty() || g_forceTagReference==md->getReference())
+ )
{
g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
//printf("returning member %s in source file %s\n",md->name().data(),g_sourceFileDef->name().data());
@@ -868,7 +871,7 @@ static bool getLinkInScope(const QCString &c, // scope
NamespaceDef *nd;
GroupDef *gd;
//fprintf(stderr,"getLinkInScope: trying `%s'::`%s' varOnly=%d\n",c.data(),m.data(),varOnly);
- if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) &&
+ if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef,FALSE,g_forceTagReference) &&
md->isLinkable() && (!varOnly || md->isVariable()))
{
if (g_exampleBlock)
@@ -887,7 +890,6 @@ static bool getLinkInScope(const QCString &c, // scope
Definition *d = md->getOuterScope()==Doxygen::globalScope ?
md->getBodyDef() : md->getOuterScope();
if (md->getGroupDef()) d = md->getGroupDef();
- //fprintf(stderr,"d=%p linkable=%d\n",d,d?d->isLinkable():0);
if (d && d->isLinkable())
{
g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
@@ -1062,9 +1064,26 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
//fprintf(stderr,"is a global md=%p g_currentDefinition=%s linkable=%d\n",md,g_currentDefinition?g_currentDefinition->name().data():"",md->isLinkable());
if (md->isLinkable())
{
+ QCString text;
+ if (!g_forceTagReference.isEmpty()) // explicit reference to symbol in tag file
+ {
+ text=g_forceTagReference;
+ if (text.right(4)==".tag") // strip .tag if present
+ {
+ text=text.left(text.length()-4);
+ }
+ text+=getLanguageSpecificSeparator(md->getLanguage());
+ text+=clName;
+ md->setName(text);
+ md->setLocalName(text);
+ }
+ else // normal reference
+ {
+ text=clName;
+ }
ol.linkableSymbol(g_yyLineNr,md->name(),md,
g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),clName,md->briefDescriptionAsTooltip());
+ writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),text,md->briefDescriptionAsTooltip());
addToSearchIndex(clName);
if (g_currentMemberDef)
{
@@ -1260,6 +1279,13 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
{
+ //CodeClassDef *ccd=0;
+ ClassDef *ccd=0;
+ QCString locScope=g_classScope;
+ QCString locFunc=removeRedundantWhiteSpace(funcName);
+ //fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data());
+ int len=2;
+ int i=locFunc.findRev("::");
if (g_currentMemberDef && g_currentMemberDef->getClassDef() &&
funcName==g_currentMemberDef->localName() &&
g_currentMemberDef->getDefLine()==g_yyLineNr &&
@@ -1272,15 +1298,8 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
// in case of overloaded methods, this will make sure that we link to
// the correct method, and thereby get the correct reimplemented relations.
// See also bug 549022.
- return;
+ goto exit;
}
- //CodeClassDef *ccd=0;
- ClassDef *ccd=0;
- QCString locScope=g_classScope;
- QCString locFunc=removeRedundantWhiteSpace(funcName);
- //fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data());
- int len=2;
- int i=locFunc.findRev("::");
if (i==-1) i=locFunc.findRev("."),len=1;
if (i==-1) i=locFunc.findRev("\\"),len=1; // for PHP
if (i>0)
@@ -1314,7 +1333,7 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
{
if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
{
- return;
+ goto exit;
}
}
}
@@ -1323,6 +1342,8 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
{
generateClassOrGlobalLink(ol,funcName);
}
+exit:
+ g_forceTagReference.resize(0);
return;
}
@@ -3216,6 +3237,12 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
endFontClass();
}
}
+<*>"/*[tag:"[^\]\n]*"]*/"{B}* { // special pattern /*[tag:filename]*/ to force linking to a tag file
+ g_forceTagReference=yytext;
+ int s=g_forceTagReference.find(':');
+ int e=g_forceTagReference.findRev(']');
+ g_forceTagReference = g_forceTagReference.mid(s+1,e-s-1);
+ }
<*>\n{B}*"/*"[!*]/[^/*] {
if (Config_getBool("STRIP_CODE_COMMENTS"))
{
@@ -3381,6 +3408,7 @@ static void restoreObjCContext()
void resetCCodeParserState()
{
//printf("***initParseCodeContext()\n");
+ g_forceTagReference.resize(0);
g_theVarContext.clear();
g_classScopeLengthStack.setAutoDelete(TRUE);
g_classScopeLengthStack.clear();
diff --git a/src/definition.cpp b/src/definition.cpp
index 911e156..3a61b7b 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -37,6 +37,7 @@
#include "parserintf.h"
#include "marshal.h"
#include "debug.h"
+#include "vhdldocgen.h"
#define START_MARKER 0x4445465B // DEF[
#define END_MARKER 0x4445465D // DEF]
@@ -864,6 +865,14 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
//printf("Read:\n`%s'\n\n",codeFragment.data());
MemberDef *thisMd = 0;
if (definitionType()==TypeMember) thisMd = (MemberDef *)this;
+
+ // vhdl parser can' t start at an arbitrary point in the source code
+ if(this->getLanguage()==SrcLangExt_VHDL)
+ {
+ if (thisMd) VhdlDocGen::writeCodeFragment(ol,actualStart,codeFragment,thisMd);
+ return;
+ }
+
ol.startCodeFragment();
pIntf->parseCode(ol, // codeOutIntf
scopeName, // scope
@@ -1112,12 +1121,12 @@ void Definition::addInnerCompound(Definition *)
QCString Definition::qualifiedName() const
{
- static int count=0;
- count++;
+ //static int count=0;
+ //count++;
makeResident();
if (!m_impl->qualifiedName.isEmpty())
{
- count--;
+ //count--;
return m_impl->qualifiedName;
}
@@ -1126,12 +1135,12 @@ QCString Definition::qualifiedName() const
{
if (m_impl->localName=="")
{
- count--;
+ //count--;
return "";
}
else
{
- count--;
+ //count--;
return m_impl->localName;
}
}
@@ -1142,10 +1151,12 @@ QCString Definition::qualifiedName() const
}
else
{
- m_impl->qualifiedName = m_impl->outerScope->qualifiedName()+"::"+m_impl->localName;
+ m_impl->qualifiedName = m_impl->outerScope->qualifiedName()+
+ getLanguageSpecificSeparator(getLanguage())+
+ m_impl->localName;
}
//printf("end %s::qualifiedName()=%s\n",name().data(),m_impl->qualifiedName.data());
- count--;
+ //count--;
return m_impl->qualifiedName;
};
diff --git a/src/definition.h b/src/definition.h
index 94d1edc..8c6bda3 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -116,6 +116,9 @@ class Definition : public DefinitionIntf, public LockableObj
/*! Returns the name of the definition */
const QCString& name() const { return m_name; }
+ /*! Returns the name of the definition as it appears in the output */
+ virtual QCString displayName() const = 0;
+
/*! Returns the local name without any scope qualifiers. */
QCString localName() const;
@@ -323,9 +326,9 @@ class Definition : public DefinitionIntf, public LockableObj
* the Doxygen::tagFile stream.
*/
void writeDocAnchorsToTagFile();
+ void setLocalName(const QCString name);
protected:
- void setLocalName(const QCString name);
virtual void flushToDisk() const;
virtual void loadFromDisk() const;
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 582bdb0..05ab52f 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -213,7 +213,7 @@ void DirDef::writeSubDirList(OutputList &ol)
DirDef *dd=m_subdirs.first();
while (dd)
{
- ol.startMemberItem(0);
+ ol.startMemberItem(dd->getOutputFileBase(),0);
ol.parseText(theTranslator->trDir(FALSE,TRUE)+" ");
ol.insertMemberAlign();
ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
@@ -224,7 +224,7 @@ void DirDef::writeSubDirList(OutputList &ol)
}
if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startMemberDescription();
+ ol.startMemberDescription(dd->getOutputFileBase());
ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
FALSE, // indexWords
FALSE, // isExample
@@ -253,7 +253,7 @@ void DirDef::writeFileList(OutputList &ol)
FileDef *fd=m_fileList->first();
while (fd)
{
- ol.startMemberItem(0);
+ ol.startMemberItem(fd->getOutputFileBase(),0);
ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
ol.insertMemberAlign();
if (fd->isLinkable())
@@ -285,7 +285,7 @@ void DirDef::writeFileList(OutputList &ol)
ol.endMemberItem();
if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startMemberDescription();
+ ol.startMemberDescription(fd->getOutputFileBase());
ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
FALSE, // indexWords
FALSE, // isExample
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 480a77a..48810ed 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -5771,6 +5771,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
break;
case HTML_P:
// ignore
tag
+ retval=TK_NEWPARA;
break;
case HTML_DL:
retval=RetVal_EndDesc;
diff --git a/src/docparser.h b/src/docparser.h
index 7c0c6a9..1e1fb0e 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -1244,6 +1244,7 @@ class DocRoot : public CompAccept, public DocNode
void parse();
bool indent() const { return m_indent; }
bool singleLine() const { return m_singleLine; }
+ const QList &children() const { return m_children; }
private:
bool m_indent;
diff --git a/src/dot.cpp b/src/dot.cpp
index 5d21b43..f3e524d 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -1517,7 +1517,7 @@ static QCString escapeTooltip(const QCString &tooltip)
static void writeBoxMemberList(FTextStream &t,
char prot,MemberList *ml,ClassDef *scope,
- bool isStatic=FALSE)
+ bool isStatic=FALSE,const QDict *skipNames=0)
{
(void)isStatic;
if (ml)
@@ -1527,7 +1527,8 @@ static void writeBoxMemberList(FTextStream &t,
int totalCount=0;
for (mlia.toFirst();(mma = mlia.current());++mlia)
{
- if (mma->getClassDef() == scope)
+ if (mma->getClassDef()==scope &&
+ (skipNames==0 || skipNames->find(mma->name())==0))
{
totalCount++;
}
@@ -1536,7 +1537,8 @@ static void writeBoxMemberList(FTextStream &t,
int count=0;
for (mlia.toFirst();(mma = mlia.current());++mlia)
{
- if (mma->getClassDef() == scope)
+ if (mma->getClassDef() == scope &&
+ (skipNames==0 || skipNames->find(mma->name())==0))
{
if (totalCount>=15 && count>=10)
{
@@ -1565,7 +1567,7 @@ static void writeBoxMemberList(FTextStream &t,
{
if (mg->members())
{
- writeBoxMemberList(t,prot,mg->members(),scope);
+ writeBoxMemberList(t,prot,mg->members(),scope,isStatic,skipNames);
}
}
}
@@ -1588,21 +1590,34 @@ void DotNode::writeBox(FTextStream &t,
if (m_classDef && umlLook && (gt==Inheritance || gt==Collaboration))
{
+ // add names shown as relation to a dictionary, so we don't show
+ // them as attributes as well
+ QDict arrowNames(17);
+ QListIterator li(*m_edgeInfo);
+ EdgeInfo *ei;
+ for (li.toFirst();(ei=li.current());++li)
+ {
+ if (!ei->m_label.isEmpty())
+ {
+ arrowNames.insert(ei->m_label,(void*)0x8);
+ }
+ }
+
//printf("DotNode::writeBox for %s\n",m_classDef->name().data());
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
t << "{" << convertLabel(m_label);
t << "\\n|";
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubAttribs),m_classDef);
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubStaticAttribs),m_classDef,TRUE);
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::properties),m_classDef);
- writeBoxMemberList(t,'~',m_classDef->getMemberList(MemberList::pacAttribs),m_classDef);
- writeBoxMemberList(t,'~',m_classDef->getMemberList(MemberList::pacStaticAttribs),m_classDef,TRUE);
- writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proAttribs),m_classDef);
- writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proStaticAttribs),m_classDef,TRUE);
+ writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubAttribs),m_classDef,FALSE,&arrowNames);
+ writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubStaticAttribs),m_classDef,TRUE,&arrowNames);
+ writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::properties),m_classDef,FALSE,&arrowNames);
+ writeBoxMemberList(t,'~',m_classDef->getMemberList(MemberList::pacAttribs),m_classDef,FALSE,&arrowNames);
+ writeBoxMemberList(t,'~',m_classDef->getMemberList(MemberList::pacStaticAttribs),m_classDef,TRUE,&arrowNames);
+ writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proAttribs),m_classDef,FALSE,&arrowNames);
+ writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proStaticAttribs),m_classDef,TRUE,&arrowNames);
if (extractPrivate)
{
- writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priAttribs),m_classDef);
- writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priStaticAttribs),m_classDef,TRUE);
+ writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priAttribs),m_classDef,FALSE,&arrowNames);
+ writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priStaticAttribs),m_classDef,TRUE,&arrowNames);
}
t << "|";
writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubMethods),m_classDef);
@@ -1628,7 +1643,7 @@ void DotNode::writeBox(FTextStream &t,
{
if (mg->members())
{
- writeBoxMemberList(t,'*',mg->members(),m_classDef);
+ writeBoxMemberList(t,'*',mg->members(),m_classDef,FALSE,&arrowNames);
}
}
}
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index b790410..d200a47 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -922,7 +922,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,int level)
else if (nd==0 && cd==0) // scope is not known!
{
// introduce bogus namespace
- //printf("++ adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
+ printf("++ adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
nd=new NamespaceDef(
"[generated]",1,fullScope);
@@ -2226,13 +2226,14 @@ static MemberDef *addVariableToFile(
Entry *root = rootNav->entry();
Debug::print(Debug::Variables,0,
" global variable:\n"
- " type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d mtype=%d\n",
+ " type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d mtype=%d lang=%d\n",
root->type.data(),
scope.data(),
name.data(),
root->args.data(),
root->protection,
- mtype
+ mtype,
+ root->lang
);
FileDef *fd = rootNav->fileDef();
@@ -2421,18 +2422,21 @@ static MemberDef *addVariableToFile(
/*! See if the return type string \a type is that of a function pointer
* \returns -1 if this is not a function pointer variable or
- * the index at which the brace of (...*name) was found.
+ * the index at which the closing brace of (...*name) was found.
*/
static int findFunctionPtr(const QCString &type,int lang, int *pLength=0)
{
if (lang == SrcLangExt_Fortran) return -1; // Fortran does not have function pointers
static const QRegExp re("([^)]*[\\*\\^][^)]*)");
int i=-1,l;
+ int bb=type.find('<');
+ int be=type.findRev('>');
if (!type.isEmpty() && // return type is non-empty
(i=re.match(type,0,&l))!=-1 && // contains (...*...)
type.find("operator")==-1 && // not an operator
- (type.find(")(")==-1 || type.find("typedef ")!=-1)
+ (type.find(")(")==-1 || type.find("typedef ")!=-1) &&
// not a function pointer return type
+ !(bb type" as a function pointer
)
{
if (pLength) *pLength=l;
@@ -2610,6 +2614,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
{
int i=isFuncPtr;
if (i==-1) i=findFunctionPtr(root->type,root->lang); // for typedefs isFuncPtr is not yet set
+ Debug::print(Debug::Variables,0," functionPtr? %s\n",i!=-1?"yes":"no");
if (i!=-1) // function pointer
{
int ai = root->type.find('[',i);
@@ -10212,7 +10217,7 @@ void parseInput()
**************************************************************************/
LayoutDocManager::instance().init();
- QCString layoutFileName = Config_getString("LAYOUT_FILE");
+ QCString &layoutFileName = Config_getString("LAYOUT_FILE");
bool defaultLayoutUsed = FALSE;
if (layoutFileName.isEmpty())
{
@@ -10406,7 +10411,10 @@ void parseInput()
computeTemplateClassRelations();
flushUnresolvedRelations();
computeClassRelations();
- //VhdlDocGen::computeVhdlComponentRelations(); // @MARTIN: removed because it breaks non-vhdl code
+ if (Config_getBool("OPTIMIZE_OUTPUT_VHDL"))
+ {
+ VhdlDocGen::computeVhdlComponentRelations();
+ }
g_classEntries.clear();
msg("Add enum values to enums...\n");
@@ -10528,19 +10536,6 @@ void generateOutput()
**************************************************************************/
//// dump all symbols
- //SDict::Iterator sdi(Doxygen::symbolMap);
- //DefinitionList *dl;
- //for (sdi.toFirst();(dl=sdi.current());++sdi)
- //{
- // DefinitionListIterator dli(*dl);
- // Definition *d;
- // printf("Symbol: ");
- // for (dli.toFirst();(d=dli.current());++dli)
- // {
- // printf("%s ",d->qualifiedName().data());
- // }
- // printf("\n");
- //}
if (g_dumpSymbolMap)
{
dumpSymbolMap();
@@ -10555,11 +10550,12 @@ void generateOutput()
g_outputList->add(new HtmlGenerator);
HtmlGenerator::init();
- bool generateHtmlHelp = Config_getBool("GENERATE_HTMLHELP");
+ // add HTML indexers that are enabled
+ bool generateHtmlHelp = Config_getBool("GENERATE_HTMLHELP");
bool generateEclipseHelp = Config_getBool("GENERATE_ECLIPSEHELP");
- bool generateQhp = Config_getBool("GENERATE_QHP");
- bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- bool generateDocSet = Config_getBool("GENERATE_DOCSET");
+ bool generateQhp = Config_getBool("GENERATE_QHP");
+ bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ bool generateDocSet = Config_getBool("GENERATE_DOCSET");
if (generateEclipseHelp) Doxygen::indexList.addIndex(new EclipseHelp);
if (generateHtmlHelp) Doxygen::indexList.addIndex(new HtmlHelp);
if (generateQhp) Doxygen::indexList.addIndex(new Qhp);
@@ -10568,10 +10564,7 @@ void generateOutput()
Doxygen::indexList.initialize();
HtmlGenerator::writeTabData();
-#if 0
- if (Config_getBool("GENERATE_INDEXLOG")) Doxygen::indexList.addIndex(new IndexLog);
-#endif
- //if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages();
+ // copy static stuff
copyStyleSheet();
copyLogo();
copyExtraFiles();
@@ -10672,17 +10665,6 @@ void generateOutput()
}
}
- //statistics();
-
- // count the number of documented elements in the lists we have built.
- // If the result is 0 we do not generate the lists and omit the
- // corresponding links in the index.
- //msg("Generating index page...\n");
- //writeIndex(*g_outputList);
-
- //msg("Generating page index...\n");
- //writePageIndex(*g_outputList);
-
msg("Generating example documentation...\n");
generateExampleDocs();
@@ -10701,24 +10683,12 @@ void generateOutput()
msg("Generating group documentation...\n");
generateGroupDocs();
- //msg("Generating group index...\n");
- //writeGroupIndex(*g_outputList);
-
msg("Generating class documentation...\n");
generateClassDocs();
- //if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
- //{
- // msg("Generating graphical class hierarchy...\n");
- // writeGraphicalClassHierarchy(*g_outputList);
- //}
-
msg("Generating namespace index...\n");
generateNamespaceDocs();
- //msg("Generating namespace member index...\n");
- //writeNamespaceMemberIndex(*g_outputList);
-
if (Config_getBool("GENERATE_LEGEND"))
{
msg("Generating graph info page...\n");
@@ -10731,24 +10701,6 @@ void generateOutput()
generateDirDocs(*g_outputList);
}
- //msg("Generating file index...\n");
- //writeFileIndex(*g_outputList);
-
- //if (Config_getBool("SHOW_DIRECTORIES"))
- //{
- // msg("Generating directory index...\n");
- // writeDirIndex(*g_outputList);
- //}
-
- //msg("Generating example index...\n");
- //writeExampleIndex(*g_outputList);
-
- //msg("Generating file member index...\n");
- //writeFileMemberIndex(*g_outputList);
-
-
- //writeDirDependencyGraph(Config_getString("HTML_OUTPUT"));
-
if (Doxygen::formulaList.count()>0 && Config_getBool("GENERATE_HTML")
&& !Config_getBool("USE_MATHJAX"))
{
@@ -10756,15 +10708,6 @@ void generateOutput()
Doxygen::formulaList.generateBitmaps(Config_getString("HTML_OUTPUT"));
}
- //if (Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"))
- //{
- // HtmlHelp::getInstance()->finalize();
- //}
- //if (Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_TREEVIEW"))
- //{
- // FTVHelp::getInstance()->finalize();
- //}
-
writeIndexHierarchy(*g_outputList);
msg("finalizing index lists...\n");
@@ -10897,8 +10840,6 @@ void generateOutput()
* Start cleaning up *
**************************************************************************/
- //Doxygen::symbolCache->printStats();
- //Doxygen::symbolStorage->printStats();
cleanUpDoxygen();
finializeDocParser();
diff --git a/src/filedef.h b/src/filedef.h
index 6cecbdf..34b6424 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -80,11 +80,8 @@ class FileDef : public Definition
else
return Definition::name();
}
-
- QCString fileName() const
- {
- return filename;
- }
+ QCString displayName() const { return name(); }
+ QCString fileName() const { return filename; }
QCString getOutputFileBase() const
{ return convertNameToFile(diskname); }
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 9ed02c9..7dd03c4 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -578,6 +578,26 @@ void FTVHelp::addContentsItem(bool isDir,
}
+static QCString node2URL(FTVNode *n)
+{
+ QCString url = n->file;
+ if (!url.isEmpty() && url.at(0)=='!') // relative URL
+ {
+ // remove leading !
+ url = url.mid(1);
+ }
+ else if (!url.isEmpty() && url.at(0)=='^') // absolute URL
+ {
+ // skip, keep ^ in the output
+ }
+ else // local file (with optional anchor)
+ {
+ url+=Doxygen::htmlFileExtension;
+ if (!n->anchor.isEmpty()) url+="#"+n->anchor;
+ }
+ return url;
+}
+
void FTVHelp::generateIndent(FTextStream &t, FTVNode *n,int level)
{
@@ -645,8 +665,7 @@ void FTVHelp::generateLink(FTextStream &t,FTVNode *n)
}
t << "href=\"";
t << externalRef("",n->ref,TRUE);
- t << n->file << Doxygen::htmlFileExtension;
- if (!n->anchor.isEmpty()) t << "#" << n->anchor;
+ t << node2URL(n);
if (m_topLevelIndex)
t << "\" target=\"basefrm\">";
else
@@ -672,8 +691,7 @@ void FTVHelp::generateJSLink(FTextStream &t,FTVNode *n)
// TODO: use m_topLevelIndex
t << "\"" << convertToJSString(n->name) << "\", \"";
t << externalRef("",n->ref,TRUE);
- t << n->file << Doxygen::htmlFileExtension;
- if (!n->anchor.isEmpty()) t << "#" << n->anchor;
+ t << node2URL(n);
t << "\", ";
}
}
@@ -756,9 +774,7 @@ bool FTVHelp::generateJSTree(FTextStream &tidx,FTextStream &t, const QListfile.isEmpty() && !childOfHierarchy(n->parent))
if (n->addToNavIndex)
{
- tidx << "," << endl << "\"" << n->file << Doxygen::htmlFileExtension;
- if (!n->anchor.isEmpty()) tidx << "#" << n->anchor;
- tidx << "\":[";
+ tidx << "," << endl << "\"" << node2URL(n) << "\":[";
writePathToNode(tidx,n,n);
tidx << "]";
}
@@ -847,9 +863,11 @@ void FTVHelp::generateTreeViewScripts()
bool first=TRUE;
generateJSTree(tidx,t,m_indentNodes[0],1,first);
- if (first) t << "]";
- t << endl << " ] ]" << endl;
+ if (first)
+ t << "]" << endl;
+ else
+ t << endl << " ] ]" << endl;
t << "];" << endl;
t << endl << navtree_script;
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index a12fc42..8452aa2 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -646,7 +646,7 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
FileDef *fd=fileList->first();
while (fd)
{
- ol.startMemberItem(0);
+ ol.startMemberItem(fd->getOutputFileBase(),0);
ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
ol.insertMemberAlign();
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
@@ -657,7 +657,7 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
ol.endMemberItem();
if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startMemberDescription();
+ ol.startMemberDescription(fd->getOutputFileBase());
ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
}
@@ -685,7 +685,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
GroupDef *gd=groupList->first();
while (gd)
{
- ol.startMemberItem(0);
+ ol.startMemberItem(gd->getOutputFileBase(),0);
//ol.docify(theTranslator->trGroup(FALSE,TRUE));
//ol.docify(" ");
ol.insertMemberAlign();
@@ -697,7 +697,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
ol.endMemberItem();
if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startMemberDescription();
+ ol.startMemberDescription(gd->getOutputFileBase());
ol.parseDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
}
@@ -719,7 +719,7 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
DirDef *dd=dirList->first();
while (dd)
{
- ol.startMemberItem(0);
+ ol.startMemberItem(dd->getOutputFileBase(),0);
ol.parseText(theTranslator->trDir(FALSE,TRUE));
ol.insertMemberAlign();
ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
@@ -730,8 +730,8 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
}
if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startMemberDescription();
- ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE);
+ ol.startMemberDescription(dd->getOutputFileBase());
+ ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberDescription();
}
dd=dirList->next();
@@ -776,7 +776,7 @@ void GroupDef::writePageDocumentation(OutputList &ol)
ol.endSection(si->label,SectionInfo::Subsection);
}
ol.startTextBlock();
- ol.parseDoc(pd->docFile(),pd->docLine(),pd,0,pd->documentation()+pd->inbodyDocumentation(),TRUE,FALSE);
+ ol.parseDoc(pd->docFile(),pd->docLine(),pd,0,pd->documentation()+pd->inbodyDocumentation(),TRUE,FALSE,0,TRUE,FALSE);
ol.endTextBlock();
}
}
@@ -1443,3 +1443,8 @@ void GroupDef::removeMemberFromList(MemberList::ListType lt,MemberDef *md)
if (ml) ml->remove(md);
}
+void GroupDef::sortSubGroups()
+{
+ groupList->sort();
+}
+
diff --git a/src/groupdef.h b/src/groupdef.h
index effefac..002b037 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -49,9 +49,10 @@ class GroupDef : public Definition
DefType definitionType() const { return TypeGroup; }
QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
+ QCString displayName() const { return hasGroupTitle() ? title : Definition::name(); }
const char *groupTitle() const { return title; }
void setGroupTitle( const char *newtitle );
- bool hasGroupTitle( ) { return titleSet; }
+ bool hasGroupTitle( ) const { return titleSet; }
void addFile(const FileDef *def);
bool addClass(const ClassDef *def);
bool addNamespace(const NamespaceDef *def);
@@ -87,7 +88,7 @@ class GroupDef : public Definition
bool visited; // number of times accessed for output - KPW
- friend void writeGroupTreeNode(OutputList&, GroupDef*, int, FTVHelp*);
+ //friend void writeGroupTreeNode(OutputList&, GroupDef*, int, FTVHelp*);
// make accessible for writing tree view of group in index.cpp - KPW
void setGroupScope(Definition *d) { groupScope = d; }
@@ -105,7 +106,9 @@ class GroupDef : public Definition
GroupList * getSubGroups() const { return groupList; }
PageSDict * getPages() const { return pageDict; }
DirList * getDirs() const { return dirList; }
+ PageSDict * getExamples() const { return exampleDict; }
//MemberList* getMembers() const { return allMemberList; }
+ void sortSubGroups();
protected:
void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index a35d92a..16c5b46 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -83,8 +83,8 @@ static bool mustBeOutsideParagraph(DocNode *n)
/* \internal */
case DocNode::Kind_Internal:
/*
*/
- case DocNode::Kind_Verbatim:
case DocNode::Kind_Include:
+ case DocNode::Kind_Verbatim:
case DocNode::Kind_Image:
case DocNode::Kind_SecRefList:
/* */
@@ -107,8 +107,6 @@ static bool mustBeOutsideParagraph(DocNode *n)
return FALSE;
}
-
-
static QString htmlAttribsToString(const HtmlAttribList &attribs)
{
QString result;
@@ -849,16 +847,6 @@ void HtmlDocVisitor::visitPre(DocPara *p)
void HtmlDocVisitor::visitPost(DocPara *p)
{
-// if (m_hide) return;
-// if (!p->isLast() && // omit
for last paragraph
-// !(p->parent() && // and for parameter sections
-// p->parent()->kind()==DocNode::Kind_ParamSect
-// )
-// )
-// {
-// m_t << "