diff --git a/.gitignore b/.gitignore
index 21ebe477..fa8ffb57 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
/doxygen_docs
/doxygen.tag
+/build*
diff --git a/.travis.yml b/.travis.yml
index acc325a2..1130becf 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,56 @@
language: cpp
+os:
+ - linux-ppc64le
+ - linux
+dist: xenial
compiler:
- gcc
- clang
+sudo: required
-before_install:
- - sudo apt-add-repository ppa:smspillaz/cmake-2.8.12 -y
- - sudo apt-get update -qq
+addons:
+ apt:
+ update: true
+ packages:
+ - texlive
+ - texlive-generic-recommended
+ - texlive-extra-utils
+ - texlive-latex-extra
+ - texlive-font-utils
+ - ghostscript
+ - libxml2-utils
+ - cmake
+ - cmake-data
-install:
- - sudo apt-get install -qq texlive
- - sudo apt-get install -qq texlive-extra-utils
- - sudo apt-get install -q -y texlive-latex-extra
- - sudo apt-get install -qq libxml2-utils
- - sudo apt-get install -qq cmake cmake-data
+jobs:
+ include:
+ - os: osx
+ compiler: clang
+
+before_script:
+ - if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
+ sudo mkdir -p /usr/local/man;
+ sudo chown -R "${USER}:admin" /usr/local/man;
+ pip install --quiet conan;
+ export HOMEBREW_NO_AUTO_UPDATE=1;
+ brew install ghostscript;
+
+ travis_wait brew cask install mactex-no-gui;
+ curl -O -L http://mirrors.ctan.org/support/epstopdf.zip;
+ unzip epstopdf.zip;
+ mkdir -p /Users/travis/Library/TeX/texbin/;
+ mv epstopdf/epstopdf.pl /Users/travis/Library/TeX/texbin/epstopdf;
+ chmod a+x /Users/travis/Library/TeX/texbin/epstopdf;
+ rm -rf epstopdf*;
+ export PATH=/Users/travis/Library/TeX/texbin:/Library/TeX/texbin:$PATH;
+
+ conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan;
+ printf "[requires]\n
+ libxml2/2.9.8@bincrafters/stable\n
+ qt/5.11.3@bincrafters/stable" >> conanfile.txt;
+ conan install . -g virtualrunenv;
+ source activate_run.sh;
+ fi;
script:
- mkdir build
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ba105b89..45c2f2c1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -36,7 +36,7 @@ if (use_sqlite3)
set(sqlite3 "1" CACHE INTERNAL "used in settings.h")
endif()
-set(MACOS_VERSION_MIN 10.5)
+set(MACOS_VERSION_MIN 10.9)
if (use_libclang)
set(clang "1" CACHE INTERNAL "used in settings.h")
find_package(LLVM CONFIG REQUIRED)
@@ -86,7 +86,10 @@ find_package(BISON REQUIRED)
find_package(Threads)
if (sqlite3)
- find_package(SQLite3 REQUIRED)
+ find_package(SQLite3 REQUIRED)
+ if (SQLITE3_VERSION VERSION_LESS 3.9.0)
+ message(SEND_ERROR "Doxygen requires at least sqlite3 version 3.9.0 (installed: ${SQLITE3_VERSION})")
+ endif()
endif()
find_package(Iconv REQUIRED)
diff --git a/README.md b/README.md
index 49dcac9f..3e1c6088 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,25 @@
Doxygen
===============
-Doxygen is the de facto standard tool for generating documentation from
-annotated C++ sources, but it also supports other popular programming
-languages such as C, Objective-C, C#, PHP, Java, Python, IDL
-(Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl,
+Doxygen is the de facto standard tool for generating documentation from
+annotated C++ sources, but it also supports other popular programming
+languages such as C, Objective-C, C#, PHP, Java, Python, IDL
+(Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl,
and to some extent D.
Doxygen can help you in three ways:
-1. It can generate an on-line documentation browser (in HTML) and/or an
- off-line reference manual (in LaTeX) from a set of documented source files.
- There is also support for generating output in RTF (MS-Word), PostScript,
- hyperlinked PDF, compressed HTML, DocBook and Unix man pages.
- The documentation is extracted directly from the sources, which makes
+1. It can generate an on-line documentation browser (in HTML) and/or an
+ off-line reference manual (in LaTeX) from a set of documented source files.
+ There is also support for generating output in RTF (MS-Word), PostScript,
+ hyperlinked PDF, compressed HTML, DocBook and Unix man pages.
+ The documentation is extracted directly from the sources, which makes
it much easier to keep the documentation consistent with the source code.
-2. You can configure doxygen to extract the code structure from undocumented
- source files. This is very useful to quickly find your way in large
- source distributions. Doxygen can also visualize the relations between
- the various elements by means of include dependency graphs, inheritance
+2. You can configure doxygen to extract the code structure from undocumented
+ source files. This is very useful to quickly find your way in large
+ source distributions. Doxygen can also visualize the relations between
+ the various elements by means of include dependency graphs, inheritance
diagrams, and collaboration diagrams, which are all generated automatically.
-3. You can also use doxygen for creating normal documentation (as I did for
+3. You can also use doxygen for creating normal documentation (as I did for
the doxygen user manual and doxygen web-site).
Download
@@ -29,25 +29,20 @@ The latest binaries and source of Doxygen can be downloaded from:
Developers
---------
-* Build Status:
+* Linux & macOS Build Status:
+* Windows Build Status:
* Coverity Scan Build Status:
* Doxygen's Doxygen Documentation:
-* Install
- * Quick install see (./INSTALL)
- * else http://www.doxygen.org/manual/install.html
+* Install: Please read the installation section of the manual (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:
-* current list:
- * [Bugzilla](https://bugzilla.gnome.org/buglist.cgi?product=doxygen&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
-* Submit a new bug or feature request
- * [Enter bug](https://bugzilla.gnome.org/enter_bug.cgi?product=doxygen)
+Use the [issue](https://github.com/doxygen/doxygen/issues) tracker to report bugs.
Comms
----------------------------------
@@ -63,10 +58,10 @@ There are three mailing lists:
Source Code
----------------------------------
-In May 2013, Doxygen moved from
+In May 2013, Doxygen moved from
subversion to git hosted at GitHub
* https://github.com/doxygen/doxygen
Enjoy,
-Dimitri van Heesch (dimitri at stack.nl)
+Dimitri van Heesch (doxygen at gmail.com)
diff --git a/VERSION b/VERSION
index 8e8ed1b0..c9a70d09 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.14
+1.8.15
diff --git a/addon/doxmlparser/src/dochandler.h b/addon/doxmlparser/src/dochandler.h
index 4340dbd1..59af4e3e 100644
--- a/addon/doxmlparser/src/dochandler.h
+++ b/addon/doxmlparser/src/dochandler.h
@@ -571,7 +571,7 @@ class EMailHandler : public DocEMailImpl, public BaseHandler
//-----------------------------------------------------------------------------
-/* \brief Node representing a link to an URL
+/* \brief Node representing a link to a URL
*
*/
class ULinkHandler : public DocULinkImpl, public BaseHandler
diff --git a/addon/doxyparse/README b/addon/doxyparse/README
index 76b178d2..95cce8ce 100644
--- a/addon/doxyparse/README
+++ b/addon/doxyparse/README
@@ -32,7 +32,6 @@ More info and source code repository: https://github.com/analizo/doxygen
* check if a alien-doxyparse release is necessary and do it on cpan
AUTHORS
-=======
Antonio Terceiro
João M. Miranda
diff --git a/addon/doxyparse/doxyparse.cpp b/addon/doxyparse/doxyparse.cpp
index 752f3778..de29c535 100644
--- a/addon/doxyparse/doxyparse.cpp
+++ b/addon/doxyparse/doxyparse.cpp
@@ -197,7 +197,7 @@ std::string functionSignature(MemberDef* md) {
Argument * argument = iterator.toFirst();
if(argument != NULL) {
signature += argumentData(argument);
- for(++iterator; (argument = iterator.current()); ++iterator){
+ for(++iterator; (argument = iterator.current()); ++iterator) {
signature += std::string(",") + argumentData(argument);
}
}
diff --git a/addon/doxypysql/search.py b/addon/doxypysql/search.py
index c1851387..5f820de9 100755
--- a/addon/doxypysql/search.py
+++ b/addon/doxypysql/search.py
@@ -17,19 +17,19 @@
import re
class MemberType:
- Define="0"
- Function="1"
- Variable="2"
- Typedef="3"
- Enumeration="4"
- EnumValue="5"
- Signal="6"
- Slot="7"
- Friend="8"
- DCOP="9"
- Property="10"
- Event="11"
- File="12"
+ Define="macro definition"
+ Function="function"
+ Variable="variable"
+ Typedef="typedef"
+ Enumeration="enumeration"
+ EnumValue="enumvalue"
+ Signal="signal"
+ Slot="slot"
+ Friend="friend"
+ DCOP="dcop"
+ Property="property"
+ Event="event"
+ File="file"
class RequestType:
References="9901"
@@ -69,27 +69,27 @@ def __init__(self,cn,name,row_type=str):
def match(self,row):
if self.row_type is int:
- return " id=?"
+ return " rowid=?"
else:
if g_use_regexp == True:
return " REGEXP (?,%s)" %row
else:
return " %s=?" %row
- def fileName(self,id_file):
- if self.cn.execute("SELECT COUNT(*) FROM files WHERE rowid=?",[id_file]).fetchone()[0] > 1:
- print >>sys.stderr,"WARNING: non-uniq fileid [%s]. Considering only the first match." % id_file
+ def fileName(self,file_id):
+ if self.cn.execute("SELECT COUNT(*) FROM path WHERE rowid=?",[file_id]).fetchone()[0] > 1:
+ sys.stderr.write("WARNING: non-uniq fileid [%s]. Considering only the first match." % file_id)
- for r in self.cn.execute("SELECT * FROM files WHERE rowid=?",[id_file]).fetchall():
+ for r in self.cn.execute("SELECT * FROM path WHERE rowid=?",[file_id]).fetchall():
return r['name']
return ""
def fileId(self,name):
- if self.cn.execute("SELECT COUNT(*) FROM files WHERE"+self.match("name"),[name]).fetchone()[0] > 1:
- print >>sys.stderr,"WARNING: non-uniq file name [%s]. Considering only the first match." % name
+ if self.cn.execute("SELECT COUNT(*) FROM path WHERE"+self.match("name"),[name]).fetchone()[0] > 1:
+ sys.stderr.write("WARNING: non-uniq file name [%s]. Considering only the first match." % name)
- for r in self.cn.execute("SELECT rowid FROM files WHERE"+self.match("name"),[name]).fetchall():
+ for r in self.cn.execute("SELECT rowid FROM path WHERE"+self.match("name"),[name]).fetchall():
return r[0]
return -1
@@ -97,23 +97,24 @@ def fileId(self,name):
def references(self):
o=[]
cur = self.cn.cursor()
- cur.execute("SELECT refid FROM memberdef WHERE"+self.match("name"),[self.name])
- refids = cur.fetchall()
+ cur.execute("SELECT rowid FROM memberdef WHERE"+self.match("name"),[self.name])
+ rowids = cur.fetchall()
- if len(refids) == 0:
+ if len(rowids) == 0:
return o
- refid = refids[0]['refid']
+ rowid = rowids[0]['rowid']
cur = self.cn.cursor()
- #TODO:SELECT rowid from refids where refid=refid
- for info in cur.execute("SELECT * FROM xrefs WHERE refid_dst LIKE '%"+refid+"%'"):
+ #TODO:SELECT rowid from refid where refid=refid
+ for info in cur.execute("SELECT * FROM xrefs WHERE dst_rowid=?", [rowid]):
item={}
cur = self.cn.cursor()
- for i2 in cur.execute("SELECT * FROM memberdef WHERE refid=?",[info['src']]):
+ for i2 in cur.execute("SELECT * FROM memberdef WHERE rowid=?",[info['src_rowid']]):
item['name']=i2['name']
- item['src']=info['src']
- item['file']=self.fileName(info['id_file'])
- item['line']=info['line']
+ item['src']=info['src_rowid']
+ # Below no longer directly supported on this entry; can be found from either memberdef
+ #item['file']=self.fileName(info['file_id'])
+ #item['line']=info['line']
o.append(item)
return o
@@ -126,7 +127,7 @@ def function(self):
item['name'] = r['name']
item['definition'] = r['definition']
item['argsstring'] = r['argsstring']
- item['file'] = self.fileName(r['id_file'])
+ item['file'] = self.fileName(r['file_id'])
item['line'] = r['line']
item['detaileddescription'] = r['detaileddescription']
o.append(item)
@@ -134,7 +135,7 @@ def function(self):
###############################################################################
def file(self):
o=[]
- for r in self.cn.execute("SELECT rowid,* FROM files WHERE"+self.match("name"),[self.name]).fetchall():
+ for r in self.cn.execute("SELECT rowid,name FROM local_file WHERE"+self.match("name"),[self.name]).fetchall():
item={}
item['name'] = r['name']
item['id'] = r['rowid']
@@ -151,7 +152,7 @@ def macro(self):
if r['argsstring']:
item['argsstring'] = r['argsstring']
item['definition'] = r['initializer']
- item['file'] = self.fileName(r['id_file'])
+ item['file'] = self.fileName(r['file_id'])
item['line'] = r['line']
o.append(item)
return o
@@ -163,7 +164,7 @@ def typedef(self):
item={}
item['name'] = r['name']
item['definition'] = r['definition']
- item['file'] = self.fileName(r['id_file'])
+ item['file'] = self.fileName(r['file_id'])
item['line'] = r['line']
o.append(item)
return o
@@ -175,16 +176,16 @@ def variable(self):
item={}
item['name'] = r['name']
item['definition'] = r['definition']
- item['file'] = self.fileName(r['id_file'])
+ item['file'] = self.fileName(r['file_id'])
item['line'] = r['line']
o.append(item)
return o
###############################################################################
def params(self):
o=[]
- c=self.cn.execute('SELECT id FROM memberdef WHERE'+self.match("name"),[self.name])
+ c=self.cn.execute('SELECT rowid FROM memberdef WHERE'+self.match("name"),[self.name])
for r in c.fetchall():
- #a=("SELECT * FROM params where id=(SELECT id_param FROM memberdef_params where id_memberdef=?",[id_memberdef])
+ #a=("SELECT * FROM param where id=(SELECT param_id FROM memberdef_param where memberdef_id=?",[memberdef_id])
item={}
item['id'] = r['id']
o.append(item)
@@ -202,20 +203,20 @@ def struct(self):
def includers(self):
o=[]
fid = self.fileId(self.name)
- c=self.cn.execute('SELECT * FROM includes WHERE id_dst=?',[fid])
+ c=self.cn.execute('SELECT * FROM includes WHERE dst_id=?',[fid])
for r in c.fetchall():
item={}
- item['name'] = self.fileName(r['id_src'])
+ item['name'] = self.fileName(r['src_id'])
o.append(item)
return o
###############################################################################
def includees(self):
o=[]
fid = self.fileId(self.name)
- c=self.cn.execute('SELECT * FROM includes WHERE id_src=?',[fid])
+ c=self.cn.execute('SELECT * FROM includes WHERE src_id=?',[fid])
for r in c.fetchall():
item={}
- item['name'] = self.fileName(r['id_dst'])
+ item['name'] = self.fileName(r['dst_id'])
o.append(item)
return o
###############################################################################
@@ -227,7 +228,7 @@ def members(self):
item['name'] = r['name']
item['definition'] = r['definition']
item['argsstring'] = r['argsstring']
- item['file'] = self.fileName(r['id_file'])
+ item['file'] = self.fileName(r['file_id'])
item['line'] = r['line']
#item['documentation'] = r['documentation']
o.append(item)
@@ -235,19 +236,19 @@ def members(self):
###############################################################################
def baseClasses(self):
o=[]
- c=self.cn.execute('SELECT base FROM basecompoundref WHERE'+self.match("derived"),[self.name])
+ c=self.cn.execute('SELECT compounddef.name FROM compounddef JOIN compoundref ON compounddef.rowid=compoundref.base_rowid WHERE compoundref.derived_rowid IN (SELECT rowid FROM compounddef WHERE'+self.match("name")+')',[self.name])
for r in c.fetchall():
item={}
- item['name'] = r['base']
+ item['name'] = r['name']
o.append(item)
return o
###############################################################################
def subClasses(self):
o=[]
- c=self.cn.execute('SELECT derived FROM basecompoundref WHERE'+self.match("base"),[self.name])
+ c=self.cn.execute('SELECT compounddef.name FROM compounddef JOIN compoundref ON compounddef.rowid=compoundref.derived_rowid WHERE compoundref.base_rowid IN (SELECT rowid FROM compounddef WHERE'+self.match("name")+')',[self.name])
for r in c.fetchall():
item={}
- item['name'] = r['derived']
+ item['name'] = r['name']
o.append(item)
return o
###############################################################################
@@ -268,21 +269,23 @@ def process(f,kind):
}
return request_processors[kind]()
###############################################################################
+
+# the -H option isn't documented. It's one of the more recent additions, but it's treating refids as if they would be a string. I'm just taking a stab at updating it for now, converting to use rowid, and making other edits necessary to get it to run.
def processHref(cn,ref):
j={}
# is it in memberdef ?
table="memberdef"
- if ( cn.execute("SELECT count(*) from %s WHERE refid=?"%table,[ref] ).fetchone()[0] > 0 ):
- for r in cn.execute("SELECT kind,id FROM %s WHERE refid='%s'" % (table,ref) ).fetchall():
- f=Finder(cn,r['id'],int)
+ if ( cn.execute("SELECT count(*) from %s WHERE rowid=?"%table,[ref] ).fetchone()[0] > 0 ):
+ for r in cn.execute("SELECT kind,rowid FROM %s WHERE rowid=?" % table,[ref]).fetchall():
+ f=Finder(cn,r['rowid'],int)
j=process(f,str(r['kind']))
# is it in compounddef ?
table="compounddef"
- if ( cn.execute("SELECT count(*) from %s WHERE refid=?"%table,[ref]).fetchone()[0] > 0 ):
- for r in cn.execute("SELECT id FROM %s WHERE refid=?"%table,[ref] ).fetchall():
- f=Finder(cn,r['id'],int)
+ if ( cn.execute("SELECT count(*) from %s WHERE rowid=?"%table,[ref]).fetchone()[0] > 0 ):
+ for r in cn.execute("SELECT rowid FROM %s WHERE rowid=?"%table,[ref] ).fetchall():
+ f=Finder(cn,r[0],int)
j=process(f,RequestType.Struct)
return j
@@ -290,7 +293,7 @@ def processHref(cn,ref):
def serveCgi():
import cgi
- print 'Content-Type: application/json\n'
+ print('Content-Type: application/json\n')
fieldStorage = cgi.FieldStorage()
form = dict((key, fieldStorage.getvalue(key)) for key in fieldStorage.keys())
@@ -298,17 +301,17 @@ def serveCgi():
if 'href' in form:
ref = form['href']
else:
- print '{"result": null, "error": "no refid given"}'
+ print('{"result": null, "error": "no refid given"}')
sys.exit(0)
cn=openDb('doxygen_sqlite3.db')
j = processHref(cn,ref)
- print json.dumps({"result":j,"error":None})
+ print(json.dumps({"result":j,"error":None}))
###############################################################################
def usage():
- print >>sys.stderr,"""Usage: search.py [Options]
+ sys.stderr.write("""Usage: search.py [Options]
Options:
-h, --help
-d Use database for queries.
@@ -323,7 +326,7 @@ def usage():
-M Get all members of class .
-S Get the sub classes of class .
-R Consider the search to be a regex.
-"""
+""")
###############################################################################
def serveCli(argv):
try:
@@ -362,6 +365,8 @@ def serveCli(argv):
elif a in ('-f'):
kind=MemberType.Function
elif a in ('-F'):
+ # undocumented
+ # seems to fit with the lower case "search" patterns?
kind=MemberType.File
elif a in ('-m'):
kind=MemberType.Define
@@ -370,6 +375,7 @@ def serveCli(argv):
elif a in ('-v'):
kind=MemberType.Variable
elif a in ('-H'):
+ # undocumented
ref = o
cn=openDb(dbname)
@@ -378,7 +384,7 @@ def serveCli(argv):
j=processHref(cn,ref)
else:
j=process(f,kind)
- print json.dumps(j,indent=4)
+ print(json.dumps(j,indent=4))
def main(argv):
diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt
index 0907d239..a89864df 100644
--- a/addon/doxywizard/CMakeLists.txt
+++ b/addon/doxywizard/CMakeLists.txt
@@ -4,9 +4,6 @@ if (NOT force_qt4)
if (Qt5Core_FOUND)
message(STATUS "Using Qt5")
find_package(Qt5 COMPONENTS Widgets Gui Xml)
- macro(qt_use_modules)
- qt5_use_modules(${ARGN})
- endmacro()
macro(qt_wrap_cpp)
qt5_wrap_cpp(${ARGN})
endmacro()
@@ -23,8 +20,6 @@ if (NOT Qt5Core_FOUND)
message(STATUS "Using Qt4")
endif()
find_package(Qt4 REQUIRED COMPONENTS QtCore QtXml QtGui)
- macro(qt_use_modules)
- endmacro()
macro(qt_wrap_cpp)
qt4_wrap_cpp(${ARGN})
endmacro()
@@ -103,10 +98,13 @@ ${GENERATED_SRC_WIZARD}/config_doxyw.cpp
${GENERATED_SRC_WIZARD}/configdoc.cpp
${doxywizard_MOC}
${doxywizard_RESOURCES_RCC}
+doxywizard.rc
)
-qt_use_modules(doxywizard Core Gui Widgets Xml)
-target_link_libraries(doxywizard
-${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY}
-)
+
+if(Qt5Core_FOUND)
+ target_link_libraries(doxywizard Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml)
+else()
+ target_link_libraries(doxywizard ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY})
+endif()
install(TARGETS doxywizard DESTINATION bin)
diff --git a/addon/doxywizard/config_doxyw.l b/addon/doxywizard/config_doxyw.l
index 7874a19b..960b7cb4 100644
--- a/addon/doxywizard/config_doxyw.l
+++ b/addon/doxywizard/config_doxyw.l
@@ -540,22 +540,34 @@ void writeStringValue(QTextStream &t,QTextCodec *codec,const QString &s)
{
QChar c;
bool needsEscaping=false;
+ bool needsHashEscaping=false;
// convert the string back to it original encoding
//QByteArray se = codec->fromUnicode(s);
t.setCodec(codec);
const QChar *p=s.data();
if (!s.isEmpty() && !p->isNull())
{
- while (!(c=*p++).isNull() && !needsEscaping)
+ if (*p != QChar::fromLatin1('"'))
{
- needsEscaping = (c==QChar::fromLatin1(' ') ||
- c==QChar::fromLatin1('\n') ||
- c==QChar::fromLatin1('\t') ||
- c==QChar::fromLatin1('"'));
+ while (!(c=*p++).isNull() && !needsEscaping)
+ {
+ needsEscaping = (c==QChar::fromLatin1(' ') ||
+ c==QChar::fromLatin1('\n') ||
+ c==QChar::fromLatin1('\t') ||
+ c==QChar::fromLatin1('"'));
+ }
+ p=s.data();
+ while (!(c=*p++).isNull() && !needsHashEscaping)
+ {
+ needsHashEscaping = (c==QChar::fromLatin1('#'));
+ }
}
- if (needsEscaping)
+ if (needsHashEscaping || needsEscaping)
{
t << "\"";
+ }
+ if (needsEscaping)
+ {
p=s.data();
while (!p->isNull())
{
@@ -564,12 +576,15 @@ void writeStringValue(QTextStream &t,QTextCodec *codec,const QString &s)
if (*p ==QChar::fromLatin1('"')) t << "\\"; // escape quotes
t << *p++;
}
- t << "\"";
}
else
{
t << s;
}
+ if (needsHashEscaping || needsEscaping)
+ {
+ t << "\"";
+ }
}
}
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index 492912b1..56378edc 100755
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -208,7 +208,7 @@ void MainWindow::updateWorkingDir()
void MainWindow::manual()
{
- QDesktopServices::openUrl(QUrl(QString::fromLatin1("http://www.doxygen.org/manual.html")));
+ QDesktopServices::openUrl(QUrl(QString::fromLatin1("http://www.doxygen.org/manual/index.html")));
}
void MainWindow::about()
@@ -267,7 +267,7 @@ void MainWindow::saveConfig(const QString &fileName)
{
if (fileName.isEmpty()) return;
QFile f(fileName);
- if (!f.open(QIODevice::WriteOnly))
+ if (!f.open(QIODevice::WriteOnly | QIODevice::Text ))
{
QMessageBox::warning(this,
tr("Error saving"),
diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp
index 66a0955e..44dea78e 100644
--- a/addon/doxywizard/expert.cpp
+++ b/addon/doxywizard/expert.cpp
@@ -765,9 +765,10 @@ void Expert::saveTopic(QTextStream &t,QDomElement &elem,QTextCodec *codec,
t << convertToComment(option->templateDocs());
t << endl;
}
- t << name.leftJustified(MAX_OPTION_LENGTH) << "= ";
- if (option)
+ t << name.leftJustified(MAX_OPTION_LENGTH) << "=";
+ if (option && !option->isEmpty())
{
+ t << " ";
option->writeValue(t,codec);
}
t << endl;
diff --git a/addon/doxywizard/images/tunecolor.png b/addon/doxywizard/images/tunecolor.png
index 4c7dd9d1..9e595e46 100755
Binary files a/addon/doxywizard/images/tunecolor.png and b/addon/doxywizard/images/tunecolor.png differ
diff --git a/addon/doxywizard/input.h b/addon/doxywizard/input.h
index 9e0a1bf7..5d86cc89 100644
--- a/addon/doxywizard/input.h
+++ b/addon/doxywizard/input.h
@@ -30,6 +30,7 @@ class Input
virtual void reset() = 0;
virtual void writeValue(QTextStream &t,QTextCodec *codec) = 0;
virtual void setTemplateDocs(const QString &docs) = 0;
+ virtual bool isEmpty() { return false; };
};
diff --git a/addon/doxywizard/inputstring.h b/addon/doxywizard/inputstring.h
index dba31f68..62342569 100644
--- a/addon/doxywizard/inputstring.h
+++ b/addon/doxywizard/inputstring.h
@@ -60,6 +60,7 @@ class InputString : public QObject, public Input
void updateDependencies() {}
void writeValue(QTextStream &t,QTextCodec *codec);
void setTemplateDocs(const QString &docs) { m_tdocs = docs; }
+ bool isEmpty() { return m_str.isEmpty(); }
public slots:
void reset();
diff --git a/addon/doxywizard/inputstrlist.cpp b/addon/doxywizard/inputstrlist.cpp
index 660ce40e..822bc4c8 100644
--- a/addon/doxywizard/inputstrlist.cpp
+++ b/addon/doxywizard/inputstrlist.cpp
@@ -260,3 +260,11 @@ void InputStrList::writeValue(QTextStream &t,QTextCodec *codec)
}
}
+bool InputStrList::isEmpty()
+{
+ foreach (QString s, m_strList)
+ {
+ if (!s.isEmpty()) return false;
+ }
+ return true;
+}
diff --git a/addon/doxywizard/inputstrlist.h b/addon/doxywizard/inputstrlist.h
index 53f3bcc4..c374092f 100644
--- a/addon/doxywizard/inputstrlist.h
+++ b/addon/doxywizard/inputstrlist.h
@@ -55,6 +55,7 @@ class InputStrList : public QObject, public Input
void updateDependencies() {}
void writeValue(QTextStream &t,QTextCodec *codec);
void setTemplateDocs(const QString &docs) { m_tdocs = docs; }
+ bool isEmpty();
public slots:
void reset();
diff --git a/addon/doxywizard/wizard.cpp b/addon/doxywizard/wizard.cpp
index b320aaae..ae8fa615 100644
--- a/addon/doxywizard/wizard.cpp
+++ b/addon/doxywizard/wizard.cpp
@@ -1210,18 +1210,23 @@ void Step4::setCallerGraphEnabled(int state)
void Step4::init()
{
+ int id = 0;
if (getBoolOption(m_modelData,STR_HAVE_DOT))
{
m_diagramModeGroup->button(2)->setChecked(true); // Dot
+ id = 2;
}
else if (getBoolOption(m_modelData,STR_CLASS_DIAGRAMS))
{
m_diagramModeGroup->button(1)->setChecked(true); // Builtin diagrams
+ id = 1;
}
else
{
m_diagramModeGroup->button(0)->setChecked(true); // no diagrams
+ id = 0;
}
+ m_dotGroup->setEnabled(id==2);
m_dotClass->setChecked(getBoolOption(m_modelData,STR_CLASS_GRAPH));
m_dotCollaboration->setChecked(getBoolOption(m_modelData,STR_COLLABORATION_GRAPH));
m_dotInheritance->setChecked(getBoolOption(m_modelData,STR_GRAPHICAL_HIERARCHY));
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 00000000..61cb2e89
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,59 @@
+image: Visual Studio 2017
+
+configuration:
+ - Release
+ - Debug
+
+platform:
+ - x64
+ - Win32
+
+environment:
+ # VS VERSION IN CMAKE STYLE
+ matrix:
+ - VSVERSION: "15 2017"
+ - VSVERSION: "14 2015"
+
+init:
+ - cmake --version
+ - perl --version
+ - msbuild /version
+
+install:
+ - ps: Invoke-WebRequest http://doxygen.nl/testing/miktex.zip -OutFile miktex.zip
+ - 7z x miktex.zip -oC:\deps\miktex
+# Disabled MikTeX installed due to unreliable download
+# - ps: Invoke-WebRequest https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs924/gs924w32.exe -OutFile gswin32c.exe
+# - gswin32c /S /D=C:\deps\ghostscript
+# - ps: if($env:platform -eq "x64") { Invoke-WebRequest https://miktex.org/download/win/miktexsetup-x64.zip -OutFile miktexsetup.zip }
+# - ps: if($env:platform -eq "Win32") { Invoke-WebRequest https://miktex.org/download/win/miktexsetup-x86.zip -OutFile miktexsetup.zip }
+# - 7z x miktexsetup.zip -oC:\tmpmiktex
+# - C:\tmpmiktex\miktexsetup --local-package-repository=C:\temp\miktex --package-set=basic download
+# - C:\tmpmiktex\miktexsetup --verbose --local-package-repository=C:\temp\miktex --package-set=basic install
+ - refreshenv
+ - pip install conan
+ - ps: |
+ "[requires]
+ libxml2/2.9.8@bincrafters/stable
+ winflexbison/2.5.16@bincrafters/stable" | Out-File -Encoding ASCII -FilePath conanfile.txt
+ - conan install . -g virtualrunenv --build missing
+ - activate_run.bat
+ - set "PATH=%PATH%;C:\deps\ghostscript\bin;C:\deps\miktex\miktex\bin"
+
+before_build:
+ - if "%platform%"=="Win32" ( set "CMAKE_GENERATOR_NAME=Visual Studio %VSVERSION%" )
+ - if "%platform%"=="x64" ( set "CMAKE_GENERATOR_NAME=Visual Studio %VSVERSION% Win64")
+ - mkdir build
+ - cd build
+ - cmake -G "%CMAKE_GENERATOR_NAME%" ..
+
+build:
+ project: "build\\PACKAGE.vcxproj"
+ parallel: false
+
+test_script:
+ - msbuild "testing\tests.vcxproj" /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
+# Disabled building document due to unreliable MikTeX installation
+# - cmake -G "%CMAKE_GENERATOR_NAME%" -D build_doc=ON ..
+ - cmake -G "%CMAKE_GENERATOR_NAME%" ..
+# - msbuild "doc\docs.vcxproj" /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
diff --git a/cmake/FindSQLite3.cmake b/cmake/FindSQLite3.cmake
index 77b8eb4e..45cc2122 100644
--- a/cmake/FindSQLite3.cmake
+++ b/cmake/FindSQLite3.cmake
@@ -71,8 +71,16 @@ else (SQLITE3_LIBRARIES AND SQLITE3_INCLUDE_DIRS)
endif (SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES)
if (SQLITE3_FOUND)
+
+ # Extract version from header file
+ find_file(SQLITE3_HEADER "sqlite3.h" HINTS ${SQLITE3_INCLUDE_DIRS})
+ if(SQLITE3_HEADER)
+ file(STRINGS "${SQLITE3_HEADER}" _DEF_TMP REGEX "^#define SQLITE_VERSION +\\\"[^\\\"]+\\\"")
+ string (REGEX REPLACE ".*\\\"(([0-9]+[.]?)+).*" "\\1" SQLITE3_VERSION "${_DEF_TMP}")
+ endif (SQLITE3_HEADER)
+
if (NOT Sqlite3_FIND_QUIETLY)
- message(STATUS "Found Sqlite3: ${SQLITE3_LIBRARIES}")
+ message(STATUS "Found Sqlite3: ${SQLITE3_LIBRARIES} (found version \"${SQLITE3_VERSION}\")")
endif (NOT Sqlite3_FIND_QUIETLY)
else (SQLITE3_FOUND)
if (Sqlite3_FIND_REQUIRED)
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index b95afd86..7beb485c 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -27,6 +27,17 @@ else()
# doxygen project variables are unknown so look for doxygen in PATH
find_package(Doxygen)
endif()
+#
+# set output directory for some extra HTML files
+#
+file(STRINGS Doxyfile DOXY_HTML_OUTPUT REGEX "HTML_OUTPUT.*")
+string(LENGTH "${DOXY_HTML_OUTPUT}" DOXY_HTML_OUTPUT_LEN)
+if (${DOXY_HTML_OUTPUT_LEN})
+ string(REGEX REPLACE ".*HTML_OUTPUT *= *\([^ ]*\)" "\\1" DOXY_HTML_OUTPUT ${DOXY_HTML_OUTPUT})
+else()
+ set(DOXY_HTML_OUTPUT "html")
+endif()
+set(PROJECT_BINARY_HTML_DIR ${PROJECT_BINARY_DIR}/${DOXY_HTML_OUTPUT}/)
set(DOC_INSTALL_DIR "share/doc/packages/doxygen" CACHE STRING "Relative path where to install the documentation")
set(DOC_FILES
@@ -80,9 +91,11 @@ set(DOC_FILES
starting.doc
trouble.doc
xmlcmds.doc
+ emojisup.doc
language.tpl
maintainers.txt
translator.py
+ smile.png
)
file(GLOB LANG_FILES "${TOP}/src/translator_??.h")
@@ -113,7 +126,7 @@ configure_file(${CMAKE_SOURCE_DIR}/doc/doxyindexer.1 ${PROJECT_BINARY_DIR}/
# doc/language.doc (see tag Doxyfile:INPUT)
add_custom_command(
- COMMAND ${PYTHON_EXECUTABLE} translator.py
+ COMMAND ${PYTHON_EXECUTABLE} translator.py ${CMAKE_SOURCE_DIR}
DEPENDS ${PROJECT_BINARY_DIR}/doc/maintainers.txt ${PROJECT_BINARY_DIR}/doc/language.tpl ${PROJECT_BINARY_DIR}/doc/translator.py
OUTPUT language.doc
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc
@@ -131,7 +144,7 @@ set_source_files_properties(config.doc PROPERTIES GENERATED 1)
################################################################################
add_custom_target(run_doxygen
COMMENT "Generating Latex and HTML documentation."
- COMMAND ${DOXYGEN_EXECUTABLE}
+ COMMAND ${CMAKE_COMMAND} -E env VERSION=${VERSION} ${DOXYGEN_EXECUTABLE}
DEPENDS ${PROJECT_BINARY_DIR}/doc/language.doc ${PROJECT_BINARY_DIR}/doc/config.doc
DEPENDS ${OUT_DOC_FILES}
DEPENDS examples
@@ -152,8 +165,8 @@ add_custom_target(doxygen_pdf
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/latex
)
add_custom_target(docs
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/doc/doxygen_logo.gif ${PROJECT_BINARY_DIR}/html/
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/doc/doxygen_logo_low.gif ${PROJECT_BINARY_DIR}/html/
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/doc/doxygen_logo.gif ${PROJECT_BINARY_HTML_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/doc/doxygen_logo_low.gif ${PROJECT_BINARY_HTML_DIR}
DEPENDS ${PROJECT_BINARY_DIR}/man/doxygen.1
${PROJECT_BINARY_DIR}/man/doxywizard.1
${PROJECT_BINARY_DIR}/man/doxysearch.1
diff --git a/doc/Doxyfile b/doc/Doxyfile
index ceb6385d..4c0a19dd 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -38,7 +38,7 @@ INPUT = index.doc install.doc starting.doc docblocks.doc markdown.do
autolink.doc output.doc searching.doc extsearch.doc customize.doc custcmd.doc \
external.doc faq.doc trouble.doc features.doc \
doxygen_usage.doc doxywizard_usage.doc \
- config.doc commands.doc htmlcmds.doc xmlcmds.doc language.doc \
+ config.doc commands.doc htmlcmds.doc xmlcmds.doc emojisup.doc language.doc \
perlmod.doc perlmod_tree.doc arch.doc changelog.doc
FILE_PATTERNS = *.cpp *.h *.doc
EXAMPLE_PATH = ../examples
@@ -55,3 +55,4 @@ ALIASES = LaTeX="\f$\mbox{\LaTeX}\f$"
ALIASES += TeX="\f$\mbox{\TeX}\f$"
LATEX_BATCHMODE = YES
LATEX_EXTRA_STYLESHEET = manual.sty
+LATEX_EMOJI_DIRECTORY = ../doc
diff --git a/doc/arch.doc b/doc/arch.doc
index e5fbbdc1..bd51a1bd 100644
--- a/doc/arch.doc
+++ b/doc/arch.doc
@@ -41,14 +41,14 @@ available through the global functions \c Config_getXXX(), where \c XXX is the
type of the option. The argument of these function is a string naming
the option as it appears in the configuration file. For instance:
\c Config_getBool("GENERATE_TESTLIST") returns a reference to a boolean
-value that is \c TRUE if the test list was enabled in the config file.
+value that is \c TRUE if the test list was enabled in the configuration file.
The function \c readConfiguration() in \c src/doxygen.cpp
reads the command line options and then calls the configuration parser.
C Preprocessor
-The input files mentioned in the config file are (by default) fed to the
+The input files mentioned in the configuration file are (by default) fed to the
C Preprocessor (after being piped through a user defined filter if available).
The way the preprocessor works differs somewhat from a standard C Preprocessor.
@@ -139,8 +139,8 @@ strings and executes the commands it finds in it (this is the second pass
in parsing the documentation). It writes the result directly to the output
generators.
-The parser is written in C++ and can be found in src/docparser.cpp. The
-tokens that are eaten by the parser come from src/doctokenizer.l.
+The parser is written in C++ and can be found in \c src/docparser.cpp. The
+tokens that are eaten by the parser come from \c src/doctokenizer.l.
Code fragments found in the comment blocks are passed on to the source parser.
The main entry point for the documentation parser is \c validatingParseDoc()
@@ -190,12 +190,12 @@ could extract information from the XML output. Possible tools could be:
Since doxygen uses a lot of \c flex code it is important to understand
how \c flex works (for this one should read the \c man page)
and to understand what it is doing when \c flex is parsing some input.
-Fortunately, when flex is used with the `-d` option it outputs what rules
+Fortunately, when \c flex is used with the `-d` option it outputs what rules
matched. This makes it quite easy to follow what is going on for a
particular input fragment.
-To make it easier to toggle debug information for a given flex file I
-wrote the following perl script, which automatically adds or removes `-d`
+To make it easier to toggle debug information for a given \c flex file I
+wrote the following \c perl script, which automatically adds or removes `-d`
from the correct line in the \c Makefile:
\verbatim
@@ -240,11 +240,30 @@ $now = time;
utime $now, $now, $file;
\endverbatim
Another way to get rules matching / debugging information
-from the \c flex code is setting LEX_FLAGS with \c make (`make LEX_FLAGS=-d`).
+from the \c flex code is setting \c LEX_FLAGS with \c make (`make LEX_FLAGS=-d`).
Note that by running doxygen with `-d lex` you get information about which
`flex codefile` is used.
+
Testing
+
+Doxygen has a small set of tests available to test, some, code integrity.
+The tests can be run by means of the command `make tests`. When only one or a
+few tests are required one can set the variable \c TEST_FLAGS when running the
+test e.g. `make TEST_FLAGS="--id 5" tests` or for multiple tests
+`make TEST_FLAGS="--id 5 --id 7" tests`. For a full set of possibilities give the
+command `make TEST_FLAGS="--help" tests`. It is also possible to specify the
+`TEST_FLAGS` as an environment variable (works also for testing through Visual
+Studio projects), e.g. `setenv TEST_FLAGS "--id 5 --id 7"` and `make tests`.
+
+
Doxyfile differences
+
+In case one has to communicate through e.g. a forum the configuration settings that
+are different from the standard doxygen configuration file settings one can run the
+doxygen command: with the `-x` option and the name of the configuration file (default
+is `Doxyfile`). The output will be a list of the not default settings (in `Doxyfile`
+format).
+
\htmlonly
Return to the index.
\endhtmlonly
diff --git a/doc/autolink.doc b/doc/autolink.doc
index 98556c59..bf9fe575 100644
--- a/doc/autolink.doc
+++ b/doc/autolink.doc
@@ -16,7 +16,7 @@
*/
/*! \page autolink Automatic link generation
- \tableofcontents
+ \tableofcontents{html,latex}
Most documentation systems have special `see also' sections where links
to other pieces of documentation can be inserted.
@@ -80,7 +80,7 @@
are required to identify the target, i.e. 'func(int) const' and 'func(int)'
target different member functions.
\par Note 3:
- For JavaDoc compatibility a \# may be used instead of a :: in
+ For Javadoc compatibility a \# may be used instead of a :: in
the patterns above.
\par Note 4:
In the documentation of a class containing a member foo,
diff --git a/doc/changelog.doc b/doc/changelog.doc
index 3efb31ea..a06d09f6 100644
--- a/doc/changelog.doc
+++ b/doc/changelog.doc
@@ -1,130 +1,531 @@
/** \page changelog Changelog
-\tableofcontents
+\tableofcontents{html,latex}
\section log_1_8 1.8 Series
+\subsection log_1_8_15 Release 1.8.15
+\htmlonly
+(release date 27-12-2018)
+
+
+
+
Bug 851 - A function cannot be documented as related to two classes. [view]
+
Bug 721169 - Wrong call graph in simple situation [view]
-
Bug 721302 - [Latex/PDF] Merging brief and detailed description in file section [view]
-
Bug 721462 - Parsing problem with C++11 empty initializer lists [view]
-
Bug 721618 - Move constructors and move assignment operators of embedded classes of template classes cannot be matched. [view]
-
Bug 721878 - Dia diagrams not displayed by Firefox [view]
-
Bug 722457 - regression referencing namespaced type [view]
-
Bug 722603 - doxygen nested \if \endif sample not working [view]
-
Bug 722619 - doxygen 1.8.6 sorts the contents of a namespace by group within the Class List [view]
-
Bug 722711 - Link refs with no title swallow an extra newline [view]
-
Bug 722759 - Documentation for derived classes no longer has an "Additional Inherited Members" section after upgrading doxygen from 1.8.3.1 to 1.8.6 [view]
-
Bug 722786 - configure --prefix=/opt/foo not accepted [view]
-
Bug 722788 - Command \| not working when last character in markdown table line [view]
-
Bug 723299 - Last line of code block lost if it is only one character and there is no text afterward [view]
-
Bug 723314 - Doxygen crashes on incorrect end group /**< @} */ [view]
-
Bug 723516 - star is not printed in \code environment [view]
-
Bug 724241 - Internal inconsistency: namespace in IDL [view]
-
Bug 724949 - Server side (PHP) search broke in 1.8.3 [view]
-
Bug 726219 - python3 import style causes doxygen to ignore some inheritances [view]
-
Bug 726294 - Markdown Extra - fenced code block: '>' before tab width parsed as block quote [view]
-
Bug 726469 - Tilde sign in combination with <pre> and MARKDOWN_SUPPORT disabled [view]
-
Bug 726722 - Blockquote followed by text inserts an extra paragraph [view]
-
Bug 726734 - alignment of blockquotes in pdf [view]
-
Bug 728077 - Build fails when --with-libclang on Fedora [view]
Bug 5388 - Wrong call graph in simple situation [view]
+
Bug 5389 - [Latex/PDF] Merging brief and detailed description in file section [view]
+
Bug 5390 - Parsing problem with C++11 empty initializer lists [view]
+
Bug 5393 - Move constructors and move assignment operators of embedded classes of template classes cannot be matched. [view]
+
Bug 5396 - Dia diagrams not displayed by Firefox [view]
+
Bug 5404 - regression referencing namespaced type [view]
+
Bug 5408 - doxygen nested \if \endif sample not working [view]
+
Bug 5410 - doxygen 1.8.6 sorts the contents of a namespace by group within the Class List [view]
+
Bug 5414 - Link refs with no title swallow an extra newline [view]
+
Bug 5415 - Documentation for derived classes no longer has an "Additional Inherited Members" section after upgrading doxygen from 1.8.3.1 to 1.8.6 [view]
+
Bug 5416 - configure --prefix=/opt/foo not accepted [view]
+
Bug 5417 - Command \| not working when last character in markdown table line [view]
+
Bug 5421 - Last line of code block lost if it is only one character and there is no text afterward [view]
+
Bug 5422 - Doxygen crashes on incorrect end group /**< @} */ [view]
+
Bug 5424 - star is not printed in \code environment [view]
+
Bug 5425 - Internal inconsistency: namespace in IDL [view]
+
Bug 5428 - Server side (PHP) search broke in 1.8.3 [view]
+
Bug 5436 - python3 import style causes doxygen to ignore some inheritances [view]
+
Bug 5437 - Markdown Extra - fenced code block: '>' before tab width parsed as block quote [view]
+
Bug 5438 - Tilde sign in combination with <pre> and MARKDOWN_SUPPORT disabled [view]
+
Bug 5439 - Blockquote followed by text inserts an extra paragraph [view]
Bug 693537 - Create possibility to keep user comments in Doxyfile
-
Bug 701949 - Latex: Hyperlinks for \secreflist / \refitem
-
Bug 702265 - Generated Doxyfile differs from result of doxygen -u (partial fix)
-
Bug 705910 - Indexing and searching cannot treat non ASCII identifiers
-
Bug 706520 - Fortran: in body documentation lands on wrong place In some cases, in propriety code, with in body Fortran documentation doxygen crashed. I REOPENED Bug_706520 for this
-
Bug 706804 - Fortran: Doxygen mixes up function-attributes with the return type test string should not be equal to "function" but should contain "function"
Bug 707353 - Accept IDs using unicode(non ASCII) characters in python codes
-
Bug 707389 - GENERATE_TREEVIEW=YES disables touch scrolling with Android 3.x
-
Bug 707431 - Cannot @ref or @link C++ operator overloads
-
Bug 707483 - Wrong page number and header in pdf output
-
Bug 707554 - When I use @INCLUDE DoxyWizard is closed Current directory was not changed at the right time so the include files could not be found in the "current" directory (i.e. the directory where the Doxyfile resides too, as this directory is shown as the current directory in the doxywizard). This is also important when the doxywizard is started from a shortcut.
-
Bug 707567 - Asterisks in comment wrongly displayed for @code
-
Bug 707641 - `FILTER_SOURCE_FILES=YES` required to build CALL_GRAPHS https://bugzilla.gnome.org/show_bug.cgi?id=707641
-
Bug 707685 - Fortran: error message when missing last EOL In case the original buffer in either fixed or free format code does not contain an EOL as last character, add it.
Bug 711787 - Long initialization line in C stops doxygen An extra "breakpoint" in the input string has been created in the form of a , (comma), so for initialization lines the line will be shorter and the , (comma) will be copied later on.
Bug 5070 - Create possibility to keep user comments in Doxyfile
+
Bug 5207 - Latex: Hyperlinks for \secreflist / \refitem
+
Bug 5213 - Generated Doxyfile differs from result of doxygen -u (partial fix)
+
Bug 5263 - Indexing and searching cannot treat non ASCII identifiers
+
Bug 5270 - Fortran: in body documentation lands on wrong place In some cases, in propriety code, with in body Fortran documentation doxygen crashed. I REOPENED Bug_706520 for this
+
Bug 5271 - Fortran: Doxygen mixes up function-attributes with the return type test string should not be equal to "function" but should contain "function"
Bug 5282 - Accept IDs using unicode(non ASCII) characters in python codes
+
Bug 5283 - GENERATE_TREEVIEW=YES disables touch scrolling with Android 3.x
+
Bug 5284 - Cannot @ref or @link C++ operator overloads
+
Bug 5285 - Wrong page number and header in pdf output
+
Bug 5286 - When I use @INCLUDE DoxyWizard is closed Current directory was not changed at the right time so the include files could not be found in the "current" directory (i.e. the directory where the Doxyfile resides too, as this directory is shown as the current directory in the doxywizard). This is also important when the doxywizard is started from a shortcut.
+
Bug 5288 - Asterisks in comment wrongly displayed for @code
+
Bug 5289 - `FILTER_SOURCE_FILES=YES` required to build CALL_GRAPHS 5289
+
Bug 5290 - Fortran: error message when missing last EOL In case the original buffer in either fixed or free format code does not contain an EOL as last character, add it.
Bug 5347 - Long initialization line in C stops doxygen An extra "breakpoint" in the input string has been created in the form of a , (comma), so for initialization lines the line will be shorter and the , (comma) will be copied later on.
Bug 5374 - USE_MDFILE_AS_MAINPAGE doesn't work if full path is specified.
+
Bug 5381 - inline source browser shows wrong code with multi-line c++11's raw strings
Add support for honoring svg image format preference in msc
Added @parblock and @endparblock commands
Added compile support for Mavericks
@@ -1296,9 +1696,10 @@
Small spelling correction to generate an rtf extensions file -> to generate a rtf extensions file
Some texts can be independent of \htmlonly / \latexonly
Space missing in error message. the word 'in' and the vale of filesOption were concatenated
-
This patch contains changes regarding the build system so that the *nix and Windows systems use the same information (consistency). Some use names routine names have been changed (from .l files with -P option) to reflect the file name that generated the routines, this makes it easier to create a general procedure. A number of include / header files are files are generated from different file types (html, xml, js), due some limitations of the windows build system the generated file names had to be changed (the extension in the windows build system is only available including the '.' so e.g. the file jquery_fx.js generates now jquery_fx.js.h instead of jquery_fx_js.h) In the windows version the creation of .cpp files from .l files has been adjusted to correct for the YY_BUF_SIZE problems. Furthermore on windows (and also used on *nix) some commends have been replaced with python scripts so that on windows only python is need (besides flex and bison). On *nix also perl is required for the generation using tmake.
+
This patch contains changes regarding the build system so that the *nix and Windows systems use the same information (consistency). Some use names routine names have been changed (from .l files with -P option) to reflect the file name that generated the routines, this makes it easier to create a general procedure. A number of include / header files are files are generated from different file types (html, xml, js), due some limitations of the windows build system the generated file names had to be changed (the extension in the windows build system is only available including the '.' so e.g. the file jquery_fx.js generates now jquery_fx.js.h instead of jquery_fx_js.h) In the windows version the creation of .cpp files from .l files has been adjusted to correct for the YY_BUF_SIZE problems. Furthermore on windows (and also used on *nix) some commands have been replaced with python scripts so that on windows only python is need (besides flex and bison). On *nix also perl is required for the generation using tmake.
Updated Visual Studio project files to include new source files
-
Usage of the -d option corrected Giving an error when a wrong -d option is given. Made some error messages more consistent. Corrected usage of the exit call, in case of an error: exit(1) otherwise exit(0). A closer look should be made on exitDoxygen as it does not contain any exit statements and it is unclear (to me) when it is used.
VHDL-2008 and arrays on unconstrained elements
+
Usage of the -d option corrected Giving an error when a wrong -d option is given. Made some error messages more consistent. Corrected usage of the exit call, in case of an error: exit(1) otherwise exit(0). A closer look should be made on exitDoxygen as it does not contain any exit statements and it is unclear (to me) when it is used.
+
VHDL-2008 and arrays on unconstrained elements
consider currentFile when searching for global symbols
doc/language.doc generated from the updated sources (bgcolored)
doc/language.tpl -- UTF-8 reflected in the langhowto template
@@ -1333,54 +1734,54 @@
Bug fixes
-
Bug 668007 - HTML commands - documentation of </dd> tag missing
-
Bug 676879 - parameter on doxywizard manual Added sentence in respect to possible argument for doxywizard Added images to the LaTex / pdf version of the manual
-
Bug 684324 - Strange behavior when placing cite within brief.
-
Bug 688858 - SHORT_NAMES break references to \page in PDF output
-
Bug 691315 - Line breaks are not copied/displayed properly when using @copydoc.
-
Bug 691830 - Logical confusion with DISABLE_INDEX and GENERATE_TREEVIEW
Bug 706520 - Fortran: in body documentation lands on wrong place
+
Bug 4532 - HTML commands - documentation of </dd> tag missing
+
Bug 4710 - parameter on doxywizard manual Added sentence in respect to possible argument for doxywizard Added images to the LaTex / pdf version of the manual
+
Bug 4890 - Strange behavior when placing cite within brief.
+
Bug 4963 - SHORT_NAMES break references to \page in PDF output
+
Bug 5023 - Line breaks are not copied/displayed properly when using @copydoc.
+
Bug 5035 - Logical confusion with DISABLE_INDEX and GENERATE_TREEVIEW
Included patch by Markus Geimer which adds a new option
LATEX_EXTRA_FILES which works similarly to HTML_EXTRA_FILES in that
it copied specified files to the LaTeX output directory.
-
id 698223: Added support for C++11 keyword alignas
-
id 693178: Added support for processing DocSets with Dash (thanks to
+
id 5056: Added support for processing DocSets with Dash (thanks to
Bogdan Popescu for the patch
-
id 684782: Added option EXTERNAL_PAGES which can be used to determine
+
id 4900: Added option EXTERNAL_PAGES which can be used to determine
whether or not pages importated via tags will appear under related
pages (similar to EXTERNAL_GROUPS).
-
id 692227: Added new MathJax command MATHJAX_CODEFILE which supports
+
id 5042: Added new MathJax command MATHJAX_CODEFILE which supports
including a file with MathJax related scripting to be inserted before
the MathJax script is loaded. Thanks to Albert for the patch.
-
id 693537: Comments in the config file starting with ## will now be
+
id 5070: Comments in the config file starting with ## will now be
kept when upgrading the file with doxygen -u (and doxygen -s -u).
Thanks to Albert for the patch.
-
id 693422: Adds support for Latvian (thanks to a patch by Lauris).
+
id 5061: Adds support for Latvian (thanks to a patch by Lauris).
Included language updates for Ukrainian, Romanian, and Korean
Bug fixes
-
id 145294: Fixed parse issue when using less than inside a template
+
id 1169: Fixed parse issue when using less than inside a template
argument.
-
id 325266 man page output was missing a linebreak before .SH when
+
id 1976 man page output was missing a linebreak before .SH when
definition a group with a section.
-
id 338205: @anchor were wrong when CREATE_SUBDIRS was enabled.
-
id 427012: Putting a @todo in front of an anonymous namespace caused
+
id 2114: @anchor were wrong when CREATE_SUBDIRS was enabled.
+
id 2445: Putting a @todo in front of an anonymous namespace caused
bogus entry in the todo list.
-
id 564462: Fixed alignment issue with tabs and multibyte characters.
-
id 567542: Character entities in titles were not rendered correctly
+
id 3198: Fixed alignment issue with tabs and multibyte characters.
+
id 3230: Character entities in titles were not rendered correctly
in the HTML navigation tree.
-
id 571561: No space between * and tag (e.g. \endcode) made parser
+
id 3272: No space between * and tag (e.g. \endcode) made parser
misbehave
-
id 583233: Included patch to limit generated Doxyfile comments to 80
+
id 3397: Included patch to limit generated Doxyfile comments to 80
columns
-
id 592626: Fixed off-by-one with MAX_DOT_GRAPH_DEPTH.
-
id 619790: Improved linking to template specializations.
+
id 3487: Fixed off-by-one with MAX_DOT_GRAPH_DEPTH.
+
id 3785: Improved linking to template specializations.
Thanks to David Haney for the patch.
-
id 627712: Doxygen Header in C Files makes empty Lines in HTML Source
+
id 3909: Doxygen Header in C Files makes empty Lines in HTML Source
Code when starts in Line 1
-
id 639954: Fortran: array constructors with brackets were not correctly
+
id 4096: Fortran: array constructors with brackets were not correctly
recognized.
-
id 646428: The generated man pages had a .PP just before the subject
+
id 4223: The generated man pages had a .PP just before the subject
description
-
id 646431: On generated manpages the return section is incorrectly
+
id 4224: On generated manpages the return section is incorrectly
indented
-
id 650004: use \page now generates a man page were the . is not
+
id 4261: use \page now generates a man page were the . is not
replaced by _8.
-
id 657704: Fixed issue with PROJECT_LOGO when using backslashes in
+
id 4385: Fixed issue with PROJECT_LOGO when using backslashes in
the path.
-
id 666008: Fortran: Using @var at module level didn't work.
+
id 4499: Fortran: Using @var at module level didn't work.
expect a file/path name.
-
id 673218: Replaced "echo -n" with "printf" in the configure script.
-
id 674856: Removed warning when using \endinternal
-
id 675607: Added &, @, and # as allowed characters for commands that
-
id 679626: Included patch by Abert to correctly link pages in the manual
-
id 681874: Added support for single column Markdown tables.
-
id 682369: Incomplete documentation on doxygen -w latex
-
id 683516: Doxygen crashed when structural commands (like \var) appeared
+
id 4650: Replaced "echo -n" with "printf" in the configure script.
id 5158: Trailing comments were not always rendered properly if
MARKDOWN_SUPPORT was enabled.
-
id 699460: Updated doxygen man page (thanks to Manuel for the patch).
-
id 699464: Added reference to \xmlonly and \docbookonly in \htmlonly
-
id 699731: LaTeX: switch to using the xtabular package instead of
+
id 5159: Updated doxygen man page (thanks to Manuel for the patch).
+
id 5160: Added reference to \xmlonly and \docbookonly in \htmlonly
+
id 5163: LaTeX: switch to using the xtabular package instead of
longtable to prevent overfull vbox errors.
-
id 699732: Template parameters and Exceptions were rendered differently
+
id 5164: Template parameters and Exceptions were rendered differently
than Parameters and Return Values in the LaTeX output.
-
id 700153: Tcl: Fixed crash when parsing certain Tcl code.
-
id 700345: Comment blocking ending with ///// made slashes appear in
+
id : Tcl: Fixed crash when parsing certain Tcl code.
+
id 5171: Comment blocking ending with ///// made slashes appear in
the output.
-
id 700456: Added support for separating auto list items with an
+
id 5180: Added support for separating auto list items with an
empty paragraph.
Included a couple of VHDL fixes (thanks to Martin Kreis for the patch)
\include and \includelineno both showed line numbers.
@@ -1589,7 +1990,7 @@
Disabled the disk cache for member data. Allows removing quite some complexity
in doxygen and is not really needed now that 64bit systems with >4GB RAM
are becoming more common. Let me know if you think you benefit from this caching.
-
id 691607: Using $relpath$ in a custom footer could lead to ambiguities
+
id 5031: Using $relpath$ in a custom footer could lead to ambiguities
when followed by a name that could also be a marker, like 'search'.
Now $relpath^ should be used instead. $relpath$ is still supported for
backward compatibility.
@@ -1605,31 +2006,31 @@
Bug fixes
-
id 644350: Fortran: Included patch to improve parsing line continuation
+
id 4191: Fortran: Included patch to improve parsing line continuation
characters.
-
id 645423: Fortran: added support for protected attribute
-
id 682550, 691315: When using @copydoc, paragraphs breaks did not appear
+
id 4204: Fortran: added support for protected attribute
+
id 4859, 5023: When using @copydoc, paragraphs breaks did not appear
in the copied documentation.
-
id 686581: Fortran: handle single quotes in normal Fortran comment.
-
id 686689, 691335: Scope of forwardly declared template class was lost
+
id 4930: Fortran: handle single quotes in normal Fortran comment.
+
id 4931, 5025: Scope of forwardly declared template class was lost
in the output.
-
id 689713: Tcl: Inline source code was not rendered correctly.
-
id 690787: Fixed case were a cyclic inheritance relation could crash
+
id 4978: Tcl: Inline source code was not rendered correctly.
+
id 5005: Fixed case were a cyclic inheritance relation could crash
doxygen.
-
id 690831: Using @subpage in a -# style list was not handled properly.
-
id 691000: For a mainpage without title the project name is now shown as
+
id 5008: Using @subpage in a -# style list was not handled properly.
+
id 5012: For a mainpage without title the project name is now shown as
the title in the XML output.
-
id 691277: The generated list of citations is now no longer included in
+
id 5017: The generated list of citations is now no longer included in
the tag file.
-
id 691073: Documenting strongly typed enum values outside of the enum
+
id 5014: Documenting strongly typed enum values outside of the enum
did not work.
-
id 691310: Python: = was missing in the output for variable assignment.
-
id 691323: Doxygen could crash when creating inline msc graphs.
-
id 691340: Members didn't have a More.. link to jump to detailed docs.
-
id 691602: Doxygen did not probably distinguish between two template
-
id 691798: regression: C++ style comments that started with a line of
+
id 5022: Python: = was missing in the output for variable assignment.
+
id 5024: Doxygen could crash when creating inline msc graphs.
+
id 5026: Members didn't have a More.. link to jump to detailed docs.
+
id 5030: Doxygen did not probably distinguish between two template
+
id 5034: regression: C++ style comments that started with a line of
slashes did not get processed correctly anymore.
-
id 692031: Fixed parse error when left shift operator occurred as a
+
id 5038: Fixed parse error when left shift operator occurred as a
default parameter.
members or functions that only differ in the return type.
Setting SEARCH_INCLUDES to NO resulted in no include graphs and no
@@ -1657,7 +2058,7 @@
Pez Cuckow for the patch).
A blockquote in Markdown does no longer require a whitespace
after the last '>' if the '>' is followed by a newline.
-
id 682718: Included patch to add version info to all generated
+
id 4863: Included patch to add version info to all generated
template files (headers, footers, stylesheets, layout files, etc).
New features
@@ -1673,91 +2074,91 @@
See the manual for details.
Added USE_MDFILE_AS_MAINPAGE config option to select a markdown page to
be used as the main page.
-
id 630645: This patch (contributed by Albert) adds support for
+
id 3945: This patch (contributed by Albert) adds support for
simple logic expressions for \cond, \if, and friends, i.e. you can do
\if (SOME_SECTION_NAME && (!THIS_ALTERNATIVE || THAT_ALTERNATIVE))
-
id 684152: Patch (contributed by Albert) adds a new configuration
+
id 4888: Patch (contributed by Albert) adds a new configuration
option MATHJAX_FORMAT to select the MathJax output format. Options are
HTML-CSS, NativeMML, or SVG.
Bug fixes
-
id 670853: Fixed compile issues with 0 to QCString cast for
+
id 4584: Fixed compile issues with 0 to QCString cast for
old compilers.
-
id 678139: A class A deriving from another class B inside a namespace
+
id 4752: A class A deriving from another class B inside a namespace
not known to doxygen, caused class B to appear in the global scope.
-
id 681209: Fixed problem processing .bib files when they were located
+
id 4839: Fixed problem processing .bib files when they were located
in a path containing spaces.
-
id 681830: Using \addindex in a page will now produce a link to the
+
id 4848: Using \addindex in a page will now produce a link to the
word, instead of the start of the page.
-
id 681831: The TREEVIEW_WIDTH option did not have any effect.
-
id 681898: Jumping from a level 3 section to a level 1 section did
+
id 4849: The TREEVIEW_WIDTH option did not have any effect.
+
id 4851: Jumping from a level 3 section to a level 1 section did
not appear correctly in the page TOC.
-
id 681976: C++11: Improved handling of noexcept expressions, e.g.:
+
id 4852: C++11: Improved handling of noexcept expressions, e.g.:
Test() noexcept ( noexcept(T::T()) ) = default;
-
id 682048: Improved SIGINT handling when running multiple dot instances.
-
id 682602: Fixed problem processing .bib files when using a non default
+
id 4853: Improved SIGINT handling when running multiple dot instances.
+
id 4860: Fixed problem processing .bib files when using a non default
output directory.
-
id 682713: Comment for IDL_PROPERTY_SUPPORT in the config file template
+
id 4862: Comment for IDL_PROPERTY_SUPPORT in the config file template
did not have line wrapping.
-
id 682728: Setting SHOW_FILES to NO prevented call graphs from being
+
id 4864: Setting SHOW_FILES to NO prevented call graphs from being
generated.
-
id 682740: Fortran: In initialization statement the "=" was missing
-
id 683284: Fortran: ALIASes where not replaced in !! and !< comments.
-
id 683976: Added meta tag "generator" to HTML output (thanks to
+
id 4865: Fortran: In initialization statement the "=" was missing
+
id 4872: Fortran: ALIASes where not replaced in !! and !< comments.
+
id 4886: Added meta tag "generator" to HTML output (thanks to
Albert for the patch).
-
id 684781: Sections of the main page did not appear in the
+
id 4899: Sections of the main page did not appear in the
navigation tree until the main page had sub pages.
Also fixed bug in treeview that caused mainpage with title and
sections to appear at the same level as the sections.
-
id 685125: Doxygen could select the wrong overloaded method when
+
id 4908: Doxygen could select the wrong overloaded method when
the only difference in parameter types was the template type of
a typedef.
-
id 685181: Inheriting member documentation did not work in combination
+
id 4909: Inheriting member documentation did not work in combination
with Java interfaces.
-
id 685623: Enum values did not appear in the detailed documentation
+
id 4915: Enum values did not appear in the detailed documentation
when using C++11 style enums.
-
id 685879: Even though HIDE_UNDOC_MEMBERS was enabled, the navigation
+
id 4920: Even though HIDE_UNDOC_MEMBERS was enabled, the navigation
still showed undocumented members.
-
id 685940: Fixed back button behaviour when using the navigation tree.
-
id 686284: Added anchors to refs in the index.qhp TOC.
-
id 686826: Added XML declaration to index.qhp TOC.
-
id 686956: When a class and its base class has the same nested class,
+
id 4921: Fixed back button behaviour when using the navigation tree.
+
id 4927: Added anchors to refs in the index.qhp TOC.
+
id : Added XML declaration to index.qhp TOC.
+
id 4932: When a class and its base class has the same nested class,
the collaboration diagram could point to the wrong class.
-
id 686983: Comments inside a function macro parameter appeared before
+
id 4934: Comments inside a function macro parameter appeared before
the expanded macro, instead of being treated as part of the parameter.
-
id 687301: Allow minus in the name of a HTML attribute.
-
id 687572: Code fragments were wrapped too early in the latex output.
-
id 688226: Fixed Qt version number in ./configure --help text.
-
id 688463: Included patch to prevent processing identifiers starting
+
id 4936: Allow minus in the name of a HTML attribute.
+
id 4939: Code fragments were wrapped too early in the latex output.
+
id 4947: Fixed Qt version number in ./configure --help text.
+
id 4955: Included patch to prevent processing identifiers starting
with _ or __ as markdown.
-
id 688531: Horizontal ruler inside paragraph caused missing </p>
-
id 688542: Using "usergroup" in the layout.xml caused missing <div>
-
id 688739: Fixed problem with user defined entries in the eclipse help
+
id 4956: Horizontal ruler inside paragraph caused missing </p>
+
id 4957: Using "usergroup" in the layout.xml caused missing <div>
+
id 4962: Fixed problem with user defined entries in the eclipse help
index (thanks to Rene Papenhoven for the fix).
-
id 688647: Fixed problem parsing initializer list with C++11 style
+
id 4959: Fixed problem parsing initializer list with C++11 style
uniform types.
-
id 689341: \if around list item preceded by whitespace caused wrong
+
id 4968: \if around list item preceded by whitespace caused wrong
list in the output.
-
id 689461: Correct link in documentation of SIP_SUPPORT option.
-
id 689720: Fixed bug that could prevent refman.tex from being generated.
-
id 689833: Fixed missing space in Chinese translation.
-
id 690093: Files added via HTML_EXTRA_STYLESHEET did not correct refer
+
id 4969: Correct link in documentation of SIP_SUPPORT option.
+
id 4979: Fixed bug that could prevent refman.tex from being generated.
+
id 4980: Fixed missing space in Chinese translation.
+
id 4989: Files added via HTML_EXTRA_STYLESHEET did not correct refer
to files that where placed in a subdirectory.
-
id 690190: Searching for multibyte characters did not work with the
+
id 4991: Searching for multibyte characters did not work with the
server based search engine.
-
id 690250: Fixed case where line numbers got out of sync with the code.
-
id 690341: First member of an anonymous C++11 style enum was not shown
+
id 4993: Fixed case where line numbers got out of sync with the code.
+
id 4994: First member of an anonymous C++11 style enum was not shown
properly.
-
id 690385: Fixed case where _'s where falsely converted to Markdown
+
id 4995: Fixed case where _'s where falsely converted to Markdown
emphasis.
-
id 690403: Title not used when \ref'ing to a \section imported via
+
id 4996: Title not used when \ref'ing to a \section imported via
a tag file.
-
id 690418: Behavior of @cond was accidentally reversed by new expression
+
id 4997: Behavior of @cond was accidentally reversed by new expression
parser.
-
id 690602: Fixed problems handling @cond inside /// comments.
-
id 690629: Fixed case where doxygen would during preprocessing.
-
id 690685: A file specified using HTML_EXTRA_STYLEHSHEET did not end
+
id 5000: Fixed problems handling @cond inside /// comments.
+
id 5001: Fixed case where doxygen would during preprocessing.
+
id 5002: A file specified using HTML_EXTRA_STYLEHSHEET did not end
up in the Qt Help index.
Improved the way enum's are rendered in the HTML output.
When inlining structs (INLINE_SIMPLE_STRUCTS=YES) a <p> was missing
@@ -1794,20 +2195,20 @@
enum class E
enums with explicit type, e.g.:
enum E : unsigned int { ... }
-
id 678097: added support for final keyword on classes and methods.
+
id 4749: added support for final keyword on classes and methods.
support for override keyword for methods.
nullptr is new a type keyword in code fragments.
support for variables with initializer lists,
e.g.:
id 4624: added support for template aliases,
e.g.:
template<typename T> using A = B<T>;
support for C++11 variadic templates,
e.g.:
template<typename... Values> class C;
support for documenting template class declarations.
-
id 680098: static_assert(...); inside a class is now ignored.
-
id 679740: Add support parameters with default lambda functions,
+
id 4807: static_assert(...); inside a class is now ignored.
+
id 4793: Add support parameters with default lambda functions,
e.g.:
int foo(int i, std::function<int(int)> f = [](int x) -> int { return x / 2; })
default initializers for non-static data members,
e.g.:
class C { public: int x = 4; int y {6}; int z = y*func(); };
@@ -1853,36 +2254,36 @@
member and its brief description.
Fixed a couple of compiler warning with the new XCode 4.4 compiler.
Added compilation support for Mountain Lion (Mac OS X 10.8).
-
id 679631: Nested namespaces did not appear in the namespace list if the
+
id 4789: Nested namespaces did not appear in the namespace list if the
parent namespace was undocumented.
-
id 680227: Fixed some spelling errors in the code comments.
-
id 680398: Fortran: comma at begin of argument list description in
+
id 4809: Fixed some spelling errors in the code comments.
+
id 4814: Fortran: comma at begin of argument list description in
case of implicit type
-
id 680405: Fortran: Entities on line with USE, ONLY were not hyperlinked
+
id 4815: Fortran: Entities on line with USE, ONLY were not hyperlinked
in code.
-
id 680408: Fortran: handle carriage return in non terminated strings.
-
id 680492: Using Markdown formatting in @todo/@bug/.. like descriptions
+
id 4816: Fortran: handle carriage return in non terminated strings.
+
id 4821: Using Markdown formatting in @todo/@bug/.. like descriptions
did not work.
-
id 680575: Fixed potential crash when <code> appeared inside <summary>
+
id 4823: Fixed potential crash when <code> appeared inside <summary>
for C# code.
-
id 680697: \xrefitems of the same type are not grouped together under
+
id 4824: \xrefitems of the same type are not grouped together under
the same heading (just like \todo and friends).
Fixed case where full directory path was shown even though
FULL_PATH_NAMES was set to NO.
-
id 680709: HTML output of template-derived classes contained unescaped
+
id 4825: HTML output of template-derived classes contained unescaped
characters.
-
id 679963: "Class Index" appeared twice in the PDF TOC, Index at the
+
id 4800: "Class Index" appeared twice in the PDF TOC, Index at the
end did not appear at all.
In a declaration no link was created when referring to a class inside
an undocumented namespace imported via a tag file.
-
id 681281: Make default for TAB_SIZE 4 and added remark in Markdown
+
id 4840: Make default for TAB_SIZE 4 and added remark in Markdown
section of the manual about the effect of TAB_SIZE on code block
processing when using tabs in the comment block.
-
id 681023: Project logo was not included in the Qt help output.
-
id 680992: Fixed a couple of typos in the comments.
-
id 681350: Fixed a problem with Markdown processing of a @code block
+
id 4835: Project logo was not included in the Qt help output.
id 4841: Fixed a problem with Markdown processing of a @code block
inside an indented /// style comment.
-
id 679928: Disabled section level correction for Markdown pages as
+
id 4799: Disabled section level correction for Markdown pages as
it was confusing.
@@ -1896,7 +2297,7 @@
doxygen now strips the leading indentation shared by the lines in a
@code..@endcode block.
-
id 678218: Changed title of the SVG graphs from 'G' to the root node
+
id 4755: Changed title of the SVG graphs from 'G' to the root node
of the graph.
New features
@@ -1905,41 +2306,41 @@
syncing the navigation tree with the content.
Extended the number of HTML entities with Greek letters and other
symbols (thanks to Charles Karney for the patch).
-
id 663645: Added support for C++11 strongly typed enums
+
id 4464: Added support for C++11 strongly typed enums
(enum class E { ... }).
Bug fixes
-
id 590518: Added missing class member initialization to a
+
id 3470: Added missing class member initialization to a
class in doxmlparser and made the library compile again.
-
id 667678: Added support for Obj-C property attribute "unsafe_retained".
-
id 674842, 676984: Unmatched quote in a comment prevented alias expansion.
-
id 676019: Fixed another case where local include path did not appear
+
id : Added support for Obj-C property attribute "unsafe_retained".
+
id 4682, 4721: Unmatched quote in a comment prevented alias expansion.
+
id 4702: Fixed another case where local include path did not appear
correctly in the class documentation.
-
id 676966: Fortran: Some keyword were not colored in the source view.
-
id 676981: Fortran: Argument type was wrong type of in case of out of
+
id 4716: Fortran: Some keyword were not colored in the source view.
+
id 4720: Fortran: Argument type was wrong type of in case of out of
place !> comment
-
id 677935: Included patch to fix problem compiling for x86 release on
+
id 4739: Included patch to fix problem compiling for x86 release on
Windows.
-
id 677992: Section without title could result in an invalid Qt Help
+
id 4741: Section without title could result in an invalid Qt Help
index.
-
id 678022: Anonymous enum could result in an invalid Qt Help index.
-
id 678102: Superfluous trailing comma in javascript
+
id 4743: Anonymous enum could result in an invalid Qt Help index.
+
id 4751: Superfluous trailing comma in javascript
prevented navigation tree to load in IE7.
-
id 678177: a + at the start of a line inside a <pre> block,
+
id 4753: a + at the start of a line inside a <pre> block,
triggered the start of a list. Also -- and --- where not kept untouched
inside a <pre> block.
-
id 678180: ndash (--) appearing in a brief description could lead
+
id 4754: ndash (--) appearing in a brief description could lead
to invalid SVG images.
-
id 678288: -- and --- inside a Markdown code block were not handled
+
id 4759: -- and --- inside a Markdown code block were not handled
properly.
-
id 679331, 675766: In body documentation with a different indentation then the
+
id 4783, 4699: In body documentation with a different indentation then the
main documentation was not rendered correctly (MARKDOWN=YES).
-
id 679436: Using an escaped pipe symbol in a Markdown table did not get
+
id 4784: Using an escaped pipe symbol in a Markdown table did not get
unescaped in the output.
-
id 679533: Code fragments did not appear properly in the doxygen manual.
-
id 679615: Added missing delete call in a piece of debugging code.
-
id 679626: Fixed some navigation issues in the manual
+
id 4785: Code fragments did not appear properly in the doxygen manual.
+
id 4786: Added missing delete call in a piece of debugging code.
+
id 4788: Fixed some navigation issues in the manual
Not all inherited members appeared in the "Additional inherited members"
list.
Link to call after "Inherited members" was not correct when
@@ -1964,30 +2365,30 @@
VHDL code now has a new Design Overview page (thanks for Martin Kreis
for the patch). Requires HAVE_DOT=YES, and DOT_IMAGE_FORMAT=svg.
-
id 677678: Added support for strong and weak attributes in Objective-C
+
id 4735: Added support for strong and weak attributes in Objective-C
properties.
Bug fixes
-
id 618462: Fortran: Appearance of comments in the HTML output
+
id 3772: Fortran: Appearance of comments in the HTML output
are now customizable via CSS again.
-
id 673660: <code> inside a <summary> or <remarks> section is now treated
+
id 4655: <code> inside a <summary> or <remarks> section is now treated
as @code (was already the code for C#).
-
id 673921: When a comment started at indent >= 4 after a /** and
+
id 4661: When a comment started at indent >= 4 after a /** and
continued at the same indent without leading * after a blank line,
the continued part appeared at as a code block when Markdown was enabled.
-
id 675036: If a file was not indexed, the navigation tree became empty.
-
id 676019: Include path using quotes did not work as documented.
-
id 676877: @warning did not end at blank line when followed by
+
id 4689: If a file was not indexed, the navigation tree became empty.
+
id 4702: Include path using quotes did not work as documented.
+
id 4709: @warning did not end at blank line when followed by
a numbered list.
-
id 676902: An anonymous namespace could introduce an invalid entry in
+
id 4713: An anonymous namespace could introduce an invalid entry in
the navigation list.
-
id 676948: Breadcrumb navigation path had wrong links when
+
id 4715: Breadcrumb navigation path had wrong links when
CREATE_SUBDIRS was enabled.
-
id 677315: Fixed case where function was incorrectly detected as a
+
id 4729: Fixed case where function was incorrectly detected as a
variable.
-
id 677589: Fixed typo in the documentation of the LAYOUT_FILE option.
-
id 677771: Fixed visual misalignment for first argument.
+
id 4733: Fixed typo in the documentation of the LAYOUT_FILE option.
+
id 4737: Fixed visual misalignment for first argument.
The "arrow out" button in interactive SVG did not work when
served from a web server, due to the use of an absolute path.
If a declaration was too wide for a page, the content in HTML spilled
@@ -2037,8 +2438,7 @@ make sure you add the following:
<script type="text/javascript" src="$relpath$jquery.js"></script>
<script type="text/javascript" src="$relpath$dynsections.js"></script>
Otherwise the interactivity of the trees does not work.
-
-
+
Included a couple of performance improvements (thanks to Dirk Reiners)
Changed the way member attributes (like protected, virtual, and static)
are rendered in the HTML output.
@@ -2052,14 +2452,14 @@ make sure you add the following:
For interactive SVGs the print button has been replaced by a
"arrow out" button that opens the original non-interactive SVG in a
new window for easy printing or saving.
-
id 661499: Long names are now wrapped in the dot nodes to avoid
+
id 4426: Long names are now wrapped in the dot nodes to avoid
very wide graphs.
New features
-
id 666527: Added support for <inheritdoc/> C# XML command
+
id 4508: Added support for <inheritdoc/> C# XML command
(thanks to John Werner for the patch).
-
id 670965, Added support for resolving environment variables of the
+
id 4588, Added support for resolving environment variables of the
form $(PROGRAMFILES(X86)) inside the config file
Doxygen now shows Objective-C properties in collaboration diagrams
(thanks to Sven Weidauer for the patch).
@@ -2067,77 +2467,77 @@ make sure you add the following:
Inherited class members are now shown as expandable sections in the
member overview (default is collapsed). Each section is rendered as
a table.
A -- will now be rendered as an 'en dash', similarly, --- will produce an
mdash.
Bug fixes
-
id 523156: Fortran: Prefix of routines got stripped.
-
id 666088: Include VHDL patch (thanks to Martin Kreis).
-
id 670235: Fixed include guard detection problem when using
+
id 2891: Fortran: Prefix of routines got stripped.
+
id 4502: Include VHDL patch (thanks to Martin Kreis).
+
id 4569: Fixed include guard detection problem when using
#pragma once
-
id 670805: A numbered list (1. 2. 3.) where each list item ended with
+
id 4582: A numbered list (1. 2. 3.) where each list item ended with
an empty line is no longer treated as a set of separate lists (all
starting with 1.).
-
id 670889: Java: last enum value did not appear in the output unless it was
+
id 4586: Java: last enum value did not appear in the output unless it was
followed by a comma.
-
id 671023, 671312: Regression: Autolist items starting on a new paragraph
+
id 4591, 4606: Regression: Autolist items starting on a new paragraph
at indent level larger than 0 were not processed correctly.
-
id 671076: Sections could be missing from the navigation tree in
+
id 4594: Sections could be missing from the navigation tree in
some situations.
-
id 671158: @tableofcontents did not work for the main page (@mainpage)
-
id 671159: Sections in a separate markdown page did not appear in the
+
id 4597: @tableofcontents did not work for the main page (@mainpage)
+
id 4598: Sections in a separate markdown page did not appear in the
table of contents.
-
id 671166: Fortran: Fixed problem causing call/caller graphs not to be
+
id 4600: Fortran: Fixed problem causing call/caller graphs not to be
generated.
-
id 671171: RPM spec file was updated to make it work with RHEL 6.2
+
id 4601: RPM spec file was updated to make it work with RHEL 6.2
(thanks to Peter Klotz for the patch)
-
id 671240: Corrected line number of error message reported for
+
id 4604: Corrected line number of error message reported for
pages.
-
id 671291: C# regression: enum values where not shown in the docs.
-
id 671395: When #some_member appeared at the start of a line it was
+
id 4605: C# regression: enum values where not shown in the docs.
+
id 4607: When #some_member appeared at the start of a line it was
seen as a level one header instead of a link to a member when
Markdown processing was enabled. Now at least one space is required
after the # to make it a header.
-
id 671426: Fixed case where doxygen could crash when a section and
+
id 4608: Fixed case where doxygen could crash when a section and
subsection had the same label.
-
id 671591: docset creating could fail due to invalid Nodes.xml
-
id 671702: Using \internal in a group or member did not hide it
+
id 4610: docset creating could fail due to invalid Nodes.xml
+
id 4614: Using \internal in a group or member did not hide it
from the navigation tree if there was no documentation.
-
id 671709: Backticks in C# comments did not appear as inline
+
id 4615: Backticks in C# comments did not appear as inline
fragments, like was the case for other languages.
-
id 672119: PHP: defines are now shown as constants rather than enums.
-
id 672662: File with .md or .markdown extension were not included
+
id 4620: PHP: defines are now shown as constants rather than enums.
+
id 4636: File with .md or .markdown extension were not included
with the default setting of FILE_PATTERNS.
-
id 672366: mailto style URLs did not work correctly in combination with
+
id 4623: mailto style URLs did not work correctly in combination with
CREATE_SUBDIRS = YES.
id 4704: Fixed LaTeX error when backslash appeared in a hyperlinked
code fragment.
Tag files had wrong character encoding set in the header.
C# in/out did not appear in generics using covariance or contravariance.
@@ -2162,7 +2562,7 @@ make sure you add the following:
Changes
Auto list items can now consist of multiple paragraphs.
- The indentation of the (first line) of a new paragraph detemines
+ The indentation of the (first line) of a new paragraph determines
to which list item the paragraph belongs or if it marks the end of the
list.
When UML_LOOK is enabled, relations shown on the edge of a graph
@@ -2170,19 +2570,19 @@ make sure you add the following:
Updated the manual and improved the look.
Made the contents in the navigation tree more consistent for
groups, pages with subpages, and grouped subpages.
-
id 669079: Latex: made the margins of latex page layout smaller using
+
id 4558: Latex: made the margins of latex page layout smaller using
the geometry package.
The tool doxytag has been declared obsolete and is removed
(it wasn't working properly anyway). Same goes for the installdox
script.
Updated the copyright in source code and doxywizard "about" to 2012.
-
id 668008: HTML version of the manual now has the treeview enabled
+
id 4533: HTML version of the manual now has the treeview enabled
for easier navigation.
New features
Added support for
- Markdown
+ Markdown
formatting.
This is enabled by default, but can be disabled by
setting MARKDOWN_SUPPORT to NO. When enabled the following is
@@ -2206,7 +2606,7 @@ make sure you add the following:
Note that doxygen uses a relative indent of 4 spaces, not an
absolute indent like Markdown does.
Markdown style hyperlinks and hyperlink references.
id 2799, 3376, 3825: \copydoc did copy the brief description
into the detailed section, causing a difference between the original
and the copy.
-
id 555327: Using @ref for an example file, caused it to appear as
+
id 3116: Using @ref for an example file, caused it to appear as
file::ext.
-
id 567494: Fortran: Included patch for blockdata sub-programs.
-
id 628417: Fortran: doxygen filter, preparsing fixed form of null
-
id 662286: TCL: Included patch to fixed UTF-8 support.
-
id 662289: TCL: Included patch to prevent ##### from appearing in the
+
id 3228: Fortran: Included patch for blockdata sub-programs.
+
id 3920: Fortran: doxygen filter, preparsing fixed form of null
+
id 4443: TCL: Included patch to fixed UTF-8 support.
+
id 4444: TCL: Included patch to prevent ##### from appearing in the
output.
-
id 646319: Using a file name with path for HTML_STYLESHEET caused the
+
id 4220: Using a file name with path for HTML_STYLESHEET caused the
path to appear in the HTML output.
-
id 664826: Fixed one more problem with include guard detection.
-
id 665629: Fixed parse problem when a #define appeared inside an enum.
-
id 665855: Fixed problem parsing C++ template specialization of the
+
id 4477: Fixed one more problem with include guard detection.
+
id 4492: Fixed parse problem when a #define appeared inside an enum.
+
id 4497: Fixed problem parsing C++ template specialization of the
form A<func(T*)> such as used in boost::signal2 types.
-
id 666047: A </p> followed by an htmlonly..endhtmlonly section
+
id 4500: A </p> followed by an htmlonly..endhtmlonly section
caused invalid XHTML output.
-
id 666085: Fixed include handling in case the include guard was
+
id 4501: Fixed include handling in case the include guard was
documented.
-
id 666124: Fixed problem loading the navigation tree in IE8 when
+
id 4505: Fixed problem loading the navigation tree in IE8 when
serving pages via a web server.
-
id 666337: Included patch to avoid hyphenation hints in front of the
+
id 4506: Included patch to avoid hyphenation hints in front of the
first capital in a word.
-
id 666568: When SHOW_FILES was NO, a grouped function did not appear
+
id 4509: When SHOW_FILES was NO, a grouped function did not appear
in the javascript based search index.
-
id 666909: \copybrief introduced extra spacing in the HTML output.
-
id 666986: Fixed case where search engine specific code appeared
+
id 4514: \copybrief introduced extra spacing in the HTML output.
+
id 4515: Fixed case where search engine specific code appeared
twice in the HTML output.
-
id 666993: Fixed bug in the generated makefile causing index not
+
id 4516: Fixed bug in the generated makefile causing index not
to be generated when using pdflatex.
-
id 667020: HTML output for example pages was not well-formed.
-
id 667192: Include statements in latex output where placed all on
+
id 4517: HTML output for example pages was not well-formed.
+
id 4520: Include statements in latex output where placed all on
one line in the LaTeX output.
-
id 667835: PHP: Fixed problem handling heredoc blocks
-
id 667844: For aliases with a single argument it is no longer required
+
id 4526: PHP: Fixed problem handling heredoc blocks
+
id 4527: For aliases with a single argument it is no longer required
to escape commas that appear inside the argument text.
-
id 668037: Latex: tables can now span multiple pages by using the xtab
+
id 4536: Latex: tables can now span multiple pages by using the xtab
package.
-
id 668218: Doxygen will ignore the common prefix shared by all
+
id 4544: Doxygen will ignore the common prefix shared by all
directories when computing a names for the directory's output files.
This will make the names of the output more stable.
-
id 668519: Added missing newline in man page output.
-
id 669071, 669072: Fixed parse problem for Q_PROPERTY when a template
+
id 4549: Added missing newline in man page output.
+
id 4555, 4556: Fixed parse problem for Q_PROPERTY when a template
with a namespaced type was used.
-
id 669078: Included patch which changes MATHJAX_RELPATH to use the
+
id 4557: Included patch which changes MATHJAX_RELPATH to use the
content delivery network by default.
-
id 669138: Fortran: Fixed problem handling multiple definition
+
id 4560: Fortran: Fixed problem handling multiple definition
statements on one line.
-
id 669406: Using -d Preprocessor now also works when QUIET is YES.
-
id 669434: Latex: citations where only generated properly if the
+
id 4561: Using -d Preprocessor now also works when QUIET is YES.
+
id 4563: Latex: citations where only generated properly if the
bib files specified via CITE_BIB_FILES did not have a path.
-
id 669758: Tcl: Same function in multiple Tcl namespaces not added.
-
id 670289: Fixed case where doxygen would not correctly detect
+
id 4565: Tcl: Same function in multiple Tcl namespaces not added.
+
id 4574: Fixed case where doxygen would not correctly detect
>> as a termination of a nested template.
-
id 670571: subpages generate empty pages in latex/rtf output and
+
id 4580: subpages generate empty pages in latex/rtf output and
broken links when SHORT_NAME was set to YES.
Included VHDL fixes provided by Martin Kreis.
The word "dummy" wrongly appeared before the first parameter type in
@@ -2317,7 +2717,7 @@ make sure you add the following:
Doxygen Release 1.7.6.1
-
(release date 10-12-2011)
+(release date 10-12-2011)
Changes
Doxygen now reports its cache usage (for the symbol and the
@@ -2334,19 +2734,19 @@ make sure you add the following:
Bug fixes
Python: scopes are now shown with . instead of ::
-
id 665313: Space before @if was not preserved, causing problems
+
id 4483: Space before @if was not preserved, causing problems
with inline @if .. @endif constructs.
-
id 665583: Fixed XHTML validity problem when using mscgen graphs.
-
id 665641: Fixed XHTML validity problem when GENERATE_TREEVIEW was
+
id 4490: Fixed XHTML validity problem when using mscgen graphs.
+
id 4493: Fixed XHTML validity problem when GENERATE_TREEVIEW was
disabled.
-
id 665720: Included patch to fix hang issue when non-empty
+
id 4494: Included patch to fix hang issue when non-empty
INCLUDE_PATH was used.
-
id 665778: Fixed parse issue when a comma appeared as part of an
+
id 4495: Fixed parse issue when a comma appeared as part of an
enum's value.
Doxygen Release 1.7.6
-
(release date 03-12-2011)
+(release date 03-12-2011)
Changes
To improve the performance of loading the navigation tree,
@@ -2367,7 +2767,7 @@ make sure you add the following:
New features
Update of the French translation.
-
id 607305: Added support for PHP heredoc and nowdoc constructs.
+
id 3637: Added support for PHP heredoc and nowdoc constructs.
Added support for cross-referencing in case of operator-> overloading.
This includes support for std::auto_ptr,std::smart_ptr,std::unique_ptr
and std::weak_ptr when BUILTIN_STL_SUPPORT is enabled.
@@ -2381,84 +2781,84 @@ make sure you add the following:
definitions preceded by whitespace (thanks to Rene Zaumseil)
When using "static int a,b" variable "b" incorrectly appeared in the
output even though EXTRACT_STATIC was set to NO.
-
id 521717: .spec file was only updated after running ./configure
-
id 656642: Fixed potential crash when using doxygen for large projects.
-
id 656878: Fixed problem running bibtex with \cite command on Windows.
-
id 657152: Fixed constant expression evaluation error in the
+
id 2867: .spec file was only updated after running ./configure
+
id 4363: Fixed potential crash when using doxygen for large projects.
+
id 4370: Fixed problem running bibtex with \cite command on Windows.
+
id 4375: Fixed constant expression evaluation error in the
preprocessor.
-
id 652277: Removed bogus ' from the man page output.
-
id 659244: Quotes in the brief description could appear unescaped in
+
id 4294: Removed bogus ' from the man page output.
+
id 4411: Quotes in the brief description could appear unescaped in
the tooltip.
-
id 641336: #includes with ../ were not always processed correctly.
+
id 4137: #includes with ../ were not always processed correctly.
Fixed potential crash when INLINE_GROUPED_CLASSES and INLINE_SIMPLE_STRUCTS
are set to YES.
-
id 658896: Fixed preprocessor problem handling #defines whose value was
+
id 4406: Fixed preprocessor problem handling #defines whose value was
a constant string containing ///.
-
id 660332: Using a \ at the end of a comment line could cause
+
id 4419: Using a \ at the end of a comment line could cause
parsing problems for C# as the \ was treated as a line continuation.
-
id 658033: Fixed parser problem when using multiple member groups
+
id 4391: Fixed parser problem when using multiple member groups
inside a macro definition.
-
id 503239: Fixed several issues related to \cite handling.
-
id 658587: Improved the way macro definitions are collected.
-
id 660501: Fixed LaTeX error when using \name with a description.
-
id 661292: The documentation for \mainpage incorrectly mentioned that
+
id 2755: Fixed several issues related to \cite handling.
+
id 4400: Improved the way macro definitions are collected.
+
id 4421: Fixed LaTeX error when using \name with a description.
+
id 4424: The documentation for \mainpage incorrectly mentioned that
one has to use \ref main in case GENERATE_TREEVIEW was set to YES, which
is no longer the case.
-
id 659096: Nested aliases definitions where not always expanded properly
+
id 4409: Nested aliases definitions where not always expanded properly
(regression w.r.t version 1.7.4)
-
id 658038: Fixed preprocessor problem where the @ character inside a
+
id 4392: Fixed preprocessor problem where the @ character inside a
macro definition could appear as @@.
-
id 658646: Fixed problem running mscgen for LaTeX and RTF output.
-
id 661723: Using ClassName%'s did not work anymore, and also
+
id 4401: Fixed problem running mscgen for LaTeX and RTF output.
+
id 4429: Using ClassName%'s did not work anymore, and also
ClassName's wasn't autolinked.
-
id 662044: Fixed potential printing of null pointer when using
+
id 4437: Fixed potential printing of null pointer when using
a version filter that returned blanks.
-
id 625518: Fortran: first problem where subroutine using results
+
id 3871: Fortran: first problem where subroutine using results
variable appeared as a function.
-
id 654153: If an URL appeared at the end of a sentence, the period
+
id 4331: If an URL appeared at the end of a sentence, the period
was included in the URL.
-
id 656560: Fortran: Added support for the Double Complex type.
-
id 663640: Included workaround for Solaris CC issue in index.cpp
-
id 662190: Included patch to fix some TCL issues and add the TCL_SUBST
+
id 4362: Fortran: Added support for the Double Complex type.
+
id 4462: Included workaround for Solaris CC issue in index.cpp
+
id 4441: Included patch to fix some TCL issues and add the TCL_SUBST
configuration option.
-
id 661672: Fortran: Added support for ALIAS expansion in comment blocks.
-
id 663101: Fixed case where a macro was not corrected found in the header
+
id 4428: Fortran: Added support for ALIAS expansion in comment blocks.
+
id 4451: Fixed case where a macro was not corrected found in the header
file when it could only be found via INCLUDE_PATH.
-
id 664718: using multiple <para>'s inside a <summary> block caused
+
id 4474: using multiple <para>'s inside a <summary> block caused
text to be joined without spacing.
id 4477: Fixed problem in the preprocessor regarding the handling
of include guards.
-
id 664893: Fixed typo in the docs for EXCLUDE_SYMLINKS.
-
id 665466: Using a relative URL with <a href> did not work when
+
id 4478: Fixed typo in the docs for EXCLUDE_SYMLINKS.
+
id 4487: Using a relative URL with <a href> did not work when
CREATE_SUBDIRS was enabled.
-
id 665464: Using an absolute URL with <img> did not work when
+
id 4486: Using an absolute URL with <img> did not work when
CREATE_SUBDIRS was enabled.
Doxygen Release 1.7.5.1
-
(release date 21-08-2011)
+(release date 21-08-2011)
New features
Update of the French translation.
Bug fixes
-
id 521717: .spec file was only updated after running ./configure
-
id 656642: Fixed potential crash when using doxygen for large projects.
-
id 656878: Fixed problem running bibtex with \cite command on Windows.
+
id 2867: .spec file was only updated after running ./configure
+
id 4363: Fixed potential crash when using doxygen for large projects.
+
id 4370: Fixed problem running bibtex with \cite command on Windows.
Regression: some information was no longer available for a class,
due to accidental deletion of a code block.
Regression: fixed matching problem in the code parser.
Doxygen Release 1.7.5
-
(release date 14-08-2011)
+(release date 14-08-2011)
Changes
-
id 641904: Function in the call graphs are now shown based on first
+
id 4145: Function in the call graphs are now shown based on first
appearance rather then alphabetical order.
-
id 616213: When customizing the HTML header $title now only generates
+
id 3743: When customizing the HTML header $title now only generates
the title excluding the project name (which can still be added using
$projectname)
Improved the look of the class index: all items now have equal spacing.
@@ -2482,7 +2882,7 @@ make sure you add the following:
SERVER_BASED_SEARCH=YES) doxygen now advertises a opensearch provider
for your project, that allows integrating the search directly in
the search field of the browser (thanks to Phil Lello for the patch).
-
id 503239: Added new option CITE_BIB_FILES and LATEX_BIB_STYLE and a new
+
id 2755: Added new option CITE_BIB_FILES and LATEX_BIB_STYLE and a new
command \cite, allowing you to make references to literature (as defined
in one or more .bib files). This also works for output formats other
than LaTeX. The tool bibtex is required for this to work though. Thanks
@@ -2490,7 +2890,7 @@ make sure you add the following:
PHP namespaces are now shown as A\B in the output.
Added new \snippet command that can be used to include marked
sections from a source file. See
- http://www.doxygen.org/commands.html#cmdsnippet for more info.
id 4188: A macro added to a group appeared twice in the group
documentation if was also made related to a class using \relates.
-
id 646321: Fixed problem were the search box was missing when using
+
id 4221: Fixed problem were the search box was missing when using
a custom HTML header.
-
id 646447: Fixed unterminated img tab in the XHTML output.
-
id 646463: Fixed problem handling MSCFILE_DIRS option with multiple
+
id 4227: Fixed unterminated img tab in the XHTML output.
+
id 4228: Fixed problem handling MSCFILE_DIRS option with multiple
paths.
-
id 646533: Included patch to sort overloaded members by appearance in
+
id 4229: Included patch to sort overloaded members by appearance in
the code.
-
id 646747, 646879: Putting an autolist inside a @todo, @bug or similar
+
id 4230, 4231: Putting an autolist inside a @todo, @bug or similar
section did not work anymore.
-
id 646922: Referring to a logo with a relative path, caused
+
id 4232: Referring to a logo with a relative path, caused
a broken image target when using a custom HTML header.
-
id 647499: Fixed HTML rendering problem on older browsers when
+
id 4235: Fixed HTML rendering problem on older browsers when
GENERATE_TREEVIEW was enabled.
-
id 647768: Linking to a section on the main page could result in a
+
id 4242: Linking to a section on the main page could result in a
broken link when GENERATE_TREEVIEW was enabled.
-
id 647889: Fixed invalid warning when using @deparated method with
+
id 4243: Fixed invalid warning when using @deparated method with
default values for parameters.
-
id 648302: A function made related using @relates could end up in
+
id 4245: A function made related using @relates could end up in
the wrong class if there was already a method with a matching
argument list in that other class.
-
id 649103: Return types containing multiple *'s ended up in the
+
id 4254: Return types containing multiple *'s ended up in the
output with only one * in some cases.
-
id 650397: Fixed problem with alias substitution if the alias had
+
id 4267: Fixed problem with alias substitution if the alias had
more then 9 parameters.
-
id 650430: For nested anonymous structs @xx markers could appear in
+
id 4268: For nested anonymous structs @xx markers could appear in
the output.
-
id 650463: Added compilation support for MacOSX 10.7 (aka Lion).
-
id 650958: Fixed issue printing HTML pages when the
+
id 4270: Added compilation support for MacOSX 10.7 (aka Lion).
+
id 4278: Fixed issue printing HTML pages when the
GENERATE_TREEVIEW option is set to YES.
-
id 651611: Fixed broken link to an undocumented namespace.
-
id 652138: Fixed potential crash while parsing Fortran code.
-
id 652188: Fixed problem parsing comment which included
+
id 4281: Fixed broken link to an undocumented namespace.
+
id 4291: Fixed potential crash while parsing Fortran code.
+
id 4292: Fixed problem parsing comment which included
an unterminated alias within quotes (i.e. "\word{")
-
id 652277: Lines starting with . did not appear in the man page output.
-
id 652389: Fortran: Fixed text is detailed function section.
-
id 652396: When enabling INTERACTIVE_SVG wide graphs are now also
+
id 4294: Lines starting with . did not appear in the man page output.
+
id 4296: Fortran: Fixed text is detailed function section.
+
id 4297: When enabling INTERACTIVE_SVG wide graphs are now also
fit to the screen width.
-
id 652695: Added missing space between parameter type and name in
+
id 4304: Added missing space between parameter type and name in
the RTF output.
-
id 652741: Use background-color instead of background in doxygen.css.
-
id 653344: Fixed potential segfault while creating man pages.
-
id 653666: Fortran: add a space to "type" in argument list.
-
id 653801: Fixed problem handling include guard when multiple
+
id 4305: Use background-color instead of background in doxygen.css.
+
id 4313: Fixed potential segfault while creating man pages.
+
id 4321: Fortran: add a space to "type" in argument list.
+
id 4324: Fixed problem handling include guard when multiple
blocks guarded by the same guard were used in a header file.
-
id 653963: Fortran: Unified handling of @params at various places.
-
id 654108: make clean failed on a system without qmake.
id 4012: Fixed a problem were // inside a code block got removed.
+
id 4015: Added support for escaping :: by using \:: (or @::)
+
id 4018: #include with relative path to parent dir did not get
hyperlinked.
-
id 634986: Removed double definition of docParamName in compound.xsd.
-
id 635198: C++/CLI Finalizer methods were not parsed properly.
-
id 636475: Objective-C method names can now be used as the
+
id 4019: Removed double definition of docParamName in compound.xsd.
+
id 4023: C++/CLI Finalizer methods were not parsed properly.
+
id 4036: Objective-C method names can now be used as the
the first argument of \ref.
-
id 636588: Fixed a couple of problems in the compound.xsd schema used
+
id 4037: Fixed a couple of problems in the compound.xsd schema used
for XML output.
-
id 636598: DISTRIBUTE_GROUP_DOC now works again for enum values.
-
id 636947: Improved matching of typedef'ed array parameter and non
+
id 4038: DISTRIBUTE_GROUP_DOC now works again for enum values.
+
id 4047: Improved matching of typedef'ed array parameter and non
typedef'ed array parameter.
-
id 637610: Added a number of fixed for Fortran interfaces.
-
id 637712: Handle files with the .for extension as Fortran.
-
id 637987: Fixed error in the grouping documentation.
+
id 4056: Added a number of fixed for Fortran interfaces.
+
id 4057: Handle files with the .for extension as Fortran.
+
id 4060: Fixed error in the grouping documentation.
Fixed line number sync problem when using Objective-C #import
statements.
Fixed problem handling /** @cond */ in the preprocessor.
@@ -2769,7 +3169,7 @@ make sure you add the following:
Doxygen Release 1.7.2
-
(release date 09-10-2010)
+(release date 09-10-2010)
Changes
@@ -2781,10 +3181,10 @@ make sure you add the following:
added support for Apple's block object extension for C/Obj-C/C++.
added support for detecting Python constructors and destructors.
-
id 624575: Added \endinternal command that can be used to force
+
id 3855: Added \endinternal command that can be used to force
the end of a section started with \internal.
-
id 552605: Added parsing support for PHP 5.3+ style namespaces.
-
id 582532: added \mscfile command which can be used to insert a
+
id 3084: Added parsing support for PHP 5.3+ style namespaces.
+
id 3389: added \mscfile command which can be used to insert a
message sequence chart given a .msc file.
Also added a new config option MSCFILE_DIRS to provide directories
were msc files are searched (Thanks to Adrien for the patch).
@@ -2797,130 +3197,130 @@ make sure you add the following:
Bug fixes
-
id 306076: Fixed case where using of a namespace did not work inside
+
id 1666: Fixed case where using of a namespace did not work inside
an example.
-
id 336053, 487871: /// were not stripped from formulas and \dot..\enddot
-
id 563698: dropped support for a4wide paper format for LaTeX, since
+
id 2097, 2669: /// were not stripped from formulas and \dot..\enddot
+
id 3190: dropped support for a4wide paper format for LaTeX, since
it is on the LaTeX taboo list.
-
id 571014: Behaviour of CLASS_DIAGRAM=NO in combination with
- HAVE_DOT=YES, was not propely documented.
-
id 576291: Python comments for next class or method could end up in
+
id 3261: Behaviour of CLASS_DIAGRAM=NO in combination with
+ HAVE_DOT=YES, was not properly documented.
+
id 3332: Python comments for next class or method could end up in
code of a method/class when enabling INLINE_SOURCES.
-
id 611174: Fixed problem handling nested classes in Python.
-
id 621733: removed unexpected warnings about undocumented return types
-
id 622737: Undefined function macros could cause constant expression
+
id 3688: Fixed problem handling nested classes in Python.
+
id 3804: removed unexpected warnings about undocumented return types
+
id 3824: Undefined function macros could cause constant expression
errors.
-
id 622780: updated copyright statement in PDF docs.
-
id 622935: C# generics appeared with -g extension in the output in
+
id 3936: Made file extension to parser mapping case insensitive.
+
id 3937: Latex makefile clean target used rm command also for Windows.
+
id 3939: the EXCLUDE_SYMBOLS option was missing form the online docs.
+
id 3962: \htmlinclude and \verbinclude ended the brief description.
+
id 3963: Inconsistent behaviour when a brief description was given
following by a detailed comment block with JAVADOC_AUTOBRIEF enabled.
Fixed a number of typos in the documentation
- (thanks to Albert van der Meer)
+ (thanks to Albert)
Fixed potential hangup when scanning directories defined as
symlinks to absolute paths.
HTML attributes other than src were not copied for the <img> tag.
Doxygen Release 1.7.1
-
(release date 25-06-2010)
+(release date 25-06-2010)
Changes
-
id 621695: Made warning and error messages appear with lower case
+
id 3803: Made warning and error messages appear with lower case
"warning:" and "error:" prefix to make it easier to use the messages
from Visual Studio.
New features
-
id 621908: Added new config option FORMULA_TRANSPARENT which allows
+
id 3809: Added new config option FORMULA_TRANSPARENT which allows
selecting between transparent (YES) or non-transparent (NO) PNGs for
formulas in the HTML output.
Update for Turkish translation.
Bug fixes
-
id 533821: Inheritance relation for a C# class deriving from
+
id 2959: Inheritance relation for a C# class deriving from
a generic class was not handled correctly.
-
id 554638: Changing DOT_IMAGE_FORMAT did not cause the graphs to be
+
id 3105: Changing DOT_IMAGE_FORMAT did not cause the graphs to be
regenerated.
-
id 576533: A field of the form "enum E *p" was ignore.
-
id 597016: Hide scope name was not working properly for todo items
+
id 3334: A field of the form "enum E *p" was ignore.
+
id 3549: Hide scope name was not working properly for todo items
inside class members, where the class was inside a namespace.
-
id 617761: In dot graphs now also @ref worked (previously only \ref was
+
id 3764: In dot graphs now also @ref worked (previously only \ref was
supported).
-
id 621653: Fixed error when compiling doxygen for Solaris 8.
-
id 621733: Removed bogus warning about undocumented return type for
+
id 3802: Fixed error when compiling doxygen for Solaris 8.
+
id 3804: Removed bogus warning about undocumented return type for
define when WARN_NO_PARAMDOC was enabled.
-
id 621780: Fixed parsing support for a function that returns a
+
id 3805: Fixed parsing support for a function that returns a
struct definition.
-
id 621785: Doxygen could hang when using \copydoc in a function with
+
id 3806: Doxygen could hang when using \copydoc in a function with
\param.
-
id 621805: Using //!< after a #define no longer worked.
id 3618, 3623, 3639:
Using \dot produced "Error opening map file" or
could even crash doxygen.
-
id 606084: Loading a new config file in doxywizard did not reset all
+
id 3619: Loading a new config file in doxywizard did not reset all
values of a previously loaded config file.
-
id 606104: Grouped members with todo-like items were shown with
+
id 3621: Grouped members with todo-like items were shown with
"GlobalScope" prefix.
-
id 606156: Fixed RTF rendering problem with group index.
-
id 606206, 610133: Added missing line break in LaTeX output.
-
id 606330, 608056: The title of pages whose label had an underscore
+
id 3622: Fixed RTF rendering problem with group index.
+
id 3624, 3675: Added missing line break in LaTeX output.
+
id 3627, 3648: The title of pages whose label had an underscore
was not shown
-
id 606717: Include guard not starting with #ifndef SOME_GUARD_H were not
+
id 3631: Include guard not starting with #ifndef SOME_GUARD_H were not
recognised as such.
-
id 606718: Setting SEARCHENGINE to YES and GENERATE_HTML to NO caused
+
id 3632: Setting SEARCHENGINE to YES and GENERATE_HTML to NO caused
error that search results directory could not be created.
-
id 606772, 608493: typedef'ed enums or struct with the same as the
+
id 3635, 3655: typedef'ed enums or struct with the same as the
typedef did no longer show up.
-
id 607088, 607946: Related pages (manual and automatic like the todo page)
+
id 3636, 3643: Related pages (manual and automatic like the todo page)
caused broken links when SHORT_NAMES was enabled.
-
id 607432, 608002: Automatically generated related pages (like the
+
id 3638, 3644: Automatically generated related pages (like the
todo page) caused broken links when CREATE_SUBDIR was enabled.
-
id 607736: comments after #if could cause next function call not to be
+
id 3641: comments after #if could cause next function call not to be
cross-referenced.
-
id 607743: \internal inside a conditional section caused warning.
-
id 608016: Using \internal inside a \section did not end at the
+
id 3642: \internal inside a conditional section caused warning.
+
id 3646: Using \internal inside a \section did not end at the
next \section as documented.
-
id 608018: \internal command produced message with .: in
+
id 3647: \internal command produced message with .: in
the LaTeX output.
-
id 608072: HTML Tables with custom attributes were not rendered
+
id 3649: HTML Tables with custom attributes were not rendered
properly.
-
id 608227: Man pages with underscore got double underscore in the name.
-
id 608590: Buffer overflow when using non-ascii characters as class
+
id 3651: Man pages with underscore got double underscore in the name.
+
id 3658: Buffer overflow when using non-ascii characters as class
name.
-
id 608921: Macro definition had effect even if the definition was not
+
id 3662: Macro definition had effect even if the definition was not
actually included.
-
id 609504: config.h and config.l where missing from the SVN repository.
-
id 609624: Todo items were merged for overloaded functions.
-
id 609709: C# enum values with @todo items were missing from the todo
+
id 3670: config.h and config.l where missing from the SVN repository.
+
id 3672: Todo items were merged for overloaded functions.
+
id 3673: C# enum values with @todo items were missing from the todo
list.
-
id 610437: Removed bogus warning when using <br/> tag.
+
id 3678: Removed bogus warning when using <br/> tag.
Fixed parsing problem for function pointer type starting with
"typedef enum".
Preprocessor did not take EXCLUDE_PATTERNS into account, which
@@ -3124,12 +3524,12 @@ make sure you add the following:
Doxygen Release 1.6.2
-
(release date 30-12-2009)
+(release date 30-12-2009)
Changes
-
id 594787: Autolinking to all-lower case words has been disabled,
+
id 3513: Autolinking to all-lower case words has been disabled,
in accordance with the documentation.
-
id 604543: Doxygen now allows any extension supported by dot via the
+
id 3608: Doxygen now allows any extension supported by dot via the
DOT_IMAGE_FORMAT option.
Switched back to using PNGs for built-in diagrams and formulas using
the Lode Vandevenne's PNG encoder.
@@ -3144,14 +3544,14 @@ make sure you add the following:
to generate an index file that can be used to embed doxygen's HTML
output into Eclipse as a help plugin
(thanks to a patch by Ondrej Starek).
id 3489: xrefitems (like @todo) did not appear in the list when
found in comments marked with @enum or @name.
+
Doxygen Release 1.6.0
-
(release date 20-08-2009)
+(release date 20-08-2009)
Changes
-
id 580924, 541234: Replaced the PHP based search engine by a
+
id 3372, 3012: Replaced the PHP based search engine by a
Javascript/DHTML based one.
As a result the search feature no longer requires a HTTP server
with PHP enabled to be usable. Searching is limited to symbols
though, but it is now possible to filter on symbol type.
-
id 519886: Make the HTML output XHTML 1.0 compliant.
-
id 579950: Objective-C categories are now merged with their base
+
id 2852: Make the HTML output XHTML 1.0 compliant.
+
id 3365: Objective-C categories are now merged with their base
class, unless there is no base class.
Member groups with the same header within the same scope are now
merged. This also works for Objective-C categories.
Changed the LaTeX style sheet such that more of the markup is
configurable. Please update your style sheet if you use a custom one.
-
id 584844: Treat \details inside a brief description as a new paragraph
+
id 3415: Treat \details inside a brief description as a new paragraph
command.
Split GENERATE_TREEVIEW into two separate options:
GENERATE_TREEVIEW and USE_INLINE_TREES.
@@ -3273,7 +3674,7 @@ make sure you add the following:
Added option SORT_MEMBERS_CTORS_1ST, which when enabled places the
constructors and destructors first in an otherwise sorted list.
-
id 581518: Applied patch by Tobias Hunger that adds support for
+
id 3377: Applied patch by Tobias Hunger that adds support for
documenting DBus XML interface descriptions.
Included QtHelp patch by Karsten Heimrich which adds missing
reference and keyword for methods.
@@ -3281,52 +3682,6111 @@ make sure you add the following:
Bug fixes
-
id 131989: Fixed preprocessor handling for C# code.
-
id 133418: -- was not rendered correctly for LaTeX output
+\endhtmlonly
+\section log_1_5 1.5 Series
+\htmlonly
+
+
Doxygen Release 1.5.9
+(release date 30-04-2009)
+
+
New features
+
+
Added new option LATEX_SOURCE_CODE, which when enabled adds
+ source code also to the latex output (typically to be used in
+ combination with SOURCE_BROWSER)
+
Included updates for the Finnish, Romanian, Korean, German, Japanese,
+ and Hungarian translation.
+
Added translation support for Esperanto.
+
id 579630: Added class attribute to the \todo and \bug HTML code so they
+ can be customized via CSS.
+
id 578740: Added support for Æ and æ characters.
+
+
Bug fixes
+
+
id 395169: Some links via tagfiles were not correct in
+ combination with CREATE_SUBDIRS=YES
+
id 539080: Having the same comment for the declaration and definition
+ of a function could result in duplicate documentation in case the
+ indentation level was different.
+
id 566713: Dot font was not removed even though DOT_CLEANUP was YES.
+
id 566925: Fixed problem resolving symbolic links.
+
id 567044: Fully qualified name was not shown correctly for nested
+ classes.
+
id 567375: Fixed parse problem for typedefs with redundant braces.
+
id 567535: Fixed problem when parsing operator%= for CLI/C++ code.
+
id 567777: Fixed problem with latex output when using enums.
+
id 567990: Doxygen could crash when there was a symlink in project.
+
id 568237: Non-ascii values entered where not saved according to the
+ INPUT_ENCODING.
+
id 568505: Fixed build problem for old Linux distributions.
+
id 569478: Fixed line continuation issue with the Fortran parser.
+
id 570960: C++ class defined in a .mm file was sometimes parsed as
+ Objective-C code.
+
id 571013: In the wizard, editing a text field in the middle of the
+ text in the expert tab caused the cursor to jump to the end of the line.
+
id 571096: Fixed Objective-C parsing problem when multiple protocol
+ forward declarations are put on one line.
+
id 571990: Fixed compiler issue with portable_iconv by moving the
+ function to a C file.
+
id 572560: Fixed parse issue when a #define is inside an enum.
+
id 572740: Fixed problem parsing C++ comments using line continuation.
+
id 573057: Included update for Swedish translator and changed
+ the language code from SE to SV to comply with ISO 639.
+
id 578382: When referring to a static variable or function
+ doxygen will now look at the file context in case of ambiguity.
+
+
+
Doxygen Release 1.5.8
+(release date 27-12-2008)
+
+
Changes
+
+
Completely rewrote the doxywizard. Main changes:
+
+
It is now based on Qt version 4. (4.3 or higher is required)
+
Different layout that allows easy switching between wizard
+ and expert mode, without losing settings.
+
Running doxygen can be done without first having to save
+ the configuration file.
+
For HTML output, there is a button to show the results in
+ the default browser.
+
Option to change the default configuration that is used
+ when you first start the wizard.
+
Non-default options are shown with red label, and there is
+ context menu to reset them back to the default.
+
+
Included Qt help update by Sebastian Pipping introducing
+ three new options to define custom filter sections and attributes:
+ QHP_CUST_FILTER_NAME,
+ QHP_CUST_FILTER_ATTRS,
+ QHP_SECT_FILTER_ATTRS.
+ Doxygen now directly generates the indices needed
+ by the qthelpgenerator.
+ Qt customers can have a look at issue 28 of the Qt Quarterly for
+ more information.
+
+
New features
+
+
id 131496, 522488, 541649, 554800:
+ Add new option EXTENSION_MAPPING, which can be used to
+ change the
+ mapping of file extension to language parser, e.g. defining
+
+ EXTENSION_MAPPING = f=C
+
+ will make doxygen parse files with the .f
+ extension as if it were C files.
+
Added support for Vietnamese (thanks to Dang Minh Tuan)
+
Thanks to Emin Ilker Cetinbas doxygen can now also produce Turkish
+ documentation.
+
id 143218: It is now possible to add the direction attributes
+ normally used with the @param command to document parameters
+ inline, e.g.
+
+ void foo(int v /**< [in] input parameter docs */);
+
+
+
Bug fixes
+
+
TYPEDEF_HIDES_STRUCT did not work correctly if the typedef did a
+ forward declaration of the struct/union.
+
id 153222: Fixed issue following recursive symbolic links.
+
id 423223: Detailed description was not visible for group functions
+ when SEPARATE_MEMBER_PAGES was enabled.
+
id 437346: Fixed issue handling multibyte characters in the RTF output.
+
id 475377: Improved error handling in case of character encoding
+ problems.
+
id 486747: Inherited typedefs were not resolved propertly.
+
id 508752: Add support for BLOCK DATA to the fortran parser.
+
id 532695: included documentation update about the use of \public
+ and friends for object-oriented programming in C.
+
id 532808: References to class variables in PHP code did not already work.
+
id 536394: Warning "no matching file member found" was given for a static
+ variables in multiple anonymous namespaces.
+
id 537686: Fixed invalid empty section for enum in a member group.
+
id 539590: C# generics with the same name but different template
+ parameters where merged.
+
id 540321: A using declaration in a header file was not taken into
+ account in the source file that included it.
+
id 540520: Have two C# enum values with the same name in different enums
+ was not handled properly.
+
id 543036: //## comments were extracted even if they were not part of
+ Rose documentation.
+
id 547436: Fixed issue combining Python docstrings and doxygen comments.
+
id 551615: A multiline C# comment with @ was not shown correctly in the
+ source browser.
+
id 544598: A multiline comment as part of a #define could case
+ wrong line counting and missing cross-references.
+
id 545128: \overload didn't work if it was the last statement in a
+ comment and not followed by a newline.
+
id 553380: Removed bogus warning refering to a namespace member from
+ with a brief description that was converted to a tooltip.
+
id 553968: Added support for JavaDoc command {@code ... }
+
id 554444: Bullet lists were no longer correctly indented when using
+ IE6.
+
id 554674: Fixed index rendering bug in the RTF output.
+
id 555174: The .qch file didn't include generated images.
+
id 555200: Fixed potential crash bug when parsing special comment
+ inside an if at global scope level of a PHP code fragment.
+
id 556240: Tree view in HTML output was not encoded correctly.
+
id 557001: VHDL Parser got confused when -- is in a string literal.
+
id 557014: Undocumented VHDL record member's internal record prefix
+ was not removed.
+
id 557026: Obj-C Protocols and interfaces had wrong
+ type/name in DocSets.
+
id 557031: Obj-C methods no longer require a space after the
+ initial - or +.
+
id 557034: Fixed problem parsing property in Objective-C code.
+
id 557038: Items in tabs.css could not be overridden by custom
+ style sheet.
+
id 557419: $relpath$ was no longer expanded in custom HTML headers.
+
id 557735: Summary for member groups was missing for groups and files.
+
id 558078: collaboration graph of a class using std::list of another class
+ was not correct if the classes where inside a namespace.
+
id 558460: When using \subpage, any section in the sub page was
+ missing from the LaTeX output.
+
id 558525: Template classes produced invalid HTML in the tree view.
+
id 559338: PHP Parser could get confused when there was a comment inside
+ an array initializer.
+
id 559650: Obj-C @interface without body was handle correctly.
+
id 560623: Mixin template classes where not shown properly in the inheritance
+ diagram if the classes where inside a namespace.
+
id 563136: The brief sentence is not shown for groups with no children.
+
id 563384: call graphs were not generated for Qt signals and slots
+
Included VHDL fix by Martin Kreis.
+
grouping of multiple @todo's (and friends) didn't work anymore,
+ causing duplicate sections and labels.
+
Some issues related to the Qt help output were fixed.
+
+
+
Doxygen Release 1.5.7.1
+(release date 5-10-2008)
+
+
Changes
+
+
The dot tool is no longer part of the doxygen package for MacOSX.
+ Please install GraphViz separately and set the dot path
+ to /usr/local/bin
+
+
New features
+
+
Added option DOT_FONTSIZE which allows to set the size of
+ the fonts used in dot generated graphs.
+
+
Bug fixes
+
+
id 554432: Re-added ALPHABETICAL_INDEX option.
+
id 554379: Fixed internal error for GENERATE_INDEXLOG when
+ GENERATE_HTML was set to NO.
+
id 554546: Included fix for handling relative includes in the
+ preprocessor.
+
Included several VHDL fixes related to syntax highlighting, finding
+ class members, and mixing upper and lower case.
+
Included patch to allow setting DEST_DIR environment variable
+ to determine where to install doxygen.
+
+
+
Doxygen Release 1.5.7
+(release date 28-9-2008)
+
+
Changes
+
+
The default CSS style sheet has been cleaned up and simplified, thanks
+ to the work done by Quinn Taylor.
+
+
New features
+
+
Added new config options GENERATE_QHP
+ which enables generating .qch (Qt compiled help) file via
+ the Qt's qthelpgenerator tool (part of Qt 4.4+).
+ This type of files can be read with Qt's Assisant to browse the
+ documentation in a similar way as is possible with Microsoft's
+ compiled HTML help (.chm). To further customize the output and run the
+ help generator from within doxygen, the following options
+ are available: QCH_FILE, QHP_NAMESPACE,
+ QHP_VIRTUAL_FOLDER, QHG_LOCATION.
+ Thanks to Sebastian Pipping for the patch.
+
Add new option SYMBOL_CACHE_SIZE to allow a different
+ trade off between doxygen's memory usage and the amount of disk
+ accesses.
+
id 532695: Added 3 new commands: \extends, \implements, and \memberof
+ that allow object oriented constructs to be documented as such
+ for languages that do not support it natively (e.g. C)
+
Added better support for one line comments after VHDL types.
+
Added new option LAYOUT_FILE which can be used to
+ specify a layout
+ template file that tells doxygen in which order to generate the
+ output and which titles to use for headings and how
+ the navigation index will look;
+ Read this for more info.
+ As a result the following options are now obsolete since they can
+ now only be controlled via the layout file:
+ DETAILS_AT_TOP, ALPHABETICAL_INDEX.
+ The following options can also be set via the layout file, but
+ for convenience and backward compatibility reasons they are still
+ also part of the configuration file:
+ SHOW_INCLUDE_FILES, SHOW_USED_FILES,
+ CLASS_GRAPH, COLLABORATION_GRAPH,
+ GROUP_GRAPHS, INCLUDE_GRAPH,
+ INCLUDED_BY_GRAPH.
+ Run doxygen with the -l option to generate the default layout file.
+
Included update for the Macedonian, Catalan, Brazilian, and Serbian
+ translation and also support for Serbian with Cyrilic characters.
+
+
Bug fixes
+
+
id 140264, 332187, 541924: Sections inside a \subpage where not shown as
+ subsection in the LaTeX/RTF output.
+
id 155098,156188: Added support for UTF-8 special characters in identifiers (which is
+ allowed by e.g. C#).
+
id 304598: operator-- caused invalid HTML output.
+
id 324047: parameter type [in or out] were not generated in RTF document
+
id 363499: @todo and friends did not work in a comment marked with @dir.
+
id 445485: HTML commands in a comment block with attribute values without
+ quotes were not handled properly.
+
id 533855: Processes were always documented as anonymous in VHDL code.
+
id 535379: Added support for %{...%} blocks in XPCOM's IDL.
+
id 536298: Last port in a VHDL port list was not correctly put in a
+ member group.
+
id 536385: Fixed problem matching function prototype and implementation
+ under certain conditions.
+
id 536629: Fixed compilation issue on NetBSD.
+
id 537393: Properties in Python were not properly handled.
+
id 538065: Added support for @optional and @required in Objective C 2.0
+ protocols.
+
id 538239: Some unlabeled VHDL processes were not corrected detected.
+
id 538515: Deriving a Objective-C interface from a protocol caused
+ parsing problems if the interface also has a body.
+
id 539057: Part of an Objective-C expression could be missing in the
+ source browser under certain conditions.
+
id 539590: Generic C# classes with the same name but different
+ template arguments were no longer treated as different classes.
+
id 539712: Fixed code parser issue for parameter indices of procedures
+ and functions.
+
id 540058: Creator code was wrong in the MacOSX application bundle.
+
id 540372: Fixed problem parsing large table by increasing
+ YY_READ_BUF_SIZE in the generated parser files.
+
id 540247: Fixed potential memory corruption issue parsing VHDL.
+
id 541113: Fixed locale for ctype, to avoid stripping of 0xA0
+ from multi-byte UTF-8 characters.
+
id 544479: SORT_MEMBER_DOCS did not work for class members.
+
id 546621: Fixed makefile so that .svn stuff is removed from the
+ tarball when doing "make archive".
+
id 546812: Using a table with row span greater than 1 did not
+ produce correct LaTeX output.
+
id 545098: Fixed problem parsing where clauses in combination with C#
+ generics.
+
id 545503: Nameless parameters of type "struct A" could end up wrongly
+ in the XML output.
+
id 545970: Refering to the main page did not work as advertised.
+
id 546158: The variable defined inside a foreach statement in C# code
+ was not considered for source linking, cause potentially incomplete call
+ graphs.
+
id 547361: Linking to specialized template functions did not work.
+
id 548175: Fixed problem parsing class members within a class X,
+ inside a namespace that is also named X.
+
id 548443: Documenting a nested namespace/classes with @namespace X.Y
+ did not work for C# (only X::Y worked).
+
id 548489: C++/CLI classes of type sealed abstract were not
+ processed correctly.
+
id 549318: Some headings in the user manual where wrongly formatted.
+
id 549581: Fixed potential buffer overflow in preprocessor.
+
id 550058: Obj-C: properties for private fields did not appear in the
+ output unless EXTRACT_PRIVATE was enabled.
+
id 550156: Corrected typo in the documentation for
+ GENERATE_TREEVIEW.
+
id 550247: Fixed problem parsing octal character literals in
+ the preprocessing phase.
+
id 551739: Related function with explicit namespace scope was not
+ properly placed if the function also existed in the global namespace.
+
id 552115: Anonymous structs and unions could produce invalid links in
+ the html help index.
+
id 552361: Fixed problem with operators in the LaTeX output.
+
id 552600: \copybrief ended a brief description instead of appending
+ to it.
+
id 553469: Removed bogus warning about internal inconsistency when
+ importing items via a tagfiles that are inside an undocumented scope.
+
id 553616: One can now remove the automatic line breaks in the type
+ part of a declaration by using a custom stylesheet with
+ BR.typebreak { display: none; }
+
id 553663: Aliases did not work in Fortan comments.
+
id 549022: Reimplemented in links could be wrong in case of
+ overloaded members.
+
id 553225: Parser was confused by arrays inside an Obj-C message.
+
Finnish translation was disabled.
+
A collaboration graph with multiple edge labels with not written to
+ the XML output correctly.
+
sub pages of a \mainpage were not shown in the Latex/RTF output.
+
Included some fixed for the VHDL parser.
+
+
+
Doxygen Release 1.5.6
+(release date 18-5-2008)
+
+
Changes
+
+
The GENERATE_TREEVIEW option is not longer a boolean, but can now
+ have 4 values, NONE (was NO), FRAME (was YES), HIERARCHIES, and ALL.
+ Thanks to Jake Colman for the patch.
+
a page marked as a sub page (\subpage) is now shown in the LaTeX and
+ RTF output as a section of its parent page. So the top level pages are
+ shown a chapters, subpages as sections, subpages of a subpage as
+ subsections, etc.
+
Included spec file updates by Kenneth Porter.
+
+
New features
+
+
id 514810: Added DOT_FONTNAME and DOT_FONTPATH options which allow
+ instructing dot to use a different font than FreeSans.ttf which doxygen
+ put in the output directory.
+
id 517242: Added option CHM_INDEX_ENCODING to specify the encoding
+ to be used for the CHM index files. Needed because CHM index files
+ cannot handle UTF-8 encoding.
+
id 519573: Included patch to make the font-size button visible in the
+ CHM output.
+
id 521288: Added new options SHOW_NAMESPACES and SHOW_FILES to
+ Suppress Namepace and Files Pages.
+
id 521495: Included a patch that makes it easy to modify the root of
+ the html treeview with an image using style sheets.
+
id 522300: Added option IDL_PROPERTY_SUPPORT to enable/disable special
+ propget/propput handling in IDL files.
+
Translation support for Finnish has been updated.
+
Added option FORMULA_FONTSIZE which can be used to change the font size
+ of the formulas included in the HTML documentation.
+
included update for Russian translation.
+
included patch to fixed some issues with VHDL code and add support
+ for some VHDL-93 constructs.
+
+
Bug fixes
+
+
Regression: fixed problem handling STL classes
+ when BUILTIN_STL_SUPPORT was enabled
+
id 142866,377976: Added new \copybrief and \copydetails commands,
+ which work as \copydoc but then only copy either the brief or the
+ detailed part of a comment block.
+
id 312655: DISTRIBUTE_GROUP_DOC didn't always work in combination
+ with SORT_BRIEF_DOCS enabled.
+
id 352234: The search index could contain invalid references when
+ SOURCE_BROWSER=NO and CALL_GRAPHS=YES.
+
id 402447: Added support for C# method declarations with where clauses.
+
id 425029: WARN_FORMAT does no longer require all of
+ $file, $line, $text to be valid.
+
id 495687: Replaced MAX_DOT_GRAPH_MAX_NODES with DOT_GRAPH_MAX_NODES
+ in the docs & config file.
+
id 508694 Fixed problem with mixed simple and double quotes in
+ fortran format declaration
+
id 508752: Fixed problem where the fortran scanner didn't recognize END
+
id 510971: Fortran: parser was confused by double REAL() in processed
+ statements.
+
id 514488: Fixed problem matching argument lists with const qualifiers.
+
id 514891: PDF generation failed with a LaTeX error when tocdepth
+ was set to a value higher than 2.
+
id 515518: Links in member group documentation was broken when
+ CREATE_SUBDIRS was enabled.
+
id 516086: Fixed division by zero when producing RTF output for the
+ comment /** <table><tr></tr></table> */
+
id 516536: Fixed build issues on OSX 10.4 and earlier.
+
id 516070: Added support for simple events without accessors in C#.
+
id 516387: replace 0xA0 character in perlmodgen.cpp by a space to
+ avoid compilation problems with the Chinese version of Visual Studio.
+
id 517112: Regression: examples with the same name but different paths
+ cause "file not found" warning.
+
id 518334: Fixed problem parsing Objective-C protocol definitions.
+
id 518537: Hiding an enum with an undocumented typedef with the same
+ name caused explicit referencing of the enum to fail.
+
id 519661: In some cases a function prototype could incorrectly be
+ flagged as a variable with constructor.
+
id 520325: Fixed parse problem when comment was after an extern "C"
+ block and before the opening bracket.
+
id 521234: Fortran: fixed problem causing
+ "stack empty! when parsing code"
+
id 522225: PDF Latex output did not produce proper hyperlinks for \page
+ and \subpage comment blocks.
+
id 522248: Page header were wrongly displayed in the RTF output.
+
id 522415: Fixed compile errors in addon/doxmlparser.
+
id 522600: Added additional warnings to signal invalid configurations.
+
id 523138: Removed redundant paragraph in navigation section of the
+ HTML output.
+
id 523326: Namespace name was prepended twice to template
+ specializations classes.
+
id 524357: Default mentioned for REFERENCED_BY_RELATION relation
+ was not correct.
+
id 524359: Default mentioned for REFERENCES_RELATION relation was
+ not correct.
+
id 524473: Removed incorrect warnings about parameters in VHDL.
+
id 525140: Improved handling of Objective-C 2.0 properties.
+
id 525143: Properties are now listed as attributes in the UML diagrams.
+
id 525144: GENERATE_DOCSET option greyed out in doxywizard.
+
id 526155: Removed warning about QFile::setName when parsing VHDL files.
+
id 527781: Template arguments for bases class not shown in a consistent
+ way.
+
id 528023: Inheritance relations were not correctly displayed for
+ C# generics.
+
id 528424: Fixed rendering bug in HTML output when used with Opera.
+
id 528584: Using enum and enum value with the same name in C# code
+ caused crash.
+
id 528620: Fixed typo in French translation.
+
id 528815: Fixed problem parsing define() statements in PHP code.
+
id 528989: Leading C comment could prevent preprocessor expansion for
+ the rest of the line.
+
id 529803: Doxygen didn't find call(er) relations for C# when using
+ this.Method() calls;
+
id 529554: Putting defined() inside a macro caused the preprocessor
+ to get confused.
+
id 529758: C++/CLI: default inheritance is now public, nested templates
+ ending with >> are now handled properly as well as indexed properties.
+
id 530201: Avoided warning for undocumented self parameter in Python.
+
+
+
Doxygen Release 1.5.5
+(release date 10-2-2008)
+
+
Changes
+
+
Pages created with @page are now chapters in the LaTeX and RTF output
+ and treeviews, and directly follow the mainpage. Also the project name
+ is not longer repeated for each chapter.
+ This should make it more convenient to create normal, printable
+ documentation with doxygen.
+
For dot graphs with an edge with more than ten labels, only the first
+ ten are shown followed by an ellipsis; done to prevent very long
+ dot runs resulting in unreadable graphs.
+
Use of pdflatex with hyperlinks is now the default.
+
id 511116: C++ preprocessor macro names are now replaced in the
+ comments as well. For example, S and m are replaced in the comments for:
+
+ #define C(S,m) /** container S */ struct S { /** value m */ int m; }
+
+
id 493923: The options SOURCE_BROWSER, CALL_GRAPH, CALLER_GRAPH,
+ REFERENCES_RELATION, and REFERENCED_BY_RELATION can now be indepently
+ enabled and disabled. By default the relations are now disabled.
+
+
New features
+
+
Added support for VHDL (.vhd or .vhdl extension) based on a patch by
+ Martin Kreis. Use OPTIMIZE_OUTPUT_VHDL when parsing VHDL code.
+
id 374699: Added support for Objective-C 2.0 properties.
+
Added compilation support for MacOSX 10.5 (Leopard) incombination with
+ Xcode 3
+
Added support for docsets, which allow integration of doxygen generated
+ API documentation in Xcode 3. new options:
+
+
GENERATE_DOCSET: enables/disables the feature
+
DOCSET_FEEDNAME: sets the provider/suite name under which the set is
+ listed.
+
DOCSET_BUNDLE_ID: A unique name for the docset.
+
+ See the configuration file or manual for more details.
+
id 493467: Added compilation support 64bit Solaris machines in
+ combination with Sun's own compiler (thanks to Heiko Jansen).
+
id 153376: Added support for the \tparam command, which works similar to \param
+ but is meant for documenting template parameters.
+
id 140104: Added \headerfile command which can be used to specify
+ the second and third argument of a \class command, when
+ the documentation is already in front of a class definition.
+
Added translator support for Macedonian.
+
Added language updates for German, Perian, Spanish, Taiwanese,
+ and Chinese, Korean, Croatian.
+
+
Bug fixes
+
+
Fixed potential crash bug due to wrong pointer check.
+
Using @param as the first word in a comment block did not work properly
+ in combination with JAVADOC_AUTOBRIEF set to YES.
+
Some character's could be missing from IDL properties.
+
Automatic abbreviations did not work for nested classes or classes
+ in a namespace.
+
Fixed a preprocessor bug where the line numbers of a definition could
+ get out of sync with the source code.
+
id 142023: Putting Qt signals or slots in a group did not
+ make them appear in the group documentation.
+
id 318668: Comments in Python function argument lists got messed up.
+
id 325359: Added support for C# XML-doc commands typeparam and
+ typeparamref.
+
id 331674: Aliases did not work in Python code.
+
id 356399: Fixed strange warning when specifying a tag file with an
+ anchor twice.
+
id 363828: Docstrings found at the top of a python file are handled
+ as module documentation again.
+
id 429437: A #include outside the input files was not searched
+ in the current directory of the file containing the include.
+
id 451299: Sometimes the wrong include file chosen when ambiguous
+
id 460585: @cond did not work in Python code.
+
id 477377: Function in undocumented anonymous namespace cause broken
+ link if EXTRACT_ALL was set to NO.
+
id 484731: Additional fixes for parsing Fortran.
+
id 488125: operator->* was not displayed properly in the output.
+
id 490766: Fixed compile error in fortranscanner.l which occurred for
+ some compilers.
+
id 492027: Ampersand (&) in front of parameter stops documenting
+ of PHP source
+
id 493249: using a namespace (or fortran module) caused the namespace
+ to appear in the documentation as if it was defined.
+
id 493434: Nested C# style XML lists in a comment block were not
+ handled correctly.
+
id 494187: Doxygen could crash due to an infinite recursion when
+ using tag files.
+
id 494599: When updating a config file an extra space was added just
+ before the end of a quoted string.
+
id 494760: Putting a # in a path name using Doxywizard, caused the
+ # to interpreted as the start of a comment in the Doxyfile.
+
id 495656: Description of default used for DOT_TRANSPARENT was wrong.
+
id 495687: Fixed typo in the description of DOT_GRAPH_MAX_NODES.
+
id 496392: Putting character entities like é in section/group
+ titles resulted in ´ in the output.
+
id 498049: Improvements to .spec files for RPM creation.
+
id 498680: Callgraphs for functions in anonymous namespaces generated
+ invalid labels for 'dot' when EXTRACT_ANON_NSPACES was set to YES.
+
id 498711: Reference parameters in PHP were not properly parsed.
+
id 499577: Collaboration diagrams not working with typedef
+
id 500227: Wrong output generated for Objective-C methods with
+ multiple arguments for LaTeX or RTF output.
+
id 500635: Project name is no longer placed before each top level
+ item in the treeview and other indices.
+
id 500465: Fixed some issues compiling for AIX.
+
id 500928: Fixed parser issue handling a tripple quoted
+ string when used to initialize a Python variable.
+
id 500944: Python variables with package scope were only extracted if
+ EXTRACT_STATIC was enabled.
+
id 501704: Line numbering was wrong when a #include was placed inside
+ an array/struct initializer list.
+
id 502213: Combining a brief and detailed description in an alias
+ produced the warning "unknown command \_linebr".
+
id 502447: Single quoted PHP strings were not handled correctly
+ by the source code parser.
+
id 503939: Variable was checked before initialized.
+
id 504120: TYPEDEF_HIDES_STRUCT now also works for enums.
+
id 504439: Assert when marshaling a member which had an associated
+ example.
+
id 504650: Generated LaTeX code injected hyperlinks into section titles.
+
id 507052: Fortran function named x_function was not properly handled.
+
id 507603: Enabling FILTER_SOURCE_FILES caused strange warnings when
+ INPUT_FILTER is empty.
+
id 508740: Using upper case port mode specifiers did not work correctly.
+
id 508753: Fortran: Added .f as allowed fortran extension.
+
id 508759: Fortran: fixed potential memory corruption while scanning
+ parameter lists.
+
id 507528: XML output was not correct for pointer arrays.
+
id 508752: Fortran scanner didn't recognize lonely END
+
id 509278: Spaced before the \internal command where treated as
+ documentation.
+
id 509582: Fortran: Spaces in function return type were not parsed
+ properly.
+
id 510387: Fortran scanner didn't parse initialisation of complex type
+ correctly.
+
id 511921: @file command ended brief description even when
+ JAVADOC_AUTOBRIEF was enabled.
+
id 512620: \copydoc of a comment with @param commands could result in
+ warnings that parameters were not documented.
+
id 513570: Fixed cross site scripting vulnerability in the
+ search.php script.
+
id 514814: Included missing fromUtf8 calls to translator decoder to
+ prevent potential language encoding issues.
+
id 513885: Using this-> inside a function could result in incomplete
+ call graph.
+
+
+
Doxygen Release 1.5.4
+(release date 27-10-2007)
+
+
Changes
+
+
id 469260: When setting SOURCE_BROWSER to YES, all undocumented classes also ended
+ up in the documentation. Now this will only happen if EXTRACT_ALL is also
+ enabled.
+
Upgraded included third party libs libpng and zlib to version 1.2.21 and 1.2.3
+ respectively.
+
+
New features
+
+
Included support for parsing Fortran 90, thanks to a patch by
+ Anke Visser and Oleg Batrashev (source: http://dougdevel.org/index.php?page=doxygen)
+
id 477548: Added config option SIP_SUPPORT to support handling SIP sources
+ (used for Python to C++ bindings).
+
id 475828: Added support for CLI/C++ style indexed properties.
+
Added config option TYPEDEF_HIDES_STRUCT which when enabled treats a typedef
+ of a struct as a struct with the name of the typedef. This behavious was
+ coupled to OPTIMIZE_OUTPUT_FOR_C in the previous version and is now an independent
+ option.
+
Included updates for the Korean, Brazilian and Chinese translations.
+
+
Bug fixes
+
+
id 314541: Fixed wrong DOCTYPE in HTML output when GENERATE_TREEVIEW was set to YES
+
id 321784: Changed scope resolution algorithm to avoid lookup failures on using
+ directives (thanks to Christoph Schulz for the patch).
+
id 415866: Fixed bug in preprocessor causing "More #endif's than #if's found" warning.
+
id 426971,465020: A brief description would in some cases be treated as a
+ detailed one.
+
id 430148: Doxygen reported "Internal Inconsistency" for class member inside
+ anonymous namespaces.
+
id 433449,363010: Removed Internal inconsistency when referencing enum values found
+ in a tag file.
+
id 438282: Line numbers were displayed when using \include inside \example.
+
id 443942,461433: mscgen was not called correctly on Windows when
+ generating .map files.
+
id 457346: increased the threshold for adding line breaks to the type part of a
+ declaration.
+
id 460294: Missing references in source browser when using the "register" keyword.
+
id 461889: Fixed bogus "no matching class member found" case.
+
id 462051: In certain cases doxygen failed to find the proper inheritance relation.
+
id 462077: Error in LaTeX index generation due to unescaped characters.
+
id 462159, 143250: Added support for parsing functions/methods returning a
+ pointer or reference to an array, e.g. a function of the
+ form: "int (*f(int))[];"
+
id 462436: Inheritance from an unknown template class was not handled consistently.
+
id 462439: Adjusted \author documentation.
+
id 462757: Fixed Latex output bug for members of anonymous struct or unions.
+
id 462861: Members references via tagfiles were sometimes broken.
+
id 463139: Doxygen failed to detect duplicate variable declarations in the same file.
+
id 465138: HTML entities in page title (such as ü) where not displayed
+ correctly in the HTML output.
+
id 465170: Wrong line numbers reported for errors when using multiline formulas.
+
id 465172: Fixed issues parsing <code>operator</code>.
+
id 466803: Fixed crash when parsing Java enum with empty field.
+
id 466890: Handling of CVS/RCS keywords was broken.
+
id 466910: When UML_LOOK is set to YES, the graph orientation is always top to bottom.
+
id 466991: Template argument using '?' operator breaks file generation.
+
id 468858,472310: C++ casting operator with templates was displayed wrong.
+
id 468937: .hhc and .hhk was missing the </body> and </html> tags.
+
id 469269: When HTML_DYNAMIC_SECTIONS was enabled, index.hhp missed
+ open.gif and closed.gif.
+
id 470029: Fixed crash while parsing a particular piece of PHP code.
+
id 471185: The word "property" was stripped from functions that started with it.
+
id 471495: Objective C category documentation was ignored in some cases.
+
id 472193: Fixed issue expanding multiple occurrences of the same alias command
+ argument.
+
id 472201: Removed spurious warning introduced by the fix for bug 465170.
+
id 473105: Auto link to nested class inside a base class was missing.
+
id 473140: Anonymous scope ended up wrongly in the XML output.
+
id 473402: context dependent \ref's inside a dot or msc graph did not work anymore.
+
id 473679: Doxygen skipped function if return type contained round parenthesis.
+
id 474529: index entries in LaTeX could be wrong on some platforms.
+
id 476035: Externally referenced links obtained via a tag file had an extra g in
+ the anchor
+
id 476562: argument of copydoc appears in XML output without proper escaping.
+
id 476766: Type of a virtual destructor was "virtual" in the XML output.
+
id 479113: Automatic links were not generated when next word started with "const".
+
id 479762: Wrong character encoding was used for dot files.
+
id 480722: File tooltips incorrect for the include dependency graph.
+
id 481168: Allow \f{environment}{ .... \f} so the number of braces matches.
+
id 481107: Using HTML_FILE_EXTENSION to set a non-default extension did not work
+ for the "no frames" link to main.html when GENERATE_TREEVIEW was enabled.
+
id 481827: Macro expansion removed the @ character when it appear in a C comment.
+
id 482964: The "template" word was a little too close to the rounded border in
+ the html output when rendered by Firefox.
+
id 484277: Adjusted the instructions to report a bug in the hope this will result
+ in less duplicate bugs.
+
id 484731: Fixed issue parsing unindented interface (Fortran).
+
id 486159: Fixed problem parsing \xrefitem commands in joined comment blocks.
+
id 488760: Added support for Trigraphs to doxygen's C-preprocessor.
+
id 488800: Fixed problem in perlmod generation.
+
id 488837: abstract class in PHP was not properly parsed.
+
id 489049: Setting MUTLILINE_CPP_IS_BRIEF to YES could cause wrong line number
+ references.
+
Call graphs were not properly synced between function declaration and definition.
+
Fixed bug in doxygen's internal caching mechanism which could make doxygen
+ forget enum lists for large projects.
+
+
+
Doxygen Release 1.5.3
+(release date 27-7-2007)
+
+
Changes
+
+
When OPTIMIZE_OUTPUT_FOR_C is enabled then a struct definition of the
+ form typedef struct _S { ... } S_t will be shown in the output as a
+ struct of type S_t and the typedef itself is omitted
+ (previousily _S was shown
+ as well as a typedef of the form typedef _S S_t).
+
Improved the line-breaking rules for members whose return types have many characters
+ (for example a function returning a pointer to a template class).
+
Multiple brief and detailed descriptions are now possible. It is still not
+ recommended to make use of them, but at least no documentation is silently hidden
+ when there are two brief or two detailed descriptions for the same entity.
+
Improved dot layout control and page sizing to better fit images on the screen
+ and paper.
+
+
New features
+
+
Added support for aliases with arguments,
+ see the manual
+ for more information.
+
Added HTML_DYNAMIC_SECTIONS option which, when enabled,
+ will produce sections
+ in the HTML output that can be expanded/collapsed. Currently used for
+ diagrams and graphs.
+
Added support for type constraints as available in the C# language ("where" clause)
+
id 332263: Added new option EXTRACT_ANON_NSPACES that when set to YES will extract
+ the contents of anonymous namespaces and show then in the output.
+
id 423765: Added support for <see cref="SomeSymbol"/> style XML comments.
+
id 426971: Added QT_AUTOBRIEF config option, which has the same meaning
+ as JAVADOC_AUTOBRIEF only now for /*! .. */ style comment blocks.
+
id 435108: Reintroduced the MAX_DOT_GRAPH_DEPTH option as a means to further
+ reduce the size of a graph.
+
+
Bug fixes
+
+
id 137644: Fixed issue with "const" parsing of a typedef'ed struct where the "const"
+ is placed after the struct definition.
+
id 153362: A typedef of a function pointer was not shown correctly in the output.
+
id 156003: Wrong template arguments when using @related for a (template) function
+ with a template class.
+
id 170004: The check for PDF or DVI in the generated latex output
+ was not always reliable.
+
id 300022: PHP code with unknown extension was parsed as C/C++ code. Added a
+ detection rule for <?php to switch to PHP parsing.
+
id 317967: Setting USE_PDFLATEX to YES now generates a
+ Makefile with a "pdf" target,
+ to be consistent with the documentation.
+
id 397099: Fixed several cases where "referenced by" relation was unresolved.
+
id 423776: XML style see tag resulted in messed up documentation.
+
id 426852: \hideinitializer was sometimes ignored when using structural commands.
+
id 426977: Included a patch allow building under recent versions of Cygwin
+
id 427991: Doxygen failed to call mscgen.exe properly on Win32 platforms.
+
id 430962: struct keyword was stripped from typedefs even for C code.
+
id 431049: Fixed potential crash when GENERATE_PERLMOD was enabled.
+
id 431202, 333607: Quotes inside strings caused the Pythons parser to get off track.
+
id 431763: doxygen crashes when using unsupported tags in the config file.
+
id 432420: Last enum value of a Java 1.5 style enum with constructor did not appear.
+
id 432743: The "std" namespace appeared in the output when
+ BUILTIN_STL_SUPPORT was enabled.
+
id 432757: Setting INLINE_INHERITED_MEMBERS to YES,
+ did not inherit the group of grouped members of a base class.
+
id 433630: Using double-quotes (") inside a brief description could lead to
+ errors in dot files when the brief description was used as a tooltip.
+
id 434079: The number of graph nodes could still be too large despite a
+ conservative DOT_GRAPH_MAX_NODES setting.
+
id 436648: List of class members was no longer complete under certain conditions.
+
id 437218: Special characters in \brief string cause problems HTML/XML in source
+ listings.
+
id 438300: Fixed two cases where doxygen could access memory outside array
+ boundaries under certain conditions.
+
id 441114: Add support for <term> inside <list> to conform to
+ C# XML comments.
+
id 442313: Casing of special commands was not handled consistently.
+
id 443942: Fixed problems running mscgen.
+
id 444823: No newline after the error message when hhc failed with return code >0
+
id 445105: Fixed some issues and wrong spacing for the RTF generation.
+
id 446585: Doxygen could crash when producing a warning for undocumented C++/CLI
+ arguments of the type "T%".
+
id 447133: Replaced occurrences of ' by ' in the HTML output.
+
id 448210: Make rule to install manpages was broken.
+
id 451297: Fixed more issues where using double-quotes (") inside a brief
+ description could lead to errors in dot files when the brief
+ description was used as a tooltip.
+
id 452824: In the source browser linking of a local variable did not work
+ after a sizeof() of the variable.
+
id 452828: Missing reference to struct member in the source browser due to
+ incorrect bracket count.
+
id 453366: Removed bogus warning for unresolved references in brief descriptions.
+
id 453918: The __init__.py files were incorrectly treated as modules causing
+ scoping issues for symbols defined inside such file.
+
id 456471: Changing the installation location (--prefix) did not affect the
+ location were the documentation was installed. --docdir can still
+ be used to overrule the location for the documentation.
+
id 456475: Added support for C++/CLI style finalizers.
+
id 457857: Leading "struct" keyword is no longer stripped from the documentation of
+ functions that return a pointer to a struct.
+
id 458710: Expanding environment variables in the config file to a
+ file or path name with spaces (e.g. "$(VCInstallDir)include") was
+ incorrectly interpreted as a list when used with for instance INPUT.
+
id 458749: Undocumented constructors/destructors inside an undocumented member group
+ were not visible in the output.
+
+
+
Doxygen Release 1.5.2
+(release date 4-4-2007)
+
+
Changes
+
+
The options MAX_DOT_GRAPH_WIDTH, MAX_DOT_GRAPH_HEIGHT, and MAX_DOT_GRAPH_DEPTH have
+ been replaced by a single option DOT_GRAPH_MAX_NODES, which can be used to
+ limit the size of a graph indirectly, by specifying the maximum amount of nodes in
+ the graph. The main advantage is that this can be computed much faster; dot has
+ to be run only once per graph and never on graphs with more than the specified
+ amount of nodes. Note that doxygen will always render the root node and its
+ direct children even when DOT_GRAPH_MAX_NODES = 0.
+
Parameters names are now copied to reimplemented functions, avoiding warnings about
+ missing or wrong parameter names when INHERIT_DOCS = YES.
+
+
New features
+
+
id 150916,159291,166209,330109,396316
+ Doxygen now uses UTF-8 internally for all strings and uses
+ iconv to recode the input to UTF-8. For HTML, LaTeX and man pages
+ the output is now always UTF-8. For RTF the encoding is local and
+ depends on the code page specified in the translator.
+ The config option USE_WINDOWS_ENCODING has been removed.
+ A new config option INPUT_ENCODING has been added which can be used to
+ specify the encoding of the input. Another config option DOXYFILE_ENCODING
+ can be used to specify the encoding of the config file itself.
+
Added support for message sequence charts (using mscgen).
+ For this two new commands have been added: \msc and \endmsc (similar
+ to \dot..\enddot), and a new config option MSCGEN_PATH (similar to DOT_PATH)
+ See the manual and website for more info.
+
Added support for C++/CLI. To enable it set CPP_CLI_SUPPORT to YES in the
+ config file (thanks to Ben Voigt for doing a lot of the work).
+
IGNORE_PREFIX now also works for function/members names when shown in the various
+ indices.
+
Doxygen will show a tooltip in the HTML output for links to classes, namespaces,
+ and members with the brief description (including dot graphs and source code).
+
id 321575: Added a new config option EXCLUDE_SYMBOLS which can be used to
+ exclude certain namespaces/classes/functions from the output by specifying
+ their name (which may include wildcards).
+
id 364536: Included patch by Ben Voigt which adds syntax highlight
+ support for several (managed) C++ keywords.
+
id 419349: Added two LaTeX layout enhancements provided by Stefan Pawig.
+
+
Bug fixes
+
+
id 132886: Included patch to fix an issue with using a sequence of xrefitems
+
id 134792: Added configure script for Cygwin autodetection.
+
id 162006: Doxygen now uses the default search path of dot for user defined
+ dot graphs (defined with @dot and @dotfile).
+
id 306231: Include fix for Japanese translation.
+
id 315543: htmlinclude didn't work as part of a description of a param.
+
id 322806: Doxygen now does not treat >> in a template list as a shift operator
+ for Java and C#.
+
id 332815: Legend generated with GENERATE_LEGEND did have typo.
+
id 345820: Included patch to make doxygen handle config files with
+ @INCLUDE with absolute paths correctly.
+
id 364780: Included patch to improve scope handling of nested classes/namespaces by
+ the code parser (thanks to Ben Voigt).
+
id 366113: Fixed configure script issue under Solaris.
+
id 367233: Non-class functions were duplicated in the xml index file.
+
id 367495: Windows build files had only support for English by default.
+
id 369499: In some cases variable names were duplicated in python source code output.
+
id 369200: Fixed parse problem when a single quote appeared in a Python comment line.
+
id 373229: Doxygen now gives a warning when it cannot inline a #include inside a body
+
id 374486: Inheriting from a template argument via an intermediate typedef could
+ result in invalid output.
+
id 375073: \ref could cause wrong XML output.
+
id 375753: Added missing new line to error message.
+
id 377911: Fixed problem with end of formula.
+
id 380516: Fixed line number issue in the Python parser.
+
id 381450: Tabs in the HTML output redefined the value of an "id" attribute,
+ which is not legal HTML.
+
id 374592: Member grouping didn't work properly for constructors.
+
id 381608: Initializer values of class variables and constants did no longer
+ appear in the documentations.
+
id 382274: Scanning files with RECURSIVE enabled ignored EXCLUDE_PATTERNS.
+
id 383377: C# code was not passed though the C-preprocessor.
+
id 383493: Improved the warning message for unterminated code/verbatim blocks.
+
id 384439: Made comment block parser more robust against HTML errors.
+
id 385384: SEPARATE_MEMBER_PAGES=YES caused broken links in Html Help index.
+
id 387781: Parsing #import statements was broken for Objective-C.
+
id 387848: Included patch to avoid LaTeX compilation issues.
+
id 389656: For C# enums in the same scope can have the same values, but doxygen's
+ parser got confused.
+
id 389750: Fixed alignment bug in the default html footer generated by doxygen.
+
id 390821: Fixed problem parsing Java 1.5 enums with initializers.
+
id 391619: When dot produces an non-zero return code, doxygen now prints the
+ return code and the command it tried to execute.
+
id 407815: Doxygen's got confused by certain combinations of " and ' s in PHP code.
+
id 409935: Fixed bug in qcstring.cpp
+
id 411300: PDF/Latex output was broken for operator[] documentation.
+
id 411328: Fixed Accessibility/Section 508 Compliance issue.
+
id 413071: Added support for Java 1.5 annotations.
+
id 415683: Two typedefs of function pointers with different names could still
+ resolve to the same type if the only difference was the argument list
+ and as a result cause "Undocumented function" warnings.
+
id 418920: Doxygen stripped leading comment chars from C# code blocks.
+
id 421131: Character encoding was not consistent for all HTML files.
+
The "list of all members" was not shown for a class with no members that derived
+ from a class with members.
+
+
+
Doxygen Release 1.5.1
+(release date 29-10-2006)
+
+
Bug fixes
+
+
id 148567: @todo at the end of a comment block caused problem when copied by @copydoc
+
id 352420: Fixed bug in LaTeX output (missing space after \bf).
+
id 363227: missing output for instance variables defined in a Python function
+ that has a doc string
+
id 363397: Member groups did not appear in a class when SUBGROUPING was set to YES.
+
id 364341: Parsing could become really slow if often included header files contained
+ using statements.
+
id 364673: The values of two enums with the same name (both in difference scopes)
+ where merged.
+
The version of dot shipped with the Mac binary had some non-standard dependencies.
+
Doxywizard didn't work on PC's where no Visual Studio 2005 was present, when build
+ with the project files (I'm now using /MT instead of /MD which fixes this issue).
+
Running 2 instances of doxygen on the same output directory caused corruption of
+ the temporary files generated by doxygen.
+
+
+
Doxygen Release 1.5.0
+(release date 16-10-2006)
+
+
Changes
+
+
cleaned up the internal structures to make them smaller, and made doxygen use
+ a temporary file to store the parse results (instead of keeping them in memory),
+ which will further reduce the memory usage, especially for large projects, and is a
+ first step towards incremental parsing.
+
+
New features
+
+
Added example application that shows how to configure and run doxygen from
+ within an application and use the information collected by doxygen without
+ also generating the output (see addon/doxyapp).
+
id 322467: Sections produces by \note, \warning, \remarks etc, now have a
+ class label in the generated HTML (<dl> tag) so you can give them a
+ distinct style using a non-default stylesheet (i.e. using HTML_STYLESHEET).
+
Added project files for building doxygen from Visual Studio 2005 (see winbuild dir).
+
added translator updates for Czech, Danish, German, Catalan, Croatian, French,
+ Japanese, and Italian.
+
added translator support for Arabic (thanks to Moaz Reyad)
+
added translator support for Persian (thanks to Ali Nadalizadeh)
+
+
Bug fixes
+
+
id 131445: Fixed autolinking for related functions.
+
id 137236: Updated documentation to make it clear that a lower-case only word
+ is not a candidate for autolinking.
+
id 141758: Fixed a problem parsing <?=...?> contructs outside of functions in PHP.
+
id 319169: Second level index not shown when DISABLE_INDEX=YES.
+
id 325337: Added "optimize output for C#" option to Doxywizard.
+
id 325426: Partial C# class inside a namespace where not handled properly.
+
id 327358: Fixed wrong link to the search engine when CREATE_SUBDIRS was set to YES.
+
id 326885: Leading ///'s ended up in code fragments when using indented
+ /// comments.
+
id 330513: For file documentation, the scope not stripped for namespace members
+ even if HIDE_SCOPE_NAMES was set to YES.
+
id 335131: Fixed "internal inconsistency" warning related to use of nested
+ classes defined outside a used namespace.
+
id 338475: Added support for Q_SIGNALS and Q_SLOTS macros (thanks to Thomas
+ Zander for the patch).
+
id 340973: Improved performance of "Computing template instances" step
+ significantly in case of (large) Java projects.
+
id 342090: Fixed missing cross-reference to "m" for code of the form f(a[s.f]->m)
+
id 344443: Code font commands where not treated properly in C# style comments.
+
id 344445: Made it more clear in the documentation where the XML commands in the
+ comment blocks are for, and how <code> works in C#.
+
id 345322: DOTFONTPATH was corrupted in mingw builds.
+
id 345519: Fixed problem parsing attributes in C#.
+
id 345660: Python class members that spanned multiple lines could confuse the parser.
+
id 345742: enum values were shown twice in some cases.
+
is 346095: Forced a newline before \normalsize in the LaTeX to avoid
+ font size issues.
+
id 346848: Under certain conditions nesting of groups did not work properly.
+
id 347444: paramref XML command did not render properly.
+
id 348259: Doxygen now keeps the _formulas.log file when there is a problem
+ generating bitmaps for formulas. This can help to identify the problem quicker.
+
id 348481: friend class in unnamed namespace produced bogus error.
+
id 348537: Fixed internal inconsistency warning that could occur when reopening
+ an anonymous namespace
+
id 349867: Fixed issue handling brief and detailed description when
+ both are positioned after an item.
+
id 350168: Doxygen didn't parse C# type contraints properly.
+
id 351890: In some cases C# attributes were treated as properties.
+
id 353044: C99 style variadic macros were not handled properly by doxygen.
+
id 353195: Member grouping with SUBGROUPING = YES now works the same for files
+ and namespaces as it does for classes.
+
id 354765: A command like \ingroup now ends a brief description as was the case
+ in the pre 1.4.x series.
+
id 355922: When a function was found in a namespace but also in the global
+ namespace, doxygen could make the wrong cross-reference.
+
id 356204: Setting HIDE_UNDOC_RELATIONS to NO could result in
+ argument mismatches in certain cases.
+
id 357092: Spurious doxygen warning when using a class that ends with 'const'
+ or 'volatile'.
+
id 357438: tabs and newlines were not parsed properly for html attributes inside
+ a comment block.
+
id 357646: objcache.cpp did not compile cleanly on a system with 64 bit pointers.
+
id 361812: whitespace after the colon at the end of a Python definition caused
+ parsing issues.
+
"struct Foo operator+()" was not parsed properly due to the "struct" keyword.
+
As a side-effect of bug 329861 Obj-C protocols and categories were no longer
+ extracted.
+
Fixed an problem with cross-referencing Obj-C code.
+
Removed the memory leaks reported by valgrind and tuned some data structures
+ to reduce the memory usage.
+
enums in a used namespace could cause arguments not to match.
+
fixed several cases where arguments of function/method declaration and definition
+ did not match while they should.
+
+
+\endhtmlonly
+\section log_1_4 1.4 Series
+\htmlonly
+
+
Doxygen Release 1.4.7
+(release date 11-06-2006)
+
+
Changes
+
+
The stylesheet has changed, so if you use your own, you will need to
+ update it or the output will look ugly.
+
+
New features
+
+
Added support for universal binaries on MacOSX (only the non-GUI part).
+
Added CALLER_GRAPH config option and \callergraph command to add
+ a caller (or called-by) graph to a function or all functions.
+ (thanks to Daniel Sherwood for the patch)
+
Added REFERENCES_LINK_SOURCE config option which allows to selected
+ if reference relations should point to the source or to the
+ documentation (thanks to Daniel Sherwood for the patch).
+
Included patch by Christoph Pesch to mention the member type in the
+ warning "Member ... of ... is not documented".
+
included update for Spanish, Italian, Norwegian, and Czech translations.
+
Added support for get/set properties in IDL (thanks to a patch by
+ Sander Stoks).
+
+
Bug fixes
+
+
id 151959: incremental "using" of nested namespaces could prevent
+ that doxygen matched function declaration against definition.
+
id 310521: HIDE_IN_BODY_DOCS was longer working.
+
id 315039: Improved handling of members in an anonymous scope.
+
id 322415: Under certain conditions a scrollbar appeared in a HTML page
+ while this was not needed.
+
id 325845: Documentation parser was confused when starting a HTML list
+ directly after a \b command.
+
id 325866: SORT_BY_SCOPE_NAME=YES did not always work if SORT_BRIEF_DOCS
+ was also enabled.
+
id 326023: CHM files had @ signs in CHM index for anonymous class enums
+
id 326250: Fixed incorrect regular expression in constexp.l
+
id 326688: Added better support for PHP5 style constructors
+ and destructors.
+
id 326885: Using multi-line //!-blocks did not work nicely together with
+ @code...@endcode blocks anymore.
+
id 327242: Python: Methods starting with _ are now marked private,
+ except for special method names (i.e. starting and ending with __).
+
id 327666: Fixed parse issue that resulted in a missing call graph.
+
id 328435: When enabling USE_PDFLATEX a blank line appeared in the
+ makefile
+
id 328849: Added clarification to the manual about the use of //!<
+ comments.
+
id 328635: Text of the HTML output didn't always wrap properly anymore
+ after "fixing" bug 322415.
+
id 329343: Fixed segment in Python parser caused by @var or @fn with
+ a missing argument.
+
id 329530: An apostrophe in ##-comments inside a Python class confused
+ the parser.
+
id 329534: Fixed problem resolving inheritance relations for nested
+ Python classes.
+
id 329537: Corrected the Python example to show how modules should be
+ documented.
+
id 329719: # comment in PHP containing a ' caused doxygen to ignore
+ rest of input.
+
id 329861: Fixed problem parsing embedded structs in an Objective-C
+ interface.
+
id 329905: PDF manual produced a LaTeX error because style sheet
+ was not up to date.
+
id 330209: A typedef in an Obj-C implementation file could obscure
+ class implementation later in the file
+
id 331511: no matching class member found error for class template
+ instance in combination with "using" of said class.
+
id 331751: Fixed problem parsing a function typedef.
+
id 332110: method matching failed for equivalent template instance
+ types.
+
id 332178: Fixed malformed XML output for readable properties.
+
id 333270: Fixed BoundingBox problem with PostScript graphs generated
+ with dot using graphviz-2.9.20060302.0540 and later (thanks to
+ John Ellison for the patch)
+
id 332875: Enabling SEPARATE_MEMBER_PAGES could lead to bogus warning
+ messages about undocumented parameters if only the HTML output was
+ enabled.
+
id 333330: Patch the reorganizes the treeview.
+
id 333831: "typedef const struct { } NAME" construction was not
+ properly parsed.
+
id 334716: Doxygen could hang when calling latex with invalid formulas.
+
id 336467: Latex formula could prevent /// comment blocks to be properly
+ converted to /** */ blocks.
+
id 336782: Prevented crash when providing code with illegal/redundant
+ class scope.
+
id 337344: Configure now accept system's /usr/bin/install on FreeBSD.
+
id 341365: @endcode comment was skipped in a specific case.
+
id 341453: Under certain conditions @cond did not stop at @endcond
+
id 341456: Fixed crash when feeding doxygen /dev/null as config file
+
id 342329: Text such as "dir/file.cpp" was not auto-linked.
+
id 342946: Anonymous enums couldn't be grouped using separate @var block
+
id 344118: Inbody documentation could hide the detailed description.
+
id 344172: Class Hierarchy appeared in a C-Code-Documentation.
+
Protection level of inner classes was not written to the XML output
+ (thanks to Shachar Itzhaky for the patch)
+
Included patch by Ernst Giessmann, which prevents most of the underfull
+ hbox warnings that are produced when compiling doxygen's LaTeX output.
+
Fixed potential crash during preprocessing if C-macros are defined
+ with /* (thanks to Günther Haslauer for the patch).
+
Anonymous struct members could end up in the wrong scope
+ (thanks to Bruno Andrillon for the patch).
+
saving to an existing file in doxywizard now requires a confirmation.
+
Fixed potential crash in case a template class with a redundant
+ namespace qualifier was used:
+ e.g. "namespace N { template<> class N::C<G::H> {}; }"
+
+
+
Doxygen Release 1.4.6
+(release date 30-12-2005)
+
+
New features
+
+
id 317773: Improved .spec file and better support for building rpms
+ (thanks to Kevin McBride)
+
+
Bug fixes
+
+
id 145294: Boolean expression with '<' as template argument confused
+ doxygen.
+
id 303297: The class hierarchy was sometimes incorrectly shown.
+
id 317819: Updated the documentation concerning the creation of PDF
+ output.
+
id 317967: @htmlonly..@endhtmlonly type of blocks (including formulas)
+ were not always working properly if used in inline parameter
+ documentation.
+
id 318008: The base class name was missing from the XML output.
+
id 318208: Enabling SUBDIRS resulted in the tabs at the top of certain
+ pages not be styled as tabs. Also, links to include dependency graphs
+ had wrong links or were incomplete.
+
id 318564: Python: parser skipped comment blocks in some cases.
+
id 318565: Python: single quote doc strings did not get parsed properly
+ if there was no space before the closing '''.
+
id 318567: Python: parse problem when () appear in default value of a
+ function parameter.
+
id 318618: If INLINE_INHERITED_MEMB = YES constructors of a
+ template class were shown in the derived class.
+
id 318678: Python: A referenced variable that
+ was not found using docstring could lead to memory corruption.
+
id 319170: The CHM file did not include the stylesheet material needed
+ to properly render the tabs at the top of each page.
+
id 319341: Doxygen crashed while generating call graph under certain
+ circumstances.
+
id 319539: Fixed parse problem with Python/Objective-C code.
+
id 319586: tabs.css not correctly included with CREATE_SUBDIRS option
+ set.
+
id 318460: Multiply-defined labels if two function specializations
+ differ only on the name of a template parameter.
+
id 319219: Spurious space was inserted after inlined math formulae.
+
id 319826: The file name for template classes could become too
+ long causing files that cannot be created by some file systems.
+
id 320026: undocumented "typedef struct foo baz" causes subsequent
+ variables appear as typedefs.
+
id 320543: If enabled the alphabetical class list is now the default
+ item under the classes tab.
+
id 320587: Links in brief file descriptions shown in directory pages
+ were broken if CREATE_SUBDIRS was enabled.
+
id 320693: First sentence in mainpage was missing with
+ JAVADOC_AUTOBRIEF enabled.
+
id 320740: Added support for documenting individual elements of an
+ associative array in PHP.
+
id 320813: The if() statement with space after the if confused the
+ code parser and resulted in partial call graphs.
+
id 320960: redundant line continuation characters were not removed
+ by doxygen's C-preprocessor.
+
id 321165: Doxygen choked on Qt properties with namespaced types
+
id 321197: using a namespace that contains a nested class, where the
+ inner class was forward defined, could introduce a bogus namespace
+ with the name of the outer class.
+
id 321256: Installation path mentioned in the documentation was wrong.
+
id 321349: In typedefs like "typedef struct {} T, *pT, the pT typedef
+ appeared wrongly in the documentation.
+
id 321540: An array of type an anonymous struct was not parsed
+ properly if there was a space between the name and the size, i.e.
+ struct {} Var [10];
+
id 321682: Fixed typo in the HTML output of the search page.
+
id 321743: Cross-references were missing to members of
+ anonymous structs.
+
id 311833: A template specialization of a private class member was
+ marked as public.
+
id 312329: @link label @endlink, i.e without link text now shows
+ the label as text, and space after label is omitted.
+
id 312624: \verbatim block could cause wrong line numbers while
+ parsing the source code.
+
id 322752: Fixed specific case where aliases were incorrectly expanded
+ inside environment formulas
+
id 322997: Putting function-style macros in a parameter of a
+ template return type of a function confused doxygen's parser.
+
id 323320: An enum name that also appears as a typedef
+ (i.e. typedef T {} T; }) is now linked as an enum and the typedef is
+ omitted from the output.
+
id 323557: Bit field information was missing from the XML output.
+
id 323627: Fixed compiler warning when using gcc 4.x.
+
id 323628: Improved warning when documenting #defines while the
+ preprocessor is disabled.
+
id 323988: FILE_VERSION_FILTER incorrectly handled command parameters
+
id 324076: Fixed some typos in the documentation.
+
id 324153: The configure script didn't work for SunOS 5.8.
+
id 324163: \todo paragraph did not end at \author (or similar commands).
+
id 324313: Added support for having a Linux system where libraries are
+ located in lib64 by adding a new platform to tmake: linux-64
+
id 324521: Autolinking to classes in a group which itself was in a
+ namespace didn't work without explicit scoping.
+
id 324558: Null pointer dereference in namespacedef.cpp
+
id 324565: References and callgraphs missing for some functions
+ (thanks to a patch by Dave Dodge).
+
id 324566: Fixed problem matching
+ f(unsigned long const a) against f(unsigned long)
+
id 324568: Fixed problem were some function prototypes were detected
+ as variable constructor calls (thanks to Dave Dodge for the patch).
+
id 324601: Cross referencing and call graphs were broken by
+ certain bracket positions for functions.
+
id 324823: Doxygen's code parser lost track in some cases, causing
+ function definitions not being found in some cases.
+
id 324891: Doxygen crashed on circular python imports.
+
+
Doxygen Release 1.4.5
+(release date 4-10-2005)
+
+
Changes
+
+
Changed to way the index looks (I hope you like it!).
+ It now is a list of items styled (with CSS) as a row of tabs.
+ Also class/namespace/file related items are now grouped together and
+ presented as a second row of tabs to prevent clutter (the latter is
+ based on the suggestions/patch in bug report 162968).
+ Note that if you use a custom HTML header you need to add
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ to the head section!
+
Copydoc now copies the brief description as well.
+
+
New features
+
+
id 306889: Added new config option BUILTIN_STL_SUPPORT. When enabled,
+ doxygen will assume that STL classes exist (without the need to include
+ the STL headers as INPUT).
+ This helps with matching of argument lists for function declarations and
+ definitions and also helps to improve the collaboration and inheritance
+ diagrams that involve STL classes.
+
id 317010: Added support for the following new HTML entities:
+ ‘ ’ “ ” –
+ — (thanks to a patch by madalexonline)
+
Included update for Chinese translation.
+
included update for the VC++ project files (in wintools dir), thanks
+ to Johan Eriksson.
+
+
Bug fixes
+
+
id 304339: Using \dot in latex formulas conflicted with the doxygen's
+ \dot command.
+
id 306076: Using a namespace inside an example listed with
+ @example did not work.
+
id 306069: Search engine required lower case names in order to find
+ something, which made pasting of names difficult.
+
id 308395: Doxygen could crash when producing a warning that included
+ a %s sequence.
+
id 311191: Default values for parameters weren't shown in the detailed
+ documentation.
+
id 311198: If JAVADOC_AUTOBRIEF was set to YES, a \todo or \bug like
+ command always ended at the first dot.
+
id 311207: The /* and */ inside a \code ... \endcode code fragment
+ were stipped.
+
id 311577: Putting a documentated class name in the title of the main
+ page caused a LaTeX error if pdf hyperlinks were enabled.
+
id 311665: Fixed compile issue for Solaris.
+
id 312688: Typedefs of arrays were auto-linked to the base type
+ i.s.o the typedef.
+
id 312678: Fixed excessive memory usage for @fn commands
+ due to a memory leak of the scanner buffer 256K of memory was leaked
+ for each command!
+
id 312791: Undocumentated members did not result in warnings if
+ SOURCE_BROWSER was enable and the member's definition was part of
+ the INPUT.
+
A C-comment inside a \code block could lead to parse problems in the
+ preprocessor, resulting in #defines that are not found.
+
Fixed problem documenting Python code using docstrings where the module
+ documentation was not picked up. Also fixed several other Python
+ related issues. Also included Python examples in the documentation.
+
id 312805: Using BUILTIN_STL_SUPPORT could result in dead links for
+ STL classes.
+
id 312807: Added support for STL exceptions (when BUILTIN_STL_SUPPORT
+ is enabled).
+
id 313011: Item after the closing of a nested group was ignored in
+ some cases.
+
id 313103: Member groups within other nested groups did not work
+ anymore.
+
id 313298: Code parser didn't handle function-try-blocks correctly.
+
id 313572: Fixed lockup issue when generation code for Python files.
+
id 313695: Fixed parsing issues for the constructs
+ "\f$n\f$" and "operator <CODE>".
+
id 313805: '@' characters in a string literal were lost during
+ macro expansion.
+
id 313906: added support for "import" and "from ... import" to the
+ Python parser so cross module inheritance works.
+
id 313908: Fixed python parser problem: If there are two classes
+ defined in one module there needed to be a comment between them.
+
id 314165: Python functions starting with _ are not marked as public,
+ whereas variables starting with _ are marked private.
+
id 314194: Brief description containing 'i.e., ' ended after the
+ comma.
+
id 314237: You can now also use \ref on directories documented with
+ \dir.
+
id 314288: Using \ref with an ambiguous filename didn't work.
+
id 315006: C++ comments at the start of a line and
+ inside a <pre>..</pre> block were stripped.
+
id 316264: Fixed typo in the inline config file documentation.
+
id 316266: Included update for the Japanese translation (thanks to
+ Katsuhiro Hermit Endo)
+
id 316759: Fixed problem in the Makefile of doxywizard so that the
+ right version appears in the about box.
+
id 316944: An inline formula (or other special command) did not get
+ executed if it was within an inline documentation block and
+ put after a parameter.
+
id 317052: The alphabetical class index was not sorted properly if
+ multiple prefixes were specified using IGNORE_PREFIX.
+
id 317105: Latex output expanded ß as "s instead of {\ss} which
+ only worked if german.sty was included. Thanks to Stefan Pawig for the
+ patch)
+
id 317397: Copying of images from subdirectory within the IMAGE_PATH
+ didn't work properly since doxygen didn't remove the subdirectory
+ from the destination path.
+
id 317446: Documenting an enum with \enum while there is also a function
+ with the same name in the same scope could make the enum documentation
+ appear at the wrong spot or the enum in the wrong member group.
+
id 317490: A variable of a nested class, forward declared in a template
+ class, which in turn was in a namespace, caused the variable to end
+ up in the global scope.
+
+
+
+
Doxygen Release 1.4.4
+(release date 21-7-2005)
+
+
New features
+
+
Added support for parsing Python code.
+ Special comment blocks in Python are of the
+
+ ##
+ # Some comment
+ #
+
+ or you can rely on Python docstrings.
+ This code uses the new parser interface and was based on the work done
+ by a group of students as part of a compiler design project.
+
Added support for C# style XML tags in the comments.
+ See the manual or the C# language specification for more details.
+ Thanks to Talin for doing most of the work.
+
Added support for the JavaDoc command {@inheritDoc}.
+
+
Bug fixes
+
+
id 166254: SORT_BY_SCOPE_NAME didn't work anymore.
+
id 304380: New argument matching algorithm didn't handle the case
+ where "const int" needed to be matched against
+ "const int a" correctly.
+
id 304435: Superfluous backslash in the makefile caused problems for
+ Japanese locale.
+
id 304476: A #define directly after a //!< style comment block was not
+ parsed properly.
+
id 304598: Using operator-- in resulted in broken HTML output due to the
+ embedded doxytag that include the end of a HTML comment.
+
id 304623: Spreading a @fn command over multiple lines didn't work
+ anymore without using line-contination characters.
+
id 304666: Attributes of the same class appeared separated with \n in
+ collaboration diagrams
+
id 304751: A define "foo()" was indisguishable from a define "foo" in
+ the XML output.
+
id 304752: XML location tag attribute "file" could have the
+ syntactially wrong value "<generated>" in some cases.
+
id 305334: INPUT_FILTER tag did not work properly anymore due to
+ additional quotes.
+
id 305364: Improved argument matching routine to avoid cases where
+ declaration and definition of functions/methods could not
+ be matched.
+
id 305439: @link command did not work if the link text started with
+ "const" as part of a longer word.
+
id 305638: operator& was only usable with @copydoc if the method was
+ fully qualified.
+
id 305672: Title of a paragraph was not properly rendered for the
+ RTF output when using \par in ALIASES.
+
id 305740: When putting a \b command in a HTML table cell, doxygen got
+ confused by the cell end tag, causing the rest of the table
+ to be displayed wrongly.
+
id 305768: @todo, @bug, @deprecated, etc, did not always end at the
+ next paragraph.
+
id 305770: For overloaded global functions only the first appeared
+ in the file documentation.
+
id 306028: The text after /*@{ and //@{ was treated as source code
+ instead of a comment block.
+
id 306136: Structural commands were executed even though they appeared
+ within quoted text.
+
id 306200: Putting a command like \author before \brief caused the
+ long description to be glued to the \author command.
+
id 306235: Punctuation is not automatically added to brief
+ descriptions for Japanese, Chinese, and Korean anymore.
+
id 306637: @endcond did not properly end a conditional section
+ when @cond was used without label.
+
id 306711: Brief descriptions ended at a new paragraph even if no
+ content was found and @name didn't work without explicit
+ @{ ... @} block commands.
+
id 306851: Under certain conditions bogus argument documentation could
+ appear.
+
id 306943: Certain constructs could get the code parser off track and
+ could lead to memory corruption.
+
id 307579: Fixed argument matching problem where "unsigned int"
+ did not match "unsigned int i".
+
id 307613: Documented struct fields declared as a comma separated list
+ caused the documentation of all fields to be appended.
+
id 307618: Reference in the source file did not appear if a variable was
+ documented with \var and also had a brief description.
+
id 307954: Parse problem when a /* was nested inside a C-style comment.
+
id 308053: It is now possible to put multiple structural commands into
+ a single comment block. Doxygen will treat them as
+ separate comment blocks internally. Example:
+
+ /** @file
+ * File documentation.
+ * @defgroup grp A Group
+ * Group documentation.
+ */
+
+
id 308059: was written as "\ " to the LaTeX output instead
+ of ~.
+
id 308400: The parameter names are now used based on whether the
+ documentation is in front of the declaration or definition.
+
id 309022: Conversion operators inherited from a template class
+ did not appear with the proper type substitution.
+
id 309148: The search index page was not correct if DISABLE_INDEX was
+ set to YES.
+
id 309446: Files beginning with one or more digits were not autolinked.
+
id 309461: Made the configure script look for qt in places like
+ /usr/share/qt3 (debian) and /usr/qt/3/ (gentoo)
+
id 309711: Aliases were expanded inside formulas.
+
id 310012: Made the allowed suffixes for constants in the constant
+ expression evaluator of the C-preprocessor more strict.
+
id 310025: Added explicit type conversion to avoid problems with
+ compiler bugs in Sun's Forte 6.1 and Studio 10 compiler.
+
Fixed argument matching issue exposed by the template example in the
+ examples directory.
+
+
+
Doxygen Release 1.4.3
+(release date 16-5-2005)
+
+
Changes
+
+
For Developers: Added an abstract interface for language parsers
+ (see src/parserintf.h), which can be used implement new programming
+ language parsers. There is also a manager class, where a parser
+ instance can be bound to a certain file extension.
+
Changed the algorithm for matching function/method declarations against
+ their definitions. The new algorithm should be faster, more powerful,
+ and more accurate.
+
+
+
New features
+
+
Included new config option HTAGS. When enabled in combination with
+ SOURCE_BROWSER=YES, the source browser of GNU's Global source
+ system (via htags) is used instead of doxygen's own (thanks to
+ Shigio Yamaguchi for the patch).
+
Added language updates for Indonesian, Catalan, Russian, Korean,
+ German, Hungarian, Polish, and Lithuanian.
+
Included update of the .spec file (thanks to Stephane Gourichon).
+
+
+
Bug fixes
+
+
id 163705: Using \image for latex without caption but with size
+ parameter "width=\textwidth" did not work.
+
id 163783: Items of an autolist could be wrongly indented if put
+ directly after @name.
+
id 163928: Class section was missing in the file documentation.
+
id 164072: When using tag files unneeded external
+ classes could appear in the class hierarchy in some cases.
+
id 169755: page title was omitted in the XML output if
+ CASE_SENSE_NAME was set to NO.
+
id 170592: Using \ref for Objective-C methods did not work if the
+ name contained a colon.
+
id 171795: Refering to Objective-C methods now follows Apple's
+ conventions.
+
id 171878: When JAVADOC_AUTOBRIEF = YES and there was no blank line
+ after a page command, the first sentence did not appear in
+ the documentation.
+
id 171923: Doxygen failed to match arguments for a function documentated
+ out-of-line with @fn and using @relatesalso.
+
id 172118: Doxywizard now shows the version of doxygen it is for.
+
id 172133: Doxygen did not longer ignore preceding C++ comments inside a
+ comment block.
+
id 172217: 'using namespace' declarations with spaces resulted
+ in duplicate namespaces.
+
id 172329: The index of the CHM did not always link to groups correctly.
+
id 172456: Fixed case where doxygen had problems differentiating const
+ and non-const member functions.
+
id 172494: @code blocks were not poperly ignored by the preprocessor
+ in some cases.
+
id 172622: Fixed parse problem for Objective-C method implementations
+ whole declaration part ended with a semicolon.
+
id 172723: Namespace members appeared in the file documentation without
+ proper links to the namespace.
+
id 172778: A single colon after retval caused a crash.
+
id 172783: Doxygen will now put quotes around a filter name before
+ calling it so it will work with filters with spaces in the
+ name or path.
+
id 172818: Improved translation of Todo List to German.
+
id 172937: FILE_VERSION_FILTER failed for filenames containing spaces.
+
id 173034: The \elseif command was not handled properly.
+
id 173110: \ingroup did not work with multiple group labels anymore.
+
id 300204: Doxygen disobeyed Cygwin's 'text/binary mount mode'
+ (thanks to Max Bowsher for the patch).
+
id 300466: Improved the documentation for FILTER_SOURCE_FILES.
+
is 300473: Added a browse button for several of Doxywizard's
+ fields of the expert dialog where a file was expected.
+
id 300532: consecutive @todo items were joined together even if they
+ are in different sections.
+
id 300745: A disabled @cond section did not omit #define documentation.
+
is 301409: autolinks to undocumented files did not work correctly when
+ SOURCE_BROWSER was enabled.
+
id 301437: Fixed a typo in an example that is part of the preprocessor
+ documentation.
+
id 301478: Fixed some cases where cross-references were not properly
+ detected anymore.
+
id 301616: Added "+" or "-" to the Objective-C method lists in the
+ summary section of a class.
+
id 302100: An enum could not be grouped by grouping out of line
+ documentation.
+
id 302158: When enabling SEPARATE_MEMBER_PAGES and CREATE_SUBDIRS
+ the member index contained invalid links.
+
id 302160: list directly after @brief not parsed properly if there
+ were spaces before the @brief command.
+
id 302713: Updated doxytag so it works better with recent versions
+ of Qt3 and the Qt4 beta versions.
+
id 303305: When using \subpage the page hierarchy wasn't reflected
+ in the tree view or .chm index.
+
id 303511: Documenting a class in a namespace with a comment block
+ inside the namespace containing a @class command did
+ not work properly.
+
id 303911: Links from todo list items to Objective-C categories were
+ broken.
+
id 304026: A class/struct/interface can now be turned into something
+ else of the same kind using the proper command (i.e.
+ @interface could by used to turn a class into an interface).
+
Doxygen did not honor the "All members of an interface in Java are
+ implicitly public" rule.
+
An enum of a class could not be documented with @enum from inside a
+ namespace.
+
Fixed problem handling unname member groups (useful in combination
+ with DISTRIBUTE_GROUP_DOC = YES, which didn't work anymore).
+
Updated Doxygen.dsp (thanks to Gerik Rhoden).
+
For a word marked with a #, the # is now also removed when no link
+ could be generated.
+
Using '<' (or '\<') in a <pre> section cause '$<$'
+ to appear in the Latex output.
+
+
+
Doxygen Release 1.4.2
+(release date 28-3-2005)
+
+
Changes
+
+
If the class/namespace/file member indexes get too long they are now
+ automatically split over multiple pages (one page per index letter).
+
Internal: I've split the input scanner (scanner.l) in a part that scans
+ the supported programming languages and passes the comment blocks to a
+ second scanner. This should clean up the code a lot and make
+ the handling of structural commands (like \class and \section)
+ more consistent. It is also a first step towards supporting dedicated
+ scanners for other programming languages.
+
Made doxygen parse .as files (Action Script) as Java code.
+
+
+
New features
+
+
Added a new option SEPARATE_MEMBER_PAGES. When enabled doxygen will
+ generate a separate page for each documented member, instead of putting
+ all members on the class/file/namespace page. An index for other members
+ of the same compound is rendered on the left hand side of the page.
+
Added new command \subpage that can be used to build a hierarchy of
+ pages. For pages this is more convenient than using \defgroup
+ and \ingroup. See the documentation more details and an example.
+
Included man pages for doxygen and doxywizard.
+
Language updates for Czech, Swedish, Russian, Italian, Catalan,
+ German, Brazilian, Korean, Ukrainian, Romanian, Croatian and Chinese,
+
+
+
Bug fixes
+
+
id 124214: #'s inside a single quoted PHP string could lead to parse
+ problems.
+
id 142339: Doxygen did not using the LATEX_CMD_NAME setting when
+ generating formulas.
+
id 163180: Extension specific filters did not work.
+
id 163940: Labels in dot graphs containing quotes where
+ not escaped properly.
+
id 164198: \overload text was always English, it is now translatable.
+
id 164498: Fixed problem where doxygen ignored the documentation for
+ members of Objective C class categories when put in the
+ implementation section.
+
id 164563: \anchor didn't work inside a <pre>...</pre> section.
+
id 164812: fix compile problem for certain language selections.
+
id 165097: Fixed problem with wrong syntax color in \code section.
+
id 165188: in index.xsd the refid attribute type (xsd:Name) was
+ not broad enough and has been replaced by xsd:string.
+
id 165339: Fixed some issues in the code parser causing missed
+ cross-referencing relations and/or call graphs.
+
id 165428: ALIASES containing @section commands where not
+ handled properly.
+
id 165503: grouped classes did not appear as such in the XML output.
+
id 165793: input filter was applied to \verbinclude.
+
id 165816: Grouped functions referenced via tag files had broken links
+
id 165821: Tag file parser produced bogus errors for nested classes and
+ namespaces and no line number was reported.
+
id 166043: static initializer block in Java made doxygen ignore the
+ rest of the file.
+
id 166161: More documentation to make the \code command more clear.
+
id 166756: Fixed a number of issues with the new comment scanner.
+ It should be much more usable now.
+
id 166782: XML output: Simple types in a namespace are also
+ listed at file scope in index.xml
+
id 166863: @class required fully qualified name even if the comment
+ block was in the right scope already.
+
id 166898: Forward declaring a template class added the template
+ argument to next class defined
+
id 167037: The method names were non-informative in the todo like
+ lists when HIDE_SCOPE_NAMES was set to YES (thanks to Luigi Ballabio
+ for the fix).
+
id 167040: Related functions were listed as members in the todo list.
+
id 167462: Doxygen doesn't recognize references to methods of classes
+ that come as parameter
+
id 168159: Sometimes enums don't have hyperlinks in the source code.
+
id 168243: Doxygen produced an unclear warning when putting multiple
+ @page commands in one comment block.
+
id 168693: A C-style comment ending with a brief description (including dot)
+ and a **/ as end marker, caused strange warning.
+
id 168734: Nested C comments in a \code block confused the preprocessor.
+
id 168754: //@{ was not working with the new comment block scanner.
+
id 168871: \~ did not work in C++ style documentation and aliases.
+
id 168961: Fixed problem parsing arrays of unnamed structs.
+
id 169003: cross-references were make to global variables even if the
+ global variables were hidden by local ones or
+ undocumented/private member variables.
+
id 169069: static C++ variables with initializers were detected as
+ functions.
+
id 169188: static functions were not extracted from PHP classes even
+ though EXTRACT_STATIC was set to YES.
+
id 169495: const Qt properties were not parsed properly.
+
id 169535: spaces after \ref command were not preserved
+ in <pre> context when the command had only one argument.
+
id 169547: Removed bogus warning for friend classes inside classes in
+ an anonymous namespace.
+
id 169549: Previous fixes introduced flattening of the class hierarchy.
+
id 169640: File suffix check for the D language was broken.
+
id 169641: D contructors and destructors were not detected.
+
is 169657: Fixed the way import is treated in D to prevent recursive
+ lockup.
+
id 169784: Objective-C methods with a variable number of arguments were
+ are not parsed properly.
+
id 169789: Images specified via \image are now also copied to the
+ XML output.
+
id 170612: documenting members of nested anonymous compounds did no
+ longer work.
+
id 170833: <code> ended a brief description.
+
id 170835: doxygen didn't match members of classes in unnamed
+ namespaces with their definitions
+
id 170846: template instance friend classes could not be documented
+ externally.
+
id 171260: In some cases doxygen produced an incorrect warning about
+ duplicate detailed descriptions.
+
id 171295: It now possible again to link to a (enum)value of a @retval using
+ #name.
+
id 171376: \else command was not properly parsed if the corresponding
+ \if was disabled.
+
id 171749: Using @relatesalso for functions in a namespace didn't work
+ correctly.
+
It is now possible again to use Thing%s to auto-link to a class
+ Thing and put a non-linked "s" after it.
+
Nested anonymous namespaces appeared as @<num> in the
+ documentation of the parent namespace.
+
aliases containing @brief were not handled correctly.
+
The class name in the HtmlHelp index was linked to the
+ first member function of that class instead of the class itself.
+
+
+
Doxygen Release 1.4.1
+(release date 11-1-2005)
+
+
Bug fixes
+
+
id 163058,163401: Due to a memory corruption bug doxygen could crash under certain conditions
+ (the Windows binary was the most sensitive to this).
+
id 163003,163495: Doxygen crashed when GROUP_GRAPH and UML_LOOK were enabled.
+
Book icon in the treeview is now clickable and has the appropriate action (thanks to
+ Will Bateman).
+
Entering the expert dialog in doxywizard now only requires saving the config file
+ if actual changes were made.
+
+
Doxygen Release 1.4.0
+(release date 31-12-2004)
+
+
Changes
+
+
In the HTML help output (.chm files) the index items with only one
+ subitem are now collapsed into one item (thanks to Antony Pranata for
+ the patch).
+
Some minor tweaks to the style sheet.
+
@relates can now not only be used for functions, but also for
+ other members (i.e. enums, types and variables).
+
Static members do have have explicit "static" in the declaration
+ part of the documentation. This is useful for grouping where it
+ is otherwise not obvious that a member is static.
+
typedefs and enumeration are no longer shown in the "referenced by"
+ list as these are types (based on patch by Antoine Tandin).
+
Make configure script use solaris-g++ by default (Sun's own compiler
+ generates faulty code for doxygen).
+
+
New features
+
+
Included language update for Serbian, German, and Korean.
+
For directories dependency graphs are now generated (controlled
+ by the DIRECTORY_GRAPH switch). For a given directory, the graph will
+ show its parent directory and the sub directories as nested boxes.
+ For the directory and its sub directories it will show the relations
+ with other directories. Relations are based on #include relations of
+ the files contained in the directories. Each dependency arrow has an
+ associated number. This number indicates the number of
+ different #include relations. Clicking on the number will show a page
+ with the exact #include relations (the latter is for the HTML output
+ only).
+
Added \cond and \endcond commands, which can be used to
+ (conditionally) exclude a part of a file. See the manual for an
+ example.
+
Added "-d ExtCmd" debug option, which when used shows what doxygen
+ will execute when invoking an external command (such as dot).
+
New option WARN_NO_PARAMDOC that warns about the absence of function
+ parameter or return type documentation.
+
Nested classes are now listed in their containing class.
+
Extended the \f command to support different environments, i.e.
+ \f{eqnarray*} for equation arrays. The end command is \f}. The
+ documentation has an example.
+
Added support for group dependency graphs
+ (thanks to a patch by Antoine Tandin): New option: GROUP_GRAPHS
+
New option DOT_TRANSPARENT to enable dot graph with a transparent
+ background. Thanks to Maik Hinrichs for the patch.
+
New option FILE_VERSION_FILTER which allows an external tool to
+ provide version information per file, which is then used in the
+ file documentation. Thanks to Maik Hinrichs for the patch.
+
id 162295: New option DOT_MULTI_TARGETS which when set to YES,
+ will run dot with multiple output files if possible. This was added
+ to support older version of dot (<=1.8.10) which do not support multiple
+ output targets. If you use a recent version of dot, you probably want
+ to enable this (default is NO).
+
+
Bug fixes
+
+
id 119868: Removed warning when </li> ended a @c or similar command.
+
id 120367: \~lang didn't work correctly around brief descriptions
+ and certain commands. It is now implemented as an early filter
+ operation like \cond.
+
id 135311: Recursive ALIAS definitions now work again.
+
id 151012: <td> tag in HTML function documentation missed 'class="md"'
+
id 154689: Wrong link to members of namespaces imported from tag
+ files when CASE_SENSE_NAMES is set to NO.
+
id 154700: anchors in pages imported via tag files could not be
+ linked to.
+
id 154755: Files were missing from Doxygen.dsp project file.
+ (thanks to Gerik Rhoden).
+
id 154758: Fixed typedef resolution bug that could crash doxygen
+ (thanks to Gerik Rhoden for the analysis and fix).
+
id 154862: Fixed problem matching array parameters that include
+ template parameters as the array size.
+
id 154863: Fixed parsing problem in the preprocessor when an
+ expression contained the division operator.
+
id 154469: Referring to Objective-C messages was broken if the full
+ scope was used.
+
id 155086: Typedef for member-function pointers of template classes
+ not recognized
+
id 155272: Image filenames in RTF output were not quoted causing problem
+ with custom images whose name contained spaces.
+
id 155322: Fixed parse problem for php code containing '#'.
+
id 155224: Java interfaces did't resolve across packages w/o FQN.
+
id 156411: Return type of a function was not hyperlinked in some cases
+ (typical with nested namespaces or Java packages).
+
id 156445: function seen first in header and doc'ed in
+ source broke autolinking depending on the order of the input.
+
id 157085: Autolinks for const/volatile operators didn't work.
+
id 157229: Upper case letters in \page "<name>" breaks title on page.
+
id 157433: Multi-variable declarations were not parsed properly.
+
id 157485: @todo's inside the body of a function were not handled
+ properly.
+
id 158961: Set EXTRACT_ALL to NO resulted in no directory information
+ unless the directory and files were documented. This is now controlled
+ by SHOW_DIRECTORIES.
+
id 158481: I did some memory usage analysis with valgrind's massif tool,
+ which indicated that a lot of memory was used by QCString objects.
+ This made me decide to reimplement the class and optimize it for
+ memory usage. The resulting class saves a "new" operation of 12 bytes
+ per string object, which seems to reduce the overall amount of
+ memory used by doxygen by a factor 2 to 3! The implementation seemed
+ more expense to use (as it always copies the content instead of sharing
+ it), but the performance has improved nevertheless (probably because
+ "new" is much more expensive operation than copying small strings).
+
id 158637: Links to classes in brief description in index pages were
+ wrong when CREATE_SUBDIRS was set to YES.
+
id 158884: "typedef [something] enum" in IDL was not handled properly.
+
id 159487: @ref's to Objective-C class categories were not possible.
+
id 159973: @todo item in anonymous enum resulted in broken link.
+
id 160642: Fixed problem parsing multi-dimensional C arrays.
+
id 160673: Borland's __property keyword was not handled correctly.
+
id 160824: UML Collab diagram did't show fields in user defined groups.
+
id 160931: Made configure script use /bin/bash as it apparently didn't
+ work with /bin/sh anyway.
+
id 161048: Latex output for directories could contain unescaped
+ underscores when SHOW_DIRECTORIES was set to YES.
+
id 161167: /// \file was not parsed properly.
+
id 161247: If CALL_GRAPH was enabled references were shown even if
+ REFERENCES_RELATION was set to NO.
+
id 161320: An incorrect line number was given for inherited comments
+ which have an error.
+
id 161321: Fixed problem parsing '"' in PHP code.
+
id 161394: Fixed problem with inheritance tree showing the same
+ undocumented base class multiple times.
+
id 161556: Fixed two parse bugs related to member specializations.
+
id 162149: URLs with commas were not handled properly.
+
id 162271: Doxygen was confused by read-only Qt properties.
+
id 162434: void function gave rise to warnings when WARN_NO_PARAMDOC
+ was set to YES.
+
id 162446: Fixed parse problem in code.l, causing it to get off track.
+
id 162517: A @ref command was not parsed properly if the argument
+ between quotes was found on the next line.
+
Dot would not run if doxygen was installed in a path which contained
+ spaces (Mac OS X).
+
Functions inside inline methods were not always cross-referenced anymore.
+
Latex output was broken in some cases where anonymous structs were used.
+
Fixed bug in doxywizard: if the wizard was used some settings
+ were not remembered.
+
Using \n inside an ALIAS definition caused line numbers for
+ source browsing to become misaligned.
+
For included-by graphs files with the same name all had the same
+ node label.
+
The following typedef was not parsed properly:
+ typedef function<void (int,int)> ptr_t;
+
Fixed problems with the WARN_NO_PARAMDOC command.
+
Struct members of the form "enum a b;" where not properly parsed.
+
Fixed a couple of memory leaks.
+
Fixed crash problem on Windows related to the new string implementation.
+
Fixed problem with Visual Studio project files (in wintools).
+
Included patch by Antoine Tandin to fix problem with GROUP_GRAPHS
+ in combination with CREATE_SUBDIRS = YES.
+
Included patch by Mikhail Glushenkov to make HTML look prettier.
+
Parsing operator[]s was broken.
+
Referencing constants via #CONST did not work anymore.
+
Fixed problem handing multiline ALIASES containing @defgroup and
+ @ingroup.
+
Fixed problem handling \n in ALIASES.
+
@section's in non-page documentation blocks did not work.
+
Referencing a group label in a @see section, now shows the group's
+ title i.s.o. the label name (this was already done for @ref).
+
+
+\endhtmlonly
+\section log_1_3 1.3 Series
+\htmlonly
+
+
Doxygen Release 1.3.9.1
+
Bug fixes
(ids refer to the old buzilla issue, just use it in the search box of the issue tracker)
+
+
Due to an error in the packaging script, an old version of doxywizard
+ was bundled with the Mac OS X version of doxygen.
+
Dot would not run if doxygen was installed in a path which contained
+ spaces (Mac OS X).
+
id 151012: <td> tag in HTML function documentation
+ missed 'class="md"'
+
id 154689: Wrong link to members of namespaces imported from tag
+ files when CASE_SENSE_NAMES is set to NO.
+
id 154700: anchors in pages imported via tag files could not be
+ linked to.
+
id 154755: Files were missing from Doxygen.dsp project file.
+ (thanks to Gerik Rhoden for sending an update).
+
id 154758: Fixed typedef resolution bug that could crash doxygen
+ (thanks to Gerik Rhoden for the analysis and fix).
+
id 154862: Fixed problem matching array parameters that include
+ template parameters as the array size.
+
id 154863: Fixed parsing problem in the preprocessor when an
+ expression contained the division operator.
+
+
Doxygen Release 1.3.9
+
Changes
+
+
Changed the stylesheet so font usage is more uniform and consistent.
+
Changed the colors of the doxygen logo at the bottom of a HTML page.
+ Let me know if you prefer this one or the old one.
+
Improved rendering of template functions and methods in the HTML output
+ (previously these could push the method names to the right side of the page).
+
id 149899: A macro defined in the config file (see PREDEFINED) can now
+ prevented from being undefined (via a #undef in the code) when its
+ value is assigned via the := operator (e.g. PREDEFINED = A(x):=x ).
+
id 150631: if HIDE_SCOPE_NAMES is enabled the scope of a method in a
+ call graph is only shown when the method is of a different
+ class.
+
id 151911: Stylesheet is generated earlier in the process.
+
id 152164, 152166: Improved the way search results are sorted.
+
Changed the way function pointer arguments are represented in the
+ detailed description.
+
+
New features
+
+
Directory information is now extracted by doxygen. Files are
+ automatically grouped by directory. You can use
+ the SHOW_DIRECTORIES option to enable/disable this feature.
+ Added a new command \dir which can be used to document directories.
+
Language updates for Czech, Swedish, Hungarian, Danish, Russian, Italian,
+ German, Chinese, Croatian, and Polish.
+
Applied a patch by Arend van Beelen which adds support for the
+ new features introduced in PHP5.
+
Applied a patch by Ferdinand Wess for better handling of #import
+ statements in Obj-C code.
+
Applied a patch by Adam Treat to add read and write accessors
+ of a Q_PROPERY to the XML output.
+
Arnaud Bercegeay has added platform support for the Atari MiNT OS.
+
Included patch by James Ahlborn which improves the way nested numbered
+ lists are layouted in the HTML output.
+
Included update for Hungarian translation.
+
Added patch to improve support for Debian
+ (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=263542)
+
+
Bug fixes
+
+
id 123772: putting an example inside a group caused broken links to
+ in the example list.
+
id 125737: Fixed link error when a @todo item was placed in the
+ documentation of a variable inside a anonymous union/struct.
+
id 126344: Added initial support for member template specializations.
+
id 126448: Argument passed to input filter was not always quoted.
+
id 126745: Anchors of grouped members were wrong in some cases.
+
id 128585: Lists were not always rendered properly in the man page
+ output format.
+
id 128809: Hidden files (starting with a dot) could not be included
+ with for instance \verbinclude.
+
id 130431: Prevented recursive loop in the call graph when a function
+ declares a local variable with the name of the function.
+
id 131299: \copydoc with argument A#func() didn't work.
+
id 131354: Fixed bug matching function declaration/implementation with
+ using declarations.
+
id 135448: Improved autodetection of Qt by the configure script
+ some more (thanks to Michael Henry).
+
id 135808: Removed reference to doxysearch.cpp from Doxyfile included
+ with the source distribution.
+
id 138629: Included patch to make the HTML output more conformant to
+ the XHTML standard (thanks to Jan Nijtmans).
+
id 144865: Variables in anonymous unions/structs did not appear as
+ data fields.
+
id 148547: Added a workaround for a compile problem in pngrutils.c
+ on AIX 5.2.
+
id 148671: Using "publicsomething" as a name for a base class resulted
+ in the "public" part being stripped.
+
id 148707: <a href> and <br> tags are now allowed inside html headings.
+
id 149023: Fixed template inheritance through typedefs problem.
+
id 149045: Fixed several small problems related to template handling.
+
id 149106: Fixed problem parsing enum declarations.
+
id 149164: Fixed problem in the configure script when used with perl
+ version 5.6 (thanks to a patch by Joerg Schlichenmaier)
+
id 149258: Example sources could be wrongly indented.
+
id 149263: Fixed copy/paste error in HTML_FOOTER documentation.
+
id 149698: Multiple lines of //!< comments were not handle correctly.
+
id 149711: Title of a namespace page/section was not generated.
+
id 149797: Forgot to turn off debug mode for the RTF output.
+
id 149880: Brief description of one variable could appear in the
+ the description of the next under certain circumstances.
+
id 150264: linking to Obj-C protocols did not work.
+
id 150427: "virtual" and "const" were not nicely formatted when
+ followed by unary scope resolution operator (e.g "const ::A")
+
id 150629: Enabling OPTIMIZE_OUTPUT_JAVA did not help for call graphs.
+
id 151457: Fixed compile problem on Solaris 4.2.
+
id 151452: Bug in LaTeX output for anonymous structs/unions whose
+ members have brief descriptions.
+
id 151246: Parse error when using in-body comment blocks.
+
id 152005: Objective-C string constants appear in output with @"@"
+
id 152182: Spaces mess up type in Objective C functions.
+
id 152184: label-less parameters in Objective C functions were not
+ parsed properly.
+
id 152383: Objective-C categories showed methods twice.
+
id 152572: \brief inside an argument description caused a bogus warning.
+
id 152681: Call-graphs were generated inside a table environment in
+ the HTML output.
+
#include after a @file comment made the #include appear on the same line
+ when DETAILED_AT_TOP was enabled.
+
User specified images & stylesheets did not work with
+ CREATE_SUBDIR.
+
Nested using directives did not work for C#.
+
Grouped classes did not always appear in the modules section of the
+ navigation tree.
+
"internal" classes appeared in the XML output.
+
friend classes did no longer appear in the output even when
+ HIDE_FRIEND_COMPOUNDS was set to NO.
+
Fixing bug in code parser when encountering arrays and some other
+ related problems.
+
Array initializers did not show up regardless of the
+ MAX_INITIALIZER_LINES setting.
+
Improved support for classes with the same name but in different
+ namespaces in combination with "using" of namespaces.
+
+
Doxygen Release 1.3.8
+
Changes
+
+
Rewrote doxywizard. It should be more easy to use and has much better
+ support for running doxygen from the GUI. Feedback is welcomed!
+
Members of a namespace are now also added to the file in which they
+ appear (thanks to Mike Morearty for the patch).
+
Included patch by Mikhail Glushenkov that fixed item 5 on the todo list
+ (titles of html pages are now internationalized).
+
A macro defined in the config file can now be undefined in the
+ source code via a #undef.
+
Optimized calling of dot using multiple -T flags at a couple of places
+ (note that doxygen now requires graphviz >=1.9)
+
+
New features
+
+
New option FILTER_PATTERNS which can be used to specify multiple
+ input filters, and let doxygen select the right one based on
+ matching the source file name with a specified pattern (thanks to
+ a patch by James Ahlborn).
+
id 142939: New commands \protocol and \category which can be used
+ to document Objective-C protocols and categories in the same way
+ the \class command does for classes.
+
Included patch that removes some cosmetic annoyances in the man page
+ output (thanks to Chris Croughton).
+
Added internationalization support for Afrikaans and
+ Lithanian. Included language updates for Dutch,
+ Czech, Italian, Brazilian, Croatian, Japanese, Norwegian and
+ Russian.
+
+
Bug fixes
+
+
id 120810: \code fragment has links first time, but then no more.
+
id 124214: Fixed parse problems with single quoted strings in PHP.
+
id 135508: Using a namespace in C# did not get interpreted correctly.
+
id 137842: Using @todo/@bug/... and disabling the generation of the
+ list, still caused a colon to appear in the output.
+
id 138075: A comment block containing a \code block with C style
+ comments was not properly parsed.
+
id 138307: Fixed parse problems with single quoted strings in PHP.
+
id 138394: C style comments placed on the same line after a macro
+ definition appeared as part of the macro's value.
+
id 138429: Fixed language setting for HTML output when using
+ traditional chinese.
+
id 140259: Using @dotfile in a comment block could cause broken @refs
+ to sections defined after the @dotfile command.
+
id 141915: Fixed a couple of problems with the RTF output.
+
id 141918: Fixed a couple of problems with the RTF output.
+
id 142118: Fixed compile issue with the mingw compiler.
+
id 142288: Doxywizard crashed when started (fix was applied to version
+ 1.3.7 as well).
+
id 142741: Links in todo/bug/... lists were broken if CREATE_SUBDIRS
+ was enabled. Same was true for the built-in diagrams.
+
id 142925: Autolinking to a member of a class from a page inside a
+ namespace did not work.
+
id 142940: Due to a misplaced break statement a examples included
+ with \example was shown twice in the output.
+
id 143107: Made some cosmetic changes to the HTML and HTML output,
+ (thanks to David Baird for the patch).
+
id 143340: Fixed autolink problem for names ending with a colon or
+ a <br> tag.
+
id 143412: Fixed problem parsing Objective C class methods.
+
id 143413: Fixed problem parsing Objective C root classes.
+
id 143593: Under certain conditions the XML output could contain a
+ reference to a non-existing class.
+
id 145295: Variable of a templated type was mistaken for a function.
+
id 145583: Fixed problems handing formulas and graphs defined using
+ @dot in combination with CREATE_SUBDIRS = YES.
+
id 147253: Quotes in a class initializer could confuse the source
+ code parser.
+
id 147425: The class diagram did not show the relation to the template
+ specialization when inheritance was done via one or more typedefs.
+
Fixed case where template classes "used" via typedefs were not
+ properly shown in the collaboration diagram.
+
Variables explicitly declared external were reported being defined
+ at the place they were actually declared external.
+
Fixed bug in the XML schema for enum values with initializers.
+
Documentation of a member group did not appear in the XML output
+ (thanks to Chris Croughton for the patch).
+
Command line build process failed under windows if the name of the
+ directory in which sources are located contained spaces (thanks to
+ Mikhail Glushenkov for the patch).
+
Improved cross-referencing to methods of a template instance variables
+ (thanks to a patch by Jeff Apple).
+
Included a patch by Enrico Schnepel that puts the same output files
+ in the same subdirectories (with SUBDIRS = YES) for subsequent runs
+ (on slightly modified input files) and also renumbers the dot nodes
+ so they are only regenerated when actually changed.
+
Unsupported HTML end tags and unsupported begin tags with attributes
+ are now copied to the output as is.
+
+
+
Doxygen Release 1.3.7
+
Changes
+
+
The \param command now has an optional input and/or output attribute.
+ The syntax for an input & output parameter is for example:
+ \param[in,out] name Description.
+
+
New features
+
+
Added new option CREATE_SUBDIRS which when enabled makes doxygen
+ distribute the generated output evenly over 100 subdirectories.
+
Added support for Qt's properties (i.e. Q_PROPERTY) which can be
+ documented by putting a documentation block in front of the macro or
+ by using a comment block with the new \property command.
+
Added new commands \manonly and \endmanonly to enter man page specific
+ text and commands in the generated man pages (thanks to Carsten Stiborg).
+
Included new python based translation report script, which now
+ replaces the old perl based version (thanks to Petr Prikryl).
+
Improved parser to also support parsing of Objective-C implementation
+ files.
+
Added new config option EXTRACT_LOCAL_METHODS which can be used for
+ Objective-C code to extract methods definition in the implementation
+ section that are not present in the interface.
+
Added new config option STRIP_FROM_INC_PATH which allows to
+ specify a list of paths that, if matched, will be striped from the
+ #include statement in the generated documentation of a class.
+
Added new command \includelineno with works as \include except it will
+ add line numbers to the code (thanks to Giancarlo Niccolai for the patch).
+
Added BeOS support, thanks to a patch by Mark Hellegers.
+
Included update for the French translation, thanks to Jacques Bouchard.
+
+
Bug fixes
+
+
id 133388: Fixed problem parsing '"' inside multi-line C++ style
+ comment blocks
+
id 134265: Doxygen now outputs unrecognized HTML tags instead of
+ removing them (thanks to Éric Malenfant for the patch).
+
id 134869: When HIDE_SCOPE_NAMES was set to NO, the methods of an
+ Objective-C class did not have the right name.
+
id 134876: Fixed problem with forward declaration of a protocol in
+ Objective-C.
+
id 134647: using a parameter name ending with "const" was not
+ accepted by doxygen.
+
id 134639: Fixed parse problem in the preprocessor.
+
id 137398: add \% command to the documentation.
+
id 137730: Fixed problem for man pages with non numeric extension
+ (thanks to a patch by Joe Schirmer).
+
id 138652: Line numbers for defines with /* */ comments were wrong
+ (thanks to J. Noack for the patch).
+
id 139591: Fixed problem parsing nested template arguments with
+ comments.
+
id 140012: a variable could appear in a group twice if it was
+ declared externally somewhere.
+
id 140540: Fixed problem parsing "@" in the source code parser.
+
id 141133: Spaces were stripped in default arguments such as
+ f(const char *t=" \t")
+
id 141364: Members of an anonymous nested structure had no brief
+ comment and no link to the detailed description if available.
+
Fixed recursive lockup problem that was caused by two or more
+ namespaces using each other (i.e. a cycle in the usage relation).
+
Included patch by Erik Zeek to allow the explicit setting of QTDIR to
+ override the "search for Qt" algorithm in the configure script.
+
Parsing of tag files produced for Objective-C code now works.
+
Objective-C: Improved hyperlinking of source code, handling of
+ prototypes and the list of all members of a class now also contains the
+ members of class categories.
+
Third argument of @class was ignored (thanks to Mahadevan for the patch).
+
Fixed problem with collaboration diagrams for template instances
+ whose template parameter list contained qualified scope names
+ (e.g A<B::C>).
+
Removed bogus warning about undefined documented function for
+ classes that were made friends of other classes.
+
Spaces where not preserved for @code block inside a @example block.
+
Undocumented dependency relations where not shown in some cases
+ even though HIDE_UNDOC_RELATIONS was set to NO.
+
Fixed two bugs that resulted in invalid HTML output.
+
For Unix the default FILE_PATTERNS did not include upper case versions
+ such as .C and .H
+
Fixed incorrect character encoding problem for the generated tag files.
+
Fixed problem that could lead to memory corruption/crashes.
+
Included a patch by Bernhard Rosenk to fix a compile problem with
+ doxywizard using a recent Qt version.
+
Call-graphs were missing if a file name ended with ".C" and K&R
+ function definitions were used.
+
Improved source code generation performance when there are many
+ typedefs with the same name in different scopes.
+
Linking to a section resulted in the wrong label in the XML output.
+
+
Doxygen Release 1.3.6
+
Changes
+
+
For projects with many nested classes, namespaces, typedefs and using
+ statements, doxygen could become very slow. This should
+ now be improved significantly.
+
Made some cosmetic changes to the HTML output (thanks to Ben Harper).
+
STRIP_FROM_PATH now by default strips the path from which doxygen is
+ run (i.e. $(PWD)/ on Unix)
+
+
New features
+
+
Make a start with adding support for Objective-C. Doxygen can now
+ parse Objective-C header files (including protocols and categories).
+ Thanks to Apple for donating hardware.
+
Include a patch by Hauke Duden which adds preliminary support for
+ the D programming language (see http://www.digitalmars.com/d).
+
C Comments inside #defines are now preserved. This could be useful
+ to document boilerplate code.
+
Included patch to replace tabs by the proper amount of spaced inside
+ code fragments in the XML output (thanks to Alexandr for the patch).
+
Included Gerik Rhoden's fixes for the .dsp/.dsw files found in the
+ wintools dir.
+
Examples (documented via \example) are now included in the XML output.
+
New option SORT_BRIEF_DOCS which when enabled will list the
+ declaration section of the documentation (with the brief descriptions)
+ in alpabetical order, instead of declaration order (thanks to
+ Akos Kiss for the patch).
+
Included patch for Hungarian translation (thanks to Akos Kiss)
+ and for the Serbian language. Added support for mixed Korean/english
+ (thanks to Jihoon Chung).
+ The translator report script was also updated (thanks to Petr Prikryl)
+
+
Bug fixes
+
+
id 120070: Included workaround for build problems with RedHat 9
+ (thanks to Tim van Holder)
+
id 128054: Fixed rare case where doxygen crashed due to a recursive
+ lock-up.
+
id 131404: Fixed problem cross-referencing PHP member functions.
+
id 131434: Clarified confusing warning message.
+
id 131446: Extra attributes of a <a href> tag (like target) are now
+ copied to the HTML output.
+
id 132535: Fixed problem with generating man page output for groups
+ with brief descriptions.
+
id 132772: Fixed compile problems on HP-UX using acc compiler
+ (thanks to Clyde Gerber).
+
id 133300: Fixed missing cross-reference to "c" in constructs such as
+ "a[b].c"
+
id 133482: Fixed spurious cross-references to member function which
+ was shadowed by a parameter name.
+
id 133986: Attributes of the <img> tag where not written to the
+ HTML output.
+
id 134123: Fixed problem with multiple arrows between nodes
+ in the graphical class hierarchy.
+
\ref in dot graphs was not working correctly (thanks to
+ Eoin MacDonell for the fix).
+
Grouped pages in the XML output did have the same id as their group.
+
Fixed problem handling environment variables inside a
+ quoted string in the config file (e.g. "$(HOME)/My Path/").
+
Using "\mainpage notitle" caused the "notitle" to appear in the treeview.
+
Page references where wrong in the latex output when PDF_HYPERLINKS
+ was disabled.
+
Words inside a hyperlink could be hyperlinked, resulting in invalid
+ HTML.
+
Fixed parse error handling function pointer arguments in K&R-style code.
+
Doxygen could crash when it failed to enter a directory.
+
+
Doxygen Release 1.3.5
+
Changes
+
+
Doxygen now only regenerates a dot image if it has actually changed!
+ This could significantly reduce the time of any run after the first.
+ Checking if a graph has changed is done by computing an md5 hash for
+ the graph description which is then stored along with the
+ image generated by dot and compared in subsequent runs.
+
Improved the way lists look in the man pages (thanks to Silke Reimer).
+
+
New features
+
+
Added support for parsing K&R style function prototypes.
+ Please try it on your favourite legacy C project and report any
+ problems.
+
Included languages updates for Traditional Chinese,
+ Danish, German, Korian translation.
+
id 120464: doxygen's XML output does now assign a prot="..."
+ attribute for nested classes (thanks to Paul Ross for the patch).
+
Added new configuration switch XML_PROGRAMLISTING to enable/disable
+ generating source code listings as part of the XML output (thanks to
+ Paul Ross for the patch).
+
Added new config option ABBREVIATE_BRIEF which makes the
+ abbration process of brief descriptions configurable and language
+ independent (thanks to Jake Colman for the patch).
+
The alphabetical class list now comes with a quick index
+ (thanks to Marcin Zukowski for the patch).
+
An XSLT script "combine.xslt" is now generated in the XML output
+ directory. It can be used to combine XML files into one big file.
+
The source code is now indexed and thus searchable when the source
+ browser and search engine options are enabled.
+
Added "dist" target to the makefile (thanks to Erik Zeek)
+
+
Bug fixes
+
+
id 119778, 123385: Documentation in the body of a function could not be
+ combined with a detailed description before the declaration.
+
id 122852: References to grouped functions were wrong in certain cases.
+
id 123031: problem matching f(const char) with f(const char cc).
+
id 123140: typedef'ed enums whose tag name was the same as the typedef
+ name did not appear in a group.
+
id 123145: Under certain circumstances an assertion failed message
+ was produced.
+
id 123206: Fixed problem in qtools when opening files in text mode.
+
id 123322: The search page did not honor DISABLE_INDEX.
+
id 123420: Functions with a brief description caused bugus </em> tags
+ in the HTML output.
+
id 124114: typo in the generated PHP search script could cause errors
+ in the search result page.
+
id 124187: Setting EXTRACT_LOCAL_CLASSES to NO, could result in a
+ broken "More..." link in documented local classes inside a namespace.
+
id 124214: Fixed problem in search indexer, which could crash doxygen
+ (thanks to Daniel Koebbing for the patch).
+
id 124545: fixed a number of problems in the generated search script.
+
id 124815: Fixed compile problem in filedef.h for aCC on HP-UX.
+
id 125369: Fixed inconsistency of showing files in the tree view
+ (thanks to a patch by Alexey Neyman).
+
id 125424: Font size was not reset after @endcode or verbatim block
+ in the latex output.
+
id 125654: Character encoding was not correct for html help treeview
+ (thanks to Sawada Kentaro for the fix).
+
id 125367: Fixed problem with producing links in case files with
+ the same name (but in different directories).
+
id 126968: Fixed problem parsing verbatim string literals such as
+ @"\" in C#.
+
id 127094: Fixed character encoding problem in the XML output.
+
id 131364: Fixed parse problem when initializing a function pointer.
+
Links to classes, files, namespaces and groups in the search results
+ were broken (missing file extension).
+
Doxygen logo is now transparent even when viewed with IE.
+
Using a character with ascii code 0x06 in a comment block could crash
+ doxygen if the preprocessor was enabled.
+
Fixed problem handling conditional commands and grouping (thanks to
+ Silke Reimer for the patch).
+
Fixed problem using \dotfile in combination with RTF output
+ (thanks to Vegard Larsen).
+
Fixed several problems related to the new md5 hash feature.
+
Undocumented functions referenced in a comment block were linked to
+ anyway.
+
Fixed a number of typos in the config file documentation (thanks to
+ Boaz Kelmer)
+
Workaround for toupper() bug for Russian (thanks to cav@cryptopro.ru)
+
Fixed problem that HTML image maps ended up in the RTF output.
+
Fixed bug in code fragment parser that could cause memory corruption
+ in certain cases.
+
Fixed problem matching definition and declation of functions, which
+ could cause bogus warnings for functions with the same name but in
+ different namespaces.
+
Using "/// @file" to document a file quickly was not possible, while
+ "/** @file */" did work. Now both work.
+
+
Doxygen Release 1.3.4
+
Changes
+
+
Rewrote the search engine. The doxysearch CGI binary has been
+ replaced by a PHP script which is generated by doxygen. Also the
+ index file is now generated by doxygen and requires way less memory.
+ This should make it much easier to use the search facility.
+ All that is required is a web server with PHP 4.1 or higher.
+ Please report any problems you find.
+
Changed the way class names are resolved. This can result in
+ a significant speedup for projects that use namespaces and typedefs
+ (including Java projects). Thanks to Edmund Green for the performance
+ analysis and ideas.
+
+
New features
+
+
Added support for the ø, and Ø character entities.
+
Added language updates for Korean, Swedish, German, Russian,
+ Croatian, Brazilian, Spanish, Japanese, French and Italian.
+
Added new \relatesalso command, which can be used to put a file member
+ also in the documentation of a class (thanks to Ian Scott for the patch).
+
Added support for pseudo IDL files with the .pidl extension
+ (as used in TAO). Thanks to Éric Malenfant for the patch.
+
Added new commands \dot ... \enddot to include a dot graph in a
+ comment block (thanks to a patch by Eoin MacDonell). Inside the
+ URL attribute of a node you can use \ref to make links to documented
+ items. See the documentation of the \dot command for an example.
+
+
Bug fixes
+
+
Fixed recursive lock-up problem handling "using" of namespaces.
+
Doxygen incorrectly translated \\htmlonly and \\latexonly to
+ \verbatim in the output.
+
Using the -d Time option caused:
+ message.cpp<100>: Internal error: Requested unknown option QUIET
+ at the end of the run.
+
Static members appeared in the todo list even if EXTRACT_STATIC was
+ set to NO.
+
Fixed problem matching f(const int *i) with f(const int * const i),
+
Fixed case where a variable could get by assigned a bogus "()" in the
+ heading of the detailed description.
+
Fixed problem handling extern"C" (without the space).
+
\ref file.c ended up as file::c in the output.
+
Special characters in generated texts were not always translated into
+ proper LaTeX commands in the LaTeX output.
+
Fixed problem parsing "const ::Class *func()" and "static ::Class *func()".
+ The keywords were seen as namespaces.
+ due to the use of more than one const keyword.
+
Fixed two bugs in compound.xsd schema, thanks to Ademar Aguiar.
+
Fixed some more problems linking typedefs in combination with namespaces.
+
id 120637: Fixed parse problem handing character literals such
+ as '"' inside the initializer list of a constructor.
+
Fixed file handle leak when INLINE_SOURCES was set to YES.
+
Fixed problem handling Java packages (Internal inconsistency warnings).
+
Fixed problem preprocessing @verbatim blocks containing C comments.
+
Fixed problem handling preprocessor statement just before a function
+ body when ENABLE_PREPROCESSING was set to NO.
+
id 122457: INLINE_SOURCES feature was broken (only showed the
+ first line)
+
+
Doxygen Release 1.3.3
+
New features
+
+
Included update for VC++ 6.0 project/workspace files (can be found
+ in wintools). Thanks to Simon Goodwin & Johan Eriksson.
+
Added new debug flag "-d Time" which will report the elapsed time
+ for each message printed, and will also show the total running time
+ along with the time spend on external tools such as dot.
+ Note: If you have a project that takes doxygen a long time to process,
+ please send me the output so I get a global idea where to optimize.
+
New option SUBGROUPING which can be set to NO to have \nosubgrouping
+ for all classes (thanks to Torben Koch for the patch).
+
Added XML schemas for validating the XML output, and to help
+ writing XSLT files.
+ The generated index.xml now has a complete schema, the compounds
+ not yet. Thanks go to Alexej Humbach for doing a lot of the work.
+ Note that a couple of "id" attributes in the XML output have been
+ changed to "refid", and section tags are now nested.
+
Included language updates for Traditional Chinese and Japanese.
+
+
Bug fixes
+
+
Doxygen crashed when parsing a comment block with only a \mainpage
+ command.
+
Fixed problem matching namespace members.
+
Fixed scanner push back error for ALIASES with long definitions.
+
Default main page was wrong if DISABLE_INDEX was set to YES.
+
Argument of type array were not properly parsed in Java, causing
+ problems when documenting them with @param.
+
\image with "" as caption didn't work.
+
If the last \section in a comment block was empty, doxygen produced
+ warnings.
+
Call graphs were only generated if REFERENCES_RELATION was set to YES.
+
Link could be wrong if a member's name was found in multiple namespaces.
+
A function returning "struct s *" caused a bogus recursion relation
+ in the call graph.
+
Improved handling backslashes for the perlmodgen (thanks to Miguel
+ Lobo).
+
Page anchors did not appear in the tag files.
+
\ref's to grouped pages were not generated correctly.
+
Fixed parse bug when putting \image inside a HTML table.
+
Made the documentation parser more tollerant to spaces inside HTML
+ commands.
+
Doxygen now issues a warning if invalid commands are used inside
+ a single-line C++ comment (such a @see and @image).
+
Fixed parse problem for the semicolon in the following:
+ Class A : a(";") {};
+
Doxygen now resolves links to classes imported in a namespace
+ via using declarations or directives.
+
Doxygen now issues a warning when @code, @verbatim, @htmlonly, or
+ @latexonly are not properly terminated.
+
Fixed "Internal inconsistency" messages when parsing Java packages.
+
A member did not appear in its group if it was first declared without
+ documentation and then defined with documentation (with \ingroup).
+
The <caption> tag was put at the end of a <table>
+ in the HTML output, while it should be the first tag
+ after <table>. This is now corrected.
+
In the LaTeX output, the page references were missing for the links
+ in the documentation when PDF_HYPERLINK was set to NO.
+
+
Doxygen Release 1.3.2
+
Changes
+
+
The main page (\mainpage) can now be completely customized, by using
+ no project name or using "notitle" as argument for \mainpage.
+
Changed the look of the quick index on top of each page using CSS.
+
+
New features
+
+
Added new command \callgraph which can be put in the documentation
+ of a function to get a callgraph. In the config file a
+ new option CALL_GRAPH is added which can be set to YES to enable
+ callgraphs for all functions (note that this will slow doxygen down!).
+
Added new boolean config option UML_LOOK which can be enabled to give
+ class and collaboration diagrams a more UML conformant look
+ (thanks to Dominick Paniscotti).
+
Added new commands \xmlonly and \endxmlonly which can be paired
+ to form blocks of text that only appear in the XML output.
+
Added sub-indices for the lists of all class/file/namespace members
+ to filter out just of type of members.
+
Included language update for Czech, Italian, Portuguese, and French.
+
+
Bug fixes
+
+
Doxygen could crash if a namespace and a class with the same
+ name were found in the global scope.
+
Fixed problem handling multiple \xrefitem's in one comment block
+ (could crash doxygen).
+
Added check for recursive group relations to prevent lock-up/crash while
+ generating the group index.
+
Doxygen could crash if a group contained only undocumented members.
+
Putting a #include inside a function body would cause the
+ line numbering to be off.
+
Fixed cause of a failed assertion when @retval or @param was the last
+ text in a comment block.
+
Improved scope detection for code parser when dealing with examples
+ (imported via \example).
+
Fixed preprocessor bug handling "#if!defined(VALUE)" (note the lack of
+ a space).
+
Added warning if @subsection, @subsubsection or @paragraph were found
+ in the page context.
+
French translation was broken (probably due to a dos2unix accident).
+
Underscores inside a <pre> section did not appear correctly in the
+ LaTeX output.
+
Fixed several typos in the generated config file (thanks to a patch
+ by Justin Zaglio)
+
Formula's inside comments directly in front or behind function arguments
+ did not work.
+
Fixed code parser problem when //<! was nested in a normal C comment.
+
Included a number of fixes for typos found and corrected by Justin
+ Zaglio.
+
For #define values that were constant strings, doxygen tried to link
+ the text inside the string when shown in the documentation.
+
The source-browse parser did not link to class variables used in
+ inline function if the variables were defined before the functions.
+
The first paragraph after a <h1> or similar heading was not put in
+ a paragraph context in the generated output.
+
+
+
Doxygen Release 1.3.1
+
Changes
+
+
A multi-line C++ comment block now has to be aligned in order to
+ make doxygen treat it is one block. As a result the
+ following is treated as one comment block:
+
+ int var; //!< variable.
+ //! more info about var.
+ int anotherVar;
+
+ while this results in two comment blocks:
+
+ int var; //!< variable.
+ //! info about second variable
+ int anotherVar;
+
+ Hopefully this will give more intuitive results. Tabs are replaced
+ by spaces according to the value of TAB_SIZE in the config file.
+
Modified the CSS to change the look of the HTML output, and made the
+ stylesheet a little more powerful (thanks to a patch by Ben Harper).
+
Formula alignment in the HTML output is now controlled via CSS
+ (thanks to a patch by Vassilii Khachaturov).
+
The option TEMPLATE_RELATIONS now defaults to NO.
+
+
New features
+
+
Added new command \xrefitem which enables user-defined commands
+ that act like \todo and \bug, i.e. produces a related page containing
+ all items, which is cross-referenced with the documentation blocks
+ where the items are placed.
+
Added support for package scope in Java.
+
Added alt attributes to user included images in the HTML output
+ (thanks to patch by Vassilii Khachaturov)
+
Added XML_OUTPUT option to allow a user defined location for
+ generating XML output (thanks to a patch by Emmanuel Guerin).
+
Included language updates for French, German, Czech, Italian, and
+ Brazilian.
+
+
Bug fixes
+
+
Occurrences of <span> and <div> tags in the documentation
+ were not properly handled.
+
Fixed problem parsing the following pattern
+ "namespace { .... } typedef ....", which could crash doxygen if
+ IGNORE_PREFIX was used.
+
The project name is now put in front of each title of a HTML page
+ for easier bookmarking.
+
In C# enums, classes and structs without (optional) ; were not
+ properly parsed.
+
Though still not perfect, I Improved the way namespace aliasing is
+ handled. It should now work inside other namespaces and for
+ computing class and usage relations.
+
Fixed problem documenting typedefs of function pointers using
+ \typedef.
+
Links to groups imported via tag files were broken.
+
Fixed problem resolving class relations for nested classes within
+ namespaces.
+
Static members can now be documentated in a separate file using \fn
+ as long as they have unique names. If the names are not unique the
+ documentation must be located in the same file (as was required before).
+
In arguments and return types of the form NA::A were not linked if NA
+ was a namespace alias to a documentation namespace and A a documented
+ class name.
+
Matching a declaration f(NA::C c) with f(C c) did not work if NA was
+ a namespace alias.
+
Undocumented classes had wrong links in the treeview frame.
+
Pages whose title contained < or >'s were not written correctly to the
+ tag file.
+
Fixed preprocessor bug: "a##b" was not correctly expanded if
+ argument "a" or "b" was empty.
+
Putting \todo and friends inside the documentation of enum values
+ did not result in an entry on the todo list page.
+
Fixed some problems compiling with versions of flex >2.5.4, but
+ also added a #error if these are used, since they produce incompatible
+ parsers (a bug report has been filed, but no feedback was received).
+
Characters >=128 are now written as &#nnn; to the XML output.
+ (thanks to a patch by Michiel Ouwehand).
+
The table row backgroup color of the "all member" list was hard-coded
+ in the HTML output. This is now controlled by the stylesheet.
+
Fixed problem handling omission of the optional arguments of
+ the \image command.
+
Enabling HIDE_IN_BODY_DOCS did not work properly if C++-style special
+ comments were used inside the body of a fucntion.
+
Fixed problem cross-referencing variables used as a
+ guard (i.e. if (var) ...)
+
Setting ENUM_VALUES_PER_LINE to 0 caused a division by 0 error.
+
Autolinking did not work for members that were grouped and imported
+ via tag files.
+
The divide symbol "/" did not appear in the output for array/define
+ initializers
+
Fixed paring problem parsing "operator <b>new</b>"
+ in the documentation.
+
Fixed problem with resolving template relations (as reported by
+ Kris Thielemans).
+
Members in the todo list were not shown correctly (with dot separators)
+ if OPTIMIZE_OUTPUT_JAVA was set to YES.
+
Fixed problem handing "class A { public: A::f(); };" which is accepted
+ as valid C++ by a number of compilers.
+
Putting a /* inside a C-comment without matching */ caused the
+ preprocessor to ignore the rest of the file.
+
Improved the way typedefs are resolved.
+
Fixed parse problem for the following PHP code: $color='#FFFFFF'
+
Using @dontinclude could cause broken LaTeX output.
+
Links to examples (using \example) were broken.
+
Class members appeared twice in the index of the latex output.
+
Fixed problem putting \if..\else..\endif around a pair of \defgroup's
+
+
+
Doxygen Release 1.3
+
Changes
+
+
Increased internal buffer size from 16K to 256K for a number of
+ scanners, so the "input buffer overflow, can't enlarge buffer because
+ scanner uses REJECT" error should occur less easily.
+
Style commands like \e, \a or \c will now be terminated when
+ one of the characters in the following string is
+ found: ".,()[]:;?", example: "a point (consisting of @a x and @a y)"
+
Setting OPTIMIZE_OUTPUT_JAVA to YES, will automatically set INLINE_INFO
+ to NO.
+
Quotes strings (like "\0" or "%H.%d.%Y") are now considered to be
+ words (hence the \ and % do not have to be escaped).
+
+
New features
+
+
Added new configuration option USE_WINDOWS_ENCODING which can be
+ used to select windows specific character encodings for some languages.
+ (thanks to Piotr Kaminski).
+
Added new configuration option LATEX_HIDE_INDICES which can be
+ used to suppress the various indices that are normally generated in
+ the LaTeX output (thanks to Ken Yarnall for the patch).
+
Added new option MAX_DOT_GRAPH_DEPTH to set the maximum distance
+ from a root node after which the class or include graph will be
+ truncated. Setting this to a low value should considerably reduce the
+ time doxygen needs on large projects.
+
Included updates for French, Korean, Polish, Croatian, and
+ Danish translations.
+
Access to title of user defined user defined sections is now
+ possible from the doxmlparser.
+
<div> and <span> commands can now by used in the
+ documentation. Their effect is limited to the HTML output though
+ (thanks to Frank Schimmel for the patch)
+
Added inline, virtual, explicit and mutable attributes to XML output
+ (thanks to patch by Michiel Ouwehand).
+
+
Bug fixes
+
+
Fixed out-of-memory bug for files containing using directives and
+ including themselves (indirectly).
+
Doxygen could crash if two \todo-like commands appeared on the
+ same line.
+
Non-inline cast operator was not properly parsed.
+
Fixed preprocessor problem with parsing /*//*/
+
URL's in the docs using <a href=""> caused a nested link.
+
"using namespace A::B;" confused the code parser.
+
Interface keyword was not recognised in C# (thanks to Onorio Catenacci
+ for the patch).
+
Line counting was incorrect when parsing multi-line formulas.
+
\section's in a \mainpage are now correctly numbered in the LaTeX
+ output (nesting level was one too deep).
+
\ref to lower case names did not work
+ (thanks to Herman ten Brug for the patch)
+
escaped quotes (") were not preserved in the config file when it was
+ updated (thanks to Herman ten Brug for the patch).
+
PHP related fixes contributed by Vaclav Dvorak:
+
+
#-style comment handling,
+
adds (problematic) support for define() constants,
+
adds ".phtml" as a supported file extension for PHP code
+ (not very common, but still...),
+
fixes handling of code like "include 'file.inc';" (was parsed
+ as a variable definition),
+
removes the variable insidePHPCode (was not needed),
+
fixes spaces in function argument lists (the '$' was the problem).
+
+
Functions documented with \fn did not get transferred to declaration or
+ definition (depending on where the comment block was put).
+
If a function definition was documented and grouped the declaration
+ was not even if the same documentation block was used for it.
+
Fixed bug in code parser that could crash doxygen under
+ certain conditions.
+
Fixed some spacing problems in the LaTeX output
+ (thanks to patches by Roberto Bagnara).
+
Mail address containing the '+' character were not properly parsed
+ (thanks to Jon Parise for the patch).
+
Fixed duplicate/wrong id's of grouped members in the XML output.
+
Docparser reported wrong error if unknown command was found inside
+ \c (or similar command).
+
Preprocessor got confused when parsing a special comment as
+ part of a #define and containing a ' or ".
+
subgroups defined with @defgroup could be reordered if
+ @addtogroup was used.
+
Projects name was not shown as the root of the treeview anymore.
+
Links to pages imported via tag files were broken in the treeview
+ frame.
+
removed leading and trailing whitespace within a \code ... \endcode
+ block.
+
Constant class variables with constructor were parsed as functions.
+
Autolinks of the form class#member were not shown as class::member or
+ class.member in the documentation.
+
Fixed problem parsing things like echo('!$tar' . '"'); (PHP).
+
Fixed problem distinguishing f(__true_type) and f(__false_type)
+
Fixed lack of translation of some latin2 characters in the latex output
+ (thanks to Aleksander Kupiec for the patch).
+
Group members appeared in the treeview or html help index regardless
+ if they were documented.
+
The treeview page was not rendered with the right character set (it was
+ always English).
+
Explicit template instantations appeared as a variable in the output.
+
Java instance and static initializer blocks are now correctly parsed
+ and can be documented.
+
Fixed bug in the LATEX_HIDE_INDICES option.
+
Fixed bug parsing simple lists (last word or token could get repeated).
+
\section titles did not appear in the RTF output.
+
Tables were not correctly rendered in the RTF output.
+
Verbatim fragments were not properly rendered in the RTF output.
+
Fixed some cases where collaboration relations were not visible due
+ to typedefs.
+
Fixed some compiler warnings that occurred with more recent versions
+ of gcc.
+
Auto-links to files were shown with as file::c instead of file.c.
+
@ref namespace::class was not parsed correctly.
+
Undocumented enums could appear in the declaration part of the output
+ even though HIDE_UNDOC_MEMBERS was set to YES.
+
\anchor tags now appear in the tagfiles as <docanchor> again.
+
Hyperlinks in the LaTeX were broken in some cases.
+
Fixed case where a global variable was not linked from within a function
+ body.
+
Include dependencies graph was shown at the place where the
+ "included by" graph should have appeared.
+
A // comment following by a //! comment was not handled properly by
+ the source browser.
+
If the definition of nested class was found before the definition of the
+ outer class, its name was displayed without scope.
+
If a parameter of a prototype was documented (with a separate
+ documentation block) and the name of the parameter in the definition
+ was different, the wrong name could be shown in the documentation.
+
Fixed bug handling \line, \skipline, and \until
+
+
Doxygen Release 1.3-rc3
+
Changes
+
+
Rewrote the implementation of the tree view feature
+ (see GENERATE_TREEVIEW). The new implementation should be much faster,
+ but does require a browser that supports JavaScript, DHTML, and CSS.
+ Please report any problems you find.
+
Changed the way dot is launched under Linux/Unix (vfork i.s.o. fork)
+ so less memory is required (thanks to a patch by Thorsten Behrens).
+
Changed "Methods" to "Member Functions" in the output (thanks to patch
+ by Tom Emerson).
+
STRIP_FROM_PATH now ignores the exact casing of characters, which
+ makes things simpler on Windows.
+
Style modifiers such as <b>, <em> and <pre> are now
+ capable of spanning multiple paragraphs.
+
Made some improvements to the documentation, including a diagram
+ showing the information flow between the doxygen and various other
+ tools (see the getting started section).
+
+
New features
+
+
Added support for comment blocks generated by
+ Rational Rose's ANSI C++ code generator (thanks to a patch by
+ Martin Beaudoin).
+
Included language update for the Serbian and Japanese.
+
Included patch by Ryunosuke Satoh to reduce size of the executable when
+ building for Cygwin.
+
Tables in the docs were ended with a bogus row in the LaTeX output.
+
A \link to a member variable that is grouped using \defgroup can
+ now be done from another member without specifying the full scope.
+
+
Bug fixes
+
+
@addindex now works on the whole line instead of a single word (as
+ was already suggested in the docs).
+
source code line in the XML output didn't escape special characters
+ like & anymore.
+
Fixed small bug in german translation (thanks to Jens Seidel).
+
e-mail addresses with multiple dots got truncated when linked.
+
Attributes of html commands with value "" where not properly parsed
+ causing the image in the legend page not to appear.
+
Fixed excessive memory usage in the "Building member list" phase while
+ using todo/test/bug items (thanks to Gerik Rhoden).
+
Fixed parsing problem in PHP. Doxygen was expecting classes to end with
+ a semicolon (thanks to Jaime Uriel Torres for the patch).
+
Using <dt> with also adding a <dd> caused a parse error while it is
+ legal HTML.
+
The identifier "package" in C/C++ code was wrongly interpreted as
+ a Java keyword.
+
\todo item at the end of a comment block caused "unexpected character"
+ error while generating the XML output.
+
\ref did not work when the argument was a file name.
+
\ref and \link are now allowed inside a <td>..</td> section.
+
Argument matching routine was not able to distinguish between
+ f(long n) and f(long long n).
+
Classes were listed in the alphabetical index with full scope.
+
\copydoc did not work recursively for members.
+
Fixed a number of small memory leaks (I used ccmalloc to detect them).
+
The HTML command <SUP> was not parsed correctly if it was prefixed
+ with an identifier (i.e. blah<SUP>).
+
HTML tags were not properly parsed if there was a linebreak after
+ the tag name.
+
The \~id command was not working properly. The section was always
+ generated regardless of the OUTPUT_LANGUAGE setting.
+
id attribute was missing from the sect tag in the XML output.
+
Links to files or file members could be wrong if SHORT_NAMES was set
+ to YES and the file was imported via a tag file.
+
Attribute lists inside an enum in an IDL file were not properly parsed.
+
Fixed problem in code browser that prevented linking to global
+ variables defined in other files.
+
When putting a "using namespace X" in a header file doxygen did not
+ recognise this in files that included the header file.
+
Fixed bug in parsing sections without title.
+
doxytag did not include anchor in the search index. Thanks to
+ Joerg Schlichenmaier for the fix.
+
Using an auto-list as an argument of @todo and friends did not work.
+
A class with all members in a section grouped could result in broken
+ LaTeX output (empty CompactItemize list).
+
+
Doxygen Release 1.3-rc2
+
New features
+
+
Added support for importing members via using declarations.
+
Anchors and sections (and references to them) are now supported in
+ all comment blocks, not just \page blocks.
+
Dot files imported via @dotfile now produce images maps in the
+ HTML output. Use the URL node attribute in the dot file to make a link
+ (thanks to Marco Dalla Gasperina for the patch).
+
New config option WARN_IF_DOC_ERROR which allows documentation problems
+ to be shown, while other warnings (such as warnings about
+ undocumented members) can be hidden (thanks to Miguel for the patch).
+
Included language update for German and Italian.
+
Added support for &tm; (trademark) and ® (registered).
+
Added "static" attribute to methods in the XML output to ease parsing.
+
+
Bug fixes
+
+
A <pre> .. </pre> section with included blank lines
+ causes warning about missing </pre> marker.
+
"typedef enum { a };" confused doxygen's parser, while most compilers
+ seem to accept it without warnings.
+
\deprecated item alone in a comment block caused a crash.
+
Putting @todo (and similar commands) inside a function body
+ did not result in correct cross-references with the todo list.
+
Java interfaces were not detected as such.
+
Fixed some localization problems in the XML output.
+
Fixed problem handling multiple \par commands (headings were wrong).
+
Fixed array out of bounds assert that was triggered while parsing.
+
Links to pages were not properly resolved in hyperlinked PDF.
+
Using a \name command without //@{ .. //@} scoping could cause
+ a segmentation fault.
+
Including images with @dotfile caused problems in the LaTeX output.
+
Local variables and parameters now properly hide globals with the
+ same name in the source browser, reducing wrong references.
+
Verbatim blocks in the documentation could break the RTF output.
+
RCS/CVS tags did not appear in the output.
+
@note section result in section with type "bug" in the XML output.
+
Dot graphs were truncated too quickly in some cases.
+
Files with a .php4 extension are now recognised as PHP files.
+
Source browser could get out of sync causing wrong cross references.
+
Text after @} could end up in another documentation block.
+
Putting a style command such as \c or \b at the end of a line, before
+ a auto list item, caused the list item to be ignored.
+
Autolinks to files did not work anymore.
+
@copydoc of a target without documentation could cause a crash.
+
+
Doxygen Release 1.3-rc1
+
Changes
+
+
New validating parser for documentation blocks that replaces the
+ old parser (which was actually only a lexical scanner).
+
The new documentation parser will now pass attributes of html tags
+ to the html output. Example:
+
Doxywizard will now run doxygen from the directory where the
+ config file is found, so paths can be made relative
+ in the config file. This will now also work if the config file's
+ path or name contains spaces.
+
Doxygen style comment blocks found in the body of functions are
+ now appended to the function's documentation block.
+
+
New features
+
+
Added rudimentary support for C#. Parsing should work,
+ but not all attributes are handled correctly.
+
Included perl module generator by Miguel Lobo. Setting
+ GENERATE_PERLMOD to YES in the config file will produce
+ a perl module in the output dir.
+
Included language updates for French, Czech, and Russian.
+
Included a number of enhancements to the xml parser (thanks to
+ a patch by Tree).
+
Locally documentated parameters now appear in the XML output
+ (thanks to Cormac Twomey for the patch).
+
The preprocessor now inserts line control commands where appropriate.
+
+
Bug fixes
+
+
Aliased \if .. \endif commands around a \brief section were not handled
+ properly.
+
Warnings for undocumentation members were not generated anymore
+ in certain cases.
+
A member of a group linked with \ref showed the group's title
+ as link text instead of the member's name.
+
Using aliased commands whose definition contained \n's caused the
+ code browser to put definition links at the wrong line numbers.
+
Todo items inside related pages appeared in tag files, causing warnings
+ about duplicated labels.
+
Included a patch by Ryunosuke Satoh that fixes some issues when
+ compiling in a cygwin environment.
+
The presence of using declarations could result bogus entries in the
+ class hierarchy.
+
Links in the hyperlinked sources could point to the wrong global
+ function depending on the order in which files were parsed.
+
Using \retval in combination with parameters that are documented
+ on the spot, caused bogus warnings about undocumented parameters.
+
id attributes of references/referencedby relations are wrong in
+ the XML output.
+
Links could wrongly point to a class in an outer scope instead of a
+ typedef with the same name in the inner scope.
+
A reference in the code to a member of a derived class that is defined
+ in a base class is now resolved properly even if both classes are
+ imported via tag files.
+
Language codes were wrong in the html help output for some languages
+ (thanks to Erwin Hoffmann for the patch).
+
Fixed case where function was detected as a variable.
+
if HIDE_UNDOC_CLASSES is set YES, doxygen will not complain about
+ undocumented classes.
+
Included RTF output fixes by Gorden Machel.
+
Global variables of complex types were not properly cross-referenced.
+
Fixed argument matching bug for nested template classes;
+ matching "f(A::B<T>::C c)" with
+ "f(C c)" within context A::B<T>
+
Fixed preprocessor bug handling nested comment blocks
+ (the */ of the inner block was eaten).
+
+
+\endhtmlonly
+\section log_1_2 1.2 Series
+\htmlonly
+
+
Doxygen Release 1.2.18
+
Changes
+
+
Running doxygen with the "-d Validate" option will activate a
+ new documentation parser. The parser will produce output for
+ Html, Latex, XML and RTF output (man page output still needs to be done).
+ For XML output this new parser will always be used.
+ Please try it and let me know if you see unexpected errors or
+ invalid output. This parser will replace the old one in the
+ next release.
+
+ The main advantages of the new parser are that it actually checks the
+ syntax of the documentation blocks and will produce valid output
+ by design.
+
+ For debugging purposes, adding "-d PrintTree" along
+ with "-d Validate" will let doxygen dump the abstract syntax tree of
+ each documentation block to the output in a pretty printed way
+ (this reflects the structure built-up by the parser).
+
A number of new XML tags are introduced along with the new parser,
+ these include: umlaut, acute, grave, circ, tilde, szlig, cedil, ring
+ nonbreakablespace, toclist, tocitem, xrefsect, xrefdescription,
+ and xreftitle.
+
Changed the way code fragments are represented in XML to simplify
+ validation.
+
Changed the way \page, \section, and \subsection are handled in LaTeX
+ (and RTF).
+
+
+ \page now results in a section in latex (of the related pages chapter)
+
+ \section is now a subsection within that page section (used to be a
+ section, so at the same level as \page)
+
+ \subsection is now a subsubsection within a subsection (used to be a
+ subsection).
+
+
Included a number of patches by Kristian Ede:
+
+
Undocumented private friend classes no longer cause warnings
+
Undocumented private classes no longer cause warnings
+
Undocumented members are now hidden if they are
+ default constuctors, destructors or reimplemented.
+
+
Pages introduced via \page are now context aware. This means that
+ if you put them inside a class or namespace, names do not have
+ to be prefixed with a full scope to create a link in the documentation.
+
Boolean values in doxywizard can no longer be toggled by clicking
+ anywhere on the line on which they appear, but only by clicking on
+ the name or checkbox.
+
+
New features
+
+
@deprecated is now treated as @todo, @test, and @bug, which means
+ that a list of all deprecated items is generated.
+ Thanks to Angela Marshall for the patch.
+
Enum value documentation was added to the XML output.
+
Files ending with ".inc" are now recognised as PHP files
+ (thanks to Marcus Ahlfors).
+
Included updated documentation for language translators
+ (thanks to Petr Prikryl).
+
Included language updates for Czech, Slovak, Brazillan, Croatian,
+ Portuguese, Russian, Polish, Japanese and Serbian.
+ Include language support for Catalan (thanks to Albert Mora)
+
Included .dsp update by Simon Goodwin (already needs to be updated
+ again :-( )
+
Added new configuration options XML_DTD and XML_SCHEMA to set the
+ DTD or Schema used in the XML output.
+
Include new commands \subsubsection and \paragraph which add two
+ section level below \section and \subsection (thanks to
+ Dirk Reiners for the patch)
+
+
Bug fixes
+
+
Fixed lock-up bug in RTF output when using tables.
+
The internal comment conversion routine was confused by lines of the
+ form //*************
+
Fixed recursive lockup for template arguments of the form
+ "typename A = ::A"
+
Description part of @name did not (always) appear in the resulting
+ documentation.
+
Alphabetic index showed package scope using "::" even when
+ OPTIMIZE_OUTPUT_JAVA was set to YES. The same happened for class and
+ namespace HTML page titles.
+
New versions of dot (graphviz >=1.8.8) broke clickable images
+ for versions of doxygen <=1.2.17. Now fixed for newer doxygen
+ releases in a backwards compatible way thanks to a patch by John Ellson.
+
Fixed compile problem for 64 bit machines (pointer to int cast).
+
Included patch to build Doxygen 1.2.17 on AIX 4.3 by Russ Allbery
+
\if ... \else ... \endif blocks now also work in //!< style comments.
+
Fixed a couple of memory leaks in the code parser.
+
Fixed case where member function was put in the member variable
+ section (thanks to Mahadevan R)
+
Fixed bug causing link targets not to appear in the output.
+
Setting BRIEF_MEMBER_DESC set to NO for a member that did not have
+ a detailed description while setting ALWAYS_DETAILED to YES caused the
+ documentation not to appear in the output at all.
+
Fixed todo list linking problems for hyperlinked pdf output and
+ grouped pages.
+
Putting a function declaration and its definition in the same group
+ could lead to wrong links using @ref.
+
Undocumented but grouped members did not appear in the output.
+
The declaration and definition of overloaded global functions
+ was not always properly matched, causing functions not to appear
+ in the documentation.
+
Nested C-comments were confusing the preprocessor, causing it to
+ incorrectly skip comment blocks.
+
An empty line was not always being recognized as a paragraph break
+ (thanks to Stephen Pope for the fix).
+
An aliased \endif in a skipped section was not handled properly.
+
+
Doxygen Release 1.2.17
+
Changes
+
+
XML: The index of the XML output now has @refid instead of @id's,
+ and includes a "kind" attribute for the compounds and members for easier
+ filtering.
+
Improved dot image generation speed for large projects by changing
+ the way the best-fitting graph is computed (thanks to Philip Bergen
+ for the suggestion).
+
@name now automatically starts a member group section (previously
+ a @{ command was needed). The member group continues until a new @name
+ command is found or until the end of a compound is reached. @{ ... @}
+ commands can still be used for backward compatibility or to end a member
+ group before the end of a compound. @defgroup and friends still require
+ explicit @{ ... @} blocks.
+
Changed the way \todo, \bug, and \test are handled internally.
+ This should have no visible effect on the outside, but makes it much
+ easier to add similar commands and also saves a bit of memory on average.
+
+
New features
+
+
Added initial support for parsing PHP code (thanks to a patch by
+ Jan Borsodi). For a PHP file the following additional commands are
+ available:
+
+
\private
makes the current item private
+
\protected
makes the current item protected
+
\public
makes the current item public
+
\privatesection
changes to private section(same as private: in C++)
+
\protectedsection
changes to protected section(same as protected: in C++)
+
\publicsection
changes to public section(same as public: in C++)
+
\static
changes the current item to static
+
\pure
changes the current item to pure virtual
+
+
New command @copydoc that can be used to copy a documentation block
+ of some item and paste it in another documentation block.
+
i18n: Added support for the Serbian language (thanks to Dejan Milosavljevic).
+ Included a new language option Japanese-en for combined Japanese
+ and english.
+
Included patch for dealing with variable argument macros in @param
+ (thanks to Alfred Heggestad).
+
Added new option MULTILINE_CPP_IS_BRIEF to make doxygen treat
+ a multi-line brief comment block as a brief description. Set this to
+ YES to obtain the behaviour of version 1.2.15 and earlier. Default as
+ of version 1.2.16 is to treat multi-line C++ comment block as a
+ detailed description.
+
New option CHM_FILE to set the .chm file (and path) to use for
+ Html Help output.
+
New option HHC_LOCATION to set the location of the Html Help compiler.
+ If given doxygen will automatically run the compiler to create the
+ .chm file.
+
Included .dsp & .dsw files to build doxygen from DevStudio in the
+ wintools dir. Thanks to Simon Goodwin for providing these.
+
Included new command $year that can be use in header and footer
+ files to produce the current year (thanks to Michael Beck for the patch).
+
+
Bug fixes
+
+
Fixed lock-up bug when writing RTF output with verbatim sections.
+
The tree view showed entries in C++ style even if OPTIMIZE_OUTPUT_JAVA
+ was set to YES.
+
Documentation blocks for function arguments in a documented header
+ file did not show up if the function definition was parsed first.
+
Inheritance relations in Java where not always correctly resolved if
+ the base class was explicitly scoped.
+
Fixed some non-standard conformance issues in the HTML output (thanks to
+ John Levon for the patch).
+
Usage relations for variables whose type was a qualified typedef were
+ not properly resolved.
Comment blocks ending with an empty /// comment line were not
+ properly handled by the comment conversion code.
+
@relates is no longer needed for a friend function documented in
+ the source file (thanks to Johan Eriksson for the fix).
+
Doxygen could link include files to non-existing source files, if they
+ pointed to external files but were also found in the include path.
+
"make install_docs" was broken.
+
Fixed parse bug for conversion operators of the form "operator ::X*()"
+
XML output fixes:
+
+
derivedcompoundref was not terminated properly.
+
innerpage and innergroup were closed twice.
+
Removed auto-generated section titles from the detailed descriptions
+ in the XML output.
+
para tags in simple section in the XML output were not properly matched
+
+
PDF output fixes:
+
+
Fixed pdflatex reruns in the Makefile when USE_PDFLATEX was YES. It
+ should now run the proper amount of times (thanks to Simon Goodwin
+ for the fix).
+
Links to items in the bug list were broken for the PDF output.
+
Fixed bug in PDF output that resulted in links to non-existing
+ source pages.
+
Fixed bug in URL parsing that caused invalid PDF output for the
+ doxygen manual.
+
Doxygen logo did not appear in the PDF manual.
+
+
RTF output fixes/improvements by Janet Swisher,
+ Gordon Machel & Martin Vuille:
+
+
Included fix for loading RTF style-sheets
+
reference list and title were merged
+
First word of company name was lost.
+
Main page title was not substituted.
+
There were two pages numbered "i" in the document.
+
Added a heading to the table of contents page.
+
Depending on the order in which things are
+ documented, there were extra, empty paragraphs
+ thrown in.
+
Added a number of debugging comments
+ and changed some existing ones to make it easier
+ to relate the comment in the RTF to the name of
+ the method that generates it.
+
+
operator|() caused invalid entries in the latex index.
+
Fixed bug parsing URLs with curly braces in documentation blocks.
+
Html help output now uses the correct language code if non english
+ language is selected.
+
Fixed bug in generate makefile for latex output (thanks to Petr
+ Prikryl)
+
Fixed source browser bug: a comment just before a function body
+ confused the parser.
+
Fixed problem handling function typedefs.
+
\endif appeared in output when used via ALIASES in a brief description.
+
Included heuristic to distiguish between a variable definition
+ with initialization via a constructor and a function prototype
+ (e.g. "Test var(initVal);", v.s. "Test func(SomeType);").
+
Fixed lock-up problem when to @brief were put after each other in a
+ comment block.
+
Images for include dependency graphs were unclickable.
+
Members in source fragments and examples were not linked to their
+ member group documentation if available.
+
For initializers of the form ' ', the space was removed in the output.
+
\dotfile generated files did not get generated correctly because dot
+ could not find the specified font.
+
Third argument of \class did not always work.
+
The pattern argument for the @skip, @skipline, @until and @line commands
+ now extents until the end of the line (as suggested by the documentation)
+ instead of just the first word.
+
+
+
Doxygen Release 1.2.16
+
Changes
+
+
Verbatim and preformatted sections
+ are now represented with a new "preformatted" tag in the XML output.
+
The HIDE_UNDOC_RELATIONS option is no longer depending on
+ HAVE_DOT being set to YES.
+
A dot is only added after a brief description if it starts
+ with a capital (thanks to Ondrej Jombik for the patch).
+
Doxygen now treats blocks of C++ comments such as
+ //! Detailed
+ //! Description
+ as a detailed description
+ (such blocks used to be treated as brief descriptions!).
+ A single line C++ comments still represents a brief description,
+ for multiline brief description an explicit @brief can be used.
+ See the updated documentation for more examples.
+
XML: Added class name to inheritance relations that are written to the
+ XML output.
+
Images included with \dotfile are now centered in the latex output
+ (thanks to Nils Strom for the patch).
+
+
New features
+
+
Included language update for Slovene.
+
CGI_URL now allows URLs that start with cgi: (for KDE KIO slave support)
+
Made include dependency graphs available from the XML parser API.
+
Added patch to support multi-byte RTF output (thanks to Sato Ryunosuke)
+
Gary Lee added language support for Chinese-Traditional.
+
Thanks to a patch by Loïc the RTF output now supports (non-nested)
+ tables.
+
Added compilation support for cygwin (win32-g++ target).
+ Thanks to Ryunosuke Sato for the patch.
+
Added new option DETAILS_AT_TOP to put the detailed documentation
+ at the top of a documentation page where normally only the brief
+ descriptions would be shown (based on a patch by Elliott Hughes).
+
XML: Added member template parameters to the XML output.
+
+
Bug fixes
+
+
Improved portability of the png code: updated zlib to version 1.1.4,
+ replaced K&R style code by ansi code, fixed compile problem with
+ pngenc.cpp on some platforms.
+
Fixed recursive lock-up problem that could occur for certain cases
+ in which recursive template inheritance was used.
+
The cross-package inheritance relations were broken for Java code.
+ I fixed this by treating Java import statement as C++ using statements.
+ Please report any problems that remain.
+
Alias commands put in separate parameter documentation blocks
+ were not resolved.
+
The documentation for arguments, documented with a seperate
+ documentation block, was not consistently shown in source and header
+ files, depending on the order of the input files.
+
The characters '(', ')', '$', ''', and ';' were not recognised
+ as part of an URL.
+
Grouped enum values could not share the same documentation block
+ even when DISTRIBUTE_GROUP_DOC is YES.
+
The end caption tag was missing a closing > in the XML output.
+
Fixed bug with table captions in XML output.
+
Removed warning when documenting include guard-like defines.
+
The \package command was broken. Fixed cases where :: appeared in
+ the output when OPTIMIZE_OUTPUT_JAVA was set to YES.
+
Fixed scoping problem using \class for documenting nested classes inside
+ template classes.
+
Fixed invalid output bug when putting "-" items inside @arg or @li
+ lists.
+
Fixed problem referencing functions using {@link ... } with explicit
+ argument lists.
+
Fixed bug when parsing "typedef struct{}TypeName;" (i.e. without
+ a space before the struct).
+
Fixed argument matching bug for global functions having undocumented
+ classes, imported via using declarations, as their parameter type.
+
Fixed bug in conditional section handling for cases like:
+ @if guard text @else more text @endif
+
The html help files did not honour the HTML_FILE_EXTENSION settings.
+
Removed bogus warning when using @param for function-type
+ parameters.
+
Include statements in the source browser output now link to the
+ right include file in case of ambiguities.
+
The include lines in the file documentation didn't link to files that
+ were imported from tag files.
+
The include dependency graph did not show include files if they
+ were directly or indirectly imported from tag files. Existing tag
+ files need to be regenerated to make use of this.
+
XML: The refid of members in listofallmembers section in the XML output
+ was wrong. The ulink tag did not end properly in the XML output.
+ The Value of ambiguityscope in the XML output was not properly escaped.
+ LaTeX page reference texts appeared in the XML output.
+
Included language update for Brazilian.
+
Doxygen now treats "const int *" and "int const *" (i.e. with
+ reordered const) as equivalent types.
+
The preprocessor now avoids recursive includes, which helps
+ to parse files that do not have proper #ifndef-#define .. #endif guards.
+
Matching arguments with types "unsigned long int" and
+ "unsigned long int blah" removed argument name.
+ Same for "int" and "const int blah".
+
Fixed LaTeX output bug that occurs when using \dotfile in combination
+ with USE_PDFLATEX = YES (thanks to Nils Strom for the patch).
+
Links to static functions in the documentation, now point to the
+ local file in case of ambiguities.
+
Comments of the form /*/**/ confused the source browser.
+
Fixed bug parsing "class C : public ::C {};" inside a namespace.
+
Fixed bug in tag file reader when parsing includes.
+
The include dependencies were wrong if an include file name was part of
+ the input but the #include specifically asked for another file
+ not part of the input but with the same name.
+
+
Doxygen Release 1.2.15
+
Changes
+
+
On request of Richard Stallman and others I replaced all
+ generated GIF images with PNG images.
+ See http://www.burnallgifs.org
+ for the motivation.
+
The Documentation of function definitions and declarations are now
+ always merged. References/Referenced by relations are now equal
+ for function declarations and definitions.
+
When @retval commands are used to document parameters, doxygen will
+ no longer produce a warning message for that parameter. @retval can
+ still be used to document non parameters such as the return values
+ of a function.
+
#define A(x) x /**< a define */
+ will document a define, while
+
#define A(x) /** an argument */ x
+ will document the argument of the define
+
Links in the documentation to const/volatile members are now
+ possible by explicitly specifying "f() const" or "f() volatile"
+ in case a non-const/volatile "f()" also exists.
+
Doxygen now warns about undocumented compounds (thanks to Itai Frenkel
+ for the patch).
+
+
New features
+
+
Included language update for Russian and Romanian translations.
+
EPS images included with "\image latex" are automatically converted
+ to pdf's when USE_PDFLATEX is set to YES.
+
Added two new commands: LATEX_CMD_NAME and MAKEINDEX_CMD_NAME to
+ set the name of the latex and makeindex tools to be used for latex
+ output (thanks to Konno Akihisa for the patch).
+
Improved support for Java. Packages are now treated like
+ C++ namespaces and there is a new option OPTIMIZE_OUTPUT_JAVA
+ that, when enabled, provides more Java-oriented output. Please
+ report any Java-related problems that remain.
+
Extended XML parser API (see addon/doxmlparser/include/doxmlintf.h)
+ with full access to documentation blocks.
+ Made inheritance/collaboration diagrams accessible via the
+ XML parser API (see addon/doxmlparser/include/doxmlintf.h).
+ Reorganised the internals of the XML parser so the API does
+ not require destructors. Made the parser more portable (it should
+ compile with gcc and M$ visual C++ now).
+
+
Bug fixes
+
+
Using "@param x,y,z" resulted bogus warnings about undocumented
+ parameters.
+
"doxygen -w latex header.tex doxygen.sty Doxyfile" caused a segmentation
+ fault (thanks to Aric Cyr for the patch).
+
Fixed argument matching problem that occurred in some rare cases
+ that involved "using" of namespaces.
+
Using /**< Brief.\ more brief. Details. */ with ENABLE_JAVADOC = YES,
+ now removes the slash just like it did with /**...*/ style comments.
+
Using an ordered, html-style list inside a @param command
+ resulted in invalid output if list item contained blank lines.
+
STRIP_FROM_PATH now also works with Windows style paths
+ (e.g. C:\MyPath\)
+
A module can now appear more than once in the module tree
+ (thanks to Itai Frenkel for the patch).
+
In some cases the tree view showed leaf elements as non-leafs.
+
Fixed a number of cases where illegal characters could end up in
+ the XML output.
+
If a function in a base class was (re)implemented by serveral classes
+ only one of them appeared in the "(re)implemented in" list.
+
graph_legend.gif was hardcoded in translator_*.h files.
+ Note to translators: this has affected all translator files, so please
+ update your local translator file!
+
In some cases a grouped member within a namespace did not appear
+ in the group's documentation.
+
Namespace members were not properly cross-referenced with in the
+ source browser output.
+
Using directives inside anonymous namespaces had no effect.
+
Fixed bug in the preprocessor when parsing '"' as the argument to
+ a function macro.
+
The argument of commands like \c did not produce a link to
+ external documentation if possible, while links to local
+ documentation were generated.
+
+
+
Doxygen Release 1.2.14
+
Changes
+
+
Split up the XML output into an index (index.xml) and one page per
+ compound. This allows for faster processing and less memory consumption,
+ when using DOM style parsers.
+
Include files are now shown in the class documentation if
+ and only if SHOW_INCLUDE_FILES is YES.
+
Doxygen-style C comments inside macro definitions are now preserved
+ in the output. Example:
+
When deriving from pure virtual members or IDL interfaces, doxygen will
+ now put an "implements/implemented in" list in the documentation instead
+ of "reimplements/reimplemented by".
+
Doxygen now filters out duplicate input files.
+
+
New features
+
+
Added a very simple metrics utility
+ (see addon/doxmlparser/examples/metrics) which can compute some
+ figures based on the XML output generated by doxygen.
+
Added autodetection for Darwin (MacOSX) to the configure script.
+
Added option EXCLUDE_SYMLINKS.
+ The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+ directories that are symbolic links (a Unix filesystem feature) are
+ excluded.
+
Added option EXTERNAL_GROUPS.
+ If the EXTERNAL_GROUPS tag is set to YES all external groups
+ will be listed in the modules index. If set to NO, only the
+ current project's groups will be listed. (thanks to Darren Oldag
+ for the patch).
+
Included update for translator.pl (thanks to Petr Prikryl)
+
updated .spec file (thanks to Emilio Riva).
+
Included patch by Jochen Hanff to make the index headings configurable
+ via style-sheets.
+
If a comment block contains at least one @param command, doxygen now
+ produces warnings if not all parameters of a function are documented or
+ if the names of the parameters do not match the argumentlist.
+ (Please report any false alarms).
+
Added new command \~language_id to create sections that
+ are outputted for the language >language_id> only:
+ Example:
+
+ /** \~czech Cesky komentar \~english English comment text \~dutch
+ Nederlands commentaar \~ Common comment for all languages,
+ this tag switches off the language filter...
+ */
+
+ Which of the language specific fragments is outputed depends
+ on the setting of OUTPUT_LANGUAGE (Thanks to Milan Rusek for the patch).
+
Added build support for Cygwin (thanks to Ryunosuke Sato).
+
Added new option HTML_FILE_EXTENSION to allow different file extension
+ for the html file outputted by doxygen (like .php). Thanks to
+ Rob Olsthoorn for the patch.
+
Added option DOT_IMAGE_FORMAT that can be used to set the image
+ format of images generated by dot (possible formats: gif, png, jpg).
+
In the documentation of class, namespace, file and group items a
+ list of groups to which the item belongs is put between brackets ([..])
+ under the title (HTML only).
+
Added "list of all members" and template parameter lists for
+ classes to the XML output.
+
Included language updates for Chinese, Czech, French, Italian,
+ Brazilian, Japanese, Russian and German.
+
+
Bug fixes
+
+
The start of a comment (/*) embedded in a page or example block
+ caused parse problems.
+
operator%= member caused latex error when in pdf hyperlink mode.
+
fixed parse problem for global function typedefs like "typedef int f()"
+
Qt slots weren't included in the reference/referenced by relations
+ (thanks to Gordon Machel for the patch).
+
Fixed parse problem that occurred when the <SUP> tag was used in
+ a brief description.
+
Private members sometimes showed up in the all member list even though
+ EXTRACT_PRIVATE was NO.
+
Doxygen now exits with code 0 if there is no error (previously it
+ returned 1 in some cases were no error occurred).
+
Calling "doxygen -g -" now writes the config file to stdout
+ (this already worked when using "doxygen -g-").
+
Undocumented classes exposed when setting EXTRACT_ALL to YES, could
+ result in broken links in the class hierarchy.
+
Exception specifications in Java were not parsed properly.
+
If INLINE_INHERITED_MEMB was YES, pure vitual members of base classes
+ reachable via multiple paths appeared more than once in the
+ documentation.
+
Removed potential recursive loop when computing reimplements relations
+ for template instances.
+
Fixed argument matching problem when matching "a<int *>" with
+ a<int * >"
+
Links in the documentation of grouped namespace members were not
+ pointing to the group but to the namespace.
+
For template specializations the title of an html page contained
+ plain < and > characters.
+
When computing source references undocumented members could introduce
+ non-existing relations for documented members in front of it.
+
Fixed escaping problem in Makefile generated for latex output.
+
File names were sometimes prefixed for undocumented classes in the
+ class hierarchy.
+
When computing the list of all members, interface members are now
+ treated as virtual.
+
Protected members of a base class did not appear as such in the list of
+ all members of derived classes.
+
Fixed problem with ending itemized lists before paragraph commands
+ (like @see), which resulted in invalid output.
+
The version number in config files generated by doxywizard was
+ always 0.1.
+
Having a macro function and typedef with the same name confused doxygen.
+
An \endverbatim command at the end of a \name section was not parsed.
+
Stars (*) at the start of a line in /**< ... */ style comments
+ after a parameter were included in the result.
+
Putting a C-style comment in a @code block was not handled properly.
+
+
+
Doxygen Release 1.2.13.1
+
Bug fixes
+
+
Links to grouped members were broken.
+
The Module index was broken in HTML and subgroups were still not
+ sorted properly.
+
Selecting a non-default language was not possible in doxywizard
+ (thanks to Heiko Schaefer for the patch).
+
Ending a dash-style list was not possible by starting a new paragraph
+ anymore.
+
Fixed "exceptions" tag mismatch in the XML output.
+
extern "C" blocks inside source files incorrectly included header files
+ during preprocessing.
+
Compiling doxywizard on Unix with Qt-3.x didn't work because
+ libdoxycfg was linked with qtools from Qt-2.x.
+
Fixed potential memory corruption when generation the graphical class
+ hierarchy (nodes were deleted more than once).
+
+
New features
+
+
Added support for multi-method declarations such as: int func1(),func2();
+
Included updated DTD for validating the XML output produced by doxygen,
+ thanks to Angelo Hulshout.
+
Included support for Japanese-ShiftJIS translation,
+ thanks to Ryunosuke Sato.
+
Included update for Slovak translator, thanks to Stanislav Kudlac.
+
Thanks to a patch by Pascal Flammant tables in the documentation
+ can now have captions using <caption> ... </caption>
+ within a table definition.
+
A dash-style list can now be ended without ending the paragraph.
+ See the list-section of the documentation for an example.
+
+
Doxygen Release 1.2.13
+
Changes
+
+
Changed the way @internal works. The "For internal use only" message,
+ now appears (along with the internal documentation)
+ if and only if INTERNAL_DOCS = YES.
+
Subgroups are no longer sorted but presented in declaration order.
+
Members inside todo/test/bug lists are now shown with qualified
+ names again.
+
Reorganized the XML parser. It is now structured as a library,
+ a header file, and a test application. See addon/doxmlparser for
+ details.
+
+
New features
+
+
Included languages updates for French, Portuguese,
+ Korean, Italian, Dutch, Slovene, Brazil, German and Portuguese.
+ Thanks to Harry Kalogirou doxygen now has support for output in
+ the Greek language.
+
Included patch by Adam Doppelt to make doxysearch work
+ better with windows/IIS.
+
Added more info to the XML output: include dependencies,
+ member groups, re-implement relations, const/volatile specifiers,
+ namespace info, related pages, inner classes, inner namespaces.
+
Added some logic to deal with member specializations.
+ They should now be added as additional members to a class instead of
+ being ignored and producing a warning.
+
Thanks to a patch by Bruce Korb, author of
+ autogen, doxygen now
+ has output support for producing autogen definition files. To do
+ this set GENERATE_AUTOGEN_DEF to YES in the config file.
+
The \relates command can now be used for macros as well.
+
New option INLINE_INHERITED_MEMB which can be enabled to include all
+ directly and indirectly inherited members inside the
+ documentation of a class as if they were real members (inspired by
+ a patch sent by Ted Drain).
+
Added option EXTRACT_LOCAL_CLASSES which can be used to show
+ or hide classes and structs defined in source files.
+
Thanks to an install script written by David Greig, the windows
+ version of doxygen now comes with a windows installer based on
+ Jordan Russell's
+ Inno Setup.
+
+
+
Bug fixes
+
+
Fixed potential bogus link in the references list.
+
Auto detection of idl files was broken.
+
Preprocessor did not parse hexadecimal values correctly.
+
Fixed XML output problem (too many </highlight> tags).
+
Documentation for nested classes inside other nested classes was
+ not written to the output.
+
Fixed problem mixing paragraph commands (like \param) with
+ hyphen-style lists.
+
Modules index in LaTeX was broken.
+
STRIP_FROM_PATH now works for windows-style paths as well.
+ Thanks to Joël Conraud for the patch.
+
For functions whose declaration was grouped and whose definition
+ contained a documentation block with a todo/test/bug item,
+ the item did not appear in the todo/test/bug list.
+
In the source browser output, the "=" in variable initializers
+ was outputted as "==".
+
Fixed parse problem for typedefs of function pointers returning
+ a template instance.
+
Fixed bug in parsing method pointer function arguments of the
+ form "void f(void (C::*m)() const)"
+
+
Doxygen Release 1.2.12
+
Changes
+
+
Improved the speed of the todo/test/bug list generation considerably.
+
The list of all members of a class now shows for each member,
+ the class in which the member is defined.
+
Rewrote a substantial part of the source code parser
+ (SOURCE_BROWSER = YES). It is now more context sensitive and
+ will generate more/better links.
+
+
+
New features
+
+
Added new option HIDE_UNDOC_RELATIONS that can be set to NO to show
+ any undocumented inheritance and usage relations from the various
+ graphs.
+
Included updates for translations to Chinese (thanks to Charlie Liu)
+ Slovene (thanks to Matjaz Ostroversnik), Russian
+ (thanks to Alexandr Chelpanov), Czech (thanks to Petr Prikryl)
+ and Croatian (thanks to Boris Bralo). Included Petr's translator
+ adapter simplifications. Included Latin2 patch by Mitja Udovc.
+
Updated the graph legend page.
+
Added option REFERENCES_RELATION that can be enabled in combination
+ with SOURCE_BROWSER to produce for each function
+ a list of all called/used members/functions/variables.
+ The reverse list can now be enabled/disabled using the
+ new REFERENCED_BY_RELATION option.
+
Added native support for typedefs of the form
+ "typedef void (__stdcall *name)()", where __stdcall can be any
+ identifier.
+
Included a patch by Stephen Goudge which adds an option
+ EXAMPLE_RECURSIVE to indicate whether or not example files should
+ be searched recursively.
+
Included patch by Erik Zeek to add EOL translation to the
+ config file output.
+
Doxygen now searches the current directory for source files if
+ the INPUT and FILE_PATTERNS are empty (thanks to Johan Eriksson
+ for ideas and code)
+
Reference to/referenced by information is now included in the XML
+ output.
+
+
+
Bug fixes
+
+
Fixed more RTF problems and added an RTF integrity check that
+ is performed on the generated RTF output (bracket matching).
+
Refined the macro detection in the preprocessor a little, so it does
+ not match constructors and functions so easily.
+
the % prefix didn't work for scoped items.
+
References to groups defined in tag files did not work.
+
documentation for classes inside namespaces was generated multiple
+ times.
+
Running doxytag on qt-3.0.0 resulted in a tag file containing
+ non-breakable spaces.
+
The \package statement did not work correctly for packages whose name
+ contained a dot.
+
Fixed Parser bug for java initializers of the form = "\"/*";
+
Fixed LaTeX output problem when using \par followed by a (-) list.
+
Fixed LaTeX output bug in the related page index.
+
Commands inside a conditional section would still appear in the
+ result even if the section was disabled.
+
Included idea by Roberto Bagnara to make running "make" in the LaTeX
+ output autodetect how many times latex has to be run.
+
Included a patch by Johan Eriksson to fix a link problem in the
+ "list of all member" for grouped members.
+
Fixed potential crash when \todo was used without arguments.
+
The HIDE_UNDOC_CLASSES option did not work correctly for template
+ instances when set to YES.
+
\line, \skipline and \until introduced too many new lines.
+
Doxygen did not parse "struct {} typedef S;" correctly.
+
+
+
Doxygen Release 1.2.11.1
+
Changes
+
+
Included update for Slovak translation (thanks to Stanislav Kudlac)
+
+
Bug fixes
+
+
Fixed RTF output bugs.
+
When preprocessing was disabled, the input was truncated for sources
+ containing CR's (i.e. sources edited on Windows).
+
Syntax highlighting C-style comments was broken.
+
Links to members in undocumented groups were broken.
+
Deep class hierarchies caused "nested too deep" error in LaTeX output.
+
providing one documentation block for grouped, related members did
+ not work.
+
Documentation pages for documented classes nested inside
+ undocumented classes or namespaces were not generated.
+
+
Doxygen Release 1.2.11
+
Changes
+
+
Undocumented friend class declarations now link to their class
+ if documented.
+
Undocumented template classes (and other "used" types)
+ are now shown in the collaboration diagram.
+
Changed the look of the various indices (file/class/namespace/...)
+ in the HTML output.
+
+
New features
+
+
The source browser option now generates links to (documented)
+ globals and fields. Especially useful for C code.
+
Input containing CR+LF (DOS/Windows) or CR only (Mac) are now
+ automatically converted to LF.
+
New config option SKIP_FUNCTION_MACROS that when set to YES
+ (the default) makes doxygen's preprocessor automatically remove all
+ function macros that are alone on a line and do not end with a
+ semicolon. These are typically used as boiler-plate code and
+ confuse the parser if not removed.
+
Added class collaboration and inheritance diagram descriptions
+ to the XML output. Also added source browser output for each file.
+
Added a developers part to the manual, with some information on
+ how doxygen is structured internally.
+
+
Bug fixes
+
+
Using HIDE_UNDOC_MEMBERS=YES and ENUM_VALUES_PER_LINE=1 resulted in
+ blank lines in the HTML-output.
+
"friend class A::B" caused a bogus warning.
+
Fixed problem generating tag files for the Qt-3.0.0 beta releases.
+
Fixed parameter list layout problem in the HTML output.
+
Fixed some (all?) compile problems on Solaris.
+
Class hierarchy was not correct if a template class inherited from
+ a template argument, which was also a documented class.
+
When substituting template arguments, default values of
+ template arguments were not substituted themselves.
+
Fixed a number of XML output bugs (thanks to Christian Hammond).
+
Fixed bug parsing character literals.
+
Fixed bug in RTF output (bracket mismatch).
+
Inializer of the last enum value of an enum did not always appear.
+
Dots were removed from return types in Java.
+
In some cases a broken "More..." link was generated after
+ a brief class description.
+
Text of a section title containing was truncated if it contained an
+ asterix.
+
Fixed crash bug when filtering CR+LF's from input (thanks to Petr
+ Prykril).
+
Fixed generated makefile dependencies for USE_PDFLATEX = YES
+ (thanks to Marcus Holland-Moritz)
+
"\retval #VALUE" now links to VALUE if documented. The same works
+ for \exception and \throws
+ (and since the argument is a class no # is needed).
+
Sorting the alphabetical list was broken for nested classes.
+
+
Doxygen Release 1.2.10
+
New features
+
+
Relations between templates and their instances are now visualized
+ in the inheritance and collaboration graphs. Can be disabled
+ by setting TEMPLATE_RELATIONS to NO in the config file.
+
A Java package can now be documented using a comment block containing a
+ @package command or by putting a documentation block in front of a
+ package statement.
+
Added new command \dotfile which can be used to include a user
+ specified dot file as an image in the documentation. The new config
+ option DOTFILE_DIRS should be used to specify directories in which
+ doxygen should look for dot files (thanks to Samit Basu for the patch).
+
Added new build target macosx-c++ to build doxygen for Mac OS X
+ (Thanks to Jason Harris for telling me what needed to be changed).
+
Added --enable-langs option to the configure script which can be used
+ to compile-in support for a specified set of languages (thanks to
+ Vitaly Repin for the patch).
+
Included update for Russian & Italian translation.
+
Included translator.pl update received from Petr.
+
+
Bug fixes
+
+
Fix compile problem for the Irix compiler (thanks to Dirk Reiners)
+
Some generated &nsbp; entities where missing a ; in the HTML output.
+ For some browsers this resulted in argument types & names being
+ glued together.
+
The heading of parameter and return value lists was not bold anymore in
+ the HTML output.
+
"Reimplemented to/from" member links now work between template base
+ classes and their derived classes.
+
Not all documented templates class were regarded as documented
+ (unless EXTRACT_ALL was set to YES).
+
Fixed recursive lock-up problem for recursive templates of the form:
+ template<class T> class A : public A<typename T::B> {}
+
The labels in the alphabetical list were broken when namespaces were
+ used.
+
An error was given for import statements in Java sources.
+
The "list of all members" was no longer generated for nested classes.
+
Fixed bug in XML output causing mis matched <para> tags.
+
Fixed parse problem for enum initializers like: "enumVal = A<T,C>::val"
+
\hideinitializer did not hide the initializer of enum values.
+
Undocumented enums and enum values now behave correctly when
+ HIDE_UNDOC_MEMBERS is set to YES.
+
Fixed a problem with using \if inside alias definitions.
+
Fixed & changed the layout of function arguments a little.
+
Typedef struct{}Name was not parsed properly without adding more spaces.
+
Static initializer blocks were not properly parsed in Java classes.
+
Members of an unnamed namespace are now treated as static, and will
+ only appear in the documentation if EXTRACT_STATIC is set to YES.
+
Classes are sorted by their name, i.s.o. full scope again.
+
Improved argument matching for members defined within (nested)
+ namespaces.
+
+
+
Doxygen Release 1.2.9.1
+
Changes
+
+
Bug/test/todo items of members are now grouped
+ together with their compound.
+
+
New features
+
+
Added three new conditional commands: \ifnot, \else and \elseif
+ (thanks to Fabian Cenedese).
+
+
Bug fixes
+
+
The .spec file still assumed the --with-xmlgen switch was available.
+
Template instances caused double entries in the class list
+ (in LaTeX) and broke RTF output.
+
\if and \endif can now be used to make structural commands like
+ \brief, \ingroup, and \defgroup conditional.
+
The "const" in "func(B * const)" was parsed as a variable name.
+
Template specializations of the form A<N::C> where not handled
+ properly.
+
Putting \relates in a function documentation block that was
+ within a namespace, while referring to another namespace did not work.
+
Doxywizard always complained it could not read the config file.
+
Doxywizard did not properly update boolean and integer values.
+
Fixed recursive lock-up problem when recursive templates were used.
+
LaTeX output was broken when PDF_HYPERLINKS was enabled and templates
+ were used.
+
Private friends were hidden even though friends have no access control.
+
Argument matching was sensitive to spaces in some cases.
+
Bug/test/todo item in class members did not always result in the
+ generation of the list.
+
+
+
Doxygen Release 1.2.9
+
Changes
+
+
Friend class declarations are now treated as normal members.
+
Completely rewrote the way templates are handled.
+ Doxygen now (internally) computes all template instances it encounters.
+ This has the following advantages:
+
+
Template instances are now shown in the hierarchical index
+ and in all class diagrams in a uniform way.
+
The list of all members is now correct for classes deriving
+ from a template.
+
+ Since there is a lot of new code, some more testing won't hurt
+ to mature the code. If you are using templates, please try this
+ version for me and report any problems.
+
Started moving the XML output generator back into doxygen.
+ As a result the GENERATE_XML option has reappeared.
+
Function arguments names are now nicely aligned in the generated
+ HTML output. Thanks to Joe Bester for doing most of the work.
+
+
New features
+
+
Added GNU install tool auto detection to the configure script.
+
Included update for French translation (thanks to Xavier Outhier)
+ Olexij Tkatchenko has added support for the Ukrainian language.
+ Included update for Portuguese and Brazillian.
+
Added --docdir option to the configure script.
+
Using the non-commercial version of Qt for windows, it is now
+ possible to build doxywizard for windows.
+
Made preprocessor parse error messages somewhat more informative.
+
+
Bug fixes
+
+
Image references to dot images were broken in the RTF output
+ (thanks to Henning Moll for the fix).
+
Linebreaks are now done with \par instead of \line in the RTF
+ output (thanks to Henning Moll).
+
Removed bogus warnings when parsing tag files.
+
The detailed description in a @name block can now be more than
+ plain text.
+
Included fix for the tree view script for the mozilla browser
+ (thanks to Alec Panovici).
+
Grouping members with the same signature but with a different scopes
+ is now possible.
+
Related functions could not be grouped.
+
MAN_LINKS option was broken (fixed by Patrick Ohly).
+
Including a file with \include in LaTeX caused the leading text
+ to appear in a smaller font size.
+
Improved the documentation and spec file (thanks to Jens Seidel).
+ Fixed some typos in the docs. Thanks to Wouter Slegers.
+
JavaDoc style links such as @{link #var} and @{link #var label}
+ now work.
+
"doxygen -g -s" now creates a file named Doxyfile i.s.o "-s"
+
Fixed a null pointer referencing problem (thanks to Nick Pratt)
+
8-bits characters are now correctly handled within the argument
+ of \b, \c or \e.
+
Reimplemented links were broken for grouped members (thanks to
+ Johan Eriksson for the fix).
+
Enabling the Tree view didn't result in proper RTF and LaTeX output
+ (thanks to Paul Sydney for the fix).
+
Merged patches by Joe Bester:
+
+
Could not link to @anchors in the main page on external packages.
+
All external modules and pages were linked to or appended
+ (even the TODO page, etc), even when EXTRACT_ALL is set to NO.
+
The section containing structs and unions is labeled
+ "Class Documentation" (in the English translation) even when
+ the OPTIMIZE_OUTPUT_FOR_C was set to YES.
+
+
using the IDL keyword "import" in other languages did not work
+ correctly.
+
members of a privately inherited base class were not shown in the
+ list of all members, while they were accessible from the derived class.
+
Reworked part of the template handling. Doxygen should now be
+ capable of handling nested template classes correctly. Please test
+ this if you are using these contructs. Thanks to Christoph Koegl
+ for providing some difficult test cases.
+
Fixed parse problem when parsing << as part of the first
+ argument of a typedef.
+
Further improved typedef resolution.
+
The LATEX_HEADER-config option disabled the \mainpage-output
+ (thanks to Eric Reinhart for the fix).
+
Merged a patch by Erik Zeek, to allow compilation under BCB5
+
Spaces in arguments of preprocessor macros were not treated properly.
+
Fixed argument matching bug that caused doxygen to treat
+ f(type t) and f(type_t t) as the same function.
+ "void func(const ::A)" was interpreted as "void func(const::A)",
+ where "const" would have to be a class name.
+
static file members were not auto-linked even if EXTRACT_STATIC was set
+ to YES.
+
+
+
Doxygen Release 1.2.8.1
+
Changes
+
+
Enum values of a grouped (with @ingroup) enum are now automatically
+ added to the same group.
+
+
New features
+
+
Included update for Brazilian translation.
+
Add support for < > & ' "
+ in the documentation,
+ since these commands after occur in Java documentation.
+
+
Bug fixes
+
+
Parameters appeared in the documentation for undocumented
+ arguments (and twice if they were also documented with @param).
+
Specifying boolean tags twice in the config file resulted in
+ an invalid value (both boolean values were appended).
+
Fixed a number of typos (thanks to Jens Seidel).
+
When a paragraph header was directly followed by an
+ item list doxygen did not render the first item properly.
+
The "More..." link was often omitted for grouped members.
+
"dangerous" characters like ":" are now escaped from man page
+ file names
+
+
Doxygen Release 1.2.8
+
Changes
+
+
Doxygen now uses a more natural naming scheme for man pages.
+
Man page and rtf output are now disabled by default.
+
+
New features
+
+
The dot generated inheritance and collaboration graphs for classes
+ should now show the proper template instantation for the derived/used
+ classes. For instance it should show that class S uses class V
+ (indirectly) in the following example:
+
+ class V {};
+ template<class T> class U1 { T *m_t; };
+ template<class T> class U2 { U1<T> *m_t; };
+ template<class T> class B1 { U2<T> *m_t; };
+ template<class T> class B2 : public B1<T> {};
+ class S : public B2<V> {};
+
+ Please report any example of class hierarchies that are not shown
+ properly.
+
Added doc/translator.pl script created by Petr Prikryl.
+ Its main purpose is to extract information from doxygen's sources
+ related to internationalization (i.e. the translator classes), to
+ avoid duplication of information (i.e. doc/language.doc is now
+ generated) and to generate reports about the status of the translations
+ (e.g. missing methods).
+
Stanislav Kudlac added support for Slovak language and
+ Erik Søe Sørensen added support for Danish.
+ Applied language updates for
+ Italian, Croatian, Spanish, Czech, German & Russian.
+
Added support for "KBD" HTML tags (thanks to Albin Wu).
+
Added man patch by Patrick Ohly which allows to create freestyle
+ man pages using \page and puts man page with non-default extension
+ in the correct directory.
+
Added MAN_LINKS option (thanks to Patrick Ohly for the patch).
+
Added grouping patches by Patrick Ohly:
+
+ There are now three commands to define a group:
+
+ \defgroup name title
+ \addtogroup name [title]
+ \weakgroup name [title]
+
+
+ \defgroup must be used exactly once for a group, so you should
+ provide a title. Without the title you will get a warning and
+ doxygen will use the name as title (this is the old behaviour).
+
+ /** \addtogroup name */
+
+ can be used to add documentation or
+ members to a group (as in 1.2.7), but the group is created if
+ it doesn't exist yet. You can provide the title later
+ with another block:
+
+ /**
+ * \addgroup name title
+ * documentation
+ */
+
+
+ Setting different titles will trigger a warning without overwriting
+ the title once more.
+
+
+ \weakgroup is exactly the same as \addtogroup, but if a member
+ is put into such a group with \weakgroup name @{ @}
+ and into
+ another group with \[def|addto]group @{ @}, then it will be
+ placed into the other group without issuing a warning.
+
+
+ Actually there is a four-level hierarchy for grouping with
+ (from strongest to weakest) \ingroup, \defgroup, \addtogroup,
+ \weakgroup. You will get warnings when putting members into
+ groups with commands of the same level, but only when you really
+ document this member. This will not trigger a warning and put
+ variable a into Group1:
+
+
+ /** \addtogroup Group1 */
+ /*@{*/
+ /** this is the real group */
+ extern int a;
+ /*@}*/
+
+ /** \addtogroup Group2 */
+ /*@{*/
+ extern int a;
+ /*@}*/
+
+
+
Bug fixes
+
+
Fixed a bug in the LaTeX output generation (empty lists).
+
Doxygen can now distiguishing f(const A) from f(const B)
+ even though they match from a syntactical point of view.
+
A template base class that is actually an inherited template
+ argument of the derived class is no longer shown in the output
+ indices and hierarchies.
+
TOC_EXPAND could result in a broken tree view
+ (patch by Alexandr Chalpanov).
+
If a base class had member names which has the same name as enumerator
+ values in a derived class, the enumerator values did not show up in
+ the documentation (thanks to John Harris for reporting this).
+
Applied a number of patches sent by Jens Seidel.
+
Fixed compiler limit problem on Windows (thanks to Trevor Robinson).
+
Add -dBATCH in system calls to ghostscipt (needed for formulas)
+ to avoid a command prompt for newer versions of ghostscript
+ (thanks to Marvin Wolfthal).
+
In some situations doxygen wanted to write a files containing a \n.
+
Environment variables can now also be used for non-string values
+ in the config file, like for example QUIET = $(QUIET_ON)
+
Fixed a number of typo's in the docs (thanks to Philippe Lhoste &
+ Jens Seidel).
+
Inheritance through typedefs within a namespace did not yield the
+ correct inheritance diagram.
+
References to anchors in grouped members or pages were not
+ correctly resolved.
+
Fixed a problem with argument matching for arguments that contained
+ classes imported via a using declaration.
+
+
Doxygen Release 1.2.7
+
Changes
+
+
The configgen tool is now replaced by a more dynamic parser. This
+ will allow future output generators to add specific options without
+ changing or recompiling the doxygen engine. Doxywizard has also been
+ updated to use this new parser. Developers that wish to add new
+ configuration options, please look at Config::create() in src/config.l
+
Changed the way the translators work internally (thanks to Petr
+ Prikryl for ideas and code) and updated the documentation regarding
+ language support and maintenance. Users of languages other than
+ English will get a warning message if the translation for their
+ language is not up to date.
+
Did some internal cleaning up to make things
+ more consistent and easier to maintain. Please let me know if you
+ think something has been broken in the process.
+
Doxygen now uses a more unique output file name mangling scheme, which
+ generates unique file names even if entity names (like class names)
+ only differ in case.
+
Setting ALLEXTERNALS = NO now hides external pages in the page index.
+
+
+
New features
+
+
\image is now supported for RTF output (thanks to Joe Ninety).
+
New RTF_EXTENSIONS_FILE that can be used to configure the RTF output
+ (thanks to Joe Ninety for the patch).
+
Added new command \htmlinclude that can be used to include a
+ HTML file as is in the HTML documentation.
+ (thanks to Uwe Wojak for the patch)
+
can now be put in the documentation to force a
+ non-breakable space.
+
Included support for the gcc extension #include_next
+ (thanks to Jac Goudsmit for the patch).
+
Included translation for Brazilian Portuguese sent by Fabio Jun
+ Takada Chino. Add update for the Czech translation
+ (thanks to Petr Prikryl). Also included updates for German
+ (thanks to Jens Seidel), Russian (thanks to Alexandr Chelpanov) and
+ Croatian (thanks to Boris Bralo).
+
Added RPM spec file update by Jens Seidel.
+
Added SHORT_NAMES option which can be set to YES to make doxygen
+ generate short (but non-informative) output file names.
+
Added new command \addtogroup that can be used to extend a group
+ defined with \defgroup with extra members and/or documentation.
+
+
+
Bug fixes
+
+
Inline sources weren't appearing for undocumented non-inline members.
+
Doxygen did not subgroup in case the parent group was
+ found after the child group. (thanks to Johan Eriksson for the patch
+ that fixes this).
+
Specifying a directory at the INPUT that ends with a \ did not
+ make doxygen recurse the down the directory tree in Windows.
+
Fixed two small bugs that caused segfaults on
+ NetBSD and Linux on 64bit Alpha's (thanks to Rex McMaster
+ and Ovidiu Toader).
+
"Referenced by" section now starts at a new paragraph
+ (thanks to Joe Ninety).
+
Setting OPTIMIZE_OUTPUT_FOR_C still produced some C++-ish
+ sentences for the list of all struct/union fields.
+
Undocumented friend functions were listed as friend classes.
+
A CORBA IDL union with a switch was not always recognised correctly.
+
doxygen did not handle try-function-blocks with multiple catch clauses
+ properly.
+
\bug and co. were not working for static members.
+
Formulas weren't correctly re-generated when changed.
+
relative include paths containing /../ were not linked, since they
+ were not normalized.
+
Locally included files where not searched in the directory containing
+ the file that did the inclusion, only in the paths specified with
+ INCLUDE_PATH.
+
Fixed problem with numbers in the generated eps file for non-english
+ systems (thanks to Vsevolod Novikov).
+
Generated bookmarks in the RTF output not starting with a letter caused
+ problems (thanks to Jonathan Beaupre for the fix).
+
Putting å in the docs wasn't working as expected.
+
Fixed a number of typo's in the docs (thanks to Jens Seidel and
+ Philippe Lhoste).
+
Autolinking could create links inside user defined HTML links.
+
Email addresses in the docs starting with an "a" and put inside sharp
+ brackets were not properly displayed (thanks to Abramo Bagnara for
+ the fix).
+
Fix several man page output bugs (thanks a patch by Patrick Ohly).
+
+
+
Doxygen Release 1.2.6
+
Changes
+
+
The \bug command now works like the \todo and \test commands; each item
+ documented with \bug will be cross-referenced with a bug list. The list
+ can be disabled by setting GENERATE_BUGLIST to NO in the config file.
+
+
+
New features
+
+
Included updates for Croatian, Czech and German,
+ Japanese, Italian and Russian translations.
+
Added option GENERATE_CHI that can be used to control whether
+ or not an .chi file should be generated by the HtmlHelp compiler
+ (default is NO).
+
Added option DOT_CLEANUP that when set to NO leaves the intermediate
+ dot files in the output directory.
+
Added option BINARY_TOC to enable/disable use of a binary table of
+ contents in a .chm file (thanks to Martin Slater for the patch).
+
Added option TOC_EXPAND to when enabled shows the members of a
+ group in the treeview and HTML help table of contents (thanks again
+ to Martin Slater).
+
Included group support for man page output (thanks to Joe Bester for
+ the patch).
+
Added option SHOW_USED_FILES that can be used to disable the
+ list of used files normally generated at bottom of the documentation
+ of classes and structs (thanks to Joe Bester).
+
Updated the doxbar tool:
+
+
the addin no longer requires administrator privileges to work
+ (thanks to Michael Beck)
+
the existance of files is now checked (thanks to Pekka Pessi).
+
.odl and .inl files are recognised (thanks to Pekka Pessi).
+
+
+
+
Bug fixes
+
+
doxygen.css was also used by the treeview even if the user specified
+ his/her own stylesheet.
+
Inline source blocks (INLINE_SOURCES=YES) were sometimes truncated
+ at the wrong closing bracket (thanks to Jac Goudsmit for the fix).
+
Some references to subsections were not correctly generated
+ (thanks to Stefan Ruppert for the fix).
+
Fixed IDL union parse problem (thanks to Richard Hash).
+
Latex output sometimes contained $\ast$ for code fragments.
+
lonely *'s were not removed inside a <pre> and <code> blocks.
+
Applied patch sent by Joe Bester to make the treeview
+ javascript work with Mozilla. Still has some problems though.
+
Fixed a bug in code parser regarding string detection, inside
+ the argument list of a function.
+
Using a command alias starting with \class (or other structural
+ commands) did not give the expected result.
+
A function pointer returned as the template argument of a template
+ class that itself is the return type of a function was not
+ parsed properly.
+
In IDL, typedef's followed by an attribute list where not parsed
+ properly.
+
The list of all members now shows all privately accessible members
+ if EXTRACT_PRIVATE is set to YES, instead of just the non-inherited
+ private members.
+
Fixed autolink problem for grouped members.
+
Mutliple static global functions with the same name (but in different
+ files), which were forward declared, could make doxygen put
+ the wrong documentation block at the wrong global function.
+
Support for Norwegian was not enabled.
+
The correct charset is now set when the treeview is used (thanks to
+ Boris Bralo).
+
For inline source fragments of member functions, the types
+ of the arguments are now also taken into account for
+ cross-referencing.
+
A sentence ending with a dot, directly followed by a \n was not
+ handled correctly.
+
File reference extracted from a tag file could something cause
+ doxygen to generate a bogus warning.
+
Parsing large arrays of hex numbers took very long when the source
+ browser was enabled.
+
Fixed install rule in the Makefile
+
Doxygen now parses try-function-blocks correctly.
+
A zero initialized function pointer inside a namespace was
+ misinterpreted as a pure virtual function.
+
Applied Joe Bester's patch that fixes some LaTeX output problems.
+
Java Package info was not correctly read from a tag file.
+
Todo items in the documentation of grouped members were not
+ correctly referenced from the todo list.
+
Removed bogus "a" entries from appearing in doxysearch's search results.
+
Putting <a href="..."><img src="..."></a> in the
+ docs will now work as expected for HTML.
+
Fixed problems with >pre>...>/pre> block in LaTeX.
+
Putting ç in the docs now preduces a c-cedille.
+
+
+
+
+
Doxygen Release 1.2.5
+
Changes
+
+
Split up doxygen into a library and an executable part,
+ and moved the XML generation part to a separate front-end
+ (see addon/xmlgen).
+
Having SOURCE_BROWSER set to YES does not automatically
+ imply that a member is documented.
+
Typedefs of classes are now shown in (dot) inheritance graphs with
+ their typedef name instead of the resolved name.
+
Upgraded Qt files to 2.2.3 to fix some compile issues.
+
+
+
New features
+
+
Added initial support for Java. The parsing of Java code
+ should be ok. There is a new "packages" index, with a list
+ of all parsed Java packages, each of which can be documented
+ (but not yet in the Java way using package.html) and contains
+ links to the interfaces and classes in the package. The code
+ parser still needs work (It doesn't do much cross-referencing yet).
+ Also any explicit package scope for classes is basically ignored,
+ so you cannot have two classes with the same name in different
+ packages.
+ Let me know if you know of other improvements.
+
Added support for the Java style of linking (using
+ {@link package.object#item()} as syntax)
+
Added file, compound and namespace members to the treeview index.
+
New configuration option MAX_INITIALIZER_LINES that can be
+ used to control when/if the initial values of variable and defines
+ are shown in the documentation.
+
OPTIMIZE_OUTPUT_FOR_C flag that when set to YES makes doxygen produce
+ output that looks more natural for C programmers.
+
Included Czech language update sent by Petr Prikryl.
+
Added "Binary TOC=YES" and "Create CHI file=YES" to the HtmlHelp
+ project file for better integration with MSDN.
+
I've updated the doxbar tool:
+
+
sources are appended to the INPUT line of the template config file
+
sources mentioned in the .dsp with quotes (i.e. "c:\bla.cpp") are now
+ handled properly (thanks to Robert Radtke for the fix).
+
+
+
+
Bug fixes
+
+
Fixed 0-pointer bug that could crash doxygen in some cases.
+
Starting a list in a brief JavaDoc-style description splitted
+ the list into two invalid parts if a list item ended with a dot.
+
Fixed a problem with linking to grouped class members.
+
Indenting of code fragment in LaTeX output was not always correct.
+ Also for code lines starting with a * the * was removed.
+
Typedefs where not properly extracted from tag files.
+
Links to operators in a "See also" section did only work if the
+ arguments list was given.
+
Fixed parse bug in the code parser for the case where "<"
+ and ">" were found on a line but couldn't possibly be a
+ template scope.
+
The "More..." links was incorrect for members of class grouped
+ with @ingroup.
+
Fixed preprocessor parse bug that occurred when parsing string
+ literal "...\\" as an macro argument.
+
Fixed buffer overflow problems when parsing very long input lines
+ (thanks to Arnault Bonafos).
+
References to pages and anchors imported via tag files did not work.
+
Local references to page anchors did not work.
+
Windows only: doxygen leaked process handles while running dot
+ (thanks to Jeroen ter Hofstede for the fix).
+
Undefining (with #undef) a define set using PREDEFINED now
+ longer has an effect.
+
Functions appeared twice in modules if the prototype and definition
+ did not match exactly.
+
the word "operator" in todo items caused problems.
+
Fixed some more problems with references to external pages,
+ local references to sections, and naming conflicts with multiple
+ todo/test lists.
+
"char a:1, b:2" resulting in output including both bitfields for b.
+
The protection level of the members in the all-member list was not
+ always correct.
+
Fixed some typos in the Dutch and German translations.
+
\todo's in the docs of #define did not end up on the todo list.
+
"typedef volatile struct {} name;" was not handled properly.
+
HTML header and footer file are now read only once.
+
Fixed 2 memory leaks.
+
+
+
+
Doxygen Release 1.2.4
+
+
Changes
+
+
New XML-based tag file format.
+ Note: If you are already using tag files, you need
+ to regenerate them, because the old format is no longer supported!
+
Removed the "No description available" for classes without brief
+ description in the compound list.
+
User defined groups (a.k.a. modules) are now shown in a hierarchy.
+
If a function and its prototype are both inside different documented
+ files then they may both be documented separately and will appear
+ as such in their file documentation
+ If you only document the header file and not the source
+ file you can still put your documentation in front of the function
+ definition as before.
+
For unresolved base classes of a class inside a namespace, doxygen
+ now guesses they are defined outside the namespace (was inside).
+
Performance: replaced O(n^2) sort routines for member lists
+ with O(nlog(n)) versions.
+
+
+
New features
+
+
There is now an HTML Help like tree view, that can be enabled
+ by setting GENERATE_TREEVIEW to YES.
+ This feature requires a browser that supports frames and javascript.
+ Note that frame/page-resizing requires a manual reload with
+ Netscape 4.x at the moment (it is a known netscape bug).
+ (thanks to Ken Wong for providing the code to generate the tree
+ in the proper format).
+
Added new option TREEVIEW_WIDTH that can be used to set the initial
+ with of the treeview frame.
+
A warning is now generated for invalid \link targets
+ (again thanks to Ken Wong).
+
Wang Weihan sent an update for the Chinese translation which is now
+ included. Included update for the Russian and Italian language as well.
+
Support for Borland C++ and MINGW compilers for Windows
+ (thanks to Oliver Brandt for the patch).
+
Groups and pages defined in external documentation (i.e. with tag files)
+ can now be referenced using \ref.
+
Pages can now be put into groups using \ingroup (thanks to Ken Wong).
+ A group with only pages is rendered as a page (the group itself)
+ with subsections (the inserted pages).
+
\ingroup can now be put in a one line comments (thanks to Patrick Ohly)
+
\ingroup in a comment block before a comma separated list of
+ variables is now applied to all variables (as is the documentation
+ itself). (thanke to Patrick Ohly for the patch)
+
@{ .. @} blocks can now be used for normal groups as well
+ (thanks to Trevor Robinson for the patch). Here is an example:
+
+ /** @defgroup mygrp My Own Group
+ * @brief My brief group description.
+ * @{
+ */
+
+ /** @name My member group
+ * @{
+ */
+ /** This is a function */
+ void func1();
+
+ /** Another function */
+ void func2();
+
+ /** This is a typedef */
+ typedef int Int;
+
+ /** @} */
+
+ /** This is a variable */
+ int var;
+
+ /** This is a define */
+ #define DEF def
+
+ /** @} */
+
+
Normal groups can now also be nested using /*@{*/ ... /*@}*/ blocks
+ (thanks to Patrick Ohly for the patch)
+
+
+
Bug fixes
+
+
+
If source files were put in the input before header files, the
+ declaration against definition matching did not work for
+ global functions (thanks to Frank Warmerdam for reporting this).
+
The template argument type and name of template functions
+ were not separated by a space.
+
A comma separated list of member reference variables (like int &i,&j;)
+ was not parsed correctly.
+
Removed bogus warning when excluding non-existent files or directories
+
Fixed problem parsing nameless bit padding fields.
+
Fixed a pointer bug in the XML generation that could crash doxygen.
+
The code parser did not cross-reference functions inside namespaces
+ and nested classes.
+
Only the first member of a member group was shown in a group
+ definition.
+
REPEAT_BRIEF = NO now works for class, namespace and file documentation
+ as well.
+
No macro-expansion was done on a file that was #include'd in a body
+ of a class or enum.
+
Fixed macro concatenation bug in the preprocessor.
+
Global functions that were \ingroup'd could appear twice in a group
+ in some cases.
+
% and & can now be used in the URL in the documentation.
+
\c,\e and \b now also generate a link if they have the name of a
+ documented file as their argument.
+
Made the FILTER_SOURCE_FILES actually do something
+ (it was always treated as enabled).
+
Fixed two bugs in the autolist feature (thanks to Ken Wong)
+
Fix macro expansion bug in the preprocessor, when macro's
+ where used as the argument of an #include.
+
// did not work inside the argument of a \todo or \test command.
+
Doxygen did not parse arrays of function pointers properly.
+
Fixed parse bug for templates with nested template arguments.
+
Fixed parsing problem for template arguments
+ containing << or >> operators
+
Fixed some problems with the DOT_PATH config option on windows.
+
Group title and file names are now shown in the latex index instead
+ of the label names.
+
Portability: Added workaround for SGI MipsPro compiler, that
+ (hopefully) prevents it from crashing while compiling doxygen.
+ Worked around a number of compile problems with HP's C++ compiler.
+
Fixed problem with doxygen calling epstopdf.bat in Windows.
+
Fixed some problems that occurred when regenerating the
+ doxygen manual on Windows.
+
Fixed some output formatting problems regarding templates.
+
Global functions, typedefs, and enums did not get linked when
+ were read in via a tag file.
+
Using /* inside an \code ... \endcode block confused the parser.
+
+
+
Doxygen Release 1.2.3
+
+
Changes
+
+
enum values are now packed in groups of 4 in the declaration part
+ of the HTML docs.
+
JAVADOC_AUTOBRIEF is now set to NO by default, because too many
+ people expect the JavaDoc-style to behave as the Qt-style and
+ not in the way described in the JavaDoc spec.
+
The distribution now includes the part of Qt-2.2.0 that is needed for
+ compilation of doxygen, doxytag, and doxysearch. I've also created the
+ missing files for Windows. This allows compilation of doxygen on systems
+ without X11 or the full Qt. For doxywizard Qt-2.2.x is still required
+ however.
+
+
New features
+
+
Support for the Slovene language (thanks to Matjaz Ostroversnik)
+
Bit fields for struct members are now shown in the documentation.
+
Enabled "favourites" and "Full text-search" for the generated
+ HTML Help browser files.
+
Added support for M$-IDL properties. The "methods:" section
+ now also works.
+
Added support for Borland C++ builder "__published:" and "__property:"
+ sections. (__published: is just treated as public:).
+
Included update for the Czech language. Thanks to Wang Weihan there is
+ also support for Chinese output now.
+
Added a config option WARN_LOGFILE to log warnings to a
+ file for those
+ people that have to use certain "operating systems" that do not support
+ redirection of stderr to file.
+
Added a config option GENERATE_LEGEND that can be used to disable the
+ legend page normally generated for explaining dot graphs.
+
Thanks to a patch send by Micha Bieber, doxygen can now be run from
+ inside doxywizard.
+
Environment variables can now be used in the @INCLUDE_PATH
+ and @INCLUDE tags in the config file (thanks to Stephen
+ Goudge).
+
Windows compilation/installation instructions are updated (thanks to
+ Petr Prikryl)
+
New config tag ENUM_VALUES_PER_LINE to set the number of
+ enum values
+ that are grouped on one line (default=4).
+
#include's inside the body of a class are now expanded.
+
The source browser files can now by filtered using the
+ INPUT_FILTER if FILTER_SOURCE_FILES is set
+ to YES (thanks to Paul Strauss).
+
+
Bug fixes
+
+
For #foo in member documentation doxygen was trying to find
+ a global variable named foo instead of a member. Use ::foo
+ to make an explicit link to a global variable in case there is
+ also a member named foo.
+
A bullet list ending with a \par sometimes caused the paragraph to
+ be indented.
+
When STRIP_CODE_COMMENTS was set to NO, and /*!< .. */ style
+ comments were used, the code parser got out of sync with the
+ documentation parser.
+
(Hopefully) fixed some Solaris compile problems
+ (thanks to John Sturton).
+
documentation for private slots appeared in the documentation even
+ though EXTRACT_PRIVATE was set to NO.
+
\relates was not working for nested classes or classes defined
+ within a namespace.
+
namespace alias support was broken with respect to inheritance
+ relations containing aliased namespace names.
+
The documentation of members that are put into a
+ group (with \ingroup) is now removed from the natural
+ container of the member. Also the links are now corrected.
+
Links from the code parser to static global functions are
+ now always pointing to the correct file (thanks to Bill Soudan
+ for the patch).
+
Fixed HTML bug in non-indexed namespace member lists.
+
Using `:' inside ID's caused problems for some
+ XML parsers. I'm now using "__" instead. Also removed @ from appearing
+ in the output when annonymous compounds were used.
+
Fixed output bug that is caused by nesting paragraph commands
+ inside autolists.
+
Doxygen no longer generates source files for input files that
+ end with .doc or .txt
+
Fixed argument matching problem that could result in parameter name
+ changes for overloaded functions. Also fixed buglet for
+ matching things like "unsigned int" against "unsigned int name"
+
Fixed qtools compile problem with ./configure --english-only problem
+
Putting documentation between the class and its body now also works
+ if the class has base classes.
+
Fixed parse problem for const function pointers like
+ "int* (* const name)(long);"
+
Slightly changed the HTML output to work around display "bugs" in
+ Konquerer and Opera (thanks to Achim Spangler).
+
Examples in compress HTML help of doxygen's manual has absolute links.
+
+
+
Doxygen Release 1.2.2
+
Changes
+
+
Verbatim headers are now also created if a documented header
+ file does not contain a struct or class (unless VERBATIM_HEADERS = NO
+ of course).
+
For member groups, where only the first member is documented, that
+ documentation is no longer automatically copied to all other
+ members of the group. You can still enble this by setting
+ DISTRIBUTE_GROUP_DOC to YES in the config file.
+
The \mainpage block now gets its own chapter in Latex/RTF
+
+
New features
+
+
Added support for KDE-2 IDL (more specific: k_dcop member sections).
+
New ALIASES config option which allows you to add one or more user
+ defined aliases (a.k.a. macros) that can be used as commands in the
+ documentation. For instance:
+
+ ALIASES = "sideeffect=\par Side Effects:\n"
+
+ allows you to put @sideeffect in the documentation, which doxygen
+ will replace by "\par Side Effects:", before parsing. As a result
+ a formatted paragraph with a "Side Effects" header will appear.
+ Note that the \n's are replaced by real newlines, so in the example
+ you can put your paragraph text directly after the sideeffect command.
+
Added language support for Hungarian (Thanks to György Földvári),
+ Korean (thanks to Richard Kim), and Romanian (thanks to Alexandru Iosup).
+ Received language updates for Italian, Polish, Croatian, Czech,
+ Hungarian and Russian.
+
Added support for namespace aliases.
+
Added RTF patch from Alexander Bartolich. Here is his description of
+ the changes:
+ "The following patch of rtgen.cpp allows to read *complete* style
+ definitions from rtfstyle. This includes \sbasedon, \snext, \additive
+ and actual style names.
+
+ If this data is missing the default value is used.
+ This means old rtfstyle-files can be used without change, with one
+ exception:
+ Reset is no longer considered a style. Since unknown style names
+ are simply ignored I don't consider this a big problem.
+ There is no means to write rtfstyle in old format, however.
+ "
+
Documentation can now also be put after the initializer of a constructor
+ but before the body.
+
+
Bug fixes
+
+
RTF output was broken w.r.t. dot generated images.
+
Spacing and blanks inside <pre> ... </pre> block were not
+ properly preserved.
+
Fixed lock-up when parsing "enum A { A };"
+
If INLINE_INFO was set to NO an empty property list could be put after
+ the function definitions.
+
Fixed source code linking for the following cases:
+ A::func().func2()
+ and a[2]->func().
+
\em %className did not remove the %
+
In some cases namespace members ended up multiple times in the
+ documentatation.
+
Fixed a bug in the auto list generation.
+
\latexonly inside brief description did not work properly.
+
"Referenced By" list did not include constructors with
+ inline initializers.
+
ä and such were not parsed when used as the argument of a section.
+
A struct inheriting from a base class was marked as private inheritance
+ while it should be public inheritance.
+
The autobreak routine for long return types was sometimes skipping
+ characters.
+
Class usage relations should now also appear in the collaboration
+ diagrams for classes within the same namespace, without explicitly
+ having to mention the namespace.
+
+
+
+
+
+
Doxygen Release 1.2.1
+
+
Changes
+
+
I have completely rewritten the \todo code. Now a \todo command have a
+ paragraph as argument. The todo list has a header for each
+ item indicating where the todo item was found. The todo list (and
+ all todo items) can be disabled by setting GENERATE_TODOLIST to NO.
+
<pre> ... </pre> blocks now behave as in plain HTML instead of
+ \code ... \endcode blocks. This also works for LaTeX ofcourse.
+ These blocks differ from \verbatim ... \endverbatim blocks in that
+ commands can be used inside these blocks.
+
+
New features
+
+
Added rudimentary support for XML output. Still very much work in
+ progress... You can enable it by setting GENERATE_XML to YES.
+ There is a small utility (based on Qt & Xerces-C) in addon/xmlread
+ that uses the SAX interface to read a generated XML file and then dumps
+ the class hierarchy contained in it.
+
Thanks to a patch sent by Christophe Prud'homme, doxygen now has a new
+ option USE_PDFLATEX that when set to YES makes doxygen use
+ pdflatex instead of latex to generate refman.pdf. The
+ result is a document with higher quality fonts.
+
Added a \test command that works similar to \todo and can be used to
+ describe test cases. Doxygen will generate a page containing a list
+ of all test cases. To disable the list set GENERATE_TESTLIST to NO.
+ Thanks to Dave Murrell for the idea and the initial code.
+
For each list option in the config file += can now be used to append
+ something to a list. Thanks to Joerg Baumann for adding this.
+
Numbered items are now supported like this:
+
+ /*!
+ This is nested list:
+ - It can be either one of following:
+ -# An apple
+ - Green or
+ - Red
+ -# An orange
+ - Or one of the following:
+ -# A plane
+ -# A bird
+
+ More text follows.
+ */
+
+ Credits go to Joerg Baumann.
+
Included French and Czech language updates from Mathieu Despriée and
+ Petr Prikryl. Also included a language update for german from
+ Raimund Klein.
+
Doxygen will now do give proper warnings for formulas that do not
+ end properly.
+
Improved error reporting for illegal list combinations (thanks to
+ Joerg Baumann for the patch)
+
Comments from the code example in the dot graph "legend page" was
+ stripped if STRIP_CODE_COMMENTS was set to YES.
+
In the config file "@INCLUDE = file" can now be used to include
+ part of a configuration file. "@INCLUDEPATH = dir1 dir2 ..." can
+ be put in front of it to add search paths (default is $PWD).
+ Thanks to Joerg Baumann for the patch.
+
Added alphabetical quick indices for compound, file and namespace
+ member lists.
+
+
Bug fixes
+
+
Running ghostscript on Windows for generating formulas was done
+ asynchronously, resulting in ghostscript trying to access temporary
+ files that may already have been deleted by doxygen. Thanks to Robert
+ Golias for the code to fix this.
+
Include dependency graphs failed to get included in LaTeX because
+ \includegraphics did not like the dots in the generated file names.
+ Those dots are now escaped by underscores.
+
The \remark did not end a brief description in JavaDoc comments,
+ resulting in a error in the generated LaTeX.
+
"operator >>" was not matched against
+ "operator>>"
+
the (required) space after \addindex ended up in the LaTeX index,
+ causing all generated entries to be placed after the user added entries.
+
"typedef class A<B> a;" is now correctly handled in inheritance
+ relations.
+
Fixed some typos in the manual
+
\c Class::func(arg) was not autolinked.
+
Doxygen stopped reading from stdin after 4096 bytes.
+
In code fragments no autolinks for local variables or
+ dereferenced arguments were generated for template classes.
+
autolinking to a namespace member foo from within a class scope also
+ having a member foo did not work.
+
The brief description was prepended before \todo and \test.
+ The reference from the todo and test lists back to the documentation
+ did not work for overloaded members.
+
specifying width or height for \images was not handled properly.
+ (width and height were repeated). Now you can also use commands like
+ \textwidth as the width or height.
+
After expanding an environment variable in the config file, the
+ next environment variable was searched starting at the wrong position.
+
Fixed LaTeX/RTF labelname collisions between members of files and
+ groups, and between classes and groups with the same name.
+
HTML image map partly appeared in RTF output when built-in class
+ diagrams were used causing the RTF file to be truncated.
+
Inheritance relation was not determined correctly in case a base
+ class was imported from another namespace via a using declaration.
+
Todo and test items defined with \class or related block, where
+ sometimes missing from The todo & test
+
Preprocessor: Multi-line #define's where not properly parsed & colored
+ on windows due to \r's
+
Preprocessor: expansion of M(x)A, where M is a macro
+ that expands to mx, resulted in
+ "mxA", instead of "mx A"
+
Fixed compile problem with Qt-2.2.0beta1
+
+
+
Doxygen Release 1.2.0
+
+
Changes
+
+
CASE_SENSE_NAMES is now enabled by default.
+
In LaTeX .eps images are now included using the
+ graphicx package instead of epsfig to simplify the use of pdflatex
+ (thanks to Pier Giorgio for showing me how that works).
+
Reimplemented the system() call for Unix, so doxygen becomes
+ interruptable when calling external tools such as dot.
+
Changed the way -w works. It can now also be used to generate
+ template header and footers.
+
+
New features
+
+
Grzegorz Kowal added support for the Polish language. His patch
+ is now included.
+
A \par command without title argument can now be used to
+ add a new paragraph with the same indent under the heading of
+ another command (such as \par, \param,
+ \note, etc...)
+
Added a legend page explaining the various arrows and box colorings
+ for the class diagrams generated by dot.
+
Merged update for Croatian language.
+
Relative paths are now also allowed for the
+ STRIP_FROM_PATH tag.
+
Added a new section to the manual explaining the use of tag files
+ in more detail. Also move the contents of the INSTALL file into
+ the "installation" section of the manual.
+
Added ps_2on1 and pdf_2on1 targets to the
+ Makefile generated in the
+ LaTeX directory. These can be used to generate manual with 2
+ logical pages on 1 physical pages (Thanks to Onno).
+
Merged Czech language update from Petr Prikryl. Merged Spanish
+ language update sent by Lucas Cruz.
+
Added standard GNU long options --help and
+ --version.
+
Added a -w option that can be used to generate template
+ style sheet files for RTF, HTML, Latex. Thanks to Alexander Bartolich
+ for the idea and part of the implementation.
+
Merged patch from Steve Hespelt, which adds a new configuration
+ option: INCLUDE_FILE_PATTERNS. This tag can be used to
+ set the file patterns for the include files (if left empty the
+ FILE_PATTERNS will be used, which was also the old
+ behaviour).
+
Added a couple of commands for kdoc compatability: @p,
+ @li, @em.
+ Also made @ref a bit less strict.
+
Portuguese translation by Rui Lopes.
+
+
Bug fixes
+
+
Documenting member function pointers with \var like this:
+
+
+ /*! class B */
+ class B
+ {
+ public:
+ void (B::*pmf)();
+ };
+
+ /*! \var void (B::*B::pmf)()
+ * docs for this class member.
+ */
+
+
+ did not work.
+
Library blocks inside M$-IDL files are now also processed
+ (a library is treated as a namespace at the moment).
+
Argument matching did not work for array argument with different
+ amounts of whitespace.
+
If a namespace definition was found before its documentation than
+ grouping it (with @ingroup) did not work.
+
Global functions within anonymous namespace scopes did appear
+ in the documentation with the anonymous scope marker used internally
+ by doxygen.
+
"namespace{}",so without space was not recognised as a namespace.
+
If the search engine was used then running installdox on the generated
+ html resulted in bogus links to the search engine.
+
Fixed some compiler warning on Solaris.
+
Changed grey by grey50 in dot.cpp to avoid PDF conversion problems.
+
A </pre> that was not preceeded by a whitespace was ignored
+
The methods operator<() and operator<<() were not
+ automatically linked anymore.
+
Some special characters in LaTeX were eating up the blanks that
+ followed them.
+
The built-in C preprocessor did not evaluate the following to TRUE:
+
+ #define A
+ #define TO_BE_EVALUATED defined A
+ #if TO_BE_EVALUATED
+ ...
+ #endif
+
+
Improved code parsing a bit: things like
+ getClass()->func() and
+ (*pb)->func() should now work. Also the scope of the
+ body is correctly detected in case of inline constructor initializers
+ like: A() : m_a(10) { ... }
+
File index is now in (path,name) lexical order, instead of (name,path)
+ order. The file index is also only generated once instead of twice ;-)
+
Typedefs to structs in C-style did (still) not get resolved as "usage"
+ relations for the collaboration diagrams.
+
Fixed some HTML output typos reported by Onno Kortmann (who used
+ the tool "html tidy" on the generated output).
+
Merged a patch from Paul Lieverse that should solve the empty image
+ map problems on Solaris.
+
If the title of a \defgroup contained a documented class, a
+ nested (and thus broken) link was generated.
+
Externally defined variable were treated as variable definitions.
+
If a file only had a verbatim header but no documentation, a
+ link broken link was added to the HTML help TOC.
+
Fixed "member with no name" warning that occurred when a enum's
+ last value ended with a comma and the enum was inside a member group.
+
A <dl> type of list with multiple <dd>'s did not give
+ the correct output in LaTeX.
+
SORT_MEMBER_DOCS is NO only worked for
+ class members.
+
Both the prototype and the definition of a global function
+ appeared in a \defgroup.
+
Fixed some visual problems with operator links in source code
+ fragments.
+
Code parser got confused by template specifiers. Also improved
+ linking of typedef'ed classes.
+
A warning was generated if the same function was defined both inside
+ and outside a namespace.
+
+
+\endhtmlonly
+\section log_1_1 1.1 Series
+\htmlonly
+
+
Doxygen Release 1.1.5
+
+
Changes
+
+
If DISABLE_INDEX = YES and a user defined main was specified
+ (with \mainpage), then no index will be generated anymore.
+
RTF output is now enabled by default.
+
LaTeX output now uses fancyhdr instead of fancyheader.
+
If the search engine is enabled, the default config values will be
+ put into the generated HTML files, so you do not need to run
+ the installdox script, if the initial values are ok.
+
+
New features
+
+
Added a new config option HIDE_SCOPE_NAMES that can be set to YES
+ to hide the namespace and class scopes that are put in the
+ documentation and diagrams.
+
added a new type of graph, that can be used to visualize
+ which files #include (i.e. depend on) a given file. This graph is
+ enabled by setting HAVE_DOT and INCLUDED_BY_GRAPH to YES.
+
added new configuration option EXTRACT_STATIC that can be used
+ to enable/disable the extraction of static file members. The behaviour
+ of this option used to be linked with EXTRACT_PRIVATE.
+
Added two new configuration options MAX_DOT_GRAPH_WIDTH and
+ MAX_DOT_GRAPH_HEIGHT that let the user configure how big the
+ generated dot graph may become.
+
Added a new configuration option EXPAND_AS_DEFINED that can
+ be used in combination with PREPROCESSING = YES, MACRO_EXPANSION = YES,
+ and EXPAND_PREDEF_ONLY = YES, to expand a given list of macro names,
+ as they are defined in the sources.
+
Merged Alexander Bartolich's RTF style sheet patch.
+ A new config option RTF_STYLESHEET_FILE is now available with which you
+ can specify a style sheet file. The style sheet file should contain
+ a list of assignments. The assignments can be used to overwrite the
+ definitions of the various styles with user defined settings.
+
Added a new command @since for JavaDoc compatibility.
+
Added two new commands: \remarks and \attention that work in a
+ similar way as \warning, \pre, \post, et al.
+
If SOURCE_BROWSER = YES, each member function documentation
+ now includes a list of member functions that call the member
+ somewhere in their body.
+
RCS/CVS tags of the form $word:text$ are now nicely typeset in the
+ documentation.
+
Providing all members of an enum with the same documentation can
+ now be done with member grouping like this:
+
Member grouping can by denoted more compactly like this:
+
+ //@{ Same documentation for each function
+ int getFunc1();
+ int getFunc2();
+ //@}
+
+ /*@{ @name Set functions
+ * Functions for setting values.
+ */
+ void setFunc1(int v);
+ void setFunc2(int v);
+ /*@}*/
+
+
Merged Czech language support patches send by Petr Prikryl. Also
+ removed some obsolete methods from the translator files.
+
Call chains like a->b()->c() are now followed
+ by the code parser so c() is linked if documented.
+
+
Bug fixes
+
+
the warning message in case of ambigous file matches was containing
+ a bogus %s, which could even crash doxygen.
+
An autolist followed by a \retval, \param, or \exception did
+ produced invalid output, resulting in a compile error in LaTeX.
+
" has a special meaning in LaTeX when the german babel package
+ is loaded. Doxygen now produces proper output for text containing
+ quotes.
+
The title of a related page was not properly parsed, causing
+ HTML special characters to end up in the output for some languages
+ (German for instance).
+
The hierarchy shown in the "Contents" part of the html help
+ browser did not properly show the hierarchy when it contained
+ undocumented classes.
+
explict compound specifiers in the return type could lead to
+ parse problems. Example:
+
+ enum SomeEnumType_e Func()
+ {
+ ...
+ }
+
+ This was parsed as an enum definition.
+
A user defined style sheet did not get included properly, if it
+ was specified with a (partial) path in HTML_STYLESHEET.
+
Linking in code fragments now works with nested classes
+ and links to the correct reimplemented member are generated.
+
\ingroup did not work when grouping enums
+
members of a module were not cross-referenced with the sources.
+
Function pointers like void ( *func )() where not c
+ orrectly parsed because of the extra spacing between
+ the `(' and the `*'.
+
The const in void func(int * const val /*< a value. */);
+ was named part of the name, instead of the type.
+
Removed bogus warning in case of global function pointer variables.
+ Function pointers inside namespaces and member function pointers
+ did also produce bogus warnings.
+
Fixed a misalignment problem with inline source fragments.
+ Also the initializer list after a colon is now included in an inline
+ source fragment.
+
Case sensitivity of file names was set before the configuration file
+ was parsed, causing the default value of CASE_SENSE_NAMES to
+ be used in any case.
+
added a space after "file" in the groupdef docs (thanks Hauke)
+
Documentation blocks can now also be put just after a class name, like
+ in:
+
+ class C
+ /*! documentation here */
+ {
+ ...
+ };
+
+ This was already possible for functions.
+
Due to a bracket counting bug, throw clauses where not always
+ parsed properly.
+
Fixed a parse bug for the following code-pattern:
+
+ void Class::
+ // Comment
+ method() {}
+
+
With the newer Qt versions (2.1.x), passing a null string as the first
+ argument of QRegExp::match seems no longer be allowed,
+ so I added some extra checks to avoid potential crashes.
+
The title of the documentation of a template class now explicitly
+ states that it is a template. (For non-English languages,
+ this still requires a change to trCompoundReference() in
+ translator_xx.h).
+
Fixed a problem with matching methods of template classes.
+
commenting out a section or subsection with <!-- -->
+ did not work.
+
Fixed some inconsistencies in the configuration page of
+ the documentation.
+
Some operators like operator[](),
+ operator|() and operator!()
+ did not appear correctly in the LaTeX index.
+
If an include file name matched a directory name, then the
+ directory could be found first in the INCLUDE_PATH. This resulted in a
+ scanner error.
+
Fixed parse problems that occurred when << or >> was
+ part of a template argument list.
+
Fixed some more parse problems that occurred when parsing base classes
+ that were nested templates.
+
variables whose name started
+ with an _ like struct {int x; } _var;
+ where not properly parsed.
+
LaTeX formulas did not work in the brief description of a JavaDoc
+ style block that was put after an item.
+
Empty group definitions were not properly handled.
+
References to pages using \ref did not work in LaTeX.
+
Members that are typedef's to classes are now shown in the
+ collaboration diagram.
+
+
+
+
Doxygen Release 1.1.4
+
+
Changes
+
+
The member definition that is put before the detailed
+ documentation section should now be layouted a bit better for members
+ of classes with lots of template arguments.
+
The HTML pages now have a new doxygen logo at the bottom. This logo has
+ a transparent background and no shadow or anti-aliasing, so it looks
+ equally nice on all backgrounds.
+
If the first member of a member group is documented, this documentation
+ is now repeated for all undocumented members of that group.
+
The following is now treated as one parameter list with two
+ parameters, instead of two lists with one parameter each.
+
+ /*!
+ * @param a the first parameter
+ *
+ * @param b the second parameter
+ */
+
+ The same goes for the @retval and @exception commands.
+
+
New features
+
+
In code fragments: added different colors for keywords that are
+ types, and for keywords that deal with the flow control.
+ Also added colors for string and character literals.
+
Added a new command \nosubgrouping that can be put in the documentation
+ of a class. It can be used in combination with member-grouping
+ to avoid that doxygen puts a member group as a subgroup of a
+ Public/Protected/Private/... section.
+
+ Example:
+
+ /*! A class.
+ * \nosubgrouping
+ */
+ class Test
+ {
+ public:
+ /*! \name A member group
+ */
+ //@{
+ /*! Docs for both members in the group. */
+ void Member1();
+ void Member2();
+ //@}
+ /*! A member outside of the group. */
+ void Member3();
+ };
+
+
Added three new configuration options:
+
+
WARN_IF_UNDOCUMENTED which can be used to turn on or off warning
+ message related to undocumented entities. This works independently
+ of the WARNING tag, which is there to enable/disable all
+ other warning messages.
+
WARN_FORMAT which can be used to specify the format of the warnings
+ produced by doxygen. The argument is a free form string
+ that must contain a $file, $line and $text marker.
+ The $file and $line markers will be replaced by the file name and line
+ number from where the warning originated.
+ The $text marker will be replaced by the actual warning text.
+ The default argument format string is: "$file:$line: $text".
+
DOT_PATH that can be used to specify the path
+ where the dot tool is to be found, in case it is not in the
+ default search path.
+
+
Added rudimentary support for using declarations. The following
+ now works:
+
+ /*! Docs for the namespace. */
+ namespace N
+ {
+ /*! Docs for class Test. */
+ class Test
+ {
+ public:
+ void func();
+ };
+ };
+
+ using N::Test;
+
+ /*! The documentation for func is here */
+ void Test::func() {}
+
+ Using of individual functions remains unsupported.
+
collaboration and include dependency graph are now also included
+ in the LaTeX documentation.
+
Thanks to Tim Mensch, doxygen has now has a \todo command, which
+ can be used put todo items in the documentation.
+ All items will automatically be cross-referenced with a
+ (generated) todo list. Here is an example:
+
+ /*! \mainpage
+ * \todo write something useful here.
+ */
+
+ /*! A class
+ * \todo Add more comments here
+ */
+ class Test
+ {
+ public:
+ //! \todo implement this function
+ void func();
+
+ /*! Computes stuff.
+ * \todo can we combine this with Test::func()?
+ * More docs.
+ */
+ void func2();
+ };
+
+
+ Note that the arguments of the \todo command ends at the end of the
+ line.
+
membergroups in files can now also be header-less. Example:
+
The `explicit' and `mutable' keywords are now recognized as
+ member attributes instead of return types.
+
the index page is now added to the HTML help contents.
+
In case "no matching member" is found, a list of possible
+ (but non-matching) candidates is generated along with the warning.
+ This makes it much easier to see what's wrong.
+
added two new commands:
+
+
\hideinitializer which can be put in the documentation to
+ a variable or the define to hide the initializer or define value.
+
\showinitializer which can be used to explicitly show the
+ initializer of a variable or the value of a define even if it
+ is longer than 30 lines.
+
+
+
Bug fixes
+
+
Fixed a lock-up problem, that occurred when
+ parsing a code fragment containing something like:
+
+ //
+ /*!
+ blah
+ */
+
+ while STRIP_CODE_COMMENTS was set to NO
+
The auto list feature was still broken.
+ Due to a bad scanner rule, things like -1 at the start of a line
+ were treated as a list items (again) and a list at the end of a
+ comment block did not always work either.
+
If an non-existent config file was specified, the directories
+ "html", "man" and "latex" were created anyway.
+
A fragment like: os << ">" was misinterpreted
+ by doxygen's code parser.
+
Parameter declarations that differ only in the presence or absence
+ of const and/or volatile are now treated as equivalent, as is
+ dictated by the C++ standard.
+
The inline function body was wrong in the following example:
+
+ void f(
+ int i ///< Parameter
+ )
+ {
+ return 1;
+ }
+
+ Thanks to Alexander Gidon for the fix.
+
typedef'ed classes are now also resolved in code fragments
+ (again thanks to Alexander).
+
Fixed a bug related to base classes with nested template specifiers,
+ like class SB in the following:
+
+ template <class T> class C {};
+ template <class T> class S {};
+ template <class T> class SB {};
+ template <class T> class S<C<T> > : public SB<C<T> > {};
+
+
#includes in code fragments where not hyperlinked. Operator
+ methods were also not correctly recognised.
+
C/C++ comments inside initializers where not handled properly.
+
If the type of an argument of a member definition was prefixed
+ with a (redudant) scope name of an indirect base class,
+ then it was not matched against the member declaration if that
+ omitted the scope.
+
\name did not work within //! comments
+
When FULL_PATH_NAMES was set to YES, doxygen did no longer
+ distinguish between files with the same name (but in
+ different directories).
+
The file match routine now does an case-insensitive lookup
+ if CASE_SENSE_NAMES = NO. Hopefully this is enough to
+ let doxygen ignore case differences in file names on Windows.
+
The constructors and destructors of classes inside namespaces
+ or other classes did not end up in the constructor/destructor
+ section of the documentation.
+
If an environment variable in the config file starts with a space
+ followed by a list of words, the space ends up in the first word
+ after expansion.
+
A <table> inside a JavaDoc style comment block caused a bogus
+ warning.
+
Using member groups could result in an empty list generated in
+ LaTeX, causing a error while compiling the documentation.
+
Fixed a missing stdlib.h problem in doxywizard, which occurred
+ on non-Linux systems.
+
The generation of dot include graphs did not work properly in
+ case file names with space were used.
+
back-references from source-lines to documentation only worked for
+ those members of a member group that were explicitly documented.
+
doxygen did not distriguish between func(int a) and func(int a[])
+ which could cause documentation to end up at the wrong member
+ in case over overloading.
+
+
+
+
+
Doxygen Release 1.1.3
+
+
Changes
+
+
Changed the way anonymous enums are handled: they are now handled
+ just like named enums, which makes the "Enumeration Values" section
+ obsolete.
+
If
+
+ /*! \file */
+
+ is put into a file (thus without further documentation) then the
+ file is treated as being documented.
+
+
New features
+
+
Doxygen now has a GUI frontend to create and edit the configuration
+ file. It is called doxywizard. To build it from sources use:
+
+ ./configure --with-doxywizard
+
+ The front-end requires Qt 2.x to build. I've only tested with Qt-2.1.
+ Sources can be found in the addon directory.
+
To make it very easy to add new configuration options, doxygen
+ now has an additional tool called configgen. All options supported
+ by doxygen are now located in one place (in configgen.cpp).
+ From this the configuration parser and part of the GUI are
+ generated. You only need configgen if you want to add new options
+ to doxygen. Thanks go to Joerg Baumann for providing the ideas
+ and part of the code.
+
Added a bit of syntax highlighting to the generated source
+ fragments in HTML (only keywords, comments and preprocessor directives
+ are colored for now). The font color & style is determined by
+ the style sheet, so it is easy to customize :-)
+
Typedefs of classes are now resolved when the inheritance
+ and usage relation of classes is determined.
+
Waechter Parker made the following improvements on the RTF generator:
+
+
Now it uses the translator for the table of contents entry names
+ for the sections.
+
writeSection now puts braces around the entry so the formatting
+ doesn't get messed up so easily.
+
removed extra newline in startDescList
+
writeSectionRef now writes out "title (p.pagnum)" like it should.
+
writeSectionRefAnchor now just calls writeSectionRef.
+
+
Doxygen's preprocessor now supports the non-ANSI "#else if"
+ preprocessor construction, which some other preprocessors seem to
+ accept as well.
+
Boris Bralo added language support for the Croatian language.
+ Nickolay Semyonov has finished the translation to Russian, which is
+ now included.
+
Added documentation for the commands \if and \endif, the
+ configuration tag ENABLED_SECTIONS, and the ways to groups
+ things together.
+
In the brief part of a JavaDoc style comment block,
+ putting a backslash after a space, prevents switching to the
+ detailed description. Example: i.e.\ this.
+
Class diagrams can now also be rendered with dot by setting
+ CLASS_GRAPH to YES (this will disable the build-in class graphs).
+ The advantages:
+
+
More compact diagrams.
+
Correctly looking diagrams in case of virtual inheritance.
+
A more consistent look w.r.t. the other graphs.
+
+
Groups can now contain namespaces and other groups.
+
operator% caused problems with LaTeX when PDF_HYPERLINKS was set to YES.
+
+
Bug fixes
+
+
\c func() did not autolink to function "func" anymore.
+
template members with multiple arguments were misaligned
+ in the HTML output.
+
Since 1.1.2, environment variable expansion in the config
+ file always resulted in a single string for each expanded variable
+ (just as if quotes were put around the environment variable).
+ The old behaviour is restored again.
+
removed redundant spaces in the man page output and fixed the
+ tab alignment in code fragments.
+
typedef ( bla::*proc)(); was not properly parsed because of the
+ space after the first opening bracket.
+
fixed a problem in the namespace strip routine that could potentially
+ lock up doxygen.
+
Long pre-initialized arrays ended up in the documentation.
+
Friend functions that were documented at the declaration were
+ cross-referenced to the wrong file when using SOURCE_BROWSER=YES.
+
When EXTRACT_ALL=YES was used, classes that were
+ documented with \class appeared twice in the namespace documentation.
+
Setting HIDE_UNDOC_CLASS=YES could result in an incorrectly
+ indented textual class hierarchy. This should now be fixed.
+
Members with very long return types caused all member names to
+ be pushed to the right in the HTML documentation
+ (if HTML_ALIGN_MEMBERS was YES). Now some line breaks are inserted
+ at the proper places.
+
A couple of people reported that doxygen crashed while it was generating
+ dot graphs. The cause was likely to be multiple frees of the same
+ pointer (but I have not been able to reproduce the crash myself).
+ I've now reimplemented the deletion routine of the dot graph
+ respresentation, which hopefully fixes this problem.
+
Elements of the configuration options in lists, which used quotes
+ were broken up into smaller pieces anyway. This most notably broke
+ PREDEFINED in some cases that worked before.
+
Detailed description was present for classes, files and namespaces
+ even if there was only a brief description and REPEAT_BRIEF was NO.
+
LaTeX: For German output "deutsch" was used as an option for the babel
+ package, while it should be "german". For Russian output an encoding
+ option is added.
+
The inheritance relation was incorrect for the inner class of B in the
+ following situation:
+
+ template <class T> class A { public: class inner { }; };
+ template <class T> class B : public A<T>
+ { public: class inner : public A<T>::inner { }; };
+
+
Fixed a bug that prevented the header links of the search engine
+ from working.
+
Undocumented classes & enums made it in the file documentation even if
+ HIDE_UNDOC_MEMBERS was set to YES.
+
Backslashes in includes like
+
+ #include "..\blah.h"
+
+ did not end up in the include dependency graph.
+
If ALPHABETICAL_INDEX=YES but there were no documented classes, part
+ of the LaTeX output (doxygen.sty a.o.) was not generated
+ (Thanks to Markus Lepper for reporting this).
+
Doxygen can now match arguments containing an explicit namespace
+ qualifier against arguments containing an implicit qualitifier
+ (i.e. imported via a using directive).
+ An example (thanks to Karl Stroetmann):
+
+ /*! a class */
+ class Test
+ {
+ public:
+ void resolve(const std::vector<int>&);
+ };
+ using namespace std;
+ /*! a member */
+ void Test::resolve(const vector<int>&) {}
+
+
Template specifiers are now shown in dot generated
+ collaboration graphs.
+
+
+
Doxygen Release 1.1.2
+
+
Changes
+
+
Having the source browser set to YES does not longer imply that
+ a member with a reference to the sources is automatically documented.
+
Base classes are shown in declaration order in the class diagrams
+
The arguments of a function now each get their own
+ line in the header above the detailed description. This makes
+ function with lots of argument much more readable.
+
Changed the look of the LaTeX output a bit.
+
+
New features
+
+
Thanks to Joerg Baumann, doxygen now has two new commands:
+
+
\if label
+
\endif
+
+ These commands can be used to create conditional documentation blocks.
+ Sections are disabled by default. To enable them add a guarding
+ "label" to the ENABLED_SECTIONS tag in the config file.
+ Conditional blocks can be nested.
+ Example:
+
+ /*! Normal docs.
+ * \if Cond1
+ * Only included if Cond1 is set.
+ * \endif
+ * \if Cond2
+ * Only included if Cond2 is set.
+ * \if Cond3
+ * Only included if Cond2 and Cond3 are set.
+ * \endif
+ * More text.
+ * \endif
+ * Unconditional text.
+ */
+
+
Again thanks to Joerg Baumann, URLs and mail addresses are now
+ hyperlinked in the PDF output
+ (=latex with PDF_HYPERLINKS = YES).
+
Added support for member grouping. I reimplemented this
+ from scratch. I decided to follow the doc++ syntax for the member
+ grouping. Here are two examples.
+
+ Usage: A group is defined by a //@{ .. //@} block
+ (or /*@{*/../*@}*/ if
+ you're addited to C style comments :-) Nesting of groups is not
+ allowed. Before the opening marker of a block a separate comment
+ block should be placed. This block should contain the @name
+ (or \name) command to specify the header of the group.
+
+
+ If all members of a user defined member group are in same section
+ (for instance all are public methods), then the group as a whole
+ will be listed as subsection of that section.
+
+
+ Example1: Two ways to grouping member of a class
+
+
+ /** A class. Details */
+ class Test
+ {
+ public:
+ /** @name Group1
+ * Description of group 1. Details.
+ */
+ //@{
+ /** Function 1 in group 1. Details. */
+ void func1InGroup1();
+ /** Function 2 in group 1. Details. */
+ void func2InGroup1();
+ //@}
+
+ void func1InGroup2();
+ void func2InGroup2();
+ /** Function without group. Details. */
+ void ungroupedFunction();
+ };
+
+ void Test::func1InGroup1() {}
+ void Test::func2InGroup1() {}
+
+ /** @name Group2 */
+ //@{
+ /** Function 2 in group 2. Details. */
+ void Test::func2InGroup2() {}
+ /** Function 1 in group 2. Details. */
+ void Test::func1InGroup2() {}
+ //@}
+
+
+ Example2: Combining member groups with @defgroup.
+
+
+ /** @defgroup globals Global Functions
+ * Functions that may be used in any translation unit.
+ */
+
+ /** @name Debug Functions */
+ /*@{*/
+
+ /** @ingroup globals
+ * debug printf function.
+ */
+ void debugPrint(const char *s /**< the message to print. */
+ );
+
+ /** @ingroup globals
+ * assert function.
+ */
+ void my_assert(const char *f, /**< current file. */
+ int l, /**< current line. */
+ BOOL e /**< expression to evaluate. */
+ );
+ /*@}*/
+
+ /** @name Test Functions */
+ /*@{*/
+
+ /** @ingroup globals
+ * test on-board memory.
+ * @returns TRUE if successful.
+ */
+ bool testRam();
+
+ /** @ingroup globals
+ * perform CPU self-test.
+ * @returns TRUE if successful.
+ */
+ bool testCPU();
+
+ /*@}*/
+
+
Documented variables (e.g. constants) that are used as initializers
+ of function parameters are now also cross-referenced.
+
Lucas Cruz sent an update for the Spanish translation. This is now
+ included. Jens Breitenstein sent an update for the German translation.
+ Philippe Lhoste sent some bug fixes for the French translation.
+ Alessandro Falappa sent an updated of the Italian translation, which
+ is now included. Nickolay Semyonov added initial support for the
+ Russian language. I updated the Dutch translation.
+
Thanks to Matthias Andree, the doxygen source package
+ now contains a .spec file. This can be used to build an .rpm package
+ for doxygen.
+ doing:
+
+ rpm -ta doxygen-x.y.z.src.tar.gz
+
+ will create the rpm (in /usr/src/packages/RPMS/i386/ on my machine).
+ Running rpm -Uhv as root on the .rpm file will
+ install/update doxygen.
+ After that you can use rpm -e doxygen to uninstall it again.
+
Umlauts and other accents in the documentation now appear properly in
+ generated RTF output.
+
+
Bug fixes
+
+
Fixed bug in the generated config file (LATEX_BATCHMODE)
+
When updating the config file, TAB_SIZE and
+ COLS_IN_ALPHA_INDEX
+ were reset to their default values. Environment variables in
+ the config file are no longer replaced by their value when updating
+ the config file.
+
The version.cpp file is now automatically updated when creating
+ a source/cvs package.
+
The types of arguments that are prefixed with a namespace scope
+ are now be matched against non-prefixed names. Example:
+
+ namespace std { class string {}; }
+ //! A class
+ class Test {
+ public:
+ void test(std::string a);
+ };
+ using std::string;
+ //! A member
+ void Test::test(string a);
+
+ Note: The namespace definition has to be part of the
+ input sources for this to work!
+
Fixed a bug in structure of the graphical class hierarchy
+ (thanks to Paul Bohme for pointing me at this bug)
+
Non-function members can now also be documented if they
+ are inside annonymous namespaces, which themselves are nested in
+ named namespaces.
+
#defines can now grouped with \defgroup and \ingroup as well.
+
fixed a bug in the latex output of groups (thanks to Gregory Kurz
+ for reporting this)
+
Doing a \ref to a \anchor in an example did not work.
+
static file & namespace members were cross-referenced even though
+ they were not visible if EXTRACT_PRIVATE is set to NO.
+
The following code fragment made doxygen crash, because the
+ table was split between the brief and detailed section:
+
+ /** <table><tr><td>a. </td><tr></table> */
+ class Test {};
+
+ Doxygen now ends the brief description when a <table> tag is encountered.
+
\c and \b now also accept numbers and other printable characters,
+ instead of only identifiers.
+
Autolinking did not work if a member with arguments was specified
+ in the documentation and that member had a const or volatile postfix
+ in the code. Autolinking did not also not work if a member with
+ arguments contained digits (thanks to Fred Labrosse for pointing me
+ at this bug).
+
The first line was missed if @code was used for generating man pages.
+ (Thanks to Joe Bester for the patch).
+
\link create_link(long,int&) bla \endlink
+ now works (doxygen was confused by the arguments before).
+
A brief description after a function definition, followed by a detailed
+ description now works as expected. Example:
+
Multi-line brief descriptions after a function declaration or definition
+ now work as excepted. Example:
+
+ bool func()
+ //!< Brief.
+ //!< More brief.
+
+
\latexonly fragments were put on a single line causing problems
+ when latex comments (%'s) are used.
+
The license file that came with doxygen was of LGPL, while it
+ should be GPL. The correct license file is included now.
+
The heading of the alphabetical index was duplicated if
+ classes were present in both upper and lower case.
+
If ENABLE_PREPROCESSING=NO and the INPUT_FILTER was used, doxygen
+ did not filter properly can could even block on input!
+
Internationalization should now output proper characters with qt-2.1x.
+
If namespace contained a function prototype & a function definition
+ they both ended up in the documentation.
+
<table> without </table> could cause doxygen to crash. Now a
+ warning is given.
+
Multiline variable and enum initializers with lots of spaces were
+ shown in an ugly way.
+
+
+
+
+
Doxygen Release 1.1.1
+
+
Changes
+
+
"Reimplements" for a member now points to the most direct
+ base class that overrides the member instead of the base
+ class containing the vtable.
+
classes, namespaces, and members are now sorted
+ in a case insensitive way (like in a dictionary).
+ Was case sensitive.
+
Kenji Nagamatsu has send me an update for the Japanese translation
+ which is now included.
+
+
New features
+
+
new option SHOW_INCLUDE_FILES, which can be set to NO to turn of the
+ list of include files that is generated for each documented file.
+
new option STRIP_CODE_COMMENTS, which can be set to NO to keep any
+ special comment blocks in the generated code fragments.
+
Added a new tag to the configuration file: SORT_MEMBER_DOCS. If this
+ is set to NO the member documentation will appear in declaration
+ order (as was the case with version 1.0.0 and older).
+
Corba IDL exceptions are now also supported by doxygen.
+ If you do not want to put the documentation in front of the
+ exception you can use \idlexcept command which behaves like \class.
+
Local file:/// URLs are now automatically linked when put in the
+ documentation.
+
For \class and other structural commands you can now use
+ a backslash (\) at the end of a line to continue the command on
+ the next line.
+ Example:
+
"make distclean" now removes all generated stuff and results in a
+ package that is more clean than a normal source package
+ (i.e. the generated flex & bison code is removed).
+
Added command \note (and @note) for a "Note:" paragraph.
+
Multi arguments can now be given as a comma separated list
+ after a \param or \retval command. Example:
+
+ void Zoom( int aX1, int aY1, int aX2, int aY2 );
+ /*! Zoom into the data.
+ * \param aX1, aY1 Upper left corner.
+ * \param aX2, aY2 Lower right corner.
+ */
+
+
Added 9 new class declaration sections:
+ Public/Protected/Private Types, for member typedefs & variables.
+ [Static] Public/Protected/Private Attributes, for member variables.
+
Doxygen now has a new command line option -u, that can be used
+ to upgrade an old configuration file without losing the values that
+ where edited. In combination with the -s option this can also be used
+ to strip comments from or add comments to a configuration file.
+
Added a new tag LATEX_BATCHMODE that makes latex run in batch mode.
+ This will run latex non-interactively, and not stop at the first
+ problem encountered. If the tag is enabled this mode will also be
+ used when generation formulas for inclusion in the HTML documentation.
+
The \ingroup command can now also be used to group a number of
+ members. The only limitation is that a member can currently be in
+ one group only (classes, files & namespaces do
+ not have this limitation).
+
+
Bug fixes
+
+
The graphical class hierarchy was not properly generated when
+ template classes were used.
+
Template specialization could not be documented using the
+ \class command. This is now fixed. Example:
+
+ /*!
+ * \class T<A,int>
+ * My template specialization of template T.
+ */
+
+
Fixed a bug when parsing M$-IDL code, containing
+ helpstring("bla") attributes. The attributes of a method are no longer
+ shown in the documentation (the attributes of method arguments
+ still visible however).
+
Improved the search algorithm that tries to connect classes with their
+ base classes. It should now (hopefully) work correct in all cases
+ where nested classes and/or namespaces are used.
+
Fixed a scanner problem that could cause doxygen to get
+ confused after parsing struct initializers.
+
the DOTFONTPATH environment variable is now automatically set
+ for Windows. This should make any "missing doxfont.ttf"
+ messages disappear.
+
the extra LaTeX packages specified with EXTRA_PACKAGES can now
+ also be used when generating formulas for HTML.
+
The documentation of a parameters that is part of a member definition,
+ is now used in the documentation as well.
+
Fixed a HTML output bug in the class/file group-pages.
+
Links to example files generated with \link ... \endlink where not
+ correct.
+
made the bullet list generation more robust. A space is now required
+ after the - sign. A list can now start a paragraph.
+
the configure script now detects whether or not dot is installed.
+
The VERBATIM_HEADERS option didn't have any effect any more.
+ It should now work again as advertised.
+
The IGNORE_PREFIX option can now also deal with a list of prefixes.
+
@verbatim ... @endverbatim blocks did not work.
+
removed some \n's from the systems calls that run dot. This appears to
+ cause problems for some people and was not what I intended anyway :^)
+
The following construct was not working:
+
+ namespace foo { class bar; }
+ /*! let's go to the bar */
+ class foo::bar { };
+
+
Members inside annonymous namespaces nested inside named namespaces
+ were not properly handled.
+
When documenting template specializations with the \class command,
+ the second argument was not interpreted correctly.
+
Interface inheritance relations are now always public for IDL
+ interfaces.
+
Templetized related functions showed a double `template' line.
+
Related function that had a declaration and a definition
+ also appeared in file documentation but without documentation.
+
Links to files of the include dependency graph were
+ non existent in some situations.
+
Removed warning generated for undocumented friend classes.
+
Class reference in the main page ended up in refman.tex
+
Source files were generated for files mentioned in tag files.
+
The graphical class hierarchy always contained all external class,
+ regardless of the ALLEXTERNALS flag.
+
operator~() was grouped with the constructor/destructors.
+
In a number of cases, documented include files, that were
+ shown in the include dependency diagram where not found to be
+ documented. As a result the diagram was often not clickable and
+ incomplete.
+
Fixed the graphical class hierarchy. Sometimes classes were missing.
+
Added support for the cpp_quote hack inside M$-IDL code.
+ /** \union XYZ
+ * \brief The XYZ union.
+ */
+ union XYZ switch ( ABC )
+ {
+ case A: D_VAR m_d; ///< Docs for a member in case A
+ case B: E_VAR m_e; ///< Docs for a member in case B
+ };
+
+
Classes documented with \class and using \ingroup where not always
+ put into the group.
+
In Latex & RTF references to undocumented files where put in the
+ index.
+
+
+
Doxygen Release 1.1.0
+
Changes
+
+
Static file members are now hidden if EXTRACT_PRIVATE is set to NO.
+
the documentation of members in the class/file descriptions are now
+ alphabetically sorted by member name for each section. There is a new
+ section for constructors & destructors.
+
merged file, header and source indices into one file index.
+ As a result, doxygen will generate a hyperlinked source code only
+ once. This should greatly increase speed and reduce memory usage
+ for large projects.
+
+
+
New features
+
+
Thanks to Parker Waechter, doxygen now has a new output format: RTF.
+ This is Microsoft's "portable" document format. Due to the great
+ "portability" of this format the output produced by doxygen will
+ probably only look nice with Microsoft's Word 97.
+
+ RTF is currently disabled by default. You can set GENERATE_RTF to
+ YES to enable it. The directory where the RTF output is put, can
+ be specified using the RTF_OUTPUT tag in the configuration file.
+ COMPACT_RTF can be enabled to generate more compact RTF.
+ RTF_HYPERLINKS can be used to generate HTML like cross references
+ in the document.
+
Doxygen can now use the "dot" tool from graphviz 1.5, which is an
+ open-sourced, cross-platform graph drawing toolkit from AT&T and
+ Lucent Bell Labs.
+
+ Graphviz can be found at
+ https://www.graphviz.org/
+ If you have the "dot" tool available in the path, you can set
+ HAVE_DOT to YES in the configuration file to let doxygen use it.
+
+ Doxygen uses the "dot" tool to generate the following graphs:
+
+
+
if GRAPHICAL_HIERARCHY is set to YES, a graphical representation
+ of the overall inheritance diagram will be drawn,
+ along with the textual one (currently supported for HTML only).
+
if INCLUDE_GRAPH is set to YES, an include dependency graph
+ is generated for each documented file that includes at least one
+ other file (currently supported for HTML and RTF only).
+
if COLLABORATION_GRAPH is set to YES, a graph is drawn for each
+ documented class and struct that shows:
+
+
the inheritance relation with base classes
+ (using solid blue/green/red arrows, for public,protected,private
+ inheritance).
+
the containment relations with other structs
+ and class (using purple dashed arrows with variable names as labels)
+ (currently supported for HTML and RTF only)
+
+
+
+ For the include dependency graph and the collaboration graph,
+ doxygen will render a transitive closure of the relation. If
+ the diagram becomes too large (currently wider than 1024 pixels),
+ only the maximum graph depth (as seen from the root of the
+ graph) that still fits will be drawn. (the nodes that can still be
+ expanded are shown with a red border in this case).
+
+ For HTML all graphs are drawn as client side clickable image maps.
+
Each file now has a list the files it includes
+ (with links to the sources if available)
+
For class documentation it is now possible to choose how the
+ #include statement should look like
+ (i.e. like "stdio.h" or <stdio.h>).
+ This can be done using the third argument of
+ the \class command.
+ Example:
\class myclass myclass.h "mydir/myclass.h"
+
If the - character is used as the first character in a comment line
+ it is interpreted as an item of a bullet list. Subitems are also
+ possible. Here is an example:
+
+ /*!
+ * A list:
+ * - item 1
+ * - subitem 1
+ * - item 2
+ * - subitem 1
+ * - subsubitem
+ * - subitem 2
+ * - item 3
+ * - item 4
+ *
+ * Starting a new paragraph in a top level item ends the list!
+ */
+
+
+ Notice: tabs can be used for indenting, but the TAB_SIZE tag in the
+ configuration file must be set correctly!
+
Function/member arguments can now be documented, like this
+
+ /*! This function finds the first occurrence of a
+ * substring in a string.
+ */
+ char *strstr(const char *haystack, /*!< the string to search in. */
+ const char *needle) /*!< the substring to search for. */
+ {
+ }
+
+
Three new section commands \pre, \post and
+ \invariant are added to describe
+ preconditions, postcondictions and invariants respectively.
+
Variable/enum initializers and define definitions are
+ now included in documentation (unless the initializer/definition
+ is more than 30 lines long)
+
Added new configuration option IGNORE_PREFIX that can be
+ used to ignore a specified prefix while generating the alphabetical
+ class index.
+
+
+
Bug fixes
+
+
All defines were shown as function macros in the documentation section.
+
Fixed bug with parsing multi-line defines on Windows (\r problem).
+
Protection level of members inside nested anonymous compounds was not
+ set correctly.
+
Class diagram was not correct in case the same class was inherited
+ via two different paths (bug introduced in 1.0.0).
+
If a tag is specified two times in the config file, then the second
+ definition will correctly overwrite the value of the first occurrence.
+
For multiple defines with comments after them only the first was
+ cross-referenced with the sources.
+
Autolinks to #defines looked like function macro even if they weren't.
+
Members that were hidden deep in an inheritance tree, got multiple
+ scope prefixes in the "all members list", while a scope prefix to
+ the member in the base class was enough to use it unambiguishly.
+
\latexonly ... \endlatexonly in the main page produced
+ erroneous text in refman.tex
+
The keywords in header and footer were only evaluated once.
+
Formulas now also work in documentation blocks that are put after an
+ item.
+
The source code could produce links to the wrong class for
+ a code fragment like a.f() in
+ case two classes have the same member variable `a', but with a
+ different class types and those classes both had the member
+ function `f'.
+
array type arguments (like int a[2]) where not matched if the argument
+ name of declaration and definition were different.
+
memory in code.l is now returned at the appropriate times.
diff --git a/doc/commands.doc b/doc/commands.doc
index 12b85db8..3711e292 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -75,6 +75,7 @@ documentation:
\refitem cmdelse \\else
\refitem cmdelseif \\elseif
\refitem cmdem \\em
+\refitem cmdemoji \\emoji
\refitem cmdendcode \\endcode
\refitem cmdendcond \\endcond
\refitem cmdenddocbookonly \\enddocbookonly
@@ -106,6 +107,8 @@ documentation:
\refitem cmdheaderfile \\headerfile
\refitem cmdhidecallergraph \\hidecallergraph
\refitem cmdhidecallgraph \\hidecallgraph
+\refitem cmdhiderefby \\hiderefby
+\refitem cmdhiderefs \\hiderefs
\refitem cmdhideinitializer \\hideinitializer
\refitem cmdhtmlinclude \\htmlinclude
\refitem cmdhtmlonly \\htmlonly
@@ -174,6 +177,8 @@ documentation:
\refitem cmdsee \\see
\refitem cmdshort \\short
\refitem cmdshowinitializer \\showinitializer
+\refitem cmdshowrefby \\showrefby
+\refitem cmdshowrefs \\showrefs
\refitem cmdsince \\since
\refitem cmdskip \\skip
\refitem cmdskipline \\skipline
@@ -209,6 +214,7 @@ documentation:
\refitem cmdamp \\\&
\refitem cmdtilde \\~
\refitem cmdlt \\\<
+\refitem cmdeq \\=
\refitem cmdgt \\\>
\refitem cmdhash \\\#
\refitem cmdperc \\\%
@@ -306,7 +312,7 @@ Structural indicators
When this command is put in a comment block of a function or method
and \ref cfg_have_dot "HAVE_DOT" is set to \c YES, then doxygen will
generate a caller graph for that function (provided the implementation of the
- function or method calls other documented functions). The caller graph will be
+ function or method is called by other documented functions). The caller graph will be
generated regardless of the value of \ref cfg_caller_graph "CALLER_GRAPH".
\note The completeness (and correctness) of the caller graph depends on the
doxygen code parser which is not perfect.
@@ -332,6 +338,74 @@ Structural indicators
section \ref cmdhidecallgraph "\\hidecallgraph" and
option \ref cfg_caller_graph "CALLER_GRAPH"
+
+\section cmdshowrefby \\showrefby
+
+ \addindex \\showrefby
+ When this command is put in a comment block of a function, method or variable,
+ then doxygen will generate an overview for that function, method, variable of
+ the, documented, funcions and methods that call / use it.
+ The overview will be generated regardless of the value of
+ \ref cfg_referenced_by_relation "REFERENCED_BY_RELATION".
+ \note The completeness (and correctness) of the overview depends on the
+ doxygen code parser which is not perfect.
+
+ \sa section \ref cmdshowrefs "\\showrefs",
+ section \ref cmdhiderefby "\\hiderefby",
+ section \ref cmdhiderefs "\\hiderefs" and
+ option \ref cfg_referenced_by_relation "REFERENCED_BY_RELATION"
+
+
+\section cmdhiderefby \\hiderefby
+
+ \addindex \\hiderefby
+ When this command is put in a comment block of a function, method or variable
+ then doxygen will not generate an overview for that function, method or
+ variable of the functions and methods that call / use it.
+ The overview will not be generated regardless of the value of
+ \ref cfg_referenced_by_relation "REFERENCED_BY_RELATION".
+ \note The completeness (and correctness) of the overview depends on the
+ doxygen code parser which is not perfect.
+
+ \sa section \ref cmdshowrefs "\\showrefs",
+ section \ref cmdshowrefby "\\showrefby",
+ section \ref cmdhiderefs "\\hiderefs" and
+ option \ref cfg_referenced_by_relation "REFERENCED_BY_RELATION"
+
+
+\section cmdshowrefs \\showrefs
+
+ \addindex \\showrefs
+ When this command is put in a comment block of a function or method,
+ then doxygen will generate an overview for that function or method of the
+ functions and methods that call it.
+ The overview will be generated regardless of the value of
+ \ref cfg_references_relation "REFERENCES_RELATION".
+ \note The completeness (and correctness) of the overview depends on the
+ doxygen code parser which is not perfect.
+
+ \sa section \ref cmdshowrefby "\\showrefby",
+ section \ref cmdhiderefby "\\hiderefby",
+ section \ref cmdhiderefs "\\hiderefs" and
+ option \ref cfg_references_relation "REFERENCES_RELATION"
+
+
+\section cmdhiderefs \\hiderefs
+
+ \addindex \\hiderefs
+ When this command is put in a comment block of a function or method
+ and then doxygen will not generate an overview for that function or method of
+ the functions and methods that call it.
+ The overview will not be generated regardless of the value of
+ \ref cfg_references_relation "REFERENCES_RELATION".
+ \note The completeness (and correctness) of the overview depends on the
+ doxygen code parser which is not perfect.
+
+ \sa section \ref cmdshowrefs "\\showrefs",
+ section \ref cmdshowrefby "\\showrefby",
+ section \ref cmdhiderefby "\\hiderefby" and
+ option \ref cfg_references_relation "REFERENCES_RELATION"
+
\section cmdcategory \\category [] []
@@ -442,14 +516,15 @@ Structural indicators
\endlatexonly
-\section cmdexample \\example
+\section cmdexample \\example[{lineno}]
\addindex \\example
Indicates that a comment block contains documentation for a source code
- example. The name of the source file is \. The text of
- this file will be included in the documentation, just after the
- documentation contained in the comment block. All examples are placed
- in a list. The source code is scanned for documented members and classes.
+ example. The name of the source file is \.
+ The contents of this file will be included in the documentation, just after the
+ documentation contained in the comment block.
+ You can add option `{lineno}` to enable line numbers for the example if desired.
+ All examples are placed in a list. The source code is scanned for documented members and classes.
If any are found, the names are cross-referenced with the documentation.
Source files or directories can be specified using the
\ref cfg_example_path "EXAMPLE_PATH"
@@ -500,7 +575,6 @@ Structural indicators
\htmlonly
Click here
for the corresponding HTML documentation that is generated by doxygen.
-
\endhtmlonly
\latexonly
See \hyperlink{extends_example}{Extends example}
@@ -652,7 +726,6 @@ Structural indicators
\htmlonly
Click here
for the corresponding HTML documentation that is generated by doxygen.
-
\endhtmlonly
\latexonly
See \hyperlink{extends_example}{Implements example}
@@ -697,7 +770,7 @@ Structural indicators
command are considered to be internal as well. Only a new section at the
same level will end the fragment that is considered internal.
- You can use \ref cfg_internal_docs "INTERNAL_DOCS" in the config file
+ You can use \ref cfg_internal_docs "INTERNAL_DOCS" in the configuration file
to show (\c YES) or hide (\c NO) the internal documentation.
\sa section \ref cmdendinternal "\\endinternal".
@@ -1108,6 +1181,14 @@ Structural indicators
This command is equivalent to \ref cmdfn "\\fn",
\ref cmdproperty "\\property", and \ref cmdtypedef "\\typedef".
+ Note that for PHP one can also specify the type of the variable.
+ The syntax is similar as for the `phpDocumentor` but the description has to start
+ at the next line, i.e.
+\verbatim
+@var datatype $varname
+Description
+\endverbatim
+
\sa section \ref cmdfn "\\fn", \ref cmdproperty "\\property", and \ref cmdtypedef "\\typedef".
@@ -1281,6 +1362,8 @@ The output will be different depending on whether or not \ref cfg_enabled_sectio
contains \c TEST, or \c DEV
\sa sections \ref cmdendcond "\\endcond" and \ref cfg_enabled_sections "ENABLED_SECTIONS".
+ \note Due to the moment of parsing the \c \\cond and \ref cmdendcond "\\endcond" commands cannot
+ be used in \ref cfg_aliases "ALIASES".
\section cmdcopyright \\copyright { copyright description }
@@ -1357,6 +1440,8 @@ contains \c TEST, or \c DEV
Ends a conditional section that was started by \ref cmdcond "\\cond".
\sa section \ref cmdcond "\\cond".
+ \note Due to the moment of parsing the \c \\endcond and \ref cmdcond "\\cond" commands cannot
+ be used in \ref cfg_aliases "ALIASES".
\section cmdendif \\endif
@@ -1571,7 +1656,7 @@ void setPosition(double x,double y,double z,double t)
Note that for PHP one can also specify the type (or types if you
separate them with a pipe symbol) which are allowed for a parameter
(as this is not part of the definition).
- The syntax is the same as for phpDocumentor, i.e.
+ The syntax is the same as for the `phpDocumentor`, i.e.
\verbatim
@param datatype1|datatype2 $paramname description
\endverbatim
@@ -1875,7 +1960,7 @@ Commands to create links
\section cmdaddindex \\addindex (text)
\addindex \\addindex
- This command adds (text) to the \LaTeX index.
+ This command adds (text) to the \LaTeX , DocBook and RTF index.
\section cmdanchor \\anchor
@@ -2016,15 +2101,23 @@ Make sure you have first read \ref intro "the introduction".
\endverbatim
-\section cmdtableofcontents \\tableofcontents
+\section cmdtableofcontents \\tableofcontents['{'[option[:level]][,option[:level]]*'}']
\addindex \\tableofcontents
Creates a table of contents at the top of a page, listing all
- sections and subsections in the page.
+ sections and subsections in the page. The `option` can be `HTML` or `LaTeX`
+ or `XML` or `DocBook`. When a `level` is specified this means the maximum nesting level
+ that is shown. The value of `level` should be in the range 1..5, values outside
+ this range are considered to be 5. In case no `level` is specified `level` is
+ set to 5 (show all)
+ In case no `option`. is specified \c \\tableofcontents acts as if just the
+ `option` `HTML` and `XML` was specified. In case of multiple \c \\tableofcontents
+ commands in a page the `option`(s) will be used additional to the already
+ specified `option`(s), but only the last `level` of an `option` is valid.
\warning This command only works inside related page documentation and
\e not in other documentation blocks and only has effect in the
- HTML output!
+ the specified output!
\section cmdsection \\section (section title)
@@ -2131,16 +2224,12 @@ Commands for displaying examples
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
- Alternatively, the \ref cmdsnippet "\\snippet" command can be used to
- include only a fragment of a source file. For this to work the
- fragment has to be marked.
-
\sa sections \ref cmdline "\\line", \ref cmdskip "\\skip",
\ref cmdskipline "\\skipline", \ref cmduntil "\\until", and
\ref cmdinclude "\\include".
-\section cmdinclude \\include
+\section cmdinclude \\include[{lineno|doc}]
\addindex \\include
This command can be used to include a source file as a block of code.
@@ -2174,33 +2263,38 @@ Commands for displaying examples
\note Doxygen's special commands do not work inside blocks of code.
It is allowed to nest C-style comments inside a code block though.
+ You can add option `{lineno}` to enable line numbers for the included code if desired.
+
+ You can add option `{doc}` to treat the file as documentation rather than code.
+
+ \note Some that when using the `{doc}` option,
+ commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
+ this command due to the moment of parsing.
+
+ \note The included documentation should not have comment signs in it as they will appear
+ in the documentation as well.
+
\sa sections \ref cmdexample "\\example", \ref cmddontinclude "\\dontinclude",
- \ref cmdverbatim "\\verbatim" and \ref cmdincludedoc "\\includedoc".
+ \ref cmdverbatim "\\verbatim", \ref cmdincludedoc "\\includedoc", and
+ \ref cmdsnippet "\\snippet".
\section cmdincludelineno \\includelineno
\addindex \\includelineno
- This command works the same way as \ref cmdinclude "\\include", but will add line
- numbers to the included file.
+ This command is obsolete and is still supported for backward compatibility reasons,
+ it works the same way as \ref cmdinclude "\\include{lineno}"
- \sa sections \ref cmdinclude "\\include" and \ref cmdsnippetlineno "\\snippetlineno".
+ \sa sections \ref cmdinclude "\\include{lineno}".
\section cmdincludedoc \\includedoc
\addindex \\includedoc
- This command works the same way as \ref cmdinclude "\\include", but it will include
- the content of the file as if it were at the place where this command is called.
- The result is that the content is parsed by doxygen and placed in the documentation.
-
- \note Some commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
- this command due to the moment of parsing.
+ This command is obsolete and is still supported for backward compatibility reasons,
+ it works the same way as \ref cmdinclude "\\include{doc}"
- \note The included documentation should not have comment signs in it as they will appear
- in the documentation as well.
-
- \sa section \ref cmdinclude "\\include".
+ \sa section \ref cmdinclude "\\include{doc}".
\section cmdline \\line ( pattern )
@@ -2258,7 +2352,7 @@ Commands for displaying examples
See section \ref cmddontinclude "\\dontinclude" for an example.
-\section cmdsnippet \\snippet ( block_id )
+\section cmdsnippet \\snippet[{lineno|doc}] ( block_id )
\addindex \\snippet
Where the \ref cmdinclude "\\include" command can be used to include
@@ -2301,34 +2395,37 @@ Commands for displaying examples
Note also that the [block_id] markers should appear exactly twice in the
source file.
+ You can add option `{lineno}` to enable line numbers for the snippet if desired.
+
+ You can add option `{doc}` to treat the file as documentation rather than code.
+
+ \note Some that when using the `{doc}` option,
+ commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
+ this command due to the moment of parsing.
+
+ \note The included documentation should not have comment signs in it as they will appear
+ in the documentation as well.
+
see section \ref cmddontinclude "\\dontinclude" for an alternative way
to include fragments of a source file that does not require markers.
- \sa section \ref cmdsnippetdoc "\\snippetdoc" and \ref cmdsnippetlineno "\\snippetlineno".
\section cmdsnippetlineno \\snippetlineno ( block_id )
\addindex \\snippetlineno
- This command works the same way as \ref cmdsnippet "\\snippet", but will add line
- numbers to the included snippet.
+ This command is obsolete and is still supported for backward compatibility reasons,
+ it works the same way as \ref cmdsnippet "\\snippet{lineno}"
- \sa sections \ref cmdsnippet "\\snippet" and \ref cmdincludelineno "\\includelineno".
+ \sa sections \ref cmdsnippet "\\snippet{lineno}"
\section cmdsnippetdoc \\snippetdoc ( block_id )
\addindex \\snippetdoc
- This command works the same way as \ref cmdsnippet "\\snippet", but it will include
- the content of the file between the `block-id`s as if it were at the place where this command is called.
- The result is that the content is parsed by doxygen and placed in the documentation.
+ This command is obsolete and is still supported for backward compatibility reasons,
+ it works the same way as \ref cmdsnippet "\\snippet{doc}"
- \note Some commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
- this command due to the moment of parsing.
-
- \note The included documentation should not have comment signs in it as they will appear
- in the documentation as well.
-
- \sa section \ref cmdsnippet "\\snippet" and \ref cmdincludedoc "\\includedoc".
+ \sa section \ref cmdsnippet "\\snippet{doc}" and \ref cmdinclude "\\include{doc}".
\section cmduntil \\until ( pattern )
@@ -2359,7 +2456,7 @@ Commands for displaying examples
\ref cfg_example_path "EXAMPLE_PATH" tag of doxygen's configuration file.
-\section cmdhtmlinclude \\htmlinclude
+\section cmdhtmlinclude \\htmlinclude ["[block]"]
\addindex \\htmlinclude
This command includes the file \ as is in the HTML documentation.
@@ -2367,9 +2464,17 @@ Commands for displaying examples
placing \ref cmdhtmlonly "\\htmlonly" and \ref cmdendhtmlonly "\\endhtmlonly"
commands around it.
+ Normally the contents of the file indicated by \ref cmdhtmlinclude "\\htmlinclude"
+ is inserted as-is. When you
+ want to insert a HTML fragment that has block scope like a table or list
+ which should appear outside \
..\
, this can lead to invalid HTML.
+ You can use \\htmlinclude[block] to make doxygen
+ end the current paragraph and restart after the file is included.
+
Files or directories that doxygen should look for can be specified using the
\ref cfg_example_path "EXAMPLE_PATH" tag of doxygen's configuration file.
+ \sa section \ref cmdhtmlonly "\\htmlonly".
\section cmdlatexinclude \\latexinclude
@@ -2583,7 +2688,7 @@ only copy the detailed documentation, not the brief description.
\addindex \\docbookonly
Starts a block of text that will be verbatim included in the
- generated docbook documentation only. The block ends with a
+ generated DocBook documentation only. The block ends with a
\ref cmdenddocbookonly "\\enddocbookonly" command.
\sa section \ref cmdmanonly "\\manonly",
@@ -2638,6 +2743,22 @@ class C {};
*/
\endcode
+
+\section cmdemoji \\emoji "name"
+
+This command will produce an emoji character given its name.
+
+The supported names are the ones also supported by GitHub and listed here
+https://gist.github.com/rxaviers/7360908
+
+You can use the name with or without colons, i.e.
+`\emoji smile` is the same as writing `\emoji :smile:`.
+When an emoji is not supported the name with by places in the
+text with in between colons, i.e. `\emoji unsupported` will produce
+`:unsupported:` in the output. Doxygen will also give a warning message.
+
+See also the \ref emojisup "emoji support page" for details.
+
\section cmdmsc \\msc ["caption"] [=]
@@ -3028,11 +3149,12 @@ class Receiver
\sa section \ref cmdmanonly "\\manonly",
\ref cmdlatexonly "\\latexonly",
\ref cmdrtfonly "\\rtfonly",
- \ref cmdxmlonly "\\xmlonly", and
- \ref cmddocbookonly "\\docbookonly".
+ \ref cmdxmlonly "\\xmlonly",
+ \ref cmddocbookonly "\\docbookonly", and
+ \ref cmdhtmlinclude "\\htmlinclude".
-\section cmdimage \\image ["caption"] [=]
+\section cmdimage \\image['{'[option]'}'] ["caption"] [=]
\addindex \\image
Inserts an image into the documentation. This command is format
@@ -3057,13 +3179,17 @@ class Receiver
spaces. The quotes are stripped before the caption is displayed.
The fourth argument is also optional and can be used to specify the
- width or height of the image. This can be useful for \LaTeX or docbook output
+ width or height of the image. This can be useful for \LaTeX or DocBook output
(i.e. format=latex or format=docbook).
\anchor image_sizeindicator \par Size indication
The \c sizeindication can specify the width or height to be used (or a combination).
The size specifier in \LaTeX (for example `10cm` or
`4in` or a symbolic width like `\\textwidth`).
+ Currently only the option `inline` is supported. In case the option `inline` is
+ specified the image is placed "in the line", when a caption s present it is shown
+ in HTML as tooltip (ignored for the other formats).
+
Here is example of a comment block:
\verbatim
@@ -3255,7 +3381,7 @@ class Receiver
\addindex \\\@
This command writes an at-sign (\c \@) to the output.
The at-sign has to be escaped in some cases
- because doxygen uses it to detect JavaDoc commands.
+ because doxygen uses it to detect Javadoc commands.
\section cmdtilde \\~[LanguageId]
@@ -3336,6 +3462,14 @@ class Receiver
or to prevent starting a numbered list when the dot follows a number at
the start of a line.
+
+\section cmdeq \\=
+
+ \addindex \\=
+ This command writes an equal sign (`=`) to the output. This
+ character sequence has to be escaped in some cases, because it is used
+ in Markdown header processing.
+
\section cmddcolon \\::
@@ -3399,4 +3533,3 @@ Go to the next section or return to the
\endhtmlonly
*/
-
diff --git a/doc/custcmd.doc b/doc/custcmd.doc
index de9a30d7..02805da8 100644
--- a/doc/custcmd.doc
+++ b/doc/custcmd.doc
@@ -16,7 +16,7 @@
*/
/*! \page custcmd Custom Commands
-\tableofcontents
+\tableofcontents{html,latex}
Doxygen provides a large number of \ref commands "special commands",
\ref xmlcmds "XML commands", and \ref htmlcmds "HTML commands".
@@ -44,6 +44,11 @@ Note that you can put `\n`'s in the value part of an alias to insert newlines
(in the resulting output). You can put `^^` in the value part of an alias to
insert a newline as if a physical newline was in the original file.
+Note when you need a literal `{` or `}` or `,` in the value part of an alias you have to
+escape them by means of a backslash (`\`), this can lead to conflicts with the
+commands \c \\{ and \c \\} for these it is advised to use the version \c @@{ and \c @@} or
+use a double escape (\c \\\\{ and \c \\\\})
+
Also note that you can redefine existing special commands if you wish.
Some commands, such as \ref cmdxrefitem "\\xrefitem" are designed to be used in
diff --git a/doc/customize.doc b/doc/customize.doc
index 9ef38919..7b2729d6 100644
--- a/doc/customize.doc
+++ b/doc/customize.doc
@@ -16,7 +16,7 @@
*/
/*! \page customize Customizing the output
-\tableofcontents
+\tableofcontents{html,latex}
Doxygen provides various levels of customization.
The section \ref minor_tweaks "Minor Tweaks" discusses what to
@@ -114,7 +114,7 @@ This will create 3 files:
referencing those extra files
via \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET".
-You should edit these files and then reference them from the config file.
+You should edit these files and then reference them from the configuration file.
- \ref cfg_html_header "HTML_HEADER" = \c header.html
- \ref cfg_html_footer "HTML_FOOTER" = \c footer.html
- \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET" = \c my_customdoxygen.css
@@ -158,7 +158,7 @@ doxygen -l
optionally the name of the layout file can be specified, if omitted
\c DoxygenLayout.xml will be used.
-The next step is to mention the layout file in the config file
+The next step is to mention the layout file in the configuration file
\verbatim
LAYOUT_FILE = DoxygenLayout.xml
\endverbatim
@@ -289,7 +289,12 @@ The following generic elements are possible for each page:
\c detaileddescription
Represents the detailed description on a page.
\c authorsection
-
Represents the author section of a page (only used for man pages).
+
Represents the author section of a page (only used for man pages). This is
+ a separate section for man pages with a text like:
+ `Generated automatically by Doxygen for My Project from the source code.`
+ This should not be misinterpreted with the doxygen commands \ref cmdauthor
+ "\\author" or \ref cmdauthors "\\authors" that generate an author paragraph
+ inside a detailed description.
\c memberdecl
Represents the quick overview of members on a page (member declarations).
This elements has child elements per type of member list.
diff --git a/doc/diagrams.doc b/doc/diagrams.doc
index 49be5d6c..a0b4285c 100644
--- a/doc/diagrams.doc
+++ b/doc/diagrams.doc
@@ -138,7 +138,6 @@ that doxygen can generate:
\include diagrams_e.h
\htmlonly
-
Click here
for the corresponding HTML documentation that is generated by doxygen
(EXTRACT_ALL = YES is used here).
@@ -152,7 +151,6 @@ for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
\htmlonly
-
Go to the next section or return to the
index.
\endhtmlonly
diff --git a/doc/docblocks.doc b/doc/docblocks.doc
index 81cfdd08..d4eab5d3 100644
--- a/doc/docblocks.doc
+++ b/doc/docblocks.doc
@@ -15,7 +15,7 @@
*
*/
/*! \page docblocks Documenting the code
-\tableofcontents
+\tableofcontents{html,latex}
This chapter covers two topics:
1. How to put comments in your code such that doxygen incorporates them in
@@ -55,7 +55,7 @@ used to provide tooltips at places where an item is referenced.
There are several ways to mark a comment block as a detailed description:
-
You can use the JavaDoc style, which consist of a C-style comment
+
You can use the Javadoc style, which consist of a C-style comment
block starting with two *'s, like this:
\verbatim
@@ -143,7 +143,7 @@ Here is an example:
If \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" is set to \c YES
in the configuration file,
- then using JavaDoc style comment
+ then using Javadoc style comment
blocks will automatically start a brief description which ends at the
first dot followed by a space or new line. Here is an example:
@@ -259,7 +259,6 @@ located in front of the block instead of after the block.
Here is an example of the use of these comment blocks:
\include afterdoc.h
\htmlonly
-
Click here
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
@@ -280,7 +279,6 @@ Here is an example of the use of these comment blocks:
Here is an example of a documented piece of C++ code using the Qt style:
\include qtstyle.cpp
\htmlonly
-
Click here
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
@@ -293,14 +291,14 @@ The brief descriptions are included in the member overview of a
class, namespace or file and are printed using a small italic font
(this description can be hidden by setting
\ref cfg_brief_member_desc "BRIEF_MEMBER_DESC" to \c NO in
-the config file). By default the brief descriptions become the first
+the configuration file). By default the brief descriptions become the first
sentence of the detailed descriptions
(but this can be changed by setting the \ref cfg_repeat_brief "REPEAT_BRIEF"
tag to \c NO). Both the brief and the detailed descriptions are optional
for the Qt style.
-By default a JavaDoc style documentation block behaves the same way as a
-Qt style documentation block. This is not according the JavaDoc specification
+By default a Javadoc style documentation block behaves the same way as a
+Qt style documentation block. This is not according the Javadoc specification
however, where the first sentence of the documentation block is automatically
treated as a brief description. To enable this behavior you should set
\ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" to YES in the configuration
@@ -312,10 +310,9 @@ Here is an example:
\endverbatim
Here is the same piece of code as shown above, this time documented using the
-JavaDoc style and \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" set to YES:
+Javadoc style and \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" set to YES:
\include jdstyle.cpp
\htmlonly
-
Click here
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
@@ -348,7 +345,7 @@ duplication of information. So in practice you should \e avoid the use of
structural commands \e unless other requirements force you to do so.
Structural commands (like \ref cmd_intro "all other commands") start with a backslash
-(\\), or an at-sign (\@) if you prefer JavaDoc style,
+(\\), or an at-sign (\@) if you prefer Javadoc style,
followed by a command name and one or more parameters.
For instance, if you want to document the class \c Test in the example
above, you could have also put the following documentation block somewhere
@@ -396,7 +393,6 @@ Here is an example of a C header named \c structcmd.h that is documented
using structural commands:
\include structcmd.h
\htmlonly
-
Click here
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
@@ -441,7 +437,6 @@ and assume they have to be represented in a preformatted way.
\include docstring.py
\htmlonly
-
Click here
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
@@ -462,7 +457,6 @@ Here is the same example again but now using doxygen style comments:
\include pyexample.py
\htmlonly
-
Click here
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
@@ -473,7 +467,7 @@ Here is the same example again but now using doxygen style comments:
Since python looks more like Java than like C or C++, you should set
\ref cfg_optimize_output_java "OPTIMIZE_OUTPUT_JAVA" to \c YES in the
-config file.
+configuration file.
\subsection vhdlblocks Comment blocks in VHDL
@@ -492,7 +486,6 @@ Here is an example VHDL file with doxygen comments:
\include mux.vhdl
\htmlonly
-
Click here
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
@@ -503,7 +496,7 @@ Here is an example VHDL file with doxygen comments:
To get proper looking output you need to set
\ref cfg_optimize_output_vhdl "OPTIMIZE_OUTPUT_VHDL" to \c YES in the
-config file. This will also affect a number of other settings. When they
+configuration file. This will also affect a number of other settings. When they
were not already set correctly doxygen will produce a warning telling which
settings where overruled.
@@ -557,7 +550,7 @@ All following comment lines and continuation lines will be added to this
block. The block ends with a line not starting with a \c # (hash sign).
A brief documentation can be added with \c ;#< (semicolon, hash and
-lower then sign). The brief documentation also ends at a line not starting
+less-than sign). The brief documentation also ends at a line not starting
with a \c # (hash sign).
Inside doxygen comment blocks all normal doxygen markings are supported.
@@ -595,7 +588,7 @@ before the command.
+
\section perlmod_latex Using the LaTeX generator.
The Perl Module-based \LaTeX generator is pretty experimental and
diff --git a/doc/preprocessing.doc b/doc/preprocessing.doc
index 30d4cf38..882e60dc 100644
--- a/doc/preprocessing.doc
+++ b/doc/preprocessing.doc
@@ -55,7 +55,7 @@ both statements, i.e.:
\endverbatim
In case you want to expand the \c CONST_STRING macro, you should set the
-\ref cfg_macro_expansion "MACRO_EXPANSION" tag in the config file
+\ref cfg_macro_expansion "MACRO_EXPANSION" tag in the configuration file
to \c YES. Then the result after preprocessing becomes:
\verbatim
@@ -130,7 +130,7 @@ without macro expansion doxygen will get confused, but we may not want to
expand the \c REFIID macro, because it is documented and the user that reads
the documentation should use it when implementing the interface.
-By setting the following in the config file:
+By setting the following in the configuration file:
\verbatim
ENABLE_PREPROCESSING = YES
diff --git a/doc/searching.doc b/doc/searching.doc
index 00c61414..9bc518ac 100644
--- a/doc/searching.doc
+++ b/doc/searching.doc
@@ -35,7 +35,7 @@ has its own advantages and disadvantages:
required to make it work.
To enable it set
- \ref cfg_searchengine "SEARCHENGINE" to \c YES in the config file
+ \ref cfg_searchengine "SEARCHENGINE" to \c YES in the configuration file
and make sure \ref cfg_server_based_search "SERVER_BASED_SEARCH" is set
to \c NO.
@@ -53,7 +53,7 @@ has its own advantages and disadvantages:
To enable this set both
\ref cfg_searchengine "SEARCHENGINE" and
- \ref cfg_server_based_search "SERVER_BASED_SEARCH" to \c YES in the config
+ \ref cfg_server_based_search "SERVER_BASED_SEARCH" to \c YES in the configuration
file and set \ref cfg_external_search "EXTERNAL_SEARCH" to \c NO.
Advantages over the client side search engine are that it provides full
@@ -100,9 +100,9 @@ has its own advantages and disadvantages:
and Windows even supports it natively.
To enable this set \ref cfg_generate_htmlhelp "GENERATE_HTMLHELP" to \c YES
- in the config file. To let doxygen compile the HTML Help file for you,
+ in the configuration file. To let doxygen compile the HTML Help file for you,
you also need to specify the path to the HTML compiler (hhc.exe) using the
- \ref cfg_hhc_location "HHC_LOCATION" config option and the name of the
+ \ref cfg_hhc_location "HHC_LOCATION" configuration option and the name of the
resulting CHM file using \ref cfg_chm_file "CHM_FILE".
An advantage of this method is that the result is a single file that can
@@ -122,11 +122,11 @@ has its own advantages and disadvantages:
provided by Apple).
To enable the creation of doc sets set \ref cfg_generate_docset "GENERATE_DOCSET"
- to \c YES in the config file. There are a couple of other doc set related
+ to \c YES in the configuration file. There are a couple of other doc set related
options you may want to set. After doxygen has finished you will find
a Makefile in the HTML output directory. Running "make install" on this
Makefile will compile and install the doc set.
- See this
+ See this
article for more info.
Advantage of this method is that it nicely integrates with the Xcode
@@ -139,7 +139,7 @@ has its own advantages and disadvantages:
6. Qt Compressed Help
If you develop for or want to install the Qt application framework,
you will get an application
- called Qt assistant.
+ called Qt assistant.
This is a help viewer for Qt Compressed Help files (.qch).
To enable this feature set \ref cfg_generate_qhp "GENERATE_QHP" to \c YES.
diff --git a/doc/smile.png b/doc/smile.png
new file mode 100644
index 00000000..a3abe009
Binary files /dev/null and b/doc/smile.png differ
diff --git a/doc/starting.doc b/doc/starting.doc
index c869867b..f9ae9a25 100644
--- a/doc/starting.doc
+++ b/doc/starting.doc
@@ -15,7 +15,7 @@
*
*/
/*! \page starting Getting started
-\tableofcontents
+\tableofcontents{html,latex}
The executable \c doxygen is the main program that parses the sources and
generates the documentation. See section \ref doxygen_usage for more
@@ -77,7 +77,7 @@ You can probably leave the values of most tags in a generated template
configuration file to their default value. See section \ref config for
more details about the configuration file.
-If you do not wish to edit the config file with a text editor, you should
+If you do not wish to edit the configuration file with a text editor, you should
have a look at \ref doxywizard_usage "doxywizard", which is a GUI
front-end that can create, read and write doxygen configuration files,
and allows setting configuration options by entering them via dialogs.
@@ -106,38 +106,32 @@ To omit all \c test directories from a source tree for instance, one could use:
Doxygen looks at the file's extension to determine how to parse a file,
using the following table:
-Extension | Language
----------:|---------
-.idl |IDL
-.ddl |IDL
-.odl |IDL
-.java |Java
-.cs |C#
-.d |D
-.php |PHP
-.php4 |PHP
-.php5 |PHP
-.inc |PHP
-.phtml |PHP
-.m |Objective-C
-.M |Objective-C
-.mm |Objective-C
-.py |Python
-.f |Fortran
-.for |Fortran
-.f90 |Fortran
-.f95 |Fortran
-.f03 |Fortran
-.f08 |Fortran
-.vhd |VHDL
-.vhdl |VHDL
-.tcl |TCL
-.ucf |VHDL
-.qsf |VHDL
-.md |Markdown
-.markdown |Markdown
-
-Any other extension is parsed as if it is a C/C++ file.
+Extension | Language | Extension | Language | Extension | Language
+---------:|--------- | ---------:|------------- | ---------:|---------
+.dox |C / C++ | .idl |IDL | .f |Fortran
+.doc |C / C++ | .ddl |IDL | .for |Fortran
+.c |C / C++ | .odl |IDL | .f90 |Fortran
+.cc |C / C++ | .java |Java | .f95 |Fortran
+.cxx |C / C++ | .cs |C# | .f03 |Fortran
+.cpp |C / C++ | .d |D | .f08 |Fortran
+.c++ |C / C++ | .php |PHP | .vhd |VHDL
+.ii |C / C++ | .php4 |PHP | .vhdl |VHDL
+.ixx |C / C++ | .php5 |PHP | .ucf |VHDL
+.ipp |C / C++ | .inc |PHP | .qsf |VHDL
+.i++ |C / C++ | .phtml |PHP | .tcl |TCL
+.inl |C / C++ | .m |Objective-C | .md |Markdown
+.h |C / C++ | .M |Objective-C | .markdown |Markdown
+.H |C / C++ | .py |Python | .ice |Slice
+.hh |C / C++ | .pyw |Python | | |
+.HH |C / C++ | | | | |
+.hxx |C / C++ | | | | |
+.hpp |C / C++ | | | | |
+.h++ |C / C++ | | | | |
+.mm |C / C++ | | | | |
+
+Any other extension is not parsed unless it is added to
+\ref cfg_file_patterns "FILE_PATTERNS" and the appropriate
+\ref cfg_extension_mapping "EXTENSION_MAPPING" is set.
\anchor extract_all
If you start using doxygen for an existing project (thus without any
@@ -263,7 +257,7 @@ capabilities of the man page format, so some information
\subsection docbook_out DocBook output
\addindex docbook
Doxygen can also generate output in the
-DocBook format. How to process the
+DocBook format. How to process the
DocBook output is beyond the scope of this manual.
\section step3 Step 3: Documenting the sources
diff --git a/doc/translator.py b/doc/translator.py
index 798774b4..2246c089 100644
--- a/doc/translator.py
+++ b/doc/translator.py
@@ -1226,12 +1226,20 @@ def __init__(self):
doxy_default = os.path.join(self.script_path, '..')
self.doxy_path = os.path.abspath(os.getenv('DOXYGEN', doxy_default))
- # Get the explicit arguments of the script.
- self.script_argLst = sys.argv[1:]
-
# Build the path names based on the Doxygen's root knowledge.
self.doc_path = os.path.join(self.doxy_path, 'doc')
self.src_path = os.path.join(self.doxy_path, 'src')
+ # Normally the original sources aren't in the current directory
+ # (as we are in the build directory) so we have to specify the
+ # original source directory.
+ self.org_src_path = self.src_path
+ if (len(sys.argv) > 1 and os.path.isdir(os.path.join(sys.argv[1], 'src'))):
+ self.org_src_path = os.path.join(sys.argv[1], 'src')
+ # Get the explicit arguments of the script.
+ self.script_argLst = sys.argv[2:]
+ else:
+ # Get the explicit arguments of the script.
+ self.script_argLst = sys.argv[1:]
# Create the empty dictionary for Transl object identified by the
# class identifier of the translator.
@@ -1413,15 +1421,15 @@ def __getNoTrSourceFilesLst(self):
are searched in doxygen/src directory.
"""
files = []
- for item in os.listdir(self.src_path):
+ for item in os.listdir(self.org_src_path):
# Split the bare name to get the extension.
name, ext = os.path.splitext(item)
ext = ext.lower()
# Include only .cpp and .h files (case independent) and exclude
# the files where the checked identifiers are defined.
- if ext == '.cpp' or (ext == '.h' and name.find('translator') == -1):
- fname = os.path.join(self.src_path, item)
+ if ext == '.cpp' or ext == '.l' or (ext == '.h' and name.find('translator') == -1):
+ fname = os.path.join(self.org_src_path, item)
assert os.path.isfile(fname) # assumes no directory with the ext
files.append(fname) # full name
return files
@@ -1444,12 +1452,14 @@ def __removeUsedInFiles(self, fname, dic):
assert os.path.isfile(fname)
f = xopen(fname)
cont = f.read()
+ cont = ''.join(cont.split('\n')) # otherwise the 'match' function won't work.
f.close()
# Remove the items for identifiers that were found in the file.
while lst_in:
item = lst_in.pop(0)
- if cont.find(item) != -1:
+ rexItem = re.compile('.*' + item + ' *\(')
+ if rexItem.match(cont):
del dic[item]
diff --git a/doc/trouble.doc b/doc/trouble.doc
index 9584c0c8..c490ae11 100644
--- a/doc/trouble.doc
+++ b/doc/trouble.doc
@@ -89,14 +89,13 @@ know why.
\section bug_reports How to report a bug
-Bugs are tracked in GNOME's bugzilla database.
+Bugs are tracked in GitHub's issue tracker.
Before submitting a
-new bug,
-first search
-through the database if the same bug has already been submitted by others (the doxygen
-product will be preselected).
+new bug,
+first search
+through the database if the same bug has already been submitted by others.
If you believe you have found a new bug,
-please report it.
+please report it.
If you are unsure whether or not something is a bug, please ask help
on the users mailing list
@@ -109,11 +108,11 @@ always try to include the following information in your bug report:
- The version of doxygen you are using (for instance 1.5.3, use
`doxygen --version` if you are not sure).
- The name and version number of your operating system (for instance
- SuSE Linux 6.4)
+ Ubuntu Linux 18.04 LTS)
- It is usually a good idea to send along the configuration file as well,
but please use doxygen with the -s flag while generating it
to keep it small (use doxygen -s -u [configName] to strip
- the comments from an existing config file).
+ the comments from an existing configuration file).
- The easiest (and often the only) way for me to fix bugs is if you can
attach a small example demonstrating the problem you have to the bug report, so I can
reproduce it on my machine. Please make sure the example is valid
@@ -129,7 +128,7 @@ please use PATCH as a keyword in the bug entry form.
If you have ideas how to fix existing bugs and limitations please discuss them on
the developers mailing list
-(subscription required). Patches can also be sent directly to dimitri@stack.nl if
+(subscription required). Patches can also be sent directly to doxygen@gmail.com if
you prefer not to send them via the bug tracker or mailing list.
For patches please use
diff --git a/doc/xmlcmds.doc b/doc/xmlcmds.doc
index 501bf918..b59095b3 100644
--- a/doc/xmlcmds.doc
+++ b/doc/xmlcmds.doc
@@ -70,6 +70,9 @@ Here is the list of tags supported by doxygen:
\ Refers to a parameter with name
"paramName". Similar to using \ref cmda "\\a".
\ Identifies a property. Ignored by doxygen.
+
\ The text inside this tag (on the ...) is handled as normal
+ doxygen comment except for the XML special characters `<`, `>` and
+ `&` that are used as if they were escaped.
Here is an example of a typical piece of code using some of the above commands:
@@ -101,7 +104,7 @@ class Engine
\htmlonly
-Go to the next section or return to the
+Go to the next section or return to the
index.
\endhtmlonly
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 601ed5a4..0f34c6d5 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -163,8 +163,9 @@ add_custom_command(
add_custom_command(
COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen tag.cfg
+ COMMAND ${PYTHON_EXECUTABLE} ${TOP}/examples/strip_example.py < ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman_doc.tex
DEPENDS doxygen tag.cpp tag.cfg ${PROJECT_BINARY_DIR}/html/examples/example/html/index.html ${TOP}/examples/strip_example.py
- OUTPUT ${PROJECT_BINARY_DIR}/html/examples/tag/html/index.html
+ OUTPUT ${PROJECT_BINARY_DIR}/html/examples/tag/html/index.html ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman_doc.tex
)
add_custom_command(
@@ -183,8 +184,9 @@ add_custom_command(
add_custom_command(
COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen templ.cfg
+ COMMAND ${PYTHON_EXECUTABLE} ${TOP}/examples/strip_example.py < ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman_doc.tex
DEPENDS doxygen templ.cpp templ.cfg ${TOP}/examples/strip_example.py
- OUTPUT ${PROJECT_BINARY_DIR}/html/examples/template/html/index.html
+ OUTPUT ${PROJECT_BINARY_DIR}/html/examples/template/html/index.html ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman_doc.tex
)
add_custom_command(
diff --git a/examples/dbusxml.cfg b/examples/dbusxml.cfg
deleted file mode 100644
index d964ea21..00000000
--- a/examples/dbusxml.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-PROJECT_NAME = "DBusXMLDocs"
-OUTPUT_DIRECTORY = ../html/examples/dbusxml
-GENERATE_LATEX = YES
-GENERATE_MAN = NO
-GENERATE_RTF = NO
-CASE_SENSE_NAMES = NO
-INPUT = dbusxml.xml
-QUIET = YES
-JAVADOC_AUTOBRIEF = YES
-EXTRACT_ALL = YES
-SEARCHENGINE = NO
-EXTENSION_MAPPING = xml=dbusxml
-COMPACT_LATEX = YES
-LATEX_HIDE_INDICES = YES
diff --git a/examples/dbusxml.xml b/examples/dbusxml.xml
deleted file mode 100644
index 4ab7f787..00000000
--- a/examples/dbusxml.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/define.h b/examples/define.h
index c330447a..0cd7ae37 100644
--- a/examples/define.h
+++ b/examples/define.h
@@ -10,7 +10,9 @@
*/
/*!
- Computes the absolute value of its argument \a x.
+ \brief Computes the absolute value of its argument \a x.
+ \param x input value.
+ \returns absolute value of \a x.
*/
#define ABS(x) (((x)>0)?(x):-(x))
#define MAX(x,y) ((x)>(y)?(x):(y))
diff --git a/examples/example.cfg b/examples/example.cfg
index c55c6b9a..22266d42 100644
--- a/examples/example.cfg
+++ b/examples/example.cfg
@@ -1,6 +1,6 @@
PROJECT_NAME = "Example Command"
OUTPUT_DIRECTORY = ../html/examples/example
-#GENERATE_TAGFILE = example.tag
+GENERATE_TAGFILE = example.tag
GENERATE_LATEX = YES
GENERATE_MAN = NO
GENERATE_RTF = NO
diff --git a/examples/example.tag b/examples/example.tag
deleted file mode 100644
index 98b2efd6..00000000
--- a/examples/example.tag
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- Test
- class_test.html
-
- void
- example
- class_test.html
- a47b775f65718978f1ffcd96376f8ecfa
- ()
-
-
-
diff --git a/examples/include.cpp b/examples/include.cpp
index ba8c0544..d9ea5ea4 100644
--- a/examples/include.cpp
+++ b/examples/include.cpp
@@ -8,7 +8,7 @@ class Include_Test
void example();
};
-/*! \page example
+/*! \page pag_example
* \dontinclude include_test.cpp
* Our main function starts like this:
* \skip main
diff --git a/examples/jdstyle.cfg b/examples/jdstyle.cfg
index 0ddc0d92..d94089de 100644
--- a/examples/jdstyle.cfg
+++ b/examples/jdstyle.cfg
@@ -1,4 +1,4 @@
-PROJECT_NAME = "JavaDoc Style"
+PROJECT_NAME = "Javadoc Style"
OUTPUT_DIRECTORY = ../html/examples/jdstyle
GENERATE_LATEX = YES
GENERATE_MAN = NO
diff --git a/examples/tag.cfg b/examples/tag.cfg
index 97d7d2f6..823b5a76 100644
--- a/examples/tag.cfg
+++ b/examples/tag.cfg
@@ -1,6 +1,6 @@
PROJECT_NAME = "Tag Files"
OUTPUT_DIRECTORY = ../html/examples/tag
-GENERATE_LATEX = NO
+GENERATE_LATEX = YES
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
@@ -10,3 +10,5 @@ PERL_PATH = perl
QUIET = YES
JAVADOC_AUTOBRIEF = YES
SEARCHENGINE = NO
+COMPACT_LATEX = YES
+LATEX_HIDE_INDICES = YES
diff --git a/examples/tag.cpp b/examples/tag.cpp
index 6497dd42..74435c19 100644
--- a/examples/tag.cpp
+++ b/examples/tag.cpp
@@ -1,7 +1,7 @@
/*! A class that is inherited from the external class Test.
*/
-class Tag : public Test
+class Tag : public Example_Test
{
public:
/*! an overloaded member. */
diff --git a/examples/tclexample.tcl b/examples/tclexample.tcl
index 6edef66f..e512aee8 100644
--- a/examples/tclexample.tcl
+++ b/examples/tclexample.tcl
@@ -10,7 +10,7 @@ exec tclsh "$0" "$@"
#\code
namespace eval ns {
## Documented proc \c ns_proc .
- # param[in] arg some argument
+ # \param[in] arg some argument
proc ns_proc {arg} {}
## Documented var \c ns_var .
# Some documentation.
@@ -22,13 +22,13 @@ namespace eval ns {
## Destroy object.
destructor {exit}
## Documented itcl method \c itcl_method_x .
- # param[in] arg Argument
+ # \param[in] arg Argument
private method itcl_method_x {arg}
## Documented itcl method \c itcl_method_y .
- # param[in] arg Argument
+ # \param[in] arg Argument
protected method itcl_method_y {arg} {}
## Documented itcl method \c itcl_method_z .
- # param[in] arg Argument
+ # \param[in] arg Argument
public method itcl_method_z {arg} {}
## Documented common itcl var \c itcl_Var .
common itcl_Var
@@ -49,13 +49,13 @@ namespace eval ns {
# Defined inside class
variable oo_var
## \private Documented oo method \c oo_method_x .
- # param[in] arg Argument
+ # \param[in] arg Argument
method oo_method_x {arg} {}
## \protected Documented oo method \c oo_method_y .
- # param[in] arg Argument
+ # \param[in] arg Argument
method oo_method_y {arg} {}
## \public Documented oo method \c oo_method_z .
- # param[in] arg Argument
+ # \param[in] arg Argument
method oo_method_z {arg} {}
}
}
@@ -72,7 +72,7 @@ oo::define ns::oo_class {
}
## Documented global proc \c glob_proc .
-# param[in] arg Argument
+# \param[in] arg Argument
proc glob_proc {arg} {puts $arg}
variable glob_var;#< Documented global var \c glob_var\
diff --git a/examples/templ.cfg b/examples/templ.cfg
index eb59559d..9d42e791 100644
--- a/examples/templ.cfg
+++ b/examples/templ.cfg
@@ -1,6 +1,6 @@
PROJECT_NAME = "Template Test"
OUTPUT_DIRECTORY = ../html/examples/template
-GENERATE_LATEX = NO
+GENERATE_LATEX = YES
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
@@ -8,3 +8,5 @@ INPUT = templ.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
SEARCHENGINE = NO
+COMPACT_LATEX = YES
+LATEX_HIDE_INDICES = YES
diff --git a/jquery/Makefile b/jquery/Makefile
index 02cdd345..eac56bc8 100644
--- a/jquery/Makefile
+++ b/jquery/Makefile
@@ -1,4 +1,4 @@
-JQUERY_VERSION = 1.7.1
+JQUERY_VERSION = 1.7.2
JQUERY_UI_VERSION = 1.8.18
HASHCHANGE_VERSION = 1.3
SCROLL_VERSION = 1.4.2
diff --git a/jquery/README b/jquery/README
index b8b115a6..0d316f95 100644
--- a/jquery/README
+++ b/jquery/README
@@ -1,7 +1,7 @@
Doxygen's jquery.js script is composed of minified versions of the following
packages:
-- jquery 1.7.1: http://jquery.com/download/
-- jquery.ui 1.8.18: https://code.google.com/p/jquery-ui/downloads/list
+- jquery 1.7.1: https://jquery.com/download/
+- jquery.ui 1.8.18: https://github.com/jquery/jquery-ui
modules required:
- jquery.ui.core
- jquery.ui.widget
@@ -9,8 +9,8 @@ packages:
- jquery.ui.resizable
- jquery.hashchange: 1.3: http://benalman.com/projects/jquery-hashchange-plugin/
- jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo
-- jquery.powertip: 1.2.0: http://stevenbenner.github.io/jquery-powertip/
+- jquery.powertip: 1.2.0: https://stevenbenner.github.io/jquery-powertip/
- jquery.touchpunch: 0.2.3: http://touchpunch.furf.com/
-- jquery.smartmenus: 1.0.0: http://www.smartmenus.org/
+- jquery.smartmenus: 1.0.0: https://www.smartmenus.org/
The Makefile will built the jquery.js files used by doxygen.
diff --git a/jquery/jquery-1.7.2.js b/jquery/jquery-1.7.2.js
new file mode 100644
index 00000000..3774ff98
--- /dev/null
+++ b/jquery/jquery-1.7.2.js
@@ -0,0 +1,9404 @@
+/*!
+ * jQuery JavaScript Library v1.7.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Wed Mar 21 12:46:34 2012 -0700
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+ navigator = window.navigator,
+ location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context, rootjQuery );
+ },
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // A simple way to check for HTML strings or ID strings
+ // Prioritize #id over to avoid XSS via location.hash (#9521)
+ quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+ // Check if a string has a non-whitespace character in it
+ rnotwhite = /\S/,
+
+ // Used for trimming whitespace
+ trimLeft = /^\s+/,
+ trimRight = /\s+$/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+ // Useragent RegExp
+ rwebkit = /(webkit)[ \/]([\w.]+)/,
+ ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+ rmsie = /(msie) ([\w.]+)/,
+ rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+ // Matches dashed string for camelizing
+ rdashAlpha = /-([a-z]|[0-9])/ig,
+ rmsPrefix = /^-ms-/,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return ( letter + "" ).toUpperCase();
+ },
+
+ // Keep a UserAgent string for use with jQuery.browser
+ userAgent = navigator.userAgent,
+
+ // For matching the engine and version of the browser
+ browserMatch,
+
+ // The deferred used on DOM ready
+ readyList,
+
+ // The ready event handler
+ DOMContentLoaded,
+
+ // Save a reference to some core methods
+ toString = Object.prototype.toString,
+ hasOwn = Object.prototype.hasOwnProperty,
+ push = Array.prototype.push,
+ slice = Array.prototype.slice,
+ trim = String.prototype.trim,
+ indexOf = Array.prototype.indexOf,
+
+ // [[Class]] -> type pairs
+ class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), or $(undefined)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // The body element only exists once, optimize finding it
+ if ( selector === "body" && !context && document.body ) {
+ this.context = document;
+ this[0] = document.body;
+ this.selector = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ // Are we dealing with HTML string or an ID?
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = quickExpr.exec( selector );
+ }
+
+ // Verify a match, and that no context was specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
+ doc = ( context ? context.ownerDocument || context : document );
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ ret = rsingleTag.exec( selector );
+
+ if ( ret ) {
+ if ( jQuery.isPlainObject( context ) ) {
+ selector = [ document.createElement( ret[1] ) ];
+ jQuery.fn.attr.call( selector, context, true );
+
+ } else {
+ selector = [ doc.createElement( ret[1] ) ];
+ }
+
+ } else {
+ ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+ selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
+ }
+
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $("#id")
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if ( selector.selector !== undefined ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.7.2",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ toArray: function() {
+ return slice.call( this, 0 );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+ // Build a new jQuery matched element set
+ var ret = this.constructor();
+
+ if ( jQuery.isArray( elems ) ) {
+ push.apply( ret, elems );
+
+ } else {
+ jQuery.merge( ret, elems );
+ }
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" ) {
+ ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+ } else if ( name ) {
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Attach the listeners
+ jQuery.bindReady();
+
+ // Add the callback
+ readyList.add( fn );
+
+ return this;
+ },
+
+ eq: function( i ) {
+ i = +i;
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, i + 1 );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ),
+ "slice", slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+ // Either a released hold or an DOMready/load event and not yet ready
+ if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.fireWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger( "ready" ).off( "ready" );
+ }
+ }
+ },
+
+ bindReady: function() {
+ if ( readyList ) {
+ return;
+ }
+
+ readyList = jQuery.Callbacks( "once memory" );
+
+ // Catch cases where $(document).ready() is called after the
+ // browser event has already occurred.
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Mozilla, Opera and webkit nightlies currently support this event
+ if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else if ( document.attachEvent ) {
+ // ensure firing before onload,
+ // maybe late but safe also for iframes
+ document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var toplevel = false;
+
+ try {
+ toplevel = window.frameElement == null;
+ } catch(e) {}
+
+ if ( document.documentElement.doScroll && toplevel ) {
+ doScrollCheck();
+ }
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ isWindow: function( obj ) {
+ return obj != null && obj == obj.window;
+ },
+
+ isNumeric: function( obj ) {
+ return !isNaN( parseFloat(obj) ) && isFinite( obj );
+ },
+
+ type: function( obj ) {
+ return obj == null ?
+ String( obj ) :
+ class2type[ toString.call(obj) ] || "object";
+ },
+
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !hasOwn.call(obj, "constructor") &&
+ !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+ } catch ( e ) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || hasOwn.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ for ( var name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ parseJSON: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
+
+ return ( new Function( "return " + data ) )();
+
+ }
+ jQuery.error( "Invalid JSON: " + data );
+ },
+
+ // Cross-browser xml parsing
+ parseXML: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
+ var xml, tmp;
+ try {
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
+ } catch( e ) {
+ xml = undefined;
+ }
+ if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+ },
+
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function( data ) {
+ if ( data && rnotwhite.test( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ var name, i = 0,
+ length = object.length,
+ isObj = length === undefined || jQuery.isFunction( object );
+
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.apply( object[ name ], args ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( object[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return object;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: trim ?
+ function( text ) {
+ return text == null ?
+ "" :
+ trim.call( text );
+ } :
+
+ // Otherwise use our own trimming functionality
+ function( text ) {
+ return text == null ?
+ "" :
+ text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( array, results ) {
+ var ret = results || [];
+
+ if ( array != null ) {
+ // The window, strings (and functions) also have 'length'
+ // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+ var type = jQuery.type( array );
+
+ if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+ push.call( ret, array );
+ } else {
+ jQuery.merge( ret, array );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, array, i ) {
+ var len;
+
+ if ( array ) {
+ if ( indexOf ) {
+ return indexOf.call( array, elem, i );
+ }
+
+ len = array.length;
+ i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+ for ( ; i < len; i++ ) {
+ // Skip accessing in sparse arrays
+ if ( i in array && array[ i ] === elem ) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var i = first.length,
+ j = 0;
+
+ if ( typeof second.length === "number" ) {
+ for ( var l = second.length; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var ret = [], retVal;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value, key, ret = [],
+ i = 0,
+ length = elems.length,
+ // jquery objects are treated as arrays
+ isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+ // Go through the array, translating each of the items to their
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( key in elems ) {
+ value = callback( elems[ key ], key, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return ret.concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ if ( typeof context === "string" ) {
+ var tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ var args = slice.call( arguments, 2 ),
+ proxy = function() {
+ return fn.apply( context, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ // Mutifunctional method to get and set values to a collection
+ // The value/s can optionally be executed if it's a function
+ access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+ var exec,
+ bulk = key == null,
+ i = 0,
+ length = elems.length;
+
+ // Sets many values
+ if ( key && typeof key === "object" ) {
+ for ( i in key ) {
+ jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
+ }
+ chainable = 1;
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = pass === undefined && jQuery.isFunction( value );
+
+ if ( bulk ) {
+ // Bulk operations only iterate when executing function values
+ if ( exec ) {
+ exec = fn;
+ fn = function( elem, key, value ) {
+ return exec.call( jQuery( elem ), value );
+ };
+
+ // Otherwise they run against the entire set
+ } else {
+ fn.call( elems, value );
+ fn = null;
+ }
+ }
+
+ if ( fn ) {
+ for (; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+ }
+
+ chainable = 1;
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ length ? fn( elems[0], key ) : emptyGet;
+ },
+
+ now: function() {
+ return ( new Date() ).getTime();
+ },
+
+ // Use of jQuery.browser is frowned upon.
+ // More details: http://docs.jquery.com/Utilities/jQuery.browser
+ uaMatch: function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = rwebkit.exec( ua ) ||
+ ropera.exec( ua ) ||
+ rmsie.exec( ua ) ||
+ ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+ [];
+
+ return { browser: match[1] || "", version: match[2] || "0" };
+ },
+
+ sub: function() {
+ function jQuerySub( selector, context ) {
+ return new jQuerySub.fn.init( selector, context );
+ }
+ jQuery.extend( true, jQuerySub, this );
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init( selector, context ) {
+ if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+ context = jQuerySub( context );
+ }
+
+ return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ return jQuerySub;
+ },
+
+ browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+ jQuery.browser[ browserMatch.browser ] = true;
+ jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+ jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+ trimLeft = /^[\s\xA0]+/;
+ trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+ DOMContentLoaded = function() {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ };
+
+} else if ( document.attachEvent ) {
+ DOMContentLoaded = function() {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( document.readyState === "complete" ) {
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
+ }
+ };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+ if ( jQuery.isReady ) {
+ return;
+ }
+
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch(e) {
+ setTimeout( doScrollCheck, 1 );
+ return;
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+}
+
+return jQuery;
+
+})();
+
+
+// String to Object flags format cache
+var flagsCache = {};
+
+// Convert String-formatted flags into Object-formatted ones and store in cache
+function createFlags( flags ) {
+ var object = flagsCache[ flags ] = {},
+ i, length;
+ flags = flags.split( /\s+/ );
+ for ( i = 0, length = flags.length; i < length; i++ ) {
+ object[ flags[i] ] = true;
+ }
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * flags: an optional list of space-separated flags that will change how
+ * the callback list behaves
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible flags:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( flags ) {
+
+ // Convert flags from String-formatted to Object-formatted
+ // (we check in cache first)
+ flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+
+ var // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = [],
+ // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Add one or several callbacks to the list
+ add = function( args ) {
+ var i,
+ length,
+ elem,
+ type,
+ actual;
+ for ( i = 0, length = args.length; i < length; i++ ) {
+ elem = args[ i ];
+ type = jQuery.type( elem );
+ if ( type === "array" ) {
+ // Inspect recursively
+ add( elem );
+ } else if ( type === "function" ) {
+ // Add if not in unique mode and callback is not in
+ if ( !flags.unique || !self.has( elem ) ) {
+ list.push( elem );
+ }
+ }
+ }
+ },
+ // Fire callbacks
+ fire = function( context, args ) {
+ args = args || [];
+ memory = !flags.memory || [ context, args ];
+ fired = true;
+ firing = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
+ memory = true; // Mark as halted
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( !flags.once ) {
+ if ( stack && stack.length ) {
+ memory = stack.shift();
+ self.fireWith( memory[ 0 ], memory[ 1 ] );
+ }
+ } else if ( memory === true ) {
+ self.disable();
+ } else {
+ list = [];
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ var length = list.length;
+ add( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away, unless previous
+ // firing was halted (stopOnFalse)
+ } else if ( memory && memory !== true ) {
+ firingStart = length;
+ fire( memory[ 0 ], memory[ 1 ] );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ var args = arguments,
+ argIndex = 0,
+ argLength = args.length;
+ for ( ; argIndex < argLength ; argIndex++ ) {
+ for ( var i = 0; i < list.length; i++ ) {
+ if ( args[ argIndex ] === list[ i ] ) {
+ // Handle firingIndex and firingLength
+ if ( firing ) {
+ if ( i <= firingLength ) {
+ firingLength--;
+ if ( i <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ // Remove the element
+ list.splice( i--, 1 );
+ // If we have some unicity property then
+ // we only need to do this once
+ if ( flags.unique ) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ return this;
+ },
+ // Control if a given callback is in the list
+ has: function( fn ) {
+ if ( list ) {
+ var i = 0,
+ length = list.length;
+ for ( ; i < length; i++ ) {
+ if ( fn === list[ i ] ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory || memory === true ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( stack ) {
+ if ( firing ) {
+ if ( !flags.once ) {
+ stack.push( [ context, args ] );
+ }
+ } else if ( !( flags.once && memory ) ) {
+ fire( context, args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+
+
+var // Static reference to slice
+ sliceDeferred = [].slice;
+
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var doneList = jQuery.Callbacks( "once memory" ),
+ failList = jQuery.Callbacks( "once memory" ),
+ progressList = jQuery.Callbacks( "memory" ),
+ state = "pending",
+ lists = {
+ resolve: doneList,
+ reject: failList,
+ notify: progressList
+ },
+ promise = {
+ done: doneList.add,
+ fail: failList.add,
+ progress: progressList.add,
+
+ state: function() {
+ return state;
+ },
+
+ // Deprecated
+ isResolved: doneList.fired,
+ isRejected: failList.fired,
+
+ then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
+ deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
+ return this;
+ },
+ always: function() {
+ deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+ return this;
+ },
+ pipe: function( fnDone, fnFail, fnProgress ) {
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( {
+ done: [ fnDone, "resolve" ],
+ fail: [ fnFail, "reject" ],
+ progress: [ fnProgress, "notify" ]
+ }, function( handler, data ) {
+ var fn = data[ 0 ],
+ action = data[ 1 ],
+ returned;
+ if ( jQuery.isFunction( fn ) ) {
+ deferred[ handler ](function() {
+ returned = fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+ } else {
+ newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+ }
+ });
+ } else {
+ deferred[ handler ]( newDefer[ action ] );
+ }
+ });
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ if ( obj == null ) {
+ obj = promise;
+ } else {
+ for ( var key in promise ) {
+ obj[ key ] = promise[ key ];
+ }
+ }
+ return obj;
+ }
+ },
+ deferred = promise.promise({}),
+ key;
+
+ for ( key in lists ) {
+ deferred[ key ] = lists[ key ].fire;
+ deferred[ key + "With" ] = lists[ key ].fireWith;
+ }
+
+ // Handle state
+ deferred.done( function() {
+ state = "resolved";
+ }, failList.disable, progressList.lock ).fail( function() {
+ state = "rejected";
+ }, doneList.disable, progressList.lock );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( firstParam ) {
+ var args = sliceDeferred.call( arguments, 0 ),
+ i = 0,
+ length = args.length,
+ pValues = new Array( length ),
+ count = length,
+ pCount = length,
+ deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+ firstParam :
+ jQuery.Deferred(),
+ promise = deferred.promise();
+ function resolveFunc( i ) {
+ return function( value ) {
+ args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+ if ( !( --count ) ) {
+ deferred.resolveWith( deferred, args );
+ }
+ };
+ }
+ function progressFunc( i ) {
+ return function( value ) {
+ pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+ deferred.notifyWith( promise, pValues );
+ };
+ }
+ if ( length > 1 ) {
+ for ( ; i < length; i++ ) {
+ if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
+ args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+ } else {
+ --count;
+ }
+ }
+ if ( !count ) {
+ deferred.resolveWith( deferred, args );
+ }
+ } else if ( deferred !== firstParam ) {
+ deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+ }
+ return promise;
+ }
+});
+
+
+
+
+jQuery.support = (function() {
+
+ var support,
+ all,
+ a,
+ select,
+ opt,
+ input,
+ fragment,
+ tds,
+ events,
+ eventName,
+ i,
+ isSupported,
+ div = document.createElement( "div" ),
+ documentElement = document.documentElement;
+
+ // Preliminary tests
+ div.setAttribute("className", "t");
+ div.innerHTML = "
a";
+
+ all = div.getElementsByTagName( "*" );
+ a = div.getElementsByTagName( "a" )[ 0 ];
+
+ // Can't get basic test support
+ if ( !all || !all.length || !a ) {
+ return {};
+ }
+
+ // First batch of supports tests
+ select = document.createElement( "select" );
+ opt = select.appendChild( document.createElement("option") );
+ input = div.getElementsByTagName( "input" )[ 0 ];
+
+ support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName("tbody").length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName("link").length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ style: /top/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.55/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: ( input.value === "on" ),
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ optSelected: opt.selected,
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ getSetAttribute: div.className !== "t",
+
+ // Tests for enctype support on a form(#6743)
+ enctype: !!document.createElement("form").enctype,
+
+ // Makes sure cloning an html5 element does not cause problems
+ // Where outerHTML is undefined, this still works
+ html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>",
+
+ // Will be defined later
+ submitBubbles: true,
+ changeBubbles: true,
+ focusinBubbles: false,
+ deleteExpando: true,
+ noCloneEvent: true,
+ inlineBlockNeedsLayout: false,
+ shrinkWrapBlocks: false,
+ reliableMarginRight: true,
+ pixelMargin: true
+ };
+
+ // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
+ jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
+
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Test to see if it's possible to delete an expando from an element
+ // Fails in Internet Explorer
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+
+ if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+ div.attachEvent( "onclick", function() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ support.noCloneEvent = false;
+ });
+ div.cloneNode( true ).fireEvent( "onclick" );
+ }
+
+ // Check if a radio maintains its value
+ // after being appended to the DOM
+ input = document.createElement("input");
+ input.value = "t";
+ input.setAttribute("type", "radio");
+ support.radioValue = input.value === "t";
+
+ input.setAttribute("checked", "checked");
+
+ // #11217 - WebKit loses check when the name is after the checked attribute
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+ fragment = document.createDocumentFragment();
+ fragment.appendChild( div.lastChild );
+
+ // WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ fragment.removeChild( input );
+ fragment.appendChild( div );
+
+ // Technique from Juriy Zaytsev
+ // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+ // We only care about the case where non-standard event systems
+ // are used, namely in IE. Short-circuiting here helps us to
+ // avoid an eval call (in setAttribute) which can cause CSP
+ // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+ if ( div.attachEvent ) {
+ for ( i in {
+ submit: 1,
+ change: 1,
+ focusin: 1
+ }) {
+ eventName = "on" + i;
+ isSupported = ( eventName in div );
+ if ( !isSupported ) {
+ div.setAttribute( eventName, "return;" );
+ isSupported = ( typeof div[ eventName ] === "function" );
+ }
+ support[ i + "Bubbles" ] = isSupported;
+ }
+ }
+
+ fragment.removeChild( div );
+
+ // Null elements to avoid leaks in IE
+ fragment = select = opt = div = input = null;
+
+ // Run tests that need a body at doc ready
+ jQuery(function() {
+ var container, outer, inner, table, td, offsetSupport,
+ marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
+ paddingMarginBorderVisibility, paddingMarginBorder,
+ body = document.getElementsByTagName("body")[0];
+
+ if ( !body ) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ conMarginTop = 1;
+ paddingMarginBorder = "padding:0;margin:0;border:";
+ positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
+ paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
+ style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
+ html = "
" +
+ "
" +
+ "
";
+
+ container = document.createElement("div");
+ container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
+ body.insertBefore( container, body.firstChild );
+
+ // Construct the test element
+ div = document.createElement("div");
+ container.appendChild( div );
+
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ // (only IE 8 fails this test)
+ div.innerHTML = "
t
";
+ tds = div.getElementsByTagName( "td" );
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+ tds[ 0 ].style.display = "";
+ tds[ 1 ].style.display = "none";
+
+ // Check if empty table cells still have offsetWidth/Height
+ // (IE <= 8 fail this test)
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. For more
+ // info see bug #3333
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ if ( window.getComputedStyle ) {
+ div.innerHTML = "";
+ marginDiv = document.createElement( "div" );
+ marginDiv.style.width = "0";
+ marginDiv.style.marginRight = "0";
+ div.style.width = "2px";
+ div.appendChild( marginDiv );
+ support.reliableMarginRight =
+ ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+ }
+
+ if ( typeof div.style.zoom !== "undefined" ) {
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ // (IE < 8 does this)
+ div.innerHTML = "";
+ div.style.width = div.style.padding = "1px";
+ div.style.border = 0;
+ div.style.overflow = "hidden";
+ div.style.display = "inline";
+ div.style.zoom = 1;
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+ // Check if elements with layout shrink-wrap their children
+ // (IE 6 does this)
+ div.style.display = "block";
+ div.style.overflow = "visible";
+ div.innerHTML = "";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+ }
+
+ div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
+ div.innerHTML = html;
+
+ outer = div.firstChild;
+ inner = outer.firstChild;
+ td = outer.nextSibling.firstChild.firstChild;
+
+ offsetSupport = {
+ doesNotAddBorder: ( inner.offsetTop !== 5 ),
+ doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
+ };
+
+ inner.style.position = "fixed";
+ inner.style.top = "20px";
+
+ // safari subtracts parent border width here which is 5px
+ offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
+ inner.style.position = inner.style.top = "";
+
+ outer.style.overflow = "hidden";
+ outer.style.position = "relative";
+
+ offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
+ offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
+
+ if ( window.getComputedStyle ) {
+ div.style.marginTop = "1%";
+ support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
+ }
+
+ if ( typeof container.style.zoom !== "undefined" ) {
+ container.style.zoom = 1;
+ }
+
+ body.removeChild( container );
+ marginDiv = div = container = null;
+
+ jQuery.extend( support, offsetSupport );
+ });
+
+ return support;
+})();
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+ cache: {},
+
+ // Please use with caution
+ uuid: 0,
+
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+ "applet": true
+ },
+
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var privateCache, thisCache, ret,
+ internalKey = jQuery.expando,
+ getByName = typeof name === "string",
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
+ isEvents = name === "events";
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
+ return;
+ }
+
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if ( isNode ) {
+ elem[ internalKey ] = id = ++jQuery.uuid;
+ } else {
+ id = internalKey;
+ }
+ }
+
+ if ( !cache[ id ] ) {
+ cache[ id ] = {};
+
+ // Avoids exposing jQuery metadata on plain JS objects when the object
+ // is serialized using JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ] = jQuery.extend( cache[ id ], name );
+ } else {
+ cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+ }
+ }
+
+ privateCache = thisCache = cache[ id ];
+
+ // jQuery data() is stored in a separate object inside the object's internal data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data.
+ if ( !pvt ) {
+ if ( !thisCache.data ) {
+ thisCache.data = {};
+ }
+
+ thisCache = thisCache.data;
+ }
+
+ if ( data !== undefined ) {
+ thisCache[ jQuery.camelCase( name ) ] = data;
+ }
+
+ // Users should not attempt to inspect the internal events object using jQuery.data,
+ // it is undocumented and subject to change. But does anyone listen? No.
+ if ( isEvents && !thisCache[ name ] ) {
+ return privateCache.events;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if ( getByName ) {
+
+ // First Try to find as-is property data
+ ret = thisCache[ name ];
+
+ // Test for null|undefined property data
+ if ( ret == null ) {
+
+ // Try to find the camelCased property
+ ret = thisCache[ jQuery.camelCase( name ) ];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+ },
+
+ removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, i, l,
+
+ // Reference to internal data cache key
+ internalKey = jQuery.expando,
+
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+
+ // See jQuery.data for more information
+ id = isNode ? elem[ internalKey ] : internalKey;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
+
+ if ( name ) {
+
+ thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+ if ( thisCache ) {
+
+ // Support array or space separated string names for data keys
+ if ( !jQuery.isArray( name ) ) {
+
+ // try the string as a key before any manipulation
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+
+ // split the camel cased version by spaces unless a key with the spaces exists
+ name = jQuery.camelCase( name );
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+ name = name.split( " " );
+ }
+ }
+ }
+
+ for ( i = 0, l = name.length; i < l; i++ ) {
+ delete thisCache[ name[i] ];
+ }
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if ( !pvt ) {
+ delete cache[ id ].data;
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject(cache[ id ]) ) {
+ return;
+ }
+ }
+
+ // Browsers that fail expando deletion also refuse to delete expandos on
+ // the window, but it will allow it on all other JS objects; other browsers
+ // don't care
+ // Ensure that `cache` is not a window object #10080
+ if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+ delete cache[ id ];
+ } else {
+ cache[ id ] = null;
+ }
+
+ // We destroyed the cache and need to eliminate the expando on the node to avoid
+ // false lookups in the cache for entries that no longer exist
+ if ( isNode ) {
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if ( jQuery.support.deleteExpando ) {
+ delete elem[ internalKey ];
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( internalKey );
+ } else {
+ elem[ internalKey ] = null;
+ }
+ }
+ },
+
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return jQuery.data( elem, name, data, true );
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function( elem ) {
+ if ( elem.nodeName ) {
+ var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+ if ( match ) {
+ return !(match === true || elem.getAttribute("classid") !== match);
+ }
+ }
+
+ return true;
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var parts, part, attr, name, l,
+ elem = this[0],
+ i = 0,
+ data = null;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = jQuery.data( elem );
+
+ if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+ attr = elem.attributes;
+ for ( l = attr.length; i < l; i++ ) {
+ name = attr[i].name;
+
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.substring(5) );
+
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ jQuery._data( elem, "parsedAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ parts = key.split( ".", 2 );
+ parts[1] = parts[1] ? "." + parts[1] : "";
+ part = parts[1] + "!";
+
+ return jQuery.access( this, function( value ) {
+
+ if ( value === undefined ) {
+ data = this.triggerHandler( "getData" + part, [ parts[0] ] );
+
+ // Try to fetch any internally stored data first
+ if ( data === undefined && elem ) {
+ data = jQuery.data( elem, key );
+ data = dataAttr( elem, key, data );
+ }
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+ }
+
+ parts[1] = value;
+ this.each(function() {
+ var self = jQuery( this );
+
+ self.triggerHandler( "setData" + part, parts );
+ jQuery.data( this, key, value );
+ self.triggerHandler( "changeData" + part, parts );
+ });
+ }, null, value, arguments.length > 1, null, false );
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+function dataAttr( elem, key, data ) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+
+ var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ jQuery.isNumeric( data ) ? +data :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data( elem, key, data );
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+ for ( var name in obj ) {
+
+ // if the public data object is empty, the private is still empty
+ if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+ continue;
+ }
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+ var deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ defer = jQuery._data( elem, deferDataKey );
+ if ( defer &&
+ ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
+ ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
+ // Give room for hard-coded callbacks to fire first
+ // and eventually mark/queue something else on the element
+ setTimeout( function() {
+ if ( !jQuery._data( elem, queueDataKey ) &&
+ !jQuery._data( elem, markDataKey ) ) {
+ jQuery.removeData( elem, deferDataKey, true );
+ defer.fire();
+ }
+ }, 0 );
+ }
+}
+
+jQuery.extend({
+
+ _mark: function( elem, type ) {
+ if ( elem ) {
+ type = ( type || "fx" ) + "mark";
+ jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
+ }
+ },
+
+ _unmark: function( force, elem, type ) {
+ if ( force !== true ) {
+ type = elem;
+ elem = force;
+ force = false;
+ }
+ if ( elem ) {
+ type = type || "fx";
+ var key = type + "mark",
+ count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
+ if ( count ) {
+ jQuery._data( elem, key, count );
+ } else {
+ jQuery.removeData( elem, key, true );
+ handleQueueMarkDefer( elem, type, "mark" );
+ }
+ }
+ },
+
+ queue: function( elem, type, data ) {
+ var q;
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ q = jQuery._data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !q || jQuery.isArray(data) ) {
+ q = jQuery._data( elem, type, jQuery.makeArray(data) );
+ } else {
+ q.push( data );
+ }
+ }
+ return q || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ fn = queue.shift(),
+ hooks = {};
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ }
+
+ if ( fn ) {
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ jQuery._data( elem, type + ".run", hooks );
+ fn.call( elem, function() {
+ jQuery.dequeue( elem, type );
+ }, hooks );
+ }
+
+ if ( !queue.length ) {
+ jQuery.removeData( elem, type + "queue " + type + ".run", true );
+ handleQueueMarkDefer( elem, type, "queue" );
+ }
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[0], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each(function() {
+ var queue = jQuery.queue( this, type, data );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = setTimeout( next, time );
+ hooks.stop = function() {
+ clearTimeout( timeout );
+ };
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, object ) {
+ if ( typeof type !== "string" ) {
+ object = type;
+ type = undefined;
+ }
+ type = type || "fx";
+ var defer = jQuery.Deferred(),
+ elements = this,
+ i = elements.length,
+ count = 1,
+ deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ tmp;
+ function resolve() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ }
+ while( i-- ) {
+ if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+ ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+ jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+ jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+ count++;
+ tmp.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( object );
+ }
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+ rspace = /\s+/,
+ rreturn = /\r/g,
+ rtype = /^(?:button|input)$/i,
+ rfocusable = /^(?:button|input|object|select|textarea)$/i,
+ rclickable = /^a(?:rea)?$/i,
+ rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ getSetAttribute = jQuery.support.getSetAttribute,
+ nodeHook, boolHook, fixSpecified;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ name = jQuery.propFix[ name ] || name;
+ return this.each(function() {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[ name ] = undefined;
+ delete this[ name ];
+ } catch( e ) {}
+ });
+ },
+
+ addClass: function( value ) {
+ var classNames, i, l, elem,
+ setClass, c, cl;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).addClass( value.call(this, j, this.className) );
+ });
+ }
+
+ if ( value && typeof value === "string" ) {
+ classNames = value.split( rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className && classNames.length === 1 ) {
+ elem.className = value;
+
+ } else {
+ setClass = " " + elem.className + " ";
+
+ for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+ setClass += classNames[ c ] + " ";
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classNames, i, l, elem, className, c, cl;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).removeClass( value.call(this, j, this.className) );
+ });
+ }
+
+ if ( (value && typeof value === "string") || value === undefined ) {
+ classNames = ( value || "" ).split( rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.nodeType === 1 && elem.className ) {
+ if ( value ) {
+ className = (" " + elem.className + " ").replace( rclass, " " );
+ for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+ className = className.replace(" " + classNames[ c ] + " ", " ");
+ }
+ elem.className = jQuery.trim( className );
+
+ } else {
+ elem.className = "";
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ state = stateVal,
+ classNames = value.split( rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space seperated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery._data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for ( ; i < l; i++ ) {
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ var hooks, ret, isFunction,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var self = jQuery(this), val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, self.val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, i, max, option,
+ index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
+
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
+
+ // Loop through all the selected options
+ i = one ? index : 0;
+ max = one ? index + 1 : options.length;
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // Don't return options that are disabled or in a disabled optgroup
+ if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+ (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+ if ( one && !values.length && options.length ) {
+ return jQuery( options[ index ] ).val();
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var values = jQuery.makeArray( value );
+
+ jQuery(elem).find("option").each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ attrFn: {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true
+ },
+
+ attr: function( elem, name, value, pass ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ if ( pass && name in jQuery.attrFn ) {
+ return jQuery( elem )[ name ]( value );
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === "undefined" ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if ( notxml ) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+ }
+
+ if ( value !== undefined ) {
+
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return;
+
+ } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, "" + value );
+ return value;
+ }
+
+ } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+
+ ret = elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret === null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var propName, attrNames, name, l, isBool,
+ i = 0;
+
+ if ( value && elem.nodeType === 1 ) {
+ attrNames = value.toLowerCase().split( rspace );
+ l = attrNames.length;
+
+ for ( ; i < l; i++ ) {
+ name = attrNames[ i ];
+
+ if ( name ) {
+ propName = jQuery.propFix[ name ] || name;
+ isBool = rboolean.test( name );
+
+ // See #9699 for explanation of this approach (setting first, then removal)
+ // Do not do this for boolean attributes (see #10870)
+ if ( !isBool ) {
+ jQuery.attr( elem, name, "" );
+ }
+ elem.removeAttribute( getSetAttribute ? name : propName );
+
+ // Set corresponding property to false for boolean attributes
+ if ( isBool && propName in elem ) {
+ elem[ propName ] = false;
+ }
+ }
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to it's default in case type is set after value
+ // This is for element creation
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ },
+ // Use the value property for back compat
+ // Use the nodeHook for button elements in IE6/7 (#1954)
+ value: {
+ get: function( elem, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.get( elem, name );
+ }
+ return name in elem ?
+ elem.value :
+ null;
+ },
+ set: function( elem, value, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.set( elem, value, name );
+ }
+ // Does not return so that setAttribute is also used
+ elem.value = value;
+ }
+ }
+ },
+
+ propFix: {
+ tabindex: "tabIndex",
+ readonly: "readOnly",
+ "for": "htmlFor",
+ "class": "className",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ cellpadding: "cellPadding",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ usemap: "useMap",
+ frameborder: "frameBorder",
+ contenteditable: "contentEditable"
+ },
+
+ prop: function( elem, name, value ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ if ( notxml ) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ return ( elem[ name ] = value );
+ }
+
+ } else {
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+ return elem[ name ];
+ }
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ var attributeNode = elem.getAttributeNode("tabindex");
+
+ return attributeNode && attributeNode.specified ?
+ parseInt( attributeNode.value, 10 ) :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
+ }
+ }
+ }
+});
+
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
+jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+boolHook = {
+ get: function( elem, name ) {
+ // Align boolean attributes with corresponding properties
+ // Fall back to attribute presence where some booleans are not supported
+ var attrNode,
+ property = jQuery.prop( elem, name );
+ return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+ name.toLowerCase() :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ var propName;
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ // value is true since we know at this point it's type boolean and not false
+ // Set boolean attributes to the same name and set the DOM property
+ propName = jQuery.propFix[ name ] || name;
+ if ( propName in elem ) {
+ // Only set the IDL specifically if it already exists on the element
+ elem[ propName ] = true;
+ }
+
+ elem.setAttribute( name, name.toLowerCase() );
+ }
+ return name;
+ }
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+ fixSpecified = {
+ name: true,
+ id: true,
+ coords: true
+ };
+
+ // Use this for any attribute in IE6/7
+ // This fixes almost every IE6/7 issue
+ nodeHook = jQuery.valHooks.button = {
+ get: function( elem, name ) {
+ var ret;
+ ret = elem.getAttributeNode( name );
+ return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
+ ret.nodeValue :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ // Set the existing or create a new attribute node
+ var ret = elem.getAttributeNode( name );
+ if ( !ret ) {
+ ret = document.createAttribute( name );
+ elem.setAttributeNode( ret );
+ }
+ return ( ret.nodeValue = value + "" );
+ }
+ };
+
+ // Apply the nodeHook to tabindex
+ jQuery.attrHooks.tabindex.set = nodeHook.set;
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each([ "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ set: function( elem, value ) {
+ if ( value === "" ) {
+ elem.setAttribute( name, "auto" );
+ return value;
+ }
+ }
+ });
+ });
+
+ // Set contenteditable to false on removals(#10429)
+ // Setting to empty string throws an error as an invalid value
+ jQuery.attrHooks.contenteditable = {
+ get: nodeHook.get,
+ set: function( elem, value, name ) {
+ if ( value === "" ) {
+ value = "false";
+ }
+ nodeHook.set( elem, value, name );
+ }
+ };
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+ jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ get: function( elem ) {
+ var ret = elem.getAttribute( name, 2 );
+ return ret === null ? undefined : ret;
+ }
+ });
+ });
+}
+
+if ( !jQuery.support.style ) {
+ jQuery.attrHooks.style = {
+ get: function( elem ) {
+ // Return undefined in the case of empty string
+ // Normalize to lowercase since IE uppercases css property names
+ return elem.style.cssText.toLowerCase() || undefined;
+ },
+ set: function( elem, value ) {
+ return ( elem.style.cssText = "" + value );
+ }
+ };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ return null;
+ }
+ });
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+ jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+ jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ get: function( elem ) {
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+ };
+ });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+ }
+ }
+ });
+});
+
+
+
+
+var rformElems = /^(?:textarea|input|select)$/i,
+ rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
+ rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
+ quickParse = function( selector ) {
+ var quick = rquickIs.exec( selector );
+ if ( quick ) {
+ // 0 1 2 3
+ // [ _, tag, id, class ]
+ quick[1] = ( quick[1] || "" ).toLowerCase();
+ quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
+ }
+ return quick;
+ },
+ quickIs = function( elem, m ) {
+ var attrs = elem.attributes || {};
+ return (
+ (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
+ (!m[2] || (attrs.id || {}).value === m[2]) &&
+ (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
+ );
+ },
+ hoverHack = function( events ) {
+ return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+ };
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var elemData, eventHandle, events,
+ t, tns, type, namespaces, handleObj,
+ handleObjIn, quick, handlers, special;
+
+ // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+ if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ events = elemData.events;
+ if ( !events ) {
+ elemData.events = events = {};
+ }
+ eventHandle = elemData.handle;
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = jQuery.trim( hoverHack(types) ).split( " " );
+ for ( t = 0; t < types.length; t++ ) {
+
+ tns = rtypenamespace.exec( types[t] ) || [];
+ type = tns[1];
+ namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: tns[1],
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ quick: selector && quickParse( selector ),
+ namespace: namespaces.join(".")
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ handlers = events[ type ];
+ if ( !handlers ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener/attachEvent if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+ t, tns, type, origType, namespaces, origCount,
+ j, events, special, handle, eventType, handleObj;
+
+ if ( !elemData || !(events = elemData.events) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+ for ( t = 0; t < types.length; t++ ) {
+ tns = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tns[1];
+ namespaces = tns[2];
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector? special.delegateType : special.bindType ) || type;
+ eventType = events[ type ] || [];
+ origCount = eventType.length;
+ namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+
+ // Remove matching events
+ for ( j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+ eventType.splice( j--, 1 );
+
+ if ( handleObj.selector ) {
+ eventType.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( eventType.length === 0 && origCount !== eventType.length ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ handle = elemData.handle;
+ if ( handle ) {
+ handle.elem = null;
+ }
+
+ // removeData also checks for emptiness and clears the expando if empty
+ // so use it instead of delete
+ jQuery.removeData( elem, [ "events", "handle" ], true );
+ }
+ },
+
+ // Events that are safe to short-circuit if no handlers are attached.
+ // Native DOM events should not be added, they may have inline handlers.
+ customEvent: {
+ "getData": true,
+ "setData": true,
+ "changeData": true
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+ // Don't do events on text and comment nodes
+ if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+ return;
+ }
+
+ // Event object or event type
+ var type = event.type || event,
+ namespaces = [],
+ cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf( "!" ) >= 0 ) {
+ // Exclusive events trigger only for the exact event (no namespaces)
+ type = type.slice(0, -1);
+ exclusive = true;
+ }
+
+ if ( type.indexOf( "." ) >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+
+ if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+ // No jQuery handlers for this event type, and it can't have inline handlers
+ return;
+ }
+
+ // Caller can pass in an Event, Object, or just an event type string
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[ jQuery.expando ] ? event :
+ // Object literal
+ new jQuery.Event( type, event ) :
+ // Just the event type (string)
+ new jQuery.Event( type );
+
+ event.type = type;
+ event.isTrigger = true;
+ event.exclusive = exclusive;
+ event.namespace = namespaces.join( "." );
+ event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+ ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+ // Handle a global trigger
+ if ( !elem ) {
+
+ // TODO: Stop taunting the data cache; remove global events and always attach to document
+ cache = jQuery.cache;
+ for ( i in cache ) {
+ if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+ jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+ }
+ }
+ return;
+ }
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data != null ? jQuery.makeArray( data ) : [];
+ data.unshift( event );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ eventPath = [[ elem, special.bindType || type ]];
+ if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+ old = null;
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push([ cur, bubbleType ]);
+ old = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( old && old === elem.ownerDocument ) {
+ eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+ }
+ }
+
+ // Fire handlers on the event path
+ for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+ cur = eventPath[i][0];
+ event.type = eventPath[i][1];
+
+ handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+ // Note that this is a bare JS function and not a jQuery handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
+ event.preventDefault();
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+ !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction() check here because IE6/7 fails that test.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ // IE<9 dies on focus/blur to hidden element (#1486)
+ if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ old = elem[ ontype ];
+
+ if ( old ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ elem[ type ]();
+ jQuery.event.triggered = undefined;
+
+ if ( old ) {
+ elem[ ontype ] = old;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function( event ) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( event || window.event );
+
+ var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+ delegateCount = handlers.delegateCount,
+ args = [].slice.call( arguments, 0 ),
+ run_all = !event.exclusive && !event.namespace,
+ special = jQuery.event.special[ event.type ] || {},
+ handlerQueue = [],
+ i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers that should run if there are delegated events
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if ( delegateCount && !(event.button && event.type === "click") ) {
+
+ // Pregenerate a single jQuery object for reuse with .is()
+ jqcur = jQuery(this);
+ jqcur.context = this.ownerDocument || this;
+
+ for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+ // Don't process events on disabled elements (#6911, #8165)
+ if ( cur.disabled !== true ) {
+ selMatch = {};
+ matches = [];
+ jqcur[0] = cur;
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+ sel = handleObj.selector;
+
+ if ( selMatch[ sel ] === undefined ) {
+ selMatch[ sel ] = (
+ handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
+ );
+ }
+ if ( selMatch[ sel ] ) {
+ matches.push( handleObj );
+ }
+ }
+ if ( matches.length ) {
+ handlerQueue.push({ elem: cur, matches: matches });
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if ( handlers.length > delegateCount ) {
+ handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+ }
+
+ // Run delegates first; they may want to stop propagation beneath us
+ for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+ matched = handlerQueue[ i ];
+ event.currentTarget = matched.elem;
+
+ for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+ handleObj = matched.matches[ j ];
+
+ // Triggered event must either 1) be non-exclusive and have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+ .apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+ props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function( event, original ) {
+
+ // Add which for key events
+ if ( event.which == null ) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var eventDoc, doc, body,
+ button = original.button,
+ fromElement = original.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && original.clientX != null ) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && fromElement ) {
+ event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && button !== undefined ) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop,
+ originalEvent = event,
+ fixHook = jQuery.event.fixHooks[ event.type ] || {},
+ copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+ event = jQuery.Event( originalEvent );
+
+ for ( i = copy.length; i; ) {
+ prop = copy[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+ if ( !event.target ) {
+ event.target = originalEvent.srcElement || document;
+ }
+
+ // Target should not be a text node (#504, Safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
+ if ( event.metaKey === undefined ) {
+ event.metaKey = event.ctrlKey;
+ }
+
+ return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+ },
+
+ special: {
+ ready: {
+ // Make sure the ready event is setup
+ setup: jQuery.bindReady
+ },
+
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+
+ focus: {
+ delegateType: "focusin"
+ },
+ blur: {
+ delegateType: "focusout"
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( jQuery.isWindow( this ) ) {
+ this.onbeforeunload = eventHandle;
+ }
+ },
+
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
+ }
+ },
+
+ simulate: function( type, elem, event, bubble ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ { type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if ( bubble ) {
+ jQuery.event.trigger( e, null, elem );
+ } else {
+ jQuery.event.dispatch.call( elem, e );
+ }
+ if ( e.isDefaultPrevented() ) {
+ event.preventDefault();
+ }
+ }
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+ } :
+ function( elem, type, handle ) {
+ if ( elem.detachEvent ) {
+ elem.detachEvent( "on" + type, handle );
+ }
+ };
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !(this instanceof jQuery.Event) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+
+ // otherwise set the returnValue property of the original event to false (IE)
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj,
+ selector = handleObj.selector,
+ ret;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Lazy-add a submit handler when a descendant form may potentially be submitted
+ jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+ // Node name check avoids a VML-related crash in IE (#9807)
+ var elem = e.target,
+ form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+ if ( form && !form._submit_attached ) {
+ jQuery.event.add( form, "submit._submit", function( event ) {
+ event._submit_bubble = true;
+ });
+ form._submit_attached = true;
+ }
+ });
+ // return undefined since we don't need an event listener
+ },
+
+ postDispatch: function( event ) {
+ // If form was submitted by the user, bubble the event up the tree
+ if ( event._submit_bubble ) {
+ delete event._submit_bubble;
+ if ( this.parentNode && !event.isTrigger ) {
+ jQuery.event.simulate( "submit", this.parentNode, event, true );
+ }
+ }
+ },
+
+ teardown: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+ jQuery.event.remove( this, "._submit" );
+ }
+ };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+ jQuery.event.special.change = {
+
+ setup: function() {
+
+ if ( rformElems.test( this.nodeName ) ) {
+ // IE doesn't fire change on a check/radio until blur; trigger it on click
+ // after a propertychange. Eat the blur-change in special.change.handle.
+ // This still fires onchange a second time for check/radio after blur.
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ jQuery.event.add( this, "propertychange._change", function( event ) {
+ if ( event.originalEvent.propertyName === "checked" ) {
+ this._just_changed = true;
+ }
+ });
+ jQuery.event.add( this, "click._change", function( event ) {
+ if ( this._just_changed && !event.isTrigger ) {
+ this._just_changed = false;
+ jQuery.event.simulate( "change", this, event, true );
+ }
+ });
+ }
+ return false;
+ }
+ // Delegated event; lazy-add a change handler on descendant inputs
+ jQuery.event.add( this, "beforeactivate._change", function( e ) {
+ var elem = e.target;
+
+ if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+ jQuery.event.add( elem, "change._change", function( event ) {
+ if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+ jQuery.event.simulate( "change", this.parentNode, event, true );
+ }
+ });
+ elem._change_attached = true;
+ }
+ });
+ },
+
+ handle: function( event ) {
+ var elem = event.target;
+
+ // Swallow native change events from checkbox/radio, we already triggered them above
+ if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+ return event.handleObj.handler.apply( this, arguments );
+ }
+ },
+
+ teardown: function() {
+ jQuery.event.remove( this, "._change" );
+
+ return rformElems.test( this.nodeName );
+ }
+ };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0,
+ handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( attaches++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) { // && selector != null
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ this.on( type, selector, data, types[ type ], one );
+ }
+ return this;
+ }
+
+ if ( data == null && fn == null ) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return this;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ });
+ },
+ one: function( types, selector, data, fn ) {
+ return this.on( types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ if ( types && types.preventDefault && types.handleObj ) {
+ // ( event ) dispatched jQuery.Event
+ var handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+ // ( types-object [, selector] )
+ for ( var type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each(function() {
+ jQuery.event.remove( this, types, fn, selector );
+ });
+ },
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ live: function( types, data, fn ) {
+ jQuery( this.context ).on( types, this.selector, data, fn );
+ return this;
+ },
+ die: function( types, fn ) {
+ jQuery( this.context ).off( types, this.selector || "**", fn );
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ return jQuery.event.trigger( type, data, this[0], true );
+ }
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments,
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ };
+
+ // link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
+ while ( i < args.length ) {
+ args[ i++ ].guid = guid;
+ }
+
+ return this.click( toggler );
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ if ( fn == null ) {
+ fn = data;
+ data = null;
+ }
+
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+
+ if ( jQuery.attrFn ) {
+ jQuery.attrFn[ name ] = true;
+ }
+
+ if ( rkeyEvent.test( name ) ) {
+ jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+ }
+
+ if ( rmouseEvent.test( name ) ) {
+ jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+ }
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ expando = "sizcache" + (Math.random() + '').replace('.', ''),
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true,
+ rBackslash = /\\/g,
+ rReturn = /\r\n/g,
+ rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+// Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+ baseHasDuplicate = false;
+ return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+ results = results || [];
+ context = context || document;
+
+ var origContext = context;
+
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ var m, set, checkSet, extra, ret, cur, pop, i,
+ prune = true,
+ contextXML = Sizzle.isXML( context ),
+ parts = [],
+ soFar = selector;
+
+ // Reset the position of the chunker regexp (start from head)
+ do {
+ chunker.exec( "" );
+ m = chunker.exec( soFar );
+
+ if ( m ) {
+ soFar = m[3];
+
+ parts.push( m[1] );
+
+ if ( m[2] ) {
+ extra = m[3];
+ break;
+ }
+ }
+ } while ( m );
+
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+ set = posProcess( parts[0] + parts[1], context, seed );
+
+ } else {
+ set = Expr.relative[ parts[0] ] ?
+ [ context ] :
+ Sizzle( parts.shift(), context );
+
+ while ( parts.length ) {
+ selector = parts.shift();
+
+ if ( Expr.relative[ selector ] ) {
+ selector += parts.shift();
+ }
+
+ set = posProcess( selector, set, seed );
+ }
+ }
+
+ } else {
+ // Take a shortcut and set the context if the root selector is an ID
+ // (but not if it'll be faster if the inner selector is an ID)
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+ ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set )[0] :
+ ret.set[0];
+ }
+
+ if ( context ) {
+ ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+ set = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set ) :
+ ret.set;
+
+ if ( parts.length > 0 ) {
+ checkSet = makeArray( set );
+
+ } else {
+ prune = false;
+ }
+
+ while ( parts.length ) {
+ cur = parts.pop();
+ pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
+
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+
+ } else {
+ checkSet = parts = [];
+ }
+ }
+
+ if ( !checkSet ) {
+ checkSet = set;
+ }
+
+ if ( !checkSet ) {
+ Sizzle.error( cur || selector );
+ }
+
+ if ( toString.call(checkSet) === "[object Array]" ) {
+ if ( !prune ) {
+ results.push.apply( results, checkSet );
+
+ } else if ( context && context.nodeType === 1 ) {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+ results.push( set[i] );
+ }
+ }
+
+ } else {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+ results.push( set[i] );
+ }
+ }
+ }
+
+ } else {
+ makeArray( checkSet, results );
+ }
+
+ if ( extra ) {
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[ i - 1 ] ) {
+ results.splice( i--, 1 );
+ }
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+ return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+ return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+ var set, i, len, match, type, left;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+ type = Expr.order[i];
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ left = match[1];
+ match.splice( 1, 1 );
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace( rBackslash, "" );
+ set = Expr.find[ type ]( match, context, isXML );
+
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = typeof context.getElementsByTagName !== "undefined" ?
+ context.getElementsByTagName( "*" ) :
+ [];
+ }
+
+ return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+ var match, anyFound,
+ type, found, item, filter, left,
+ i, pass,
+ old = expr,
+ result = [],
+ curLoop = set,
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+ while ( expr && set.length ) {
+ for ( type in Expr.filter ) {
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ filter = Expr.filter[ type ];
+ left = match[1];
+
+ anyFound = false;
+
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) === "\\" ) {
+ continue;
+ }
+
+ if ( curLoop === result ) {
+ result = [];
+ }
+
+ if ( Expr.preFilter[ type ] ) {
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+ if ( !match ) {
+ anyFound = found = true;
+
+ } else if ( match === true ) {
+ continue;
+ }
+ }
+
+ if ( match ) {
+ for ( i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ pass = not ^ found;
+
+ if ( inplace && found != null ) {
+ if ( pass ) {
+ anyFound = true;
+
+ } else {
+ curLoop[i] = false;
+ }
+
+ } else if ( pass ) {
+ result.push( item );
+ anyFound = true;
+ }
+ }
+ }
+ }
+
+ if ( found !== undefined ) {
+ if ( !inplace ) {
+ curLoop = result;
+ }
+
+ expr = expr.replace( Expr.match[ type ], "" );
+
+ if ( !anyFound ) {
+ return [];
+ }
+
+ break;
+ }
+ }
+ }
+
+ // Improper expression
+ if ( expr === old ) {
+ if ( anyFound == null ) {
+ Sizzle.error( expr );
+
+ } else {
+ break;
+ }
+ }
+
+ old = expr;
+ }
+
+ return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Utility function for retreiving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+var getText = Sizzle.getText = function( elem ) {
+ var i, node,
+ nodeType = elem.nodeType,
+ ret = "";
+
+ if ( nodeType ) {
+ if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent || innerText for elements
+ if ( typeof elem.textContent === 'string' ) {
+ return elem.textContent;
+ } else if ( typeof elem.innerText === 'string' ) {
+ // Replace IE's carriage returns
+ return elem.innerText.replace( rReturn, '' );
+ } else {
+ // Traverse it's children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ } else {
+
+ // If no nodeType, this is expected to be an array
+ for ( i = 0; (node = elem[i]); i++ ) {
+ // Do not traverse comment nodes
+ if ( node.nodeType !== 8 ) {
+ ret += getText( node );
+ }
+ }
+ }
+ return ret;
+};
+
+var Expr = Sizzle.selectors = {
+ order: [ "ID", "NAME", "TAG" ],
+
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+
+ leftMatch: {},
+
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+
+ attrHandle: {
+ href: function( elem ) {
+ return elem.getAttribute( "href" );
+ },
+ type: function( elem ) {
+ return elem.getAttribute( "type" );
+ }
+ },
+
+ relative: {
+ "+": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !rNonWord.test( part ),
+ isPartStrNotTag = isPartStr && !isTag;
+
+ if ( isTag ) {
+ part = part.toLowerCase();
+ }
+
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+ if ( (elem = checkSet[i]) ) {
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+ elem || false :
+ elem === part;
+ }
+ }
+
+ if ( isPartStrNotTag ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ },
+
+ ">": function( checkSet, part ) {
+ var elem,
+ isPartStr = typeof part === "string",
+ i = 0,
+ l = checkSet.length;
+
+ if ( isPartStr && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+
+ if ( elem ) {
+ var parent = elem.parentNode;
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+ }
+ }
+
+ } else {
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+
+ if ( elem ) {
+ checkSet[i] = isPartStr ?
+ elem.parentNode :
+ elem.parentNode === part;
+ }
+ }
+
+ if ( isPartStr ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ }
+ },
+
+ "": function(checkSet, part, isXML){
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+ },
+
+ "~": function( checkSet, part, isXML ) {
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+ }
+ },
+
+ find: {
+ ID: function( match, context, isXML ) {
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ },
+
+ NAME: function( match, context ) {
+ if ( typeof context.getElementsByName !== "undefined" ) {
+ var ret = [],
+ results = context.getElementsByName( match[1] );
+
+ for ( var i = 0, l = results.length; i < l; i++ ) {
+ if ( results[i].getAttribute("name") === match[1] ) {
+ ret.push( results[i] );
+ }
+ }
+
+ return ret.length === 0 ? null : ret;
+ }
+ },
+
+ TAG: function( match, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( match[1] );
+ }
+ }
+ },
+ preFilter: {
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+ match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+ if ( isXML ) {
+ return match;
+ }
+
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+ if ( elem ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
+ result.push( elem );
+ }
+
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ ID: function( match ) {
+ return match[1].replace( rBackslash, "" );
+ },
+
+ TAG: function( match, curLoop ) {
+ return match[1].replace( rBackslash, "" ).toLowerCase();
+ },
+
+ CHILD: function( match ) {
+ if ( match[1] === "nth" ) {
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ match[2] = match[2].replace(/^\+|\s*/g, '');
+
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+ // calculate the numbers (first)n+(last) including if they are negative
+ match[2] = (test[1] + (test[2] || 1)) - 0;
+ match[3] = test[3] - 0;
+ }
+ else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // TODO: Move to normal caching system
+ match[0] = done++;
+
+ return match;
+ },
+
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+ var name = match[1] = match[1].replace( rBackslash, "" );
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ // Handle if an un-quoted value was used
+ match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+ if ( match[2] === "~=" ) {
+ match[4] = " " + match[4] + " ";
+ }
+
+ return match;
+ },
+
+ PSEUDO: function( match, curLoop, inplace, result, not ) {
+ if ( match[1] === "not" ) {
+ // If we're dealing with a complex expression, or a simple one
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+ match[3] = Sizzle(match[3], null, null, curLoop);
+
+ } else {
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+ if ( !inplace ) {
+ result.push.apply( result, ret );
+ }
+
+ return false;
+ }
+
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+ return true;
+ }
+
+ return match;
+ },
+
+ POS: function( match ) {
+ match.unshift( true );
+
+ return match;
+ }
+ },
+
+ filters: {
+ enabled: function( elem ) {
+ return elem.disabled === false && elem.type !== "hidden";
+ },
+
+ disabled: function( elem ) {
+ return elem.disabled === true;
+ },
+
+ checked: function( elem ) {
+ return elem.checked === true;
+ },
+
+ selected: function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ parent: function( elem ) {
+ return !!elem.firstChild;
+ },
+
+ empty: function( elem ) {
+ return !elem.firstChild;
+ },
+
+ has: function( elem, i, match ) {
+ return !!Sizzle( match[3], elem ).length;
+ },
+
+ header: function( elem ) {
+ return (/h\d/i).test( elem.nodeName );
+ },
+
+ text: function( elem ) {
+ var attr = elem.getAttribute( "type" ), type = elem.type;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+ },
+
+ radio: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+ },
+
+ checkbox: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+ },
+
+ file: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+ },
+
+ password: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+ },
+
+ submit: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "submit" === elem.type;
+ },
+
+ image: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+ },
+
+ reset: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "reset" === elem.type;
+ },
+
+ button: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && "button" === elem.type || name === "button";
+ },
+
+ input: function( elem ) {
+ return (/input|select|textarea|button/i).test( elem.nodeName );
+ },
+
+ focus: function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
+ }
+ },
+ setFilters: {
+ first: function( elem, i ) {
+ return i === 0;
+ },
+
+ last: function( elem, i, match, array ) {
+ return i === array.length - 1;
+ },
+
+ even: function( elem, i ) {
+ return i % 2 === 0;
+ },
+
+ odd: function( elem, i ) {
+ return i % 2 === 1;
+ },
+
+ lt: function( elem, i, match ) {
+ return i < match[3] - 0;
+ },
+
+ gt: function( elem, i, match ) {
+ return i > match[3] - 0;
+ },
+
+ nth: function( elem, i, match ) {
+ return match[3] - 0 === i;
+ },
+
+ eq: function( elem, i, match ) {
+ return match[3] - 0 === i;
+ }
+ },
+ filter: {
+ PSEUDO: function( elem, match, i, array ) {
+ var name = match[1],
+ filter = Expr.filters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+
+ } else if ( name === "contains" ) {
+ return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+ } else if ( name === "not" ) {
+ var not = match[3];
+
+ for ( var j = 0, l = not.length; j < l; j++ ) {
+ if ( not[j] === elem ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ } else {
+ Sizzle.error( name );
+ }
+ },
+
+ CHILD: function( elem, match ) {
+ var first, last,
+ doneName, parent, cache,
+ count, diff,
+ type = match[1],
+ node = elem;
+
+ switch ( type ) {
+ case "only":
+ case "first":
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ if ( type === "first" ) {
+ return true;
+ }
+
+ node = elem;
+
+ /* falls through */
+ case "last":
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ case "nth":
+ first = match[2];
+ last = match[3];
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ doneName = match[0];
+ parent = elem.parentNode;
+
+ if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+ count = 0;
+
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+
+ parent[ expando ] = doneName;
+ }
+
+ diff = elem.nodeIndex - last;
+
+ if ( first === 0 ) {
+ return diff === 0;
+
+ } else {
+ return ( diff % first === 0 && diff / first >= 0 );
+ }
+ }
+ },
+
+ ID: function( elem, match ) {
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
+ },
+
+ TAG: function( elem, match ) {
+ return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
+ },
+
+ CLASS: function( elem, match ) {
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
+ .indexOf( match ) > -1;
+ },
+
+ ATTR: function( elem, match ) {
+ var name = match[1],
+ result = Sizzle.attr ?
+ Sizzle.attr( elem, name ) :
+ Expr.attrHandle[ name ] ?
+ Expr.attrHandle[ name ]( elem ) :
+ elem[ name ] != null ?
+ elem[ name ] :
+ elem.getAttribute( name ),
+ value = result + "",
+ type = match[2],
+ check = match[4];
+
+ return result == null ?
+ type === "!=" :
+ !type && Sizzle.attr ?
+ result != null :
+ type === "=" ?
+ value === check :
+ type === "*=" ?
+ value.indexOf(check) >= 0 :
+ type === "~=" ?
+ (" " + value + " ").indexOf(check) >= 0 :
+ !check ?
+ value && result !== false :
+ type === "!=" ?
+ value !== check :
+ type === "^=" ?
+ value.indexOf(check) === 0 :
+ type === "$=" ?
+ value.substr(value.length - check.length) === check :
+ type === "|=" ?
+ value === check || value.substr(0, check.length + 1) === check + "-" :
+ false;
+ },
+
+ POS: function( elem, match, i, array ) {
+ var name = match[2],
+ filter = Expr.setFilters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ }
+ }
+ }
+};
+
+var origPOS = Expr.match.POS,
+ fescape = function(all, num){
+ return "\\" + (num - 0 + 1);
+ };
+
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+// Expose origPOS
+// "global" as in regardless of relation to brackets/parens
+Expr.match.globalPOS = origPOS;
+
+var makeArray = function( array, results ) {
+ array = Array.prototype.slice.call( array, 0 );
+
+ if ( results ) {
+ results.push.apply( results, array );
+ return results;
+ }
+
+ return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+ makeArray = function( array, results ) {
+ var i = 0,
+ ret = results || [];
+
+ if ( toString.call(array) === "[object Array]" ) {
+ Array.prototype.push.apply( ret, array );
+
+ } else {
+ if ( typeof array.length === "number" ) {
+ for ( var l = array.length; i < l; i++ ) {
+ ret.push( array[i] );
+ }
+
+ } else {
+ for ( ; array[i]; i++ ) {
+ ret.push( array[i] );
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ return a.compareDocumentPosition ? -1 : 1;
+ }
+
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+ };
+
+} else {
+ sortOrder = function( a, b ) {
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
+ } else if ( a.sourceIndex && b.sourceIndex ) {
+ return a.sourceIndex - b.sourceIndex;
+ }
+
+ var al, bl,
+ ap = [],
+ bp = [],
+ aup = a.parentNode,
+ bup = b.parentNode,
+ cur = aup;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ if ( aup === bup ) {
+ return siblingCheck( a, b );
+
+ // If no parents were found then the nodes are disconnected
+ } else if ( !aup ) {
+ return -1;
+
+ } else if ( !bup ) {
+ return 1;
+ }
+
+ // Otherwise they're somewhere else in the tree so we need
+ // to build up a full list of the parentNodes for comparison
+ while ( cur ) {
+ ap.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ cur = bup;
+
+ while ( cur ) {
+ bp.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ al = ap.length;
+ bl = bp.length;
+
+ // Start walking down the tree looking for a discrepancy
+ for ( var i = 0; i < al && i < bl; i++ ) {
+ if ( ap[i] !== bp[i] ) {
+ return siblingCheck( ap[i], bp[i] );
+ }
+ }
+
+ // We ended someplace up the tree so do a sibling check
+ return i === al ?
+ siblingCheck( a, bp[i], -1 ) :
+ siblingCheck( ap[i], b, 1 );
+ };
+
+ siblingCheck = function( a, b, ret ) {
+ if ( a === b ) {
+ return ret;
+ }
+
+ var cur = a.nextSibling;
+
+ while ( cur ) {
+ if ( cur === b ) {
+ return -1;
+ }
+
+ cur = cur.nextSibling;
+ }
+
+ return 1;
+ };
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+ // We're going to inject a fake input element with a specified name
+ var form = document.createElement("div"),
+ id = "script" + (new Date()).getTime(),
+ root = document.documentElement;
+
+ form.innerHTML = "";
+
+ // Inject it into the root element, check its status, and remove it quickly
+ root.insertBefore( form, root.firstChild );
+
+ // The workaround has to do additional checks after a getElementById
+ // Which slows things down for other browsers (hence the branching)
+ if ( document.getElementById( id ) ) {
+ Expr.find.ID = function( match, context, isXML ) {
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+
+ return m ?
+ m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+ [m] :
+ undefined :
+ [];
+ }
+ };
+
+ Expr.filter.ID = function( elem, match ) {
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+ return elem.nodeType === 1 && node && node.nodeValue === match;
+ };
+ }
+
+ root.removeChild( form );
+
+ // release memory in IE
+ root = form = null;
+})();
+
+(function(){
+ // Check to see if the browser returns only elements
+ // when doing getElementsByTagName("*")
+
+ // Create a fake element
+ var div = document.createElement("div");
+ div.appendChild( document.createComment("") );
+
+ // Make sure no comments are found
+ if ( div.getElementsByTagName("*").length > 0 ) {
+ Expr.find.TAG = function( match, context ) {
+ var results = context.getElementsByTagName( match[1] );
+
+ // Filter out possible comments
+ if ( match[1] === "*" ) {
+ var tmp = [];
+
+ for ( var i = 0; results[i]; i++ ) {
+ if ( results[i].nodeType === 1 ) {
+ tmp.push( results[i] );
+ }
+ }
+
+ results = tmp;
+ }
+
+ return results;
+ };
+ }
+
+ // Check to see if an attribute returns normalized href attributes
+ div.innerHTML = "";
+
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+ div.firstChild.getAttribute("href") !== "#" ) {
+
+ Expr.attrHandle.href = function( elem ) {
+ return elem.getAttribute( "href", 2 );
+ };
+ }
+
+ // release memory in IE
+ div = null;
+})();
+
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle,
+ div = document.createElement("div"),
+ id = "__sizzle__";
+
+ div.innerHTML = "";
+
+ // Safari can't handle uppercase or unicode characters when
+ // in quirks mode.
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
+
+ Sizzle = function( query, context, extra, seed ) {
+ context = context || document;
+
+ // Only use querySelectorAll on non-XML documents
+ // (ID selectors don't work in non-HTML documents)
+ if ( !seed && !Sizzle.isXML(context) ) {
+ // See if we find a selector to speed up
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+ // Speed-up: Sizzle("TAG")
+ if ( match[1] ) {
+ return makeArray( context.getElementsByTagName( query ), extra );
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
+ }
+ }
+
+ if ( context.nodeType === 9 ) {
+ // Speed-up: Sizzle("body")
+ // The body element only exists once, optimize finding it
+ if ( query === "body" && context.body ) {
+ return makeArray( [ context.body ], extra );
+
+ // Speed-up: Sizzle("#ID")
+ } else if ( match && match[3] ) {
+ var elem = context.getElementById( match[3] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id === match[3] ) {
+ return makeArray( [ elem ], extra );
+ }
+
+ } else {
+ return makeArray( [], extra );
+ }
+ }
+
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(qsaError) {}
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ var oldContext = context,
+ old = context.getAttribute( "id" ),
+ nid = old || id,
+ hasParent = context.parentNode,
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+ if ( !old ) {
+ context.setAttribute( "id", nid );
+ } else {
+ nid = nid.replace( /'/g, "\\$&" );
+ }
+ if ( relativeHierarchySelector && hasParent ) {
+ context = context.parentNode;
+ }
+
+ try {
+ if ( !relativeHierarchySelector || hasParent ) {
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+ }
+
+ } catch(pseudoError) {
+ } finally {
+ if ( !old ) {
+ oldContext.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ // release memory in IE
+ div = null;
+ })();
+}
+
+(function(){
+ var html = document.documentElement,
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+ if ( matches ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9 fails this)
+ var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+ pseudoWorks = false;
+
+ try {
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( document.documentElement, "[test!='']:sizzle" );
+
+ } catch( pseudoError ) {
+ pseudoWorks = true;
+ }
+
+ Sizzle.matchesSelector = function( node, expr ) {
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+ if ( !Sizzle.isXML( node ) ) {
+ try {
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+ var ret = matches.call( node, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || !disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9, so check for that
+ node.document && node.document.nodeType !== 11 ) {
+ return ret;
+ }
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle(expr, null, null, [node]).length > 0;
+ };
+ }
+})();
+
+(function(){
+ var div = document.createElement("div");
+
+ div.innerHTML = "";
+
+ // Opera can't find a second classname (in 9.6)
+ // Also, make sure that getElementsByClassName actually exists
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+ return;
+ }
+
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
+ div.lastChild.className = "e";
+
+ if ( div.getElementsByClassName("e").length === 1 ) {
+ return;
+ }
+
+ Expr.order.splice(1, 0, "CLASS");
+ Expr.find.CLASS = function( match, context, isXML ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+ return context.getElementsByClassName(match[1]);
+ }
+ };
+
+ // release memory in IE
+ div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem[ expando ] === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem[ expando ] = doneName;
+ elem.sizset = i;
+ }
+
+ if ( elem.nodeName.toLowerCase() === cur ) {
+ match = elem;
+ break;
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem[ expando ] === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem[ expando ] = doneName;
+ elem.sizset = i;
+ }
+
+ if ( typeof cur !== "string" ) {
+ if ( elem === cur ) {
+ match = true;
+ break;
+ }
+
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+ match = elem;
+ break;
+ }
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+if ( document.documentElement.contains ) {
+ Sizzle.contains = function( a, b ) {
+ return a !== b && (a.contains ? a.contains(b) : true);
+ };
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+ Sizzle.contains = function( a, b ) {
+ return !!(a.compareDocumentPosition(b) & 16);
+ };
+
+} else {
+ Sizzle.contains = function() {
+ return false;
+ };
+}
+
+Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context, seed ) {
+ var match,
+ tmpSet = [],
+ later = "",
+ root = context.nodeType ? [context] : context;
+
+ // Position selectors must be done after the filter
+ // And so must :not(positional) so we move all PSEUDOs to the end
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+ later += match[0];
+ selector = selector.replace( Expr.match.PSEUDO, "" );
+ }
+
+ selector = Expr.relative[selector] ? selector + "*" : selector;
+
+ for ( var i = 0, l = root.length; i < l; i++ ) {
+ Sizzle( selector, root[i], tmpSet, seed );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+Sizzle.selectors.attrMap = {};
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+ // Note: This RegExp should be improved, or likely pulled from Sizzle
+ rmultiselector = /,/,
+ isSimple = /^.[^:#\[\.,]*$/,
+ slice = Array.prototype.slice,
+ POS = jQuery.expr.match.globalPOS,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var self = this,
+ i, l;
+
+ if ( typeof selector !== "string" ) {
+ return jQuery( selector ).filter(function() {
+ for ( i = 0, l = self.length; i < l; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ });
+ }
+
+ var ret = this.pushStack( "", "find", selector ),
+ length, n, r;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( n = length; n < ret.length; n++ ) {
+ for ( r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ has: function( target ) {
+ var targets = jQuery( target );
+ return this.filter(function() {
+ for ( var i = 0, l = targets.length; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && (
+ typeof selector === "string" ?
+ // If this is a positional selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ POS.test( selector ) ?
+ jQuery( selector, this.context ).index( this[0] ) >= 0 :
+ jQuery.filter( selector, this ).length > 0 :
+ this.filter( selector ).length > 0 );
+ },
+
+ closest: function( selectors, context ) {
+ var ret = [], i, l, cur = this[0];
+
+ // Array (deprecated as of jQuery 1.7)
+ if ( jQuery.isArray( selectors ) ) {
+ var level = 1;
+
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ for ( i = 0; i < selectors.length; i++ ) {
+
+ if ( jQuery( cur ).is( selectors[ i ] ) ) {
+ ret.push({ selector: selectors[ i ], elem: cur, level: level });
+ }
+ }
+
+ cur = cur.parentNode;
+ level++;
+ }
+
+ return ret;
+ }
+
+ // String
+ var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ cur = this[i];
+
+ while ( cur ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+ ret.push( cur );
+ break;
+
+ } else {
+ cur = cur.parentNode;
+ if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+ break;
+ }
+ }
+ }
+ }
+
+ ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+ return this.pushStack( ret, "closest", selectors );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+ }
+
+ // index in selector
+ if ( typeof elem === "string" ) {
+ return jQuery.inArray( this[0], jQuery( elem ) );
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return jQuery.nth( elem, 2, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return jQuery.nth( elem, 2, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.makeArray( elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+ if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+
+ return this.pushStack( ret, name, slice.call( arguments ).join(",") );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 ?
+ jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+ jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ nth: function( cur, result, dir, elem ) {
+ result = result || 1;
+ var num = 0;
+
+ for ( ; cur; cur = cur[dir] ) {
+ if ( cur.nodeType === 1 && ++num === result ) {
+ break;
+ }
+ }
+
+ return cur;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+ // Can't pass null or undefined to indexOf in Firefox 4
+ // Set to 0 to skip string check
+ qualifier = qualifier || 0;
+
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ var retVal = !!qualifier.call( elem, i, elem );
+ return retVal === keep;
+ });
+
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return ( elem === qualifier ) === keep;
+ });
+
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
+
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
+ }
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+ });
+}
+
+
+
+
+function createSafeFragment( document ) {
+ var list = nodeNames.split( "|" ),
+ safeFrag = document.createDocumentFragment();
+
+ if ( safeFrag.createElement ) {
+ while ( list.length ) {
+ safeFrag.createElement(
+ list.pop()
+ );
+ }
+ }
+ return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+ "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+ rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+ rtagName = /<([\w:]+)/,
+ rtbody = /]", "i"),
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /\/(java|ecma)script/i,
+ rcleanScript = /^\s*", "" ],
+ legend: [ 1, "" ],
+ thead: [ 1, "
+ *
+ * The English LaTeX does not use such commands. Because of this
+ * the empty string is returned in this implementation.
*/
virtual QCString latexLanguageSupportCommand()
{
@@ -117,6 +159,9 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
virtual QCString trIncludingInheritedMembers()
{ return " osztály tagjainak teljes listája, az örökölt tagokkal együtt."; }
+ /*! this is put at the author sections at the bottom of man pages.
+ * parameter s is name of the project name.
+ */
virtual QCString trGeneratedAutomatically(const char *s)
{ QCString result="Ezt a dokumentációt a Doxygen készítette ";
if (s) result+=(QCString)" a" + zed(s[0])+s+(QCString)" projekthez";
@@ -243,7 +288,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
}
if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
- result+="struktúra- és úniómező";
+ result+="struktúra- és uniómező";
}
else
{
@@ -254,7 +299,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
{
if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
- result+="a megfelelő struktúra-/úniódokumentációra minden mezőnél:";
+ result+="a megfelelő struktúra/unió dokumentációra minden mezőnél:";
}
else
{
@@ -265,7 +310,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
{
if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
- result+="a struktúrákra/úniókra, amikhez tartoznak:";
+ result+="a struktúrákra/uniókra, amikhez tartoznak:";
}
else
{
@@ -575,8 +620,8 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
case ClassDef::Struct: result+=" struktúra"; break;
case ClassDef::Union: result+=" unió"; break;
case ClassDef::Interface: result+=" interfész"; break;
- case ClassDef::Protocol: result+=" protocol"; break; // translate me!
- case ClassDef::Category: result+=" category"; break; // translate me!
+ case ClassDef::Protocol: result+=" protokoll"; break;
+ case ClassDef::Category: result+=" kategória"; break;
case ClassDef::Exception: result+=" kivétel"; break;
default: break;
}
@@ -726,8 +771,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
*/
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
+ { // single is true implies a single file
QCString result=(QCString)"Ez a dokumentáció ";
switch(compType)
{
@@ -735,8 +779,8 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
case ClassDef::Struct: result+="a struktúráról"; break;
case ClassDef::Union: result+="az unióról"; break;
case ClassDef::Interface: result+="az interfészről"; break;
- case ClassDef::Protocol: result+="protocol"; break; // translate me!
- case ClassDef::Category: result+="category"; break; // translate me!
+ case ClassDef::Protocol: result+="a protokollról"; break;
+ case ClassDef::Category: result+="a kategóriáról"; break;
case ClassDef::Exception: result+="a kivételről"; break;
default: break;
}
@@ -960,7 +1004,9 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
{
return "Jelmagyarázat";
}
- /*! page explaining how the dot graph's should be interpreted */
+ /*! page explaining how the dot graph's should be interpreted
+ * The %A in the text below are to prevent link to classes called "A".
+ */
virtual QCString trLegendDocs()
{
return
@@ -995,29 +1041,31 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
- "Ha a konfigurációs fájl \\c MAX_DOT_GRAPH_HEIGHT elemének értékét "
- "240-re állítjuk, az eredmény a következő ábra lesz:"
- "
\n"
+ "Az eredmény a következő ábra lesz:"
+ "
\n"
"
\n"
- "Az ábrán levő dobozok jelentése:\n"
+ "A fenti ábrán levő dobozok jelentése a következő:\n"
"
\n"
"
Kitöltött fekete doboz jelzi azt az osztályt vagy struktúrát,"
- "amelyről az ábra szól.\n"
- "
Fekete keret jelzi a dokumentált osztályokat és struktúrákat.\n"
- "
Szürke keret jelzi a nem dokumentált osztályokat és struktúrákat.\n"
+ "amelyről az ábra szól.
\n"
+ "
Fekete keret jelzi a dokumentált osztályokat és struktúrákat.
\n"
+ "
Szürke keret jelzi a nem dokumentált osztályokat és struktúrákat.
\n"
"
Piros keret jelzi azokat az osztályokat és struktúrákat, amelyeknél vágás miatt nem látható "
"az összes leszármaztatási kapcsolat. Egy ábra vágásra kerül, ha nem fér bele "
- "a megadott tartományba."
+ "a megadott tartományba.
\n"
"
\n"
- "A nyilak jelentése:\n"
+ "
\n"
+ "A nyilak jelentése a következő:\n"
+ "
\n"
"
\n"
- "
Sötétkék nyíl jelzi a publikus származtatást.\n"
- "
Sötétzöld nyíl jelzi a védett származtatást.\n"
- "
Sötétvörös nyíl jelzi a privát származtatást.\n"
+ "
Sötétkék nyíl jelzi a publikus származtatás "
+ "kapcsolatát két osztály között.
\n"
+ "
Sötétzöld nyíl jelzi a védett származtatást.
\n"
+ "
Sötétvörös nyíl jelzi a privát származtatást.
\n"
"
Lila szaggatott nyíl jelzi, ha az osztály egy másikat használ vagy tartalmaz. "
- "A nyíl felirata jelzi a változó(k) nevét, amelyeken keresztül a másik osztály kapcsolódik.\n"
+ "A nyíl felirata jelzi a változó(k) nevét, amelyeken keresztül a másik osztály kapcsolódik.
\n"
"
Sárga szaggatott nyíl jelzi a kapcsolatot a sablonpéldány és a példányosított "
- "osztálysablon között. A nyíl felirata jelzi a pélány sablonparamétereit.\n"
+ "osztálysablon között. A nyíl felirata jelzi a pélány sablonparamétereit.
\n"
"
\n";
}
@@ -1086,7 +1134,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
/*! The description of the package index page */
virtual QCString trPackageListDescription()
{
- return "A csomagok rövid leírásai (amennyiben léteznek):";
+ return "A csomagok rövid leírásai (ha léteznek):";
}
/*! The link name in the Quick links header for each page */
virtual QCString trPackages()
@@ -1167,10 +1215,10 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
* be followed by a single name or by a list of names
* of the category.
*/
- virtual QCString trClass(bool first_capital, bool /*singular*/)
+ virtual QCString trClass(bool first_capital, bool singular)
{
QCString result((first_capital ? "Osztály" : "osztály"));
- //if (!singular) result+="es";
+ //if (!singular) result+="ok";
return result;
}
@@ -1178,10 +1226,10 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
* be followed by a single name or by a list of names
* of the category.
*/
- virtual QCString trFile(bool first_capital, bool /*singular*/)
+ virtual QCString trFile(bool first_capital, bool singular)
{
QCString result((first_capital ? "Fájl" : "fájl"));
- //if (!singular) result+="s";
+ if (!singular) result+="ok";
return result;
}
@@ -1189,10 +1237,11 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
* be followed by a single name or by a list of names
* of the category.
*/
- virtual QCString trNamespace(bool first_capital, bool /*singular*/)
+ virtual QCString trNamespace(bool first_capital, bool singular)
{
- QCString result((first_capital ? "Névtér" : "névtér"));
- //if (!singular) result+="s";
+ QCString result("");
+ if (!singular) result+=first_capital ? "Névterek" : "névterek";
+ else result+=first_capital ? "Névtér" : "névtér";
return result;
}
@@ -1200,10 +1249,10 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
* be followed by a single name or by a list of names
* of the category.
*/
- virtual QCString trGroup(bool first_capital, bool /*singular*/)
+ virtual QCString trGroup(bool first_capital, bool singular)
{
- QCString result((first_capital ? "Csoport" : "csoport"));
- //if (!singular) result+="s";
+ QCString result((first_capital ? "Modul" : "modul"));
+ if (!singular) result+="ok";
return result;
}
@@ -1211,10 +1260,10 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
* be followed by a single name or by a list of names
* of the category.
*/
- virtual QCString trPage(bool first_capital, bool /*singular*/)
+ virtual QCString trPage(bool first_capital, bool singular)
{
QCString result((first_capital ? "Oldal" : "oldal"));
- //if (!singular) result+="s";
+ if (!singular) result+="ak";
return result;
}
@@ -1222,10 +1271,10 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
* 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 first_capital, bool singular)
{
QCString result((first_capital ? "Tag" : "tag"));
- //if (!singular) result+="s";
+ if (!singular) result+="ok";
return result;
}
@@ -1233,10 +1282,10 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
* be followed by a single name or by a list of names
* of the category.
*/
- virtual QCString trGlobal(bool first_capital, bool /*singular*/)
+ virtual QCString trGlobal(bool first_capital, bool singular)
{
QCString result((first_capital ? "Globális elem" : "globális elem"));
- //if (!singular) result+="s";
+ if (!singular) result+="ek";
return result;
}
@@ -1490,9 +1539,490 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6
*/
virtual QCString trOverloadText()
{
- return "Ez egy túlterhelt tagfüggvény."
- "A fenti függvénytől csak argumentumaiban különbözik.";
+ return "Ez egy túlterhelt tagfüggvény, "
+ "a kényelem érdekében. A fenti függvénytől csak abban különbözik, "
+ "hogy milyen argumentumokat fogad el.";
+ }
+
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.6
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This is used to introduce a caller (or called-by) graph */
+ virtual QCString trCallerGraph()
+ {
+ return "A függvény hívó gráfja:";
+ }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for enumeration values
+ */
+ virtual QCString trEnumerationValueDocumentation()
+ { return "Enumerációs-érték dokumentáció"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.5.4 (mainly for Fortran)
+//////////////////////////////////////////////////////////////////////////
+
+ /*! header that is put before the list of member subprograms (Fortran). */
+ virtual QCString trMemberFunctionDocumentationFortran()
+ { return "Tagfüggvény/Alprogram dokumentáció"; }
+
+ /*! This is put above each page as a link to the list of annotated data types (Fortran). */
+ virtual QCString trCompoundListFortran()
+ { return "Adattípusok listája"; }
+
+ /*! This is put above each page as a link to all members of compounds (Fortran). */
+ virtual QCString trCompoundMembersFortran()
+ { return "Adatmezők"; }
+
+ /*! This is an introduction to the annotated compound list (Fortran). */
+ virtual QCString trCompoundListDescriptionFortran()
+ { return "Rövid leírással ellátott adattípusok:"; }
+
+ /*! This is an introduction to the page with all data types (Fortran). */
+ virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
+ {
+ QCString result="Az összes ";
+ if (!extractAll)
+ {
+ result+="dokumentált ";
+ }
+ result+="adattípusú tagváltozó";
+ result+=" hivatkozásokkal ellátva ";
+ if (!extractAll)
+ {
+ result+="az egyes adattagok adatszerkezetének dokumentációjára";
+ }
+ else
+ {
+ result+="azokhoz az adattípusokhoz, amelyekhez tartoznak:";
+ }
+ return result;
+ }
+ /*! This is used in LaTeX as the title of the chapter with the
+ * annotated compound index (Fortran).
+ */
+ virtual QCString trCompoundIndexFortran()
+ { return "Adattípus index"; }
+
+ /*! This is used in LaTeX as the title of the chapter containing
+ * the documentation of all data types (Fortran).
+ */
+ virtual QCString trTypeDocumentation()
+ { return "Adattípus dokumentáció"; }
+ /*! This is used in the documentation of a file as a header before the
+ * list of (global) subprograms (Fortran).
+ */
+ virtual QCString trSubprograms()
+ { return "Függvények/Alprogramok"; }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for subprograms (Fortran)
+ */
+ virtual QCString trSubprogramDocumentation()
+ { return "Függvény/Alprogram dokumentáció"; }
+
+ /*! This is used in the documentation of a file/namespace/group before
+ * the list of links to documented compounds (Fortran)
+ */
+ virtual QCString trDataTypes()
+ { return "Adattípusok"; }
+
+ /*! used as the title of page containing all the index of all modules (Fortran). */
+ virtual QCString trModulesList()
+ { return "Modulok listája"; }
+
+ /*! used as an introduction to the modules list (Fortran) */
+ virtual QCString trModulesListDescription(bool extractAll)
+ {
+ QCString result="Az összes ";
+ if (!extractAll) result+="dokumentált ";
+ result+="rövid leírással ellátott modul:";
+ return result;
+ }
+
+ /*! used as the title of the HTML page of a module/type (Fortran) */
+ virtual QCString trCompoundReferenceFortran(const char *clName,
+ ClassDef::CompoundType compType,
+ bool isTemplate)
+ {
+ QCString result=(QCString)clName;
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" modul"; break;
+ case ClassDef::Struct: result+=" típus"; break;
+ case ClassDef::Union: result+=" unió"; break;
+ case ClassDef::Interface: result+=" interfész"; break;
+ case ClassDef::Protocol: result+=" protokoll"; break;
+ case ClassDef::Category: result+=" kategória"; break;
+ case ClassDef::Exception: result+=" kivétel"; break;
+ default: break;
+ }
+ if (isTemplate) result+=" sablon";
+ result+=" hivatkozás";
+ return result;
+ }
+ /*! used as the title of the HTML page of a module (Fortran) */
+ virtual QCString trModuleReference(const char *namespaceName)
+ {
+ QCString result=namespaceName;
+ result+=" modul hivatkozás";
+ return result;
+ }
+
+ /*! This is put above each page as a link to all members of modules. (Fortran) */
+ virtual QCString trModulesMembers()
+ { return "Modul adattagok"; }
+
+ /*! This is an introduction to the page with all modules members (Fortran) */
+ virtual QCString trModulesMemberDescription(bool extractAll)
+ {
+ QCString result="Az összes ";
+ if (!extractAll) result+="dokumentált ";
+ result+="modul adattagja hivatkozásokkal ellátva ";
+ if (extractAll)
+ {
+ result+="az egyes adattagok moduljainak dokumentációjára:";
+ }
+ else
+ {
+ result+="azokhoz a modulokhoz, amelyekhez tartoznak:";
+ }
+ return result;
+ }
+
+ /*! This is used in LaTeX as the title of the chapter with the
+ * index of all modules (Fortran).
+ */
+ virtual QCString trModulesIndex()
+ { return "Modulok indexe"; }
+
+ /*! This is used for translation of the word that will possibly
+ * be followed by a single name or by a list of names
+ * of the category.
+ */
+ virtual QCString trModule(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Modul" : "modul"));
+ if (!singular) result+="s";
+ return result;
+ }
+
+ /*! This is put at the bottom of a module documentation page and is
+ * followed by a list of files that were used to generate the page.
+ */
+ virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
+ bool single)
+ {
+ // single is true implies a single file
+ QCString result=(QCString)"Ez a dokumentáció ";
+ switch(compType)
+ {
+ case ClassDef::Class: result+="a modulról"; break;
+ case ClassDef::Struct: result+="a típusról"; break;
+ case ClassDef::Union: result+="az unióról"; break;
+ case ClassDef::Interface: result+="az interfészról"; break;
+ case ClassDef::Protocol: result+="a protokollról"; break;
+ case ClassDef::Category: result+="a kategóriáról"; break;
+ case ClassDef::Exception: result+="a kivételről"; break;
+ default: break;
+ }
+ result+=" a következő fájl";
+ if (!single) result+="ok";
+ result+=" alapján készült:";
+ return result;
+ }
+
+ /*! This is used for translation of the word that will possibly
+ * be followed by a single name or by a list of names
+ * of the category.
+ */
+ virtual QCString trType(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Típus" : "típus"));
+ if (!singular) result+="ok";
+ return result;
}
+
+ /*! This is used for translation of the word that will possibly
+ * be followed by a single name or by a list of names
+ * of the category.
+ */
+ virtual QCString trSubprogram(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Alprogram" : "alprogram"));
+ if (!singular) result+="ok";
+ return result;
+ }
+
+ /*! C# Type Constraint list */
+ virtual QCString trTypeConstraints()
+ {
+ return "Típuskorlátozások";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.0 (mainly for the new search engine)
+//////////////////////////////////////////////////////////////////////////
+
+ /*! directory relation for \a name */
+ virtual QCString trDirRelation(const char *name)
+ {
+ return QCString(name)+" kapcsolat";
+ }
+
+ /*! Loading message shown when loading search results */
+ virtual QCString trLoading()
+ {
+ return "Betöltés...";
+ }
+
+ /*! Label used for search results in the global namespace */
+ virtual QCString trGlobalNamespace()
+ {
+ return "Globális névtér";
+ }
+
+ /*! Message shown while searching */
+ virtual QCString trSearching()
+ {
+ return "Keresés...";
+ }
+
+ /*! Text shown when no search results are found */
+ virtual QCString trNoMatches()
+ {
+ return "Nincs egyezés";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3 (missing items for the directory pages)
+//////////////////////////////////////////////////////////////////////////
+
+ /*! when clicking a directory dependency label, a page with a
+ * table is shown. The heading for the first column mentions the
+ * source file that has a relation to another file.
+ */
+ virtual QCString trFileIn(const char *name)
+ {
+ return (QCString)"Fájl a(z) "+name+" könyvtárban";
+ }
+
+ /*! when clicking a directory dependency label, a page with a
+ * table is shown. The heading for the second column mentions the
+ * destination file that is included.
+ */
+ virtual QCString trIncludesFileIn(const char *name)
+ {
+ return (QCString)"Tartalmazott fájl a(z) "+name+" könyvtárban";
+ }
+
+ /** Compiles a date string.
+ * @param year Year in 4 digits
+ * @param month Month of the year: 1=January
+ * @param day Day of the Month: 1..31
+ * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
+ * @param hour Hour of the day: 0..23
+ * @param minutes Minutes in the hour: 0..59
+ * @param seconds Seconds within the minute: 0..59
+ * @param includeTime Include time in the result string?
+ */
+ virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+ int hour,int minutes,int seconds,
+ bool includeTime)
+ {
+ static const char *days[] = { "Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat","Vasárnap" };
+ static const char *months[] = { "Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December" };
+ QCString sdate;
+ sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
+ if (includeTime)
+ {
+ QCString stime;
+ stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
+ sdate+=stime;
+ }
+ return sdate;
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.7.5
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Header for the page with bibliographic citations */
+ virtual QCString trCiteReferences()
+ { return "Bibliográfia"; }
+
+ /*! Text for copyright paragraph */
+ virtual QCString trCopyright()
+ { return "Szerzői jog"; }
+
+ /*! Header for the graph showing the directory dependencies */
+ virtual QCString trDirDepGraph(const char *name)
+ { return QCString("Könyvtár függőségi gráf a(z) ")+name+"-könyvtárhoz:"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.0
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Detail level selector shown for hierarchical indices */
+ virtual QCString trDetailLevel()
+ { return "részletességi szint"; }
+
+ /*! Section header for list of template parameters */
+ virtual QCString trTemplateParameters()
+ { return "Sablon paraméterek"; }
+
+ /*! Used in dot graph when UML_LOOK is enabled and there are many fields */
+ virtual QCString trAndMore(const QCString &number)
+ { return "és "+number+" elemmel több..."; }
+
+ /*! Used file list for a Java enum */
+ virtual QCString trEnumGeneratedFromFiles(bool single)
+ { QCString result = "A dokumentáció ehhez az enum-hoz a következő fájl";
+ if (!single) result+="ok";
+ result+=" alapján készült:";
+ return result;
+ }
+
+ /*! Header of a Java enum page (Java enums are represented as classes). */
+ virtual QCString trEnumReference(const char *name)
+ { return QCString(name)+" felsoroló referencia"; }
+
+ /*! Used for a section containing inherited members */
+ virtual QCString trInheritedFrom(const char *members,const char *what)
+ { return QCString(members)+" a(z) "+what+" osztályból származnak"; }
+
+ /*! Header of the sections with inherited members specific for the
+ * base class(es)
+ */
+ virtual QCString trAdditionalInheritedMembers()
+ { return "További örökölt tagok"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.2
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a tooltip for the toggle button that appears in the
+ * navigation tree in the HTML output when GENERATE_TREEVIEW is
+ * enabled. This tooltip explains the meaning of the button.
+ */
+ virtual QCString trPanelSynchronisationTooltip(bool enable)
+ {
+ QCString opt = enable ? "engedélyez" : "letilt";
+ return "Kattintson a(z) "+opt+" panel synchronisation";
+ }
+
+ /*! Used in a method of an Objective-C class that is declared in a
+ * a category. Note that the @1 marker is required and is replaced
+ * by a link.
+ */
+ virtual QCString trProvidedByCategory()
+ {
+ return "@0 kategória szerint.";
+ }
+
+ /*! Used in a method of an Objective-C category that extends a class.
+ * Note that the @1 marker is required and is replaced by a link to
+ * the class method.
+ */
+ virtual QCString trExtendsClass()
+ {
+ return "@0 kiterjesztett osztály.";
+ }
+
+ /*! Used as the header of a list of class methods in Objective-C.
+ * These are similar to static public member functions in C++.
+ */
+ virtual QCString trClassMethods()
+ {
+ return "Osztály metódusok";
+ }
+
+ /*! Used as the header of a list of instance methods in Objective-C.
+ * These are similar to public member functions in C++.
+ */
+ virtual QCString trInstanceMethods()
+ {
+ return "Példány metódusok";
+ }
+
+ /*! Used as the header of the member functions of an Objective-C class.
+ */
+ virtual QCString trMethodDocumentation()
+ {
+ return "Metódus dokumentáció";
+ }
+
+ /*! Used as the title of the design overview picture created for the
+ * VHDL output.
+ */
+ virtual QCString trDesignOverview()
+ {
+ return "Dizájn áttekintés";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.4
+//////////////////////////////////////////////////////////////////////////
+
+ /** old style UNO IDL services: implemented interfaces */
+ virtual QCString trInterfaces()
+ { return "Exportált interfészek"; }
+
+ /** old style UNO IDL services: inherited services */
+ virtual QCString trServices()
+ { return "Mellékelt szolgáltatások"; }
+
+ /** UNO IDL constant groups */
+ virtual QCString trConstantGroups()
+ { return "Konstans csoportok"; }
+
+ /** UNO IDL constant groups */
+ virtual QCString trConstantGroupReference(const char *namespaceName)
+ {
+ QCString result=namespaceName;
+ result+=" konstans csoport referencia";
+ return result;
+ }
+ /** UNO IDL service page title */
+ virtual QCString trServiceReference(const char *sName)
+ {
+ QCString result=(QCString)sName;
+ result+=" szolgáltatás referencia";
+ return result;
+ }
+ /** UNO IDL singleton page title */
+ virtual QCString trSingletonReference(const char *sName)
+ {
+ QCString result=(QCString)sName;
+ result+=" egyke példány referencia";
+ return result;
+ }
+ /** UNO IDL service page */
+ virtual QCString trServiceGeneratedFromFiles(bool single)
+ {
+ // single is true implies a single file
+ QCString result=(QCString)"A szolgáltatás dokumentációja "
+ "a következő fájl";
+ if (single) result+="ból"; else result+="okból";
+ result+="lett létrehozva:";
+ return result;
+ }
+ /** UNO IDL singleton page */
+ virtual QCString trSingletonGeneratedFromFiles(bool single)
+ {
+ // single is true implies a single file
+ QCString result=(QCString)"Az egyke példány dokomentációja "
+ "a következő fájl";
+ if (single) result+="ból"; else result+="okból";
+ result+="lett létrehozva:";
+ return result;
+ }
+
+//////////////////////////////////////////////////////////////////////////
+
};
#endif
diff --git a/src/translator_it.h b/src/translator_it.h
index 8f08b5aa..9638a019 100644
--- a/src/translator_it.h
+++ b/src/translator_it.h
@@ -89,7 +89,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
-class TranslatorItalian : public Translator
+class TranslatorItalian : public TranslatorAdapter_1_8_15
{
public:
diff --git a/src/translator_je.h b/src/translator_je.h
index 835a516b..d5554213 100644
--- a/src/translator_je.h
+++ b/src/translator_je.h
@@ -36,7 +36,19 @@ class TranslatorJapaneseEn : public TranslatorEnglish
{ return "japanese-en"; }
virtual QCString latexLanguageSupportCommand()
{
- return "platex";
+ return "\\usepackage{CJKutf8}\n";
+ }
+ virtual QCString latexFontenc()
+ {
+ return "";
+ }
+ virtual QCString latexDocumentPre()
+ {
+ return "\\begin{CJK}{UTF8}{min}\n";
+ }
+ virtual QCString latexDocumentPost()
+ {
+ return "\\end{CJK}\n";
}
virtual QCString trRTFansicp()
{
diff --git a/src/translator_jp.h b/src/translator_jp.h
index c4f92c24..fc0d65d2 100644
--- a/src/translator_jp.h
+++ b/src/translator_jp.h
@@ -69,16 +69,28 @@ Doxygen の開発の方でもそれはそれでいーんじゃん?みたいな
#ifndef TRANSLATOR_JP_H
#define TRANSLATOR_JP_H
-class TranslatorJapanese : public Translator
+class TranslatorJapanese : public TranslatorAdapter_1_8_15
{
public:
virtual QCString idLanguage()
{ return "japanese"; }
virtual QCString latexLanguageSupportCommand()
+ {
+ return "\\usepackage{CJKutf8}\n";
+ }
+ virtual QCString latexFontenc()
{
return "";
}
+ virtual QCString latexDocumentPre()
+ {
+ return "\\begin{CJK}{UTF8}{min}\n";
+ }
+ virtual QCString latexDocumentPost()
+ {
+ return "\\end{CJK}\n";
+ }
/*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions()
diff --git a/src/translator_ke.h b/src/translator_ke.h
index 525cf84a..c9f488c8 100644
--- a/src/translator_ke.h
+++ b/src/translator_ke.h
@@ -35,12 +35,22 @@ class TranslatorKoreanEn : public TranslatorEnglish
{ return "korean-en"; }
virtual QCString latexLanguageSupportCommand()
{
- return "\\usepackage{hfont}\n";
+ return "\\usepackage{kotex}\n";
}
virtual QCString trRTFansicp()
{
return "949";
}
+ virtual QCString latexCommandName()
+ {
+ QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ if (latex_command.isEmpty()) latex_command = "latex";
+ if (Config_getBool(USE_PDFLATEX))
+ {
+ if (latex_command == "latex") latex_command = "xelatex";
+ }
+ return latex_command;
+ }
/*! Used as ansicpg for RTF fcharset
* \see trRTFansicp() for a table of possible values.
diff --git a/src/translator_kr.h b/src/translator_kr.h
index 7e95e3b3..fb1c3563 100644
--- a/src/translator_kr.h
+++ b/src/translator_kr.h
@@ -48,7 +48,7 @@
Translator class (by the local maintainer) when the localized
translator is made up-to-date again.
*/
-class TranslatorKorean : public Translator
+class TranslatorKorean : public TranslatorAdapter_1_8_15
{
protected:
friend class TranslatorAdapterBase;
@@ -86,7 +86,17 @@ class TranslatorKorean : public Translator
// I'm not sure what this should be.
// When I figure it out, I'll update this.
// see http://www.ktug.or.kr/jsboard/read.php?table=operate&no=4422&page=1
- return "\\usepackage{hfont}\n";
+ return "\\usepackage{kotex}\n";
+ }
+ virtual QCString latexCommandName()
+ {
+ QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ if (latex_command.isEmpty()) latex_command = "latex";
+ if (Config_getBool(USE_PDFLATEX))
+ {
+ if (latex_command == "latex") latex_command = "xelatex";
+ }
+ return latex_command;
}
// --- Language translation methods -------------------
diff --git a/src/translator_lv.h b/src/translator_lv.h
index 2736bb07..bd579dae 100644
--- a/src/translator_lv.h
+++ b/src/translator_lv.h
@@ -76,7 +76,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4
*/
virtual QCString latexLanguageSupportCommand()
{
- return "\\usepackage[LV]{fontenc}\n"
+ return "\\usepackage[T2A]{fontenc}\n"
"\\usepackage[latvian]{babel}\n";
}
diff --git a/src/translator_nl.h b/src/translator_nl.h
index 241cf975..7cecc7db 100644
--- a/src/translator_nl.h
+++ b/src/translator_nl.h
@@ -93,8 +93,15 @@ class TranslatorDutch : public Translator
QCString trSearch()
{ return "Zoeken"; }
QCString trClassHierarchyDescription()
- { return "Deze inheritance lijst is min of meer alfabetisch "
- "gesorteerd:";
+ {
+ if (Config_getBool(OPTIMIZE_OUTPUT_VHDL))
+ {
+ return "Hieronder is een hiërarchische lijst met alle entiteiten:";
+ }
+ else
+ {
+ return "Deze inheritance lijst is min of meer alfabetisch gesorteerd:";
+ }
}
QCString trFileListDescription(bool extractAll)
{
@@ -1586,6 +1593,198 @@ class TranslatorDutch : public Translator
}
//////////////////////////////////////////////////////////////////////////
+// new since 1.8.15
+//////////////////////////////////////////////////////////////////////////
+
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Ontwerp Eenheid Hiërarchie"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Ontwerp Eenheid Lijst"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Ontwerp Eenheid Members"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "hieronder volgt de lijst met all ontwerp eenheden met links "
+ "naar de entiteiten waar ze bij behoren:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Ontwerp Eenheid Index"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Ontwerp Eenheden"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Functies/Procedures/Processen"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Bibliotheek";
+ else return "Bibliotheken";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Package";
+ else return "Packages";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Signal";
+ else return "Signals";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Bestanddeel";
+ else return "Bestanddelen";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Konstante";
+ else return "Konstanten";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entiteit";
+ else return "Entiteiten";
+ case VhdlDocGen::TYPE:
+ if (single) return "Type";
+ else return "Types";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Ondertype";
+ else return "Ondertypes";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Funktie";
+ else return "Funkties";
+ case VhdlDocGen::RECORD:
+ if (single) return "Record";
+ else return "Records";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Procedure";
+ else return "Procedures";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Architectuur";
+ else return "Architecturen";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Attribuut";
+ else return "Attributen";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Proces";
+ else return "Processen";
+ case VhdlDocGen::PORT:
+ if (single) return "Poort";
+ else return "Porten";
+ case VhdlDocGen::USE:
+ if (single) return "gebruiks clausule";
+ else return "Gebruiks Clausules";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Algemeen";
+ else return "Algemene";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Package Body";
+ case VhdlDocGen::UNITS:
+ return "Eenheden";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Gedeelde Variable";
+ else return "Gedeelde Variablen";
+ case VhdlDocGen::VFILE:
+ if (single) return "Bestand";
+ else return "Bestanden";
+ case VhdlDocGen::GROUP:
+ if (single) return "Groep";
+ else return "Groepen";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instantiëring";
+ else return "Instantiëringen";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Alias";
+ else return "Aliases";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Configuratie";
+ else return "Configuraties";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Diverse";
+ case VhdlDocGen::UCF_CONST:
+ return "Limiteringen";
+ default:
+ return "Klasse";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return QCString(name)+" Referentie"; }
+
+ /* Slice */
+ virtual QCString trConstants()
+ { return "Konstanten"; }
+ virtual QCString trConstantDocumentation()
+ { return "Documentatie van konstanten"; }
+ virtual QCString trSequences()
+ { return "Reeksen"; }
+ virtual QCString trSequenceDocumentation()
+ { return "Documentatie van reeksen"; }
+ virtual QCString trDictionaries()
+ { return "Vertalingslijsten"; }
+ virtual QCString trDictionaryDocumentation()
+ { return "Documentatie van vertalingslijsten"; }
+ virtual QCString trSliceInterfaces()
+ { return "Interfaces"; }
+ virtual QCString trInterfaceIndex()
+ { return "Index van interfaces"; }
+ virtual QCString trInterfaceList()
+ { return "Lijst van interfaces"; }
+ virtual QCString trInterfaceListDescription()
+ { return "Hieronder volgt de lijst met alle interfaces, elk met een korte beschrijving:"; }
+ virtual QCString trInterfaceHierarchy()
+ { return "Interface Hiërarchie"; }
+ virtual QCString trInterfaceHierarchyDescription()
+ { return "Deze inheritance lijst is min of meer alfabetisch gesorteerd:"; }
+ virtual QCString trInterfaceDocumentation()
+ { return "Documentatie van interfaces"; }
+ virtual QCString trStructs()
+ { return "Structs"; }
+ virtual QCString trStructIndex()
+ { return "Index van struct"; }
+ virtual QCString trStructList()
+ { return "Lijst van struct"; }
+ virtual QCString trStructListDescription()
+ { return "Hieronder volgt de lijst met alle structs, elk met een korte beschrijving:"; }
+ virtual QCString trStructDocumentation()
+ { return "Documentatie van structs"; }
+ virtual QCString trExceptionIndex()
+ { return "Index van exceptions"; }
+ virtual QCString trExceptionList()
+ { return "Lijst van exceptions"; }
+ virtual QCString trExceptionListDescription()
+ { return "Hieronder volgt de lijst met alle exeptions, elk met een korte beschrijving:"; }
+ virtual QCString trExceptionHierarchy()
+ { return "Exception Hiërarchie"; }
+ virtual QCString trExceptionHierarchyDescription()
+ { return "Deze inheritance lijst is min of meer alfabetisch gesorteerd:"; }
+ virtual QCString trExceptionDocumentation()
+ { return "Documentatie van exceptions"; }
+ virtual QCString trCompoundReferenceSlice(const char *clName, ClassDef::CompoundType compType, bool isLocal)
+ {
+ QCString result=(QCString)clName;
+ if (isLocal) result+=" Lokale";
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Class"; break;
+ case ClassDef::Struct: result+=" Struct"; break;
+ case ClassDef::Union: result+=" Union"; break;
+ case ClassDef::Interface: result+=" Interface"; break;
+ case ClassDef::Protocol: result+=" Protocol"; break;
+ case ClassDef::Category: result+=" Category"; break;
+ case ClassDef::Exception: result+=" Exception"; break;
+ default: break;
+ }
+ result+=" Referentie";
+ return result;
+ }
+ virtual QCString trOperations()
+ { return "Bewerkingen"; }
+ virtual QCString trOperationDocumentation()
+ { return "Documentatie van bewerkingen"; }
+ virtual QCString trDataMembers()
+ { return "Data members"; }
+ virtual QCString trDataMemberDocumentation()
+ { return "Documentatie van data members"; }
+ //////////////////////////////////////////////////////////////////////////
};
#endif
diff --git a/src/translator_no.h b/src/translator_no.h
index 58b596a5..eccd952d 100644
--- a/src/translator_no.h
+++ b/src/translator_no.h
@@ -72,8 +72,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6
virtual QCString latexLanguageSupportCommand()
{
return
- "\\usepackage[norwegian]{babel}\n"
- "\\usepackage[T1]{fontenc}\n";
+ "\\usepackage[norsk]{babel}\n";
}
// --- Language translation methods -------------------
diff --git a/src/translator_pl.h b/src/translator_pl.h
index 421f4072..e0ecc8f7 100644
--- a/src/translator_pl.h
+++ b/src/translator_pl.h
@@ -44,8 +44,14 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2
*/
QCString latexLanguageSupportCommand()
{
- return "\\usepackage{polski}\n"
- "\\usepackage[T1]{fontenc}\n";
+ return "\\usepackage[polish]{babel}\n"
+ "\\let\\lll\\undefined\n"; /* to overcome problems with the <<<
+ symbol as defined in the amssymb
+ package, and the Polish symbol
+ "Latin Small Letter L With Stroke"
+ ł or ł or ł
+ We take the amssymb symbol as leading.
+ */
}
// --- Language translation methods -------------------
diff --git a/src/translator_pt.h b/src/translator_pt.h
index c58bf64c..23faf7fa 100644
--- a/src/translator_pt.h
+++ b/src/translator_pt.h
@@ -1,5 +1,5 @@
/******************************************************************************
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
+ * Copyright (C) 1997-2018 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
@@ -10,9 +10,9 @@
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
- * Portuguese translation version 20110428
+ * Portuguese translation version
* Maintainer (from 04/28/2011):
- * Fabio "FJTC" Jun Takada Chino
+ * Fabio "FJTC" Jun Takada Chino
* Maintainer (until 04/28/2011):
* Rui Godinho Lopes
*
@@ -24,6 +24,8 @@
* VERSION HISTORY
* ---------------
* History:
+ * 20180612:
+ * - Updated to 1.8.15;
* 20131129:
* - Updated to 1.8.5;
* - Translation in the method trFileMembers() fixed;
@@ -55,7 +57,7 @@
#define TRANSLATOR_PT_H
-class TranslatorPortuguese : public Translator
+class TranslatorPortuguese : public TranslatorAdapter_1_8_15
{
public:
@@ -85,7 +87,10 @@ class TranslatorPortuguese : public Translator
* the empty string is returned in this implementation.
*/
virtual QCString latexLanguageSupportCommand()
- { return "Portuguese"; }
+ {
+ return
+ "\\usepackage[portuges]{babel}\n";
+ }
// --- Language translation methods -------------------
@@ -2016,7 +2021,124 @@ class TranslatorPortuguese : public Translator
return result;
}
-//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ // new since 1.8.15
+ //////////////////////////////////////////////////////////////////////////
+
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Hierarquia da Unidade de Design"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Lista de Unidades de Design"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Membros da Unidade de Design"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "Esta é uma lista de todos os membros de unidades de design "
+ "com ligações para as entidades às quais pertencem:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Índice de Unidades de Design"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Unidades de Design"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Funções/Procedimentos/Processos"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Biblioteca";
+ else return "Bibliotecas";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Pacote";
+ else return "Pacotes";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Sinal";
+ else return "Sinais";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Componente";
+ else return "Componentes";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Constante";
+ else return "Constantes";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entidade";
+ else return "Entidades";
+ case VhdlDocGen::TYPE:
+ if (single) return "Tipo";
+ else return "Tipos";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Subtipo";
+ else return "Subtipos";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Função";
+ else return "Funções";
+ case VhdlDocGen::RECORD:
+ if (single) return "Registro";
+ else return "Registros";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Procedimento";
+ else return "Procedimentos";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Arquitetura";
+ else return "Arquiteturas";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Atributo";
+ else return "Atributos";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Processo";
+ else return "Processos";
+ case VhdlDocGen::PORT:
+ if (single) return "Porta";
+ else return "Portas";
+ case VhdlDocGen::USE:
+ if (single) return "cláusula de uso";
+ else return "cláusulas de uso";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Generico";
+ else return "Genericos";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Corpo do Pacote";
+ case VhdlDocGen::UNITS:
+ return "Unidades";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Variável Compartilhada";
+ else return "Variáveis Compartilhadas";
+ case VhdlDocGen::VFILE:
+ if (single) return "Ficheiro";
+ else return "Ficheiros";
+ case VhdlDocGen::GROUP:
+ if (single) return "Grupo";
+ else return "Grupos";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instância";
+ else return "Instâncias";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Apelido";
+ else return "Apelidos";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Configuração";
+ else return "Configurações";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Outros"; // Is this correct for VHDL?
+ case VhdlDocGen::UCF_CONST:
+ return "Restrições";
+ default:
+ return "Classe";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return "Referência de " + QCString(name); }
+
+ //////////////////////////////////////////////////////////////////////////
};
#endif
diff --git a/src/translator_ro.h b/src/translator_ro.h
index 661578b8..6f0c197a 100644
--- a/src/translator_ro.h
+++ b/src/translator_ro.h
@@ -42,7 +42,7 @@
#define TRANSLATOR_RO_H
-class TranslatorRomanian : public Translator
+class TranslatorRomanian : public TranslatorAdapter_1_8_15
{
public:
diff --git a/src/translator_ru.h b/src/translator_ru.h
index 54c0202d..9d928882 100644
--- a/src/translator_ru.h
+++ b/src/translator_ru.h
@@ -26,7 +26,7 @@
#ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H
-class TranslatorRussian : public Translator
+class TranslatorRussian : public TranslatorAdapter_1_8_15
{
public:
/*! Used for identification of the language. */
diff --git a/src/translator_sc.h b/src/translator_sc.h
index d2b3954e..e8191df3 100644
--- a/src/translator_sc.h
+++ b/src/translator_sc.h
@@ -70,6 +70,11 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0
* the empty string is returned in this implementation.
*/
virtual QCString latexLanguageSupportCommand()
+ {
+ return "\\usepackage[T2A]{fontenc}\n"
+ "\\usepackage[russian]{babel}\n";
+ }
+ virtual QCString latexFontenc()
{
return "";
}
diff --git a/src/translator_si.h b/src/translator_si.h
index 792053e1..2dd7e5bc 100644
--- a/src/translator_si.h
+++ b/src/translator_si.h
@@ -36,7 +36,7 @@ class TranslatorSlovene : public TranslatorAdapter_1_4_6
*/
QCString latexLanguageSupportCommand()
{
- return "\\usepackage[slovene]{babel}\n\\usepackage[T1]{fontenc}\n";
+ return "\\usepackage[slovene]{babel}\n";
}
QCString trRelatedFunctions()
{ return "Povezane funkcije"; }
diff --git a/src/translator_sk.h b/src/translator_sk.h
index 3a925ec1..9ee82523 100644
--- a/src/translator_sk.h
+++ b/src/translator_sk.h
@@ -32,7 +32,7 @@
#ifndef TRANSLATOR_SK_H
#define TRANSLATOR_SK_H
-class TranslatorSlovak : public Translator
+class TranslatorSlovak : public TranslatorAdapter_1_8_15
{
public:
// --- Language control methods -------------------
@@ -41,8 +41,14 @@ class TranslatorSlovak : public Translator
{ return "slovak"; }
virtual QCString latexLanguageSupportCommand()
- { return "\\usepackage[slovak]{babel}\n"; }
-
+ { return "\\usepackage[slovak]{babel}\n"
+ "\\usepackage{regexpatch}\n"
+ "\\makeatletter\n"
+ "% Change the `-` delimiter to an active character\n"
+ "\\xpatchparametertext\\@@@cmidrule{-}{\\cA-}{}{}\n"
+ "\\xpatchparametertext\\@cline{-}{\\cA-}{}{}\n"
+ "\\makeatother\n";
+ }
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
diff --git a/src/translator_sv.h b/src/translator_sv.h
index 88fffd9f..5da89df8 100644
--- a/src/translator_sv.h
+++ b/src/translator_sv.h
@@ -120,7 +120,7 @@ Problem!
#ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H
-class TranslatorSwedish : public Translator
+class TranslatorSwedish : public TranslatorAdapter_1_8_15
{
public:
diff --git a/src/translator_tw.h b/src/translator_tw.h
index 26a6db62..9e9092d4 100644
--- a/src/translator_tw.h
+++ b/src/translator_tw.h
@@ -41,7 +41,7 @@
// Translator class (by the local maintainer) when the localized
// translator is made up-to-date again.
-class TranslatorChinesetraditional : public Translator
+class TranslatorChinesetraditional : public TranslatorAdapter_1_8_15
{
public:
@@ -71,9 +71,21 @@ class TranslatorChinesetraditional : public Translator
* the empty string is returned in this implementation.
*/
virtual QCString latexLanguageSupportCommand()
+ {
+ return "\\usepackage{CJKutf8}\n";
+ }
+ virtual QCString latexFontenc()
{
return "";
}
+ virtual QCString latexDocumentPre()
+ {
+ return "\\begin{CJK}{UTF8}{min}\n";
+ }
+ virtual QCString latexDocumentPost()
+ {
+ return "\\end{CJK}\n";
+ }
// --- Language translation methods -------------------
diff --git a/src/translator_vi.h b/src/translator_vi.h
index a0046b04..b391b0c5 100644
--- a/src/translator_vi.h
+++ b/src/translator_vi.h
@@ -77,10 +77,24 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0
* the empty string is returned in this implementation.
*/
virtual QCString latexLanguageSupportCommand()
+ {
+ return
+ "\\usepackage[vietnamese]{babel}\n";
+ }
+ virtual QCString latexFontenc()
{
return "";
}
-
+ virtual QCString latexCommandName()
+ {
+ QCString latex_command = Config_getString(LATEX_CMD_NAME);
+ if (latex_command.isEmpty()) latex_command = "latex";
+ if (Config_getBool(USE_PDFLATEX))
+ {
+ if (latex_command == "latex") latex_command = "xelatex";
+ }
+ return latex_command;
+ }
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
diff --git a/src/types.h b/src/types.h
index 806e6fca..4d305b6c 100644
--- a/src/types.h
+++ b/src/types.h
@@ -16,6 +16,7 @@
#ifndef TYPES_H
#define TYPES_H
+#include
#include
/** @file
@@ -55,7 +56,8 @@ enum SrcLangExt
SrcLangExt_XML = 0x04000,
SrcLangExt_Tcl = 0x08000,
SrcLangExt_Markdown = 0x10000,
- SrcLangExt_SQL = 0x20000
+ SrcLangExt_SQL = 0x20000,
+ SrcLangExt_Slice = 0x40000
};
/** Grouping info */
@@ -191,15 +193,20 @@ enum MemberListType
MemberListType_interfaceMembers = 71 + MemberListType_detailedLists,
MemberListType_services = 72,
MemberListType_serviceMembers = 73 + MemberListType_detailedLists,
+
+ MemberListType_decSequenceMembers = 74 + MemberListType_declarationLists,
+ MemberListType_docSequenceMembers = 75 + MemberListType_documentationLists,
+ MemberListType_decDictionaryMembers = 76 + MemberListType_declarationLists,
+ MemberListType_docDictionaryMembers = 77 + MemberListType_documentationLists
};
-enum MemberType
-{
+enum MemberType
+{
MemberType_Define,
- MemberType_Function,
- MemberType_Variable,
- MemberType_Typedef,
- MemberType_Enumeration,
+ MemberType_Function,
+ MemberType_Variable,
+ MemberType_Typedef,
+ MemberType_Enumeration,
MemberType_EnumValue,
MemberType_Signal,
MemberType_Slot,
@@ -209,6 +216,8 @@ enum MemberType
MemberType_Event,
MemberType_Interface,
MemberType_Service,
+ MemberType_Sequence,
+ MemberType_Dictionary
};
enum FortranFormat
@@ -218,4 +227,56 @@ enum FortranFormat
FortranFormat_Fixed
};
+class LocalToc
+{
+ public:
+ enum Type {
+ None = 0, // initial value
+ Html = 0, // index / also to be used as bit position in mask (1 << Html)
+ Latex = 1, // ...
+ Xml = 2, // ...
+ Docbook = 3, // ...
+ numTocTypes = 4 // number of enum values
+ };
+ LocalToc() : m_mask(None) { memset(m_level,0,sizeof(m_level)); }
+
+ // setters
+ void enableHtml(int level)
+ {
+ m_mask|=(1<0 && pc!=' ' && pc!='\t' && pc!=':' &&
pc!='*' && pc!='&' && pc!='(' && pc!='/' &&
- pc!='.' && (osp<9 || (pc=='>' && osp==11)))
+ pc!='.' && (osp<9 || !(pc=='>' && osp==11)))
// avoid splitting &&, **, .*, operator*, operator->*
{
*dst++=' ';
@@ -1855,7 +1857,11 @@ QCString removeRedundantWhiteSpace(const QCString &s)
case '&':
if (i>0 && isId(pc))
{
- *dst++=' ';
+ if (nc != '=')
+ // avoid splitting operator&=
+ {
+ *dst++=' ';
+ }
}
*dst++=c;
break;
@@ -1889,11 +1895,18 @@ QCString removeRedundantWhiteSpace(const QCString &s)
if (g_charAroundSpace.charMap[(uchar)pc].before &&
g_charAroundSpace.charMap[(uchar)nc].after &&
!(pc==',' && nc=='.') &&
- (osp<8 || (osp>=8 && isId(nc))) // e.g. "operator >>" -> "operator>>", but not "operator int" -> operatorint"
+ (osp<8 || (osp>=8 && pc!='"' && isId(nc)) || (osp>=8 && pc!='"' && nc!='"'))
+ // e.g. 'operator >>' -> 'operator>>',
+ // 'operator "" _x' -> 'operator""_x',
+ // but not 'operator int' -> 'operatorint'
)
{ // keep space
*dst++=' ';
}
+ else if ((pc=='*' || pc=='&' || pc=='.') && nc=='>')
+ {
+ *dst++=' ';
+ }
}
break;
default:
@@ -2211,6 +2224,7 @@ void writeExample(OutputList &ol,ExampleSDict *ed)
//if (latexEnabled) ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
+ ol.disable(OutputGenerator::Docbook);
// link for Html / man
//printf("writeObjectLink(file=%s)\n",e->file.data());
ol.writeObjectLink(0,e->file,e->anchor,e->name);
@@ -2587,7 +2601,7 @@ QCString dateToString(bool includeTime)
static bool warnedOnce=FALSE;
if (!warnedOnce)
{
- warn_uncond("Environment variable SOURCE_DATA_EPOCH must have a value smaller than or equal to %llu; actual value %llu\n",UINT_MAX,epoch);
+ warn_uncond("Environment variable SOURCE_DATE_EPOCH must have a value smaller than or equal to %llu; actual value %llu\n",UINT_MAX,epoch);
warnedOnce=TRUE;
}
}
@@ -2661,7 +2675,7 @@ Protection classInheritedProtectionLevel(ClassDef *cd,ClassDef *bcd,Protection p
if (level==256)
{
err("Internal inconsistency: found class %s seem to have a recursive "
- "inheritance relation! Please send a bug report to dimitri@stack.nl\n",cd->name().data());
+ "inheritance relation! Please send a bug report to doxygen@gmail.com\n",cd->name().data());
}
else if (cd->baseClasses())
{
@@ -4190,7 +4204,7 @@ bool getDefs(const QCString &scName,
//}
}
}
- //printf(" >Succes=%d\n",mdistSuccess=%d\n",mdistisLinkable() || md->isStrongEnumValue())
@@ -4600,7 +4614,7 @@ bool resolveRef(/* in */ const char *scName,
QCString fullName = substitute(tsName,"#","::");
if (fullName.find("anonymous_namespace{")==-1)
{
- fullName = removeRedundantWhiteSpace(substitute(fullName,".","::"));
+ fullName = removeRedundantWhiteSpace(substitute(fullName,".","::",3));
}
else
{
@@ -4773,7 +4787,7 @@ QCString linkToText(SrcLangExt lang,const char *link,bool isFileName)
// replace # by ::
result=substitute(result,"#","::");
// replace . by ::
- if (!isFileName && result.find('<')==-1) result=substitute(result,".","::");
+ if (!isFileName && result.find('<')==-1) result=substitute(result,".","::",3);
// strip leading :: prefix if present
if (result.at(0)==':' && result.at(1)==':')
{
@@ -5217,6 +5231,7 @@ QCString substitute(const QCString &s,const QCString &src,const QCString &dst)
int l = (int)(q-p);
memcpy(r,p,l);
r+=l;
+
if (dst) memcpy(r,dst,dstLen);
r+=dstLen;
}
@@ -5225,6 +5240,82 @@ QCString substitute(const QCString &s,const QCString &src,const QCString &dst)
return result;
}
+
+/// substitute all occurrences of \a src in \a s by \a dst, but skip
+/// each consecutive sequence of \a src where the number consecutive
+/// \a src matches \a skip_seq; if \a skip_seq is negative, skip any
+/// number of consecutive \a src
+QCString substitute(const QCString &s,const QCString &src,const QCString &dst,int skip_seq)
+{
+ if (s.isEmpty() || src.isEmpty()) return s;
+ const char *p, *q;
+ int srcLen = src.length();
+ int dstLen = dst.length();
+ int resLen;
+ if (srcLen!=dstLen)
+ {
+ int count;
+ for (count=0, p=s.data(); (q=strstr(p,src))!=0; p=q+srcLen) count++;
+ resLen = s.length()+count*(dstLen-srcLen);
+ }
+ else // result has same size as s
+ {
+ resLen = s.length();
+ }
+ QCString result(resLen+1);
+ char *r;
+ for (r=result.rawData(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
+ {
+ // search a consecutive sequence of src
+ int seq = 0, skip = 0;
+ if (skip_seq)
+ {
+ for (const char *n=q+srcLen; qstrncmp(n,src,srcLen)==0; seq=1+skip, n+=srcLen)
+ ++skip; // number of consecutive src after the current one
+
+ // verify the allowed number of consecutive src to skip
+ if (skip_seq > 0 && skip_seq != seq)
+ seq = skip = 0;
+ }
+
+ // skip a consecutive sequence of src when necessary
+ int l = (int)((q + seq * srcLen)-p);
+ memcpy(r,p,l);
+ r+=l;
+
+ if (skip)
+ {
+ // skip only the consecutive src found after the current one
+ q += skip * srcLen;
+ // the next loop will skip the current src, aka (p=q+srcLen)
+ continue;
+ }
+
+ if (dst) memcpy(r,dst,dstLen);
+ r+=dstLen;
+ }
+ qstrcpy(r,p);
+ result.resize(strlen(result.data())+1);
+ //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
+ return result;
+}
+
+/// substitute all occurrences of \a srcChar in \a s by \a dstChar
+QCString substitute(const QCString &s,char srcChar,char dstChar)
+{
+ int l=s.length();
+ QCString result(l+1);
+ char *q=result.rawData();
+ if (l>0)
+ {
+ const char *p=s.data();
+ char c;
+ while ((c=*p++)) *q++ = (c==srcChar) ? dstChar : c;
+ }
+ *q='\0';
+ return result;
+}
+
//----------------------------------------------------------------------
QCString substituteKeywords(const QCString &s,const char *title,
@@ -5859,12 +5950,73 @@ QCString convertToXML(const char *s)
return growBuf.get();
}
+/*! Converts a string to an DocBook-encoded string */
+QCString convertToDocBook(const char *s)
+{
+ static GrowBuf growBuf;
+ growBuf.clear();
+ if (s==0) return "";
+ const unsigned char *q;
+ int cnt;
+ const unsigned char *p=(const unsigned char *)s;
+ char c;
+ while ((c=*p++))
+ {
+ switch (c)
+ {
+ case '<': growBuf.addStr("<"); break;
+ case '>': growBuf.addStr(">"); break;
+ case '&': // possibility to have a special symbol
+ q = p;
+ cnt = 2; // we have to count & and ; as well
+ while ((*q >= 'a' && *q <= 'z') || (*q >= 'A' && *q <= 'Z') || (*q >= '0' && *q <= '9'))
+ {
+ cnt++;
+ q++;
+ }
+ if (*q == ';')
+ {
+ --p; // we need & as well
+ DocSymbol::SymType res = HtmlEntityMapper::instance()->name2sym(QCString((char *)p).left(cnt));
+ if (res == DocSymbol::Sym_Unknown)
+ {
+ p++;
+ growBuf.addStr("&");
+ }
+ else
+ {
+ growBuf.addStr(HtmlEntityMapper::instance()->docbook(res));
+ q++;
+ p = q;
+ }
+ }
+ else
+ {
+ growBuf.addStr("&");
+ }
+ break;
+ case '\'': growBuf.addStr("'"); break;
+ case '"': growBuf.addStr("""); break;
+ case '\007': growBuf.addStr("␇"); break;
+ case 1: case 2: case 3: case 4: case 5: case 6: case 8:
+ case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18:
+ case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26:
+ case 27: case 28: case 29: case 30: case 31:
+ break; // skip invalid XML characters (see http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char)
+ default: growBuf.addChar(c); break;
+ }
+ }
+ growBuf.addChar(0);
+ return growBuf.get();
+}
+
/*! Converts a string to a HTML-encoded string */
QCString convertToHtml(const char *s,bool keepEntities)
{
static GrowBuf growBuf;
growBuf.clear();
if (s==0) return "";
+ growBuf.addStr(getHtmlDirEmbedingChar(getTextDirByConfig(s)));
const char *p=s;
char c;
while ((c=*p++))
@@ -5906,11 +6058,13 @@ QCString convertToHtml(const char *s,bool keepEntities)
return growBuf.get();
}
-QCString convertToJSString(const char *s)
+QCString convertToJSString(const char *s, bool applyTextDir)
{
static GrowBuf growBuf;
growBuf.clear();
if (s==0) return "";
+ if (applyTextDir)
+ growBuf.addStr(getJsDirEmbedingChar(getTextDirByConfig(s)));
const char *p=s;
char c;
while ((c=*p++))
@@ -6411,7 +6565,7 @@ QCString mergeScopes(const QCString &leftScope,const QCString &rightScope)
// case leftScope=="A::B" rightScope=="B::C" => result = "A::B::C"
// case leftScope=="A::B" rightScope=="B" => result = "A::B"
bool found=FALSE;
- while ((i=leftScope.findRev("::",p))!=-1)
+ while ((i=leftScope.findRev("::",p))>0)
{
if (leftScopeMatch(rightScope,leftScope.right(leftScope.length()-i-2)))
{
@@ -6500,6 +6654,8 @@ 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(),pd,name);
+ // append (x)refitems to the page.
+ pd->setRefItems(sli);
}
else // new page
{
@@ -6665,10 +6821,26 @@ void filterLatexString(FTextStream &t,const char *str,
{
switch(c)
{
+ case 0xef: // handle U+FFFD i.e. "Replacement character" caused by octal: 357 277 275 / hexadecimal 0xef 0xbf 0xbd
+ // the LaTeX command \ucr has been defined in doxygen.sty
+ if ((unsigned char)*(p) == 0xbf && (unsigned char)*(p+1) == 0xbd)
+ {
+ t << "{\\ucr}";
+ p += 2;
+ }
+ else
+ t << (char)c;
+ break;
case '\\': t << "\\(\\backslash\\)"; break;
case '{': t << "\\{"; break;
case '}': t << "\\}"; break;
case '_': t << "\\_"; break;
+ case '&': t << "\\&"; break;
+ case '%': t << "\\%"; break;
+ case '#': t << "\\#"; break;
+ case '$': t << "\\$"; break;
+ case '^': (usedTableLevels()>0) ? t << "\\string^" : t << (char)c; break;
+ case '~': (usedTableLevels()>0) ? t << "\\string~" : t << (char)c; break;
case ' ': if (keepSpaces) t << "~"; else t << ' ';
break;
default:
@@ -6680,6 +6852,16 @@ void filterLatexString(FTextStream &t,const char *str,
{
switch(c)
{
+ case 0xef: // handle U+FFFD i.e. "Replacement character" caused by octal: 357 277 275 / hexadecimal 0xef 0xbf 0xbd
+ // the LaTeX command \ucr has been defined in doxygen.sty
+ if ((unsigned char)*(p) == 0xbf && (unsigned char)*(p+1) == 0xbd)
+ {
+ t << "{\\ucr}";
+ p += 2;
+ }
+ else
+ t << (char)c;
+ break;
case '#': t << "\\#"; break;
case '$': t << "\\$"; break;
case '%': t << "\\%"; break;
@@ -6763,7 +6945,7 @@ void filterLatexString(FTextStream &t,const char *str,
}
}
-QCString latexEscapeLabelName(const char *s,bool insideTabbing)
+QCString latexEscapeLabelName(const char *s)
{
QGString result;
QCString tmp(qstrlen(s)+1);
@@ -6793,14 +6975,14 @@ QCString latexEscapeLabelName(const char *s,bool insideTabbing)
p++;
}
tmp[i]=0;
- filterLatexString(t,tmp.data(),insideTabbing);
+ filterLatexString(t,tmp,TRUE);
break;
}
}
return result.data();
}
-QCString latexEscapeIndexChars(const char *s,bool insideTabbing)
+QCString latexEscapeIndexChars(const char *s)
{
QGString result;
QCString tmp(qstrlen(s)+1);
@@ -6831,7 +7013,7 @@ QCString latexEscapeIndexChars(const char *s,bool insideTabbing)
p++;
}
tmp[i]=0;
- filterLatexString(t,tmp.data(),insideTabbing);
+ filterLatexString(t,tmp.data(),TRUE);
break;
}
}
@@ -6862,6 +7044,25 @@ QCString latexEscapePDFString(const char *s)
return result.data();
}
+QCString latexFilterURL(const char *s)
+{
+ QGString result;
+ FTextStream t(&result);
+ const char *p=s;
+ char c;
+ while ((c=*p++))
+ {
+ switch (c)
+ {
+ case '#': t << "\\#"; break;
+ default:
+ t << c;
+ break;
+ }
+ }
+ return result.data();
+}
+
QCString rtfFormatBmkStr(const char *name)
{
@@ -7072,6 +7273,7 @@ g_lang2extMap[] =
{ "objective-c", "c", SrcLangExt_ObjC },
{ "c", "c", SrcLangExt_Cpp },
{ "c++", "c", SrcLangExt_Cpp },
+ { "slice", "c", SrcLangExt_Slice },
{ "python", "python", SrcLangExt_Python },
{ "fortran", "fortran", SrcLangExt_Fortran },
{ "fortranfree", "fortranfree", SrcLangExt_Fortran },
@@ -7177,6 +7379,7 @@ void initDefaultExtensionMapping()
updateLanguageMapping(".qsf", "vhdl");
updateLanguageMapping(".md", "md");
updateLanguageMapping(".markdown", "md");
+ updateLanguageMapping(".ice", "slice");
}
void addCodeOnlyMappings()
@@ -7328,23 +7531,23 @@ int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos)
{
if (((uchar)c&0xE0)==0xC0)
{
- bytes++; // 11xx.xxxx: >=2 byte character
+ bytes+=1; // 11xx.xxxx: >=2 byte character
}
if (((uchar)c&0xF0)==0xE0)
{
- bytes++; // 111x.xxxx: >=3 byte character
+ bytes+=2; // 111x.xxxx: >=3 byte character
}
if (((uchar)c&0xF8)==0xF0)
{
- bytes++; // 1111.xxxx: >=4 byte character
+ bytes+=3; // 1111.xxxx: >=4 byte character
}
if (((uchar)c&0xFC)==0xF8)
{
- bytes++; // 1111.1xxx: >=5 byte character
+ bytes+=4; // 1111.1xxx: >=5 byte character
}
if (((uchar)c&0xFE)==0xFC)
{
- bytes++; // 1111.1xxx: 6 byte character
+ bytes+=5; // 1111.1xxx: 6 byte character
}
}
else if (c=='&') // skip over character entities
@@ -7378,11 +7581,10 @@ QCString parseCommentAsText(const Definition *scope,const MemberDef *md,
root->accept(visitor);
delete visitor;
delete root;
- QCString result = convertCharEntitiesToUTF8(s.data());
+ QCString result = convertCharEntitiesToUTF8(s.data()).stripWhiteSpace();
int i=0;
int charCnt=0;
int l=result.length();
- bool addEllipsis=FALSE;
while ((i=nextUtf8CharPosition(result,l,i))=0 && isspace(result.at(i)))
- {
- addEllipsis=TRUE;
- }
- else if (result.at(i)==',' ||
- result.at(i)=='.' ||
- result.at(i)=='?')
+ if (result.at(i)==',' ||
+ result.at(i)=='.' ||
+ result.at(i)=='!' ||
+ result.at(i)=='?')
{
+ i++; // we want to be "behind" last inspected character
break;
}
}
}
- if (addEllipsis || charCnt==100) result=result.left(i)+"...";
+ if ( i < l) result=result.left(i)+"...";
return result.data();
}
@@ -7850,8 +8050,8 @@ bool readInputFile(const char *fileName,BufStr &inBuf,bool filter,bool isSourceC
int start=0;
if (size>=2 &&
- ((inBuf.at(0)==-1 && inBuf.at(1)==-2) || // Litte endian BOM
- (inBuf.at(0)==-2 && inBuf.at(1)==-1) // big endian BOM
+ (((uchar)inBuf.at(0)==0xFF && (uchar)inBuf.at(1)==0xFE) || // Little endian BOM
+ ((uchar)inBuf.at(0)==0xFE && (uchar)inBuf.at(1)==0xFF) // big endian BOM
)
) // UCS-2 encoded file
{
@@ -8014,7 +8214,7 @@ QCString externalRef(const QCString &relPath,const QCString &ref,bool href)
return result;
}
-/** Writes the intensity only bitmap representated by \a data as an image to
+/** Writes the intensity only bitmap represented by \a data as an image to
* directory \a dir using the colors defined by HTML_COLORSTYLE_*.
*/
void writeColoredImgData(const char *dir,ColoredImgDataItem data[])
@@ -8213,6 +8413,7 @@ QCString langToString(SrcLangExt lang)
case SrcLangExt_SQL: return "SQL";
case SrcLangExt_Tcl: return "Tcl";
case SrcLangExt_Markdown: return "Markdown";
+ case SrcLangExt_Slice: return "Slice";
}
return "Unknown";
}
@@ -8344,12 +8545,9 @@ bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile)
void addDocCrossReference(MemberDef *src,MemberDef *dst)
{
- static bool referencedByRelation = Config_getBool(REFERENCED_BY_RELATION);
- static bool referencesRelation = Config_getBool(REFERENCES_RELATION);
-
//printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
- if ((referencedByRelation || dst->hasCallerGraph()) &&
+ if ((dst->hasReferencedByRelation() || dst->hasCallerGraph()) &&
src->showInCallGraph()
)
{
@@ -8365,7 +8563,7 @@ void addDocCrossReference(MemberDef *src,MemberDef *dst)
mdDecl->addSourceReferencedBy(src);
}
}
- if ((referencesRelation || src->hasCallGraph()) &&
+ if ((src->hasReferencesRelation() || src->hasCallGraph()) &&
src->showInCallGraph()
)
{
@@ -8452,7 +8650,7 @@ uint getUtf8CodeToUpper( const QCString& s, int idx )
//--------------------------------------------------------------------------------------
-bool namespaceHasVisibleChild(NamespaceDef *nd,bool includeClasses)
+bool namespaceHasVisibleChild(NamespaceDef *nd,bool includeClasses,bool filterClasses,ClassDef::CompoundType ct)
{
if (nd->getNamespaceSDict())
{
@@ -8464,21 +8662,41 @@ bool namespaceHasVisibleChild(NamespaceDef *nd,bool includeClasses)
{
return TRUE;
}
- else if (namespaceHasVisibleChild(cnd,includeClasses))
+ else if (namespaceHasVisibleChild(cnd,includeClasses,filterClasses,ct))
{
return TRUE;
}
}
}
- if (includeClasses && nd->getClassSDict())
+ if (includeClasses)
{
- ClassSDict::Iterator cli(*nd->getClassSDict());
- ClassDef *cd;
- for (;(cd=cli.current());++cli)
+ ClassSDict *d = nd->getClassSDict();
+ if (filterClasses)
{
- if (cd->isLinkableInProject() && cd->templateMaster()==0)
- {
- return TRUE;
+ if (ct == ClassDef::Interface)
+ {
+ d = nd->getInterfaceSDict();
+ }
+ else if (ct == ClassDef::Struct)
+ {
+ d = nd->getStructSDict();
+ }
+ else if (ct == ClassDef::Exception)
+ {
+ d = nd->getExceptionSDict();
+ }
+ }
+
+ if (d)
+ {
+ ClassSDict::Iterator cli(*d);
+ ClassDef *cd;
+ for (;(cd=cli.current());++cli)
+ {
+ if (cd->isLinkableInProject() && cd->templateMaster()==0)
+ {
+ return TRUE;
+ }
}
}
}
@@ -8767,3 +8985,49 @@ void writeExtraLatexPackages(FTextStream &t)
}
}
+void writeLatexSpecialFormulaChars(FTextStream &t)
+{
+ unsigned char minus[4]; // Superscript minus
+ char *pminus = (char *)minus;
+ unsigned char sup2[3]; // Superscript two
+ char *psup2 = (char *)sup2;
+ unsigned char sup3[3];
+ char *psup3 = (char *)sup3; // Superscript three
+ minus[0]= 0xE2;
+ minus[1]= 0x81;
+ minus[2]= 0xBB;
+ minus[3]= 0;
+ sup2[0]= 0xC2;
+ sup2[1]= 0xB2;
+ sup2[2]= 0;
+ sup3[0]= 0xC2;
+ sup3[1]= 0xB3;
+ sup3[2]= 0;
+
+ t << "\\usepackage{newunicodechar}\n"
+ " \\newunicodechar{" << pminus << "}{${}^{-}$}% Superscript minus\n"
+ " \\newunicodechar{" << psup2 << "}{${}^{2}$}% Superscript two\n"
+ " \\newunicodechar{" << psup3 << "}{${}^{3}$}% Superscript three\n"
+ "\n";
+}
+
+//------------------------------------------------------
+
+static int g_usedTableLevels = 0;
+
+void incUsedTableLevels()
+{
+ g_usedTableLevels++;
+}
+void decUsedTableLevels()
+{
+ g_usedTableLevels--;
+}
+int usedTableLevels()
+{
+ return g_usedTableLevels;
+}
+
+//------------------------------------------------------
+
+
diff --git a/src/util.h b/src/util.h
index 2f362fd6..3305332a 100644
--- a/src/util.h
+++ b/src/util.h
@@ -1,12 +1,12 @@
/******************************************************************************
*
- *
+ *
*
* Copyright (C) 1997-2015 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
+ * 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.
*
@@ -18,7 +18,7 @@
#ifndef UTIL_H
#define UTIL_H
-/*! \file
+/*! \file
* \brief A bunch of utility functions.
*/
@@ -27,6 +27,7 @@
#include "types.h"
#include "sortdict.h"
#include "docparser.h"
+#include "classdef.h"
//--------------------------------------------------------------------
@@ -70,7 +71,7 @@ class TextGeneratorIntf
virtual void writeBreak(int indent) const = 0;
virtual void writeLink(const char *extRef,const char *file,
const char *anchor,const char *text
- ) const = 0;
+ ) const = 0;
};
/** Implements TextGeneratorIntf for an OutputDocInterface stream. */
@@ -139,11 +140,11 @@ QCString fileToString(const char *name,bool filter=FALSE,bool isSourceCode=FALSE
QCString dateToString(bool);
bool getDefs(const QCString &scopeName,
- const QCString &memberName,
- const char *,
- MemberDef *&md,
+ const QCString &memberName,
+ const char *,
+ MemberDef *&md,
ClassDef *&cd,
- FileDef *&fd,
+ FileDef *&fd,
NamespaceDef *&nd,
GroupDef *&gd,
bool forceEmptyScope=FALSE,
@@ -194,6 +195,8 @@ void mergeArguments(ArgumentList *,ArgumentList *,bool forceNameOverwrite=FALSE)
QCString substituteClassNames(const QCString &s);
QCString substitute(const QCString &s,const QCString &src,const QCString &dst);
+QCString substitute(const QCString &s,const QCString &src,const QCString &dst,int skip_seq);
+QCString substitute(const QCString &s,char srcChar,char dstChar);
QCString clearBlock(const char *s,const char *begin,const char *end);
@@ -259,7 +262,7 @@ void initClassHierarchy(ClassSDict *cl);
bool hasVisibleRoot(BaseClassList *bcl);
bool classHasVisibleChildren(ClassDef *cd);
-bool namespaceHasVisibleChild(NamespaceDef *nd,bool includeClasses);
+bool namespaceHasVisibleChild(NamespaceDef *nd,bool includeClasses,bool filterClasses,ClassDef::CompoundType ct);
bool classVisibleInIndex(ClassDef *cd);
int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level=0);
@@ -283,7 +286,9 @@ QCString convertToLaTeX(const QCString &s,bool insideTabbing=FALSE,bool keepSpac
QCString convertToXML(const char *s);
-QCString convertToJSString(const char *s);
+QCString convertToDocBook(const char *s);
+
+QCString convertToJSString(const char *s, bool applyTextDir = true);
QCString getOverloadDocs();
@@ -342,9 +347,10 @@ void filterLatexString(FTextStream &t,const char *str,
bool insideItem=FALSE,
bool keepSpaces=FALSE);
-QCString latexEscapeLabelName(const char *s,bool insideTabbing);
-QCString latexEscapeIndexChars(const char *s,bool insideTabbing);
+QCString latexEscapeLabelName(const char *s);
+QCString latexEscapeIndexChars(const char *s);
QCString latexEscapePDFString(const char *s);
+QCString latexFilterURL(const char *s);
QCString rtfFormatBmkStr(const char *name);
@@ -388,7 +394,7 @@ SrcLangExt getLanguageFromFileName(const QCString& fileName);
void initDefaultExtensionMapping();
void addCodeOnlyMappings();
-MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
+MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
const char *n);
bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n);
@@ -477,6 +483,10 @@ void convertProtectionLevel(
bool mainPageHasTitle();
bool openOutputFile(const char *outFile,QFile &f);
void writeExtraLatexPackages(FTextStream &t);
+void writeLatexSpecialFormulaChars(FTextStream &t);
-#endif
+int usedTableLevels();
+void incUsedTableLevels();
+void decUsedTableLevels();
+#endif
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index ce1f92b3..aa15183d 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -31,7 +31,7 @@
#include
#include
#include
-#include
+#include
#include "entry.h"
#include "doxygen.h"
@@ -94,7 +94,7 @@ static QCString g_exampleFile;
static QCString g_classScope;
-static QCString g_CurrScope;
+static bool g_CurrARCH = FALSE;
static FileDef * g_sourceFileDef;
static Definition * g_currentDefinition;
@@ -109,7 +109,7 @@ static int g_braceCount=0;
static void writeFont(const char *s,const char* text);
static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName);
static bool writeColoredWord(QCString& word );
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE);
+static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE, const char *curr_class=0);
static void endFontClass();
static void startFontClass(const char *s);
//-------------------------------------------------------------------
@@ -138,8 +138,8 @@ static bool checkVhdlString(QCString &name)
int len=name.length();
if (name.at(0)=='"' && name.at(len-1)=='"' && len > 2)
{
- QStringList qrl=QStringList::split(regg,name,FALSE);
- if (VhdlDocGen::isNumber(qrl[0].utf8()))
+ QCStringList qrl=QCStringList::split(regg,name);
+ if (VhdlDocGen::isNumber(qrl[0]))
{
g_code->codify("\"");
startFontClass("vhdllogic");
@@ -291,7 +291,7 @@ static void writeWord(const char *word,const char* curr_class=0,bool classLink=F
}
else
{
- generateClassOrGlobalLink(*g_code,temp);
+ generateClassOrGlobalLink(*g_code,temp,FALSE,curr_class);
}
}
else
@@ -328,7 +328,7 @@ static void writeWord(const char *word,const char* curr_class=0,bool classLink=F
}
else
{
- generateClassOrGlobalLink(*g_code,temp);
+ generateClassOrGlobalLink(*g_code,temp,FALSE,curr_class);
}
}
else
@@ -370,7 +370,7 @@ static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE,b
//g_code->codify(sp);
if (comment)
{
- writeFont("keyword",line.data());
+ writeFont("comment",line.data());
}
else
{
@@ -381,9 +381,9 @@ static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE,b
else
{
if (comment)
- writeFont("keyword",sp);
+ writeFont("comment",sp);
else
- writeWord(sp,cl,classlink);
+ writeWord(sp,cl,classlink);
done=TRUE;
}
}
@@ -510,7 +510,7 @@ static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& m
}// generateMemLink
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/)
+static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/, const char *curr_class)
{
QCString className=clName;
@@ -521,6 +521,11 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
//bool isLocal=FALSE;
className.stripPrefix("_");
cd = getClass(className.data());
+ if (!cd && curr_class)
+ {
+ if (QCString(curr_class).contains(QRegExp("::"+QCString(clName)+"$"))) cd = getClass(curr_class);
+ }
+
while (cd)
{
//className.stripPrefix("_");
@@ -686,8 +691,8 @@ static void writeFuncProto()
codifyLines(g_FuncProto.data(),g_CurrClass.data());
return;
}
- QStringList qlist=QStringList::split(name,g_FuncProto,FALSE);
- QCString temp=qlist[0].utf8();
+ QCStringList qlist=QCStringList::split(name,g_FuncProto);
+ QCString temp=qlist[0];
codifyLines(temp.data(),g_CurrClass.data());
g_FuncProto.stripPrefix(temp.data());
temp.resize(0);
@@ -759,7 +764,7 @@ DIGITSS [0-9]+|[0-9]+("#")*[0-9_a-fA-F\+\.\-]+("#")*
ALLTYPESMAP {B}*[_a-zA-Z0-9. ]+{BN}*
ALLTYPESMAP1 {BN}*[_a-zA-Z0-9.() ]+{BN}*
-ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME}
+ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME}{BN}+("is")
PROCESS ({BN}*{FUNCNAME}{BN}*[:]+{BN}*("process"){BN}*[(]*)|[^a-zA-Z]("process "|"process("){BN}*[ (]*|[^a-zA-Z]("process"){BN}+
END1 {B}*("end "){BN}+("if"|"case"|"loop"|"generate"|"for")
@@ -768,7 +773,7 @@ END3 {BN}*[^a-zA-Z]("end"){BN}+{FUNCNAME}{BN}*[;]
END4 {B}*("end"){BN}+"function"{BN}+{FUNCNAME}{BN}*[;]
ENDEFUNC {END3}|{END4}|{END2}
-KEYWORD ("new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in")
+KEYWORD ("of"|"new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in")
TYPEKW ^{B}*("type"|"subtype"|"constant"|"attribute"|"signal"|"variable","alias","configuration")
FUNC ^{B}*("function"|"procedure"){BN}*{FUNCNAME}{BN}*("(")
@@ -807,6 +812,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
%x ClassVar
%x ClassesName
%x Map
+%x End
%x Body
%%
@@ -825,11 +831,11 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
QCString tt(vhdlcodeYYtext);
VhdlDocGen::deleteAllChars(tt,',');
QRegExp r("=>");
- QStringList ql=QStringList::split(r,tt,FALSE);
+ QCStringList ql=QCStringList::split(r,tt);
if (ql.count()>=2)
{
unsigned int index=0;
- QCString t1=ql[0].utf8();
+ QCString t1=ql[0];
char cc=t1.at(index);
while (cc==' ' || cc=='\t')
{
@@ -860,7 +866,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
}
codifyLines("=>");
index=0;
- QCString s2=ql[1].utf8();
+ QCString s2=ql[1];
t1=s2;
cc=t1.at(index);
while (cc==' ' || cc=='\t')
@@ -953,7 +959,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
tt=tt.lower();
VhdlDocGen::deleteAllChars(tt,';');
tt.stripWhiteSpace();
- QStringList ql=QStringList::split(regg,tt,FALSE);
+ QCStringList ql=QCStringList::split(regg,tt);
int index=ql.findIndex(QCString("if"))+1;
index+=ql.findIndex(QCString("case"))+1;
index+=ql.findIndex(QCString("loop"))+1;
@@ -1058,14 +1064,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
g_CurrClass.append(vhdlcodeYYtext);
g_CurrClass=g_CurrClass.stripWhiteSpace();
- if (!writeColoredWord(g_CurrScope))
- {
- generateClassOrGlobalLink(*g_code,vhdlcodeYYtext);
- }
- else
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
+ generateClassOrGlobalLink(*g_code,vhdlcodeYYtext);
BEGIN(Bases);
}
@@ -1169,13 +1168,12 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
[^:;]* { //found package
QCString temp(vhdlcodeYYtext);
- QStringList strl=QStringList::split(".",temp,FALSE);
-
+ QCStringList strl=QCStringList::split(".",temp);
if (strl.count()>2)
{
- QCString s1=strl[0].utf8();
- QCString s2=strl[1].utf8();
- QCString s3=strl[2].utf8();
+ QCString s1=strl[0];
+ QCString s2=strl[1];
+ QCString s3=strl[2];
s1.append(".");
s3.prepend(".");
codifyLines(s1.data(),g_CurrClass.data());
@@ -1284,6 +1282,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
//temp+=("-");
//temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
QCString temp = VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
+ g_CurrARCH = TRUE;
temp+="::";
temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
g_CurrClass=temp;
@@ -1291,15 +1290,14 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
codifyLines(vhdlcodeYYtext,temp.data(),TRUE);
//generateClassOrGlobalLink(*g_code,temp.data());
isPackageBody=FALSE;
- BEGIN(ClassName);
}
^{B}*("package "){BN}*("body"){BN}*{FUNCNAME} { // found package body
QCString ss(vhdlcodeYYtext);
QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,2);
- QStringList ql=QStringList::split(temp,ss,FALSE);
- QCString ll=ql[0].utf8();
+ QCStringList ql=QCStringList::split(temp,ss);
+ QCString ll=ql[0];
codifyLines(ll.data(),g_CurrClass.data());
temp=temp.stripWhiteSpace();
temp.prepend("_");
@@ -1371,6 +1369,41 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
}
+"end"{BN}+"architecture"{BN}+{FUNCNAME} {
+ codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
+ g_CurrARCH = FALSE;
+ }
+"end"{BN}+{FUNCNAME} {
+ if (g_CurrARCH)
+ {
+ codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
+ g_CurrARCH = FALSE;
+ }
+ else
+ REJECT;
+ }
+"end" {
+ appStringLower(g_PrevString,vhdlcodeYYtext);
+ QCString temp(vhdlcodeYYtext);
+ temp=temp.stripWhiteSpace();
+
+ writeColoredWord(temp);
+ BEGIN(End);
+ }
+{ID} {
+ appStringLower(g_PrevString,vhdlcodeYYtext);
+ QCString temp(vhdlcodeYYtext);
+ temp=temp.stripWhiteSpace();
+
+ if (!writeColoredWord(temp))
+ {
+ generateClassOrGlobalLink(*g_code,temp.data());
+ }
+ }
+";" {
+ codifyLines(vhdlcodeYYtext);
+ BEGIN(Bases);
+ }
{KEYWORD} { // found keyword
QCString qcs(vhdlcodeYYtext);
if (!writeColoredWord(qcs))
@@ -1445,11 +1478,11 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
writeFont("keyword",vhdlcodeYYtext);
}
-^{B}*{XILINX}[^\n]* {
- writeWord(yytext);
- //codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
- }
-
+^{B}*{XILINX}/[^a-zA-Z0-9_] {
+ writeWord(yytext);
+ //codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
+ }
+
^{B}*"set_"[^\n]* {
writeWord(yytext);
}
@@ -1464,37 +1497,38 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
}
<*>\n{TEXTT} { // found normal or special comment on its own line
- QCString text(vhdlcodeYYtext);
- int i=text.find("--");
- if (text.mid(i,3)=="--!" && // hide special comment
- Config_getBool(STRIP_CODE_COMMENTS))
- {
- g_yyLineNr++; // skip complete line
- }
- else // normal comment
- {
- // startFontClass("keyword");
- codifyLines(text,0,FALSE,TRUE);
- // endFontClass();
- }
+ QCString text(vhdlcodeYYtext);
+ int i=text.find("--");
+ if (text.mid(i,3)=="--!") // && // hide special comment
+ {
+ if (!Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ codifyLines(text,0,FALSE,TRUE);
+ }
+ else g_yyLineNr++; // skip complete line, but count line
+ }
+ else // normal comment
+ {
+ codifyLines(text,0,FALSE,TRUE);
+ }
}
<*>{TEXTT} { // found normal or special comment after something
- QCString text(vhdlcodeYYtext);
- int i=text.find("--");
- if (text.mid(i,3)=="--!" &&
- Config_getBool(STRIP_CODE_COMMENTS))
- {
- // hide special comment
- }
- else // normal comment
- {
- // startFontClass("keyword");
- codifyLines(text,0,FALSE,TRUE);
- // endFontClass();
- }
+ QCString text(vhdlcodeYYtext);
+ int i=text.find("--");
+ if (text.mid(i,3)=="--!")
+ {
+ // hide special comment
+ if (!Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ codifyLines(text,0,FALSE,TRUE);
+ }
+ }
+ else // normal comment
+ {
+ codifyLines(text,0,FALSE,TRUE);
+ }
}
-
%%
/*@ ----------------------------------------------------------------------------
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index dcf7f425..b18bd3f9 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -26,7 +26,7 @@
#include
#include
#include
-#include
+#include
#include
/* --------------------------------------------------------------- */
@@ -61,7 +61,7 @@
#include "vhdlcode.h"
#include "plantuml.h"
//#define DEBUGFLOW
-#define theTranslator_vhdlType VhdlDocGen::trVhdlType
+#define theTranslator_vhdlType theTranslator->trVhdlType
static QDict g_vhdlKeyDict0(17,FALSE);
static QDict g_vhdlKeyDict1(17,FALSE);
@@ -299,10 +299,10 @@ static QCString formatBriefNote(const QCString &brief,ClassDef * cd)
int k=cd->briefLine();
- QStringList qsl=QStringList::split(ep,brief);
+ QCStringList qsl=QCStringList::split(ep,brief);
for(uint j=0;jprotection();
pageTitle+=" ";
pageTitle+=theTranslator_vhdlType(ii+2,TRUE);
- pageTitle+=" ";
return pageTitle;
} // getClassTitle
@@ -1029,8 +1028,8 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol)
}
else if (ii==VhdlDocGen::ARCHITECTURE)
{
- QStringList qlist=QStringList::split("-",nn,FALSE);
- nn=qlist[1].utf8();
+ QCStringList qlist=QCStringList::split("-",nn);
+ nn=qlist[1];
cd=VhdlDocGen::getClass(nn.data());
}
@@ -1042,9 +1041,9 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol)
for (int i=0;idata());
@@ -1076,8 +1075,8 @@ void VhdlDocGen::findAllArchitectures(QList& qll,const ClassDef *cd)
QCString jj=citer->className();
if (cd != citer && jj.contains('-')!=-1)
{
- QStringList ql=QStringList::split("-",jj,FALSE);
- QCString temp=ql[1].utf8();
+ QCStringList ql=QCStringList::split("-",jj);
+ QCString temp=ql[1];
if (qstricmp(cd->className(),temp)==0)
{
QCString *cl=new QCString(jj);
@@ -1096,10 +1095,10 @@ ClassDef* VhdlDocGen::findArchitecture(const ClassDef *cd)
for ( ; (citer=cli.current()) ; ++cli )
{
QCString jj=citer->name();
- QStringList ql=QStringList::split(":",jj,FALSE);
+ QCStringList ql=QCStringList::split(":",jj);
if (ql.count()>1)
{
- if (ql[0].utf8()==nn )
+ if (ql[0]==nn )
{
return citer;
}
@@ -1212,15 +1211,15 @@ void VhdlDocGen::parseFuncProto(const char* text,QList& qlist,
QCString VhdlDocGen::getIndexWord(const char* c,int index)
{
- QStringList ql;
+ QCStringList ql;
QCString temp(c);
QRegExp reg("[\\s:|]");
- ql=QStringList::split(reg,temp,FALSE);
+ ql=QCStringList::split(reg,temp);
if (ql.count() > (unsigned int)index)
{
- return ql[index].utf8();
+ return ql[index];
}
return "";
@@ -1241,42 +1240,6 @@ QCString VhdlDocGen::getProtectionName(int prot)
return "";
}
-QCString VhdlDocGen::trTypeString(uint64 type)
-{
- switch(type)
- {
- case VhdlDocGen::LIBRARY: return "Library";
- case VhdlDocGen::ENTITY: return "Entity";
- case VhdlDocGen::PACKAGE_BODY: return "Package Body";
- case VhdlDocGen::ATTRIBUTE: return "Attribute";
- case VhdlDocGen::PACKAGE: return "Package";
- case VhdlDocGen::SIGNAL: return "Signal";
- case VhdlDocGen::COMPONENT: return "Component";
- case VhdlDocGen::CONSTANT: return "Constant";
- case VhdlDocGen::TYPE: return "Type";
- case VhdlDocGen::SUBTYPE: return "Subtype";
- case VhdlDocGen::FUNCTION: return "Function";
- case VhdlDocGen::RECORD: return "Record";
- case VhdlDocGen::PROCEDURE: return "Procedure";
- case VhdlDocGen::ARCHITECTURE: return "Architecture";
- case VhdlDocGen::USE: return "Package";
- case VhdlDocGen::PROCESS: return "Process";
- case VhdlDocGen::PORT: return "Port";
- case VhdlDocGen::GENERIC: return "Generic";
- case VhdlDocGen::UNITS: return "Units";
- //case VhdlDocGen::PORTMAP: return "Port Map";
- case VhdlDocGen::SHAREDVARIABLE: return "Shared Variable";
- case VhdlDocGen::GROUP: return "Group";
- case VhdlDocGen::VFILE: return "File";
- case VhdlDocGen::INSTANTIATION: return "Instantiation";
- case VhdlDocGen::ALIAS: return "Alias";
- case VhdlDocGen::CONFIG: return "Configuration";
- case VhdlDocGen::MISCELLANEOUS: return "Miscellaneous";
- case VhdlDocGen::UCF_CONST: return "Constraints";
- default: return "";
- }
-} // convertType
-
/*!
* deletes a char backwards in a string
*/
@@ -1790,7 +1753,7 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml,
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::GROUP,FALSE),0,FALSE,VhdlDocGen::GROUP);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::INSTANTIATION,FALSE),0,FALSE,VhdlDocGen::INSTANTIATION);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::ALIAS,FALSE),0,FALSE,VhdlDocGen::ALIAS);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS),0,FALSE,VhdlDocGen::MISCELLANEOUS);
+ VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS,TRUE),0,FALSE,VhdlDocGen::MISCELLANEOUS);
// configurations must be added to global file definitions.
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::CONFIG,FALSE),0,FALSE,VhdlDocGen::CONFIG);
@@ -2096,19 +2059,21 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
writeLink(mdef,ol);
ol.docify(" ");
- ol.insertMemberAlign();
if (mm==VhdlDocGen::GENERIC)
{
+ ol.insertMemberAlign();
ol.startBold();
VhdlDocGen::formatString(largs,ol,mdef);
ol.endBold();
}
else
{
+ ol.insertMemberAlignLeft(isAnonymous, false);
ol.docify(" ");
ol.startBold();
VhdlDocGen::formatString(ltype,ol,mdef);
ol.endBold();
+ ol.insertMemberAlign();
ol.docify(" ");
VhdlDocGen::formatString(largs,ol,mdef);
}
@@ -2263,11 +2228,11 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
ol.endMemberItem();
if (!mdef->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC) /* && !annMemb */)
{
- QCString s=mdef->briefDescription();
- ol.startMemberDescription(mdef->anchor());
+ QCString s=mdef->briefDescription();
+ ol.startMemberDescription(mdef->anchor(), NULL, mm == VhdlDocGen::PORT);
ol.generateDoc(mdef->briefFile(),mdef->briefLine(),
- mdef->getOuterScope()?mdef->getOuterScope():d,
- mdef,s.data(),TRUE,FALSE,0,TRUE,FALSE);
+ mdef->getOuterScope()?mdef->getOuterScope():d,
+ mdef,s.data(),TRUE,FALSE,0,TRUE,FALSE);
if (detailsVisible)
{
ol.pushGeneratorState();
@@ -2364,7 +2329,7 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
if (title)
{
- ol.startMemberHeader(title);
+ ol.startMemberHeader(convertToId(title),type == VhdlDocGen::PORT ? 3 : 2);
ol.parseText(title);
ol.endMemberHeader();
ol.docify(" ");
@@ -2416,7 +2381,7 @@ bool VhdlDocGen::writeClassType( ClassDef *& cd,
OutputList &ol ,QCString & cname)
{
int id=cd->protection();
- QCString qcs = VhdlDocGen::trTypeString(id+2);
+ QCString qcs = theTranslator->trVhdlType(id+2,TRUE);
cname=VhdlDocGen::getClassName(cd);
ol.startBold();
ol.writeString(qcs.data());
@@ -2426,128 +2391,6 @@ bool VhdlDocGen::writeClassType( ClassDef *& cd,
return FALSE;
}// writeClassLink
-QCString VhdlDocGen::trVhdlType(uint64 type,bool sing)
-{
- switch(type)
- {
- case VhdlDocGen::LIBRARY:
- if (sing) return "Library";
- else return "Libraries";
- case VhdlDocGen::PACKAGE:
- if (sing) return "Package";
- else return "Packages";
- case VhdlDocGen::SIGNAL:
- if (sing) return "Signal";
- else return "Signals";
- case VhdlDocGen::COMPONENT:
- if (sing) return "Component";
- else return "Components";
- case VhdlDocGen::CONSTANT:
- if (sing) return "Constant";
- else return "Constants";
- case VhdlDocGen::ENTITY:
- if (sing) return "Entity";
- else return "Entities";
- case VhdlDocGen::TYPE:
- if (sing) return "Type";
- else return "Types";
- case VhdlDocGen::SUBTYPE:
- if (sing) return "Subtype";
- else return "Subtypes";
- case VhdlDocGen::FUNCTION:
- if (sing) return "Function";
- else return "Functions";
- case VhdlDocGen::RECORD:
- if (sing) return "Record";
- else return "Records";
- case VhdlDocGen::PROCEDURE:
- if (sing) return "Procedure";
- else return "Procedures";
- case VhdlDocGen::ARCHITECTURE:
- if (sing) return "Architecture";
- else return "Architectures";
- case VhdlDocGen::ATTRIBUTE:
- if (sing) return "Attribute";
- else return "Attributes";
- case VhdlDocGen::PROCESS:
- if (sing) return "Process";
- else return "Processes";
- case VhdlDocGen::PORT:
- if (sing) return "Port";
- else return "Ports";
- case VhdlDocGen::USE:
- if (sing) return "use clause";
- else return "Use Clauses";
- case VhdlDocGen::GENERIC:
- if (sing) return "Generic";
- else return "Generics";
- case VhdlDocGen::PACKAGE_BODY:
- return "Package Body";
- case VhdlDocGen::UNITS:
- return "Units";
- case VhdlDocGen::SHAREDVARIABLE:
- if (sing) return "Shared Variable";
- return "Shared Variables";
- case VhdlDocGen::VFILE:
- if (sing) return "File";
- return "Files";
- case VhdlDocGen::GROUP:
- if (sing) return "Group";
- return "Groups";
- case VhdlDocGen::INSTANTIATION:
- if (sing) return "Instantiation";
- else return "Instantiations";
- case VhdlDocGen::ALIAS:
- if (sing) return "Alias";
- return "Aliases";
- case VhdlDocGen::CONFIG:
- if (sing) return "Configuration";
- return "Configurations";
- case VhdlDocGen::MISCELLANEOUS:
- return "Miscellaneous";
- case VhdlDocGen::UCF_CONST:
- return "Constraints";
- default:
- return "Class";
- }
-}
-
-QCString VhdlDocGen::trDesignUnitHierarchy()
-{
- return "Design Unit Hierarchy";
-}
-
-QCString VhdlDocGen::trDesignUnitList()
-{
- return "Design Unit List";
-}
-
-QCString VhdlDocGen::trDesignUnitMembers()
-{
- return "Design Unit Members";
-}
-
-QCString VhdlDocGen::trDesignUnitListDescription()
-{
- return "Here is a list of all design unit members with links to "
- "the Entities they belong to:";
-}
-
-QCString VhdlDocGen::trDesignUnitIndex()
-{
- return "Design Unit Index";
-}
-
-QCString VhdlDocGen::trDesignUnits()
-{
- return "Design Units";
-}
-
-QCString VhdlDocGen::trFunctionAndProc()
-{
- return "Functions/Procedures/Processes";
-}
-
/*! writes a link if the string is linkable else a formatted string */
@@ -2623,8 +2466,8 @@ void VhdlDocGen::writeSource(MemberDef *mdef,OutputList& ol,QCString & cname)
if (cname.isEmpty()) return;
mdef->writeSourceDef(ol,cname);
- mdef->writeSourceRefs(ol,cname);
- mdef->writeSourceReffedBy(ol,cname);
+ if (mdef->hasReferencesRelation()) mdef->writeSourceRefs(ol,cname);
+ if (mdef->hasReferencedByRelation()) mdef->writeSourceReffedBy(ol,cname);
}
@@ -2835,11 +2678,11 @@ QCString VhdlDocGen::parseForConfig(QCString & entity,QCString & arch)
if (!entity.contains(":")) return "";
QRegExp exp("[:()\\s]");
- QStringList ql=QStringList::split(exp,entity,FALSE);
+ QCStringList ql=QCStringList::split(exp,entity);
//int ii=ql.findIndex(ent);
assert(ql.count()>=2);
- label = ql[0].utf8();
- entity = ql[1].utf8();
+ label = ql[0];
+ entity = ql[1];
if ((index=entity.findRev("."))>=0)
{
entity.remove(0,index+1);
@@ -2847,8 +2690,8 @@ QCString VhdlDocGen::parseForConfig(QCString & entity,QCString & arch)
if (ql.count()==3)
{
- arch= ql[2].utf8();
- ql=QStringList::split(exp,arch,FALSE);
+ arch= ql[2];
+ ql=QCStringList::split(exp,arch);
if (ql.count()>1) // expression
{
arch="";
@@ -2865,16 +2708,16 @@ QCString VhdlDocGen::parseForBinding(QCString & entity,QCString & arch)
QRegExp exp("[()\\s]");
QCString label="";
- QStringList ql=QStringList::split(exp,entity,FALSE);
+ QCStringList ql=QCStringList::split(exp,entity);
if (ql.contains("open"))
{
return "open";
}
- label=ql[0].utf8();
+ label=ql[0];
- entity = ql[1].utf8();
+ entity = ql[1];
if ((index=entity.findRev("."))>=0)
{
entity.remove(0,index+1);
@@ -2882,7 +2725,7 @@ QCString VhdlDocGen::parseForBinding(QCString & entity,QCString & arch)
if (ql.count()==3)
{
- arch=ql[2].utf8();
+ arch=ql[2];
}
return label;
}
@@ -3000,7 +2843,7 @@ void assignBinding(VhdlConfNode * conf)
QCString inst1=VhdlDocGen::getIndexWord(archy.data(),0).lower();
QCString comp=VhdlDocGen::getIndexWord(archy.data(),1).lower();
- QStringList ql=QStringList::split(",",inst1);
+ QCStringList ql=QCStringList::split(",",inst1);
for (uint j=0;jtype+":"+cur->name;
}
@@ -3147,7 +2990,8 @@ static void addInstance(ClassDef* classEntity, ClassDef* ar,
Public, Normal, cur->stat,Member,
MemberType_Variable,
0,
- 0);
+ 0,
+ "");
if (ar->getOutputFileBase())
{
@@ -3186,11 +3030,11 @@ static void addInstance(ClassDef* classEntity, ClassDef* ar,
void VhdlDocGen::writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef)
{
- QStringList ql=QStringList::split("#",largs,FALSE);
+ QCStringList ql=QCStringList::split("#",largs,FALSE);
uint len=ql.count();
for(uint i=0;i1) ol.lineBreak();
}
@@ -3203,14 +3047,14 @@ void VhdlDocGen::writeRecUnitDocu(
QCString largs)
{
- QStringList ql=QStringList::split("#",largs,FALSE);
+ QCStringList ql=QCStringList::split("#",largs);
uint len=ql.count();
ol.startParameterList(TRUE);
bool first=TRUE;
for(uint i=0;igetMemberSpecifiers()),m->name().data(),m->getFileDef()->name().data());
+ // fprintf(stderr,"\n creating flowchart : %s %s in file %s \n",theTranslator->trVhdlType(m->getMemberSpecifiers(),TRUE),m->name().data(),m->getFileDef()->name().data());
QCString dir=" -o \""+ov+qcs+"\"";
ov+="/flow_design.dot";
diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h
index bd190ca1..9dd84170 100644
--- a/src/vhdldocgen.h
+++ b/src/vhdldocgen.h
@@ -149,33 +149,6 @@ class VhdlDocGen
static bool isCompInst(const MemberDef *mdef);
static bool isMisc(const MemberDef *mdef);
- //-----------------------------------------------------
- // translatable items
-
- static QCString trTypeString(uint64 type);
- static QCString trVhdlType(uint64 type,bool sing=true);
-
- // trClassHierarchy.
- static QCString trDesignUnitHierarchy();
-
- // trCompoundList
- static QCString trDesignUnitList();
-
- // trCompoundMembers.
- static QCString trDesignUnitMembers();
-
- // trCompoundListDescription
- static QCString trDesignUnitListDescription();
-
- // trCompounds
- static QCString trDesignUnits();
-
- // trCompoundIndex
- static QCString trDesignUnitIndex();
-
- // trFunctions
- static QCString trFunctionAndProc();
-
//-----------------------------------------------------
static void prepareComment(QCString&);
diff --git a/src/vhdljjparser.cpp b/src/vhdljjparser.cpp
index 953cd6bd..81a7ca1f 100644
--- a/src/vhdljjparser.cpp
+++ b/src/vhdljjparser.cpp
@@ -12,7 +12,7 @@
#include
#include
-#include
+#include