summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--addon/doxysearch/doxysearch.cpp6
-rw-r--r--addon/doxywizard/doxywizard.cpp6
-rw-r--r--addon/doxywizard/expert.cpp2
-rw-r--r--qtools/qcstring.cpp12
-rw-r--r--qtools/qfeatures.h2
-rw-r--r--qtools/qfile_unix.cpp1
-rw-r--r--src/classdef.cpp3
-rw-r--r--src/cmdmapper.cpp5
-rw-r--r--src/cmdmapper.h5
-rw-r--r--src/commentcnv.l2
-rw-r--r--src/commentscan.l4
-rw-r--r--src/condparser.h19
-rw-r--r--src/config.xml33
-rw-r--r--src/context.cpp6
-rw-r--r--src/definition.cpp87
-rw-r--r--src/diagram.cpp2
-rw-r--r--src/dirdef.cpp2
-rw-r--r--src/docbookgen.cpp253
-rw-r--r--src/docbookvisitor.cpp2
-rw-r--r--src/docparser.cpp112
-rw-r--r--src/docparser.h2
-rw-r--r--src/doctokenizer.h1
-rw-r--r--src/doctokenizer.l43
-rw-r--r--src/doxygen.cpp39
-rw-r--r--src/entry.cpp2
-rw-r--r--src/filedef.cpp12
-rw-r--r--src/filename.cpp44
-rw-r--r--src/fortrancode.l70
-rw-r--r--src/fortranscanner.l24
-rw-r--r--src/groupdef.cpp13
-rw-r--r--src/htmlentity.cpp2
-rw-r--r--src/htmlgen.cpp28
-rw-r--r--src/latexgen.cpp26
-rw-r--r--src/latexgen.h2
-rw-r--r--src/layout.cpp2
-rw-r--r--src/libdoxygen.t.in2
-rw-r--r--src/lodepng.cpp10
-rw-r--r--src/markdown.cpp2
-rw-r--r--src/memberdef.cpp6
-rw-r--r--src/membergroup.cpp2
-rw-r--r--src/memberlist.cpp21
-rw-r--r--src/message.cpp9
-rw-r--r--src/namespacedef.cpp5
-rw-r--r--src/pre.l4
-rw-r--r--src/pyscanner.l14
-rw-r--r--src/reflist.cpp8
-rw-r--r--src/reflist.h5
-rwxr-xr-xsrc/res2cc_cmd.py18
-rw-r--r--src/rtfgen.cpp13
-rw-r--r--src/rtfgen.h3
-rw-r--r--src/rtfstyle.h2
-rw-r--r--src/searchindex.cpp20
-rw-r--r--src/searchindex.h1
-rw-r--r--src/store.cpp4
-rw-r--r--src/tagreader.cpp14
-rw-r--r--src/template.cpp70
-rw-r--r--src/translator_hr.h4
-rw-r--r--src/util.cpp36
-rw-r--r--src/util.h6
-rw-r--r--src/vhdldocgen.cpp2
-rw-r--r--src/xmldocvisitor.cpp41
-rw-r--r--src/xmlgen.cpp44
-rw-r--r--templates/xml/compound.xsd21
-rw-r--r--testing/008/008__brief_8c.xml2
-rw-r--r--testing/009/class_bug.xml2
-rw-r--r--testing/009/class_deprecated.xml2
-rw-r--r--testing/009/class_reminder.xml2
-rw-r--r--testing/009/class_test.xml2
-rw-r--r--testing/009/class_todo.xml2
-rw-r--r--testing/011/category_integer_07_arithmetic_08.xml2
-rw-r--r--testing/011/interface_integer.xml2
-rw-r--r--testing/013/class_t1.xml2
-rw-r--r--testing/013/class_t2.xml2
-rw-r--r--testing/013/class_t3.xml2
-rw-r--r--testing/013/class_t4.xml2
-rw-r--r--testing/015/015__cond_8c.xml2
-rw-r--r--testing/016/016__copydoc_8c.xml2
-rw-r--r--testing/018/018__def_8c.xml2
-rw-r--r--testing/025/class_test.xml2
-rw-r--r--testing/026/class_test.xml2
-rw-r--r--testing/027/struct_car.xml2
-rw-r--r--testing/027/struct_object.xml2
-rw-r--r--testing/027/struct_truck.xml2
-rw-r--r--testing/027/struct_vehicle.xml2
-rw-r--r--testing/029/029__hideinit_8c.xml2
-rw-r--r--testing/035/035__invariant_8c.xml2
-rw-r--r--testing/036/036__link_8c.xml2
-rw-r--r--testing/037/class_receiver.xml2
-rw-r--r--testing/037/class_sender.xml2
-rw-r--r--testing/039/class_test.xml2
-rw-r--r--testing/040/namespace_n_s.xml2
-rw-r--r--testing/041/class_test.xml2
-rw-r--r--testing/042/namespaceorg_1_1doxygen_1_1_test.xml2
-rw-r--r--testing/044/struct_s.xml2
-rw-r--r--testing/046/046__related_8cpp.xml2
-rw-r--r--testing/046/class_test.xml2
-rw-r--r--testing/047/047__return_8cpp.xml2
-rw-r--r--testing/048/048__showinit_8c.xml2
-rw-r--r--testing/054/054__parblock_8cpp.xml2
-rw-r--r--testing/057/057__caller__graphs_8tcl.xml2
-rw-r--r--testing/057/__057__caller__graphs_8tcl.xml2
-rw-r--r--testing/057/namespace1.xml2
-rw-r--r--testing/057/namespace1_1_11.xml2
-rw-r--r--testing/057/namespace1_1_11_1_11.xml2
-rw-r--r--testing/057/namespace2.xml2
-rw-r--r--testing/057/namespace2_1_12.xml2
-rw-r--r--testing/057/namespace2_1_12_1_12.xml2
-rw-r--r--testing/057/namespace2_1_12_1_12_1_12.xml2
-rw-r--r--testing/057/namespace2_1_12_1_12_1_12_1_12.xml2
-rw-r--r--testing/057/namespacebar.xml2
-rw-r--r--testing/057/namespacefoo.xml2
-rw-r--r--testing/058/058__bracket__recursion_8tcl.xml2
-rw-r--r--testing/059/059__command__catch_8tcl.xml2
-rw-r--r--testing/060/060__command__switch_8tcl.xml2
-rw-r--r--testing/061/class_test.xml2
-rw-r--r--testing/062/namespacen1.xml2
-rw-r--r--testing/062/namespacen2.xml2
-rw-r--r--testing/062/namespacen3.xml2
-rw-r--r--testing/063/namespaceoo.xml2
-rw-r--r--testing/063/namespaceoo_1_1_helpers.xml2
-rw-r--r--testing/063/namespaceoo_1_1define.xml2
-rw-r--r--testing/064/struct_foo.xml112
-rw-r--r--testing/064_castoperator.cpp25
-rw-r--r--testing/065/indexpage.xml10
-rw-r--r--testing/065_tilde.dox12
-rw-r--r--vhdlparser/ErrorHandler.h2
127 files changed, 1081 insertions, 459 deletions
diff --git a/README.md b/README.md
index b11a775..3360bf9 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,8 @@ Developers
* Quick install see (./INSTALL)
* else http://www.doxygen.org/manual/install.html
+* Project stats: https://www.openhub.net/p/doxygen
+
Issues, bugs, requests, ideas
----------------------------------
Use the bug tracker to report bugs:
diff --git a/addon/doxysearch/doxysearch.cpp b/addon/doxysearch/doxysearch.cpp
index d885502..f6946ef 100644
--- a/addon/doxysearch/doxysearch.cpp
+++ b/addon/doxysearch/doxysearch.cpp
@@ -116,7 +116,7 @@ static std::string uriDecode(const std::string & sSrc)
}
/** return list of strings that result when splitting \a s using
- * delimeter \a delim
+ * delimiter \a delim
*/
static std::vector<std::string> split(const std::string &s, char delim)
{
@@ -137,7 +137,7 @@ T fromString(const std::string& s)
return t;
}
-/** Class that holds the startin position of a word */
+/** Class that holds the starting position of a word */
struct WordPosition
{
WordPosition(int s,int i) : start(s), index(i) {}
@@ -196,7 +196,7 @@ static bool insideRange(const std::vector<Range> &ranges,int start,int len)
}
/** Returns a list of text \a fragments from \a s containing one or
- * more \a words. The list is sorted occording to the
+ * more \a words. The list is sorted according to the
* number of occurrences of words within the fragment.
*/
static void highlighter(const std::string &s,
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index 26df065..d0728ae 100644
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -10,7 +10,7 @@
#define MAX_RECENT_FILES 10
-const int messageTimeout = 5000; //!< status bar message timeout in millisec.
+const int messageTimeout = 5000; //!< status bar message timeout in milliseconds.
MainWindow &MainWindow::instance()
{
@@ -78,7 +78,7 @@ MainWindow::MainWindow()
runLayout->addWidget(showSettings);
runLayout->addWidget(m_saveLog);
- // output produced by doxygen
+ // output produced by Doxygen
runTabLayout->addLayout(runLayout);
runTabLayout->addWidget(new QLabel(tr("Output produced by doxygen")));
QGridLayout *grid = new QGridLayout;
@@ -427,7 +427,7 @@ void MainWindow::runDoxygen()
qDebug() << tr("Doxygen path: ") << doxygenPath;
if ( !QFile(doxygenPath + QString::fromAscii("doxygen")).exists() )
{
- // No doygen binary in the resources, if there is a system doxygen binary, use that instead
+ // No Doxygen binary in the resources, if there is a system Doxygen binary, use that instead
if ( QFile(QString::fromAscii("/usr/local/bin/doxygen")).exists() )
{
doxygenPath = QString::fromAscii("/usr/local/bin/");
diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp
index 1cc5d15..3a03c69 100644
--- a/addon/doxywizard/expert.cpp
+++ b/addon/doxywizard/expert.cpp
@@ -452,7 +452,7 @@ static QString getDocsForNode(const QDomElement &child)
// LaTeX name as formula -> LaTeX
regexp.setPattern(SA("\\\\f\\$\\\\mbox\\{\\\\LaTeX\\}\\\\f\\$"));
docs.replace(regexp,SA("LaTeX"));
- // Other forula's (now just 2) so explicitely mentioned.
+ // Other formula's (now just 2) so explicitly mentioned.
regexp.setPattern(SA("\\\\f\\$2\\^\\{\\(16\\+\\\\mbox\\{LOOKUP\\\\_CACHE\\\\_SIZE\\}\\)\\}\\\\f\\$"));
docs.replace(regexp,SA("2^(16+LOOKUP_CACHE_SIZE)"));
regexp.setPattern(SA("\\\\f\\$2\\^\\{16\\} = 65536\\\\f\\$"));
diff --git a/qtools/qcstring.cpp b/qtools/qcstring.cpp
index 2f622df..49bf842 100644
--- a/qtools/qcstring.cpp
+++ b/qtools/qcstring.cpp
@@ -29,9 +29,11 @@ QCString &QCString::sprintf( const char *format, ... )
va_list ap;
va_start( ap, format );
const int minlen=256;
- if (length()<minlen) resize(minlen);
- vsnprintf( data(), minlen, format, ap);
- resize(qstrlen(data())+1);
+ int l = length();
+ if (l<minlen) { resize(minlen); l=minlen; }
+ int n=vsnprintf( data(), l, format, ap);
+ if (n<0) n=l;
+ resize(n+1);
va_end( ap );
return *this;
}
@@ -245,9 +247,9 @@ QCString QCString::right( uint len ) const
QCString QCString::mid( uint index, uint len) const
{
- int slen = length();
+ uint slen = (uint)length();
if (len==0xffffffff) len = slen-index;
- if (isEmpty() || (int)index>=slen || len==0)
+ if (isEmpty() || index>=slen || len==0)
{
return QCString();
}
diff --git a/qtools/qfeatures.h b/qtools/qfeatures.h
index 84fa715..d6c2882 100644
--- a/qtools/qfeatures.h
+++ b/qtools/qfeatures.h
@@ -637,7 +637,7 @@
# define QT_NO_VBUTTONGROUP
#endif
/*!
- Horizonal box layout widgets
+ Horizontal box layout widgets
*/
#ifdef QT_NO_FRAME
# define QT_NO_HBOX
diff --git a/qtools/qfile_unix.cpp b/qtools/qfile_unix.cpp
index 0422fb4..dd41c4e 100644
--- a/qtools/qfile_unix.cpp
+++ b/qtools/qfile_unix.cpp
@@ -550,6 +550,7 @@ int QFile::writeBlock( const char *p, uint len )
return -1;
}
#endif
+ if (p==0) return 0;
int nwritten; // number of bytes written
if ( isRaw() ) // raw file
nwritten = (int)WRITE( fd, p, len );
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 271634a..e6b9064 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -3879,7 +3879,8 @@ void ClassDef::addListReferences()
: theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),
displayName(),
- 0
+ 0,
+ this
);
}
if (m_impl->memberGroupSDict)
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index 3782ff3..eeb7f78 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -140,6 +140,7 @@ CommandMap cmdMap[] =
{ "diafile", CMD_DIAFILE },
{ "--", CMD_NDASH },
{ "---", CMD_MDASH },
+ { "_setscope", CMD_SETSCOPE },
{ 0, 0 },
};
@@ -226,10 +227,10 @@ int Mapper::map(const char *n)
return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
}
-QString Mapper::map(const int n)
+QString Mapper::find(const int n)
{
QDictIterator<int> mapIterator(m_map);
- for (int *curVal = mapIterator.toFirst();curVal = mapIterator.current();++mapIterator)
+ for (int *curVal = mapIterator.toFirst();(curVal = mapIterator.current());++mapIterator)
{
if (*curVal == n || (*curVal == (n | SIMPLESECT_BIT))) return mapIterator.currentKey();
}
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index f741290..fd33b10 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -129,7 +129,8 @@ enum CommandType
CMD_NDASH = 99,
CMD_MDASH = 100,
CMD_STARTUML = 101,
- CMD_ENDUML = 102
+ CMD_ENDUML = 102,
+ CMD_SETSCOPE = 103
};
enum HtmlTagType
@@ -201,7 +202,7 @@ class Mapper
{
public:
int map(const char *n);
- QString map(const int n);
+ QString find(const int n);
Mapper(const CommandMap *cm,bool caseSensitive);
private:
QDict<int> m_map;
diff --git a/src/commentcnv.l b/src/commentcnv.l
index 352985f..64e18be 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -1011,7 +1011,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
warn(g_fileName,ctx->lineNr,"Conditional section%sdoes not have "
"a corresponding \\endcond command within this file.",sectionInfo.data());
}
- if (g_nestingCount>0 || (YY_START==CComment && g_lang!=SrcLangExt_Markdown))
+ if (g_nestingCount>0 && g_lang!=SrcLangExt_Markdown)
{
QCString tmp= "(probable line reference: ";
bool first = TRUE;
diff --git a/src/commentscan.l b/src/commentscan.l
index 3bfd563..702a616 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -1120,7 +1120,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>{B}*("\\\\"|"@@")"f"[$\[{] { // escaped formula command
addOutput(yytext);
}
-<Comment>{B}*{CMD}"~"[a-z_A-Z]* { // language switch command
+<Comment>{B}*{CMD}"~"[a-z_A-Z-]* { // language switch command
QCString langId = QString(yytext).stripWhiteSpace().data()+2;
if (!langId.isEmpty() &&
qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
@@ -2160,7 +2160,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
/* ----- handle language specific sections ------- */
-<SkipLang>[\\@]"~"[a-zA-Z]* { /* language switch */
+<SkipLang>[\\@]"~"[a-zA-Z-]* { /* language switch */
QCString langId = &yytext[2];
if (langId.isEmpty() ||
qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
diff --git a/src/condparser.h b/src/condparser.h
index 0310f36..7c65411 100644
--- a/src/condparser.h
+++ b/src/condparser.h
@@ -28,24 +28,25 @@ class CondParser
{
// public functions
public:
+ CondParser() : m_e(0), m_tokenType(NOTHING) {}
bool parse(const char *fileName,int lineNr,const char *expr);
// enumerations
private:
- enum TOKENTYPE
+ enum TOKENTYPE
{
- NOTHING = -1,
- DELIMITER,
- VARIABLE,
+ NOTHING = -1,
+ DELIMITER,
+ VARIABLE,
UNKNOWN
};
- enum OPERATOR_ID
+ enum OPERATOR_ID
{
- UNKNOWN_OP = -1,
- AND = 1,
- OR,
+ UNKNOWN_OP = -1,
+ AND = 1,
+ OR,
NOT
- };
+ };
// data
private:
diff --git a/src/config.xml b/src/config.xml
index d46b8ef..994190d 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -1797,13 +1797,13 @@ doxygen -w html new_header.html new_footer.html new_stylesheet.css YourConfigFil
since it does not replace the standard style sheet and is therefore more
robust against future updates. Doxygen will copy the style sheet files to
the output directory.
- \note The order of the extra stylesheet files is of importance (e.g. the last
- stylesheet in the list overrules the setting of the previous ones in the list).
+ \note The order of the extra style sheet files is of importance (e.g. the last
+ style sheet in the list overrules the setting of the previous ones in the list).
]]>
</docs>
<docs doxywizard='0' doxyfile='0'>
<![CDATA[
- Here is an example stylesheet that gives the contents area a fixed width:
+ Here is an example style sheet that gives the contents area a fixed width:
\verbatim
body {
background-color: #CCC;
@@ -1858,7 +1858,7 @@ hr.footer {
<docs>
<![CDATA[
The \c HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
- Doxygen will adjust the colors in the stylesheet and background images
+ Doxygen will adjust the colors in the style sheet and background images
according to this color. Hue is specified as an angle on a colorwheel,
see http://en.wikipedia.org/wiki/Hue for more information.
For instance the value 0 represents red, 60 is yellow, 120 is green,
@@ -2173,7 +2173,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
Windows users are probably better off using the HTML help feature.
- Via custom stylesheets (see \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET")
+ Via custom style sheets (see \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET")
one can further \ref doxygen_finetune "fine-tune" the look of the index.
As an example, the default style sheet generated by doxygen has an
example that shows how to put an image at the root of the tree instead of
@@ -2537,6 +2537,19 @@ EXTRA_PACKAGES=times
]]>
</docs>
</option>
+ <option type='list' id='LATEX_EXTRA_STYLESHEET' format='file' defval='' depends='GENERATE_LATEX'>
+ <docs>
+<![CDATA[
+ The \c LATEX_EXTRA_STYLESHEET tag can be used to specify additional
+ user-defined \f$\mbox{\LaTeX}\f$ style sheets that are included after the standard
+ style sheets created by doxygen. Using this option one can overrule
+ certain style aspects. Doxygen will copy the style sheet files to
+ the output directory.
+ \note The order of the extra style sheet files is of importance (e.g. the last
+ style sheet in the list overrules the setting of the previous ones in the list).
+]]>
+ </docs>
+ </option>
<option type='list' id='LATEX_EXTRA_FILES' format='file' depends='GENERATE_LATEX'>
<docs>
<![CDATA[
@@ -2673,6 +2686,16 @@ EXTRA_PACKAGES=times
]]>
</docs>
</option>
+ <option type='bool' id='RTF_SOURCE_CODE' defval='0' depends='GENERATE_RTF'>
+ <docs>
+<![CDATA[
+ If the \c RTF_SOURCE_CODE tag is set to \c YES then doxygen will include
+ source code with syntax highlighting in the RTF output.
+ <br>Note that which sources are shown also depends on other settings
+ such as \ref cfg_source_browser "SOURCE_BROWSER".
+]]>
+ </docs>
+ </option>
</group>
<group name='Man' docs='Configuration options related to the man page output'>
<option type='bool' id='GENERATE_MAN' defval='0'>
diff --git a/src/context.cpp b/src/context.cpp
index 4b174b0..ec68e5e 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -5760,7 +5760,8 @@ class ClassTreeContext::Private : public PropertyMapper
SharedPtr<NestingContext> m_classTree;
struct Cachable
{
- Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+ Cachable() : maxDepth(0), maxDepthComputed(FALSE),
+ preferredDepth(0), preferredDepthComputed(FALSE) {}
int maxDepth;
bool maxDepthComputed;
int preferredDepth;
@@ -6168,7 +6169,8 @@ class FileTreeContext::Private : public PropertyMapper
SharedPtr<NestingContext> m_dirFileTree;
struct Cachable
{
- Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+ Cachable() : maxDepth(0), maxDepthComputed(FALSE),
+ preferredDepth(0), preferredDepthComputed(FALSE) {}
int maxDepth;
bool maxDepthComputed;
int preferredDepth;
diff --git a/src/definition.cpp b/src/definition.cpp
index 4491bc4..0861b8c 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -58,10 +58,10 @@ class DefinitionImpl
SectionDict *sectionDict; // dictionary of all sections, not accessible
- MemberSDict *sourceRefByDict;
- MemberSDict *sourceRefsDict;
- QList<ListItemInfo> *xrefListItems;
- GroupList *partOfGroups;
+ MemberSDict *sourceRefByDict;
+ MemberSDict *sourceRefsDict;
+ QList<ListItemInfo> *xrefListItems;
+ GroupList *partOfGroups;
DocInfo *details; // not exported
DocInfo *inbodyDocs; // not exported
@@ -89,11 +89,11 @@ class DefinitionImpl
QCString id; // clang unique id
};
-DefinitionImpl::DefinitionImpl()
- : sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
+DefinitionImpl::DefinitionImpl()
+ : sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
xrefListItems(0), partOfGroups(0),
- details(0), inbodyDocs(0), brief(0), body(0),
- outerScope(0)
+ details(0), inbodyDocs(0), brief(0), body(0), hidden(FALSE), isArtificial(FALSE),
+ outerScope(0), lang(SrcLangExt_Unknown)
{
}
@@ -755,6 +755,7 @@ bool readCodeFragment(const char *fileName,
{
while ((c=fgetc(f))!='\n' && c!=EOF) /* skip */;
lineNr++;
+ if (found && c == '\n') c = '\0';
}
if (!feof(f))
{
@@ -763,7 +764,7 @@ bool readCodeFragment(const char *fileName,
while (lineNr<=endLine && !feof(f) && !found)
{
int pc=0;
- while ((c=fgetc(f))!='{' && c!=':' && c!=EOF)
+ while ((c=fgetc(f))!='{' && c!=':' && c!=EOF) // } so vi matching brackets has no problem
{
//printf("parsing char `%c'\n",c);
if (c=='\n')
@@ -816,7 +817,7 @@ bool readCodeFragment(const char *fileName,
result+=spaces;
}
// copy until end of line
- result+=c;
+ if (c) result+=c;
startLine=lineNr;
if (c==':')
{
@@ -910,6 +911,7 @@ QCString Definition::getSourceAnchor() const
void Definition::writeSourceDef(OutputList &ol,const char *)
{
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
+ static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE");
ol.pushGeneratorState();
//printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
QCString fn = getSourceFileBase();
@@ -929,13 +931,16 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
// write text left from linePos marker
ol.parseText(refText.left(lineMarkerPos));
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
- // write line link (HTML, LaTeX optionally)
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write line link (HTML, LaTeX optionally, RTF optionally)
ol.writeObjectLink(0,fn,anchorStr,lineStr);
ol.enableAll();
ol.disable(OutputGenerator::Html);
@@ -943,7 +948,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.disable(OutputGenerator::Latex);
}
- // write normal text (Man/RTF, Latex optionally)
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write normal text (Man, Latex optionally, RTF optionally)
ol.docify(lineStr);
ol.popGeneratorState();
@@ -952,13 +961,16 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
fileMarkerPos-lineMarkerPos-2));
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
- // write file link (HTML, LaTeX optionally)
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write file link (HTML, LaTeX optionally, RTF optionally)
ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
ol.enableAll();
ol.disable(OutputGenerator::Html);
@@ -966,7 +978,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.disable(OutputGenerator::Latex);
}
- // write normal text (Man/RTF, Latex optionally)
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write normal text (Man, Latex optionally, RTF optionally)
ol.docify(m_impl->body->fileDef->name());
ol.popGeneratorState();
@@ -979,12 +995,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
// write text left from file marker
ol.parseText(refText.left(fileMarkerPos));
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
// write file link (HTML only)
ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
ol.enableAll();
@@ -993,7 +1012,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.disable(OutputGenerator::Latex);
}
- // write normal text (Latex/Man only)
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write normal text (RTF/Latex/Man only)
ol.docify(m_impl->body->fileDef->name());
ol.popGeneratorState();
@@ -1002,12 +1025,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
lineMarkerPos-fileMarkerPos-2));
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.disableAllBut(OutputGenerator::Html);
// write line link (HTML only)
ol.writeObjectLink(0,fn,anchorStr,lineStr);
@@ -1017,6 +1043,10 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.disable(OutputGenerator::Latex);
}
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
// write normal text (Latex/Man only)
ol.docify(lineStr);
ol.popGeneratorState();
@@ -1106,6 +1136,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool /*funcOnly*/)
{
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
+ static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE");
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE");
ol.pushGeneratorState();
@@ -1158,12 +1189,15 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
ol.pushGeneratorState();
//ol.disableAllBut(OutputGenerator::Html);
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
const int maxLineNrStr = 10;
char anchorStr[maxLineNrStr];
qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
@@ -1178,6 +1212,10 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.docify(name);
ol.popGeneratorState();
}
@@ -1186,12 +1224,15 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
// for HTML write a real link
ol.pushGeneratorState();
//ol.disableAllBut(OutputGenerator::Html);
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.writeObjectLink(md->getReference(),
md->getOutputFileBase(),
@@ -1205,6 +1246,10 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
{
ol.disable(OutputGenerator::Latex);
}
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.docify(name);
ol.popGeneratorState();
}
diff --git a/src/diagram.cpp b/src/diagram.cpp
index e50baec..cc16b50 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -1337,7 +1337,7 @@ void ClassDiagram::writeFigure(FTextStream &output,const char *path,
QCString epstopdfArgs(4096);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
epsBaseName.data(),epsBaseName.data());
- //printf("Converting eps using `%s'\n",epstopdfCmd.data());
+ //printf("Converting eps using `%s'\n",epstopdfArgs.data());
portable_sysTimerStart();
if (portable_system("epstopdf",epstopdfArgs)!=0)
{
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index d2d9684..d4af3f0 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -18,7 +18,7 @@
static int g_dirCount=0;
-DirDef::DirDef(const char *path) : Definition(path,1,1,path)
+DirDef::DirDef(const char *path) : Definition(path,1,1,path), visited(FALSE)
{
bool fullPathNames = Config_getBool("FULL_PATH_NAMES");
// get display name (stipping the paths mentioned in STRIP_FROM_PATH)
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index cabb7ad..edcafdb 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -178,14 +178,14 @@ class TextGeneratorDocbookImpl : public TextGeneratorIntf
class DocbookCodeGenerator : public CodeOutputInterface
{
public:
- DocbookCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1),
+ DocbookCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1), m_col(0),
m_insideCodeLine(FALSE), m_insideSpecialHL(FALSE) {}
virtual ~DocbookCodeGenerator() {}
void codify(const char *text)
{
Docbook_DB(("(codify \"%s\")\n",text));
- writeDocbookCodeString(m_t,text,col);
+ writeDocbookCodeString(m_t,text,m_col);
}
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
@@ -193,7 +193,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
{
Docbook_DB(("(writeCodeLink)\n"));
writeDocbookLink(m_t,ref,file,anchor,name,tooltip);
- col+=strlen(name);
+ m_col+=strlen(name);
}
void writeTooltip(const char *, const DocLinkInfo &, const char *,
const char *, const SourceLinkInfo &, const SourceLinkInfo &
@@ -217,7 +217,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
}
}
m_insideCodeLine=TRUE;
- col=0;
+ m_col=0;
}
void endCodeLine()
{
@@ -255,7 +255,6 @@ class DocbookCodeGenerator : public CodeOutputInterface
{
m_refId=compId;
if (anchorId) m_refId+=(QCString)"_1"+anchorId;
- m_isMemberRef = anchorId!=0;
if (extRef) m_external=extRef;
}
}
@@ -275,8 +274,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
QCString m_refId;
QCString m_external;
int m_lineNumber;
- bool m_isMemberRef;
- int col;
+ int m_col;
bool m_insideCodeLine;
bool m_insideSpecialHL;
};
@@ -486,6 +484,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << endl << "}";
t << "</literallayout>" << endl;
+ if (md->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
}
}
else if (md->memberType()==MemberType_Define)
@@ -538,6 +542,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
t << memberOutputFileBase(md);
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
+ if (md->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
}
}
else if (md->memberType()==MemberType_Typedef)
@@ -556,6 +566,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
t << memberOutputFileBase(md);
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
+ if (md->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
}
else if (md->memberType()==MemberType_Function)
{
@@ -599,6 +615,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
}
t << ")";
+ if (md->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
}
else
{
@@ -633,7 +655,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
MemberListIterator emli(*enumFields);
MemberDef *emd;
t << " <formalpara>" << endl;
- t << " <title>Enumerator:</title>" << endl;
+ t << " <title>" << theTranslator->trEnumerationValues() << ":</title>" << endl;
t << " <variablelist>" << endl;
for (emli.toFirst();(emd=emli.current());++emli)
{
@@ -643,9 +665,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
writeDocbookString(t,emd->name());
t << "</term>" << endl;
t << " <listitem>" << endl;
- t << " <para>";
- writeDocbookString(t,emd->briefDescription());
- t << "</para>" << endl;
+ if(Config_getBool("REPEAT_BRIEF"))
+ {
+ t << " <para>";
+ writeDocbookString(t,emd->briefDescription());
+ t << "</para>" << endl;
+ }
t << " </listitem>" << endl;
t << " </varlistentry>" << endl;
}
@@ -683,9 +708,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << "</title>";
- t << " <emphasis>";
- writeDocbookString(t,md->briefDescription());
- t << "</emphasis>" << endl;
+ if(Config_getBool("REPEAT_BRIEF"))
+ {
+ t << " <emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis>" << endl;
+ }
t << " ";
writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
t << endl;
@@ -704,9 +732,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << " " << convertToXML(md->argsString()) << "</title>";
- t << " <emphasis>";
- writeDocbookString(t,md->briefDescription());
- t << "</emphasis>" << endl;
+ if(Config_getBool("REPEAT_BRIEF"))
+ {
+ t << " <emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis>" << endl;
+ }
t << " ";
writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
t << endl;
@@ -766,9 +797,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << "</title>";
- t << " <emphasis>";
- writeDocbookString(t,md->briefDescription());
- t << "</emphasis>" << endl;
+ if(Config_getBool("REPEAT_BRIEF"))
+ {
+ t << " <emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis>" << endl;
+ }
t << " ";
writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
t << endl;
@@ -798,59 +832,47 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c
count++;
}
}
+
+ if (count==0) return; // empty list
switch (ml->listType())
{
- case MemberListType_decDefineMembers: title="Defines"; desctitle="Define Documentation"; break;
- case MemberListType_decTypedefMembers: title="Typedefs"; desctitle="Typedef Documentation"; break;
- case MemberListType_decEnumMembers: title="Enumerations"; desctitle="Enumeration Type documentation"; break;
- case MemberListType_decFuncMembers: title="Functions"; desctitle="Function Documentation"; break;
- case MemberListType_decVarMembers: title="Variables"; desctitle="Variable Documentation"; break;
- case MemberListType_pubAttribs: title="Public Attributes"; desctitle="Member Documentation"; break;
- case MemberListType_priAttribs: title="Private Attributes"; desctitle="Member Documentation"; break;
- case MemberListType_proAttribs: title="Protected Attributes";desctitle="Member Documentation"; break;
+ case MemberListType_decDefineMembers: title=theTranslator->trDefines(); desctitle=theTranslator->trDefineDocumentation(); break;
+ case MemberListType_decTypedefMembers: title=theTranslator->trTypedefs(); desctitle=theTranslator->trTypedefDocumentation(); break;
+ case MemberListType_decEnumMembers: title=theTranslator->trEnumerations(); desctitle=theTranslator->trEnumerationTypeDocumentation(); break;
+ case MemberListType_decFuncMembers: title=theTranslator->trFunctions(); desctitle=theTranslator->trFunctionDocumentation(); break;
+ case MemberListType_decVarMembers: title=theTranslator->trVariables(); desctitle=theTranslator->trVariableDocumentation(); break;
+ case MemberListType_pubAttribs: title=theTranslator->trPublicAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break;
+ case MemberListType_priAttribs: title=theTranslator->trPrivateAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break;
+ case MemberListType_proAttribs: title=theTranslator->trProtectedAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break;
default: title=""; desctitle=""; break;
}
- if (count==0) return; // empty list
-
- for (mli.toFirst();(md=mli.current());++mli)
- {
- if (md->documentation())
- {
- doc_count++;
- }
- }
-
if (detailed)
{
- if (desctitle)
+ for (mli.toFirst();(md=mli.current());++mli)
{
- if (desctitle=="Member Documentation")
- {
- if (doc_count > 0)
- {
- t << " <simplesect>" << endl;
- t << " <title>" << desctitle << "</title>" << endl;
- }
- }
- else if (desctitle=="Define Documentation")
- {
- if (doc_count > 0)
+ if (md->documentation().isEmpty() && !Config_getBool("REPEAT_BRIEF"))
{
- t << " <section>" << endl;
- t << " <title>" << desctitle << "</title>" << endl;
+ continue;
}
- }
- else
- {
+ doc_count = 1;
+ break;
+ }
+
+ if(doc_count == 0)
+ {
+ return;
+ }
+
+ if (desctitle)
+ {
t << " <section>" << endl;
t << " <title>" << desctitle << "</title>" << endl;
- }
}
} else
{
- t << " <simplesect>" << endl;
+ t << " <section>" << endl;
if (header)
{
t << " <title>" << convertToXML(header) << "</title>" << endl;
@@ -873,36 +895,24 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c
// to prevent this duplication in the Docbook output, we filter those here.
if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0)
{
- generateDocbookForMember(md,t,d,detailed);
+ if (detailed && md->documentation().isEmpty() && !Config_getBool("REPEAT_BRIEF"))
+ {
+ continue;
+ }
+
+ generateDocbookForMember(md,t,d,detailed);
}
}
if (detailed)
{
if (desctitle)
{
- if (desctitle=="Member Documentation")
- {
- if (doc_count > 0)
- {
- t << " </simplesect>" << endl;
- }
- }
- else if (desctitle=="Define Documentation")
- {
- if (doc_count > 0)
- {
- t << " </section>" << endl;
- }
- }
- else
- {
t << " </section>" << endl;
- }
}
}
else
{
- t << " </simplesect>" << endl;
+ t << " </section>" << endl;
}
}
@@ -912,11 +922,11 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
{
ClassSDict::Iterator cli(*cl);
ClassDef *cd;
- QCString title = "Classes";
+ QCString title = theTranslator->trClasses();
if (cli.toFirst())
{
- t << " <simplesect>" << endl;
+ t << " <section>" << endl;
t << " <title> " << title << " </title>" << endl;
}
for (cli.toFirst();(cd=cli.current());++cli)
@@ -928,6 +938,12 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
t << " <listitem>" << endl;
t << " <para>" << "struct <link linkend=\"" << classOutputFileBase(cd) << "\">" << convertToXML(cd->name()) << "</link>";
t << "</para>" << endl;
+ if (cd->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,cd->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
t << " </listitem>" << endl;
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
@@ -935,7 +951,7 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
}
if (cli.toFirst())
{
- t << " </simplesect>" << endl;
+ t << " </section>" << endl;
}
}
}
@@ -946,7 +962,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,FTextStream &t)
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
- QCString title = "Namespaces";
+ QCString title = theTranslator->trNamespaces();
if (nli.toFirst())
{
@@ -980,7 +996,7 @@ static void writeInnerFiles(const FileList *fl,FTextStream &t)
{
QListIterator<FileDef> fli(*fl);
FileDef *fd;
- QCString title = "Files";
+ QCString title = theTranslator->trFile(TRUE,TRUE);
if (fli.toFirst())
{
@@ -1030,7 +1046,7 @@ static void writeInnerGroups(const GroupList *gl,FTextStream &t)
if (gli.toFirst())
{
t << " <simplesect>" << endl;
- t << " <title>Modules</title>" << endl;
+ t << " <title>" << theTranslator->trModules() << "</title>" << endl;
t << " </simplesect>" << endl;
t << " <para>" << endl;
t << " <itemizedlist>" << endl;
@@ -1057,7 +1073,7 @@ static void writeInnerDirs(const DirList *dl,FTextStream &t)
{
QListIterator<DirDef> subdirs(*dl);
DirDef *subdir;
- QCString title = "Directories";
+ QCString title = theTranslator->trDirectories();
if (subdirs.toFirst())
{
t << " <simplesect>" << endl;
@@ -1219,18 +1235,23 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti)
generateDocbookSection(cd,t,ml,g_docbookSectionMapper.find(ml->listType()));
}
}
- if (cd->briefDescription())
+
+ if(Config_getBool("REPEAT_BRIEF"))
{
- t << " <simplesect>" << endl;
- t << " <title>Brief Description</title>" << endl;
- writeDocbookDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
- t << " </simplesect>" << endl;
+ if (cd->briefDescription())
+ {
+ t << " <simplesect>" << endl;
+ // A title as 'Brief Description' may not be necessary.
+ //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
+ writeDocbookDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
+ t << " </simplesect>" << endl;
+ }
}
if (cd->documentation())
{
t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,cd->docFile(),cd->docLine(),cd,0,cd->documentation());
t << " <para>Definition at line " << cd->getDefLine() << " of file " << stripPath(cd->getDefFileName()) << "</para>" << endl;
t << " <para>The Documentation for this struct was generated from the following file: </para>" << endl;
@@ -1338,18 +1359,21 @@ static void generateDocbookForNamespace(NamespaceDef *nd,FTextStream &ti)
}
}
- if (nd->briefDescription())
+ if(Config_getBool("REPEAT_BRIEF"))
{
- t << " <simplesect>" << endl;
- t << " <title>Brief Description</title>" << endl;
- writeDocbookDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
- t << " </simplesect>" << endl;
+ if (nd->briefDescription())
+ {
+ t << " <simplesect>" << endl;
+ //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
+ writeDocbookDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
+ t << " </simplesect>" << endl;
+ }
}
if (nd->documentation())
{
t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation());
t << " <para>Definition at line " << nd->getDefLine() << " of file " << stripPath(nd->getDefFileName()) << "</para>" << endl;
t << " <para>The Documentation for this struct was generated from the following file: </para>" << endl;
@@ -1475,7 +1499,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti)
}
t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
writeDocbookDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation());
if (Config_getBool("FULL_PATH_NAMES"))
@@ -1547,18 +1571,18 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti)
if (gd->briefDescription())
{
- t << " <simplesect>" << endl;
- t << " <title>Brief Description</title>" << endl;
+ //t << " <section>" << endl;
+ //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
writeDocbookDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription());
- t << " </simplesect>" << endl;
+ //t << " </section>" << endl;
}
if (gd->documentation())
{
- t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <section>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,gd->docFile(),gd->docLine(),gd,0,gd->documentation());
- t << " </simplesect>" << endl;
+ t << " </section>" << endl;
}
writeInnerFiles(gd->getFiles(),t);
@@ -1625,8 +1649,7 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti)
writeDocbookHeader_ID(t, dd->getOutputFileBase());
t << " <title>";
- writeDocbookString(t, dd->displayName());
- t << " Directory Reference";
+ t << theTranslator->trDirReference(dd->displayName());
t << "</title>" << endl;
if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT"))
{
@@ -1639,7 +1662,7 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti)
writeInnerFiles(dd->getFiles(),t);
t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription());
writeDocbookDocBlock(t,dd->docFile(),dd->docLine(),dd,0,dd->documentation());
t << " <para>Directory location is " << dd->name() << "</para>" << endl;
@@ -1693,7 +1716,15 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample)
}
else
{
- QCString pid = pageName+"_1"+pageName;
+ QCString pid;
+ if(isExample)
+ {
+ pid = pageName;
+ }
+ else
+ {
+ pid = pageName+"_1"+pageName;
+ }
writeDocbookHeader_ID(t, pid);
}
@@ -1851,7 +1882,7 @@ void generateDocbook()
if (gli.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>Module Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trModuleDocumentation() << "</title>" << endl;
}
for (;(gd=gli.current());++gli)
@@ -1876,7 +1907,7 @@ void generateDocbook()
if (cli.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>Class Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trClassDocumentation() << "</title>" << endl;
}
for (cli.toFirst();(cd=cli.current());++cli)
@@ -1903,7 +1934,7 @@ void generateDocbook()
if (fnli.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>File Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trFileDocumentation() << "</title>" << endl;
}
for (;(fn=fnli.current());++fnli)
@@ -1934,7 +1965,7 @@ void generateDocbook()
if (sdi.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>Directory Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trDirDocumentation() << "</title>" << endl;
}
for (sdi.toFirst();(dir=sdi.current());++sdi)
@@ -1960,7 +1991,7 @@ void generateDocbook()
if (pdi.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>Example Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trExampleDocumentation() << "</title>" << endl;
}
for (pdi.toFirst();(pd=pdi.current());++pdi)
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index 0d5f260..35cc342 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -1050,6 +1050,8 @@ void DocbookDocVisitor::visitPre(DocParamSect *s)
}
m_t << " </title>" << endl;
m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
+ m_t << " <colspec colwidth=\"1*\"/>" << endl;
+ m_t << " <colspec colwidth=\"4*\"/>" << endl;
m_t << " <tbody>" << endl;
}
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 34018d1..a97a6cb 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -232,6 +232,27 @@ static void docParserPopContext(bool keepParamInfo=FALSE)
//---------------------------------------------------------------------------
+// replaces { with < and } with > and also
+// replaces &gt; with < and &gt; with > within string s
+static void unescapeCRef(QCString &s)
+{
+ char *p = s.data();
+ if (p)
+ {
+ char c;
+ while ((c=*p))
+ {
+ if (c=='{') c='<'; else if (c=='}') c='>';
+ *p++=c;
+ }
+ }
+
+ s=substitute(s,"&lt;","<");
+ s=substitute(s,"&gt;",">");
+}
+
+//---------------------------------------------------------------------------
+
/*! search for an image in the imageNameDict and if found
* copies the image to the output directory (which depends on the \a type
* parameter).
@@ -1029,11 +1050,11 @@ static void handleUnclosedStyleCommands()
}
}
-static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
+static void handleLinkedWord(DocNode *parent,QList<DocNode> &children,bool ignoreAutoLinkFlag=FALSE)
{
QCString name = linkToText(SrcLangExt_Unknown,g_token->name,TRUE);
static bool autolinkSupport = Config_getBool("AUTOLINK_SUPPORT");
- if (!autolinkSupport) // no autolinking -> add as normal word
+ if (!autolinkSupport && !ignoreAutoLinkFlag) // no autolinking -> add as normal word
{
children.append(new DocWord(parent,name));
return;
@@ -1115,7 +1136,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
// special case, where matching Foo: fails to be an Obj-C reference,
// but Foo itself might be linkable.
g_token->name=g_token->name.left(len-1);
- handleLinkedWord(parent,children);
+ handleLinkedWord(parent,children,ignoreAutoLinkFlag);
children.append(new DocWord(parent,":"));
}
else if (!g_insideHtmlLink && (cd=getClass(g_token->name+"-p")))
@@ -1223,8 +1244,8 @@ static DocAnchor *handleAnchor(DocNode *parent)
/* Helper function that deals with the Caption and size argument.
- * @param parent Parent node, owner of the children list passed as
- * the third argument.
+ * @param parent Parent node, owner of the children list passed as
+ * the third argument.
* @param children The list of child nodes to which the node representing
* the token can be added.
* @param height Storagre for, optional, height
@@ -1250,12 +1271,12 @@ static void defaultHandleCaptionSize(const int cmd, DocNode *parent, QList<DocNo
g_token->chars = "";
g_token->name = "";
preamble = "";
- do
+ do
{
tok=doctokenizerYYlex();
} while (tok == TK_WHITESPACE);
break;
- }
+ }
if (tok==TK_WORD && g_token->name=="height=")
{
// special case: no title, but we do have a size indicator
@@ -1265,12 +1286,12 @@ static void defaultHandleCaptionSize(const int cmd, DocNode *parent, QList<DocNo
g_token->chars = "";
g_token->name = "";
preamble = "";
- do
+ do
{
tok=doctokenizerYYlex();
} while (tok == TK_WHITESPACE);
break;
- }
+ }
if (tok==TK_WORD && (g_token->name=="min" || g_token->name=="max"))
{
// special case: no title, but we do have a size indicator min or max
@@ -1278,18 +1299,18 @@ static void defaultHandleCaptionSize(const int cmd, DocNode *parent, QList<DocNo
{
preamble = g_token->name + " ";
break;
- }
- }
+ }
+ }
insideString = 1;
if (!defaultHandleToken(parent,tok,children))
{
switch (tok)
{
- case TK_COMMAND:
+ case TK_COMMAND:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\%s",
- qPrint(g_token->name), Mappers::cmdMapper->map(cmd).data());
+ qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data());
break;
- case TK_SYMBOL:
+ case TK_SYMBOL:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
@@ -1307,32 +1328,32 @@ static void defaultHandleCaptionSize(const int cmd, DocNode *parent, QList<DocNo
}
while (tok==TK_WORD) // there are values following the title
{
- if (g_token->name=="width")
+ if (g_token->name=="width")
{
if (!width.isEmpty()) width += ",";
width+=preamble + "width=" + g_token->chars;
preamble = "";
doctokenizerYYsetStateTitleAttr();
}
- else if (g_token->name=="height")
+ else if (g_token->name=="height")
{
if (!height.isEmpty()) height += ",";
height+=preamble + "height=" + g_token->chars;
preamble = "";
doctokenizerYYsetStateTitleAttr();
}
- else if (g_token->name=="max")
+ else if (g_token->name=="max")
{
preamble = "max ";
}
- else if (g_token->name=="min")
+ else if (g_token->name=="min")
{
preamble = "min ";
}
- else
+ else
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after \\%s command",
- qPrint(g_token->name), Mappers::cmdMapper->map(cmd).data());
+ qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data());
}
do
@@ -1352,9 +1373,9 @@ static void defaultHandleCaptionSize(const int cmd, DocNode *parent, QList<DocNo
ASSERT(n==parent);
}
/* Helper function that deals with the most common tokens allowed in
- * title like sections.
- * @param parent Parent node, owner of the children list passed as
- * the third argument.
+ * title like sections.
+ * @param parent Parent node, owner of the children list passed as
+ * the third argument.
* @param tok The token to process.
* @param children The list of child nodes to which the node representing
* the token can be added.
@@ -1541,6 +1562,17 @@ reparsetoken:
doctokenizerYYsetStatePara();
}
break;
+ case CMD_SETSCOPE:
+ {
+ QCString scope;
+ doctokenizerYYsetStateSetScope();
+ doctokenizerYYlex();
+ scope = g_token->name;
+ g_context = scope;
+ //printf("Found scope='%s'\n",scope.data());
+ doctokenizerYYsetStatePara();
+ }
+ break;
default:
return FALSE;
}
@@ -2220,6 +2252,11 @@ DocFormula::DocFormula(DocNode *parent,int id) :
m_name.sprintf("form_%d",m_id);
m_text = formula->getFormulaText();
}
+ else // wrong \form#<n> command
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Wrong formula id %d",id);
+ m_id = -1;
+ }
}
//---------------------------------------------------------------------------
@@ -2497,7 +2534,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
// compound->definitionType());
return;
}
- else if (compound->definitionType()==Definition::TypeFile &&
+ else if (compound && compound->definitionType()==Definition::TypeFile &&
((FileDef*)compound)->generateSourceFile()
) // undocumented file that has source code we can link to
{
@@ -2616,9 +2653,8 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
DocLink::DocLink(DocNode *parent,const QCString &target)
{
- m_parent = parent;
- Definition *compound;
- //PageInfo *page;
+ m_parent = parent;
+ Definition *compound = 0;
QCString anchor;
m_refText = target;
m_relPath = g_relPath;
@@ -2635,7 +2671,7 @@ DocLink::DocLink(DocNode *parent,const QCString &target)
m_file = compound->getOutputFileBase();
m_ref = compound->getReference();
}
- else if (compound->definitionType()==Definition::TypeFile &&
+ else if (compound && compound->definitionType()==Definition::TypeFile &&
((FileDef*)compound)->generateSourceFile()
) // undocumented file that has source code we can link to
{
@@ -3230,7 +3266,6 @@ int DocIndexEntry::parse()
break;
}
}
- if (tok!=0) retval=tok;
doctokenizerYYsetStatePara();
m_entry = m_entry.stripWhiteSpace();
endindexentry:
@@ -5995,6 +6030,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
QCString exceptName;
if (findAttribute(tagHtmlAttribs,"cref",&exceptName))
{
+ unescapeCRef(exceptName);
retval = handleParamSection(exceptName,DocParamSect::Exception,TRUE);
}
else
@@ -6039,12 +6075,13 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
//printf("XML_SEE: empty tag=%d\n",g_token->emptyTag);
if (findAttribute(tagHtmlAttribs,"cref",&cref))
{
+ unescapeCRef(cref);
if (g_token->emptyTag) // <see cref="..."/> style
{
bool inSeeBlock = g_inSeeBlock;
g_token->name = cref;
g_inSeeBlock = TRUE;
- handleLinkedWord(this,m_children);
+ handleLinkedWord(this,m_children,TRUE);
g_inSeeBlock = inSeeBlock;
}
else // <see cref="...">...</see> style
@@ -6073,6 +6110,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
QCString cref;
if (findAttribute(tagHtmlAttribs,"cref",&cref))
{
+ unescapeCRef(cref);
// Look for an existing "see" section
DocSimpleSect *ss=0;
QListIterator<DocNode> cli(m_children);
@@ -6750,17 +6788,13 @@ int DocSection::parse()
}
else if ((m_level<=1+Doxygen::subpageNestingLevel && retval==RetVal_Subsubsection) ||
(m_level<=2+Doxygen::subpageNestingLevel && retval==RetVal_Paragraph)
- )
+ )
{
- int level;
- if (retval==RetVal_Subsection) level=2;
- else if (retval==RetVal_Subsubsection) level=3;
- else level=4;
+ int level = (retval==RetVal_Subsubsection) ? 3 : 4;
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected %s "
"command found inside %s!",
sectionLevelToName[level],sectionLevelToName[m_level]);
retval=0; // stop parsing
-
}
else
{
@@ -7076,6 +7110,12 @@ static QCString processCopyDoc(const char *data,uint &len)
isBrief?"brief":"details",id.data());
}
}
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,
+ "@copy%s or @copydoc target '%s' not found", isBrief?"brief":"details",
+ id.data());
+ }
// skip over command
i=j;
}
diff --git a/src/docparser.h b/src/docparser.h
index 83312c4..51698b8 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -677,7 +677,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
class DocImage : public CompAccept<DocImage>, public DocNode
{
public:
- enum Type { None, Html, Latex, Rtf, DocBook };
+ enum Type { Html, Latex, Rtf, DocBook };
DocImage(DocNode *parent,const HtmlAttribList &attribs,
const QCString &name,Type t,const QCString &url=QCString());
Kind kind() const { return Kind_Image; }
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index 1b734ec..cfcf65f 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -163,6 +163,7 @@ void doctokenizerYYsetStateSnippet();
void doctokenizerYYstartAutoList();
void doctokenizerYYendAutoList();
void doctokenizerYYsetStatePlantUML();
+void doctokenizerYYsetStateSetScope();
void doctokenizerYYsetStatePlantUMLOpt();
#endif
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 9fd3c46..fcaa516 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -49,6 +49,7 @@ static int g_inputPos = 0;
static const char *g_inputString;
static QCString g_fileName;
static bool g_insidePre;
+static int g_sharpCount=0;
// context for section finding phase
static Definition *g_definition;
@@ -370,12 +371,14 @@ SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
FUNCARG "("{FUNCPART}")"({BLANK}*("volatile"|"const"){BLANK})?
+FUNCARG2 "("{FUNCPART}")"({BLANK}*("volatile"|"const"))?
OPNEW {BLANK}+"new"({BLANK}*"[]")?
OPDEL {BLANK}+"delete"({BLANK}*"[]")?
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
OPCAST {BLANK}+[^<(\r\n.,][^(\r\n.,]*
OPMASK ({BLANK}*{OPNORM}{FUNCARG})
OPMASKOPT ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
+OPMASKOP2 ({BLANK}*{OPNORM}{FUNCARG2}?)|({OPCAST}{FUNCARG2})
LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
@@ -390,9 +393,10 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
-REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}?
+REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG2}?
REFWORD3 ({ID}":")*{ID}":"?
-REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
+REFWORD4 (({SCOPEPRE}*"operator"{OPMASKOP2})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOP2})){CVSPEC}?
+REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
%option noyywrap
%option yylineno
@@ -434,6 +438,8 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
%x St_SkipTitle
%x St_Anchor
%x St_Snippet
+%x St_SetScope
+%x St_SetScopeEnd
%x St_Sections
%s St_SecLabel1
@@ -1059,6 +1065,34 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
<St_IntRef>{BLANK}+"\"" {
BEGIN(St_Ref2);
}
+<St_SetScope>{SCOPEMASK}{BLANK} {
+ g_token->name = yytext;
+ g_token->name = g_token->name.stripWhiteSpace();
+ return TK_WORD;
+ }
+<St_SetScope>{SCOPEMASK}"<" {
+ g_token->name = yytext;
+ g_token->name = g_token->name.stripWhiteSpace();
+ g_sharpCount=1;
+ BEGIN(St_SetScopeEnd);
+ }
+<St_SetScope>{BLANK} {
+ }
+<St_SetScopeEnd>"<" {
+ g_token->name += yytext;
+ g_sharpCount++;
+ }
+<St_SetScopeEnd>">" {
+ g_token->name += yytext;
+ g_sharpCount--;
+ if (g_sharpCount<=0)
+ {
+ return TK_WORD;
+ }
+ }
+<St_SetScopeEnd>. {
+ g_token->name += yytext;
+ }
<St_Ref2>"&"{ID}";" { /* symbol */
g_token->name = yytext;
return TK_SYMBOL;
@@ -1474,6 +1508,11 @@ void doctokenizerYYsetStateSnippet()
BEGIN(St_Snippet);
}
+void doctokenizerYYsetStateSetScope()
+{
+ BEGIN(St_SetScope);
+}
+
void doctokenizerYYcleanup()
{
yy_delete_buffer( YY_CURRENT_BUFFER );
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index df1f853..0756217 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -1010,6 +1010,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,
while (i<level)
{
int idx=getScopeFragment(name,p,&l);
+ if (idx==-1) return prevScope;
QCString nsName = name.mid(idx,l);
if (nsName.isEmpty()) return prevScope;
if (!fullScope.isEmpty()) fullScope+="::";
@@ -5221,7 +5222,7 @@ static void addListReferences()
addRefItem(xrefItems,
name,
theTranslator->trPage(TRUE,TRUE),
- name,pd->title(),0);
+ name,pd->title(),0,0);
}
}
@@ -5238,7 +5239,7 @@ static void addListReferences()
addRefItem(xrefItems,
name,
theTranslator->trDir(TRUE,TRUE),
- name,dd->displayName(),0);
+ name,dd->displayName(),0,0);
}
}
@@ -8629,7 +8630,7 @@ static void buildPageList(EntryNav *rootNav)
"page",
name,
title,
- 0
+ 0,0
);
rootNav->releaseEntry();
@@ -9162,6 +9163,33 @@ static void readTagFile(Entry *root,const char *tl)
}
//----------------------------------------------------------------------------
+static void copyLatexStyleSheet()
+{
+ QStrList latexExtraStyleSheet = Config_getList("LATEX_EXTRA_STYLESHEET");
+ for (uint i=0; i<latexExtraStyleSheet.count(); ++i)
+ {
+ QCString fileName(latexExtraStyleSheet.at(i));
+ if (!fileName.isEmpty())
+ {
+ QFileInfo fi(fileName);
+ if (!fi.exists())
+ {
+ err("Style sheet '%s' specified by LATEX_EXTRA_STYLESHEET does not exist!\n",fileName.data());
+ }
+ else
+ {
+ QCString destFileName = Config_getString("LATEX_OUTPUT")+"/"+fi.fileName().data();
+ if (!checkExtension(fi.fileName().data(), latexStyleExtension))
+ {
+ destFileName += latexStyleExtension;
+ }
+ copyFile(fileName, destFileName);
+ }
+ }
+ }
+}
+
+//----------------------------------------------------------------------------
static void copyStyleSheet()
{
QCString &htmlStyleSheet = Config_getString("HTML_STYLESHEET");
@@ -9301,6 +9329,10 @@ static void parseFile(ParserInterface *parser,
msg("Reading %s...\n",fn);
readInputFile(fileName,preBuf);
}
+ if (preBuf.data() && preBuf.curPos()>0 && *(preBuf.data()+preBuf.curPos()-1)!='\n')
+ {
+ preBuf.addChar('\n'); // add extra newline to help parser
+ }
BufStr convBuf(preBuf.curPos()+1024);
@@ -11365,6 +11397,7 @@ void generateOutput()
g_outputList->add(new LatexGenerator);
LatexGenerator::init();
+ copyLatexStyleSheet();
// copy static stuff
copyExtraFiles("LATEX_EXTRA_FILES","LATEX_OUTPUT");
}
diff --git a/src/entry.cpp b/src/entry.cpp
index 9f863d2..b5928b3 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -170,7 +170,7 @@ Entry::Entry(const Entry &e)
anchors->append(new SectionInfo(*s));
}
- // deep copy type contraint list
+ // deep copy type constraint list
if (e.typeConstr)
{
typeConstr = e.typeConstr->deepCopy();
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 3ff69a4..dd97c1c 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -333,6 +333,10 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{
ol.disable(OutputGenerator::Latex);
}
+ if (ol.isEnabled(OutputGenerator::RTF) && !Config_getBool("RTF_SOURCE_CODE"))
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.startParagraph();
QCString refText = theTranslator->trDefinedInSourceFile();
@@ -910,6 +914,7 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
+ static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE");
DevNullCodeDocInterface devNullIntf;
QCString title = m_docname;
if (!m_fileVersion.isEmpty())
@@ -918,8 +923,8 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
}
QCString pageTitle = theTranslator->trSourceFile(title);
ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
if (!latexSourceCode) ol.disable(OutputGenerator::Latex);
+ if (!rtfSourceCode) ol.disable(OutputGenerator::RTF);
bool isDocFile = isDocumentationFile();
bool genSourceFile = !isDocFile && generateSourceFile();
@@ -951,10 +956,12 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
if (isLinkable())
{
if (latexSourceCode) ol.disable(OutputGenerator::Latex);
+ if (rtfSourceCode) ol.disable(OutputGenerator::RTF);
ol.startTextLink(getOutputFileBase(),0);
ol.parseText(theTranslator->trGotoDocumentation());
ol.endTextLink();
if (latexSourceCode) ol.enable(OutputGenerator::Latex);
+ if (rtfSourceCode) ol.enable(OutputGenerator::RTF);
}
(void)sameTu;
@@ -1409,6 +1416,7 @@ void FileDef::addListReferences()
getOutputFileBase(),
theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name(),
+ 0,
0
);
}
@@ -1856,7 +1864,7 @@ void FileDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCS
}
else
{
- ml->writeDeclarations(ol,0,0,this,0,title,0,definitionType());
+ ml->writeDeclarations(ol,0,0,this,0,title,0);
}
}
}
diff --git a/src/filename.cpp b/src/filename.cpp
index 35a1841..8719f3c 100644
--- a/src/filename.cpp
+++ b/src/filename.cpp
@@ -45,9 +45,12 @@ void FileName::generateDiskNames()
{
// skip references
for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
- // name if unique, so diskname is simply the name
- //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
- fd->m_diskName=name;
+ if (fd)
+ {
+ // name if unique, so diskname is simply the name
+ //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
+ fd->m_diskName=name;
+ }
}
else if (count>1) // multiple occurrences of the same file name
{
@@ -57,28 +60,31 @@ void FileName::generateDiskNames()
while (!found) // search for the common prefix of all paths
{
for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
- char c=fd->m_path.at(i);
- if (c=='/') j=i; // remember last position of dirname
- ++it;
- while ((fd=it.current()) && !found)
+ if (fd)
{
- if (!fd->isReference())
+ char c=fd->m_path.at(i);
+ if (c=='/') j=i; // remember last position of dirname
+ ++it;
+ while ((fd=it.current()) && !found)
{
- //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
- if (i==(int)fd->m_path.length())
+ if (!fd->isReference())
{
- //warning("Input file %s found multiple times!\n"
- // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
- found=TRUE;
- }
- else if (fd->m_path[i]!=c)
- {
- found=TRUE;
+ //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
+ if (i==(int)fd->m_path.length())
+ {
+ //warning("Input file %s found multiple times!\n"
+ // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
+ found=TRUE;
+ }
+ else if (fd->m_path[i]!=c)
+ {
+ found=TRUE;
+ }
}
+ ++it;
}
- ++it;
+ i++;
}
- i++;
}
for (it.toFirst();(fd=it.current());++it)
{
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 101137a..48e2845 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -114,6 +114,7 @@ class Scope
static QCString docBlock; //!< contents of all lines of a documentation block
static QCString currentModule=0; //!< name of the current enclosing module
+static QCString currentClass=0; //!< name of the current enclosing class
static UseSDict *useMembers= new UseSDict; //!< info about used modules
static UseEntry *useEntry = 0; //!< current use statement info
static QList<Scope> scopeStack;
@@ -386,8 +387,23 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
}
}
}
+//-------------------------------------------------------------------------------
+/**
+ searches for definition of a module (Namespace)
+ @param mname the name of the module
+ @param cd the entry, if found or null
+ @returns true, if module is found
+*/
+static bool getFortranNamespaceDefs(const QCString &mname,
+ NamespaceDef *&cd)
+{
+ if (mname.isEmpty()) return FALSE; /* empty name => nothing to link */
+ // search for module
+ if ((cd=Doxygen::namespaceSDict->find(mname))) return TRUE;
+ return FALSE;
+}
//-------------------------------------------------------------------------------
/**
searches for definition of a type
@@ -467,6 +483,7 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
{
FileDef *fd=md->getFileDef();
GroupDef *gd=md->getGroupDef();
+ ClassDef *cd=md->getClassDef();
//cout << "found link with same name: " << fd->fileName() << " " << memberName;
//if (md->getNamespaceDef() != 0) cout << " in namespace " << md->getNamespaceDef()->name();cout << endl;
@@ -477,7 +494,9 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
if (nspace == 0)
{ // found function in global scope
- return TRUE;
+ if(cd == 0) { // Skip if bound to type
+ return TRUE;
+ }
}
else if (moduleName == nspace->name())
{ // found in local scope
@@ -534,7 +553,7 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
CodeOutputInterface &ol,
const char *text)
{
- MemberDef *md;
+ MemberDef *md=0;
QCString memberName= removeRedundantWhiteSpace(memberText);
if (getFortranDefs(memberName, currentModule, md, usedict) && md->isLinkable())
@@ -563,6 +582,7 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
static void generateLink(CodeOutputInterface &ol, char *lname)
{
ClassDef *cd=0;
+ NamespaceDef *nsd=0;
QCString tmp = lname;
tmp = removeRedundantWhiteSpace(tmp.lower());
@@ -580,6 +600,12 @@ static void generateLink(CodeOutputInterface &ol, char *lname)
addToSearchIndex(tmp.data());
}
}
+ // check for module
+ else if ( (getFortranNamespaceDefs(tmp, nsd)) && nsd->isLinkable() )
+ { // write module link
+ writeMultiLineCodeLink(ol,nsd,tmp);
+ addToSearchIndex(tmp.data());
+ }
// check for function/variable
else if (getLink(useMembers, tmp, ol, tmp))
{
@@ -731,8 +757,8 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
/*-------- ignore ------------------------------------------------------------*/
-<Start>{IGNORE}/{BS}"("? { // do not search keywords, intrinsics... TODO: complete list
- codifyLines(yytext);
+<Start>{IGNORE}/{BS}"(" { // do not search keywords, intrinsics... TODO: complete list
+ codifyLines(yytext);
}
/*-------- inner construct ---------------------------------------------------*/
@@ -757,12 +783,11 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
codifyLines(yytext);
endFontClass();
}
-<Start>"end"({BS}{FLOW})?/[ \t\n] { // list is a bit long as not all have possible end
+<Start>{BS}"end"({BS}{FLOW})/[ \t\n] { // list is a bit long as not all have possible end
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
}
-
<Start>"implicit"{BS}"none" {
startFontClass("keywordtype");
codifyLines(yytext);
@@ -807,10 +832,12 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
<UseOnly,Import>{BS},{BS} { codifyLines(yytext); }
<UseOnly,Import>{BS}&{BS}"\n" { codifyLines(yytext); YY_FTN_RESET}
<UseOnly>{ID} {
+ QCString tmp = yytext;
+ tmp = tmp.lower();
+ useEntry->onlyNames.append(tmp);
g_insideBody=TRUE;
generateLink(*g_code, yytext);
g_insideBody=FALSE;
- useEntry->onlyNames.append(yytext);
}
<Use,UseOnly,Import>"\n" {
unput(*yytext);
@@ -845,6 +872,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
endFontClass();
yy_push_state(YY_START);
BEGIN(ClassName);
+ currentClass="class";
}
<ClassName>{ID} {
if (currentModule == "module")
@@ -864,7 +892,11 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
yy_pop_state();
YY_FTN_REJECT;
}
-<Start>"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule
+<Start>^{BS}"end"({BS_}"type").* { // just reset currentClass, rest is done in following rule
+ currentClass=0;
+ YY_FTN_REJECT;
+ }
+<Start>^{BS}"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule
currentModule=0;
YY_FTN_REJECT;
}
@@ -893,7 +925,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
yy_pop_state();
YY_FTN_RESET
}
-<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface"){BS} { // Fortran subroutine or function ends
+<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface")?{BS} { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl;
endScope();
startFontClass("keyword");
@@ -980,9 +1012,11 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
/*-------- subprog calls -----------------------------------------*/
<Start>"call"{BS_} {
- codifyLines(yytext);
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
yy_push_state(YY_START);
- BEGIN(SubCall);
+ BEGIN(SubCall);
}
<SubCall>{ID} { // subroutine call
g_insideBody=TRUE;
@@ -991,9 +1025,17 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
yy_pop_state();
}
<Start>{ID}{BS}/"(" { // function call
- g_insideBody=TRUE;
- generateLink(*g_code, yytext);
- g_insideBody=FALSE;
+ if (g_isFixedForm && yy_my_start == 6)
+ {
+ // fixed form continuation line
+ YY_FTN_REJECT;
+ }
+ else
+ {
+ g_insideBody=TRUE;
+ generateLink(*g_code, yytext);
+ g_insideBody=FALSE;
+ }
}
/*-------- comments ---------------------------------------------------*/
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 8415e43..4875606 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -472,6 +472,7 @@ SCOPENAME ({ID}{BS}"::"{BS})*
}
^{BS}interface{BS_}{ID}{ARGS}? { ifType = IF_GENERIC;
+ current->bodyLine = yyLineNr + lineCountPrepass + 1; // we have to be at the line after the definition and we have to take continuation lines into account.
yy_push_state(InterfaceBody);
// extract generic name
@@ -484,6 +485,7 @@ SCOPENAME ({ID}{BS}"::"{BS})*
<InterfaceBody>^{BS}end{BS}interface({BS_}{ID})? {
// end scope only if GENERIC interface
+ last_entry->parent()->endBodyLine = yyLineNr - 1;
if (ifType == IF_GENERIC && !endScope(current_root))
yyterminate();
@@ -611,6 +613,7 @@ private {
current->name = yytext;
current->fileName = yyFileName;
current->bodyLine = yyLineNr;
+ current->startLine = yyLineNr;
/* if type is part of a module, mod name is necessary for output */
if ((current_root) &&
@@ -651,6 +654,7 @@ private {
current->name = name;
current->fileName = yyFileName;
current->bodyLine = yyLineNr;
+ current->startLine = yyLineNr;
addCurrentEntry(1);
}
{BS}"=>"[^(\n|\!)]* { /* Specific bindings come after the ID. */
@@ -666,6 +670,7 @@ private {
<TypedefBody,TypedefBodyContains>{
^{BS}"end"{BS}"type"({BS_}{ID})?{BS}/(\n|!) { /* end type definition */
+ last_entry->parent()->endBodyLine = yyLineNr;
if (!endScope(current_root))
yyterminate();
typeMode = false;
@@ -681,6 +686,7 @@ private {
// in a scope of their own, even if multiple
// are group in one INTERFACE/END INTERFACE block.
//
+ last_entry->endBodyLine = yyLineNr - 1;
if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
endScope(current_root);
@@ -695,6 +701,8 @@ private {
}
<Start,ModuleBody,TypedefBody,SubprogBody>{
^{BS}{TYPE_SPEC}/{SEPARATE} {
+ current->bodyLine = yyLineNr + 1;
+ current->endBodyLine = yyLineNr + lineCountPrepass;
/* variable declaration starts */
if(YY_START == Start)
{
@@ -806,6 +814,7 @@ private {
current->type = argType;
current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference
+ current->startLine = yyLineNr;
addCurrentEntry(1);
}
else if (!argType.isEmpty())
@@ -885,7 +894,8 @@ private {
// locate !< comment
updateVariablePrepassComment(yyColNr-(int)yyleng, yyColNr);
}
-<Variable>{BS}"=" { yy_push_state(YY_START);
+<Variable>{BS}"=" {
+ yy_push_state(YY_START);
initializer="=";
initializerScope = initializerArrayScope = 0;
BEGIN(Initialization);
@@ -986,6 +996,8 @@ private {
result = QCString(yytext).stripWhiteSpace();
addSubprogram(result);
yy_push_state(Subprog);
+ current->bodyLine = yyLineNr + lineCountPrepass + 1; // we have to be at the line after the definition and we have to take continuation lines into account.
+ current->startLine = yyLineNr;
}
<Subprog>{BS} { /* ignore white space */ }
@@ -1493,7 +1505,9 @@ static void copyEntry(Entry *dest, Entry *src)
{
dest->type = src->type;
dest->fileName = src->fileName;
+ dest->startLine = src->startLine;
dest->bodyLine = src->bodyLine;
+ dest->endBodyLine = src->endBodyLine;
dest->args = src->args;
dest->argList = new ArgumentList(*src->argList);
dest->doc = src->doc;
@@ -2029,7 +2043,7 @@ static void addModule(const char *name, bool isModule)
DBG_CTX((stderr, "0=========> got module %s\n", name));
if (isModule)
- current->section = Entry::CLASS_SEC;
+ current->section = Entry::NAMESPACE_SEC;
else
current->section = Entry::FUNCTION_SEC;
@@ -2048,6 +2062,7 @@ static void addModule(const char *name, bool isModule)
current->type = "program";
current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference
+ current->startLine = yyLineNr;
current->protection = Public ;
addCurrentEntry(1);
startScope(last_entry);
@@ -2064,8 +2079,8 @@ static void addSubprogram(const char *text)
current->type += " " + subtype;
current->type = current->type.stripWhiteSpace();
current->fileName = yyFileName;
- current->bodyLine = yyLineNr; // used for source reference
- current->startLine = -1; // ??? what is startLine for?
+ current->bodyLine = yyLineNr; // used for source reference start of body of routine
+ current->startLine = yyLineNr; // used for source reference start of definition
current->args.resize(0);
current->argList->clear();
docBlock.resize(0);
@@ -2113,6 +2128,7 @@ static void addInterface(QCString name, InterfaceType type)
current->fileName = yyFileName;
current->bodyLine = yyLineNr;
+ current->startLine = yyLineNr;
addCurrentEntry(1);
}
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 65e59f3..5c08048 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -151,13 +151,13 @@ bool GroupDef::addClass(const ClassDef *cd)
static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
if (cd->isHidden()) return FALSE;
updateLanguage(cd);
- if (classSDict->find(cd->qualifiedName())==0)
+ QCString qn = cd->name();
+ if (classSDict->find(qn)==0)
{
- QCString qn = cd->qualifiedName();
//printf("--- addClass %s sort=%d\n",qn.data(),sortBriefDocs);
if (sortBriefDocs)
{
- classSDict->inSort(cd->qualifiedName(),cd);
+ classSDict->inSort(qn,cd);
}
else
{
@@ -180,13 +180,13 @@ bool GroupDef::addClass(const ClassDef *cd)
j++;
}
//printf("Found scope at index %d\n",j);
- classSDict->insertAt(j,cd->qualifiedName(),cd);
+ classSDict->insertAt(j,qn,cd);
found=TRUE;
}
}
if (!found) // no insertion point found -> just append
{
- classSDict->append(cd->qualifiedName(),cd);
+ classSDict->append(qn,cd);
}
}
return TRUE;
@@ -1534,6 +1534,7 @@ void GroupDef::addListReferences()
getOutputFileBase(),
theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name(),
+ 0,
0
);
}
@@ -1620,7 +1621,7 @@ void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
}
if (ml)
{
- ml->writeDeclarations(ol,0,0,0,this,title,0,definitionType());
+ ml->writeDeclarations(ol,0,0,0,this,title,0);
}
}
diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp
index a4d5914..9327526 100644
--- a/src/htmlentity.cpp
+++ b/src/htmlentity.cpp
@@ -298,7 +298,7 @@ static struct htmlEntityInfo
// doxygen extension to the HTML4 table of HTML entities
{ SYM(tm), "\xe2\x84\xa2", "&trade;", "<trademark/>", "&#8482;", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }},
- { SYM(apos), "'", "'", "'", "&apos;", "'", "'", "'", { "\\\'", DocSymbol::Perl_string }},
+ { SYM(apos), "'", "'", "'", "&apos;", "\\textquotesingle{}", "'", "'", { "\\\'", DocSymbol::Perl_string }},
// doxygen commands represented as HTML entities
{ SYM(BSlash), "\\", "\\", "\\", "\\", "\\textbackslash{}", "\\\\", "\\\\", { "\\\\", DocSymbol::Perl_string }},
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index c4bd80a..3bb6792 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -737,17 +737,24 @@ void HtmlGenerator::init()
if (f.open(IO_WriteOnly))
{
const Resource *res = mgr.get("dynsections.js");
- FTextStream t(&f);
- t << (const char *)res->data;
- if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS"))
+ if (res)
+ {
+ FTextStream t(&f);
+ t << (const char *)res->data;
+ if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS"))
+ {
+ t << endl <<
+ "$(document).ready(function() {\n"
+ " $('.code,.codeRef').each(function() {\n"
+ " $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n"
+ " $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n"
+ " });\n"
+ "});\n";
+ }
+ }
+ else
{
- t << endl <<
- "$(document).ready(function() {\n"
- " $('.code,.codeRef').each(function() {\n"
- " $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n"
- " $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n"
- " });\n"
- "});\n";
+ err("Resource dynsections.js not compiled in");
}
}
}
@@ -896,7 +903,6 @@ void HtmlGenerator::writeSearchInfo(FTextStream &t,const QCString &relPath)
t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
t << " onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
- writeSearchCategories(t);
t << "</div>\n";
t << "\n";
t << "<!-- iframe showing the search results (closed by default) -->\n";
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 244d416..a62cdb7 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -270,7 +270,29 @@ static void writeDefaultHeaderPart1(FTextStream &t)
"\\usepackage{fixltx2e}\n" // for \textsubscript
"\\usepackage{calc}\n"
"\\usepackage{doxygen}\n"
- "\\usepackage[export]{adjustbox} % also loads graphicx\n"
+ "\\usepackage[export]{adjustbox} % also loads graphicx\n";
+ QStrList extraLatexStyle = Config_getList("LATEX_EXTRA_STYLESHEET");
+ for (uint i=0; i<extraLatexStyle.count(); ++i)
+ {
+ QCString fileName(extraLatexStyle.at(i));
+ if (!fileName.isEmpty())
+ {
+ QFileInfo fi(fileName);
+ if (fi.exists())
+ {
+ if (checkExtension(fi.fileName().data(), latexStyleExtension))
+ {
+ // strip the extension, it will be added by the usepackage in the tex conversion process
+ t << "\\usepackage{" << stripExtensionGeneral(fi.fileName().data(), latexStyleExtension) << "}\n";
+ }
+ else
+ {
+ t << "\\usepackage{" << fi.fileName().utf8() << "}\n";
+ }
+ }
+ }
+ }
+ t << "\\usepackage{graphicx}\n"
"\\usepackage[utf8]{inputenc}\n"
"\\usepackage{makeidx}\n"
"\\usepackage{multicol}\n"
@@ -1065,7 +1087,7 @@ void LatexGenerator::endIndexItem(const char *ref,const char *fn)
{
if (!ref && fn)
{
- t << "}{\\pageref{" << fn << "}}{}" << endl;
+ t << "}{\\pageref{" << stripPath(fn) << "}}{}" << endl;
}
}
diff --git a/src/latexgen.h b/src/latexgen.h
index f68612d..60c649a 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -22,6 +22,8 @@
class QFile;
+static const char *latexStyleExtension = ".sty";
+
/** Generator for LaTeX output. */
class LatexGenerator : public OutputGenerator
{
diff --git a/src/layout.cpp b/src/layout.cpp
index 739a2a3..c364886 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -1104,7 +1104,7 @@ class LayoutParser : public QXmlDefaultHandler
}
}
// create new item and make it the new root
- m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title,intro);
+ m_rootNav = new LayoutNavEntry(m_rootNav,kind,isVisible,baseFile,title,intro);
}
void endNavEntry()
diff --git a/src/libdoxygen.t.in b/src/libdoxygen.t.in
index 58563d1..1d242d0 100644
--- a/src/libdoxygen.t.in
+++ b/src/libdoxygen.t.in
@@ -121,6 +121,6 @@ TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
$(GENERATED_SRC)/layout_default.xml.h: layout_default.xml
$(TO_C_CMD)
-../generated_src/doxygen/resources.cpp: res2cc_cmd.py $(wildcard ../templates/html/*)
+../generated_src/doxygen/resources.cpp: res2cc_cmd.py $(wildcard ../templates/html/*) $(wildcard ../templates/xml) $(wildcard ../templates/latex)
$(PYTHON) res2cc_cmd.py ../templates ../generated_src/doxygen/resources.cpp
diff --git a/src/lodepng.cpp b/src/lodepng.cpp
index 46011a8..084f1c8 100644
--- a/src/lodepng.cpp
+++ b/src/lodepng.cpp
@@ -1406,7 +1406,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t
for(i = 0; i < numcodes; i++) uivector_push_back(&lldll, HuffmanTree_getLength(&codes, (unsigned)i));
for(i = 0; i < numcodesD; i++) uivector_push_back(&lldll, HuffmanTree_getLength(&codesD, (unsigned)i));
- /*make lldl smaller by using repeat codes 16 (copy length 3-6 times), 17 (3-10 zeroes), 18 (11-138 zeroes)*/
+ /*make lldl smaller by using repeat codes 16 (copy length 3-6 times), 17 (3-10 zeros), 18 (11-138 zeros)*/
for(i = 0; i < (unsigned)lldll.size; i++)
{
unsigned j = 0;
@@ -2547,7 +2547,7 @@ unsigned LodePNG_convert(unsigned char* out, const unsigned char* in, LodePNG_In
return 0;
}
-/*Paeth predicter, used by PNG filter type 4*/
+/*Path predictor, used by PNG filter type 4*/
static int paethPredictor(int a, int b, int c)
{
int p = a + b - c;
@@ -2795,7 +2795,7 @@ static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, cons
{
/*
This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. Steps:
- *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)
+ *) if no Adam7: 1) unfilter 2) remove padding bits (= possible extra bits per scanline if bpp < 8)
*) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace
NOTE: the in buffer will be overwritten with intermediate data!
*/
@@ -3763,7 +3763,7 @@ static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const
{
/*
This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:
- *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter
+ *) if no Adam7: 1) add padding bits (= possible extra bits per scanline if bpp < 8) 2) filter
*) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter
*/
unsigned bpp = LodePNG_InfoColor_getBpp(&infoPng->color);
@@ -3791,7 +3791,7 @@ static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const
}
ucvector_cleanup(&padded);
}
- else error = filter(*out, in, w, h, &infoPng->color); /*we can immediatly filter into the out buffer, no other steps needed*/
+ else error = filter(*out, in, w, h, &infoPng->color); /*we can immediately filter into the out buffer, no other steps needed*/
}
}
else /*interlaceMethod is 1 (Adam7)*/
diff --git a/src/markdown.cpp b/src/markdown.cpp
index 72bab84..fdf1b0f 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -2375,7 +2375,7 @@ void MarkdownFileParser::parseInput(const char *fileName,
Doxygen::markdownSupport = TRUE;
bool needsEntry = FALSE;
- Protection prot;
+ Protection prot=Public;
while (parseCommentBlock(
this,
current,
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 66814a6..29595cf 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -738,7 +738,7 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
const char *t,const char *na,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,MemberType mt,
const ArgumentList *tal,const ArgumentList *al
- ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na))
+ ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na)), visited(FALSE)
{
//printf("MemberDef::MemberDef(%s)\n",na);
m_impl = new MemberDefImpl;
@@ -748,7 +748,7 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
m_isDestructorCached = 0;
}
-MemberDef::MemberDef(const MemberDef &md) : Definition(md)
+MemberDef::MemberDef(const MemberDef &md) : Definition(md), visited(FALSE)
{
m_impl = new MemberDefImpl;
m_isLinkableCached = 0;
@@ -3507,7 +3507,7 @@ void MemberDef::addListReference(Definition *)
addRefItem(xrefItems,
qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
memLabel,
- getOutputFileBase()+"#"+anchor(),memName,memArgs);
+ getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
}
}
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 51eb4a1..aa0a36e 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -326,7 +326,7 @@ void MemberGroup::addListReferences(Definition *def)
name,
theTranslator->trGroup(TRUE,TRUE),
name,
- grpHeader,0);
+ grpHeader,0,def);
}
}
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 68b3bcb..95726a0 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -33,16 +33,35 @@
#include "config.h"
#include "docparser.h"
-MemberList::MemberList()
+MemberList::MemberList() : m_listType(MemberListType_pubMethods)
{
memberGroupList=0;
+ m_varCnt=0;
+ m_funcCnt=0;
+ m_enumCnt=0;
+ m_enumValCnt=0;
+ m_typeCnt=0;
+ m_protoCnt=0;
+ m_defCnt=0;
+ m_friendCnt=0;
m_numDecMembers=-1; // special value indicating that value needs to be computed
m_numDocMembers=-1; // special value indicating that value needs to be computed
+ m_inGroup=FALSE;
+ m_inFile=FALSE;
+ m_needsSorting=FALSE;
}
MemberList::MemberList(MemberListType lt) : m_listType(lt)
{
memberGroupList=0;
+ m_varCnt=0;
+ m_funcCnt=0;
+ m_enumCnt=0;
+ m_enumValCnt=0;
+ m_typeCnt=0;
+ m_protoCnt=0;
+ m_defCnt=0;
+ m_friendCnt=0;
m_numDecMembers=-1; // special value indicating that value needs to be computed
m_numDocMembers=-1; // special value indicating that value needs to be computed
m_inGroup=FALSE;
diff --git a/src/message.cpp b/src/message.cpp
index 11b4502..4156720 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -152,15 +152,16 @@ static void format_warn(const char *file,int line,const char *text)
static void do_warn(const char *tag, const char *file, int line, const char *prefix, const char *fmt, va_list args)
{
if (!Config_getBool(tag)) return; // warning type disabled
- char text[40960];
+ const int bufSize = 40960;
+ char text[bufSize];
int l=0;
if (prefix)
{
- strcpy(text,prefix);
+ qstrncpy(text,prefix,bufSize);
l=strlen(prefix);
}
- vsnprintf(text+l, 40960-l, fmt, args);
- text[40960-1]='\0';
+ vsnprintf(text+l, bufSize-l, fmt, args);
+ text[bufSize-1]='\0';
format_warn(file,line,text);
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 8580a2e..f7c8123 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -832,7 +832,8 @@ void NamespaceDef::addListReferences()
theTranslator->trModule(TRUE,TRUE) :
theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),displayName(),
- 0
+ 0,
+ this
);
}
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
@@ -1087,7 +1088,7 @@ MemberList *NamespaceDef::getMemberList(MemberListType lt) const
void NamespaceDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0,DefinitionIntf::TypeNamespace);
+ if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0);
}
void NamespaceDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
diff --git a/src/pre.l b/src/pre.l
index 8d2b5f7..9e88b0d 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -71,8 +71,8 @@ struct CondCtx
struct FileState
{
- FileState(int size) : fileBuf(size),
- oldFileBuf(0), oldFileBufPos(0) {}
+ FileState(int size) : lineNr(1), fileBuf(size),
+ oldFileBuf(0), oldFileBufPos(0), bufState(0) {}
int lineNr;
BufStr fileBuf;
BufStr *oldFileBuf;
diff --git a/src/pyscanner.l b/src/pyscanner.l
index c67875e..1ac7b7a 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -938,6 +938,7 @@ STARTDOCSYMS "##"
}
")" { // end of parameter list
+ current->args = argListToString(current->argList);
}
":"{B} {
@@ -1268,6 +1269,19 @@ STARTDOCSYMS "##"
BEGIN(VariableEnd);
}
}
+ {TRIDOUBLEQUOTE} { // start of a comment block
+ g_specialBlock = FALSE;
+ current->program+=yytext;
+ initTriDoubleQuoteBlock();
+ BEGIN(TripleComment);
+ }
+
+ {TRISINGLEQUOTE} { // start of a comment block
+ g_specialBlock = FALSE;
+ current->program+=yytext;
+ initTriSingleQuoteBlock();
+ BEGIN(TripleComment);
+ }
"\"" {
g_stringContext=YY_START;
current->initializer+="\"";
diff --git a/src/reflist.cpp b/src/reflist.cpp
index ee6ac91..3cc7694 100644
--- a/src/reflist.cpp
+++ b/src/reflist.cpp
@@ -20,6 +20,7 @@
#include "reflist.h"
#include "util.h"
#include "ftextstream.h"
+#include "definition.h"
/*! Create a list of items that are cross referenced with documentation blocks
* @param listName String representing the name of the list.
@@ -144,6 +145,12 @@ void RefList::generatePage()
doc += "\\anchor ";
doc += item->listAnchor;
doc += "\n";
+ if (item->scope)
+ {
+ doc += "\\_setscope ";
+ doc += item->scope->name();
+ doc += " ";
+ }
doc += item->prefix;
doc += " \\_internalref ";
doc += item->name;
@@ -166,6 +173,7 @@ void RefList::generatePage()
doc += "</dd>";
}
doc += "</dl>\n";
+ //printf("generatePage('%s')\n",doc.data());
addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0);
}
diff --git a/src/reflist.h b/src/reflist.h
index 97b1420..5b647ea 100644
--- a/src/reflist.h
+++ b/src/reflist.h
@@ -23,14 +23,17 @@
#include <qlist.h>
#include "sortdict.h"
+class Definition;
+
/** This struct represents an item in the list of references. */
struct RefItem
{
- RefItem() /*: written(FALSE)*/ {}
+ RefItem() : scope(0) {}
QCString text; //!< text of the item.
QCString listAnchor; //!< anchor in the list
QCString prefix; //!< type prefix for the name
+ Definition *scope; //!< scope to use for references.
QCString name; //!< name of the entity containing the reference
QCString title; //!< display name of the entity
QCString args; //!< optional arguments for the entity (if function)
diff --git a/src/res2cc_cmd.py b/src/res2cc_cmd.py
index 40d2906..772ac84 100755
--- a/src/res2cc_cmd.py
+++ b/src/res2cc_cmd.py
@@ -1,3 +1,19 @@
+#!/usr/bin/python
+# Script that compiles a set of resources into a single C++ source file. The C++ file
+# offers an initResources() function, which registers the resources with the resource
+# manager (class ResourceMgr)
+#
+# Copyright (C) 1997-2014 by Dimitri van Heesch.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation under the terms of the GNU General Public License is hereby
+# granted. No representations are made about the suitability of this software
+# for any purpose. It is provided "as is" without express or implied warranty.
+# See the GNU General Public License for more details.
+#
+# Documents produced by Doxygen are derivative works derived from the
+# input used in their production; they are not affected by this license.
+#
from __future__ import print_function
from os import listdir, stat, walk
from os.path import isfile, join, splitext
@@ -78,7 +94,7 @@ class LumaFile(File):
def main():
if len(sys.argv)<3:
- sys.exit('Usage: %s directory output_file.c' % sys.argv[0])
+ sys.exit('Usage: %s directory output_file.cpp' % sys.argv[0])
directory = sys.argv[1]
files = []
for dirName, subdirList, fileList in walk(directory):
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index c0dca5b..354469b 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -66,6 +66,7 @@ RTFGenerator::RTFGenerator() : OutputGenerator()
m_bstartedBody = FALSE;
m_omitParagraph = FALSE;
m_numCols = 0;
+ m_prettyCode=Config_getBool("RTF_SOURCE_CODE");
}
RTFGenerator::~RTFGenerator()
@@ -539,6 +540,8 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
+
switch (is)
{
case isTitlePageStart:
@@ -810,6 +813,11 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << fd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+ if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
+ {
+ t << "\\par " << rtf_Style_Reset << endl;
+ t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"" << fd->getSourceFileBase() << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+ }
isFirst=FALSE;
}
else
@@ -819,6 +827,11 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << fd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+ if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
+ {
+ t << "\\par " << rtf_Style_Reset << endl;
+ t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"" << fd->getSourceFileBase() << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+ }
}
}
}
diff --git a/src/rtfgen.h b/src/rtfgen.h
index 7b31673..2617ee6 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -126,7 +126,7 @@ class RTFGenerator : public OutputGenerator
void writeAnchor(const char *fileName,const char *name);
void startCodeFragment();
void endCodeFragment();
- void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
+ void writeLineNumber(const char *,const char *,const char *,int l) { t << QString("%1").arg(l,5) << " "; }
void startCodeLine(bool) { col=0; }
void endCodeLine() { lineBreak(); }
void startEmphasis() { t << "{\\i "; }
@@ -277,6 +277,7 @@ class RTFGenerator : public OutputGenerator
void incrementIndentLevel();
void decrementIndentLevel();
int col;
+ bool m_prettyCode;
bool m_bstartedBody; // has startbody been called yet?
int m_listLevel; // // RTF does not really have a addative indent...manually set list level.
diff --git a/src/rtfstyle.h b/src/rtfstyle.h
index 4f0a03f..ae7e456 100644
--- a/src/rtfstyle.h
+++ b/src/rtfstyle.h
@@ -65,7 +65,7 @@ struct StyleData
unsigned index; // index in style-sheet, i.e. number in s-clause
char* reference; // everything required to apply the style
- char* definition; // aditional tags like \snext and style name
+ char* definition; // additional tags like \snext and style name
StyleData(const char* reference, const char* definition);
~StyleData();
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index da7c391..22727fe 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -1354,26 +1354,6 @@ void writeJavascriptSearchIndex()
Doxygen::indexList->addStyleSheetFile("search/search.js");
}
-void writeSearchCategories(FTextStream &t)
-{
-#if 0
- static SearchIndexCategoryMapping map;
- int i,j=0;
- for (i=0;i<NUM_SEARCH_INDICES;i++)
- {
- if (g_searchIndexCount[i]>0)
- {
- t << "<a class=\"SelectItem\" href=\"javascript:void(0)\" "
- << "onclick=\"searchBox.OnSelectItem(" << j << ")\">"
- << "<span class=\"SelectionMark\">&#160;</span>"
- << convertToXML(map.categoryLabel[i])
- << "</a>";
- j++;
- }
- }
-#endif
-}
-
//---------------------------------------------------------------------------------------------
void initSearchIndexer()
diff --git a/src/searchindex.h b/src/searchindex.h
index 872c0d3..17d39a2 100644
--- a/src/searchindex.h
+++ b/src/searchindex.h
@@ -110,6 +110,5 @@ class SearchIndexExternal : public SearchIndexIntf
//------- client side search index ----------------------
void writeJavascriptSearchIndex();
-void writeSearchCategories(FTextStream &t);
#endif
diff --git a/src/store.cpp b/src/store.cpp
index 8916015..8d9a0cd 100644
--- a/src/store.cpp
+++ b/src/store.cpp
@@ -382,9 +382,9 @@ int Store::read(char *buf,uint size)
void Store::printFreeList()
{
printf("FreeList: ");
- portable_off_t pos = m_head->pos;
- while (pos)
+ while (m_head)
{
+ portable_off_t pos = m_head->pos;
printf("%x ",(int)pos);
m_head = m_head->next;
}
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 4b21047..be0472a 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -251,8 +251,20 @@ class TagFileParser : public QXmlDefaultHandler
{
m_startElementHandlers.setAutoDelete(TRUE);
m_endElementHandlers.setAutoDelete(TRUE);
+ m_curClass=0;
+ m_curFile=0;
+ m_curNamespace=0;
+ m_curPackage=0;
+ m_curGroup=0;
+ m_curPage=0;
+ m_curDir=0;
+ m_curMember=0;
+ m_curEnumValue=0;
+ m_curIncludes=0;
+ m_state = Invalid;
+ m_locator = 0;
}
-
+
void setDocumentLocator ( QXmlLocator * locator )
{
m_locator = locator;
diff --git a/src/template.cpp b/src/template.cpp
index 2a40bfe..100de16 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -116,7 +116,7 @@ static QCString replace(const char *s,char csrc,char cdst)
class TemplateVariant::Private
{
public:
- Private() : raw(FALSE) {}
+ Private(Type t) : type(t), intVal(0), boolVal(TRUE), strukt(0), list(0), raw(FALSE) {}
Type type;
int intVal;
QCString strVal;
@@ -129,60 +129,52 @@ class TemplateVariant::Private
TemplateVariant::TemplateVariant()
{
- p = new Private;
- p->type=None;
+ p = new Private(None);
}
TemplateVariant::TemplateVariant(bool b)
{
- p = new Private;
- p->type = Bool;
+ p = new Private(Bool);
p->boolVal = b;
}
TemplateVariant::TemplateVariant(int v)
{
- p = new Private;
- p->type = Integer;
+ p = new Private(Integer);
p->intVal = v;
}
TemplateVariant::TemplateVariant(const char *s,bool raw)
{
- p = new Private;
- p->type = String;
+ p = new Private(String);
p->strVal = s;
p->raw = raw;
}
TemplateVariant::TemplateVariant(const QCString &s,bool raw)
{
- p = new Private;
- p->type = String;
+ p = new Private(String);
p->strVal = s;
p->raw = raw;
}
TemplateVariant::TemplateVariant(TemplateStructIntf *s)
{
- p = new Private;
- p->type = Struct;
+ p = new Private(Struct);
p->strukt = s;
p->strukt->addRef();
}
TemplateVariant::TemplateVariant(TemplateListIntf *l)
{
- p = new Private;
- p->type = List;
+ p = new Private(List);
p->list = l;
p->list->addRef();
}
TemplateVariant::TemplateVariant(const TemplateVariant::Delegate &delegate)
{
- p = new Private;
- p->type = Function;
+ p = new Private(Function);
p->delegate = delegate;
}
@@ -195,8 +187,7 @@ TemplateVariant::~TemplateVariant()
TemplateVariant::TemplateVariant(const TemplateVariant &v)
{
- p = new Private;
- p->type = v.p->type;
+ p = new Private(v.p->type);
p->raw = v.p->raw;
switch (p->type)
{
@@ -1436,11 +1427,11 @@ class ExprAstVariable : public ExprAst
const QCString &name() const { return m_name; }
virtual TemplateVariant resolve(TemplateContext *c)
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
TemplateVariant v = c->get(m_name);
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
if (!v.isValid())
{
- ci->warn(ci->templateName(),ci->line(),"undefined variable '%s' in expression",m_name.data());
+ if (ci) ci->warn(ci->templateName(),ci->line(),"undefined variable '%s' in expression",m_name.data());
}
return v;
}
@@ -1487,6 +1478,7 @@ class ExprAstFilter : public ExprAst
TemplateVariant apply(const TemplateVariant &v,TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return v; // should not happen
TRACE(("Applying filter '%s' to '%s' (type=%d)\n",m_name.data(),v.toString().data(),v.type()));
TemplateVariant arg;
if (m_arg) arg = m_arg->resolve(c);
@@ -1578,6 +1570,7 @@ class ExprAstBinary : public ExprAst
virtual TemplateVariant resolve(TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return TemplateVariant(); // should not happen
TemplateVariant lhs = m_lhs->resolve(c);
TemplateVariant rhs = m_rhs ? m_rhs->resolve(c) : TemplateVariant();
switch(m_operator)
@@ -2609,6 +2602,7 @@ class TemplateNodeText : public TemplateNode
{
//printf("TemplateNodeText::render(%s)\n",m_data.data());
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (ci->spacelessEnabled())
{
ts << ci->spacelessIntf()->remove(m_data);
@@ -2647,6 +2641,7 @@ class TemplateNodeVariable : public TemplateNode
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_var)
{
@@ -2797,6 +2792,7 @@ class TemplateNodeIf : public TemplateNodeCreator<TemplateNodeIf>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
//printf("TemplateNodeIf::render #trueNodes=%d #falseNodes=%d\n",m_trueNodes.count(),m_falseNodes.count());
bool processed=FALSE;
@@ -2861,6 +2857,7 @@ class TemplateNodeRepeat : public TemplateNodeCreator<TemplateNodeRepeat>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
TemplateVariant v;
if (m_expr && (v=m_expr->resolve(c)).type()==TemplateVariant::Integer)
@@ -2973,6 +2970,7 @@ class TemplateNodeRange : public TemplateNodeCreator<TemplateNodeRange>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
//printf("TemplateNodeRange::render #loopNodes=%d\n",
// m_loopNodes.count());
@@ -3134,6 +3132,7 @@ class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
//printf("TemplateNodeFor::render #loopNodes=%d #emptyNodes=%d\n",
// m_loopNodes.count(),m_emptyNodes.count());
@@ -3235,6 +3234,7 @@ class TemplateNodeMsg : public TemplateNodeCreator<TemplateNodeMsg>
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
TemplateEscapeIntf *escIntf = ci->escapeIntf();
ci->setActiveEscapeIntf(0); // avoid escaping things we send to standard out
@@ -3276,6 +3276,7 @@ class TemplateNodeBlock : public TemplateNodeCreator<TemplateNodeBlock>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
TemplateImpl *t = getTemplate();
if (t)
@@ -3356,6 +3357,7 @@ class TemplateNodeExtend : public TemplateNodeCreator<TemplateNodeExtend>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_extendExpr==0) return;
@@ -3374,7 +3376,6 @@ class TemplateNodeExtend : public TemplateNodeCreator<TemplateNodeExtend>
if (baseTemplate)
{
// fill block context
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
TemplateBlockContext *bc = ci->blockContext();
// add overruling blocks to the context
@@ -3435,6 +3436,7 @@ class TemplateNodeInclude : public TemplateNodeCreator<TemplateNodeInclude>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_includeExpr)
{
@@ -3514,6 +3516,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_templateExpr && m_fileExpr)
{
@@ -3661,6 +3664,7 @@ class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
{
//printf("TemplateNodeTree::render()\n");
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
TemplateVariant v = m_treeExpr->resolve(c);
const TemplateListIntf *list = v.toList();
@@ -3732,9 +3736,10 @@ class TemplateNodeIndexEntry : public TemplateNodeCreator<TemplateNodeIndexEntry
}
void render(FTextStream &, TemplateContext *c)
{
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (!m_name.isEmpty())
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
ci->setLocation(m_templateName,m_line);
QListIterator<Mapping> it(m_args);
Mapping *mapping;
@@ -3775,9 +3780,10 @@ class TemplateNodeOpenSubIndex : public TemplateNodeCreator<TemplateNodeOpenSubI
}
void render(FTextStream &, TemplateContext *c)
{
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (!m_name.isEmpty())
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
ci->setLocation(m_templateName,m_line);
ci->openSubIndex(m_name);
}
@@ -3810,9 +3816,10 @@ class TemplateNodeCloseSubIndex : public TemplateNodeCreator<TemplateNodeCloseSu
}
void render(FTextStream &, TemplateContext *c)
{
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (!m_name.isEmpty())
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
ci->setLocation(m_templateName,m_line);
ci->closeSubIndex(m_name);
}
@@ -3873,6 +3880,7 @@ class TemplateNodeWith : public TemplateNodeCreator<TemplateNodeWith>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
c->push();
QListIterator<Mapping> it(m_args);
@@ -3984,6 +3992,7 @@ class TemplateNodeSet : public TemplateNodeCreator<TemplateNodeSet>
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_mapping)
{
@@ -4014,6 +4023,7 @@ class TemplateNodeSpaceless : public TemplateNodeCreator<TemplateNodeSpaceless>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
bool wasSpaceless = ci->spacelessEnabled();
ci->enableSpaceless(TRUE);
@@ -4056,6 +4066,7 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (!m_var.isEmpty() && m_listExpr && m_patternExpr)
{
@@ -4152,9 +4163,15 @@ class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource>
}
TRACE(("}TemplateNodeResource(%s)\n",data.data()));
}
+ ~TemplateNodeResource()
+ {
+ delete m_resExpr;
+ delete m_asExpr;
+ }
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_resExpr)
{
@@ -4712,12 +4729,13 @@ TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const cha
void TemplateImpl::render(FTextStream &ts, TemplateContext *c)
{
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (!m_nodes.isEmpty())
{
TemplateNodeExtend *ne = dynamic_cast<TemplateNodeExtend*>(m_nodes.getFirst());
if (ne==0) // normal template, add blocks to block context
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
TemplateBlockContext *bc = ci->blockContext();
QListIterator<TemplateNode> li(m_nodes);
TemplateNode *n;
diff --git a/src/translator_hr.h b/src/translator_hr.h
index 70dba21..98a746a 100644
--- a/src/translator_hr.h
+++ b/src/translator_hr.h
@@ -943,9 +943,9 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2
* be followed by a single name or by a list of names
* of the category.
*/
- virtual QCString trMember(bool first_capital, bool singular)
+ virtual QCString trMember(bool, bool singular)
{
- QCString result((first_capital ? "član" : "član"));
+ QCString result("član");
if (!singular) result+="ovi";
return result;
}
diff --git a/src/util.cpp b/src/util.cpp
index bc39cfb..000de53 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -3700,7 +3700,7 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwr
ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
Argument *srcA,*dstA;
- for (;(srcA=srcAli.current(),dstA=dstAli.current());++srcAli,++dstAli)
+ for (;(srcA=srcAli.current()) && (dstA=dstAli.current());++srcAli,++dstAli)
{
if (srcA->defval.isEmpty() && !dstA->defval.isEmpty())
{
@@ -4716,6 +4716,7 @@ bool resolveLink(/* in */ const char *scName,
*resContext=0;
QCString linkRef=lr;
+ QCString linkRefWithoutTemplates = stripTemplateSpecifiersFromScope(linkRef,FALSE);
//printf("ResolveLink linkRef=%s inSee=%d\n",lr,inSeeBlock);
FileDef *fd;
GroupDef *gd;
@@ -4772,6 +4773,12 @@ bool resolveLink(/* in */ const char *scName,
resAnchor=cd->anchor();
return TRUE;
}
+ else if ((cd=getClass(linkRefWithoutTemplates))) // C#/Java generic class link
+ {
+ *resContext=cd;
+ resAnchor=cd->anchor();
+ return TRUE;
+ }
else if ((cd=getClass(linkRef+"-p"))) // Obj-C protocol link
{
*resContext=cd;
@@ -6027,10 +6034,11 @@ QCString substituteTemplateArgumentsInString(
// for its template instance argument.
bool found=FALSE;
for (formAli.toFirst();
- (formArg=formAli.current()) && !found && (actArg=actAli.current());
+ (formArg=formAli.current()) && !found;
++formAli,++actAli
)
{
+ actArg = actAli.current();
if (formArg->type.left(6)=="class " && formArg->name.isEmpty())
{
formArg->name = formArg->type.mid(6);
@@ -6046,7 +6054,7 @@ QCString substituteTemplateArgumentsInString(
//printf("n=%s formArg->type='%s' formArg->name='%s' formArg->defval='%s'\n",
// n.data(),formArg->type.data(),formArg->name.data(),formArg->defval.data());
//printf(">> formArg->name='%s' actArg->type='%s' actArg->name='%s'\n",
- // formArg->name.data(),actArg->type.data(),actArg->name.data()
+ // formArg->name.data(),actArg ? actArg->type.data() : "",actArg ? actArg->name.data() : ""
// );
if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
{
@@ -6287,7 +6295,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
{
// append documentation block to the page.
pd->setDocumentation(doc,fileName,startLine);
- //printf("Adding page docs `%s' pi=%p name=%s\n",doc.data(),pi,name);
+ //printf("Adding page docs `%s' pi=%p name=%s\n",doc.data(),pd,name);
}
else // new page
{
@@ -6364,7 +6372,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
void addRefItem(const QList<ListItemInfo> *sli,
const char *key,
- const char *prefix, const char *name,const char *title,const char *args)
+ const char *prefix, const char *name,const char *title,const char *args,Definition *scope)
{
//printf("addRefItem(sli=%p,key=%s,prefix=%s,name=%s,title=%s,args=%s)\n",sli,key,prefix,name,title,args);
if (sli && key && key[0]!='@') // check for @ to skip anonymous stuff (see bug427012)
@@ -6389,6 +6397,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
ASSERT(item!=0);
item->prefix = prefix;
+ item->scope = scope;
item->name = name;
item->title = title;
item->args = args;
@@ -6500,6 +6509,8 @@ void filterLatexString(FTextStream &t,const char *str,
break;
case '"': t << "\\char`\\\"{}";
break;
+ case '\'': t << "\\textquotesingle{}";
+ break;
default:
//if (!insideTabbing && forceBreaks && c!=' ' && *p!=' ')
@@ -6557,16 +6568,25 @@ QCString rtfFormatBmkStr(const char *name)
return *tag;
}
-QCString stripExtension(const char *fName)
+bool checkExtension(const char *fName, const char *ext)
+{
+ return (QCString(fName).right(QCString(ext).length())==ext);
+}
+
+QCString stripExtensionGeneral(const char *fName, const char *ext)
{
QCString result=fName;
- if (result.right(Doxygen::htmlFileExtension.length())==Doxygen::htmlFileExtension)
+ if (result.right(QCString(ext).length())==QCString(ext))
{
- result=result.left(result.length()-Doxygen::htmlFileExtension.length());
+ result=result.left(result.length()-QCString(ext).length());
}
return result;
}
+QCString stripExtension(const char *fName)
+{
+ return stripExtensionGeneral(fName, Doxygen::htmlFileExtension);
+}
void replaceNamespaceAliases(QCString &scope,int i)
{
diff --git a/src/util.h b/src/util.h
index 07744ca..937b222 100644
--- a/src/util.h
+++ b/src/util.h
@@ -316,7 +316,7 @@ int filterCRLF(char *buf,int len);
void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
const char *key,
- const char *name,const char *title,const char *args);
+ const char *name,const char *title,const char *args,Definition *scope);
PageDef *addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,QList<SectionInfo> *anchors,
@@ -340,6 +340,10 @@ QCString rtfFormatBmkStr(const char *name);
QCString linkToText(SrcLangExt lang,const char *link,bool isFileName);
+bool checkExtension(const char *fName, const char *ext);
+
+QCString stripExtensionGeneral(const char *fName, const char *ext);
+
QCString stripExtension(const char *fName);
void replaceNamespaceAliases(QCString &scope,int i);
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index a4e9906..3f7cd1d 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -737,7 +737,7 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
if (mdef) return mdef;
// nothing found so far
- // if we are an architecture or package body search in entitiy
+ // if we are an architecture or package body search in entity
if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 66f455e..afab1d3 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -39,12 +39,15 @@ static void visitCaption(XmlDocVisitor *parent, QList<DocNode> children)
for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
}
-static void visitPreStart(FTextStream &t, const char *cmd, const bool doCaption, XmlDocVisitor *parent, QList<DocNode> children, QCString name, DocImage::Type type, QCString width, QCString height)
+static void visitPreStart(FTextStream &t, const char *cmd, const bool doCaption,
+ XmlDocVisitor *parent, QList<DocNode> children,
+ const QCString &name, bool writeType, DocImage::Type type, const QCString &width,
+ const QCString &height)
{
QCString tmpStr;
t << "<" << cmd;
- if (type != DocImage::None)
+ if (writeType)
{
t << " type=\"";
switch(type)
@@ -92,7 +95,7 @@ static void visitPreStart(FTextStream &t, const char *cmd, const bool doCaption,
t << ">";
}
-static void visitPostEnd(FTextStream &t, const char *cmd, const bool doCaption)
+static void visitPostEnd(FTextStream &t, const char *cmd)
{
t << "</" << cmd << ">" << endl;
}
@@ -264,20 +267,20 @@ void XmlDocVisitor::visit(DocVerbatim *s)
filter(s->text());
m_t << "</docbookonly>";
break;
- case DocVerbatim::Dot:
- visitPreStart(m_t, "dot", s->hasCaption(), this, s->children(), QCString(""), DocImage::None, s->width(), s->height());
+ case DocVerbatim::Dot:
+ visitPreStart(m_t, "dot", s->hasCaption(), this, s->children(), QCString(""), FALSE, DocImage::Html, s->width(), s->height());
filter(s->text());
- visitPostEnd(m_t, "dot", s->hasCaption());
+ visitPostEnd(m_t, "dot");
break;
- case DocVerbatim::Msc:
- visitPreStart(m_t, "msc", s->hasCaption(), this, s->children(), QCString(""), DocImage::None, s->width(), s->height());
+ case DocVerbatim::Msc:
+ visitPreStart(m_t, "msc", s->hasCaption(), this, s->children(), QCString(""), FALSE, DocImage::Html, s->width(), s->height());
filter(s->text());
- visitPostEnd(m_t, "msc", s->hasCaption());
+ visitPostEnd(m_t, "msc");
break;
case DocVerbatim::PlantUML:
- visitPreStart(m_t, "plantuml", s->hasCaption(), this, s->children(), QCString(""), DocImage::None, s->width(), s->height());
+ visitPreStart(m_t, "plantuml", s->hasCaption(), this, s->children(), QCString(""), FALSE, DocImage::Html, s->width(), s->height());
filter(s->text());
- visitPostEnd(m_t, "plantuml", s->hasCaption());
+ visitPostEnd(m_t, "plantuml");
break;
}
}
@@ -754,7 +757,7 @@ void XmlDocVisitor::visitPre(DocImage *img)
{
baseName=baseName.right(baseName.length()-i-1);
}
- visitPreStart(m_t, "image", FALSE, this, img->children(), baseName, img->type(), img->width(), img->height());
+ visitPreStart(m_t, "image", FALSE, this, img->children(), baseName, TRUE, img->type(), img->width(), img->height());
// copy the image to the output dir
QFile inImage(img->name());
@@ -775,43 +778,43 @@ void XmlDocVisitor::visitPre(DocImage *img)
void XmlDocVisitor::visitPost(DocImage *)
{
if (m_hide) return;
- visitPostEnd(m_t, "image", FALSE);
+ visitPostEnd(m_t, "image");
}
void XmlDocVisitor::visitPre(DocDotFile *df)
{
if (m_hide) return;
- visitPreStart(m_t, "dotfile", FALSE, this, df->children(), df->file(), DocImage::None, df->width(), df->height());
+ visitPreStart(m_t, "dotfile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
}
void XmlDocVisitor::visitPost(DocDotFile *)
{
if (m_hide) return;
- visitPostEnd(m_t, "dotfile", FALSE);
+ visitPostEnd(m_t, "dotfile");
}
void XmlDocVisitor::visitPre(DocMscFile *df)
{
if (m_hide) return;
- visitPreStart(m_t, "mscfile", FALSE, this, df->children(), df->file(), DocImage::None, df->width(), df->height());
+ visitPreStart(m_t, "mscfile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
}
void XmlDocVisitor::visitPost(DocMscFile *)
{
if (m_hide) return;
- visitPostEnd(m_t, "mscfile", FALSE);
+ visitPostEnd(m_t, "mscfile");
}
void XmlDocVisitor::visitPre(DocDiaFile *df)
{
if (m_hide) return;
- visitPreStart(m_t, "diafile", FALSE, this, df->children(), df->file(), DocImage::None, df->width(), df->height());
+ visitPreStart(m_t, "diafile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
}
void XmlDocVisitor::visitPost(DocDiaFile *)
{
if (m_hide) return;
- visitPostEnd(m_t, "diafile", FALSE);
+ visitPostEnd(m_t, "diafile");
}
void XmlDocVisitor::visitPre(DocLink *lnk)
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 01d7f9d..8e1d02f 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -224,12 +224,11 @@ class XMLCodeGenerator : public CodeOutputInterface
{
public:
- XMLCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1),
- m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE),
- m_insideSpecialHL(FALSE) {}
+ XMLCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1), m_isMemberRef(FALSE), m_col(0),
+ m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE), m_insideSpecialHL(FALSE) {}
virtual ~XMLCodeGenerator() { }
-
- void codify(const char *text)
+
+ void codify(const char *text)
{
XML_DB(("(codify \"%s\")\n",text));
if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
@@ -237,11 +236,11 @@ class XMLCodeGenerator : public CodeOutputInterface
m_t << "<highlight class=\"normal\">";
m_normalHLNeedStartTag=FALSE;
}
- writeXMLCodeString(m_t,text,col);
+ writeXMLCodeString(m_t,text,m_col);
}
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
- const char *tooltip)
+ const char *tooltip)
{
XML_DB(("(writeCodeLink)\n"));
if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
@@ -250,7 +249,7 @@ class XMLCodeGenerator : public CodeOutputInterface
m_normalHLNeedStartTag=FALSE;
}
writeXMLLink(m_t,ref,file,anchor,name,tooltip);
- col+=qstrlen(name);
+ m_col+=qstrlen(name);
}
void writeTooltip(const char *, const DocLinkInfo &, const char *,
const char *, const SourceLinkInfo &, const SourceLinkInfo &
@@ -258,7 +257,7 @@ class XMLCodeGenerator : public CodeOutputInterface
{
XML_DB(("(writeToolTip)\n"));
}
- void startCodeLine(bool)
+ void startCodeLine(bool)
{
XML_DB(("(startCodeLine)\n"));
m_t << "<codeline";
@@ -282,11 +281,11 @@ class XMLCodeGenerator : public CodeOutputInterface
m_t << " external=\"" << m_external << "\"";
}
}
- m_t << ">";
+ m_t << ">";
m_insideCodeLine=TRUE;
- col=0;
+ m_col=0;
}
- void endCodeLine()
+ void endCodeLine()
{
XML_DB(("(endCodeLine)\n"));
if (!m_insideSpecialHL && !m_normalHLNeedStartTag)
@@ -300,7 +299,7 @@ class XMLCodeGenerator : public CodeOutputInterface
m_external.resize(0);
m_insideCodeLine=FALSE;
}
- void startFontClass(const char *colorClass)
+ void startFontClass(const char *colorClass)
{
XML_DB(("(startFontClass)\n"));
if (m_insideCodeLine && !m_insideSpecialHL && !m_normalHLNeedStartTag)
@@ -325,7 +324,7 @@ class XMLCodeGenerator : public CodeOutputInterface
const char *anchorId,int l)
{
XML_DB(("(writeLineNumber)\n"));
- // we remember the information provided here to use it
+ // we remember the information provided here to use it
// at the <codeline> start tag.
m_lineNumber = l;
if (compId)
@@ -349,12 +348,12 @@ class XMLCodeGenerator : public CodeOutputInterface
}
private:
- FTextStream &m_t;
+ FTextStream &m_t;
QCString m_refId;
QCString m_external;
int m_lineNumber;
bool m_isMemberRef;
- int col;
+ int m_col;
bool m_insideCodeLine;
bool m_normalHLNeedStartTag;
@@ -1251,7 +1250,8 @@ static void generateXMLForClass(ClassDef *cd,FTextStream &ti)
writeXMLHeader(t);
t << " <compounddef id=\""
<< classOutputFileBase(cd) << "\" kind=\""
- << cd->compoundTypeString() << "\" prot=\"";
+ << cd->compoundTypeString() << "\" language=\""
+ << langToString(cd->getLanguage()) << "\" prot=\"";
switch (cd->protection())
{
case Public: t << "public"; break;
@@ -1448,8 +1448,9 @@ static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti)
//t.setEncoding(FTextStream::UnicodeUTF8);
writeXMLHeader(t);
- t << " <compounddef id=\""
- << nd->getOutputFileBase() << "\" kind=\"namespace\">" << endl;
+ t << " <compounddef id=\"" << nd->getOutputFileBase()
+ << "\" kind=\"namespace\" language=\""
+ << langToString(nd->getLanguage()) << "\">" << endl;
t << " <compoundname>";
writeXMLString(t,nd->name());
t << "</compoundname>" << endl;
@@ -1528,8 +1529,9 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti)
//t.setEncoding(FTextStream::UnicodeUTF8);
writeXMLHeader(t);
- t << " <compounddef id=\""
- << fd->getOutputFileBase() << "\" kind=\"file\">" << endl;
+ t << " <compounddef id=\"" << fd->getOutputFileBase()
+ << "\" kind=\"file\" language=\""
+ << langToString(fd->getLanguage()) << "\">" << endl;
t << " <compoundname>";
writeXMLString(t,fd->name());
t << "</compoundname>" << endl;
diff --git a/templates/xml/compound.xsd b/templates/xml/compound.xsd
index be897c3..50e532e 100644
--- a/templates/xml/compound.xsd
+++ b/templates/xml/compound.xsd
@@ -39,6 +39,7 @@
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" />
<xsd:attribute name="kind" type="DoxCompoundKind" />
+ <xsd:attribute name="language" type="DoxLanguage" use="optional"/>
<xsd:attribute name="prot" type="DoxProtectionKind" />
<xsd:attribute name="final" type="DoxBool" use="optional"/>
<xsd:attribute name="sealed" type="DoxBool" use="optional"/>
@@ -686,6 +687,26 @@
</xsd:restriction>
</xsd:simpleType>
+ <xsd:simpleType name="DoxLanguage">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Unknown" />
+ <xsd:enumeration value="IDL" />
+ <xsd:enumeration value="Java" />
+ <xsd:enumeration value="C#" />
+ <xsd:enumeration value="D" />
+ <xsd:enumeration value="PHP" />
+ <xsd:enumeration value="Objective-C" />
+ <xsd:enumeration value="C++" />
+ <xsd:enumeration value="Javascript" />
+ <xsd:enumeration value="Python" />
+ <xsd:enumeration value="Fortran" />
+ <xsd:enumeration value="VHDL" />
+ <xsd:enumeration value="XML" />
+ <xsd:enumeration value="Tcl" />
+ <xsd:enumeration value="Markdown" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
<xsd:simpleType name="DoxVirtualKind">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="non-virtual" />
diff --git a/testing/008/008__brief_8c.xml b/testing/008/008__brief_8c.xml
index 3416798..4fcf6a6 100644
--- a/testing/008/008__brief_8c.xml
+++ b/testing/008/008__brief_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="008__brief_8c" kind="file">
+ <compounddef id="008__brief_8c" kind="file" language="C++">
<compoundname>008_brief.c</compoundname>
<briefdescription>
<para>A brief description. </para>
diff --git a/testing/009/class_bug.xml b/testing/009/class_bug.xml
index 75a3fa1..dc1ff06 100644
--- a/testing/009/class_bug.xml
+++ b/testing/009/class_bug.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_bug" kind="class" prot="public">
+ <compounddef id="class_bug" kind="class" language="C++" prot="public">
<compoundname>Bug</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_bug_1a1f720954dd97cd1203e80501a6eae74c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_deprecated.xml b/testing/009/class_deprecated.xml
index 2420466..53a6273 100644
--- a/testing/009/class_deprecated.xml
+++ b/testing/009/class_deprecated.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_deprecated" kind="class" prot="public">
+ <compounddef id="class_deprecated" kind="class" language="C++" prot="public">
<compoundname>Deprecated</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_deprecated_1a1d5f6803e72c625727e7083d1722dbf9" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_reminder.xml b/testing/009/class_reminder.xml
index 2f3c641..c4f639e 100644
--- a/testing/009/class_reminder.xml
+++ b/testing/009/class_reminder.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_reminder" kind="class" prot="public">
+ <compounddef id="class_reminder" kind="class" language="C++" prot="public">
<compoundname>Reminder</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_reminder_1a173b5218bb11287b0e86a550d9f0728d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_test.xml b/testing/009/class_test.xml
index 505617f..b9f7f9f 100644
--- a/testing/009/class_test.xml
+++ b/testing/009/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1a9fc54b716f326514a4c5f434137f4fc0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_todo.xml b/testing/009/class_todo.xml
index 0ac555f..c98fdac 100644
--- a/testing/009/class_todo.xml
+++ b/testing/009/class_todo.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_todo" kind="class" prot="public">
+ <compounddef id="class_todo" kind="class" language="C++" prot="public">
<compoundname>Todo</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_todo_1a9e70ec9176ac4c1b20e011b4daddc9d8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/011/category_integer_07_arithmetic_08.xml b/testing/011/category_integer_07_arithmetic_08.xml
index 9d64d98..73308db 100644
--- a/testing/011/category_integer_07_arithmetic_08.xml
+++ b/testing/011/category_integer_07_arithmetic_08.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="category_integer_07_arithmetic_08" kind="category" prot="public">
+ <compounddef id="category_integer_07_arithmetic_08" kind="category" language="Objective-C" prot="public">
<compoundname>Integer(Arithmetic)</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="category_integer_07_arithmetic_08_1a12f411c5872ba3bafb8ea7dd1826cf2a" prot="public" static="no" const="no" explicit="no" inline="no" virt="virtual">
diff --git a/testing/011/interface_integer.xml b/testing/011/interface_integer.xml
index bdbcad2..e922dda 100644
--- a/testing/011/interface_integer.xml
+++ b/testing/011/interface_integer.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="interface_integer" kind="class" prot="public">
+ <compounddef id="interface_integer" kind="class" language="Objective-C" prot="public">
<compoundname>Integer</compoundname>
<basecompoundref prot="public" virt="non-virtual">Object</basecompoundref>
<sectiondef kind="protected-attrib">
diff --git a/testing/013/class_t1.xml b/testing/013/class_t1.xml
index 2a9b415..e0dc3a2 100644
--- a/testing/013/class_t1.xml
+++ b/testing/013/class_t1.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_t1" kind="class" prot="public">
+ <compounddef id="class_t1" kind="class" language="C++" prot="public">
<compoundname>T1</compoundname>
<includes refid="013__class_8h" local="yes">inc/013_class.h</includes>
<briefdescription>
diff --git a/testing/013/class_t2.xml b/testing/013/class_t2.xml
index 9c85ff6..ca534e6 100644
--- a/testing/013/class_t2.xml
+++ b/testing/013/class_t2.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_t2" kind="class" prot="public">
+ <compounddef id="class_t2" kind="class" language="C++" prot="public">
<compoundname>T2</compoundname>
<includes refid="013__class_8h" local="no">013_class.h</includes>
<briefdescription>
diff --git a/testing/013/class_t3.xml b/testing/013/class_t3.xml
index 49e7a16..2fba932 100644
--- a/testing/013/class_t3.xml
+++ b/testing/013/class_t3.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_t3" kind="class" prot="public">
+ <compounddef id="class_t3" kind="class" language="C++" prot="public">
<compoundname>T3</compoundname>
<includes refid="013__class_8h" local="no">013_class.h</includes>
<briefdescription>
diff --git a/testing/013/class_t4.xml b/testing/013/class_t4.xml
index d87571d..907049f 100644
--- a/testing/013/class_t4.xml
+++ b/testing/013/class_t4.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_t4" kind="class" prot="public">
+ <compounddef id="class_t4" kind="class" language="C++" prot="public">
<compoundname>T4</compoundname>
<includes refid="013__class_8h" local="yes">inc/013_class.h</includes>
<briefdescription>
diff --git a/testing/015/015__cond_8c.xml b/testing/015/015__cond_8c.xml
index 39baed7..fb3a06c 100644
--- a/testing/015/015__cond_8c.xml
+++ b/testing/015/015__cond_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="015__cond_8c" kind="file">
+ <compounddef id="015__cond_8c" kind="file" language="C++">
<compoundname>015_cond.c</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="015__cond_8c_1a2521dcda743ec66ad8e030113d6e0c63" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/016/016__copydoc_8c.xml b/testing/016/016__copydoc_8c.xml
index dd1de8f..992122d 100644
--- a/testing/016/016__copydoc_8c.xml
+++ b/testing/016/016__copydoc_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="016__copydoc_8c" kind="file">
+ <compounddef id="016__copydoc_8c" kind="file" language="C++">
<compoundname>016_copydoc.c</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="016__copydoc_8c_1af721a79655a3857b98d70fa6ada8a916" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/018/018__def_8c.xml b/testing/018/018__def_8c.xml
index b55a2eb..0b30670 100644
--- a/testing/018/018__def_8c.xml
+++ b/testing/018/018__def_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="018__def_8c" kind="file">
+ <compounddef id="018__def_8c" kind="file" language="C++">
<compoundname>018_def.c</compoundname>
<sectiondef kind="define">
<memberdef kind="define" id="018__def_8c_1a824c99cb152a3c2e9111a2cb9c34891e" prot="public" static="no">
diff --git a/testing/025/class_test.xml b/testing/025/class_test.xml
index 8d3f076..f0c7abd 100644
--- a/testing/025/class_test.xml
+++ b/testing/025/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1a47b775f65718978f1ffcd96376f8ecfa" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/026/class_test.xml b/testing/026/class_test.xml
index f49cc8d..a332757 100644
--- a/testing/026/class_test.xml
+++ b/testing/026/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<templateparamlist>
<param>
diff --git a/testing/027/struct_car.xml b/testing/027/struct_car.xml
index 0e40922..c73ad34 100644
--- a/testing/027/struct_car.xml
+++ b/testing/027/struct_car.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_car" kind="struct" prot="public">
+ <compounddef id="struct_car" kind="struct" language="C++" prot="public">
<compoundname>Car</compoundname>
<basecompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</basecompoundref>
<sectiondef kind="protected-attrib">
diff --git a/testing/027/struct_object.xml b/testing/027/struct_object.xml
index 107548d..4047446 100644
--- a/testing/027/struct_object.xml
+++ b/testing/027/struct_object.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_object" kind="struct" prot="public">
+ <compounddef id="struct_object" kind="struct" language="C++" prot="public">
<compoundname>Object</compoundname>
<derivedcompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</derivedcompoundref>
<sectiondef kind="private-attrib">
diff --git a/testing/027/struct_truck.xml b/testing/027/struct_truck.xml
index 1da9e2f..14ebde2 100644
--- a/testing/027/struct_truck.xml
+++ b/testing/027/struct_truck.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_truck" kind="struct" prot="public">
+ <compounddef id="struct_truck" kind="struct" language="C++" prot="public">
<compoundname>Truck</compoundname>
<basecompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</basecompoundref>
<sectiondef kind="protected-attrib">
diff --git a/testing/027/struct_vehicle.xml b/testing/027/struct_vehicle.xml
index a1f7654..bf480e8 100644
--- a/testing/027/struct_vehicle.xml
+++ b/testing/027/struct_vehicle.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_vehicle" kind="struct" prot="public">
+ <compounddef id="struct_vehicle" kind="struct" language="C++" prot="public">
<compoundname>Vehicle</compoundname>
<basecompoundref refid="struct_object" prot="public" virt="non-virtual">Object</basecompoundref>
<derivedcompoundref refid="struct_car" prot="public" virt="non-virtual">Car</derivedcompoundref>
diff --git a/testing/029/029__hideinit_8c.xml b/testing/029/029__hideinit_8c.xml
index 4bf1516..f5db794 100644
--- a/testing/029/029__hideinit_8c.xml
+++ b/testing/029/029__hideinit_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="029__hideinit_8c" kind="file">
+ <compounddef id="029__hideinit_8c" kind="file" language="C++">
<compoundname>029_hideinit.c</compoundname>
<sectiondef kind="var">
<memberdef kind="variable" id="029__hideinit_8c_1a799f44203647e4c53bdb0386aa95680f" prot="public" static="no" mutable="no">
diff --git a/testing/035/035__invariant_8c.xml b/testing/035/035__invariant_8c.xml
index d036388..f1a924d 100644
--- a/testing/035/035__invariant_8c.xml
+++ b/testing/035/035__invariant_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="035__invariant_8c" kind="file">
+ <compounddef id="035__invariant_8c" kind="file" language="C++">
<compoundname>035_invariant.c</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="035__invariant_8c_1a92e32ddd4278ab907422d5aaa34cb796" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/036/036__link_8c.xml b/testing/036/036__link_8c.xml
index 4347d4b..c0dea58 100644
--- a/testing/036/036__link_8c.xml
+++ b/testing/036/036__link_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="036__link_8c" kind="file">
+ <compounddef id="036__link_8c" kind="file" language="C++">
<compoundname>036_link.c</compoundname>
<innerclass refid="class_test" prot="public">Test</innerclass>
<sectiondef kind="func">
diff --git a/testing/037/class_receiver.xml b/testing/037/class_receiver.xml
index 2fcde6d..5c4fde6 100644
--- a/testing/037/class_receiver.xml
+++ b/testing/037/class_receiver.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_receiver" kind="class" prot="public">
+ <compounddef id="class_receiver" kind="class" language="C++" prot="public">
<compoundname>Receiver</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_receiver_1a162099741e0324e6254c9bc570566e40" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/037/class_sender.xml b/testing/037/class_sender.xml
index b77017a..e58ab88 100644
--- a/testing/037/class_sender.xml
+++ b/testing/037/class_sender.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_sender" kind="class" prot="public">
+ <compounddef id="class_sender" kind="class" language="C++" prot="public">
<compoundname>Sender</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_sender_1a8ad2c6f9baa4e798868fe4a4d45f8fda" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/039/class_test.xml b/testing/039/class_test.xml
index 3f38916..244e88d 100644
--- a/testing/039/class_test.xml
+++ b/testing/039/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="user-defined">
<header>A group of functions.</header>
diff --git a/testing/040/namespace_n_s.xml b/testing/040/namespace_n_s.xml
index 14ffc26..64beb23 100644
--- a/testing/040/namespace_n_s.xml
+++ b/testing/040/namespace_n_s.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace_n_s" kind="namespace">
+ <compounddef id="namespace_n_s" kind="namespace" language="C++">
<compoundname>NS</compoundname>
<briefdescription>
</briefdescription>
diff --git a/testing/041/class_test.xml b/testing/041/class_test.xml
index 294b67c..7068026 100644
--- a/testing/041/class_test.xml
+++ b/testing/041/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1a8e7b46ceaf7bd2ab94114b390b3288ca" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/042/namespaceorg_1_1doxygen_1_1_test.xml b/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
index b48c307..7ed33d5 100644
--- a/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
+++ b/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespaceorg_1_1doxygen_1_1_test" kind="namespace">
+ <compounddef id="namespaceorg_1_1doxygen_1_1_test" kind="namespace" language="Java">
<compoundname>org::doxygen::Test</compoundname>
<briefdescription>
</briefdescription>
diff --git a/testing/044/struct_s.xml b/testing/044/struct_s.xml
index 9505f8c..2aa62c2 100644
--- a/testing/044/struct_s.xml
+++ b/testing/044/struct_s.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_s" kind="struct" prot="public">
+ <compounddef id="struct_s" kind="struct" language="C++" prot="public">
<compoundname>S</compoundname>
<includes refid="044__section_8h" local="no">044_section.h</includes>
<sectiondef kind="public-attrib">
diff --git a/testing/046/046__related_8cpp.xml b/testing/046/046__related_8cpp.xml
index 0291e84..9f5eab6 100644
--- a/testing/046/046__related_8cpp.xml
+++ b/testing/046/046__related_8cpp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="046__related_8cpp" kind="file">
+ <compounddef id="046__related_8cpp" kind="file" language="C++">
<compoundname>046_related.cpp</compoundname>
<innerclass refid="class_test" prot="public">Test</innerclass>
<sectiondef kind="func">
diff --git a/testing/046/class_test.xml b/testing/046/class_test.xml
index 3c631ab..62712d4 100644
--- a/testing/046/class_test.xml
+++ b/testing/046/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1a1683da699dc049d74101488d143c8e98" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/047/047__return_8cpp.xml b/testing/047/047__return_8cpp.xml
index 2ed45d1..b57a0c3 100644
--- a/testing/047/047__return_8cpp.xml
+++ b/testing/047/047__return_8cpp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="047__return_8cpp" kind="file">
+ <compounddef id="047__return_8cpp" kind="file" language="C++">
<compoundname>047_return.cpp</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="047__return_8cpp_1aab0ee031d46db05d47213d2625ab6aac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/048/048__showinit_8c.xml b/testing/048/048__showinit_8c.xml
index a44ccb9..34b2c1c 100644
--- a/testing/048/048__showinit_8c.xml
+++ b/testing/048/048__showinit_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="048__showinit_8c" kind="file">
+ <compounddef id="048__showinit_8c" kind="file" language="C++">
<compoundname>048_showinit.c</compoundname>
<sectiondef kind="var">
<memberdef kind="variable" id="048__showinit_8c_1a799f44203647e4c53bdb0386aa95680f" prot="public" static="no" mutable="no">
diff --git a/testing/054/054__parblock_8cpp.xml b/testing/054/054__parblock_8cpp.xml
index a562a6d..ae6e462 100644
--- a/testing/054/054__parblock_8cpp.xml
+++ b/testing/054/054__parblock_8cpp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="054__parblock_8cpp" kind="file">
+ <compounddef id="054__parblock_8cpp" kind="file" language="C++">
<compoundname>054_parblock.cpp</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="054__parblock_8cpp_1a2dd0ac47f42a9994b91d34403be05fe9" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/057__caller__graphs_8tcl.xml b/testing/057/057__caller__graphs_8tcl.xml
index 4c54e1c..c3dfb78 100644
--- a/testing/057/057__caller__graphs_8tcl.xml
+++ b/testing/057/057__caller__graphs_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="057__caller__graphs_8tcl" kind="file">
+ <compounddef id="057__caller__graphs_8tcl" kind="file" language="Tcl">
<compoundname>057_caller_graphs.tcl</compoundname>
<innernamespace refid="namespacebar">bar</innernamespace>
<innernamespace refid="namespacefoo">foo</innernamespace>
diff --git a/testing/057/__057__caller__graphs_8tcl.xml b/testing/057/__057__caller__graphs_8tcl.xml
index 2fdcf6a..48ab815 100644
--- a/testing/057/__057__caller__graphs_8tcl.xml
+++ b/testing/057/__057__caller__graphs_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="__057__caller__graphs_8tcl" kind="file">
+ <compounddef id="__057__caller__graphs_8tcl" kind="file" language="Tcl">
<compoundname>_057_caller_graphs.tcl</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="__057__caller__graphs_8tcl_1a7c3c8acee94bf61ba9e911dafe35adac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespace1.xml b/testing/057/namespace1.xml
index e74d8fe..6a40cc4 100644
--- a/testing/057/namespace1.xml
+++ b/testing/057/namespace1.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace1" kind="namespace">
+ <compounddef id="namespace1" kind="namespace" language="Tcl">
<compoundname>1</compoundname>
<innernamespace refid="namespace1_1_11">1::1</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace1_1_11.xml b/testing/057/namespace1_1_11.xml
index e5c5596..8ff3ce9 100644
--- a/testing/057/namespace1_1_11.xml
+++ b/testing/057/namespace1_1_11.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace1_1_11" kind="namespace">
+ <compounddef id="namespace1_1_11" kind="namespace" language="Tcl">
<compoundname>1::1</compoundname>
<innernamespace refid="namespace1_1_11_1_11">1::1::1</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace1_1_11_1_11.xml b/testing/057/namespace1_1_11_1_11.xml
index caccbe4..f7f9716 100644
--- a/testing/057/namespace1_1_11_1_11.xml
+++ b/testing/057/namespace1_1_11_1_11.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace1_1_11_1_11" kind="namespace">
+ <compounddef id="namespace1_1_11_1_11" kind="namespace" language="Tcl">
<compoundname>1::1::1</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespace1_1_11_1_11_1aa604df053f7ebe36205d1a5675459b96" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespace2.xml b/testing/057/namespace2.xml
index 6ea122c..0ce04a8 100644
--- a/testing/057/namespace2.xml
+++ b/testing/057/namespace2.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2" kind="namespace">
+ <compounddef id="namespace2" kind="namespace" language="Tcl">
<compoundname>2</compoundname>
<innernamespace refid="namespace2_1_12">2::2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12.xml b/testing/057/namespace2_1_12.xml
index d2a589a..af86ebe 100644
--- a/testing/057/namespace2_1_12.xml
+++ b/testing/057/namespace2_1_12.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2_1_12" kind="namespace">
+ <compounddef id="namespace2_1_12" kind="namespace" language="Tcl">
<compoundname>2::2</compoundname>
<innernamespace refid="namespace2_1_12_1_12">2::2::2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12.xml
index d04a73c..0a6d7fa 100644
--- a/testing/057/namespace2_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2_1_12_1_12" kind="namespace">
+ <compounddef id="namespace2_1_12_1_12" kind="namespace" language="Tcl">
<compoundname>2::2::2</compoundname>
<innernamespace refid="namespace2_1_12_1_12_1_12">2::2::2::2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12.xml
index 980906d..461d61e 100644
--- a/testing/057/namespace2_1_12_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12_1_12.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2_1_12_1_12_1_12" kind="namespace">
+ <compounddef id="namespace2_1_12_1_12_1_12" kind="namespace" language="Tcl">
<compoundname>2::2::2::2</compoundname>
<innernamespace refid="namespace2_1_12_1_12_1_12_1_12">2::2::2::2::2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
index 0c6957b..3981ff0 100644
--- a/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2_1_12_1_12_1_12_1_12" kind="namespace">
+ <compounddef id="namespace2_1_12_1_12_1_12_1_12" kind="namespace" language="Tcl">
<compoundname>2::2::2::2::2</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespace2_1_12_1_12_1_12_1_12_1ac07f64c62783fd8b44317389b4a711f8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespacebar.xml b/testing/057/namespacebar.xml
index 3c0f6e9..85cde41 100644
--- a/testing/057/namespacebar.xml
+++ b/testing/057/namespacebar.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacebar" kind="namespace">
+ <compounddef id="namespacebar" kind="namespace" language="Tcl">
<compoundname>bar</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespacebar_1aa1678a9adb588c0b91b118de7cc38ddb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespacefoo.xml b/testing/057/namespacefoo.xml
index 2aae8ea..0d81332 100644
--- a/testing/057/namespacefoo.xml
+++ b/testing/057/namespacefoo.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacefoo" kind="namespace">
+ <compounddef id="namespacefoo" kind="namespace" language="Tcl">
<compoundname>foo</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespacefoo_1a265acdcaea6da32c3bbd9afb5d0e32a4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/058/058__bracket__recursion_8tcl.xml b/testing/058/058__bracket__recursion_8tcl.xml
index fd36cee..dcb60e4 100644
--- a/testing/058/058__bracket__recursion_8tcl.xml
+++ b/testing/058/058__bracket__recursion_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="058__bracket__recursion_8tcl" kind="file">
+ <compounddef id="058__bracket__recursion_8tcl" kind="file" language="Tcl">
<compoundname>058_bracket_recursion.tcl</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="058__bracket__recursion_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/059/059__command__catch_8tcl.xml b/testing/059/059__command__catch_8tcl.xml
index 6604413..a12a366 100644
--- a/testing/059/059__command__catch_8tcl.xml
+++ b/testing/059/059__command__catch_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="059__command__catch_8tcl" kind="file">
+ <compounddef id="059__command__catch_8tcl" kind="file" language="Tcl">
<compoundname>059_command_catch.tcl</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/060/060__command__switch_8tcl.xml b/testing/060/060__command__switch_8tcl.xml
index 05e01c6..f1792f4 100644
--- a/testing/060/060__command__switch_8tcl.xml
+++ b/testing/060/060__command__switch_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="060__command__switch_8tcl" kind="file">
+ <compounddef id="060__command__switch_8tcl" kind="file" language="Tcl">
<compoundname>060_command_switch.tcl</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/061/class_test.xml b/testing/061/class_test.xml
index 0922539..b233e9c 100644
--- a/testing/061/class_test.xml
+++ b/testing/061/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="Tcl" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1af863c78bca81b4e276dcbb30f12e8ec6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/062/namespacen1.xml b/testing/062/namespacen1.xml
index 0ef31ff..a31fc29 100644
--- a/testing/062/namespacen1.xml
+++ b/testing/062/namespacen1.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacen1" kind="namespace">
+ <compounddef id="namespacen1" kind="namespace" language="Tcl">
<compoundname>n1</compoundname>
<innernamespace refid="namespacen1_1_1n1">n1::n1</innernamespace>
<sectiondef kind="func">
diff --git a/testing/062/namespacen2.xml b/testing/062/namespacen2.xml
index 39c21d2..29c4d80 100644
--- a/testing/062/namespacen2.xml
+++ b/testing/062/namespacen2.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacen2" kind="namespace">
+ <compounddef id="namespacen2" kind="namespace" language="Tcl">
<compoundname>n2</compoundname>
<innernamespace refid="namespacen2_1_1n2">n2::n2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/062/namespacen3.xml b/testing/062/namespacen3.xml
index 25c803c..bfc1364 100644
--- a/testing/062/namespacen3.xml
+++ b/testing/062/namespacen3.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacen3" kind="namespace">
+ <compounddef id="namespacen3" kind="namespace" language="Tcl">
<compoundname>n3</compoundname>
<innernamespace refid="namespacen3_1_1n3">n3::n3</innernamespace>
<sectiondef kind="func">
diff --git a/testing/063/namespaceoo.xml b/testing/063/namespaceoo.xml
index eb0c93c..044c364 100644
--- a/testing/063/namespaceoo.xml
+++ b/testing/063/namespaceoo.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespaceoo" kind="namespace">
+ <compounddef id="namespaceoo" kind="namespace" language="Tcl">
<compoundname>oo</compoundname>
<innernamespace refid="namespaceoo_1_1define">oo::define</innernamespace>
<innernamespace refid="namespaceoo_1_1_helpers">oo::Helpers</innernamespace>
diff --git a/testing/063/namespaceoo_1_1_helpers.xml b/testing/063/namespaceoo_1_1_helpers.xml
index ff309cf..40b4830 100644
--- a/testing/063/namespaceoo_1_1_helpers.xml
+++ b/testing/063/namespaceoo_1_1_helpers.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespaceoo_1_1_helpers" kind="namespace">
+ <compounddef id="namespaceoo_1_1_helpers" kind="namespace" language="Tcl">
<compoundname>oo::Helpers</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespaceoo_1_1_helpers_1a96c5b755588beb2e930cff23ce811d6c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/063/namespaceoo_1_1define.xml b/testing/063/namespaceoo_1_1define.xml
index aa62fbd..214b705 100644
--- a/testing/063/namespaceoo_1_1define.xml
+++ b/testing/063/namespaceoo_1_1define.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespaceoo_1_1define" kind="namespace">
+ <compounddef id="namespaceoo_1_1define" kind="namespace" language="Tcl">
<compoundname>oo::define</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespaceoo_1_1define_1a89e7ea222a316f1926c1f9f30f2cc5c1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/064/struct_foo.xml b/testing/064/struct_foo.xml
new file mode 100644
index 0000000..3765625
--- /dev/null
+++ b/testing/064/struct_foo.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
+ <compounddef id="struct_foo" kind="struct" language="C++" prot="public">
+ <compoundname>Foo</compoundname>
+ <sectiondef kind="public-func">
+ <memberdef kind="function" id="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Foo::operator int</definition>
+ <argsstring>()</argsstring>
+ <name>operator int</name>
+ <briefdescription>
+ <para>Conversion to int. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="064_castoperator.cpp" line="22" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Foo::operator int</definition>
+ <argsstring>() const </argsstring>
+ <name>operator int</name>
+ <briefdescription>
+ <para>Conversion to int const. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="064_castoperator.cpp" line="24" column="1"/>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ <para><ref refid="struct_foo" kindref="compound">Foo</ref>. </para>
+ </briefdescription>
+ <detaileddescription>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>No autolink for operator int()</para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">operator int()</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">title</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">Foo::operator int()</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">Foo::operator int()</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">title</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>No autolink for operator int() const</para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">operator int() const</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </detaileddescription>
+ <location file="064_castoperator.cpp" bodystart="20" bodyend="25"/>
+ <listofallmembers>
+ <member refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator int</name>
+ </member>
+ <member refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator int</name>
+ </member>
+ </listofallmembers>
+ </compounddef>
+</doxygen>
diff --git a/testing/064_castoperator.cpp b/testing/064_castoperator.cpp
new file mode 100644
index 0000000..d6f8006
--- /dev/null
+++ b/testing/064_castoperator.cpp
@@ -0,0 +1,25 @@
+// objective: test linking to the cast operator with and without const
+// check: struct_foo.xml
+/**
+ * @brief Foo
+ *
+ * - No autolink for operator int()
+ * - @ref operator int()
+ * - @ref operator int() "title"
+ * - Foo::operator int()
+ * - @ref Foo::operator int()
+ * - @ref Foo::operator int() "title"
+ *
+ * - No autolink for operator int() const
+ * - @ref operator int() const
+ * - @ref operator int() const "title"
+ * - Foo::operator int() const
+ * - @ref Foo::operator int() const
+ * - @ref Foo::operator int() const "title"
+ */
+struct Foo {
+ /** @brief Conversion to int */
+ operator int();
+ /** @brief Conversion to int const */
+ operator int() const;
+};
diff --git a/testing/065/indexpage.xml b/testing/065/indexpage.xml
new file mode 100644
index 0000000..e462e55
--- /dev/null
+++ b/testing/065/indexpage.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
+ <compounddef id="indexpage" kind="page">
+ <compoundname>index</compoundname>
+ <title>My Project</title>
+ <detaileddescription>
+ <para>これは日本語(en)です. Output for all languages. </para>
+ </detaileddescription>
+ </compounddef>
+</doxygen>
diff --git a/testing/065_tilde.dox b/testing/065_tilde.dox
new file mode 100644
index 0000000..0b4986f
--- /dev/null
+++ b/testing/065_tilde.dox
@@ -0,0 +1,12 @@
+// objective: test \~ command with non default OUTPUT_LANGUAGE which contains '-' letter
+// check: indexpage.xml
+// config: OUTPUT_LANGUAGE = Japanese-en
+/**
+\mainpage
+\~english This is English.
+\~dutch Dit is Nederlands.
+\~japanese これは日本語です.
+\~japanese-en これは日本語(en)です.
+\~german Dies ist Deutsch.
+\~ Output for all languages.
+*/
diff --git a/vhdlparser/ErrorHandler.h b/vhdlparser/ErrorHandler.h
index 8197aea..f5e53e4 100644
--- a/vhdlparser/ErrorHandler.h
+++ b/vhdlparser/ErrorHandler.h
@@ -31,7 +31,7 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
// Called when the parser cannot continue parsing.
// last - the last token successfully parsed.
// unexpected - the token at which the error occurs.
- // production - the production in which this error occurrs.
+ // production - the production in which this error occurs.
virtual void handleParseError(Token * /*last*/, Token *unexpected, JAVACC_SIMPLE_STRING production, VhdlParser * /*parser*/) {
error_count++;
fprintf(stderr, "Encountered: %s at: %d:%d while parsing: %s\n", addUnicodeEscapes(unexpected->image).c_str(), unexpected->beginLine, unexpected->beginColumn, production.c_str());