Commit 0b087b99 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.5.2-20070506

parent 80f45b62
DOXYGEN Version 1.5.2 DOXYGEN Version 1.5.2-20070506
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (04 April 2007) Dimitri van Heesch (06 May 2007)
DOXYGEN Version 1.5.2 DOXYGEN Version 1.5.2_20070506
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (04 April 2007) Dimitri van Heesch (dimitri@stack.nl) (06 May 2007)
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
* show some information about it. * show some information about it.
*/ */
#include </usr/include/unistd.h> // ugly hack to get the right unistd.h (doxygen has one too)
#include <stdlib.h> #include <stdlib.h>
#include "doxygen.h" #include "doxygen.h"
#include "outputgen.h" #include "outputgen.h"
......
...@@ -20,7 +20,7 @@ doxygen_version_minor=5 ...@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=2 doxygen_version_revision=2
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO doxygen_version_mmn=20070506
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -84,10 +84,10 @@ ...@@ -84,10 +84,10 @@
For non overloaded members the argument list may be omitted. For non overloaded members the argument list may be omitted.
If a function is overloaded and no matching argument list is specified If a function is overloaded and no matching argument list is specified
(i.e. pattern 2 or 5 is used), a link will be created to the (i.e. pattern 2 or 6 is used), a link will be created to the
documentation of one of the overloaded members. documentation of one of the overloaded members.
For member functions the class scope (as used in patterns 4 to 6) may For member functions the class scope (as used in patterns 4 to 7) may
be omitted, if: be omitted, if:
<ol> <ol>
<li>The pattern points to a documented member that belongs to the same class <li>The pattern points to a documented member that belongs to the same class
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
All of these entities can be linked to in the same way as described in the All of these entities can be linked to in the same way as described in the
previous section. For sake of clarity it is advised to only use previous section. For sake of clarity it is advised to only use
patterns 3 and 6 in this case. patterns 3 and 7 in this case.
\par Example: \par Example:
\verbinclude autolink.cpp \verbinclude autolink.cpp
......
...@@ -58,6 +58,7 @@ documentation: ...@@ -58,6 +58,7 @@ documentation:
\refitem cmddef \\def \refitem cmddef \\def
\refitem cmddefgroup \\defgroup \refitem cmddefgroup \\defgroup
\refitem cmddeprecated \\deprecated \refitem cmddeprecated \\deprecated
\refitem cmddetails \\details
\refitem cmddir \\dir \refitem cmddir \\dir
\refitem cmddontinclude \\dontinclude \refitem cmddontinclude \\dontinclude
\refitem cmddot \\dot \refitem cmddot \\dot
...@@ -863,6 +864,14 @@ is empty, \c TEST, \c DEV, or \c DEV \c TEST. ...@@ -863,6 +864,14 @@ is empty, \c TEST, \c DEV, or \c DEV \c TEST.
a deprecated entity. Can be used to describe alternatives, a deprecated entity. Can be used to describe alternatives,
expected life span, etc. expected life span, etc.
<hr>
\section cmddetails \\details {detailed decription}
\addindex \\details
Just like \ref cmdbrief "\\brief" starts a brief description, \\details
starts the detailed description. You can also start a new paragraph (blank line)
then the \\details command is not needed.
<hr> <hr>
\section cmdelse \\else \section cmdelse \\else
......
...@@ -85,6 +85,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -85,6 +85,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_dot_path DOT_PATH \refitem cfg_dot_path DOT_PATH
\refitem cfg_dot_transparent DOT_TRANSPARENT \refitem cfg_dot_transparent DOT_TRANSPARENT
\refitem cfg_dotfile_dirs DOTFILE_DIRS \refitem cfg_dotfile_dirs DOTFILE_DIRS
\refitem cfg_doxyfile_encoding DOXYFILE_ENCODING
\refitem cfg_enable_preprocessing ENABLE_PREPROCESSING \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING
\refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE \refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE
\refitem cfg_enabled_sections ENABLED_SECTIONS \refitem cfg_enabled_sections ENABLED_SECTIONS
...@@ -178,6 +179,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -178,6 +179,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_predefined PREDEFINED \refitem cfg_predefined PREDEFINED
\refitem cfg_project_name PROJECT_NAME \refitem cfg_project_name PROJECT_NAME
\refitem cfg_project_number PROJECT_NUMBER \refitem cfg_project_number PROJECT_NUMBER
\refitem cfg_qt_autobrief QT_AUTOBRIEF
\refitem cfg_quiet QUIET \refitem cfg_quiet QUIET
\refitem cfg_recursive RECURSIVE \refitem cfg_recursive RECURSIVE
\refitem cfg_referenced_by_relation REFERENCED_BY_RELATION \refitem cfg_referenced_by_relation REFERENCED_BY_RELATION
...@@ -226,9 +228,18 @@ followed by the descriptions of the tags grouped by category. ...@@ -226,9 +228,18 @@ followed by the descriptions of the tags grouped by category.
\endsecreflist \endsecreflist
\section config_project Project related options \section config_project Project related options
\anchor cfg_project_name \anchor cfg_doxyfile_encoding
<dl> <dl>
<dt>\c DOXYFILE_ENCODING <dd>
\addindex DOXYFILE_ENCODING
This tag specifies the encoding used for all characters in the config file that
follow. The default is UTF-8 which is also the encoding used for all text before
the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
possible encodings.
\anchor cfg_project_name
<dt>\c PROJECT_NAME <dd> <dt>\c PROJECT_NAME <dd>
\addindex PROJECT_NAME \addindex PROJECT_NAME
The \c PROJECT_NAME tag is a single word (or a sequence of words The \c PROJECT_NAME tag is a single word (or a sequence of words
...@@ -382,7 +393,17 @@ followed by the descriptions of the tags grouped by category. ...@@ -382,7 +393,17 @@ followed by the descriptions of the tags grouped by category.
If the \c JAVADOC_AUTOBRIEF is set to \c YES 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 default), the comment as the brief description. If set to NO (the default), the
Javadoc-style will behave just like the Qt-style comments. Javadoc-style will behave just like regular Qt-style comments
(thus requiring an explicit \@brief command for a brief description.)
\anchor cfg_qt_autobrief
<dt>\c QT_AUTOBRIEF <dd>
\addindex QT_AUTOBRIEF
If the \c QT_AUTOBRIEF is set to \c YES then doxygen
will interpret the first line (until the first dot) of a Qt-style
comment as the brief description. If set to NO (the default), the
Qt-style will behave just like regular Qt-style comments (thus
requiring an explicit \\brief command for a brief description.)
\anchor cfg_builtin_stl_support \anchor cfg_builtin_stl_support
<dt>\c BUILTIN_STL_SUPPORT <dd> <dt>\c BUILTIN_STL_SUPPORT <dd>
...@@ -753,6 +774,8 @@ function's detailed documentation block. ...@@ -753,6 +774,8 @@ function's detailed documentation block.
If this tag is empty the current directory is searched. If this tag is empty the current directory is searched.
\anchor cfg_input_encoding \anchor cfg_input_encoding
<dt>\c INPUT_ENCODING <dd>
\addindex INPUT_ENCODING
This tag can be used to specify the character encoding of the source files that This tag can be used to specify the character encoding of the source files that
doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
......
...@@ -209,6 +209,10 @@ JavaDoc style and \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" set to YES: ...@@ -209,6 +209,10 @@ JavaDoc style and \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" set to YES:
for the corresponding HTML documentation that is generated by doxygen. for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly \endhtmlonly
Similarly, if one wishes the first sentence of a Qt style documentation
block to automatically be treated as a brief description, one may set
\ref cfg_qt_autobrief "QT_AUTOBRIEF" to YES in the configuration file.
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
......
...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). configuration file (with default name and known as Doxyfile).
Currently (version 1.5.1-20070219), 33 languages Currently (version 1.5.2), 33 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
2005/02/28 - Slight modification to generate "mailto.txt" auxiliary file. 2005/02/28 - Slight modification to generate "mailto.txt" auxiliary file.
2005/08/15 - Doxygen's root directory determined primarily from DOXYGEN 2005/08/15 - Doxygen's root directory determined primarily from DOXYGEN
environment variable. When not found, then relatively to the script. environment variable. When not found, then relatively to the script.
2007/03/20 - The "translate me!" searched in comments and reported if found.
""" """
from __future__ import generators from __future__ import generators
...@@ -156,17 +157,20 @@ class Transl: ...@@ -156,17 +157,20 @@ class Transl:
# Initialize the other collected information. # Initialize the other collected information.
self.classId = None self.classId = None
self.baseClassId = None self.baseClassId = None
self.readableStatus = None # 'up-to-date', '1.2.3', '1.3', etc. self.readableStatus = None # 'up-to-date', '1.2.3', '1.3', etc.
self.status = None # '', '1.2.03', '1.3.00', etc. self.status = None # '', '1.2.03', '1.3.00', etc.
self.lang = None # like 'Brasilian' self.lang = None # like 'Brasilian'
self.langReadable = None # like 'Brasilian Portuguese' self.langReadable = None # like 'Brasilian Portuguese'
self.note = None # like 'should be cleaned up' self.note = None # like 'should be cleaned up'
self.prototypeDic = {} # uniPrototype -> prototype self.prototypeDic = {} # uniPrototype -> prototype
self.obsoleteMethods = None # list of prototypes to be removed self.translateMeText = 'translate me!'
self.missingMethods = None # list of prototypes to be implemented self.translateMeFlag = False # comments with "translate me!" found
self.obsoleteMethods = None # list of prototypes to be removed
self.missingMethods = None # list of prototypes to be implemented
self.implementedMethods = None # list of implemented required methods self.implementedMethods = None # list of implemented required methods
self.adaptMinClass = None # The newest adapter class that can be used self.adaptMinClass = None # The newest adapter class that can be used
def __tokenGenerator(self): def __tokenGenerator(self):
"""Generator that reads the file and yields tokens as 4-tuples. """Generator that reads the file and yields tokens as 4-tuples.
...@@ -265,6 +269,12 @@ class Transl: ...@@ -265,6 +269,12 @@ class Transl:
sys.stderr.write(msg) sys.stderr.write(msg)
yield (tokenId, tokenStr, tokenLineNo) yield (tokenId, tokenStr, tokenLineNo)
# If it is a comment that contains the self.translateMeText
# string, set the flag -- the situation will be reported.
if tokenId == 'comment' and tokenStr.find(self.translateMeText) >= 0:
self.translateMeFlag = True
tokenId = None tokenId = None
tokenStr = '' tokenStr = ''
tokenLineNo = 0 tokenLineNo = 0
...@@ -1103,11 +1113,17 @@ class Transl: ...@@ -1103,11 +1113,17 @@ class Transl:
self.adaptMinClass = adaptMinClass self.adaptMinClass = adaptMinClass
self.readableStatus = adaptMinVersion # simplified self.readableStatus = adaptMinVersion # simplified
# If everything seems OK, but the explicit mark self.translateMeText
# in comments was found, something must be translated.
if not self.note and self.status == '' and self.translateMeFlag:
self.note = 'The "%s" found in a comment.' % self.translateMeText
# If everything seems OK, but there are obsolete methods, set # If everything seems OK, but there are obsolete methods, set
# the note to clean-up source. This note will be used only when # the note to clean-up source. This note will be used only when
# the previous code did not set another note (priority). # the previous code did not set another note (priority).
if not self.note and self.status == '' and self.obsoleteMethods: if not self.note and self.status == '' and self.obsoleteMethods:
self.note = 'Remove the obsolete methods (never used).' self.note = 'Remove the obsolete methods (never used).'
def report(self, fout): def report(self, fout):
"""Returns the report part for the source as a multiline string. """Returns the report part for the source as a multiline string.
......
(1.5.1-20070219) (1.5.2)
Doxygen supports the following 33 languages (sorted alphabetically): Doxygen supports the following 33 languages (sorted alphabetically):
...@@ -17,20 +17,20 @@ alphabetically). This means that they derive from the Translator class ...@@ -17,20 +17,20 @@ alphabetically). This means that they derive from the Translator class
and they implement all 194 of the required methods. Anyway, there and they implement all 194 of the required methods. Anyway, there
still may be some details listed even for them: still may be some details listed even for them:
TranslatorBrazilian TranslatorBrazilian -- The "translate me!" found in a comment.
TranslatorCatalan TranslatorCatalan
TranslatorChinese TranslatorChinese -- The "translate me!" found in a comment.
TranslatorCroatian TranslatorCroatian -- The "translate me!" found in a comment.
TranslatorCzech TranslatorCzech
TranslatorDanish TranslatorDanish -- The "translate me!" found in a comment.
TranslatorDutch TranslatorDutch
TranslatorEnglish TranslatorEnglish
TranslatorFrench TranslatorFrench
TranslatorGerman TranslatorGerman -- The "translate me!" found in a comment.
TranslatorGreek -- Remove the obsolete methods (never used). TranslatorGreek -- The "translate me!" found in a comment.
TranslatorItalian TranslatorItalian -- The "translate me!" found in a comment.
TranslatorJapanese -- Remove the obsolete methods (never used). TranslatorJapanese -- Remove the obsolete methods (never used).
TranslatorRussian TranslatorRussian -- The "translate me!" found in a comment.
TranslatorSpanish TranslatorSpanish
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -105,6 +105,18 @@ TranslatorArabic (TranslatorAdapter_1_4_6) 1 method to implement ...@@ -105,6 +105,18 @@ TranslatorArabic (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorBrazilian (Translator)
-------------------
Implements 194 of the required methods.
TranslatorChinese (Translator)
-----------------
Implements 194 of the required methods.
TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement
---------------------------- ----------------------------
...@@ -127,6 +139,18 @@ TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement ...@@ -127,6 +139,18 @@ TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorCroatian (Translator)
------------------
Implements 194 of the required methods.
TranslatorDanish (Translator)
----------------
Implements 194 of the required methods.
TranslatorFinnish (TranslatorEnglish) 96 methods to implement TranslatorFinnish (TranslatorEnglish) 96 methods to implement
----------------- -----------------
...@@ -243,6 +267,12 @@ TranslatorFinnish (TranslatorEnglish) 96 methods to implement ...@@ -243,6 +267,12 @@ TranslatorFinnish (TranslatorEnglish) 96 methods to implement
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorGerman (Translator)
----------------
Implements 194 of the required methods.
TranslatorGreek (Translator) TranslatorGreek (Translator)
--------------- ---------------
...@@ -294,6 +324,12 @@ TranslatorIndonesian (TranslatorAdapter_1_4_6) 1 method to implement ...@@ -294,6 +324,12 @@ TranslatorIndonesian (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorItalian (Translator)
-----------------
Implements 194 of the required methods.
TranslatorJapanese (Translator) TranslatorJapanese (Translator)
------------------ ------------------
...@@ -485,6 +521,12 @@ TranslatorRomanian (TranslatorAdapter_1_4_1) 2 methods to implement ...@@ -485,6 +521,12 @@ TranslatorRomanian (TranslatorAdapter_1_4_1) 2 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorRussian (Translator)
-----------------
Implements 194 of the required methods.
TranslatorSerbian (TranslatorAdapter_1_4_1) 2 methods to implement TranslatorSerbian (TranslatorAdapter_1_4_1) 2 methods to implement
----------------- -----------------
......
...@@ -2849,6 +2849,7 @@ void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec) ...@@ -2849,6 +2849,7 @@ void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine()); imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
imd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine()); imd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
imd->setMemberSpecifiers(md->getMemberSpecifiers()); imd->setMemberSpecifiers(md->getMemberSpecifiers());
imd->setMemberGroupId(md->getMemberGroupId());
insertMember(imd); insertMember(imd);
//printf("Adding member=%s %s%s to class %s templSpec %s\n", //printf("Adding member=%s %s%s to class %s templSpec %s\n",
// imd->typeString(),imd->name().data(),imd->argsString(), // imd->typeString(),imd->name().data(),imd->argsString(),
......
...@@ -164,7 +164,7 @@ static void endCondSection() ...@@ -164,7 +164,7 @@ static void endCondSection()
} }
} }
/** remove and executes \\cond and \\endcond commands in \a s */ /** remove and executes cond and endcond commands in \a s */
static QCString handleCondCmdInAliases(const QCString &s) static QCString handleCondCmdInAliases(const QCString &s)
{ {
QCString result; QCString result;
...@@ -566,7 +566,7 @@ void replaceComment(int offset) ...@@ -566,7 +566,7 @@ void replaceComment(int offset)
* -# It converts multi-line C++ style comment blocks (that are aligned) * -# It converts multi-line C++ style comment blocks (that are aligned)
* to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO). * to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO).
* -# It replaces aliases with their definition (see ALIASES) * -# It replaces aliases with their definition (see ALIASES)
* -# It handles conditional sections (\cond...\endcond blocks) * -# It handles conditional sections (cond...endcond blocks)
*/ */
void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName) void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
{ {
......
...@@ -2281,15 +2281,15 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2281,15 +2281,15 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in */ const QCString &fileName, /* in */ const QCString &fileName,
/* in */ int lineNr, /* in */ int lineNr,
/* in */ bool isBrief, /* in */ bool isBrief,
/* in */ bool isJavaDocStyle, /* in */ bool isAutoBriefOn,
/* in */ bool isInbody, /* in */ bool isInbody,
/* in,out */ Protection &prot, /* in,out */ Protection &prot,
/* in,out */ int &position, /* in,out */ int &position,
/* out */ bool &newEntryNeeded /* out */ bool &newEntryNeeded
) )
{ {
//printf("parseCommentBlock() isBrief=%d isJavaDocStyle=%d lineNr=%d\n", //printf("parseCommentBlock() isBrief=%d isAutoBriefOn=%d lineNr=%d\n",
// isBrief,isJavaDocStyle,lineNr); // isBrief,isAutoBriefOn,lineNr);
initParser(); initParser();
guards.setAutoDelete(TRUE); guards.setAutoDelete(TRUE);
...@@ -2310,8 +2310,8 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2310,8 +2310,8 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
parseMore = FALSE; parseMore = FALSE;
inBody = isInbody; inBody = isInbody;
outputXRef.resize(0); outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc ); setOutput( isBrief || isAutoBriefOn ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle; briefEndsAtDot = isAutoBriefOn;
if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
{ {
......
...@@ -502,7 +502,6 @@ static void readIncludeFile(const char *incName) ...@@ -502,7 +502,6 @@ static void readIncludeFile(const char *incName)
<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext; <Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext;
cmd=cmd.left(cmd.length()-1).stripWhiteSpace(); cmd=cmd.left(cmd.length()-1).stripWhiteSpace();
ConfigOption *option = config->get(cmd); ConfigOption *option = config->get(cmd);
option->setEncoding(encoding);
if (option==0) // oops not known if (option==0) // oops not known
{ {
config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n", config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
...@@ -511,6 +510,7 @@ static void readIncludeFile(const char *incName) ...@@ -511,6 +510,7 @@ static void readIncludeFile(const char *incName)
} }
else // known tag else // known tag
{ {
option->setEncoding(encoding);
switch(option->kind()) switch(option->kind())
{ {
case ConfigOption::O_Info: case ConfigOption::O_Info:
...@@ -1574,8 +1574,17 @@ void Config::create() ...@@ -1574,8 +1574,17 @@ void Config::create()
"If the JAVADOC_AUTOBRIEF tag is set to YES 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 \n" "comment as the brief description. If set to NO, the JavaDoc \n"
"comments will behave just like the Qt-style comments (thus requiring an \n" "comments will behave just like regular Qt-style comments \n"
"explicit @brief command for a brief description. \n", "(thus requiring an explicit @brief command for a brief description.) \n",
FALSE
);
cb = addBool(
"QT_AUTOBRIEF",
"If the QT_AUTOBRIEF tag is set to YES then Doxygen will \n"
"interpret the first line (until the first dot) of a Qt-style \n"
"comment as the brief description. If set to NO, the comments \n"
"will behave just like regular Qt-style comments (thus requiring \n"
"an explicit \\brief command for a brief description.) \n",
FALSE FALSE
); );
cb = addBool( cb = addBool(
...@@ -2821,7 +2830,7 @@ void Config::create() ...@@ -2821,7 +2830,7 @@ void Config::create()
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"CALL_GRAPH", "CALL_GRAPH",
"If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will \n" "If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will \n"
"generate a call dependency graph for every global function or class method. \n" "generate a call dependency graph for every global function or class method. \n"
"Note that enabling this option will significantly increase the time of a run. \n" "Note that enabling this option will significantly increase the time of a run. \n"
"So in most cases it will be better to enable call graphs for selected \n" "So in most cases it will be better to enable call graphs for selected \n"
...@@ -2831,7 +2840,7 @@ void Config::create() ...@@ -2831,7 +2840,7 @@ void Config::create()
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"CALLER_GRAPH", "CALLER_GRAPH",
"If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will \n" "If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will \n"
"generate a caller dependency graph for every global function or class method. \n" "generate a caller dependency graph for every global function or class method. \n"
"Note that enabling this option will significantly increase the time of a run. \n" "Note that enabling this option will significantly increase the time of a run. \n"
"So in most cases it will be better to enable caller graphs for selected \n" "So in most cases it will be better to enable caller graphs for selected \n"
......
...@@ -1422,7 +1422,7 @@ static void readTextFileByName(const QString &file,QString &text) ...@@ -1422,7 +1422,7 @@ static void readTextFileByName(const QString &file,QString &text)
FileDef *fd; FileDef *fd;
if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig))) if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig)))
{ {
text = fileToString(fd->absFilePath(),FALSE); text = fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES"));
} }
else if (ambig) else if (ambig)
{ {
...@@ -2092,6 +2092,8 @@ void DocRef::parse() ...@@ -2092,6 +2092,8 @@ void DocRef::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unsupported symbol %s found", warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unsupported symbol %s found",
g_token->name.data()); g_token->name.data());
break; break;
case TK_HTMLTAG:
break;
default: default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unexpected token %s", warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unexpected token %s",
tokToString(tok)); tokToString(tok));
...@@ -2111,7 +2113,7 @@ void DocRef::parse() ...@@ -2111,7 +2113,7 @@ void DocRef::parse()
} }
handlePendingStyleCommands(this,m_children); handlePendingStyleCommands(this,m_children);
DBG(("DocRef::parse() end\n"));
DocNode *n=g_nodeStack.pop(); DocNode *n=g_nodeStack.pop();
ASSERT(n==this); ASSERT(n==this);
} }
...@@ -2155,7 +2157,7 @@ DocLink::DocLink(DocNode *parent,const QString &target) : ...@@ -2155,7 +2157,7 @@ DocLink::DocLink(DocNode *parent,const QString &target) :
} }
QString DocLink::parse(bool isJavaLink) QString DocLink::parse(bool isJavaLink,bool isXmlLink)
{ {
QString result; QString result;
g_nodeStack.push(this); g_nodeStack.push(this);
...@@ -2187,6 +2189,13 @@ QString DocLink::parse(bool isJavaLink) ...@@ -2187,6 +2189,13 @@ QString DocLink::parse(bool isJavaLink)
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unsupported symbol %s found", warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unsupported symbol %s found",
g_token->name.data()); g_token->name.data());
break; break;
case TK_HTMLTAG:
if (g_token->name!="see" || !isXmlLink)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unexpected xml/html command %s found",
g_token->name.data());
}
goto endlink;
case TK_LNKWORD: case TK_LNKWORD:
case TK_WORD: case TK_WORD:
if (isJavaLink) // special case to detect closing } if (isJavaLink) // special case to detect closing }
...@@ -4847,11 +4856,31 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag ...@@ -4847,11 +4856,31 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
// can we expect from Microsoft...) // can we expect from Microsoft...)
{ {
QString cref; QString cref;
//printf("XML_SEE: empty tag=%d\n",g_token->emptyTag);
if (findAttribute(tagHtmlAttribs,"cref",&cref)) if (findAttribute(tagHtmlAttribs,"cref",&cref))
{ {
DocRef *ref = new DocRef(this,cref); if (g_token->emptyTag) // <see cref="..."/> style
m_children.append(ref); {
ref->parse(); bool inSeeBlock = g_inSeeBlock;
g_token->name = cref;
g_inSeeBlock = TRUE;
handleLinkedWord(this,m_children);
g_inSeeBlock = inSeeBlock;
}
else // <see cref="...">...</see> style
{
//DocRef *ref = new DocRef(this,cref);
//m_children.append(ref);
//ref->parse();
doctokenizerYYsetStatePara();
DocLink *lnk = new DocLink(this,cref);
m_children.append(lnk);
QString leftOver = lnk->parse(FALSE,TRUE);
if (!leftOver.isEmpty())
{
m_children.append(new DocWord(this,leftOver));
}
}
} }
else else
{ {
......
...@@ -639,7 +639,7 @@ class DocLink : public CompAccept<DocLink>, public DocNode ...@@ -639,7 +639,7 @@ class DocLink : public CompAccept<DocLink>, public DocNode
{ {
public: public:
DocLink(DocNode *parent,const QString &target); DocLink(DocNode *parent,const QString &target);
QString parse(bool); QString parse(bool,bool isXmlLink=FALSE);
Kind kind() const { return Kind_Link; } Kind kind() const { return Kind_Link; }
QString file() const { return m_file; } QString file() const { return m_file; }
QString relPath() const { return m_relPath; } QString relPath() const { return m_relPath; }
......
...@@ -694,6 +694,24 @@ static QCString convertLabel(const QCString &l) ...@@ -694,6 +694,24 @@ static QCString convertLabel(const QCString &l)
return result; return result;
} }
static QCString escapeTooltip(const QCString &tooltip)
{
QCString result;
const char *p=tooltip.data();
if (p==0) return result;
char c;
while ((c=*p++))
{
switch(c)
{
case '\\': result+="\\\\"; break;
case '"': result+="\\\""; break;
default: result+=c; break;
}
}
return result;
}
static void writeBoxMemberList(QTextStream &t,char prot,MemberList *ml,ClassDef *scope) static void writeBoxMemberList(QTextStream &t,char prot,MemberList *ml,ClassDef *scope)
{ {
if (ml) if (ml)
...@@ -812,7 +830,7 @@ void DotNode::writeBox(QTextStream &t, ...@@ -812,7 +830,7 @@ void DotNode::writeBox(QTextStream &t,
} }
if (!m_tooltip.isEmpty()) if (!m_tooltip.isEmpty())
{ {
t << ",tooltip=\"" << m_tooltip << "\""; t << ",tooltip=\"" << escapeTooltip(m_tooltip) << "\"";
} }
} }
t << "];" << endl; t << "];" << endl;
......
...@@ -132,6 +132,7 @@ ObjCache *Doxygen::symbolCache = 0; ...@@ -132,6 +132,7 @@ ObjCache *Doxygen::symbolCache = 0;
Store *Doxygen::symbolStorage; Store *Doxygen::symbolStorage;
QCString Doxygen::objDBFileName; QCString Doxygen::objDBFileName;
QCString Doxygen::entryDBFileName; QCString Doxygen::entryDBFileName;
bool Doxygen::gatherDefines = TRUE;
// locally accessible globals // locally accessible globals
static QDict<EntryNav> classEntries(1009); static QDict<EntryNav> classEntries(1009);
...@@ -4687,8 +4688,9 @@ static void addMemberDocs(EntryNav *rootNav, ...@@ -4687,8 +4688,9 @@ static void addMemberDocs(EntryNav *rootNav,
{ {
//printf("setInitializer\n"); //printf("setInitializer\n");
md->setInitializer(root->initializer); md->setInitializer(root->initializer);
md->setMaxInitLines(root->initLines);
} }
md->setMaxInitLines(root->initLines);
if (rfd) if (rfd)
{ {
...@@ -8178,7 +8180,7 @@ static int transcodeCharacterBuffer(BufStr &srcBuf,int size, ...@@ -8178,7 +8180,7 @@ static int transcodeCharacterBuffer(BufStr &srcBuf,int size,
// reads a file into an array and filters out any 0x00 and 0x06 bytes, // reads a file into an array and filters out any 0x00 and 0x06 bytes,
// because these are special for the parser. // because these are special for the parser.
static void copyAndFilterFile(const char *fileName,BufStr &dest) void copyAndFilterFile(const char *fileName,BufStr &dest)
{ {
// try to open file // try to open file
int size=0; int size=0;
...@@ -8349,7 +8351,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav) ...@@ -8349,7 +8351,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav)
// The directory is read iff the recusiveFlag is set. // The directory is read iff the recusiveFlag is set.
// The contents of all files is append to the input string // The contents of all files is append to the input string
static int readDir(QFileInfo *fi, int readDir(QFileInfo *fi,
FileNameList *fnList, FileNameList *fnList,
FileNameDict *fnDict, FileNameDict *fnDict,
StringDict *exclDict, StringDict *exclDict,
...@@ -8441,7 +8443,7 @@ static int readDir(QFileInfo *fi, ...@@ -8441,7 +8443,7 @@ static int readDir(QFileInfo *fi,
// read a file or all files in a directory and append their contents to the // read a file or all files in a directory and append their contents to the
// input string. The names of the files are appended to the `fiList' list. // input string. The names of the files are appended to the `fiList' list.
static int readFileOrDirectory(const char *s, int readFileOrDirectory(const char *s,
FileNameList *fnList, FileNameList *fnList,
FileNameDict *fnDict, FileNameDict *fnDict,
StringDict *exclDict, StringDict *exclDict,
...@@ -8450,8 +8452,8 @@ static int readFileOrDirectory(const char *s, ...@@ -8450,8 +8452,8 @@ static int readFileOrDirectory(const char *s,
StringList *resultList, StringList *resultList,
StringDict *resultDict, StringDict *resultDict,
bool recursive, bool recursive,
bool errorIfNotExist=TRUE, bool errorIfNotExist,
QDict<void> *killDict = 0 QDict<void> *killDict
) )
{ {
//printf("killDict=%p count=%d\n",killDict,killDict->count()); //printf("killDict=%p count=%d\n",killDict,killDict->count());
...@@ -8526,7 +8528,7 @@ static int readFileOrDirectory(const char *s, ...@@ -8526,7 +8528,7 @@ static int readFileOrDirectory(const char *s,
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
static void readFormulaRepository() void readFormulaRepository()
{ {
QFile f(Config_getString("HTML_OUTPUT")+"/formula.repository"); QFile f(Config_getString("HTML_OUTPUT")+"/formula.repository");
if (f.open(IO_ReadOnly)) // open repository if (f.open(IO_ReadOnly)) // open repository
...@@ -8641,7 +8643,7 @@ static void escapeAliases() ...@@ -8641,7 +8643,7 @@ static void escapeAliases()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
static void readAliases() void readAliases()
{ {
// add aliases to a dictionary // add aliases to a dictionary
Doxygen::aliasDict.setAutoDelete(TRUE); Doxygen::aliasDict.setAutoDelete(TRUE);
......
...@@ -45,6 +45,8 @@ class DirDef; ...@@ -45,6 +45,8 @@ class DirDef;
class ParserManager; class ParserManager;
class ObjCache; class ObjCache;
class Store; class Store;
class QFileInfo;
class BufStr;
typedef QList<QCString> StringList; typedef QList<QCString> StringList;
typedef QDict<FileDef> FileDict; typedef QDict<FileDef> FileDict;
...@@ -123,6 +125,7 @@ class Doxygen ...@@ -123,6 +125,7 @@ class Doxygen
static Store *symbolStorage; static Store *symbolStorage;
static QCString objDBFileName; static QCString objDBFileName;
static QCString entryDBFileName; static QCString entryDBFileName;
static bool gatherDefines;
}; };
void initDoxygen(); void initDoxygen();
...@@ -130,6 +133,33 @@ void readConfiguration(int argc, char **argv); ...@@ -130,6 +133,33 @@ void readConfiguration(int argc, char **argv);
void checkConfiguration(); void checkConfiguration();
void parseInput(); void parseInput();
void generateOutput(); void generateOutput();
void readAliases();
void readFormulaRepository();
int readFileOrDirectory(const char *s,
FileNameList *fnList,
FileNameDict *fnDict,
StringDict *exclDict,
QStrList *patList,
QStrList *exclPatList,
StringList *resultList,
StringDict *resultDict,
bool recursive,
bool errorIfNotExist=TRUE,
QDict<void> *killDict = 0
);
int readDir(QFileInfo *fi,
FileNameList *fnList,
FileNameDict *fnDict,
StringDict *exclDict,
QStrList *patList,
QStrList *exclPatList,
StringList *resultList,
StringDict *resultDict,
bool errorIfNotExist,
bool recursive,
QDict<void> *killDict
);
void copyAndFilterFile(const char *fileName,BufStr &dest);
#define NEWMATCH #define NEWMATCH
......
...@@ -21,12 +21,12 @@ SOURCES = main.cpp ...@@ -21,12 +21,12 @@ SOURCES = main.cpp
unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5
win32:INCLUDEPATH += . win32:INCLUDEPATH += .
win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5
win32-msvc:LIBS += qtools.lib png.lib md5.lib doxygen.lib doxycfg.lib shell32.lib win32-msvc:LIBS += qtools.lib png.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib
win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\lib win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\lib
win32-borland:LIBS += qtools.lib png.lib md5.lib doxygen.lib doxycfg.lib shell32.lib win32-borland:LIBS += qtools.lib png.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib
win32-borland:TMAKE_LFLAGS += -L..\lib -L$(BCB)\lib\psdk win32-borland:TMAKE_LFLAGS += -L..\lib -L$(BCB)\lib\psdk
win32:TMAKE_CXXFLAGS += -DQT_NODLL win32:TMAKE_CXXFLAGS += -DQT_NODLL
win32-g++:LIBS = -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 win32-g++:LIBS = -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 -liconv
win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
INCLUDEPATH += ../qtools ../libpng ../libmd5 . INCLUDEPATH += ../qtools ../libpng ../libmd5 .
#win32-g++:INCLUDEPATH -= ../libpng #win32-g++:INCLUDEPATH -= ../libpng
......
This diff is collapsed.
...@@ -28,6 +28,7 @@ class QFile; ...@@ -28,6 +28,7 @@ class QFile;
class EntryNav; class EntryNav;
class FileDef; class FileDef;
class FileStorage; class FileStorage;
class StorageIntf;
enum Protection { Public, Protected, Private, Package } ; enum Protection { Public, Protected, Private, Package } ;
enum Specifier { Normal, Virtual, Pure } ; enum Specifier { Normal, Virtual, Pure } ;
...@@ -302,6 +303,8 @@ class Entry ...@@ -302,6 +303,8 @@ class Entry
* at construction time. * at construction time.
*/ */
void reset(); void reset();
void marshall(StorageIntf *);
void unmarshall(StorageIntf *);
public: public:
......
...@@ -166,7 +166,7 @@ bool setTranslator(const char *langName) ...@@ -166,7 +166,7 @@ bool setTranslator(const char *langName)
#ifdef LANG_CZ #ifdef LANG_CZ
else if (L_EQUAL("czech")) else if (L_EQUAL("czech"))
{ {
theTranslator=new TranslatorDecoder(new TranslatorCzech); theTranslator=new TranslatorCzech;
} }
#endif #endif
#ifdef LANG_FR #ifdef LANG_FR
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "groupdef.h" #include "groupdef.h"
#include "example.h" #include "example.h"
#define HEADER ('D'<<24)+('O'<<16)+('X'<<8)+'!'
void marshalInt(StorageIntf *s,int v) void marshalInt(StorageIntf *s,int v)
{ {
...@@ -349,6 +350,72 @@ void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls) ...@@ -349,6 +350,72 @@ void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls)
} }
} }
void marshalEntry(StorageIntf *s,Entry *e)
{
marshalUInt(s,HEADER);
marshalQCString(s,e->name);
marshalQCString(s,e->type);
marshalInt(s,e->section);
marshalInt(s,(int)e->protection);
marshalInt(s,(int)e->mtype);
marshalInt(s,e->spec);
marshalInt(s,e->initLines);
marshalBool(s,e->stat);
marshalBool(s,e->explicitExternal);
marshalBool(s,e->proto);
marshalBool(s,e->subGrouping);
marshalBool(s,e->callGraph);
marshalBool(s,e->callerGraph);
marshalInt(s,(int)e->virt);
marshalQCString(s,e->args);
marshalQCString(s,e->bitfields);
marshalArgumentList(s,e->argList);
marshalArgumentLists(s,e->tArgLists);
marshalQGString(s,e->program);
marshalQGString(s,e->initializer);
marshalQCString(s,e->includeFile);
marshalQCString(s,e->includeName);
marshalQCString(s,e->doc);
marshalInt(s,e->docLine);
marshalQCString(s,e->docFile);
marshalQCString(s,e->brief);
marshalInt(s,e->briefLine);
marshalQCString(s,e->briefFile);
marshalQCString(s,e->inbodyDocs);
marshalInt(s,e->inbodyLine);
marshalQCString(s,e->inbodyFile);
marshalQCString(s,e->relates);
marshalBool(s,e->relatesDup);
marshalQCString(s,e->read);
marshalQCString(s,e->write);
marshalQCString(s,e->inside);
marshalQCString(s,e->exception);
marshalInt(s,e->bodyLine);
marshalInt(s,e->endBodyLine);
marshalInt(s,e->mGrpId);
marshalBaseInfoList(s,e->extends);
marshalGroupingList(s,e->groups);
marshalSectionInfoList(s,e->anchors);
marshalQCString(s,e->fileName);
marshalInt(s,e->startLine);
marshalItemInfoList(s,e->sli);
marshalBool(s,e->objc);
marshalBool(s,e->hidden);
marshalInt(s,(int)e->groupDocType);
}
void marshalEntryTree(StorageIntf *s,Entry *e)
{
marshalEntry(s,e);
marshalUInt(s,e->children()->count());
QListIterator<Entry> eli(*e->children());
Entry *child;
for (eli.toFirst();(child=eli.current());++eli)
{
marshalEntryTree(s,child);
}
}
//------------------------------------------------------------------ //------------------------------------------------------------------
int unmarshalInt(StorageIntf *s) int unmarshalInt(StorageIntf *s)
...@@ -664,4 +731,75 @@ SDict<MemberList> *unmarshalMemberLists(StorageIntf *s) ...@@ -664,4 +731,75 @@ SDict<MemberList> *unmarshalMemberLists(StorageIntf *s)
return result; return result;
} }
Entry * unmarshalEntry(StorageIntf *s)
{
Entry *e = new Entry;
uint header=unmarshalUInt(s);
ASSERT(header==HEADER);
e->name = unmarshalQCString(s);
e->type = unmarshalQCString(s);
e->section = unmarshalInt(s);
e->protection = (Protection)unmarshalInt(s);
e->mtype = (MethodTypes)unmarshalInt(s);
e->spec = unmarshalInt(s);
e->initLines = unmarshalInt(s);
e->stat = unmarshalBool(s);
e->explicitExternal = unmarshalBool(s);
e->proto = unmarshalBool(s);
e->subGrouping = unmarshalBool(s);
e->callGraph = unmarshalBool(s);
e->callerGraph = unmarshalBool(s);
e->virt = (Specifier)unmarshalInt(s);
e->args = unmarshalQCString(s);
e->bitfields = unmarshalQCString(s);
delete e->argList;
e->argList = unmarshalArgumentList(s);
e->tArgLists = unmarshalArgumentLists(s);
e->program = unmarshalQGString(s);
e->initializer = unmarshalQGString(s);
e->includeFile = unmarshalQCString(s);
e->includeName = unmarshalQCString(s);
e->doc = unmarshalQCString(s);
e->docLine = unmarshalInt(s);
e->docFile = unmarshalQCString(s);
e->brief = unmarshalQCString(s);
e->briefLine = unmarshalInt(s);
e->briefFile = unmarshalQCString(s);
e->inbodyDocs = unmarshalQCString(s);
e->inbodyLine = unmarshalInt(s);
e->inbodyFile = unmarshalQCString(s);
e->relates = unmarshalQCString(s);
e->relatesDup = unmarshalBool(s);
e->read = unmarshalQCString(s);
e->write = unmarshalQCString(s);
e->inside = unmarshalQCString(s);
e->exception = unmarshalQCString(s);
e->bodyLine = unmarshalInt(s);
e->endBodyLine = unmarshalInt(s);
e->mGrpId = unmarshalInt(s);
delete e->extends;
e->extends = unmarshalBaseInfoList(s);
delete e->groups;
e->groups = unmarshalGroupingList(s);
delete e->anchors;
e->anchors = unmarshalSectionInfoList(s);
e->fileName = unmarshalQCString(s);
e->startLine = unmarshalInt(s);
e->sli = unmarshalItemInfoList(s);
e->objc = unmarshalBool(s);
e->hidden = unmarshalBool(s);
e->groupDocType = (Entry::GroupDocType)unmarshalInt(s);
return e;
}
Entry * unmarshalEntryTree(StorageIntf *s)
{
Entry *e = unmarshalEntry(s);
uint count = unmarshalUInt(s);
uint i;
for (i=0;i<count;i++)
{
e->addSubEntry(unmarshalEntryTree(s));
}
return e;
}
...@@ -21,6 +21,7 @@ struct DocInfo; ...@@ -21,6 +21,7 @@ struct DocInfo;
struct BriefInfo; struct BriefInfo;
class MemberList; class MemberList;
class ExampleSDict; class ExampleSDict;
class Entry;
#define NULL_LIST 0xffffffff #define NULL_LIST 0xffffffff
...@@ -33,6 +34,49 @@ class FileStorage : public QFile, public StorageIntf ...@@ -33,6 +34,49 @@ class FileStorage : public QFile, public StorageIntf
int write(const char *buf,uint size) { return QFile::writeBlock(buf,size); } int write(const char *buf,uint size) { return QFile::writeBlock(buf,size); }
}; };
class StreamStorage : public StorageIntf
{
public:
StreamStorage()
{
m_data=0;
m_offset=0;
m_len=0;
}
~StreamStorage()
{
delete m_data;
}
StreamStorage(char *data,uint len)
{
m_data=data;
m_offset=0;
m_len=len;
}
int read(char *buf,uint size)
{
int bytesLeft = QMIN((int)size,m_len-m_offset);
if (bytesLeft>0) memcpy(buf,m_data,bytesLeft);
m_offset+=bytesLeft;
return bytesLeft;
}
int write(const char *buf,uint size)
{
m_data=(char *)realloc(m_data,m_offset+size);
memcpy(m_data+m_offset,buf,size);
m_offset+=size;
m_len+=size;
return size;
}
void rewind() { m_offset=0; }
char *data() const { return m_data; }
int size() { return m_len; }
private:
char *m_data;
int m_offset;
int m_len;
};
//----- marshaling function: datatype -> byte stream -------------------- //----- marshaling function: datatype -> byte stream --------------------
void marshalInt(StorageIntf *s,int v); void marshalInt(StorageIntf *s,int v);
...@@ -56,6 +100,8 @@ void marshalGroupList(StorageIntf *s,GroupList *groupList); ...@@ -56,6 +100,8 @@ void marshalGroupList(StorageIntf *s,GroupList *groupList);
void marshalMemberList(StorageIntf *s,MemberList *ml); void marshalMemberList(StorageIntf *s,MemberList *ml);
void marshalExampleSDict(StorageIntf *s,ExampleSDict *ed); void marshalExampleSDict(StorageIntf *s,ExampleSDict *ed);
void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls); void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls);
void marshalEntry(StorageIntf *s,Entry *e);
void marshalEntryTree(StorageIntf *s,Entry *e);
//----- unmarshaling function: byte stream -> datatype ------------------ //----- unmarshaling function: byte stream -> datatype ------------------
...@@ -80,5 +126,7 @@ GroupList * unmarshalGroupList(StorageIntf *s); ...@@ -80,5 +126,7 @@ GroupList * unmarshalGroupList(StorageIntf *s);
MemberList * unmarshalMemberList(StorageIntf *s); MemberList * unmarshalMemberList(StorageIntf *s);
ExampleSDict * unmarshalExampleSDict(StorageIntf *s); ExampleSDict * unmarshalExampleSDict(StorageIntf *s);
SDict<MemberList> * unmarshalMemberLists(StorageIntf *s); SDict<MemberList> * unmarshalMemberLists(StorageIntf *s);
Entry * unmarshalEntry(StorageIntf *s);
Entry * unmarshalEntryTree(StorageIntf *s);
#endif #endif
...@@ -3436,8 +3436,11 @@ void MemberDef::setBitfields(const char *s) ...@@ -3436,8 +3436,11 @@ void MemberDef::setBitfields(const char *s)
void MemberDef::setMaxInitLines(int lines) void MemberDef::setMaxInitLines(int lines)
{ {
makeResident(); if (lines!=-1)
m_impl->userInitLines=lines; {
makeResident();
m_impl->userInitLines=lines;
}
} }
void MemberDef::setExplicitExternal(bool b) void MemberDef::setExplicitExternal(bool b)
......
...@@ -98,7 +98,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, ...@@ -98,7 +98,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
// go to the html output directory (i.e. path) // go to the html output directory (i.e. path)
QDir::setCurrent(outDir); QDir::setCurrent(outDir);
//printf("Going to dir %s\n",QDir::currentDirPath().data()); //printf("Going to dir %s\n",QDir::currentDirPath().data());
QCString mscExe = /*Config_getString("MSC_PATH")+*/ "mscgen"; QCString mscExe = Config_getString("MSC_PATH")+"mscgen"+portable_commandExtension();
QCString mscArgs; QCString mscArgs;
QCString extension; QCString extension;
if (format==MSC_BITMAP) if (format==MSC_BITMAP)
......
...@@ -1692,10 +1692,13 @@ void PerlModGenerator::generatePerlModForClass(ClassDef *cd) ...@@ -1692,10 +1692,13 @@ void PerlModGenerator::generatePerlModForClass(ClassDef *cd)
addTemplateList(cd,m_output); addTemplateList(cd,m_output);
addListOfAllMembers(cd); addListOfAllMembers(cd);
MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict()); if (cd->getMemberGroupSDict())
MemberGroup *mg; {
for (;(mg=mgli.current());++mgli) MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict());
generatePerlModSection(cd,mg->members(),"user_defined",mg->header()); MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
generatePerlModSection(cd,mg->members(),"user_defined",mg->header());
}
generatePerlModSection(cd,cd->getMemberList(MemberList::pubTypes),"public_typedefs"); generatePerlModSection(cd,cd->getMemberList(MemberList::pubTypes),"public_typedefs");
generatePerlModSection(cd,cd->getMemberList(MemberList::pubMethods),"public_methods"); generatePerlModSection(cd,cd->getMemberList(MemberList::pubMethods),"public_methods");
...@@ -1795,10 +1798,13 @@ void PerlModGenerator::generatePerlModForNamespace(NamespaceDef *nd) ...@@ -1795,10 +1798,13 @@ void PerlModGenerator::generatePerlModForNamespace(NamespaceDef *nd)
m_output.closeList(); m_output.closeList();
} }
MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict()); if (nd->getMemberGroupSDict())
MemberGroup *mg; {
for (;(mg=mgli.current());++mgli) MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict());
generatePerlModSection(nd,mg->members(),"user-defined",mg->header()); MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
generatePerlModSection(nd,mg->members(),"user-defined",mg->header());
}
generatePerlModSection(nd,nd->getMemberList(MemberList::decDefineMembers),"defines"); generatePerlModSection(nd,nd->getMemberList(MemberList::decDefineMembers),"defines");
generatePerlModSection(nd,nd->getMemberList(MemberList::decProtoMembers),"prototypes"); generatePerlModSection(nd,nd->getMemberList(MemberList::decProtoMembers),"prototypes");
...@@ -1967,10 +1973,13 @@ void PerlModGenerator::generatePerlModForGroup(GroupDef *gd) ...@@ -1967,10 +1973,13 @@ void PerlModGenerator::generatePerlModForGroup(GroupDef *gd)
m_output.closeList(); m_output.closeList();
} }
MemberGroupSDict::Iterator mgli(*gd->getMemberGroupSDict()); if (gd->getMemberGroupSDict())
MemberGroup *mg; {
for (;(mg=mgli.current());++mgli) MemberGroupSDict::Iterator mgli(*gd->getMemberGroupSDict());
generatePerlModSection(gd,mg->members(),"user-defined",mg->header()); MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
generatePerlModSection(gd,mg->members(),"user-defined",mg->header());
}
generatePerlModSection(gd,gd->getMemberList(MemberList::decDefineMembers),"defines"); generatePerlModSection(gd,gd->getMemberList(MemberList::decDefineMembers),"defines");
generatePerlModSection(gd,gd->getMemberList(MemberList::decProtoMembers),"prototypes"); generatePerlModSection(gd,gd->getMemberList(MemberList::decProtoMembers),"prototypes");
......
...@@ -373,16 +373,16 @@ void * portable_iconv_open(const char* tocode, const char* fromcode) ...@@ -373,16 +373,16 @@ void * portable_iconv_open(const char* tocode, const char* fromcode)
size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft, size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
char** outbuf, size_t *outbytesleft) char** outbuf, size_t *outbytesleft)
{ {
#if (defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION==0x0109)) #if ((defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109)) || defined(_OS_SOLARIS_))
#define CASTNEEDED(x) (x) #define CASTNEEDED(x) (x)
#else #else
#define CASTNEEDED(x) (char **)(x) #define CASTNEEDED(x) (char **)(x)
#endif #endif
return iconv(cd,CASTNEEDED(inbuf),inbytesleft,outbuf,outbytesleft); return iconv((iconv_t)cd,CASTNEEDED(inbuf),inbytesleft,outbuf,outbytesleft);
} }
int portable_iconv_close (void *cd) int portable_iconv_close (void *cd)
{ {
return iconv_close(cd); return iconv_close((iconv_t)cd);
} }
...@@ -1006,7 +1006,8 @@ Define *newDefine() ...@@ -1006,7 +1006,8 @@ Define *newDefine()
void addDefine() void addDefine()
{ {
if (g_skip) return; // do not add this define as it is inside a if (g_skip) return; // do not add this define as it is inside a
// conditional section (@cond command) that is disabled. // conditional section (cond command) that is disabled.
if (!Doxygen::gatherDefines) return;
//printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data()); //printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
//ArgumentList *al = new ArgumentList; //ArgumentList *al = new ArgumentList;
......
...@@ -829,6 +829,11 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -829,6 +829,11 @@ STARTDOCSYMS ^{B}"##"/[^#]
current->name = current->name.stripWhiteSpace(); current->name = current->name.stripWhiteSpace();
newFunction(); newFunction();
} }
{B}":" { // function without arguments
g_specialBlock = TRUE; // expecting a docstring
bodyEntry = current;
BEGIN( FunctionBody );
}
{B}"(" { {B}"(" {
BEGIN( FunctionParams ); BEGIN( FunctionParams );
...@@ -1110,7 +1115,7 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -1110,7 +1115,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
g_stringContext=VariableEnd; g_stringContext=VariableEnd;
BEGIN(TripleString); BEGIN(TripleString);
} }
"(" { // typle "(" { // tuple
current->type = "tuple"; current->type = "tuple";
current->initializer+=*yytext; current->initializer+=*yytext;
g_atomStart='('; g_atomStart='(';
...@@ -1168,6 +1173,12 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -1168,6 +1173,12 @@ STARTDOCSYMS ^{B}"##"/[^#]
BEGIN(VariableEnd); BEGIN(VariableEnd);
} }
} }
"\"" {
g_stringContext=YY_START;
current->initializer+="\"";
g_copyString=&current->initializer;
BEGIN( DoubleQuoteString );
}
{IDENTIFIER} { {IDENTIFIER} {
current->initializer+=yytext; current->initializer+=yytext;
} }
......
...@@ -160,7 +160,7 @@ static int docBlockContext; ...@@ -160,7 +160,7 @@ static int docBlockContext;
static QCString docBlock; static QCString docBlock;
static QCString docBlockName; static QCString docBlockName;
static bool docBlockInBody; static bool docBlockInBody;
static bool docBlockJavaStyle; static bool docBlockAutoBrief;
static char docBlockTerm; static char docBlockTerm;
static QCString idlAttr; static QCString idlAttr;
...@@ -614,6 +614,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -614,6 +614,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x SkipSharp %x SkipSharp
%x SkipRound %x SkipRound
%x SkipSquare %x SkipSquare
%x SkipRemainder
%x TypedefName %x TypedefName
%x TryFunctionBlock %x TryFunctionBlock
%x TryFunctionBlockEnd %x TryFunctionBlockEnd
...@@ -1992,7 +1993,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1992,7 +1993,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = FALSE; docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"); docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
docBlock.resize(0); docBlock.resize(0);
docBlockTerm = ';'; docBlockTerm = ';';
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
...@@ -2010,7 +2012,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2010,7 +2012,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
lineCount(); lineCount();
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = FALSE; docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"); docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
docBlock.resize(0); docBlock.resize(0);
docBlockTerm = ','; docBlockTerm = ',';
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
...@@ -2032,7 +2035,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2032,7 +2035,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = FALSE; docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"); docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
docBlock.resize(0); docBlock.resize(0);
docBlockTerm = 0; docBlockTerm = 0;
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
...@@ -2072,7 +2076,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2072,7 +2076,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
{ {
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = FALSE; docBlockInBody = FALSE;
docBlockJavaStyle = FALSE; docBlockAutoBrief = FALSE;
docBlock.resize(0); docBlock.resize(0);
docBlockTerm = 0; docBlockTerm = 0;
startCommentBlock(TRUE); startCommentBlock(TRUE);
...@@ -2091,7 +2095,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2091,7 +2095,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = FALSE; docBlockInBody = FALSE;
docBlock.resize(0); docBlock.resize(0);
docBlockJavaStyle = yytext[2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"); docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
docBlockTerm = 0; docBlockTerm = 0;
startCommentBlock(FALSE); startCommentBlock(FALSE);
BEGIN(DocBlock); BEGIN(DocBlock);
...@@ -2701,6 +2706,31 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2701,6 +2706,31 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
initBracketCount=0; initBracketCount=0;
BEGIN(ReadInitializer); BEGIN(ReadInitializer);
} }
<FindFields>";" {
if (insideJava) // last enum field in Java class
{
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->type = "@"; // enum marker
current->args = current->args.simplifyWhiteSpace();
current->name = current->name.stripWhiteSpace();
current->section = Entry::VARIABLE_SEC;
current_root->addSubEntry(current);
current = new Entry ;
initEntry();
// TODO: skip until the end of the scope
BEGIN( SkipRemainder );
}
else
{
REJECT;
}
}
<SkipRemainder>\n {
yyLineNr++;
}
<SkipRemainder>[^\n]*
<FindFields>"," { <FindFields>"," {
//printf("adding `%s' `%s' `%s' to enum `%s' (mGrpId=%d)\n", //printf("adding `%s' `%s' `%s' to enum `%s' (mGrpId=%d)\n",
// current->type.data(), current->name.data(), // current->type.data(), current->name.data(),
...@@ -3884,7 +3914,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3884,7 +3914,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
docBlockContext = SkipCurlyEndDoc; docBlockContext = SkipCurlyEndDoc;
docBlockInBody = FALSE; docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"); docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
docBlock.resize(0); docBlock.resize(0);
docBlockTerm = '}'; docBlockTerm = '}';
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
...@@ -3902,7 +3933,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3902,7 +3933,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<SkipCurlyEndDoc>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" { // desc is followed by another one <SkipCurlyEndDoc>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" { // desc is followed by another one
docBlockContext = SkipCurlyEndDoc; docBlockContext = SkipCurlyEndDoc;
docBlockInBody = FALSE; docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"); docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
docBlock.resize(0); docBlock.resize(0);
docBlockTerm = '}'; docBlockTerm = '}';
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
...@@ -4493,8 +4525,21 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4493,8 +4525,21 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly; docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE; docBlockAutoBrief = Config_getBool("QT_AUTOBRIEF");
docBlock.resize(0); docBlock.resize(0);
if (docBlockAutoBrief)
{
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
}
if (!docBlockInBody)
{
current->doc.resize(0);
if (docBlockAutoBrief)
{
current->brief.resize(0);
}
}
startCommentBlock(FALSE); startCommentBlock(FALSE);
BEGIN( DocBlock ); BEGIN( DocBlock );
} }
...@@ -4514,9 +4559,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4514,9 +4559,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->docFile = yyFileName; current->docFile = yyFileName;
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly; docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = Config_getBool("JAVADOC_AUTOBRIEF"); docBlockAutoBrief = Config_getBool("JAVADOC_AUTOBRIEF");
docBlock.resize(0); docBlock.resize(0);
if (docBlockJavaStyle) if (docBlockAutoBrief)
{ {
current->briefLine = yyLineNr; current->briefLine = yyLineNr;
current->briefFile = yyFileName; current->briefFile = yyFileName;
...@@ -4524,7 +4569,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4524,7 +4569,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if (!docBlockInBody) if (!docBlockInBody)
{ {
current->doc.resize(0); current->doc.resize(0);
if (docBlockJavaStyle) if (docBlockAutoBrief)
{ {
current->brief.resize(0); current->brief.resize(0);
} }
...@@ -4551,7 +4596,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4551,7 +4596,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly; docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE; docBlockAutoBrief = FALSE;
docBlock.resize(0); docBlock.resize(0);
startCommentBlock(TRUE); startCommentBlock(TRUE);
BEGIN( DocLine ); BEGIN( DocLine );
...@@ -4575,7 +4620,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4575,7 +4620,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
docBlockContext = YY_START; docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly; docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE; docBlockAutoBrief = FALSE;
docBlock.resize(0); docBlock.resize(0);
startCommentBlock(TRUE); startCommentBlock(TRUE);
BEGIN( DocLine ); BEGIN( DocLine );
...@@ -4932,7 +4977,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -4932,7 +4977,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
yyFileName, // file yyFileName, // file
brief ? current->briefLine : current->docLine, // line of block start brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief, docBlockInBody ? FALSE : brief,
docBlockInBody ? FALSE : docBlockJavaStyle, docBlockInBody ? FALSE : docBlockAutoBrief,
docBlockInBody, docBlockInBody,
protection, protection,
position, position,
......
This diff is collapsed.
...@@ -293,6 +293,7 @@ int guessSection(const char *name) ...@@ -293,6 +293,7 @@ int guessSection(const char *name)
n.right(4)==".hpp" || n.right(4)==".hpp" ||
n.right(4)==".h++" || n.right(4)==".h++" ||
n.right(4)==".idl" || n.right(4)==".idl" ||
n.right(4)==".ddl" ||
n.right(5)==".pidl" n.right(5)==".pidl"
) return Entry::HEADER_SEC; ) return Entry::HEADER_SEC;
return 0; return 0;
...@@ -1476,7 +1477,7 @@ nextChar: ...@@ -1476,7 +1477,7 @@ nextChar:
result+=' '; result+=' ';
result+=s.at(i); result+=s.at(i);
} }
else if (c=='t' && csp==5 && else if (c=='t' && csp==5 && (i<5 || !isId(s.at(i-5))) &&
!(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || s.at(i+1)==')' || !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || s.at(i+1)==')' ||
s.at(i+1)==',' || s.at(i+1)=='\0')) s.at(i+1)==',' || s.at(i+1)=='\0'))
// prevent const ::A from being converted to const::A // prevent const ::A from being converted to const::A
...@@ -1485,12 +1486,12 @@ nextChar: ...@@ -1485,12 +1486,12 @@ nextChar:
if (s.at(i+1)==' ') i++; if (s.at(i+1)==' ') i++;
csp=0; csp=0;
} }
else if (c==':' && csp==6) // replace const::A by const ::A else if (c==':' && csp==6 && (i<6 || !isId(s.at(i-6)))) // replace const::A by const ::A
{ {
result+=" :"; result+=" :";
csp=0; csp=0;
} }
else if (c=='l' && vsp==7 && else if (c=='l' && vsp==7 && (i<7 || !isId(s.at(i-7))) &&
!(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || s.at(i+1)==')' || !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || s.at(i+1)==')' ||
s.at(i+1)==',' || s.at(i+1)=='\0')) s.at(i+1)==',' || s.at(i+1)=='\0'))
// prevent virtual ::A from being converted to virtual::A // prevent virtual ::A from being converted to virtual::A
...@@ -1499,7 +1500,7 @@ nextChar: ...@@ -1499,7 +1500,7 @@ nextChar:
if (s.at(i+1)==' ') i++; if (s.at(i+1)==' ') i++;
vsp=0; vsp=0;
} }
else if (c==':' && vsp==8) // replace virtual::A by virtual ::A else if (c==':' && vsp==8 && (i<8 || !isId(s.at(i-8)))) // replace virtual::A by virtual ::A
{ {
result+=" :"; result+=" :";
vsp=0; vsp=0;
...@@ -5949,6 +5950,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName) ...@@ -5949,6 +5950,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName)
if (!init) // one time initialization if (!init) // one time initialization
{ {
extLookup.insert(".idl", new int(SrcLangExt_IDL)); extLookup.insert(".idl", new int(SrcLangExt_IDL));
extLookup.insert(".ddl", new int(SrcLangExt_IDL));
extLookup.insert(".odl", new int(SrcLangExt_IDL)); extLookup.insert(".odl", new int(SrcLangExt_IDL));
extLookup.insert(".java", new int(SrcLangExt_Java)); extLookup.insert(".java", new int(SrcLangExt_Java));
extLookup.insert(".jsl", new int(SrcLangExt_Java)); extLookup.insert(".jsl", new int(SrcLangExt_Java));
......
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