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
(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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (04 April 2007)
Dimitri van Heesch (dimitri@stack.nl) (06 May 2007)
......@@ -25,7 +25,6 @@
* 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 "doxygen.h"
#include "outputgen.h"
......
......@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=2
#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"`
......
......@@ -84,10 +84,10 @@
For non overloaded members the argument list may be omitted.
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.
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:
<ol>
<li>The pattern points to a documented member that belongs to the same class
......@@ -101,7 +101,7 @@
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
patterns 3 and 6 in this case.
patterns 3 and 7 in this case.
\par Example:
\verbinclude autolink.cpp
......
......@@ -58,6 +58,7 @@ documentation:
\refitem cmddef \\def
\refitem cmddefgroup \\defgroup
\refitem cmddeprecated \\deprecated
\refitem cmddetails \\details
\refitem cmddir \\dir
\refitem cmddontinclude \\dontinclude
\refitem cmddot \\dot
......@@ -863,6 +864,14 @@ is empty, \c TEST, \c DEV, or \c DEV \c TEST.
a deprecated entity. Can be used to describe alternatives,
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>
\section cmdelse \\else
......
......@@ -85,6 +85,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_dot_path DOT_PATH
\refitem cfg_dot_transparent DOT_TRANSPARENT
\refitem cfg_dotfile_dirs DOTFILE_DIRS
\refitem cfg_doxyfile_encoding DOXYFILE_ENCODING
\refitem cfg_enable_preprocessing ENABLE_PREPROCESSING
\refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE
\refitem cfg_enabled_sections ENABLED_SECTIONS
......@@ -178,6 +179,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_predefined PREDEFINED
\refitem cfg_project_name PROJECT_NAME
\refitem cfg_project_number PROJECT_NUMBER
\refitem cfg_qt_autobrief QT_AUTOBRIEF
\refitem cfg_quiet QUIET
\refitem cfg_recursive RECURSIVE
\refitem cfg_referenced_by_relation REFERENCED_BY_RELATION
......@@ -226,9 +228,18 @@ followed by the descriptions of the tags grouped by category.
\endsecreflist
\section config_project Project related options
\anchor cfg_project_name
\anchor cfg_doxyfile_encoding
<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>
\addindex PROJECT_NAME
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.
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
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
<dt>\c BUILTIN_STL_SUPPORT <dd>
......@@ -753,6 +774,8 @@ function's detailed documentation block.
If this tag is empty the current directory is searched.
\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
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.
......
......@@ -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.
\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
the documentation of members (including global functions) in front of
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
than English (the default). The output language is chosen through the
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):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
......
......@@ -48,6 +48,7 @@
2005/02/28 - Slight modification to generate "mailto.txt" auxiliary file.
2005/08/15 - Doxygen's root directory determined primarily from DOXYGEN
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
......@@ -162,11 +163,14 @@ class Transl:
self.langReadable = None # like 'Brasilian Portuguese'
self.note = None # like 'should be cleaned up'
self.prototypeDic = {} # uniPrototype -> prototype
self.translateMeText = 'translate me!'
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.adaptMinClass = None # The newest adapter class that can be used
def __tokenGenerator(self):
"""Generator that reads the file and yields tokens as 4-tuples.
......@@ -265,6 +269,12 @@ class Transl:
sys.stderr.write(msg)
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
tokenStr = ''
tokenLineNo = 0
......@@ -1103,12 +1113,18 @@ class Transl:
self.adaptMinClass = adaptMinClass
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
# the note to clean-up source. This note will be used only when
# the previous code did not set another note (priority).
if not self.note and self.status == '' and self.obsoleteMethods:
self.note = 'Remove the obsolete methods (never used).'
def report(self, fout):
"""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):
......@@ -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
still may be some details listed even for them:
TranslatorBrazilian
TranslatorBrazilian -- The "translate me!" found in a comment.
TranslatorCatalan
TranslatorChinese
TranslatorCroatian
TranslatorChinese -- The "translate me!" found in a comment.
TranslatorCroatian -- The "translate me!" found in a comment.
TranslatorCzech
TranslatorDanish
TranslatorDanish -- The "translate me!" found in a comment.
TranslatorDutch
TranslatorEnglish
TranslatorFrench
TranslatorGerman
TranslatorGreek -- Remove the obsolete methods (never used).
TranslatorItalian
TranslatorGerman -- The "translate me!" found in a comment.
TranslatorGreek -- The "translate me!" found in a comment.
TranslatorItalian -- The "translate me!" found in a comment.
TranslatorJapanese -- Remove the obsolete methods (never used).
TranslatorRussian
TranslatorRussian -- The "translate me!" found in a comment.
TranslatorSpanish
----------------------------------------------------------------------
......@@ -105,6 +105,18 @@ TranslatorArabic (TranslatorAdapter_1_4_6) 1 method to implement
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
----------------------------
......@@ -127,6 +139,18 @@ TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement
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
-----------------
......@@ -243,6 +267,12 @@ TranslatorFinnish (TranslatorEnglish) 96 methods to implement
QCString trNoDescriptionAvailable()
TranslatorGerman (Translator)
----------------
Implements 194 of the required methods.
TranslatorGreek (Translator)
---------------
......@@ -294,6 +324,12 @@ TranslatorIndonesian (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable()
TranslatorItalian (Translator)
-----------------
Implements 194 of the required methods.
TranslatorJapanese (Translator)
------------------
......@@ -485,6 +521,12 @@ TranslatorRomanian (TranslatorAdapter_1_4_1) 2 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorRussian (Translator)
-----------------
Implements 194 of the required methods.
TranslatorSerbian (TranslatorAdapter_1_4_1) 2 methods to implement
-----------------
......
......@@ -2849,6 +2849,7 @@ void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
imd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
imd->setMemberSpecifiers(md->getMemberSpecifiers());
imd->setMemberGroupId(md->getMemberGroupId());
insertMember(imd);
//printf("Adding member=%s %s%s to class %s templSpec %s\n",
// imd->typeString(),imd->name().data(),imd->argsString(),
......
......@@ -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)
{
QCString result;
......@@ -566,7 +566,7 @@ void replaceComment(int offset)
* -# 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).
* -# 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)
{
......
......@@ -2281,15 +2281,15 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in */ const QCString &fileName,
/* in */ int lineNr,
/* in */ bool isBrief,
/* in */ bool isJavaDocStyle,
/* in */ bool isAutoBriefOn,
/* in */ bool isInbody,
/* in,out */ Protection &prot,
/* in,out */ int &position,
/* out */ bool &newEntryNeeded
)
{
//printf("parseCommentBlock() isBrief=%d isJavaDocStyle=%d lineNr=%d\n",
// isBrief,isJavaDocStyle,lineNr);
//printf("parseCommentBlock() isBrief=%d isAutoBriefOn=%d lineNr=%d\n",
// isBrief,isAutoBriefOn,lineNr);
initParser();
guards.setAutoDelete(TRUE);
......@@ -2310,8 +2310,8 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
parseMore = FALSE;
inBody = isInbody;
outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle;
setOutput( isBrief || isAutoBriefOn ? OutputBrief : OutputDoc );
briefEndsAtDot = isAutoBriefOn;
if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
{
......
......@@ -502,7 +502,6 @@ static void readIncludeFile(const char *incName)
<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext;
cmd=cmd.left(cmd.length()-1).stripWhiteSpace();
ConfigOption *option = config->get(cmd);
option->setEncoding(encoding);
if (option==0) // oops not known
{
config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
......@@ -511,6 +510,7 @@ static void readIncludeFile(const char *incName)
}
else // known tag
{
option->setEncoding(encoding);
switch(option->kind())
{
case ConfigOption::O_Info:
......@@ -1574,8 +1574,17 @@ void Config::create()
"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"
"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"
"explicit @brief command for a brief description. \n",
"comments will behave just like regular Qt-style comments \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
);
cb = addBool(
......@@ -2821,7 +2830,7 @@ void Config::create()
cb->addDependency("HAVE_DOT");
cb = addBool(
"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"
"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"
......@@ -2831,7 +2840,7 @@ void Config::create()
cb->addDependency("HAVE_DOT");
cb = addBool(
"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"
"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"
......
......@@ -1422,7 +1422,7 @@ static void readTextFileByName(const QString &file,QString &text)
FileDef *fd;
if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig)))
{
text = fileToString(fd->absFilePath(),FALSE);
text = fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES"));
}
else if (ambig)
{
......@@ -2092,6 +2092,8 @@ void DocRef::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unsupported symbol %s found",
g_token->name.data());
break;
case TK_HTMLTAG:
break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unexpected token %s",
tokToString(tok));
......@@ -2111,7 +2113,7 @@ void DocRef::parse()
}
handlePendingStyleCommands(this,m_children);
DBG(("DocRef::parse() end\n"));
DocNode *n=g_nodeStack.pop();
ASSERT(n==this);
}
......@@ -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;
g_nodeStack.push(this);
......@@ -2187,6 +2189,13 @@ QString DocLink::parse(bool isJavaLink)
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Unsupported symbol %s found",
g_token->name.data());
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_WORD:
if (isJavaLink) // special case to detect closing }
......@@ -4847,11 +4856,31 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
// can we expect from Microsoft...)
{
QString cref;
//printf("XML_SEE: empty tag=%d\n",g_token->emptyTag);
if (findAttribute(tagHtmlAttribs,"cref",&cref))
{
DocRef *ref = new DocRef(this,cref);
m_children.append(ref);
ref->parse();
if (g_token->emptyTag) // <see cref="..."/> style
{
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
{
......
......@@ -639,7 +639,7 @@ class DocLink : public CompAccept<DocLink>, public DocNode
{
public:
DocLink(DocNode *parent,const QString &target);
QString parse(bool);
QString parse(bool,bool isXmlLink=FALSE);
Kind kind() const { return Kind_Link; }
QString file() const { return m_file; }
QString relPath() const { return m_relPath; }
......
......@@ -694,6 +694,24 @@ static QCString convertLabel(const QCString &l)
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)
{
if (ml)
......@@ -812,7 +830,7 @@ void DotNode::writeBox(QTextStream &t,
}
if (!m_tooltip.isEmpty())
{
t << ",tooltip=\"" << m_tooltip << "\"";
t << ",tooltip=\"" << escapeTooltip(m_tooltip) << "\"";
}
}
t << "];" << endl;
......
......@@ -132,6 +132,7 @@ ObjCache *Doxygen::symbolCache = 0;
Store *Doxygen::symbolStorage;
QCString Doxygen::objDBFileName;
QCString Doxygen::entryDBFileName;
bool Doxygen::gatherDefines = TRUE;
// locally accessible globals
static QDict<EntryNav> classEntries(1009);
......@@ -4687,9 +4688,10 @@ static void addMemberDocs(EntryNav *rootNav,
{
//printf("setInitializer\n");
md->setInitializer(root->initializer);
md->setMaxInitLines(root->initLines);
}
md->setMaxInitLines(root->initLines);
if (rfd)
{
......@@ -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,
// 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
int size=0;
......@@ -8349,7 +8351,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav)
// The directory is read iff the recusiveFlag is set.
// The contents of all files is append to the input string
static int readDir(QFileInfo *fi,
int readDir(QFileInfo *fi,
FileNameList *fnList,
FileNameDict *fnDict,
StringDict *exclDict,
......@@ -8441,7 +8443,7 @@ static int readDir(QFileInfo *fi,
// 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.
static int readFileOrDirectory(const char *s,
int readFileOrDirectory(const char *s,
FileNameList *fnList,
FileNameDict *fnDict,
StringDict *exclDict,
......@@ -8450,8 +8452,8 @@ static int readFileOrDirectory(const char *s,
StringList *resultList,
StringDict *resultDict,
bool recursive,
bool errorIfNotExist=TRUE,
QDict<void> *killDict = 0
bool errorIfNotExist,
QDict<void> *killDict
)
{
//printf("killDict=%p count=%d\n",killDict,killDict->count());
......@@ -8526,7 +8528,7 @@ static int readFileOrDirectory(const char *s,
//----------------------------------------------------------------------------
static void readFormulaRepository()
void readFormulaRepository()
{
QFile f(Config_getString("HTML_OUTPUT")+"/formula.repository");
if (f.open(IO_ReadOnly)) // open repository
......@@ -8641,7 +8643,7 @@ static void escapeAliases()
//----------------------------------------------------------------------------
static void readAliases()
void readAliases()
{
// add aliases to a dictionary
Doxygen::aliasDict.setAutoDelete(TRUE);
......
......@@ -45,6 +45,8 @@ class DirDef;
class ParserManager;
class ObjCache;
class Store;
class QFileInfo;
class BufStr;
typedef QList<QCString> StringList;
typedef QDict<FileDef> FileDict;
......@@ -123,6 +125,7 @@ class Doxygen
static Store *symbolStorage;
static QCString objDBFileName;
static QCString entryDBFileName;
static bool gatherDefines;
};
void initDoxygen();
......@@ -130,6 +133,33 @@ void readConfiguration(int argc, char **argv);
void checkConfiguration();
void parseInput();
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
......
......@@ -21,12 +21,12 @@ SOURCES = main.cpp
unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5
win32:INCLUDEPATH += .
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-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: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
INCLUDEPATH += ../qtools ../libpng ../libmd5 .
#win32-g++:INCLUDEPATH -= ../libpng
......
This diff is collapsed.
......@@ -28,6 +28,7 @@ class QFile;
class EntryNav;
class FileDef;
class FileStorage;
class StorageIntf;
enum Protection { Public, Protected, Private, Package } ;
enum Specifier { Normal, Virtual, Pure } ;
......@@ -302,6 +303,8 @@ class Entry
* at construction time.
*/
void reset();
void marshall(StorageIntf *);
void unmarshall(StorageIntf *);
public:
......
......@@ -166,7 +166,7 @@ bool setTranslator(const char *langName)
#ifdef LANG_CZ
else if (L_EQUAL("czech"))
{
theTranslator=new TranslatorDecoder(new TranslatorCzech);
theTranslator=new TranslatorCzech;
}
#endif
#ifdef LANG_FR
......
......@@ -10,6 +10,7 @@
#include "groupdef.h"
#include "example.h"
#define HEADER ('D'<<24)+('O'<<16)+('X'<<8)+'!'
void marshalInt(StorageIntf *s,int v)
{
......@@ -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)
......@@ -664,4 +731,75 @@ SDict<MemberList> *unmarshalMemberLists(StorageIntf *s)
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;
struct BriefInfo;
class MemberList;
class ExampleSDict;
class Entry;
#define NULL_LIST 0xffffffff
......@@ -33,6 +34,49 @@ class FileStorage : public QFile, public StorageIntf
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 --------------------
void marshalInt(StorageIntf *s,int v);
......@@ -56,6 +100,8 @@ void marshalGroupList(StorageIntf *s,GroupList *groupList);
void marshalMemberList(StorageIntf *s,MemberList *ml);
void marshalExampleSDict(StorageIntf *s,ExampleSDict *ed);
void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls);
void marshalEntry(StorageIntf *s,Entry *e);
void marshalEntryTree(StorageIntf *s,Entry *e);
//----- unmarshaling function: byte stream -> datatype ------------------
......@@ -80,5 +126,7 @@ GroupList * unmarshalGroupList(StorageIntf *s);
MemberList * unmarshalMemberList(StorageIntf *s);
ExampleSDict * unmarshalExampleSDict(StorageIntf *s);
SDict<MemberList> * unmarshalMemberLists(StorageIntf *s);
Entry * unmarshalEntry(StorageIntf *s);
Entry * unmarshalEntryTree(StorageIntf *s);
#endif
......@@ -3436,8 +3436,11 @@ void MemberDef::setBitfields(const char *s)
void MemberDef::setMaxInitLines(int lines)
{
if (lines!=-1)
{
makeResident();
m_impl->userInitLines=lines;
}
}
void MemberDef::setExplicitExternal(bool b)
......
......@@ -98,7 +98,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
// go to the html output directory (i.e. path)
QDir::setCurrent(outDir);
//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 extension;
if (format==MSC_BITMAP)
......
......@@ -1692,10 +1692,13 @@ void PerlModGenerator::generatePerlModForClass(ClassDef *cd)
addTemplateList(cd,m_output);
addListOfAllMembers(cd);
if (cd->getMemberGroupSDict())
{
MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict());
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::pubMethods),"public_methods");
......@@ -1795,10 +1798,13 @@ void PerlModGenerator::generatePerlModForNamespace(NamespaceDef *nd)
m_output.closeList();
}
if (nd->getMemberGroupSDict())
{
MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict());
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::decProtoMembers),"prototypes");
......@@ -1967,10 +1973,13 @@ void PerlModGenerator::generatePerlModForGroup(GroupDef *gd)
m_output.closeList();
}
if (gd->getMemberGroupSDict())
{
MemberGroupSDict::Iterator mgli(*gd->getMemberGroupSDict());
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::decProtoMembers),"prototypes");
......
......@@ -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,
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)
#else
#define CASTNEEDED(x) (char **)(x)
#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)
{
return iconv_close(cd);
return iconv_close((iconv_t)cd);
}
......@@ -1006,7 +1006,8 @@ Define *newDefine()
void addDefine()
{
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());
//ArgumentList *al = new ArgumentList;
......
......@@ -829,6 +829,11 @@ STARTDOCSYMS ^{B}"##"/[^#]
current->name = current->name.stripWhiteSpace();
newFunction();
}
{B}":" { // function without arguments
g_specialBlock = TRUE; // expecting a docstring
bodyEntry = current;
BEGIN( FunctionBody );
}
{B}"(" {
BEGIN( FunctionParams );
......@@ -1110,7 +1115,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
g_stringContext=VariableEnd;
BEGIN(TripleString);
}
"(" { // typle
"(" { // tuple
current->type = "tuple";
current->initializer+=*yytext;
g_atomStart='(';
......@@ -1168,6 +1173,12 @@ STARTDOCSYMS ^{B}"##"/[^#]
BEGIN(VariableEnd);
}
}
"\"" {
g_stringContext=YY_START;
current->initializer+="\"";
g_copyString=&current->initializer;
BEGIN( DoubleQuoteString );
}
{IDENTIFIER} {
current->initializer+=yytext;
}
......
......@@ -160,7 +160,7 @@ static int docBlockContext;
static QCString docBlock;
static QCString docBlockName;
static bool docBlockInBody;
static bool docBlockJavaStyle;
static bool docBlockAutoBrief;
static char docBlockTerm;
static QCString idlAttr;
......@@ -614,6 +614,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x SkipSharp
%x SkipRound
%x SkipSquare
%x SkipRemainder
%x TypedefName
%x TryFunctionBlock
%x TryFunctionBlockEnd
......@@ -1992,7 +1993,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
docBlockContext = YY_START;
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);
docBlockTerm = ';';
if (yytext[yyleng-3]=='/')
......@@ -2010,7 +2012,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
lineCount();
docBlockContext = YY_START;
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);
docBlockTerm = ',';
if (yytext[yyleng-3]=='/')
......@@ -2032,7 +2035,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
docBlockContext = YY_START;
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);
docBlockTerm = 0;
if (yytext[yyleng-3]=='/')
......@@ -2072,7 +2076,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
{
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockJavaStyle = FALSE;
docBlockAutoBrief = FALSE;
docBlock.resize(0);
docBlockTerm = 0;
startCommentBlock(TRUE);
......@@ -2091,7 +2095,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
docBlockContext = YY_START;
docBlockInBody = FALSE;
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;
startCommentBlock(FALSE);
BEGIN(DocBlock);
......@@ -2701,6 +2706,31 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
initBracketCount=0;
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>"," {
//printf("adding `%s' `%s' `%s' to enum `%s' (mGrpId=%d)\n",
// current->type.data(), current->name.data(),
......@@ -3884,7 +3914,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
docBlockContext = SkipCurlyEndDoc;
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);
docBlockTerm = '}';
if (yytext[yyleng-3]=='/')
......@@ -3902,7 +3933,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<SkipCurlyEndDoc>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" { // desc is followed by another one
docBlockContext = SkipCurlyEndDoc;
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);
docBlockTerm = '}';
if (yytext[yyleng-3]=='/')
......@@ -4493,8 +4525,21 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlockAutoBrief = Config_getBool("QT_AUTOBRIEF");
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);
BEGIN( DocBlock );
}
......@@ -4514,9 +4559,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->docFile = yyFileName;
docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = Config_getBool("JAVADOC_AUTOBRIEF");
docBlockAutoBrief = Config_getBool("JAVADOC_AUTOBRIEF");
docBlock.resize(0);
if (docBlockJavaStyle)
if (docBlockAutoBrief)
{
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
......@@ -4524,7 +4569,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if (!docBlockInBody)
{
current->doc.resize(0);
if (docBlockJavaStyle)
if (docBlockAutoBrief)
{
current->brief.resize(0);
}
......@@ -4551,7 +4596,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlockAutoBrief = FALSE;
docBlock.resize(0);
startCommentBlock(TRUE);
BEGIN( DocLine );
......@@ -4575,7 +4620,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlockAutoBrief = FALSE;
docBlock.resize(0);
startCommentBlock(TRUE);
BEGIN( DocLine );
......@@ -4932,7 +4977,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
yyFileName, // file
brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief,
docBlockInBody ? FALSE : docBlockJavaStyle,
docBlockInBody ? FALSE : docBlockAutoBrief,
docBlockInBody,
protection,
position,
......
This diff is collapsed.
......@@ -293,6 +293,7 @@ int guessSection(const char *name)
n.right(4)==".hpp" ||
n.right(4)==".h++" ||
n.right(4)==".idl" ||
n.right(4)==".ddl" ||
n.right(5)==".pidl"
) return Entry::HEADER_SEC;
return 0;
......@@ -1476,7 +1477,7 @@ nextChar:
result+=' ';
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)==')' ||
s.at(i+1)==',' || s.at(i+1)=='\0'))
// prevent const ::A from being converted to const::A
......@@ -1485,12 +1486,12 @@ nextChar:
if (s.at(i+1)==' ') i++;
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+=" :";
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)==')' ||
s.at(i+1)==',' || s.at(i+1)=='\0'))
// prevent virtual ::A from being converted to virtual::A
......@@ -1499,7 +1500,7 @@ nextChar:
if (s.at(i+1)==' ') i++;
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+=" :";
vsp=0;
......@@ -5949,6 +5950,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName)
if (!init) // one time initialization
{
extLookup.insert(".idl", new int(SrcLangExt_IDL));
extLookup.insert(".ddl", new int(SrcLangExt_IDL));
extLookup.insert(".odl", new int(SrcLangExt_IDL));
extLookup.insert(".java", 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