Commit 49947579 authored by dimitri's avatar dimitri

Release-1.2.2-20001001

parent 168b741d
DOXYGEN Version 1.2.2 DOXYGEN Version 1.2.2-20001001
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (24 September 2000) Dimitri van Heesch (01 October 2000)
DOXYGEN Version 1.2.2 DOXYGEN Version 1.2.2-20001001
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (24 September 2000) Dimitri van Heesch (01 October 2000)
1.2.2 1.2.2-20001001
...@@ -775,26 +775,27 @@ void init() ...@@ -775,26 +775,27 @@ void init()
"information to generate all constant output in the proper language. \n" "information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n" "The default language is English, other supported languages are: \n"
"Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n" "Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n"
"Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, and \n" "Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, \n"
"Portuguese.\n" "Portuguese and Slovene.\n"
); );
ConfigString::addFixedValue("outputLanguage","English"); ConfigString::addFixedValue("outputLanguage","Croatian");
ConfigString::addFixedValue("outputLanguage","Czech");
ConfigString::addFixedValue("outputLanguage","Dutch"); ConfigString::addFixedValue("outputLanguage","Dutch");
ConfigString::addFixedValue("outputLanguage","English");
ConfigString::addFixedValue("outputLanguage","French"); ConfigString::addFixedValue("outputLanguage","French");
ConfigString::addFixedValue("outputLanguage","Italian");
ConfigString::addFixedValue("outputLanguage","Czech");
ConfigString::addFixedValue("outputLanguage","Swedish");
ConfigString::addFixedValue("outputLanguage","German");
ConfigString::addFixedValue("outputLanguage","Finnish"); ConfigString::addFixedValue("outputLanguage","Finnish");
ConfigString::addFixedValue("outputLanguage","German");
ConfigString::addFixedValue("outputLanguage","Hungarian"); ConfigString::addFixedValue("outputLanguage","Hungarian");
ConfigString::addFixedValue("outputLanguage","Italian");
ConfigString::addFixedValue("outputLanguage","Japanese"); ConfigString::addFixedValue("outputLanguage","Japanese");
ConfigString::addFixedValue("outputLanguage","Korean"); ConfigString::addFixedValue("outputLanguage","Korean");
ConfigString::addFixedValue("outputLanguage","Spanish");
ConfigString::addFixedValue("outputLanguage","Romanian"); ConfigString::addFixedValue("outputLanguage","Romanian");
ConfigString::addFixedValue("outputLanguage","Russian"); ConfigString::addFixedValue("outputLanguage","Russian");
ConfigString::addFixedValue("outputLanguage","Croatian");
ConfigString::addFixedValue("outputLanguage","Polish"); ConfigString::addFixedValue("outputLanguage","Polish");
ConfigString::addFixedValue("outputLanguage","Portuguese"); ConfigString::addFixedValue("outputLanguage","Portuguese");
ConfigString::addFixedValue("outputLanguage","Slovene");
ConfigString::addFixedValue("outputLanguage","Spanish");
ConfigString::addFixedValue("outputLanguage","Swedish");
ConfigBool::add( "extractAllFlag", ConfigBool::add( "extractAllFlag",
"EXTRACT_ALL", "EXTRACT_ALL",
"FALSE", "FALSE",
...@@ -956,12 +957,13 @@ void init() ...@@ -956,12 +957,13 @@ void init()
); );
ConfigBool::add( "autoBriefFlag", ConfigBool::add( "autoBriefFlag",
"JAVADOC_AUTOBRIEF", "JAVADOC_AUTOBRIEF",
"TRUE", "FALSE",
"javadoc comments behaves as Qt comments.", "should javadoc comments behaves as Qt comments.",
"If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen \n" "If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \n"
"will interpret the first line (until the first dot) of a JavaDoc-style \n" "will interpret the first line (until the first dot) of a JavaDoc-style \n"
"comment as the brief description. If set to NO, the Javadoc-style will \n" "comment as the brief description. If set to NO, the JavaDoc \n"
"behave just like the Qt-style comments. \n" "comments will behave just like the Qt-style comments (thus requiring an \n"
"explict @brief command for a brief description. \n"
); );
ConfigBool::add( "inheritDocsFlag", ConfigBool::add( "inheritDocsFlag",
"INHERIT_DOCS", "INHERIT_DOCS",
......
...@@ -69,6 +69,10 @@ ...@@ -69,6 +69,10 @@
\par Note 2: \par Note 2:
For JavaDoc compatibility a \# may be used instead of a :: in For JavaDoc compatibility a \# may be used instead of a :: in
the patterns above. the patterns above.
\par Note 3:
In the documentation of a class containing a member foo,
a reference to a global variable is made using ::foo, whereas \#foo
will link to the member.
For non overloaded members the argument list may be omitted. For non overloaded members the argument list may be omitted.
...@@ -111,7 +115,7 @@ typedef struct StructName TypeName ...@@ -111,7 +115,7 @@ typedef struct StructName TypeName
\par Example: \par Example:
\verbinclude restypedef.cpp \verbinclude restypedef.cpp
\htmlonly \htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/restypedef/html/restypedef.cpp.html">here</a> Click <a href="$(DOXYGEN_DOCDIR)/examples/restypedef/html/restypedef_cpp.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
*/ */
...@@ -47,10 +47,10 @@ file using a <code>\@INCLUDE</code> tag as follows: ...@@ -47,10 +47,10 @@ file using a <code>\@INCLUDE</code> tag as follows:
\endverbatim \endverbatim
The include file is searched in the current working directory. You can The include file is searched in the current working directory. You can
also specify a list of directories that should be searched before looking also specify a list of directories that should be searched before looking
in the current working directory. Do this by putting a <code>\@INCLUDEPATH</code> tag in the current working directory. Do this by putting a <code>\@INCLUDE_PATH</code> tag
with these paths before the <code>\@INCLUDE</code> tag, e.g: with these paths before the <code>\@INCLUDE</code> tag, e.g:
\verbatim \verbatim
@INCLUDEPATH = my_config_dir @INCLUDE_PATH = my_config_dir
\endverbatim \endverbatim
The configuration options can be divided into several categories. The configuration options can be divided into several categories.
...@@ -370,10 +370,10 @@ followed by the descriptions of the tags grouped by category. ...@@ -370,10 +370,10 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_javadoc_autobrief \anchor cfg_javadoc_autobrief
<dt>\c JAVADOC_AUTOBRIEF <dd> <dt>\c JAVADOC_AUTOBRIEF <dd>
\addindex JAVADOC_AUTOBRIEF \addindex JAVADOC_AUTOBRIEF
If the \c JAVADOC_AUTOBRIEF is set to \c YES (the default) then Doxygen If the \c JAVADOC_AUTOBRIEF is set to \c YES then Doxygen
will interpret the first line (until the first dot) of a JavaDoc-style will interpret the first line (until the first dot) of a JavaDoc-style
comment as the brief description. If set to NO, the Javadoc-style will comment as the brief description. If set to NO (the default), the
behave just like the Qt-style comments. Javadoc-style will behave just like the Qt-style comments.
\anchor cfg_inherit_docs \anchor cfg_inherit_docs
<dt>\c INHERIT_DOCS <dd> <dt>\c INHERIT_DOCS <dd>
......
...@@ -66,34 +66,33 @@ sentence of the detailed description ...@@ -66,34 +66,33 @@ sentence of the detailed description
to \c NO). Both the brief and the detailed descriptions are optional to \c NO). Both the brief and the detailed descriptions are optional
for the Qt style. for the Qt style.
Here is the same piece of code, this time documented using the JavaDoc By default a JavaDoc style documentation block behaves the same way as a
style: Qt style documentation block. This is not according the JavaDoc specification
however, where the first sentence of the documentation block is automatically
treated as a brief description. To enable this behaviour you should set
\ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" to YES in the configuration
file. If you enble this option and want to put a dot in the middle of a
sentence without ending it, you should put a backslash and a space after it.
Here is an example:
\verbatim
/** Brief description (e.g.\ using only a few words). Details follow. */
\endverbatim
Here is the same piece of code as shown above, this time documented using the
JavaDoc style and \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" set to YES:
\verbinclude jdstyle.cpp \verbinclude jdstyle.cpp
\htmlonly \htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/jdstyle/html/class_test.html">here</a> Click <a href="$(DOXYGEN_DOCDIR)/examples/jdstyle/html/class_test.html">here</a>
for the corresponding HTML documentation that is generated by doxygen. for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly \endhtmlonly
Note that by default the first sentence of the documentation (until the <tt>.</tt>)
is treated as a brief description, whereas the documentation block as a whole
forms the detailed description. If you want to put a dot in the middle of a
sentence you should put a backslash and space behind it. Example:
\verbatim
/** Brief description (e.g.\ using only a few words). Details follow. */
\endverbatim
The brief description is required for the JavaDoc style, unless you set
\ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" to NO. If you do this,
doxygen treats JavaDoc comments just like Qt comments (i.e. You have
to insert an explicit \ref cmdbrief "\\brief" command to add a brief description).
Unlike most other documentation systems, doxygen also allows you to put Unlike most other documentation systems, doxygen also allows you to put
the documentation of members (including global functions) in front of the documentation of members (including global functions) in front of
the \e definition. This way the documentation can be placed in the source the \e definition. This way the documentation can be placed in the source
file instead of the header file. This keeps the header file compact, and allows the file instead of the header file. This keeps the header file compact, and allows the
implementer of the members more direct access to the documentation. implementer of the members more direct access to the documentation.
As a compromise the brief description could be placed before the As a compromise the brief description could be placed before the
declaration and the detailed description before the member definition declaration and the detailed description before the member definition.
(assuming you use the Qt style comments).
\par Note: \par Note:
Each entity can only have \e one brief and \e one detailed description. If you Each entity can only have \e one brief and \e one detailed description. If you
......
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = afterdoc.h INPUT = afterdoc.h
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = author.cpp INPUT = author.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = autolink.cpp INPUT = autolink.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = class.h INPUT = class.h
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO ...@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO
INPUT = define.h INPUT = define.h
ENABLE_PREPROCESSING = YES ENABLE_PREPROCESSING = YES
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -10,3 +10,4 @@ ENABLE_PREPROCESSING = YES ...@@ -10,3 +10,4 @@ ENABLE_PREPROCESSING = YES
INPUT = . INPUT = .
FILE_PATTERNS = diagrams_*.h FILE_PATTERNS = diagrams_*.h
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = enum.h INPUT = enum.h
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -8,3 +8,4 @@ CASE_SENSE_NAMES = NO ...@@ -8,3 +8,4 @@ CASE_SENSE_NAMES = NO
INPUT = example.cpp INPUT = example.cpp
EXAMPLE_PATH = example_test.cpp EXAMPLE_PATH = example_test.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = file.h INPUT = file.h
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = func.h INPUT = func.h
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = group.cpp INPUT = group.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO ...@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO
INPUT = include.cpp INPUT = include.cpp
EXAMPLE_PATH = example_test.cpp EXAMPLE_PATH = example_test.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = jdstyle.cpp INPUT = jdstyle.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,5 @@ GENERATE_RTF = NO ...@@ -6,3 +6,5 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = memgrp.cpp INPUT = memgrp.cpp
QUIET = YES QUIET = YES
DISTRIBUTE_GROUP_DOC = YES
JAVADOC_AUTOBRIEF = YES
...@@ -34,6 +34,7 @@ void Test::func1InGroup2() {} ...@@ -34,6 +34,7 @@ void Test::func1InGroup2() {}
//@{ //@{
//! one description for all members of this group //! one description for all members of this group
//! (because DISTRIBUTE_GROUP_DOC is YES in the config file)
#define A 1 #define A 1
#define B 2 #define B 2
void glob_func(); void glob_func();
......
...@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO ...@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO
SORT_MEMBER_DOCS = NO SORT_MEMBER_DOCS = NO
INPUT = overload.cpp INPUT = overload.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = page.doc INPUT = page.doc
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = par.cpp INPUT = par.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = qtstyle.cpp INPUT = qtstyle.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = relates.cpp INPUT = relates.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = restypedef.cpp INPUT = restypedef.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = structcmd.h INPUT = structcmd.h
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -8,3 +8,4 @@ INPUT = tag.cpp ...@@ -8,3 +8,4 @@ INPUT = tag.cpp
TAGFILES = example.tag TAGFILES = example.tag
PERL_PATH = perl PERL_PATH = perl
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
...@@ -6,3 +6,4 @@ GENERATE_RTF = NO ...@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = templ.cpp INPUT = templ.cpp
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES
Name: doxygen Name: doxygen
Version: 1.2.2 Version: 1.2.2-20001001
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 1 Release: 1
Source0: doxygen-%{version}.src.tar.gz Source0: doxygen-%{version}.src.tar.gz
......
...@@ -386,10 +386,13 @@ void ClassDef::insertMember(MemberDef *md) ...@@ -386,10 +386,13 @@ void ClassDef::insertMember(MemberDef *md)
functionMembers.append(md); functionMembers.append(md);
break; break;
case Private: case Private:
if (Config::extractPrivateFlag)
{
if (Config::sortMembersFlag) if (Config::sortMembersFlag)
functionMembers.inSort(md); functionMembers.inSort(md);
else else
functionMembers.append(md); functionMembers.append(md);
}
break; break;
} }
break; break;
......
...@@ -58,6 +58,7 @@ class ClassDef : public Definition ...@@ -58,6 +58,7 @@ class ClassDef : public Definition
const char *name,CompoundType ct, const char *name,CompoundType ct,
const char *ref=0,const char *fName=0); const char *ref=0,const char *fName=0);
~ClassDef(); ~ClassDef();
DefType definitionType() { return TypeClass; }
QCString getOutputFileBase() const { return fileName; } QCString getOutputFileBase() const { return fileName; }
QCString displayName() const; QCString displayName() const;
CompoundType compoundType() const { return compType; } CompoundType compoundType() const { return compType; }
......
/* This file was generated by configgen on Sun Sep 24 18:38:07 2000 /* This file was generated by configgen on Sun Oct 1 13:51:26 2000
* from config_templ.h * from config_templ.h
* *
* DO NOT EDIT! * DO NOT EDIT!
...@@ -60,7 +60,7 @@ struct Config ...@@ -60,7 +60,7 @@ struct Config
static bool hideScopeNames; // hide the name of the scope. static bool hideScopeNames; // hide the name of the scope.
static bool verbatimHeaderFlag; // enable/disable generation of verb headers. static bool verbatimHeaderFlag; // enable/disable generation of verb headers.
static bool showIncFileFlag; // show include file in file documentation? static bool showIncFileFlag; // show include file in file documentation?
static bool autoBriefFlag; // javadoc comments behaves as Qt comments. static bool autoBriefFlag; // should javadoc comments behaves as Qt comments.
static bool inheritDocsFlag; // inheritance of documentation enabled? static bool inheritDocsFlag; // inheritance of documentation enabled?
static bool inlineInfoFlag; // show info about inline members? static bool inlineInfoFlag; // show info about inline members?
static bool sortMembersFlag; // sort members alphabetically? static bool sortMembersFlag; // sort members alphabetically?
......
/* This file was generated by configgen on Sun Sep 24 18:38:07 2000 /* This file was generated by configgen on Sun Oct 1 13:51:26 2000
* from config_templ.l * from config_templ.l
* *
* DO NOT EDIT! * DO NOT EDIT!
...@@ -97,7 +97,7 @@ bool Config::caseSensitiveNames = TRUE; ...@@ -97,7 +97,7 @@ bool Config::caseSensitiveNames = TRUE;
bool Config::hideScopeNames = FALSE; bool Config::hideScopeNames = FALSE;
bool Config::verbatimHeaderFlag = TRUE; bool Config::verbatimHeaderFlag = TRUE;
bool Config::showIncFileFlag = TRUE; bool Config::showIncFileFlag = TRUE;
bool Config::autoBriefFlag = TRUE; bool Config::autoBriefFlag = FALSE;
bool Config::inheritDocsFlag = TRUE; bool Config::inheritDocsFlag = TRUE;
bool Config::inlineInfoFlag = TRUE; bool Config::inlineInfoFlag = TRUE;
bool Config::sortMembersFlag = TRUE; bool Config::sortMembersFlag = TRUE;
...@@ -823,7 +823,7 @@ void Config::init() ...@@ -823,7 +823,7 @@ void Config::init()
Config::hideScopeNames = FALSE; Config::hideScopeNames = FALSE;
Config::verbatimHeaderFlag = TRUE; Config::verbatimHeaderFlag = TRUE;
Config::showIncFileFlag = TRUE; Config::showIncFileFlag = TRUE;
Config::autoBriefFlag = TRUE; Config::autoBriefFlag = FALSE;
Config::inheritDocsFlag = TRUE; Config::inheritDocsFlag = TRUE;
Config::inlineInfoFlag = TRUE; Config::inlineInfoFlag = TRUE;
Config::sortMembersFlag = TRUE; Config::sortMembersFlag = TRUE;
...@@ -1015,8 +1015,8 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1015,8 +1015,8 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# information to generate all constant output in the proper language. \n"; t << "# information to generate all constant output in the proper language. \n";
t << "# The default language is English, other supported languages are: \n"; t << "# The default language is English, other supported languages are: \n";
t << "# Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n"; t << "# Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n";
t << "# Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, and \n"; t << "# Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, \n";
t << "# Portuguese.\n"; t << "# Portuguese and Slovene.\n";
t << "\n"; t << "\n";
} }
t << "OUTPUT_LANGUAGE = "; t << "OUTPUT_LANGUAGE = ";
...@@ -1240,10 +1240,11 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1240,10 +1240,11 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
t << "# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen \n"; t << "# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \n";
t << "# will interpret the first line (until the first dot) of a JavaDoc-style \n"; t << "# will interpret the first line (until the first dot) of a JavaDoc-style \n";
t << "# comment as the brief description. If set to NO, the Javadoc-style will \n"; t << "# comment as the brief description. If set to NO, the JavaDoc \n";
t << "# behave just like the Qt-style comments. \n"; t << "# comments will behave just like the Qt-style comments (thus requiring an \n";
t << "# explict @brief command for a brief description. \n";
t << "\n"; t << "\n";
} }
t << "JAVADOC_AUTOBRIEF = "; t << "JAVADOC_AUTOBRIEF = ";
......
...@@ -32,27 +32,32 @@ class MemberDef; ...@@ -32,27 +32,32 @@ class MemberDef;
class Definition class Definition
{ {
public: public:
/*! create a new definition */ /*! Types of derived classes */
enum DefType { TypeClass, TypeMember, TypeFile, TypeGroup, TypeNamespace };
/*! Use this for dynamic inspection of the derived class */
virtual DefType definitionType() = 0;
/*! Create a new definition */
Definition( Definition(
const char *defFileName,int defLine, const char *defFileName,int defLine,
const char *name,const char *b=0,const char *d=0); const char *name,const char *b=0,const char *d=0);
/*! destroys the definition */ /*! Destroys the definition */
virtual ~Definition(); virtual ~Definition();
/*! returns the name of the definition */ /*! Returns the name of the definition */
const QCString& name() const { return n; } const QCString& name() const { return n; }
/*! returns the base name of the output file that contains this /*! Returns the base name of the output file that contains this
* definition. * definition.
*/ */
virtual QCString getOutputFileBase() const = 0; virtual QCString getOutputFileBase() const = 0;
/*! Returns the name of the source listing of this file. */ /*! Returns the name of the source listing of this file. */
const QCString sourceName() const { return getOutputFileBase()+"-source"; } const QCString sourceName() const { return getOutputFileBase()+"-source"; }
/*! returns the detailed description of this definition */ /*! Returns the detailed description of this definition */
const QCString& documentation() const { return doc; } const QCString& documentation() const { return doc; }
/*! returns the brief description of this definition */ /*! Returns the brief description of this definition */
const QCString& briefDescription() const { return brief; } const QCString& briefDescription() const { return brief; }
/*! sets a new \a name for the definition */ /*! Sets a new \a name for the definition */
void setName(const char *name) { n=name; } void setName(const char *name) { n=name; }
/*! sets the documentation of this definition to \a d. */ /*! Sets the documentation of this definition to \a d. */
void setDocumentation(const char *d,bool stripWhiteSpace=TRUE) void setDocumentation(const char *d,bool stripWhiteSpace=TRUE)
{ {
if (stripWhiteSpace) if (stripWhiteSpace)
...@@ -60,11 +65,11 @@ class Definition ...@@ -60,11 +65,11 @@ class Definition
else else
doc=d; doc=d;
} }
/*! sets the brief description of this definition to \a b. /*! Sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available. * A dot is added to the sentence if not available.
*/ */
void setBriefDescription(const char *b); void setBriefDescription(const char *b);
/*! returns TRUE iff the definition is documented */ /*! Returns TRUE iff the definition is documented */
virtual bool hasDocumentation(); virtual bool hasDocumentation();
virtual bool isLinkableInProject() = 0; virtual bool isLinkableInProject() = 0;
virtual bool isLinkable() = 0; virtual bool isLinkable() = 0;
......
...@@ -984,6 +984,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -984,6 +984,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
} }
} }
<DocScan>(({B}*"\n"){2,}{B}*)?{CMD}"par"{B}* { <DocScan>(({B}*"\n"){2,}{B}*)?{CMD}"par"{B}* {
QCString t=yytext;
if (t.contains('\n')>1 && insideItemList)
{
forceEndItemList();
}
BEGIN(DocPar); BEGIN(DocPar);
} }
<DocPar>[^\n]*{BN} { <DocPar>[^\n]*{BN} {
......
...@@ -1107,6 +1107,7 @@ static MemberDef *addVariableToClass( ...@@ -1107,6 +1107,7 @@ static MemberDef *addVariableToClass(
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->setDefinition(def); md->setDefinition(def);
md->setBitfields(root->bitfields);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
md->setFromAnnonymousScope(fromAnnScope); md->setFromAnnonymousScope(fromAnnScope);
md->setFromAnnonymousMember(fromAnnMemb); md->setFromAnnonymousMember(fromAnnMemb);
...@@ -2038,6 +2039,22 @@ static void transferRelatedFunctionDocumentation() ...@@ -2038,6 +2039,22 @@ static void transferRelatedFunctionDocumentation()
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
static void replaceNamespaceAliases(QCString &scope,int i)
{
//printf("replaceNamespaceAliases(%s,%d)\n",scope.data(),i);
while (i>0)
{
QCString *s = namespaceAliasDict[scope.left(i)];
if (s)
{
scope=*s+scope.right(scope.length()-i);
i=s->length();
}
i=scope.findRev("::",i-1);
}
//printf("replaceNamespaceAliases() result=%s\n",scope.data());
}
static bool findBaseClassRelation(Entry *root,ClassDef *cd, static bool findBaseClassRelation(Entry *root,ClassDef *cd,
BaseInfo *bi, BaseInfo *bi,
...@@ -2109,6 +2126,14 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2109,6 +2126,14 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
bool found=baseClass!=0 && baseClass!=cd; bool found=baseClass!=0 && baseClass!=cd;
NamespaceDef *nd=cd->getNamespaceDef(); NamespaceDef *nd=cd->getNamespaceDef();
if (!found && (i=baseClassName.findRev("::"))!=-1)
{
// replace any namespace aliases
replaceNamespaceAliases(baseClassName,i);
baseClass=getResolvedClass(baseClassName);
found=baseClass!=0 && baseClass!=cd;
}
if (!found) if (!found)
{ {
FileDef *fd=cd->getFileDef(); FileDef *fd=cd->getFileDef();
...@@ -2148,7 +2173,6 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2148,7 +2173,6 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
} }
if (!found && nd) // class is inside a namespace if (!found && nd) // class is inside a namespace
{ {
//printf(" class %s inside namespace %s\n",cd->name().data(),nd->name().data());
NamespaceList *nl = nd->getUsedNamespaces(); NamespaceList *nl = nd->getUsedNamespaces();
QCString fName = nd->name()+"::"+baseClassName; QCString fName = nd->name()+"::"+baseClassName;
found = (baseClass=getResolvedClass(fName))!=0 && root->name!=fName; found = (baseClass=getResolvedClass(fName))!=0 && root->name!=fName;
...@@ -2264,18 +2288,21 @@ static void computeClassRelations(Entry *root) ...@@ -2264,18 +2288,21 @@ static void computeClassRelations(Entry *root)
if ( if (
( (
( (
// is it a compound (class, struct, union, interface ...)
root->section & Entry::COMPOUND_MASK root->section & Entry::COMPOUND_MASK
) )
|| ||
( (
// is it a documentation block with inheritance info.
(root->section & Entry::COMPOUNDDOC_MASK) && root->extends->count()>0 (root->section & Entry::COMPOUNDDOC_MASK) && root->extends->count()>0
) )
) )
&& &&
!root->name.isEmpty() !root->name.isEmpty() // sanity check
) )
{ {
ClassDef *cd; ClassDef *cd;
// strip any annonymous scopes first
QCString bName=stripAnnonymousNamespaceScope(root->name); QCString bName=stripAnnonymousNamespaceScope(root->name);
Debug::print(Debug::Classes,0," Class %s : \n",bName.data()); Debug::print(Debug::Classes,0," Class %s : \n",bName.data());
if ((cd=getClass(bName))) if ((cd=getClass(bName)))
......
...@@ -27,7 +27,7 @@ HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \ ...@@ -27,7 +27,7 @@ HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \
translator_it.h formula.h debug.h membergroup.h htmlhelp.h \ translator_it.h formula.h debug.h membergroup.h htmlhelp.h \
translator_ru.h translator_pl.h dot.h rtfgen.h xml.h xml_dtd.h \ translator_ru.h translator_pl.h dot.h rtfgen.h xml.h xml_dtd.h \
reflist.h page.h sortdict.h translator_hu.h translator_kr.h \ reflist.h page.h sortdict.h translator_hu.h translator_kr.h \
translator_ro.h translator_ro.h translator_si.h
SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \ SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \
memberdef.cpp membername.cpp index.cpp memberlist.cpp \ memberdef.cpp membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \ entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......
...@@ -56,6 +56,7 @@ Entry::Entry(const Entry &e) ...@@ -56,6 +56,7 @@ Entry::Entry(const Entry &e)
type = e.type.copy(); type = e.type.copy();
name = e.name.copy(); name = e.name.copy();
args = e.args.copy(); args = e.args.copy();
bitfields = e.bitfields.copy();
exception = e.exception.copy(); exception = e.exception.copy();
program = e.program.copy(); program = e.program.copy();
includeFile = e.includeFile.copy(); includeFile = e.includeFile.copy();
...@@ -197,6 +198,7 @@ void Entry::reset() ...@@ -197,6 +198,7 @@ void Entry::reset()
name.resize(0); name.resize(0);
type.resize(0); type.resize(0);
args.resize(0); args.resize(0);
bitfields.resize(0);
exception.resize(0); exception.resize(0);
program.resize(0); program.resize(0);
//body.resize(0); //body.resize(0);
...@@ -242,6 +244,7 @@ int Entry::getSize() ...@@ -242,6 +244,7 @@ int Entry::getSize()
size+=type.length()+1; size+=type.length()+1;
size+=name.length()+1; size+=name.length()+1;
size+=args.length()+1; size+=args.length()+1;
size+=bitfields.length()+1;
size+=exception.length()+1; size+=exception.length()+1;
size+=program.length()+1; size+=program.length()+1;
//size+=body.length()+1; //size+=body.length()+1;
......
...@@ -162,8 +162,6 @@ class Entry ...@@ -162,8 +162,6 @@ class Entry
int section; // entry type (see Sections); int section; // entry type (see Sections);
Protection protection; // class protection Protection protection; // class protection
//bool sig; // a Qt signal ?
//bool slot; // a Qt slot ?
MethodTypes mtype; // signal, slot or dcop method? MethodTypes mtype; // signal, slot or dcop method?
bool stat; // static ? bool stat; // static ?
bool explicitExternal; // explicitly defined as external? bool explicitExternal; // explicitly defined as external?
...@@ -176,6 +174,7 @@ class Entry ...@@ -176,6 +174,7 @@ class Entry
QCString type; // member type QCString type; // member type
QCString name; // member name QCString name; // member name
QCString args; // member argument string QCString args; // member argument string
QCString bitfields; // member's bit fields
ArgumentList *argList; // member arguments as a list ArgumentList *argList; // member arguments as a list
ArgumentList *tArgList; // template argument list ArgumentList *tArgList; // template argument list
ArgumentList *mtArgList; // member template argument list ArgumentList *mtArgList; // member template argument list
...@@ -183,8 +182,6 @@ class Entry ...@@ -183,8 +182,6 @@ class Entry
QCString memberSpec; // template specialization of the member QCString memberSpec; // template specialization of the member
QCString program; // the program text QCString program; // the program text
QCString initializer; // initial value (for variables) QCString initializer; // initial value (for variables)
int bodyLine; // line number of the definition in the source
int endBodyLine; // line number where the definition ends
QCString includeFile; // include file (2 arg of \class, must be unique) QCString includeFile; // include file (2 arg of \class, must be unique)
QCString includeName; // include name (3 arg of \class) QCString includeName; // include name (3 arg of \class)
QCString doc; // documentation block (partly parsed) QCString doc; // documentation block (partly parsed)
...@@ -192,6 +189,8 @@ class Entry ...@@ -192,6 +189,8 @@ class Entry
QCString brief; // brief description (doc block) QCString brief; // brief description (doc block)
QCString inside; // name of the class in which documents are found QCString inside; // name of the class in which documents are found
QCString exception; // throw specification QCString exception; // throw specification
int bodyLine; // line number of the definition in the source
int endBodyLine; // line number where the definition ends
int mGrpId; // member group id int mGrpId; // member group id
QList<Entry> *sublist; // entries that are children of this one QList<Entry> *sublist; // entries that are children of this one
QList<BaseInfo> *extends; // list of base classes QList<BaseInfo> *extends; // list of base classes
......
...@@ -66,6 +66,7 @@ class FileDef : public Definition ...@@ -66,6 +66,7 @@ class FileDef : public Definition
FileDef(const char *p,const char *n,const char *ref=0); FileDef(const char *p,const char *n,const char *ref=0);
~FileDef(); ~FileDef();
DefType definitionType() { return TypeFile; }
/*! Returns the unique file name (this may include part of the path). */ /*! Returns the unique file name (this may include part of the path). */
QCString name() const QCString name() const
......
...@@ -366,7 +366,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -366,7 +366,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
} }
} }
defineMembers.countDocMembers(); defineMembers.countDocMembers(TRUE);
if (defineMembers.totalCount()>0 ) if (defineMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
...@@ -376,7 +376,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -376,7 +376,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
defineMembers.writeDocumentation(ol,name(),this); defineMembers.writeDocumentation(ol,name(),this);
} }
protoMembers.countDocMembers(); protoMembers.countDocMembers(TRUE);
if (protoMembers.totalCount()>0 ) if (protoMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
...@@ -386,7 +386,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -386,7 +386,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
protoMembers.writeDocumentation(ol,name(),this); protoMembers.writeDocumentation(ol,name(),this);
} }
typedefMembers.countDocMembers(); typedefMembers.countDocMembers(TRUE);
if (typedefMembers.totalCount()>0 ) if (typedefMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
...@@ -396,7 +396,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -396,7 +396,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
typedefMembers.writeDocumentation(ol,name(),this); typedefMembers.writeDocumentation(ol,name(),this);
} }
enumMembers.countDocMembers(); enumMembers.countDocMembers(TRUE);
if (enumMembers.totalCount()>0 ) if (enumMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
...@@ -406,17 +406,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -406,17 +406,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
enumMembers.writeDocumentation(ol,name(),this); enumMembers.writeDocumentation(ol,name(),this);
} }
//enumValMembers.countDocMembers(); funcMembers.countDocMembers(TRUE);
//if (enumValMembers.totalCount()>0 )
//{
// ol.writeRuler();
// ol.startGroupHeader();
// parseText(ol,theTranslator->trEnumerationValueDocumentation());
// ol.endGroupHeader();
// enumValMembers.writeDocumentation(ol,name());
//}
funcMembers.countDocMembers();
if (funcMembers.totalCount()>0 ) if (funcMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
...@@ -426,7 +416,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -426,7 +416,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
funcMembers.writeDocumentation(ol,name(),this); funcMembers.writeDocumentation(ol,name(),this);
} }
varMembers.countDocMembers(); varMembers.countDocMembers(TRUE);
if (varMembers.totalCount()>0 ) if (varMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
......
...@@ -41,6 +41,7 @@ class GroupDef : public Definition ...@@ -41,6 +41,7 @@ class GroupDef : public Definition
public: public:
GroupDef(const char *fileName,int line,const char *name,const char *title); GroupDef(const char *fileName,int line,const char *name,const char *title);
~GroupDef(); ~GroupDef();
DefType definitionType() { return TypeGroup; }
QCString getOutputFileBase() const { return fileName; } QCString getOutputFileBase() const { return fileName; }
const char *groupTitle() const { return title; } const char *groupTitle() const { return title; }
void addFile(const FileDef *def); void addFile(const FileDef *def);
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "version.h" #include "version.h"
#include "dot.h" #include "dot.h"
#include "language.h" #include "language.h"
#include "htmlhelp.h"
#define GROUP_COLOR "#ff8080" #define GROUP_COLOR "#ff8080"
...@@ -157,6 +158,11 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external) ...@@ -157,6 +158,11 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
lastTitle=title; lastTitle=title;
if (fileName.right(5)!=".html") fileName+=".html"; if (fileName.right(5)!=".html") fileName+=".html";
startPlainFile(fileName); startPlainFile(fileName);
if (Config::htmlHelpFlag)
{
HtmlHelp::getInstance()->addIndexFile(fileName);
}
lastFile = fileName; lastFile = fileName;
if (header.isEmpty()) if (header.isEmpty())
{ {
......
...@@ -287,9 +287,12 @@ void HtmlHelp::initialize() ...@@ -287,9 +287,12 @@ void HtmlHelp::initialize()
"<param name=\"ImageType\" value=\"Folder\">\n" "<param name=\"ImageType\" value=\"Folder\">\n"
"</OBJECT>\n" "</OBJECT>\n"
"<UL>\n"; "<UL>\n";
}
void HtmlHelp::createProjectFile()
{
/* Write the project file */ /* Write the project file */
fName = Config::htmlOutputDir + "/index.hhp"; QCString fName = Config::htmlOutputDir + "/index.hhp";
QFile f(fName); QFile f(fName);
if (f.open(IO_WriteOnly)) if (f.open(IO_WriteOnly))
{ {
...@@ -298,12 +301,23 @@ void HtmlHelp::initialize() ...@@ -298,12 +301,23 @@ void HtmlHelp::initialize()
"Compatibility=1.1\n" "Compatibility=1.1\n"
"Full-text search=Yes\n" "Full-text search=Yes\n"
"Contents file=index.hhc\n" "Contents file=index.hhc\n"
"Default Window=indexHelp\n" "Default Window=main\n"
"Default topic=index.html\n" "Default topic=index.html\n"
"Index file=index.hhk\n" "Index file=index.hhk\n"
"Title=" << Config::projectName << endl << endl "Title=" << Config::projectName << endl << endl;
<< "[FILES]\n"
"index.html"; t << "[WINDOWS]" << endl;
t << "main=\"" << Config::projectName << "\",\"index.hhc\","
"\"index.hhk\",\"index.html\",\"index.html\",,,,,0x23520,,"
"0x3006,,,,,,,,0" << endl << endl;
t << "[FILES]" << endl;
char *s = indexFiles.first();
while (s)
{
t << s << endl;
s=indexFiles.next();
}
f.close(); f.close();
} }
else else
...@@ -312,6 +326,11 @@ void HtmlHelp::initialize() ...@@ -312,6 +326,11 @@ void HtmlHelp::initialize()
} }
} }
void HtmlHelp::addIndexFile(const char *s)
{
indexFiles.append(s);
}
/*! Finalizes the HTML help. This will finish and close the /*! Finalizes the HTML help. This will finish and close the
* contents file (index.hhc) and the index file (index.hhk). * contents file (index.hhc) and the index file (index.hhk).
* \sa initialize() * \sa initialize()
...@@ -331,6 +350,8 @@ void HtmlHelp::finalize() ...@@ -331,6 +350,8 @@ void HtmlHelp::finalize()
kts.unsetDevice(); kts.unsetDevice();
kf->close(); kf->close();
delete kf; delete kf;
createProjectFile();
} }
/*! Increase the level of the contents hierarchy. /*! Increase the level of the contents hierarchy.
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "qtbc.h" #include "qtbc.h"
#include <qtextstream.h> #include <qtextstream.h>
#include <qstrlist.h>
class QFile; class QFile;
class HtmlHelpIndex; class HtmlHelpIndex;
...@@ -45,12 +46,17 @@ class HtmlHelp ...@@ -45,12 +46,17 @@ class HtmlHelp
const char *anchor = 0); const char *anchor = 0);
void addIndexItem(const char *level1, const char *level2, void addIndexItem(const char *level1, const char *level2,
const char *ref, const char *anchor); const char *ref, const char *anchor);
void addIndexFile(const char *name);
private: private:
void createProjectFile();
HtmlHelp(); HtmlHelp();
QFile *cf,*kf; QFile *cf,*kf;
QTextStream cts,kts; QTextStream cts,kts;
HtmlHelpIndex *index; HtmlHelpIndex *index;
int dc; int dc;
QStrList indexFiles;
static HtmlHelp *theInstance; static HtmlHelp *theInstance;
}; };
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "translator_hu.h" #include "translator_hu.h"
#include "translator_kr.h" #include "translator_kr.h"
#include "translator_ro.h" #include "translator_ro.h"
#include "translator_si.h"
#endif #endif
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -115,6 +116,10 @@ bool setTranslator(const char *langName) ...@@ -115,6 +116,10 @@ bool setTranslator(const char *langName)
{ {
theTranslator=new TranslatorRomanian; theTranslator=new TranslatorRomanian;
} }
else if (L_EQUAL("slovene"))
{
theTranslator=new TranslatorSlovene;
}
#endif #endif
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
...@@ -450,8 +450,15 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd, ...@@ -450,8 +450,15 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd,
{ {
Definition *d=0; Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd; if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd;
if (d==0) return; if (d==0) { err("Member %s without group! Please report this bug!\n",name().data()); return; }
if (group!=0 && gd==0) // forward link to the group
{
ol.writeObjectLink(group->getReference(),group->getOutputFileBase(),anchor(),name());
}
else // local link
{
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),anchor(),name()); ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),anchor(),name());
}
} }
...@@ -689,19 +696,6 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -689,19 +696,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
// write name // write name
if (!name().isEmpty() && name().at(0)!='@') if (!name().isEmpty() && name().at(0)!='@')
{ {
//if (grpId!=-1)
//{
// if (annMemb)
// {
// //printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
// annMemb->writeLink(ol,cd,nd,fd,gd,inGroup ? memberGroup : 0);
// annMemb->annUsed=annUsed=TRUE;
// }
// else
// writeLink(ol,0,0,0,0,memberGroup);
// //ol.writeBoldString(name());
//}
//else
if (isLinkable()) if (isLinkable())
{ {
if (annMemb) if (annMemb)
...@@ -748,7 +742,11 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -748,7 +742,11 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.docify(excpString()); ol.docify(excpString());
} }
if (!init.isEmpty() && initLines==0 && maxInitLines>0) // add initializer if (!bitfields.isEmpty()) // add bitfields
{
linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace());
}
else if (!init.isEmpty() && initLines==0 && maxInitLines>0) // add initializer
{ {
if (!isDefine()) if (!isDefine())
{ {
...@@ -797,9 +795,15 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -797,9 +795,15 @@ void MemberDef::writeDeclaration(OutputList &ol,
* all active output formats. * all active output formats.
*/ */
void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName,Definition *container) const char *scopeName,
Definition *container
)
{ {
// hide global static functions unless extractStaticFlag is enabled
if (getClassDef()==0 && isStatic() && !Config::extractStaticFlag) return; if (getClassDef()==0 && isStatic() && !Config::extractStaticFlag) return;
// hide member that are documented in their own group
if (group!=0 && container->definitionType()!=TypeGroup) return;
bool hasDocs = detailsAreVisible(); bool hasDocs = detailsAreVisible();
//printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition()); //printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition());
if ( if (
......
...@@ -73,6 +73,7 @@ class MemberDef : public Definition ...@@ -73,6 +73,7 @@ class MemberDef : public Definition
bool related,MemberType t,const ArgumentList *tal, bool related,MemberType t,const ArgumentList *tal,
const ArgumentList *al); const ArgumentList *al);
~MemberDef(); ~MemberDef();
DefType definitionType() { return TypeMember; }
QCString getOutputFileBase() const; QCString getOutputFileBase() const;
const char *declaration() const { return decl; } const char *declaration() const { return decl; }
...@@ -80,6 +81,7 @@ class MemberDef : public Definition ...@@ -80,6 +81,7 @@ class MemberDef : public Definition
const char *typeString() const { return type; } const char *typeString() const { return type; }
const char *argsString() const { return args; } const char *argsString() const { return args; }
const char *excpString() const { return exception; } const char *excpString() const { return exception; }
const char *bitfieldString() const { return bitfields; }
QCString anchor() const; QCString anchor() const;
const QCString &initializer() const { return init; } const QCString &initializer() const { return init; }
int initializerLines() const { return initLines; } int initializerLines() const { return initLines; }
...@@ -133,6 +135,7 @@ class MemberDef : public Definition ...@@ -133,6 +135,7 @@ class MemberDef : public Definition
init=init.stripWhiteSpace(); init=init.stripWhiteSpace();
initLines=init.contains('\n'); initLines=init.contains('\n');
} }
void setBitfields(const char *s) { bitfields = s; }
void setMaxInitLines(int lines) { if (lines!=-1) maxInitLines=lines; } void setMaxInitLines(int lines) { if (lines!=-1) maxInitLines=lines; }
void setMemberClass(ClassDef *cd) { classDef=cd; } void setMemberClass(ClassDef *cd) { classDef=cd; }
void setSectionList(MemberList *sl) { section=sl; } void setSectionList(MemberList *sl) { section=sl; }
...@@ -231,6 +234,7 @@ class MemberDef : public Definition ...@@ -231,6 +234,7 @@ class MemberDef : public Definition
NamespaceDef *nspace; // the namespace this member is in. NamespaceDef *nspace; // the namespace this member is in.
QCString type; // return type QCString type; // return type
QCString args; // function arguments/variable array specifiers QCString args; // function arguments/variable array specifiers
QCString bitfields; // struct member bitfields
QCString exception; // exceptions that can be thrown QCString exception; // exceptions that can be thrown
QCString init; // initializer QCString init; // initializer
int initLines; // number of lines in the initializer int initLines; // number of lines in the initializer
......
...@@ -110,7 +110,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe ...@@ -110,7 +110,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
//printf("MemberList::countDecMembers(%d)=%d\n",inGroup,m_count); //printf("MemberList::countDecMembers(%d)=%d\n",inGroup,m_count);
} }
void MemberList::countDocMembers() void MemberList::countDocMembers(bool listOfGroup)
{ {
/*varCnt=funcCnt=enumCnt=enumValCnt=typeCnt=protoCnt=defCnt=friendCnt=0;*/ /*varCnt=funcCnt=enumCnt=enumValCnt=typeCnt=protoCnt=defCnt=friendCnt=0;*/
m_count=0; m_count=0;
...@@ -122,7 +122,9 @@ void MemberList::countDocMembers() ...@@ -122,7 +122,9 @@ void MemberList::countDocMembers()
bool visibleIfStatic = bool visibleIfStatic =
!(md->getClassDef()==0 && md->isStatic() && !Config::extractStaticFlag); !(md->getClassDef()==0 && md->isStatic() && !Config::extractStaticFlag);
if (visibleIfStatic && bool inOwnGroup = (md->getGroupDef()!=0 && !listOfGroup);
if (visibleIfStatic && !inOwnGroup &&
(Config::extractAllFlag || md->detailsAreVisible()) (Config::extractAllFlag || md->detailsAreVisible())
) )
{ {
...@@ -298,6 +300,9 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -298,6 +300,9 @@ void MemberList::writePlainDeclarations(OutputList &ol,
typeDecl.writeChar(' '); typeDecl.writeChar(' ');
} }
const uint MAX_ENUM_VALUES_FOR_ONE_LINE = 4;
int enumMemCount=0;
typeDecl.docify("{ "); typeDecl.docify("{ ");
QList<MemberDef> *fmdl=md->enumFieldList(); QList<MemberDef> *fmdl=md->enumFieldList();
if (fmdl) if (fmdl)
...@@ -305,12 +310,17 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -305,12 +310,17 @@ void MemberList::writePlainDeclarations(OutputList &ol,
MemberDef *fmd=fmdl->first(); MemberDef *fmd=fmdl->first();
while (fmd) while (fmd)
{ {
/* in html we start each enum item on a new line */ /* in html we start a new line after a number of items */
if (fmdl->count()>MAX_ENUM_VALUES_FOR_ONE_LINE
&& (enumMemCount%MAX_ENUM_VALUES_FOR_ONE_LINE)==0
)
{
typeDecl.pushGeneratorState(); typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html); typeDecl.disableAllBut(OutputGenerator::Html);
typeDecl.lineBreak(); typeDecl.lineBreak();
typeDecl.writeString("&nbsp;&nbsp;"); typeDecl.writeString("&nbsp;&nbsp;");
typeDecl.popGeneratorState(); typeDecl.popGeneratorState();
}
if (fmd->hasDocumentation()) // enum value has docs if (fmd->hasDocumentation()) // enum value has docs
{ {
...@@ -334,12 +344,16 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -334,12 +344,16 @@ void MemberList::writePlainDeclarations(OutputList &ol,
typeDecl.disable(OutputGenerator::Man); typeDecl.disable(OutputGenerator::Man);
typeDecl.writeString("\n"); // to prevent too long lines in LaTeX typeDecl.writeString("\n"); // to prevent too long lines in LaTeX
typeDecl.enable(OutputGenerator::Man); typeDecl.enable(OutputGenerator::Man);
enumMemCount++;
} }
} }
if (fmdl->count()>MAX_ENUM_VALUES_FOR_ONE_LINE)
{
typeDecl.pushGeneratorState(); typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html); typeDecl.disableAllBut(OutputGenerator::Html);
typeDecl.lineBreak(); typeDecl.lineBreak();
typeDecl.popGeneratorState(); typeDecl.popGeneratorState();
}
typeDecl.docify(" }"); typeDecl.docify(" }");
md->setEnumDecl(typeDecl); md->setEnumDecl(typeDecl);
int enumVars=0; int enumVars=0;
......
...@@ -42,7 +42,7 @@ class MemberList : public QList<MemberDef> ...@@ -42,7 +42,7 @@ class MemberList : public QList<MemberDef>
int defineCount() const { return defCnt; } int defineCount() const { return defCnt; }
int friendCount() const { return friendCnt; } int friendCount() const { return friendCnt; }
void countDecMembers(bool inGroup,bool countSubGroups,bool sectionPerType); void countDecMembers(bool inGroup,bool countSubGroups,bool sectionPerType);
void countDocMembers(); void countDocMembers(bool listOfGroup=FALSE);
int totalCount() const int totalCount() const
{ return //varCnt+funcCnt+enumCnt+enumValCnt+typeCnt+ { return //varCnt+funcCnt+enumCnt+enumValCnt+typeCnt+
//protoCnt+defCnt+friendCnt; //protoCnt+defCnt+friendCnt;
......
...@@ -39,6 +39,7 @@ class NamespaceDef : public Definition ...@@ -39,6 +39,7 @@ class NamespaceDef : public Definition
NamespaceDef(const char *defFileName,int defLine, NamespaceDef(const char *defFileName,int defLine,
const char *name,const char *ref=0); const char *name,const char *ref=0);
~NamespaceDef(); ~NamespaceDef();
DefType definitionType() { return TypeNamespace; }
QCString getOutputFileBase() const { return fileName; } QCString getOutputFileBase() const { return fileName; }
void insertUsedFile(const char *fname); void insertUsedFile(const char *fname);
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
......
...@@ -49,10 +49,13 @@ class PageSDict : public SDict<PageInfo> ...@@ -49,10 +49,13 @@ class PageSDict : public SDict<PageInfo>
} }
}; };
class PageSDictIterator : public SDict<PageInfo>::Iterator // typedef is to get around Solaris compile problem
typedef SDict<PageInfo>::Iterator _SDictPageInfoIterator;
class PageSDictIterator : public _SDictPageInfoIterator
{ {
public: public:
PageSDictIterator(const PageSDict &d) : SDict<PageInfo>::Iterator(d) {} PageSDictIterator(const PageSDict &d) : _SDictPageInfoIterator(d) {}
~PageSDictIterator() {} ~PageSDictIterator() {}
}; };
...@@ -488,14 +488,14 @@ bool StyleData::setStyle(const char* s, const char* styleName) ...@@ -488,14 +488,14 @@ bool StyleData::setStyle(const char* s, const char* styleName)
if (start < 0) if (start < 0)
{ {
err("Style sheet '%s' contains no '\\s' clause.\n{%s}\n", styleName, s); err("Style sheet '%s' contains no '\\s' clause.\n{%s}\n", styleName, s);
return false; return FALSE;
} }
s += start; s += start;
index = (int)atol(s + 2); ASSERT(index > 0); index = (int)atol(s + 2); ASSERT(index > 0);
// search for the end of pure formatting codes // search for the end of pure formatting codes
const char* end = s + len; const char* end = s + len;
bool haveNewDefinition = true; bool haveNewDefinition = TRUE;
for(;;) for(;;)
{ {
if (*end == '{') if (*end == '{')
...@@ -518,7 +518,7 @@ bool StyleData::setStyle(const char* s, const char* styleName) ...@@ -518,7 +518,7 @@ bool StyleData::setStyle(const char* s, const char* styleName)
} }
else if (*end == 0) else if (*end == 0)
{ // no style-definition part, keep default value { // no style-definition part, keep default value
haveNewDefinition = false; haveNewDefinition = FALSE;
break; break;
} }
else // plain name without leading \\snext else // plain name without leading \\snext
...@@ -534,7 +534,7 @@ bool StyleData::setStyle(const char* s, const char* styleName) ...@@ -534,7 +534,7 @@ bool StyleData::setStyle(const char* s, const char* styleName)
definition = new char[size]; definition = new char[size];
memcpy(definition, end, size); memcpy(definition, end, size);
} }
return true; return TRUE;
} }
static void loadStylesheet(const char *name, QDict<StyleData>& dict) static void loadStylesheet(const char *name, QDict<StyleData>& dict)
...@@ -591,7 +591,7 @@ void RTFGenerator::init() ...@@ -591,7 +591,7 @@ void RTFGenerator::init()
err("Could not create output directory %s\n",dir.data()); err("Could not create output directory %s\n",dir.data());
exit(1); exit(1);
} }
Rtf_Style.setAutoDelete(true); Rtf_Style.setAutoDelete(TRUE);
// first duplicate strings of Rtf_Style_Default // first duplicate strings of Rtf_Style_Default
const struct Rtf_Style_Default* def = Rtf_Style_Default; const struct Rtf_Style_Default* def = Rtf_Style_Default;
......
...@@ -339,6 +339,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -339,6 +339,7 @@ TITLE [tT][iI][tT][lL][eE]
%x Bases %x Bases
%x BasesProt %x BasesProt
%x NextSemi %x NextSemi
%x BitFields
%x FindMembers %x FindMembers
%x FindMemberName %x FindMemberName
%x FindFields %x FindFields
...@@ -501,7 +502,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -501,7 +502,7 @@ TITLE [tT][iI][tT][lL][eE]
--curlyCount ; --curlyCount ;
} }
else else
BEGIN( NextSemi ) ; BEGIN( NextSemi );
} }
<NextSemi>"'"\\[0-7]{1,3}"'" <NextSemi>"'"\\[0-7]{1,3}"'"
<NextSemi>"'"\\."'" <NextSemi>"'"\\."'"
...@@ -512,7 +513,11 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -512,7 +513,11 @@ TITLE [tT][iI][tT][lL][eE]
} }
<NextSemi>[;,] { <NextSemi>[;,] {
unput(*yytext); unput(*yytext);
BEGIN( FindMembers ) ; BEGIN( FindMembers );
}
<BitFields>[;,] {
unput(*yytext);
BEGIN( FindMembers );
} }
<FindMembers>{B}*"k_dcop"{BN}*":"{BN}* { current->mtype = mtype = DCOP; <FindMembers>{B}*"k_dcop"{BN}*":"{BN}* { current->mtype = mtype = DCOP;
current->protection = protection = Public ; current->protection = protection = Public ;
...@@ -779,8 +784,17 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -779,8 +784,17 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN( NSAliasArg ); BEGIN( NSAliasArg );
} }
<NSAliasArg>({ID}"::")*{ID} { <NSAliasArg>({ID}"::")*{ID} {
printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext);
if (current_root->name.isEmpty())
{
namespaceAliasDict.insert(aliasName,new QCString(yytext)); namespaceAliasDict.insert(aliasName,new QCString(yytext));
} }
else
{
namespaceAliasDict.insert(current_root->name+"::"+aliasName,
new QCString(current_root->name+"::"+yytext));
}
}
<NSAliasArg>";" { <NSAliasArg>";" {
BEGIN( FindMembers ); BEGIN( FindMembers );
} }
...@@ -997,7 +1011,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -997,7 +1011,7 @@ TITLE [tT][iI][tT][lL][eE]
<DefineEnd>. <DefineEnd>.
<FindMembers>[*&]+ { current->name += yytext ; } <FindMembers>[*&]+ { current->name += yytext ; }
<FindMembers,MemberSpec,Function,NextSemi,ReadInitializer>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" { <FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount(); lineCount();
if (current->bodyLine==-1) if (current->bodyLine==-1)
current->bodyLine=yyLineNr; current->bodyLine=yyLineNr;
...@@ -1019,7 +1033,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1019,7 +1033,7 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN(AfterDoc); BEGIN(AfterDoc);
} }
} }
<MemberSpec,FindFields,FindMembers,NextSemi,ReadInitializer>","{BN}*("/**"|"//!"|"/*!"|"///")"<" { <MemberSpec,FindFields,FindMembers,NextSemi,BitFields,ReadInitializer>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount(); lineCount();
lastAfterDocContext = YY_START; lastAfterDocContext = YY_START;
afterDocTerminator = ','; afterDocTerminator = ',';
...@@ -1043,7 +1057,10 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1043,7 +1057,10 @@ TITLE [tT][iI][tT][lL][eE]
lineCount(); lineCount();
lastAfterDocContext = YY_START; lastAfterDocContext = YY_START;
if (YY_START==DefineEnd) if (YY_START==DefineEnd)
{
afterDocTerminator = '\n'; afterDocTerminator = '\n';
yyLineNr--;
}
else else
afterDocTerminator = 0; afterDocTerminator = 0;
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
...@@ -1241,12 +1258,16 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1241,12 +1258,16 @@ TITLE [tT][iI][tT][lL][eE]
yyLineNr++; yyLineNr++;
*pCopyCurlyString+=*yytext; *pCopyCurlyString+=*yytext;
} }
<FindMembers>":" {
<FindMembers>[:;,] { BEGIN(BitFields);
current->bitfields+=":";
}
<BitFields>. {
current->bitfields+=*yytext;
}
<FindMembers>[;,] {
QCString oldType = current->type.copy(); QCString oldType = current->type.copy();
QCString oldDocs = current->doc.copy(); QCString oldDocs = current->doc.copy();
if ( *yytext != ':')
{
if (current->bodyLine==-1) if (current->bodyLine==-1)
{ {
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
...@@ -1277,14 +1298,6 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1277,14 +1298,6 @@ TITLE [tT][iI][tT][lL][eE]
current->virt = Normal; current->virt = Normal;
current->stat = gstat; current->stat = gstat;
current->mGrpId = memberGroupId; current->mGrpId = memberGroupId;
}
// skip expression or bitfield if needed
if ( *yytext == ':')
{
BEGIN( NextSemi );
}
else
{
if ( *yytext == ',' ) if ( *yytext == ',' )
{ {
int i=oldType.length(); int i=oldType.length();
...@@ -1294,7 +1307,6 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1294,7 +1307,6 @@ TITLE [tT][iI][tT][lL][eE]
} }
BEGIN( FindMembers ) ; BEGIN( FindMembers ) ;
} }
}
<FindMembers>"[" { <FindMembers>"[" {
if (current->name.isEmpty()) // IDL function property if (current->name.isEmpty()) // IDL function property
...@@ -2661,7 +2673,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -2661,7 +2673,7 @@ TITLE [tT][iI][tT][lL][eE]
lastDocRelContext = YY_START; lastDocRelContext = YY_START;
BEGIN( ClassDocRelates ); BEGIN( ClassDocRelates );
} }
<ClassDocRelates>{ID} { <ClassDocRelates>({ID}"::")*{ID} {
current->relates = yytext; current->relates = yytext;
BEGIN( lastDocRelContext ); BEGIN( lastDocRelContext );
} }
......
This diff is collapsed.
...@@ -1922,7 +1922,8 @@ bool getScopeDefs(const char *docScope,const char *scope, ...@@ -1922,7 +1922,8 @@ bool getScopeDefs(const char *docScope,const char *scope,
* with name memberName. * with name memberName.
* 3) "memberName(...)" a specific (overloaded) function or define * 3) "memberName(...)" a specific (overloaded) function or define
* with name memberName * with name memberName
* 4) "::memberName a non-function member or define * 4) "::name a global variable or define
* 4) "#memberName member variable, global variable or define
* 5) ("ScopeName::")+"memberName()" * 5) ("ScopeName::")+"memberName()"
* 6) ("ScopeName::")+"memberName(...)" * 6) ("ScopeName::")+"memberName(...)"
* 7) ("ScopeName::")+"memberName" * 7) ("ScopeName::")+"memberName"
...@@ -1934,7 +1935,9 @@ bool generateRef(OutputList &ol,const char *scName, ...@@ -1934,7 +1935,9 @@ bool generateRef(OutputList &ol,const char *scName,
{ {
//printf("generateRef(scName=%s,name=%s,rt=%s)\n",scName,name,rt); //printf("generateRef(scName=%s,name=%s,rt=%s)\n",scName,name,rt);
QCString tmpName = substitute(name,"#","::"); QCString tsName = name;
bool memberScopeFirst = tsName.find('#')!=-1;
QCString tmpName = substitute(tsName,"#","::");
QCString linkText = rt; QCString linkText = rt;
int scopePos=tmpName.findRev("::"); int scopePos=tmpName.findRev("::");
int bracePos=tmpName.findRev('('); // reverse is needed for operator()(...) int bracePos=tmpName.findRev('('); // reverse is needed for operator()(...)
...@@ -2021,7 +2024,8 @@ bool generateRef(OutputList &ol,const char *scName, ...@@ -2021,7 +2024,8 @@ bool generateRef(OutputList &ol,const char *scName,
// scopeStr.data(),nameStr.data(),argsStr.data()); // scopeStr.data(),nameStr.data(),argsStr.data());
// check if nameStr is a member or global. // check if nameStr is a member or global.
if (getDefs(scopeStr,nameStr,argsStr,md,cd,fd,nd,gd,scopePos==0)) if (getDefs(scopeStr,nameStr,argsStr,md,cd,fd,nd,gd,
scopePos==0 && !memberScopeFirst))
{ {
//printf("after getDefs nd=%p\n",nd); //printf("after getDefs nd=%p\n",nd);
QCString anchor; QCString anchor;
...@@ -2118,6 +2122,7 @@ bool generateRef(OutputList &ol,const char *scName, ...@@ -2118,6 +2122,7 @@ bool generateRef(OutputList &ol,const char *scName,
bool generateLink(OutputList &ol,const char *clName, bool generateLink(OutputList &ol,const char *clName,
const char *lr,bool inSeeBlock,const char *lt) const char *lr,bool inSeeBlock,const char *lt)
{ {
//printf("generateLink clName=`%s' lr=`%s' lt=`%s'\n",clName,lr,lt);
QCString linkRef=lr; QCString linkRef=lr;
FileDef *fd; FileDef *fd;
GroupDef *gd; GroupDef *gd;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment