summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Makefile.in2
-rw-r--r--README.md2
-rw-r--r--addon/doxysearch/doxyindexer.cpp21
-rw-r--r--addon/doxysearch/doxysearch.cpp6
-rw-r--r--addon/doxywizard/doxywizard.cpp6
-rw-r--r--addon/doxywizard/expert.cpp2
-rwxr-xr-xconfigure13
-rw-r--r--doc/changelog.doc178
-rw-r--r--doc/commands.doc110
-rw-r--r--jquery/Makefile25
-rw-r--r--jquery/README5
-rw-r--r--jquery/split_jquery.pl25
-rw-r--r--qtools/Doxyfile2
-rw-r--r--qtools/qcstring.cpp620
-rw-r--r--qtools/qcstring.h802
-rw-r--r--qtools/qfeatures.h2
-rw-r--r--qtools/qfile_unix.cpp1
-rw-r--r--qtools/qglobal.h5
-rw-r--r--qtools/qtools.pro.in3
-rw-r--r--qtools/scstring.cpp798
-rw-r--r--qtools/scstring.h155
-rw-r--r--src/cite.cpp42
-rw-r--r--src/classdef.cpp13
-rw-r--r--src/cmdmapper.cpp11
-rw-r--r--src/cmdmapper.h4
-rw-r--r--src/commentcnv.l13
-rw-r--r--src/commentscan.l4
-rw-r--r--src/condparser.h19
-rw-r--r--src/config.h1
-rw-r--r--src/config.xml37
-rw-r--r--src/context.cpp600
-rw-r--r--src/context.h30
-rw-r--r--src/definition.cpp114
-rw-r--r--src/diagram.cpp2
-rw-r--r--src/dirdef.cpp2
-rw-r--r--src/dirdef.h2
-rw-r--r--src/docbookgen.cpp253
-rw-r--r--src/docbookvisitor.cpp259
-rw-r--r--src/docbookvisitor.h8
-rw-r--r--src/docparser.cpp568
-rw-r--r--src/docparser.h17
-rw-r--r--src/doctokenizer.h2
-rw-r--r--src/doctokenizer.l109
-rw-r--r--src/dot.cpp211
-rw-r--r--src/dot.h16
-rw-r--r--src/doxygen.cpp132
-rw-r--r--src/entry.cpp2
-rw-r--r--src/filedef.cpp21
-rw-r--r--src/filedef.h2
-rw-r--r--src/filename.cpp44
-rw-r--r--src/fortrancode.l100
-rw-r--r--src/fortranscanner.l50
-rw-r--r--src/ftvhelp.cpp578
-rw-r--r--src/groupdef.cpp64
-rw-r--r--src/htmldocvisitor.cpp76
-rw-r--r--src/htmlentity.cpp4
-rw-r--r--src/htmlgen.cpp1062
-rw-r--r--src/index.cpp10
-rw-r--r--src/jquery_fx.js1
-rw-r--r--src/jquery_p1.js18
-rw-r--r--src/jquery_p2.js10
-rw-r--r--src/jquery_p3.js3
-rw-r--r--src/jquery_pt.js8
-rw-r--r--src/jquery_ui.js40
-rwxr-xr-x[-rw-r--r--]src/lang_cfg.py0
-rw-r--r--src/latexdocvisitor.cpp319
-rw-r--r--src/latexdocvisitor.h6
-rw-r--r--src/latexgen.cpp58
-rw-r--r--src/latexgen.h2
-rw-r--r--src/layout.cpp2
-rw-r--r--src/layout_default.h194
-rw-r--r--src/libdoxygen.pro.in8
-rw-r--r--src/libdoxygen.t.in92
-rw-r--r--src/lodepng.cpp10
-rw-r--r--src/markdown.cpp4
-rw-r--r--src/memberdef.cpp48
-rw-r--r--src/memberdef.h1
-rw-r--r--src/membergroup.cpp2
-rw-r--r--src/membergroup.h2
-rw-r--r--src/memberlist.cpp21
-rw-r--r--src/message.cpp9
-rw-r--r--src/namespacedef.cpp5
-rw-r--r--src/parserintf.h4
-rw-r--r--src/plantuml.cpp2
-rw-r--r--src/pre.l10
-rw-r--r--src/printdocvisitor.h2
-rw-r--r--src/pyscanner.l14
-rw-r--r--src/reflist.cpp8
-rw-r--r--src/reflist.h5
-rwxr-xr-xsrc/res2cc_cmd.py118
-rw-r--r--src/resize_js.h93
-rw-r--r--src/resourcemgr.cpp183
-rw-r--r--src/resourcemgr.h63
-rw-r--r--src/rtfgen.cpp24
-rw-r--r--src/rtfgen.h3
-rw-r--r--src/rtfstyle.h2
-rw-r--r--src/scanner.l2
-rw-r--r--src/searchindex.cpp51
-rw-r--r--src/searchindex.h1
-rw-r--r--src/store.cpp4
-rw-r--r--src/tagreader.cpp14
-rw-r--r--src/tclscanner.l10
-rw-r--r--src/template.cpp291
-rw-r--r--src/translator_hr.h4
-rw-r--r--src/util.cpp82
-rw-r--r--src/util.h8
-rw-r--r--src/vhdldocgen.cpp22
-rw-r--r--src/vhdljjparser.cpp97
-rw-r--r--src/xmldocvisitor.cpp107
-rw-r--r--src/xmlgen.cpp130
-rw-r--r--templates/html/arrowdown.luma49
-rw-r--r--templates/html/arrowright.luma49
-rw-r--r--templates/html/bc_s.luma66
-rw-r--r--templates/html/bdwn.luma21
-rwxr-xr-xtemplates/html/bib2xhtml.pl (renamed from src/bib2xhtml.pl)0
-rw-r--r--templates/html/close.pngbin0 -> 273 bytes
-rw-r--r--templates/html/closed.luma23
-rw-r--r--templates/html/doc.luma50
-rw-r--r--templates/html/doxygen.bst (renamed from src/doxygen.bst)0
-rw-r--r--templates/html/doxygen.css (renamed from src/doxygen.css)17
-rw-r--r--templates/html/doxygen.luma68
-rw-r--r--templates/html/dynsections.js (renamed from src/dynsections.js)0
-rw-r--r--templates/html/extsearch.js (renamed from src/extsearch.js)2
-rw-r--r--templates/html/folderclosed.luma49
-rw-r--r--templates/html/folderopen.luma49
-rw-r--r--templates/html/footer.html (renamed from src/footer.html)0
-rw-r--r--templates/html/header.html (renamed from src/header.html)0
-rw-r--r--templates/html/htmlallmembers.tpl22
-rw-r--r--templates/html/htmlannotated.tpl15
-rw-r--r--templates/html/htmlbase.tpl216
-rw-r--r--templates/html/htmlclass.tpl452
-rw-r--r--templates/html/htmlclasses.tpl49
-rw-r--r--templates/html/htmlclmembers.tpl20
-rw-r--r--templates/html/htmlclmembersindex.tpl26
-rw-r--r--templates/html/htmldeclcomp.tpl32
-rw-r--r--templates/html/htmldir.tpl78
-rw-r--r--templates/html/htmldirtree.tpl46
-rw-r--r--templates/html/htmldyncontents.tpl7
-rw-r--r--templates/html/htmldynheader.tpl7
-rw-r--r--templates/html/htmlfile.tpl256
-rw-r--r--templates/html/htmlfiles.tpl15
-rw-r--r--templates/html/htmlflmembers.tpl20
-rw-r--r--templates/html/htmlgraphhierarchy.tpl13
-rw-r--r--templates/html/htmlhierarchy.tpl17
-rw-r--r--templates/html/htmlinclude.tpl27
-rw-r--r--templates/html/htmlindexpages.tpl19
-rw-r--r--templates/html/htmljsnavindex.tpl7
-rw-r--r--templates/html/htmljsnavtree.tpl20
-rw-r--r--templates/html/htmllayout.tpl237
-rw-r--r--templates/html/htmlmemberindex.tpl37
-rw-r--r--templates/html/htmlmembersindex.tpl81
-rw-r--r--templates/html/htmlmembertabs.tpl48
-rw-r--r--templates/html/htmlmemdecl.tpl214
-rw-r--r--templates/html/htmlmemdecls.tpl38
-rw-r--r--templates/html/htmlmemdef.tpl284
-rw-r--r--templates/html/htmlmeminherit.tpl20
-rw-r--r--templates/html/htmlmemlist.tpl15
-rw-r--r--templates/html/htmlmemsummary.tpl7
-rw-r--r--templates/html/htmlmodule.tpl310
-rw-r--r--templates/html/htmlmodules.tpl15
-rw-r--r--templates/html/htmlnamespace.tpl206
-rw-r--r--templates/html/htmlnamespaces.tpl15
-rw-r--r--templates/html/htmlnavpath.tpl14
-rw-r--r--templates/html/htmlnavtree.tpl22
-rw-r--r--templates/html/htmlnsmembers.tpl20
-rw-r--r--templates/html/htmlnsmembersindex.tpl26
-rw-r--r--templates/html/htmlobjlink.tpl6
-rw-r--r--templates/html/htmlpage.tpl58
-rw-r--r--templates/html/htmlpages.tpl15
-rw-r--r--templates/html/htmlsource.tpl37
-rw-r--r--templates/html/htmltabs.tpl96
-rw-r--r--templates/html/htmltypeconstraints.tpl13
-rw-r--r--templates/html/jquery.js68
-rw-r--r--templates/html/mag.pngbin0 -> 524 bytes
-rw-r--r--templates/html/mag_sel.pngbin0 -> 563 bytes
-rw-r--r--templates/html/nav_f.lum11
-rw-r--r--templates/html/nav_g.pngbin0 -> 95 bytes
-rw-r--r--templates/html/nav_h.lum6
-rw-r--r--templates/html/navtree.css (renamed from src/navtree.css)2
-rw-r--r--templates/html/navtree.js (renamed from src/navtree.js)16
-rw-r--r--templates/html/open.luma23
-rw-r--r--templates/html/resize.js (renamed from src/resize.js)0
-rw-r--r--templates/html/search.css (renamed from src/search.css)0
-rw-r--r--templates/html/search.js (renamed from src/search.js)65
-rw-r--r--templates/html/search_functions.php (renamed from src/search_functions.php)2
-rw-r--r--templates/html/search_l.pngbin0 -> 604 bytes
-rw-r--r--templates/html/search_m.pngbin0 -> 158 bytes
-rw-r--r--templates/html/search_noidx.css271
-rw-r--r--templates/html/search_opensearch.php (renamed from src/search_opensearch.php)6
-rw-r--r--templates/html/search_r.pngbin0 -> 612 bytes
-rw-r--r--templates/html/splitbar.lum1028
-rw-r--r--templates/html/svgpan.js (renamed from src/svgpan.js)0
-rw-r--r--templates/html/sync_off.luma54
-rw-r--r--templates/html/sync_on.luma54
-rw-r--r--templates/html/tab_a.lum8
-rw-r--r--templates/html/tab_b.lum8
-rw-r--r--templates/html/tab_h.lum8
-rw-r--r--templates/html/tab_s.lum8
-rw-r--r--templates/html/tabs.css60
-rw-r--r--templates/latex/doxygen.sty (renamed from src/doxygen.sty)2
-rw-r--r--templates/xml/compound.xsd (renamed from src/compound.xsd)21
-rw-r--r--templates/xml/index.xsd (renamed from src/index.xsd)0
-rw-r--r--testing/008/008__brief_8c.xml2
-rw-r--r--testing/009/class_bug.xml2
-rw-r--r--testing/009/class_deprecated.xml2
-rw-r--r--testing/009/class_reminder.xml2
-rw-r--r--testing/009/class_test.xml2
-rw-r--r--testing/009/class_todo.xml2
-rw-r--r--testing/011/category_integer_07_arithmetic_08.xml2
-rw-r--r--testing/011/interface_integer.xml2
-rw-r--r--testing/013/class_t1.xml2
-rw-r--r--testing/013/class_t2.xml2
-rw-r--r--testing/013/class_t3.xml2
-rw-r--r--testing/013/class_t4.xml2
-rw-r--r--testing/015/015__cond_8c.xml2
-rw-r--r--testing/016/016__copydoc_8c.xml2
-rw-r--r--testing/018/018__def_8c.xml2
-rw-r--r--testing/022/indexpage.xml5
-rw-r--r--testing/025/class_test.xml2
-rw-r--r--testing/026/class_test.xml2
-rw-r--r--testing/027/struct_car.xml2
-rw-r--r--testing/027/struct_object.xml2
-rw-r--r--testing/027/struct_truck.xml2
-rw-r--r--testing/027/struct_vehicle.xml2
-rw-r--r--testing/029/029__hideinit_8c.xml2
-rw-r--r--testing/035/035__invariant_8c.xml2
-rw-r--r--testing/036/036__link_8c.xml2
-rw-r--r--testing/037/class_receiver.xml7
-rw-r--r--testing/037/class_sender.xml7
-rw-r--r--testing/039/class_test.xml2
-rw-r--r--testing/040/namespace_n_s.xml2
-rw-r--r--testing/041/class_test.xml2
-rw-r--r--testing/042/namespaceorg_1_1doxygen_1_1_test.xml2
-rw-r--r--testing/044/struct_s.xml2
-rw-r--r--testing/046/046__related_8cpp.xml2
-rw-r--r--testing/046/class_test.xml2
-rw-r--r--testing/047/047__return_8cpp.xml2
-rw-r--r--testing/048/048__showinit_8c.xml2
-rw-r--r--testing/054/054__parblock_8cpp.xml2
-rw-r--r--testing/057/057__caller__graphs_8tcl.xml2
-rw-r--r--testing/057/__057__caller__graphs_8tcl.xml2
-rw-r--r--testing/057/namespace1.xml2
-rw-r--r--testing/057/namespace1_1_11.xml2
-rw-r--r--testing/057/namespace1_1_11_1_11.xml2
-rw-r--r--testing/057/namespace2.xml2
-rw-r--r--testing/057/namespace2_1_12.xml2
-rw-r--r--testing/057/namespace2_1_12_1_12.xml2
-rw-r--r--testing/057/namespace2_1_12_1_12_1_12.xml2
-rw-r--r--testing/057/namespace2_1_12_1_12_1_12_1_12.xml2
-rw-r--r--testing/057/namespacebar.xml2
-rw-r--r--testing/057/namespacefoo.xml2
-rw-r--r--testing/058/058__bracket__recursion_8tcl.xml2
-rw-r--r--testing/059/059__command__catch_8tcl.xml2
-rw-r--r--testing/060/060__command__switch_8tcl.xml2
-rw-r--r--testing/061/class_test.xml2
-rw-r--r--testing/062/namespacen1.xml2
-rw-r--r--testing/062/namespacen2.xml2
-rw-r--r--testing/062/namespacen3.xml2
-rw-r--r--testing/063/namespaceoo.xml2
-rw-r--r--testing/063/namespaceoo_1_1_helpers.xml2
-rw-r--r--testing/063/namespaceoo_1_1define.xml2
-rw-r--r--testing/064/struct_foo.xml112
-rw-r--r--testing/064_castoperator.cpp25
-rw-r--r--testing/065/indexpage.xml10
-rw-r--r--testing/065_tilde.dox12
-rw-r--r--tmake/lib/linux-g++/tmake.conf2
-rw-r--r--tmake/lib/macosx-c++/tmake.conf2
-rw-r--r--vhdlparser/CharStream.cc4
-rw-r--r--vhdlparser/CharStream.h194
-rw-r--r--vhdlparser/ErrorHandler.h25
-rw-r--r--vhdlparser/JavaCC.h25
-rw-r--r--vhdlparser/JavaCC.h.in25
-rw-r--r--vhdlparser/Makefile.in3
-rw-r--r--vhdlparser/ParseException.cc6
-rw-r--r--vhdlparser/ParseException.h4
-rw-r--r--vhdlparser/Token.cc4
-rw-r--r--vhdlparser/Token.h7
-rw-r--r--vhdlparser/TokenManager.h12
-rw-r--r--vhdlparser/TokenMgrError.cc7
-rw-r--r--vhdlparser/TokenMgrError.h23
-rw-r--r--vhdlparser/VhdlParser.cc230
-rw-r--r--vhdlparser/VhdlParser.h557
-rw-r--r--vhdlparser/VhdlParserIF.cpp1
-rw-r--r--vhdlparser/VhdlParserTokenManager.cc56
-rw-r--r--vhdlparser/VhdlParserTokenManager.h27
-rw-r--r--vhdlparser/vhdlparser.jj1129
-rw-r--r--vhdlparser/vhdlparser.patch10
-rw-r--r--vhdlparser/vhdlstring.h3
-rw-r--r--winbuild/Doxygen.vcproj3733
-rw-r--r--winbuild/GenResources.rules19
-rw-r--r--winbuild/qtools.vcproj6
292 files changed, 13633 insertions, 7618 deletions
diff --git a/.gitignore b/.gitignore
index 0894b42..d97dc2e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -70,3 +70,6 @@
/man
/docbook
/perlmod
+!/templates/html
+!/templates/latex
+
diff --git a/Makefile.in b/Makefile.in
index e90167c..af7a76f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -102,7 +102,7 @@ pdf: docs
DISTFILES = Doxyfile vhdlparser libmd5 addon tmake doc examples bin lib objects testing \
qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \
- VERSION README.md packages winbuild jquery
+ VERSION README.md packages winbuild jquery templates
archive: clean
tar zcvf dx`date +%y%m%d`.tgz $(DISTFILES)
diff --git a/README.md b/README.md
index b11a775..3360bf9 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,8 @@ Developers
* Quick install see (./INSTALL)
* else http://www.doxygen.org/manual/install.html
+* Project stats: https://www.openhub.net/p/doxygen
+
Issues, bugs, requests, ideas
----------------------------------
Use the bug tracker to report bugs:
diff --git a/addon/doxysearch/doxyindexer.cpp b/addon/doxysearch/doxyindexer.cpp
index b44a940..e1006be 100644
--- a/addon/doxysearch/doxyindexer.cpp
+++ b/addon/doxysearch/doxyindexer.cpp
@@ -30,12 +30,19 @@
// Xapian include
#include <xapian.h>
+#define MAX_TERM_LENGTH 245
+
#if defined(_WIN32) && !defined(__CYGWIN__)
static char pathSep = '\\';
#else
static char pathSep = '/';
#endif
+static void safeAddTerm(const std::string &term,Xapian::Document &doc,int wfd)
+{
+ if (term.length()<=MAX_TERM_LENGTH) doc.add_term(term,wfd);
+}
+
/** trims \a whitespace characters from the start and end of string \a str. */
static std::string trim(const std::string& str,
const std::string& whitespace = " \t")
@@ -86,10 +93,10 @@ static void addWords(const std::string &s,Xapian::Document &doc,int wfd)
std::string word = *it;
std::string lword = word;
std::transform(lword.begin(), lword.end(), lword.begin(), ::tolower);
- doc.add_term(word,wfd);
+ safeAddTerm(word,doc,wfd);
if (lword!=word)
{
- doc.add_term(lword,wfd);
+ safeAddTerm(lword,doc,wfd);
}
}
}
@@ -102,7 +109,7 @@ static void addIdentifiers(const std::string &s,Xapian::Document &doc,int wfd)
QCString qs = s.c_str();
while ((i=re.match(qs,p,&l))!=-1)
{
- doc.add_term(qs.mid(p,i-p).data(),wfd);
+ safeAddTerm(qs.mid(p,i-p).data(),doc,wfd);
p=i+l;
}
}
@@ -201,18 +208,18 @@ class XMLContentHandler : public QXmlDefaultHandler
m_doc.get_value(TypeField)=="file" ||
m_doc.get_value(TypeField)=="namespace") // containers get highest prio
{
- m_doc.add_term(term,1000);
+ safeAddTerm(term,m_doc,1000);
if (!partTerm.empty())
{
- m_doc.add_term(partTerm,500);
+ safeAddTerm(partTerm,m_doc,500);
}
}
else // members and others get lower prio
{
- m_doc.add_term(m_doc.get_value(NameField),100);
+ safeAddTerm(m_doc.get_value(NameField),m_doc,100);
if (!partTerm.empty())
{
- m_doc.add_term(partTerm,50);
+ safeAddTerm(partTerm,m_doc,50);
}
}
m_db.add_document(m_doc);
diff --git a/addon/doxysearch/doxysearch.cpp b/addon/doxysearch/doxysearch.cpp
index d885502..f6946ef 100644
--- a/addon/doxysearch/doxysearch.cpp
+++ b/addon/doxysearch/doxysearch.cpp
@@ -116,7 +116,7 @@ static std::string uriDecode(const std::string & sSrc)
}
/** return list of strings that result when splitting \a s using
- * delimeter \a delim
+ * delimiter \a delim
*/
static std::vector<std::string> split(const std::string &s, char delim)
{
@@ -137,7 +137,7 @@ T fromString(const std::string& s)
return t;
}
-/** Class that holds the startin position of a word */
+/** Class that holds the starting position of a word */
struct WordPosition
{
WordPosition(int s,int i) : start(s), index(i) {}
@@ -196,7 +196,7 @@ static bool insideRange(const std::vector<Range> &ranges,int start,int len)
}
/** Returns a list of text \a fragments from \a s containing one or
- * more \a words. The list is sorted occording to the
+ * more \a words. The list is sorted according to the
* number of occurrences of words within the fragment.
*/
static void highlighter(const std::string &s,
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index 26df065..d0728ae 100644
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -10,7 +10,7 @@
#define MAX_RECENT_FILES 10
-const int messageTimeout = 5000; //!< status bar message timeout in millisec.
+const int messageTimeout = 5000; //!< status bar message timeout in milliseconds.
MainWindow &MainWindow::instance()
{
@@ -78,7 +78,7 @@ MainWindow::MainWindow()
runLayout->addWidget(showSettings);
runLayout->addWidget(m_saveLog);
- // output produced by doxygen
+ // output produced by Doxygen
runTabLayout->addLayout(runLayout);
runTabLayout->addWidget(new QLabel(tr("Output produced by doxygen")));
QGridLayout *grid = new QGridLayout;
@@ -427,7 +427,7 @@ void MainWindow::runDoxygen()
qDebug() << tr("Doxygen path: ") << doxygenPath;
if ( !QFile(doxygenPath + QString::fromAscii("doxygen")).exists() )
{
- // No doygen binary in the resources, if there is a system doxygen binary, use that instead
+ // No Doxygen binary in the resources, if there is a system Doxygen binary, use that instead
if ( QFile(QString::fromAscii("/usr/local/bin/doxygen")).exists() )
{
doxygenPath = QString::fromAscii("/usr/local/bin/");
diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp
index 1cc5d15..3a03c69 100644
--- a/addon/doxywizard/expert.cpp
+++ b/addon/doxywizard/expert.cpp
@@ -452,7 +452,7 @@ static QString getDocsForNode(const QDomElement &child)
// LaTeX name as formula -> LaTeX
regexp.setPattern(SA("\\\\f\\$\\\\mbox\\{\\\\LaTeX\\}\\\\f\\$"));
docs.replace(regexp,SA("LaTeX"));
- // Other forula's (now just 2) so explicitely mentioned.
+ // Other formula's (now just 2) so explicitly mentioned.
regexp.setPattern(SA("\\\\f\\$2\\^\\{\\(16\\+\\\\mbox\\{LOOKUP\\\\_CACHE\\\\_SIZE\\}\\)\\}\\\\f\\$"));
docs.replace(regexp,SA("2^(16+LOOKUP_CACHE_SIZE)"));
regexp.setPattern(SA("\\\\f\\$2\\^\\{16\\} = 65536\\\\f\\$"));
diff --git a/configure b/configure
index 5c01af0..39d5057 100755
--- a/configure
+++ b/configure
@@ -17,7 +17,7 @@
doxygen_version_major=1
doxygen_version_minor=8
-doxygen_version_revision=8
+doxygen_version_revision=9
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO
@@ -554,8 +554,13 @@ fi
if test "$f_libclang" = YES; then
printf " Checking for libclang ... "
- libclang_hdr_dir="/usr/include /usr/local/include /opt/local/include"
- libclang_lib_dir="/usr/lib /usr/local/lib /opt/local/lib /usr/lib64/llvm /usr/lib/llvm"
+ if llvm-config --version > /dev/null 2>&1; then
+ libclang_hdr_dir=`llvm-config --includedir`
+ libclang_lib_dir=`llvm-config --libdir`
+ else
+ libclang_hdr_dir="/usr/include /usr/local/include /opt/local/include"
+ libclang_lib_dir="/usr/lib /usr/local/lib /opt/local/lib /usr/lib64/llvm /usr/lib/llvm"
+ fi
if test "$f_libclangstatic" = NO; then
libclang_lib_name="libclang.so libclang.dylib libclang.a libclang.dll.a"
else
@@ -952,7 +957,7 @@ EOF
#if test "$f_thread" = YES; then
# realopts="$realopts thread"
#fi
- cat $SRC .tmakeconfig | sed -e "s/\$extraopts/$realopts/g" -e "s;%%SQLITE3_INC%%;$sqlite3_hdr_dir;g" -e "s;%%SQLITE3_LIBS%%;$sqlite3_link;g" -e "s;%%LIBCLANG_LIBS%%;$libclang_link;g" >> $DST
+ cat $SRC .tmakeconfig | sed -e "s/\$extraopts/$realopts/g" -e "s;%%SQLITE3_INC%%;$sqlite3_hdr_dir;g" -e "s;%%SQLITE3_LIBS%%;$sqlite3_link;g" -e "s;%%LIBCLANG_INC%%;$libclang_hdr_dir;g" -e "s;%%LIBCLANG_LIBS%%;$libclang_link;g" >> $DST
echo " Created $DST from $SRC..."
done
diff --git a/doc/changelog.doc b/doc/changelog.doc
index 606f63f..4810633 100644
--- a/doc/changelog.doc
+++ b/doc/changelog.doc
@@ -2,6 +2,184 @@
\tableofcontents
\section log_1_8 1.8 Series
+\subsection log_1_8_9 Release 1.8.9
+\htmlonly
+<b>(release date 25-12-2014)</b>
+<a name="1.8.9"></a>
+<ul>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634763">634763</a> - Fortran: external subroutine as dummy argument not recognized [<a href="http://github.com/doxygen/doxygen/commit/8f78eff7e8b2650f9a8364ff5c5b6925279e6b5a">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634763">634763</a> - Fortran: external subroutine as dummy argument not recognized [<a href="http://github.com/doxygen/doxygen/commit/fabd1194a2e3c2536dddc19945c568a690b17031">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=651859">651859</a> - Brief description misplaced in man page output [<a href="http://github.com/doxygen/doxygen/commit/379e3b959a9566571db3c799a8338dd4436881b2">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652276">652276</a> - Typedefs in manpages has too few linebreak possiblilities [<a href="http://github.com/doxygen/doxygen/commit/4bbcf71defb2e2be02494b7ff68d475d1a0438ac">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=685597">685597</a> - C# &lt;code&gt; tag in an &lt;example&gt; tag does not render as expected. [<a href="http://github.com/doxygen/doxygen/commit/07d5f3f48a497993c525eab9a5ecc0429c317c98">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=687576">687576</a> - Add support for LATEX_EXTRA_STYLESHEET [<a href="http://github.com/doxygen/doxygen/commit/fd91442bcc5a20ba298a024ee2cc375ec4f1714d">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704090">704090</a> - Allow Class{T}.Method in cref to refer to a generic class in XML comments [<a href="http://github.com/doxygen/doxygen/commit/f9c9edba086f544b813ff036ea9209744da18c44">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722940">722940</a> - classes with same name in different namespace adding to same group [<a href="http://github.com/doxygen/doxygen/commit/73a5a4c48aec0c48353ecb8e5aa6d5ff02463132">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729063">729063</a> - Missing link for item inside the same namespace [<a href="http://github.com/doxygen/doxygen/commit/95aee340bddca0c09c79dc2f137a5ad01eb4fda8">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729236">729236</a> - Added HIDE_COMPOUND_REFERENCE config option [<a href="http://github.com/doxygen/doxygen/commit/415ae7021eeee278ad6c95be23e572dc18ff6a32">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735145">735145</a> - QHP toc broken if mainpage with PROJECT_NAME title has sections/subpages [<a href="http://github.com/doxygen/doxygen/commit/745955f576cbd7b5f7601c55937d9c42db8161e8">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735194">735194</a> - src/Makefile.libdoxycfg shouldn&#39;t be distributed [<a href="http://github.com/doxygen/doxygen/commit/45cfc44d3670bb9f72a0795d4a9bc07403a29d6d">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735198">735198</a> - plantUML requires epstopdf for building PDF files [<a href="http://github.com/doxygen/doxygen/commit/52d216a87451c867c92691a4483cd85d3e5b906f">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735376">735376</a> - tag file: Unknown compound attribute `singleton&#39; found! [<a href="http://github.com/doxygen/doxygen/commit/92eb236037e857f38eaf24238815641a48540792">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735441">735441</a> - Fix a resource leak in src/vhdldocgen.cpp [<a href="http://github.com/doxygen/doxygen/commit/22e44853813066e45b483b1b6633199b3d2bf509">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735462">735462</a> - There&#39;s no such thing as a private Q_PROPERTY [<a href="http://github.com/doxygen/doxygen/commit/ff7cc1c73c3d4b3449862055bd08b0f361e5b358">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735475">735475</a> - Same Expression in translator_kr.h [<a href="http://github.com/doxygen/doxygen/commit/32aa9f2a7898b5c43070a5cd0dec8bddcc6b8c39">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735477">735477</a> - Fix a potential null pointer dereference in src/memberdef.cpp [<a href="http://github.com/doxygen/doxygen/commit/7a268f59c0551953fe4e7dde0b1e3804d583a060">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735481">735481</a> - Mismatch in memory allocation/de-allocation function in vhdlparser/vhdlstring.h [<a href="http://github.com/doxygen/doxygen/commit/2038873ce0a9ec90efb28730b3dc787d3d03e964">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735482">735482</a> - Remove a not needed initialization of a local variable in src/mangen.cpp [<a href="http://github.com/doxygen/doxygen/commit/1e8a69902a2cbb3118e6de5959223b9c8d3a843a">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735483">735483</a> - Fix a potential null pointer dereference in src/searchindex.cpp [<a href="http://github.com/doxygen/doxygen/commit/e21aaadb920775f431a27957542da80e39d0c947">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735497">735497</a> - Fix wrong pointer initialization in src/definition.cpp [<a href="http://github.com/doxygen/doxygen/commit/cb5d8e6198fe0d0852fb06d6fa18b8ae2682e2c0">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735499">735499</a> - Fix potential modulo by zero in src/template.cpp [<a href="http://github.com/doxygen/doxygen/commit/c4007c3abea9c8494bf32181a1352b5366bede69">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735584">735584</a> - Reached end of file while still insided a (nested) comment in Markdown [<a href="http://github.com/doxygen/doxygen/commit/c7f7c954ec1356e7f361da0d655c72ca0012a0cf">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735587">735587</a> - Fix a terminating null character after fread in src/filedef.cpp [<a href="http://github.com/doxygen/doxygen/commit/a4003db44dfb624c03b7e0a518e368d3e4b8c1ca">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735589">735589</a> - Remove not needed variable initialization in src/classdef.cpp [<a href="http://github.com/doxygen/doxygen/commit/5f01852bbfd3c81320ee4aa8cd45875a80b50ee1">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735590">735590</a> - Remove not needed pointer initialization in src/entry.cpp [<a href="http://github.com/doxygen/doxygen/commit/88832b15f1256846b1228ac411d270c6d092a50b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735591">735591</a> - Provide exit code in case generatePlantUMLOutput fails [<a href="http://github.com/doxygen/doxygen/commit/94ea18e60c50db14f25eda642be020fac5917b3c">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735620">735620</a> - Remove not needed variable caching in src/markdown.cpp [<a href="http://github.com/doxygen/doxygen/commit/d6c2464982e5b1c027cdde0400822c3b2fc7fd41">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735622">735622</a> - Do not cache inputSize in src/doxygen.cpp [<a href="http://github.com/doxygen/doxygen/commit/8f3e7fc892f07f32a2c6e0110dab58942f6c20a7">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735623">735623</a> - Expression is always false because &#39;else if&#39; condition matches previous condition [<a href="http://github.com/doxygen/doxygen/commit/98a9b24cd6006b130dd1e56c32f684e159fee2a3">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735726">735726</a> - Fix missing break in switch case statement [<a href="http://github.com/doxygen/doxygen/commit/b59edd279f887e55b162ae1b1c7bce4b2ca29dab">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735745">735745</a> - Spurious ASSERT message [<a href="http://github.com/doxygen/doxygen/commit/fff03ab9adcbdf480929c6a10975cab469eaf17c">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735759">735759</a> - Broken man pages due to bad use of autoBreak [<a href="http://github.com/doxygen/doxygen/commit/6aa7f36ce924cf9dc59a951e5727b17c37d0345e">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735767">735767</a> - Fix potential copy and paste issue in vhdlparser/VhdlParser.cc [<a href="http://github.com/doxygen/doxygen/commit/9238e342bc8f1ce3e0aaa2944d77c33e4363cf48">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735924">735924</a> - [Patch] Documentation: Wrong link for \\diafile [<a href="http://github.com/doxygen/doxygen/commit/285221e3d287db083b9377cb5633650fb2a783a1">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735925">735925</a> - [Patch] DocBook: Possible name clash for generated image files [<a href="http://github.com/doxygen/doxygen/commit/8b39158436b740a78166f947de375b5486441c93">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735926">735926</a> - RTF output: \\diafile and \\mscfile do not work [<a href="http://github.com/doxygen/doxygen/commit/7cd2b1f27a03846a8f9bcd1e4489cbfebf56bfa2">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735929">735929</a> - Windows: Process exit code is ignored for processes launched using ShellExecuteEx() [<a href="http://github.com/doxygen/doxygen/commit/68aa8c2bd8a5e6a8ad7c46c725c8bb5e61896ba0">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735982">735982</a> - Fix potential allocation of huge memory amount due to type overflow in src/lodepng.cpp [<a href="http://github.com/doxygen/doxygen/commit/30870ef90f4a74e7c53a6856b10bcd2f16e4d1bd">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735985">735985</a> - Fix missing unchecked return value in src/dot.cpp [<a href="http://github.com/doxygen/doxygen/commit/be0c23efcb902891e91bed42ab2ac27a6f1460cb">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736018">736018</a> - Fix potential null pointer dereference in src/dbusxmlscanner.cpp [<a href="http://github.com/doxygen/doxygen/commit/46e83b44be0c0aa97ead5ee52e329154c1fb47bc">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736020">736020</a> - Fix identical code for different branches in src/translator_tw.h [<a href="http://github.com/doxygen/doxygen/commit/79dedb65ae1f9306b83a69058dbd2015ef7c3b94">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736022">736022</a> - Fix potential null pointer dereference in src/index.cpp [<a href="http://github.com/doxygen/doxygen/commit/68c063cbffc38c1528dd86232a8b8642fae26b1b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736023">736023</a> - Remove not needed variable initialization in src/cite.cpp [<a href="http://github.com/doxygen/doxygen/commit/23bc555e5483baa6c1a3d0c1ad346bb37348b31b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736027">736027</a> - Remove not needed local variable in src/doxygen.cpp [<a href="http://github.com/doxygen/doxygen/commit/561a996c68f796dccb36fb3eed6150fcc90e5634">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736029">736029</a> - Remove redundant if/else branch in src/lodepng.cpp [<a href="http://github.com/doxygen/doxygen/commit/3026131de3126298863d1a68fe0c747524e26e43">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736030">736030</a> - Remove redundant if/else branch in src/translator_lt.h [<a href="http://github.com/doxygen/doxygen/commit/e7b9f1d16ea2043be068c448676e368e9239314e">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736031">736031</a> - Cleanup redundant if/else branch in src/translator_kr.h [<a href="http://github.com/doxygen/doxygen/commit/3d1343d1c8876d0eb0352eafafe4aa90bc483adf">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736032">736032</a> - Cleanup redundant if/else branch in src/translator_sr.h [<a href="http://github.com/doxygen/doxygen/commit/192aa6590b6ceb264335a5b8a1aed6b6f8b0f350">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736033">736033</a> - Cleanup redundant if/else branch in src/translator_tw.h [<a href="http://github.com/doxygen/doxygen/commit/02b35985cda1a537c45071f1245b2c4a6dc4ffc6">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736034">736034</a> - Cleanup redundant if/else branch in src/translator_vi.h [<a href="http://github.com/doxygen/doxygen/commit/8e47b4bc5084cb00e5bdcdaa4c1bd048b48a4999">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736036">736036</a> - Remove redundant local variable initialization in qtools/qstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/4afe088327ae6780c9c8a73b7b2d3994005f6cca">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736037">736037</a> - Fix wrong member variable initialization in src/define.cpp [<a href="http://github.com/doxygen/doxygen/commit/33daf7a7d9ab9b6c5454acd7a3cff7923d1c4c14">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736385">736385</a> - Fix potential null pointer dereference in src/util.cpp [<a href="http://github.com/doxygen/doxygen/commit/24b5b715929759a7836a3813ef93976b7cc10641">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736386">736386</a> - Fix another potential null pointer dereference in src/util.cpp [<a href="http://github.com/doxygen/doxygen/commit/bc95beac3eca3cda55430e0cde97ba826d3d7400">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736387">736387</a> - Fix a potential null pointer dereference in src/index.cpp [<a href="http://github.com/doxygen/doxygen/commit/c22be34fb79588fa04a9cf9c86438c8eb00d81fc">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736389">736389</a> - Fix a potential null pointer dereference in src/vhdldocgen.cpp [<a href="http://github.com/doxygen/doxygen/commit/7a22d83a1f9665863201ff0e717071e9b7d3a110">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=736992">736992</a> - Member functions omitted from tagfile [<a href="http://github.com/doxygen/doxygen/commit/b9ad9a03cf4febeb2aa10ddca22c1c9296c5223b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=737444">737444</a> - Java: Annotations with brackets prevent documentation [<a href="http://github.com/doxygen/doxygen/commit/e446e2e044d674ba3609619e3dd95eb340f15e09">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=737830">737830</a> - Invalid element name in footer part when GENERATE_TREEVIEW specified [<a href="http://github.com/doxygen/doxygen/commit/5cb961284e89f197406170389e8866bb9c94fe3a">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738063">738063</a> - Fortran attribute contiguous not identified [<a href="http://github.com/doxygen/doxygen/commit/6da2e3fb28f6ed9f219c66d165ac4467fda36148">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738167">738167</a> - Entity references in XML command attributes are incorrectly handled [<a href="http://github.com/doxygen/doxygen/commit/553a7bf7e1b7be2f602e0230ddfc7f882b009cf8">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738173">738173</a> - Entity references in XML code command are incorrectly handled [<a href="http://github.com/doxygen/doxygen/commit/30216574cb189a92f27bb0e701ff31aa8cce6b83">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738548">738548</a> - latex: dead links to source code [<a href="http://github.com/doxygen/doxygen/commit/b68a4abcfa22e68fd94487a8f2b48588eda5a1af">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=738574">738574</a> - &amp;hellip; is replaced by \cdots rather than \dots in the LaTeX output [<a href="http://github.com/doxygen/doxygen/commit/9ac31f84bd25d320f861e9e194fe5df49f4b212b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739054">739054</a> - Python xml not outputting info of functions inside __init__.py [<a href="http://github.com/doxygen/doxygen/commit/d13908f65b6e745bab14dc610c9f9bc7908c55c5">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739056">739056</a> - Python xml - argsstring is empty, while HTML have arguments [<a href="http://github.com/doxygen/doxygen/commit/89eb624fec44c0f900d9035dfea950ceaf0ba76d">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739209">739209</a> - Invalid warning about undocumented C++ function imported from tagfile [<a href="http://github.com/doxygen/doxygen/commit/f1c96033bcea28e3ff4528299459b39488831669">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739210">739210</a> - C++11 scoped enums with same name inside different classes are merged if using tagfile [<a href="http://github.com/doxygen/doxygen/commit/b4fd6ac51fad4f20116194816d4802f616739d1f">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739211">739211</a> - Cannot make explicit links to C++ const member functions [<a href="http://github.com/doxygen/doxygen/commit/ad5dfc39bee7a1b3de16f36bc3a20565aa6438fe">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739214">739214</a> - Cannot make unscoped link to C++ conversion operator [<a href="http://github.com/doxygen/doxygen/commit/9f477b87fc492221e1b7109d197fe468cd0ed23d">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739462">739462</a> - Using &quot;doxygen.css&quot; for HTML_EXTRA_STYLESHEET fails silently [<a href="http://github.com/doxygen/doxygen/commit/5e962c90d3270612df7363e7cf6bf42646c94fbe">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=739863">739863</a> - Regression: Base classes incorrect when using CRTP with default template parameter [<a href="http://github.com/doxygen/doxygen/commit/200b828ead9f6bb5b2f6f99919837d5828a250e4">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=740218">740218</a> - Full scope needed when making link inside cross-referenced section [<a href="http://github.com/doxygen/doxygen/commit/c6e41226574c94a869ad0757b53027562ef189e1">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=740218">740218</a> - Full scope needed when making link inside cross-referenced section (fixed regression) [<a href="http://github.com/doxygen/doxygen/commit/60abada8b95cc1772996a264065904f408ed32ff">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=740446">740446</a> - invalid copydoc target does not result in warning [<a href="http://github.com/doxygen/doxygen/commit/738c0dd829b6e3ae74359a8d92d12b491fa71d1b">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=741100">741100</a> - Latex to PDF hangs when using Markdown tables [<a href="http://github.com/doxygen/doxygen/commit/089771b5f3c3c3984ae6f352125a001788a62d29">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=741417">741417</a> - Crash when building gtkmm documentation [<a href="http://github.com/doxygen/doxygen/commit/050fce2b73d6e4455808ab86da2fddcf2f26e9b5">view</a>]</li>
+<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=741778">741778</a> - \cite confused by labels ending with a dot (improved warning message) [<a href="http://github.com/doxygen/doxygen/commit/78fd02dc41384d81baddf17ff0bb3431267452fc">view</a>]</li>
+<li>fix docbook output [<a href="http://github.com/doxygen/doxygen/commit/1a403d80160458091bab7c442e54f836c0b90bca">view</a>]
+ <ol><li>support other than english
+ <li>fix broken example link id
+ <li>fix incomplete TOC : no Classe etc.
+ <li>add brief description for Functions etc.
+ <li>Comply with REPEAT_BRIEF
+ <li>Do not output duplicated contents when detailed descripton is missing.
+ <li>set table colwidth for Param/RetVal
+ </ol>
+</li>
+<li>Add missing escape in doxysearch.cpp when result contained a double quote [<a href="http://github.com/doxygen/doxygen/commit/08c9689157d7edc5d8e3369ef96f2ccd4b01c10c">view</a>]</li>
+<li>Add source code possibility for RTF output [<a href="http://github.com/doxygen/doxygen/commit/05eb230757f6510d461bd14df3b190da46edd9dc">view</a>]</li>
+<li>Added Coverity Scan Build Status to Readme [<a href="http://github.com/doxygen/doxygen/commit/394acb6a10dbef10cad3a0a3ff50a05d0efdea9e">view</a>]</li>
+<li>Added clearer range checks for string class to help compiler [<a href="http://github.com/doxygen/doxygen/commit/869ff34828e20e3ec318384d7b0dbf91b6b2d24d">view</a>]</li>
+<li>Added compilation support for MacOSX 10.10 (yosemite) [<a href="http://github.com/doxygen/doxygen/commit/151876a8321204bd2ec08ec6c4de38ba9fb2d034">view</a>]</li>
+<li>Added faster reference counted string implementation with short string optimization [<a href="http://github.com/doxygen/doxygen/commit/9323ae470ad514586706dc8647501361fe208f36">view</a>]</li>
+<li>Added graphical hierarchy support to template engine [<a href="http://github.com/doxygen/doxygen/commit/fe818bf8e3a154788a4a180068cfdfbbadd66ff6">view</a>]</li>
+<li>Added guard to prevent (theoretical) out of bound access [<a href="http://github.com/doxygen/doxygen/commit/060a5cc121be5fd177b5d5c834f2b810dc58b9ec">view</a>]</li>
+<li>Added language attribute to XML output for classes, namespaces, and files [<a href="http://github.com/doxygen/doxygen/commit/e986e0039de21791bd1fbb1f59b13f58c4a46324">view</a>]</li>
+<li>Avoid a (theoretical) memory leak [<a href="http://github.com/doxygen/doxygen/commit/2937e44299a615628c27b0a0a7a95ffdf18249ef">view</a>]</li>
+<li>Better handling of inline Fortran parameter documentation [<a href="http://github.com/doxygen/doxygen/commit/d5546cff5c82157f2dfddd0e1c4fdeeee8e501dd">view</a>]</li>
+<li>Fixed bug for page numbers in the latex indices [<a href="http://github.com/doxygen/doxygen/commit/37ea04c317f9e1e8a09e5944b8c6c2c2ef35b1f6">view</a>]</li>
+<li>Compilation fixes for Windows for new string implementation. [<a href="http://github.com/doxygen/doxygen/commit/a31c9fffec6b5145ac8509d77da826d2e196ed1e">view</a>]</li>
+<li>Convert FORTRAN modules to namespaces [<a href="http://github.com/doxygen/doxygen/commit/be933bfacadaca98aaf4713746201b1fc21177de">view</a>]</li>
+<li>Create an easy possibility to take a snippet from the current file. [<a href="http://github.com/doxygen/doxygen/commit/f8ceac63bdb52cf395207258c98ff0bcba35870a">view</a>]</li>
+<li>Debian Bug 762272: segfault with cyclic subgroups [<a href="http://github.com/doxygen/doxygen/commit/c83db38ea83499be19d9ff242bfa22ae534ee80c">view</a>]</li>
+<li>Disabled enter/exit printing for doctokenizer (produced too much noise) [<a href="http://github.com/doxygen/doxygen/commit/0b615342f0a24fbf02cc9fa94550cf34d230425b">view</a>]</li>
+<li>Empty entry in \tableofcontents in case e.g. section without description. [<a href="http://github.com/doxygen/doxygen/commit/d2acdcf3b1bbd4d3079cf6c4ff5de6ba6716fd06">view</a>]</li>
+<li>Extra empty line in source fragments [<a href="http://github.com/doxygen/doxygen/commit/79b40a437092bccb6589cdb29c0059a4797b771d">view</a>]</li>
+<li>Fix bug with C++11 static_assert [<a href="http://github.com/doxygen/doxygen/commit/7c257bb57562b015b094f109851d914ef232ae2a">view</a>]</li>
+<li>Fix bug: language switch command &quot;\~&quot; failed to detect language id which contains &#39;-&#39; [<a href="http://github.com/doxygen/doxygen/commit/a4cf65dea1371721f07c63c2bb5f9e5085b2618a">view</a>]</li>
+<li>Fix for https://bugzilla.gnome.org/show_bug.cgi?id=651850 [<a href="http://github.com/doxygen/doxygen/commit/e1aa7af27eded7afdf81b688015421d3b3467b2b">view</a>]</li>
+<li>Fix for the second issue in bz 651848 [<a href="http://github.com/doxygen/doxygen/commit/bcd3fbf59f9199470d51938486fecda05006da61">view</a>]</li>
+<li>Fix potential crash when reading tag file which contained nested java classes using generics [<a href="http://github.com/doxygen/doxygen/commit/6d4044ad43ae1424a256eb1c26992301e7c64f4a">view</a>]</li>
+<li>Fix rules for closing FORTRAN module and typedef scopes [<a href="http://github.com/doxygen/doxygen/commit/7ace28eb7bb5f42c3571e5b7be1ab954f4509e17">view</a>]</li>
+<li>Fix to ignore the contents of \verbatim and friends while looking for sections [<a href="http://github.com/doxygen/doxygen/commit/cba0d89fafee3daef31469cbe1cdd24e68c7b56a">view</a>]</li>
+<li>Fix to show relations between C#/Java generic classes [<a href="http://github.com/doxygen/doxygen/commit/9879fddbf8f91c57b258b8e788b5ed8a150a8331">view</a>]</li>
+<li>Fixed a number of issues (resource leaks, uninitialized members, etc) found by coverity [<a href="http://github.com/doxygen/doxygen/commit/41887832b90698df95e8d222cdc0a541ae2f2284">view</a>]</li>
+<li>Fixed bug in new QCString::sprintf for long string. [<a href="http://github.com/doxygen/doxygen/commit/0ec56b7aa2dd39e3cab71c2229d486161566e7f6">view</a>]</li>
+<li>Fixed extension matching issue if path contained a dot. [<a href="http://github.com/doxygen/doxygen/commit/79ed06502c3abca083f2e231f09fc8101862fcf6">view</a>]</li>
+<li>Fixed issue accessing uninitialized data when combining RTF output. [<a href="http://github.com/doxygen/doxygen/commit/e5076edf2c103d262a9e32d57fb40cfe210c9ddf">view</a>]</li>
+<li>Fixed issue parsing @end directly followed by the end of the file [<a href="http://github.com/doxygen/doxygen/commit/fa239ea9a3bba27e4fff84629883ee400f674c1e">view</a>]</li>
+<li>Fixed problem finding \enduml when using /// style comments. [<a href="http://github.com/doxygen/doxygen/commit/4df52916170bb81179697d0fa78c7d81fd95415f">view</a>]</li>
+<li>Fixed refcounting bug in new string implementation [<a href="http://github.com/doxygen/doxygen/commit/a9dcbfe28625673f4d13bc5b3cde694c24062e19">view</a>]</li>
+<li>Fixed several Coverity warnings [<a href="http://github.com/doxygen/doxygen/commit/9b7e4ffb6c5f7534e4ba11d5798b4eb74d4a2a70">view</a>]</li>
+<li>Fixed to small memory leaks [<a href="http://github.com/doxygen/doxygen/commit/b55a5c91d49359f9bbf7c78d9f284be2092bcfaa">view</a>]</li>
+<li>Fixed typos and formatting in Doxyfile (thanks to Armin Mueller) [<a href="http://github.com/doxygen/doxygen/commit/fdd1c3f1527b15f6b0a25c2d99748f6a8adc5fcf">view</a>]</li>
+<li>Fixed typos in C/C++ comments. There are no functional changes. [<a href="http://github.com/doxygen/doxygen/commit/458fb1738f4e59586460daa2a1e3ad2e730306c4">view</a>]</li>
+<li>Fixed typos in comments. [<a href="http://github.com/doxygen/doxygen/commit/8ff67ad01abfe97b43de0ef1799c8b798d725ab9">view</a>]</li>
+<li>Fixed typos in comments. No functional changes. [<a href="http://github.com/doxygen/doxygen/commit/6920d3ec6db21cec32086249a48875cbac957470">view</a>]</li>
+<li>Fortran code color END (regression pull request 259) [<a href="http://github.com/doxygen/doxygen/commit/0ccda478e35eb420d644b6c39923f9c020e69c13">view</a>]</li>
+<li>Fortran color CALL as keyword [<a href="http://github.com/doxygen/doxygen/commit/d3a5f96d07db323ff97fb07766a809769506ef3a">view</a>]</li>
+<li>Fortran color code of END [<a href="http://github.com/doxygen/doxygen/commit/1cfa914cbb4e41f15af1f08517af887d6b241f28">view</a>]</li>
+<li>Fortran continuation character seen as begin of function call [<a href="http://github.com/doxygen/doxygen/commit/b2e9aa362540cae4487e48598fb7e80b8651752f">view</a>]</li>
+<li>Generate error message in case bibtex generation fails [<a href="http://github.com/doxygen/doxygen/commit/f121923bde72ef68616224a3fa1c1fe27eeb385e">view</a>]</li>
+<li>Improved main page rendering via template engine [<a href="http://github.com/doxygen/doxygen/commit/f8a86910e4cd1d98993bd6991eb1b1aff7a86b05">view</a>]</li>
+<li>Initialized potentially uninitialized variable in markdown part [<a href="http://github.com/doxygen/doxygen/commit/c98afa68350ed5cbce5a24bee3b47069789cc411">view</a>]</li>
+<li>Introduce new optimized string implementation (attempt 2) [<a href="http://github.com/doxygen/doxygen/commit/43edc14cd357dcb070402bccc5030507570c22a4">view</a>]</li>
+<li>Introduced template directory for template and resource files and resource compiler &amp; manager [<a href="http://github.com/doxygen/doxygen/commit/0fea3d4ca57187f271d7580ff16f32b7ab4657df">view</a>]</li>
+<li>LaTeX problem with 2 consecutive single quotes [<a href="http://github.com/doxygen/doxygen/commit/0cb39b4cf9f1e89720cb19f58158b90ecf0b75ef">view</a>]</li>
+<li>Last comment of \code{.f90} missing [<a href="http://github.com/doxygen/doxygen/commit/b9145da402cd49c4c4e888a31dc17612387b1321">view</a>]</li>
+<li>Limit images sizes and make more uniform (LaTeX) [<a href="http://github.com/doxygen/doxygen/commit/329a4ddc036ac9dfe72b11d62cb4043bc8488c20">view</a>]</li>
+<li>Package mathptmx gives discrepancy between pdf and HTML formulas [<a href="http://github.com/doxygen/doxygen/commit/418d7f076ffbb1aeaae5f689a5dd46977c456a98">view</a>]</li>
+<li>Portuguese and Brazilian Portuguese translators updated to 1.8.5. [<a href="http://github.com/doxygen/doxygen/commit/7da215a553e19783de60341bd863264ea9393513">view</a>]</li>
+<li>Prevent overly long terms from stopping the search indexer [<a href="http://github.com/doxygen/doxygen/commit/5d266c5d7f7b05dcfa8d3485bc43e268dd8fe90a">view</a>]</li>
+<li>Problem in case of line termination (., a dot) direct after the \cite command [<a href="http://github.com/doxygen/doxygen/commit/f0338dbf3a8770a6120eab83b338e6e3c3427a0e">view</a>]</li>
+<li>Regression class&lt;T extends V&gt; resulted in class&lt;V&gt; as the page title [<a href="http://github.com/doxygen/doxygen/commit/dec53d22986c8d2c44a30806a2c8ed03bbe24768">view</a>]</li>
+<li>Remove bogus argument to avoid compiler warning [<a href="http://github.com/doxygen/doxygen/commit/5bebcfb4a077287c561d2be7b3510d13d4e44a55">view</a>]</li>
+<li>Remove dependency of PlantUML on HAVE_DOT [<a href="http://github.com/doxygen/doxygen/commit/352bac2c21b69d4e33ec0056fe4d2b96fbe1b0b5">view</a>]</li>
+<li>Remove extraneous &#39;README&#39; to allow successful RPM creation [<a href="http://github.com/doxygen/doxygen/commit/fefce473f5cde9fe4db3a86544db2ba41eec8d74">view</a>]</li>
+<li>Remove filtering rule when generating FORTRAN module links [<a href="http://github.com/doxygen/doxygen/commit/238b73322f87614f5753dc0fa6df6c450f81be5e">view</a>]</li>
+<li>Remove redundant code [<a href="http://github.com/doxygen/doxygen/commit/d1ed20c4c9a04f7995b82f8628908e3c34fd054a">view</a>]</li>
+<li>Removed bash specific construct from ./configure script to make it work on Solaris [<a href="http://github.com/doxygen/doxygen/commit/3ebc431569aa6566389f3f3fc00aae7b8a90e58b">view</a>]</li>
+<li>Removed some comment statements. [<a href="http://github.com/doxygen/doxygen/commit/222753a906d42dab63708e074dd289e66dccf091">view</a>]</li>
+<li>Revert &quot;Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634763">634763</a> - Fortran: external subroutine as dummy argument not recognized&quot; [<a href="http://github.com/doxygen/doxygen/commit/8c8120bc3efa6ffa74f5e8cfce9cd6e4cae3de3a">view</a>]</li>
+<li>Reverted back to old string implementation. New one needs more work. [<a href="http://github.com/doxygen/doxygen/commit/7d933a9f99dacb83937534719103218470e2a5ab">view</a>]</li>
+<li>Show tag file name instead of &lt;unknown&gt; for warnings pointing to symbols extracted from tag files. [<a href="http://github.com/doxygen/doxygen/commit/b4b4c9decfacdf77d58490fa2dd81e1e10fe2dd0">view</a>]</li>
+<li>Show the parent-child type specialization relation in Java/C# generics inheritance diagrams [<a href="http://github.com/doxygen/doxygen/commit/7ee743004ac80914bdb66e3c7a8e5c39c0d5bf4a">view</a>]</li>
+<li>Support charset option for PlantUML [<a href="http://github.com/doxygen/doxygen/commit/ed0da5fe85e17eb0f7071fff12e851e92c2d79e6">view</a>]</li>
+<li>Support for INLINE_SOURCES in Fortran [<a href="http://github.com/doxygen/doxygen/commit/940a802a997609105e5be25f6ff576628a51fbda">view</a>]</li>
+<li>Support plantuml !include statement [<a href="http://github.com/doxygen/doxygen/commit/bbb6bb217a2feb7b9b961037072f06ff1024a0ef">view</a>]</li>
+<li>Support visible=no for main page tab. [<a href="http://github.com/doxygen/doxygen/commit/52df7ae7fb9ed9765b0faf922c69a1c57a5cfd69">view</a>]</li>
+<li>Supporting linking for methods bound to FORTRAN classes in source definitions [<a href="http://github.com/doxygen/doxygen/commit/f704342b42b19a857ec42438542221836576287a">view</a>]</li>
+<li>This is the patch attached to bz 651848 by Robin Gareus. [<a href="http://github.com/doxygen/doxygen/commit/f854e1d9f1a60a7e254dcc20a4e6db0aa9172b2c">view</a>]</li>
+<li>Update README.md [<a href="http://github.com/doxygen/doxygen/commit/b3c44e52cf7226b16ebd576ad381c3ee343dfd7e">view</a>]</li>
+<li>Updated configuration script and libdoxygen.pro.in to use llvm-config [<a href="http://github.com/doxygen/doxygen/commit/61e07f8ea2d0d2a2f001b1f657d3d5bbe44e7690">view</a>]</li>
+<li>Use result of vsnprintf [<a href="http://github.com/doxygen/doxygen/commit/84a6f4155659f97d42290494bd21d51f55eda258">view</a>]</li>
+<li>Use substitute() instead of QString conversion [<a href="http://github.com/doxygen/doxygen/commit/7a0f5e6d565db6192f8c22045d7988a0b4e4d8c3">view</a>]</li>
+<li>Various VHDL fixes [<a href="http://github.com/doxygen/doxygen/commit/475b0c51847271b04cb0e58254bd7e420445250b">view</a>]</li>
+<li>various fixes and restructuring [<a href="http://github.com/doxygen/doxygen/commit/223e7de6478019c8eebcfd87085fe22d3bfeec0e">view</a>]</li>
+<li>Various latex problems [<a href="http://github.com/doxygen/doxygen/commit/fb4dad1e1d9774e92d1509d1c2d3f8cb341826a1">view</a>]</li>
+</ul>
+\endhtmlonly
\subsection log_1_8_8 Release 1.8.8
\htmlonly
<b>(release date 21-08-2014)</b>
diff --git a/doc/commands.doc b/doc/commands.doc
index 1b3f2bd..12fe9a6 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -2451,13 +2451,25 @@ only copy the detailed documentation, not the brief description.
\ref cmdhtmlonly "\\htmlonly".
<hr>
-\section cmddot \\dot
+\section cmddot \\dot ["caption"] [<sizeindication>=<size>]
\addindex \\dot
Starts a text fragment which should contain a valid description of a
dot graph. The text fragment ends with \ref cmdenddot "\\enddot".
Doxygen will pass the text on to dot and include the resulting
image (and image map) into the output.
+
+ The first argument is optional and can be used to specify the caption
+ that is displayed below the image. This argument has to be specified
+ between quotes even if it does not contain any spaces. The quotes are
+ stripped before the caption is displayed.
+
+ The second argument is also optional and can be used to specify the
+ width or height of the image.
+ For a descriptionm of the possibilities see the paragraph
+ \ref image_sizeindicator "Size indication" with the
+ \ref cmdimage "\\image" command.
+
The nodes of a graph can be made clickable by using the URL attribute.
By using the command \ref cmdref "\\ref" inside the URL value you can conveniently
link to an item inside doxygen. Here is an example:
@@ -2485,12 +2497,24 @@ class C {};
\endcode
<hr>
-\section cmdmsc \\msc
+\section cmdmsc \\msc ["caption"] [<sizeindication>=<size>]
\addindex \\msc
Starts a text fragment which should contain a valid description of a
message sequence chart. See http://www.mcternan.me.uk/mscgen/ for examples.
The text fragment ends with \ref cmdendmsc "\\endmsc".
+
+ The first argument is optional and can be used to specify the caption
+ that is displayed below the image. This argument has to be specified
+ between quotes even if it does not contain any spaces. The quotes are
+ stripped before the caption is displayed.
+
+ The second argument is also optional and can be used to specify the
+ width or height of the image.
+ For a descriptionm of the possibilities see the paragraph
+ \ref image_sizeindicator "Size indication" with the
+ \ref cmdimage "\\image" command.
+
\note The text fragment should only include the part of the message
sequence chart that is
within the <code>msc {...}</code> block.
@@ -2534,7 +2558,7 @@ class Receiver
\sa section \ref cmdmscfile "\\mscfile".
<hr>
-\section cmdstartuml \\startuml
+\section cmdstartuml \\startuml [{file}] ["caption"] [<sizeindication>=<size>]
\addindex \\startuml
Starts a text fragment which should contain a valid description of a
@@ -2544,6 +2568,28 @@ class Receiver
if you want to use this command. The location of the jar file should be specified
using \ref cfg_plantuml_jar_path "PLANTUML_JAR_PATH".
+ The first argument is optional and is for compatibility with running PlantUML as a preprocessing
+ step before running doxygen, you can also add the name of the image file after \c \\startuml
+ and inside curly brackets, i.e.
+ \verbatim
+ @startuml{myimage.png} "Image Caption" width=5cm
+ Alice -> Bob : Hello
+ @enduml
+ \endverbatim
+ When the name of the image is specified, doxygen will generate an image with that name.
+ Without the name doxygen will choose a name automatically.
+
+ The second argument is optional and can be used to specify the caption
+ that is displayed below the image. This argument has to be specified
+ between quotes even if it does not contain any spaces. The quotes are
+ stripped before the caption is displayed.
+
+ The third argument is also optional and can be used to specify the
+ width or height of the image.
+ For a descriptionm of the possibilities see the paragraph
+ \ref image_sizeindicator "Size indication" with the
+ \ref cmdimage "\\image" command.
+
Here is an example of the use of the \c \\startuml command.
\code
/** Sender class. Can be used to send a command to the server.
@@ -2575,19 +2621,8 @@ class Receiver
};
\endcode
-\note For compatibility with running PlantUML as a preprocessing step before
-running doxygen, you can also add the name of the image file after \c \\startuml
-and inside curly brackets, i.e.
-\verbatim
-@startuml{myimage.png}
-Alice -> Bob : Hello
-@enduml
-\endverbatim
-When the name of the image is specified, doxygen will generate an image with that name.
-Without the name doxygen will choose a name automatically.
-
<hr>
-\section cmddotfile \\dotfile <file> ["caption"]
+\section cmddotfile \\dotfile <file> ["caption"] [<sizeindication>=<size>]
\addindex \\dotfile
Inserts an image generated by dot from \<file\> into the documentation.
@@ -2604,8 +2639,16 @@ Without the name doxygen will choose a name automatically.
between quotes even if it does not contain any spaces. The quotes are
stripped before the caption is displayed.
+ The third argument is also optional and can be used to specify the
+ width or height of the image.
+ For a descriptionm of the possibilities see the paragraph
+ \ref image_sizeindicator "Size indication" with the
+ \ref cmdimage "\\image" command.
+
+ \sa section \ref cmddot "\\dot".
+
<hr>
-\section cmdmscfile \\mscfile <file> ["caption"]
+\section cmdmscfile \\mscfile <file> ["caption"] [<sizeindication>=<size>]
\addindex \\mscfile
Inserts an image generated by mscgen from \<file\> into the documentation.
@@ -2623,10 +2666,16 @@ Without the name doxygen will choose a name automatically.
between quotes even if it does not contain any spaces. The quotes are
stripped before the caption is displayed.
+ The third argument is also optional and can be used to specify the
+ width or height of the image.
+ For a descriptionm of the possibilities see the paragraph
+ \ref image_sizeindicator "Size indication" with the
+ \ref cmdimage "\\image" command.
+
\sa section \ref cmdmsc "\\msc".
<hr>
-\section cmddiafile \\diafile <file> ["caption"]
+\section cmddiafile \\diafile <file> ["caption"] [<sizeindication>=<size>]
\addindex \\diafile
Inserts an image made in dia from \<file\> into the documentation.
@@ -2643,6 +2692,12 @@ Without the name doxygen will choose a name automatically.
between quotes even if it does not contain any spaces. The quotes are
stripped before the caption is displayed.
+ The third argument is also optional and can be used to specify the
+ width or height of the image.
+ For a descriptionm of the possibilities see the paragraph
+ \ref image_sizeindicator "Size indication" with the
+ \ref cmdimage "\\image" command.
+
<hr>
\section cmde \\e <word>
@@ -2842,15 +2897,16 @@ Without the name doxygen will choose a name automatically.
specific, so if you want to insert an image for more than one
format you'll have to repeat this command for each format.
- The first argument specifies the output format. Currently, the
- following values are supported: \c html, \c latex and \c rtf.
+ The first argument specifies the output format in which the image should
+ be embedded. Currently, the following values are supported:
+ \c html, \c latex, \c docbook and \c rtf.
The second argument specifies the file name of the image.
doxygen will look for files in the paths (or files) that you specified
after the \ref cfg_image_path "IMAGE_PATH" tag.
If the image is found it will be copied to the correct output directory.
- If the image name contains spaces you'll have to put quotes ("...") around it.
- You can also specify an absolute URL instead of a file name, but then
+ If the image name contains spaces you'll have to put quotes ("...") around
+ the name. You can also specify an absolute URL instead of a file name, but then
doxygen does not copy the image nor check its existence.
The third argument is optional and can be used to specify the caption
@@ -2859,12 +2915,12 @@ Without the name doxygen will choose a name automatically.
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 is only useful
- for \LaTeX output
- (i.e. format=<code>latex</code>). The \c sizeindication can be
- either \c width or \c height. The size should be a valid
- size specifier in \LaTeX (for example <code>10cm</code> or
- <code>6in</code> or a symbolic width like <code>\\textwidth</code>).
+ width or height of the image. This can be useful for \LaTeX or docbook output
+ (i.e. format=<code>latex</code> or format=<code>docbook</code>).
+ \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`).
Here is example of a comment block:
diff --git a/jquery/Makefile b/jquery/Makefile
index 2290ef9..996f472 100644
--- a/jquery/Makefile
+++ b/jquery/Makefile
@@ -3,6 +3,7 @@ JQUERY_UI_VERSION = 1.8.18
HASHCHANGE_VERSION = 1.3
SCROLL_VERSION = 1.4.2
POWERTIP_VERSION = 1.2.0
+
MINIFIER ?= /usr/local/bin/yuicompressor-2.4.7
SCRIPTS = jquery-$(JQUERY_VERSION).js \
jquery.ui-$(JQUERY_UI_VERSION).core.js \
@@ -12,31 +13,17 @@ SCRIPTS = jquery-$(JQUERY_VERSION).js \
jquery.ba-$(HASHCHANGE_VERSION)-hashchange.js \
jquery.scrollTo-$(SCROLL_VERSION).js \
jquery.powertip-$(POWERTIP_VERSION).js
-RESULTS = jquery_p1.js jquery_p2.js jquery_p3.js \
- jquery_ui.js jquery_fx.js jquery_pt.js
+RESULTS = jquery.js
SCRIPTS_MIN = $(SCRIPTS:%.js=%-min.js)
all: $(RESULTS)
install: $(RESULTS)
- cp $(RESULTS) ../src/
-
-jquery_ui.js: scripts
- cat jquery.ui-$(JQUERY_UI_VERSION).core-min.js \
- jquery.ui-$(JQUERY_UI_VERSION).widget-min.js \
- jquery.ui-$(JQUERY_UI_VERSION).mouse-min.js \
- jquery.ui-$(JQUERY_UI_VERSION).resizable-min.js \
- jquery.ba-$(HASHCHANGE_VERSION)-hashchange-min.js > jquery_ui.js
-
-jquery_pt.js: scripts
- cat jquery.powertip-$(POWERTIP_VERSION)-min.js > jquery_pt.js
-
-jquery_fx.js: scripts
- cat jquery.scrollTo-$(SCROLL_VERSION)-min.js > jquery_fx.js
+ cp $(RESULTS) ../templates/html/
-jquery_p1.js jquery_p2.js jquery_p3.js: scripts
- perl split_jquery.pl jquery-$(JQUERY_VERSION)-min.js $@
+jquery.js: scripts
+ cat $(SCRIPTS_MIN) > jquery.js
scripts: $(SCRIPTS_MIN)
@@ -44,5 +31,5 @@ clean:
rm -f $(SCRIPTS_MIN) $(RESULTS)
%-min.js: %.js
- java -jar $(MINIFIER).jar --line-break 13000 $^ > $@
+ java -jar $(MINIFIER).jar $^ > $@
diff --git a/jquery/README b/jquery/README
index 7fd4dcd..5e385a5 100644
--- a/jquery/README
+++ b/jquery/README
@@ -11,7 +11,4 @@ packages:
- jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo
- jquery.powertip: 1.2.0: http://stevenbenner.github.io/jquery-powertip/
-The Makefile will built the jquery_*.js files used by doxygen.
-Some files are split into smaller parts to make sure Visual Studio can compile them
-as strings.
-
+The Makefile will built the jquery.js files used by doxygen.
diff --git a/jquery/split_jquery.pl b/jquery/split_jquery.pl
deleted file mode 100644
index 3edc763..0000000
--- a/jquery/split_jquery.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# script to split file into parts of roughly 32kb
-#!/bin/perl
-my $file = shift;
-my $target = shift;
-my $count = 1;
-my $len = 0;
-$target=~/p(\d+).js/;
-my $part = $1;
-open(F,"<$file") || die ("cannot open file for reading: $!");
-open(G,">$target") || die("cannot open file for writing: $!");
-while (<F>)
-{
- if ($part==$count)
- {
- print G "$_";
- }
- $len+=length($_);
- if ($len>32768)
- {
- $len=0;
- $count++;
- }
-}
-close(F);
-close(G);
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index 9e9743c..644eee5 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -127,7 +127,7 @@ REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
-CLANG_ASSISTED_PARSING = YES
+CLANG_ASSISTED_PARSING = NO
CLANG_OPTIONS =
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
diff --git a/qtools/qcstring.cpp b/qtools/qcstring.cpp
index 4038d55..49bf842 100644
--- a/qtools/qcstring.cpp
+++ b/qtools/qcstring.cpp
@@ -3,8 +3,8 @@
* Copyright (C) 1997-2004 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.
*
@@ -24,281 +24,148 @@
#include <qregexp.h>
#include <qdatastream.h>
-
-QCString::QCString(int size)
-{
- if (size>0)
- {
- m_data = (char *)malloc(size);
- if (m_data)
- {
- if (size>1) memset(m_data,' ',size-1);
- m_data[size-1]='\0';
- }
- }
- else
- {
- m_data=0;
- }
-}
-
-QCString::QCString( const QCString &s )
-{
- duplicate(s);
-}
-
-QCString::QCString( const char *str )
-{
- duplicate(str);
-}
-
-QCString::QCString( const char *str, uint maxlen )
-{
- uint l;
- if (str && ( l = QMIN(qstrlen(str),maxlen) ))
- {
- m_data=(char *)malloc(l+1);
- strncpy(m_data,str,l+1);
- m_data[l]='\0';
- }
- else
- {
- m_data=0;
- }
-}
-
-QCString::~QCString()
-{
- if (m_data) free(m_data);
- m_data=0;
-}
-
-QCString &QCString::assign( const char *str )
+QCString &QCString::sprintf( const char *format, ... )
{
- if (m_data) free(m_data);
- duplicate(str);
+ va_list ap;
+ va_start( ap, format );
+ const int minlen=256;
+ int l = length();
+ if (l<minlen) { resize(minlen); l=minlen; }
+ int n=vsnprintf( data(), l, format, ap);
+ if (n<0) n=l;
+ resize(n+1);
+ va_end( ap );
return *this;
}
-bool QCString::resize( uint newlen )
+int QCString::find( char c, int index, bool cs ) const
{
- if (newlen==0)
- {
- if (m_data) { free(m_data); m_data=0; }
- return TRUE;
- }
- if (m_data==0) // newlen>0
+ if (index<0 || index>=(int)length()) return -1; // index outside string
+ register const char *pos;
+ if (cs)
{
- m_data = (char *)malloc(newlen);
+ pos = strchr(data()+index,c);
}
else
{
- m_data = (char *)realloc(m_data,newlen);
+ pos = data()+index;
+ c = tolower((unsigned char)c);
+ while (*pos && tolower((unsigned char)*pos)!=c) pos++;
+ if (!*pos && c) pos=0; // not found
}
- if (m_data==0) return FALSE;
- m_data[newlen-1]='\0';
- return TRUE;
+ return pos ? (int)(pos - data()) : -1;
}
-bool QCString::fill( char c, int len )
+int QCString::find( const char *str, int index, bool cs ) const
{
- uint l=length();
- if (len<0) len=l;
- if ((uint)len!=l)
+ int l = length();
+ if (index<0 || index>=l) return -1; // index outside string
+ if (!str) return -1; // no string to search for
+ if (!*str) return index; // empty string matching at index
+ register char *pos;
+ if (cs) // case sensitive
{
- if (m_data) free(m_data);
- if (len>0)
- {
- m_data=(char *)malloc(len+1);
- if (m_data==0) return FALSE;
- m_data[len]='\0';
- }
- else
- {
- m_data=0;
- }
+ pos = strstr(data()+index,str);
}
- if (len>0)
+ else // case insensitive
{
- uint i;
- for (i=0;i<(uint)len;i++) m_data[i]=c;
- }
- return TRUE;
-}
-
-QCString &QCString::sprintf( const char *format, ... )
-{
- va_list ap;
- va_start( ap, format );
- uint l = length();
- const uint minlen=256;
- if (l<minlen)
- {
- if (m_data)
- m_data = (char *)realloc(m_data,minlen);
- else
- m_data = (char *)malloc(minlen);
- }
- vsprintf( m_data, format, ap );
- resize( qstrlen(m_data) + 1 ); // truncate
- va_end( ap );
- return *this;
-}
-
-
-int QCString::find( char c, int index, bool cs ) const
-{
- uint len = length();
- if ( m_data==0 || (uint)index>len ) // index outside string
- return -1;
- register const char *d;
- if ( cs ) // case sensitive
- {
- d = strchr( m_data+index, c );
- }
- else
- {
- d = m_data+index;
- c = tolower( (uchar) c );
- while ( *d && tolower((uchar) *d) != c )
- d++;
- if ( !*d && c ) // not found
- d = 0;
- }
- return d ? (int)(d - m_data) : -1;
-}
-
-int QCString::find( const char *str, int index, bool cs ) const
-{
- uint l = length();
- if ( m_data==0 || (uint)index > l ) // index outside string
- return -1;
- if ( !str ) // no search string
- return -1;
- if ( !*str ) // zero-length search string
- return index;
- register const char *d;
- if ( cs ) // case sensitive
- {
- d = strstr( m_data+index, str );
- }
- else // case insensitive
- {
- d = m_data+index;
- int len = qstrlen( str );
- while ( *d )
+ pos = data();
+ int len = qstrlen(str);
+ while (*pos)
{
- if ( qstrnicmp(d, str, len) == 0 )
- break;
- d++;
+ if (qstrnicmp(pos,str,len)==0) break;
+ pos++;
}
- if ( !*d ) // not found
- d = 0;
+ if (!*pos) pos = 0; // not found
}
- return d ? (int)(d - m_data) : -1;
+ return pos ? (int)(pos - data()) : -1;
}
-int QCString::find( const QCString &str,int index,bool cs) const
+int QCString::find( const QCString &str, int index, bool cs ) const
{
return find(str.data(),index,cs);
}
int QCString::find( const QRegExp &rx, int index ) const
{
- QString d = QString::fromLatin1( m_data );
+ QString d = QString::fromLatin1( data() );
return d.find( rx, index );
}
int QCString::findRev( char c, int index, bool cs) const
{
- const char *b = m_data;
- const char *d;
- uint len = length();
- if ( b == 0 ) return -1; // empty string
- if ( index < 0 ) // neg index ==> start from end
+ const char *b = data();
+ const char *pos;
+ int len = length();
+ if (len==0) return -1; // empty string
+ if (index<0) // start from end
{
- if ( len == 0 ) return -1;
- if ( cs )
+ if (cs)
{
- d = strrchr( b, c );
- return d ? (int)(d - b) : -1;
+ pos = strrchr(b,c);
+ return pos ? (int)(pos - b) : -1;
}
- index = len;
- }
- else if ( (uint)index > len ) // bad index
- {
+ index=len;
+ }
+ else if (index>len) // bad index
+ {
return -1;
}
- d = b+index;
- if ( cs ) // case sensitive
+ pos = b+index;
+ if (cs)
{
- while ( d >= b && *d != c )
- d--;
- }
- else // case insensitive
+ while ( pos>=b && *pos!=c) pos--;
+ }
+ else
{
- c = tolower( (uchar) c );
- while ( d >= b && tolower((uchar) *d) != c )
- d--;
+ c = tolower((unsigned char)c);
+ while ( pos>=b && tolower((unsigned char)*pos)!=c) pos--;
}
- return d >= b ? (int)(d - b) : -1;
+ return pos>=b ? (int)(pos - b) : -1;
}
int QCString::findRev( const char *str, int index, bool cs) const
{
int slen = qstrlen(str);
- uint len = length();
- if ( index < 0 ) // neg index ==> start from end
- index = len-slen;
- else if ( (uint)index > len ) // bad index
- return -1;
- else if ( (uint)(index + slen) > len ) // str would be too long
- index = len - slen;
- if ( index < 0 )
- return -1;
-
- register char *d = m_data + index;
- if ( cs ) // case sensitive
- {
- for ( int i=index; i>=0; i-- )
- if ( qstrncmp(d--,str,slen)==0 )
- return i;
- }
- else // case insensitive
- {
- for ( int i=index; i>=0; i-- )
- if ( qstrnicmp(d--,str,slen)==0 )
- return i;
+ int len = length();
+ if (index<0) index = len-slen; // start from end
+ else if (index>len) return -1; // bad index
+ else if (index+slen>len) index=len-slen; // str would be too long
+ if (index<0) return -1; // no match possible
+ register char *pos = data()+index;
+ if (cs) // case sensitive
+ {
+ for (int i=index; i>=0; i--) if (qstrncmp(pos--,str,slen)==0) return i;
+ }
+ else // case insensitive
+ {
+ for (int i=index; i>=0; i--) if (qstrnicmp(pos,str,slen)==0) return i;
}
return -1;
-
}
int QCString::findRev( const QRegExp &rx, int index ) const
{
- QString d = QString::fromLatin1( m_data );
+ QString d = QString::fromLatin1( data() );
return d.findRev( rx, index );
}
int QCString::contains( char c, bool cs ) const
{
- int count = 0;
- char *d = m_data;
- if ( !d )
- return 0;
- if ( cs ) // case sensitive
- {
- while ( *d )
- if ( *d++ == c )
- count++;
- }
- else // case insensitive
- {
- c = tolower( (uchar) c );
- while ( *d ) {
- if ( tolower((uchar) *d) == c )
- count++;
- d++;
+ if (length()==0) return 0;
+ int count=0;
+ const char *pos = data();
+ if (cs)
+ {
+ while (*pos) if (*pos++ == c) count++;
+ }
+ else
+ {
+ c = tolower((unsigned char)c);
+ while (*pos)
+ {
+ if (tolower((unsigned char)*pos)==c) count++;
+ pos++;
}
}
return count;
@@ -306,96 +173,106 @@ int QCString::contains( char c, bool cs ) const
int QCString::contains( const char *str, bool cs ) const
{
- int count = 0;
- char *d = data();
- if ( !d )
- return 0;
- int len = qstrlen( str );
- while ( *d ) // counts overlapping strings
+ if (str==0 || length()==0) return 0;
+ int count=0;
+ const char *pos = data();
+ int len = qstrlen(str);
+ while (*pos)
{
- if ( cs )
+ if (cs)
{
- if ( qstrncmp( d, str, len ) == 0 )
- count++;
- }
- else
+ if (qstrncmp(pos,str,len)==0) count++;
+ }
+ else
{
- if ( qstrnicmp(d, str, len) == 0 )
- count++;
+ if (qstrnicmp(pos,str,len)==0) count++;
}
- d++;
+ pos++;
}
return count;
}
int QCString::contains( const QRegExp &rx ) const
-{
- QString d = QString::fromLatin1( m_data );
+{
+ QString d = QString::fromLatin1( data() );
return d.contains( rx );
}
+bool QCString::stripPrefix(const char *prefix)
+{
+ if (prefix==0 || length()==0) return FALSE;
+ int len = qstrlen(prefix);
+ if (qstrncmp(prefix,data(),len)==0)
+ {
+ int newlen = length()-len+1;
+ qmemmove(data(),data()+len,newlen);
+ resize(newlen);
+ return TRUE;
+ }
+ return FALSE;
+}
+
QCString QCString::left( uint len ) const
{
- if ( isEmpty() )
+ if (isEmpty())
{
return QCString();
- }
- else if ( len >= length() )
+ }
+ else if (len>=length())
{
- return *this;
- }
- else
+ return QCString(data());
+ }
+ else
{
QCString s( len+1 );
- strncpy( s.data(), m_data, len );
- *(s.data()+len) = '\0';
+ memcpy( s.data(), data(), len);
return s;
}
}
QCString QCString::right( uint len ) const
{
- if ( isEmpty() )
+ if (isEmpty())
{
return QCString();
- }
- else
+ }
+ else
{
- uint l = length();
- if ( len > l ) len = l;
- char *p = m_data + (l - len);
- return QCString( p );
- }
+ int l = length();
+ if ((int)len>l) len=l;
+ const char *pos = data() + (l-len);
+ return QCString(pos);
+ }
}
QCString QCString::mid( uint index, uint len) const
{
- uint slen = length();
- if ( len == 0xffffffff ) len = slen-index;
- if ( isEmpty() || index >= slen )
+ uint slen = (uint)length();
+ if (len==0xffffffff) len = slen-index;
+ if (isEmpty() || index>=slen || len==0)
{
return QCString();
- }
- else
+ }
+ else
{
register char *p = data()+index;
- QCString s( len+1 );
- strncpy( s.data(), p, len );
- *(s.data()+len) = '\0';
+ QCString s(len+1);
+ qstrncpy( s.data(), p, len+1 );
return s;
}
}
QCString QCString::lower() const
{
- QCString s( m_data );
- register char *p = s.data();
- if ( p )
+ if (length()==0) return QCString();
+ QCString s(data());
+ register char *pos = s.data();
+ if (pos)
{
- while ( *p )
+ while (*pos)
{
- *p = tolower((uchar) *p);
- p++;
+ *pos = tolower((unsigned char)*pos);
+ pos++;
}
}
return s;
@@ -403,41 +280,44 @@ QCString QCString::lower() const
QCString QCString::upper() const
{
- QCString s( m_data );
- register char *p = s.data();
- if ( p ) {
- while ( *p ) {
- *p = toupper((uchar)*p);
- p++;
+ if (length()==0) return QCString();
+ QCString s(data());
+ register char *pos = s.data();
+ if (pos)
+ {
+ while (*pos)
+ {
+ *pos = toupper((unsigned char)*pos);
+ pos++;
}
}
return s;
}
-QCString QCString::stripWhiteSpace() const
+QCString QCString::stripWhiteSpace() const
{
if ( isEmpty() ) // nothing to do
return *this;
- register char *s = m_data;
+ register char *s = data();
int reslen = length();
- if ( !isspace((uchar) s[0]) && !isspace((uchar) s[reslen-1]) )
- return *this; // returns a copy
+ if ( !isspace((uchar)s[0]) && !isspace((uchar)s[reslen-1]) )
+ return *this; // returns a copy
QCString result(s);
- s = result.data();
+ s = result.data();
int start = 0;
int end = reslen - 1;
while ( isspace((uchar) s[start]) ) // skip white space from start
- start++;
- if ( s[start] == '\0' )
+ start++;
+ if ( s[start] == '\0' )
{ // only white space
return QCString();
}
while ( end && isspace((uchar) s[end]) ) // skip white space from end
end--;
end -= start - 1;
- memmove( result.data(), &s[start], end );
+ qmemmove( result.data(), &s[start], end );
result.resize( end + 1 );
return result;
}
@@ -451,7 +331,7 @@ QCString QCString::simplifyWhiteSpace() const
char *from = data();
char *to = result.data();
char *first = to;
- while ( TRUE )
+ while ( TRUE )
{
while ( *from && isspace((uchar) *from) )
from++;
@@ -469,84 +349,66 @@ QCString QCString::simplifyWhiteSpace() const
return result;
}
+QCString &QCString::assign( const char *str )
+{
+ return operator=(str);
+}
+
QCString &QCString::insert( uint index, const char *s )
-{
+{
int len = s ? qstrlen(s) : 0;
- if ( len == 0 )
- return *this;
- uint olen = length();
- int nlen = olen + len;
- if ( index >= olen ) // insert after end of string
- {
- m_data = (char *)realloc(m_data,nlen+index-olen+1);
- if ( m_data )
- {
- memset( m_data+olen, ' ', index-olen );
- memcpy( m_data+index, s, len+1 );
- }
- }
- else if ( (m_data = (char *)realloc(m_data,nlen+1)) ) // normal insert
- {
- memmove( m_data+index+len, m_data+index, olen-index+1 );
- memcpy( m_data+index, s, len );
+ if ( len == 0 ) return *this;
+ int olen = length();
+ int nlen = olen + len;
+ if ((int)index>=olen)
+ {
+ resize(nlen+index-olen+1);
+ memset(data()+olen, ' ', index-olen);
+ memcpy(data()+index,s, len+1);
+ }
+ else
+ {
+ resize(nlen+1);
+ qmemmove(data()+index+len,data()+index,olen-index+1);
+ memcpy(data()+index,s,len);
}
return *this;
}
-QCString &QCString::insert( uint index, char c ) // insert char
+QCString &QCString::insert( uint index, char c)
{
char buf[2];
buf[0] = c;
buf[1] = '\0';
return insert( index, buf );
}
-
-QCString& QCString::operator+=( const char *str )
+QCString &QCString::append( const char *s )
{
- if ( !str ) return *this; // nothing to append
- uint len1 = length();
- uint len2 = qstrlen(str);
- char *newData = (char *)realloc( m_data, len1 + len2 + 1 );
- if (newData)
- {
- m_data = newData;
- memcpy( m_data + len1, str, len2 + 1 );
- }
- return *this;
+ return operator+=(s);
}
-
-QCString &QCString::operator+=( char c )
+QCString &QCString::prepend( const char *s )
{
- uint len = length();
- char *newData = (char *)realloc( m_data, length()+2 );
- if (newData)
- {
- m_data = newData;
- m_data[len] = c;
- m_data[len+1] = '\0';
- }
- return *this;
+ return insert(0,s);
}
-
QCString &QCString::remove( uint index, uint len )
{
uint olen = length();
if ( index + len >= olen ) // range problems
- {
+ {
if ( index < olen ) // index ok
- {
+ {
resize( index+1 );
}
- }
- else if ( len != 0 )
+ }
+ else if ( len != 0 )
{
- memmove( m_data+index, m_data+index+len, olen-index-len+1 );
+ qmemmove( data()+index, data()+index+len, olen-index-len+1 );
resize( olen-len+1 );
}
return *this;
}
-QCString &QCString::replace( uint index, uint len, const char *s )
+QCString &QCString::replace( uint index, uint len, const char *s)
{
remove( index, len );
insert( index, s );
@@ -555,65 +417,85 @@ QCString &QCString::replace( uint index, uint len, const char *s )
QCString &QCString::replace( const QRegExp &rx, const char *str )
{
- QString d = QString::fromLatin1( m_data );
+ QString d = QString::fromLatin1( data() );
QString r = QString::fromLatin1( str );
d.replace( rx, r );
operator=( d.ascii() );
return *this;
}
-long QCString::toLong( bool *ok ) const
+short QCString::toShort(bool *ok) const
+{
+ QString s(data());
+ return s.toShort(ok);
+}
+
+ushort QCString::toUShort(bool *ok) const
+{
+ QString s(data());
+ return s.toUShort(ok);
+}
+
+int QCString::toInt(bool *ok) const
+{
+ QString s(data());
+ return s.toInt(ok);
+}
+
+uint QCString::toUInt(bool *ok) const
+{
+ QString s(data());
+ return s.toUInt(ok);
+}
+
+long QCString::toLong(bool *ok) const
{
- QString s(m_data);
+ QString s(data());
return s.toLong(ok);
}
-ulong QCString::toULong( bool *ok ) const
+ulong QCString::toULong(bool *ok) const
{
- QString s(m_data);
+ QString s(data());
return s.toULong(ok);
}
-short QCString::toShort( bool *ok ) const
+QCString &QCString::setNum(short n)
{
- QString s(m_data);
- return s.toShort(ok);
+ return setNum((long)n);
}
-ushort QCString::toUShort( bool *ok ) const
+QCString &QCString::setNum(ushort n)
{
- QString s(m_data);
- return s.toUShort(ok);
+ return setNum((ulong)n);
}
-int QCString::toInt( bool *ok ) const
+QCString &QCString::setNum(int n)
{
- QString s(m_data);
- return s.toInt(ok);
+ return setNum((long)n);
}
-uint QCString::toUInt( bool *ok ) const
+QCString &QCString::setNum(uint n)
{
- QString s(m_data);
- return s.toUInt(ok);
+ return setNum((ulong)n);
}
-QCString &QCString::setNum( long n )
+QCString &QCString::setNum(long n)
{
char buf[20];
register char *p = &buf[19];
bool neg;
- if ( n < 0 )
+ if ( n < 0 )
{
neg = TRUE;
n = -n;
- }
- else
+ }
+ else
{
neg = FALSE;
}
*p = '\0';
- do
+ do
{
*--p = ((int)(n%10)) + '0';
n /= 10;
@@ -623,12 +505,12 @@ QCString &QCString::setNum( long n )
return *this;
}
-QCString &QCString::setNum( ulong n )
+QCString &QCString::setNum( ulong n)
{
char buf[20];
register char *p = &buf[19];
*p = '\0';
- do
+ do
{
*--p = ((int)(n%10)) + '0';
n /= 10;
@@ -637,31 +519,7 @@ QCString &QCString::setNum( ulong n )
return *this;
}
-void QCString::msg_index( uint index )
-{
-#if defined(CHECK_RANGE)
- qWarning( "QCString::at: Absolute index %d out of range", index );
-#else
- Q_UNUSED( index )
-#endif
-}
-
-bool QCString::stripPrefix(const char *prefix)
-{
- if (prefix==0) return FALSE;
- uint plen = qstrlen(prefix);
- if (m_data && qstrncmp(prefix,m_data,plen)==0) // prefix matches
- {
- uint len = qstrlen(m_data);
- uint newlen = len-plen+1;
- qmemmove(m_data,m_data+plen,newlen);
- resize(newlen);
- return TRUE;
- }
- return FALSE;
-}
-
-//---------------------------------------------------------------------------
+//-------------------------------------------------
void *qmemmove( void *dst, const void *src, uint len )
{
@@ -685,7 +543,7 @@ char *qstrdup( const char *str )
{
if ( !str )
return 0;
- char *dst = new char[strlen(str)+1];
+ char *dst = new char[qstrlen(str)+1];
CHECK_PTR( dst );
return strcpy( dst, str );
}
diff --git a/qtools/qcstring.h b/qtools/qcstring.h
index f7d2c95..bc3a091 100644
--- a/qtools/qcstring.h
+++ b/qtools/qcstring.h
@@ -1,38 +1,16 @@
/****************************************************************************
-**
**
-** Definition of the extended char array operations,
-** and QByteArray and QCString classes
+** Copyright (C) 1997-2004 by Dimitri van Heesch.
**
-** Created : 920609
+** Permission to use, copy, modify, and distribute this software and its
+** documentation under the terms of the GNU General Public License is hereby
+** granted. No representations are made about the suitability of this software
+** for any purpose. It is provided "as is" without express or implied warranty.
+** See the GNU General Public License for more details.
**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
+** Note: this is a reimplementation of the qcstring.h that came with
+** an Qt version 2.2.3. For short strings it stores the string data inside
+** the object. For long strings it uses a separate array with reference counting.
**
**********************************************************************/
@@ -43,6 +21,7 @@
#include "qarray.h"
#endif // QT_H
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -54,6 +33,7 @@
#include <strings.h>
#endif
+#include <assert.h>
class QGString;
@@ -77,7 +57,6 @@ inline char *hack_strrchr( const char *s, int c )
#define strrchr(s,c) hack_strrchr((s),(c))
#endif
-
/*****************************************************************************
Safe and portable C string functions; extensions to standard string.h
*****************************************************************************/
@@ -127,39 +106,6 @@ Q_EXPORT int qstricmp( const char *str1, const char *str2 );
Q_EXPORT int qstrnicmp( const char *str1, const char *str2, uint len );
-#if 0
-// ### TODO for 3.0: these and the cstr* functions should be used if
-// !defined(QT_CLEAN_NAMESPACE)
-// We want to keep source compatibility for 2.x
-// ### TODO for 4.0: completely remove these and the cstr* functions
-
-#if !defined(QT_GENUINE_STR)
-
-#undef strlen
-#define strlen qstrlen
-
-#undef strcpy
-#define strcpy qstrcpy
-
-#undef strcmp
-#define strcmp qstrcmp
-
-#undef strncmp
-#define strncmp qstrncmp
-
-#undef stricmp
-#define stricmp qstricmp
-
-#undef strnicmp
-#define strnicmp qstrnicmp
-
-#endif
-#endif
-
-// qChecksum: Internet checksum
-
-Q_EXPORT Q_UINT16 qChecksum( const char *s, uint len );
-
/*****************************************************************************
QByteArray class
*****************************************************************************/
@@ -169,7 +115,6 @@ template class Q_EXPORT QArray<char>;
#endif
typedef QArray<char> QByteArray;
-
/*****************************************************************************
QByteArray stream functions
*****************************************************************************/
@@ -181,142 +126,556 @@ Q_EXPORT QDataStream &operator>>( QDataStream &, QByteArray & );
class QRegExp;
/** This is an alternative implementation of QCString. It provides basically
- * the same functions but uses less memory for administration. This class
- * is just a wrapper around a plain C string requiring only 4 bytes "overhead".
- * QCString features sharing of data and stores the string length, but
- * requires 4 + 12 bytes for this (even for the empty string). As doxygen
- * uses a LOT of string during a run it saves a lot of memory to use a
- * more memory efficient implementation at the cost of relatively low
- * runtime overhead.
+ * the same functions but uses reference counting and copy on write.
*/
-class QCString
+class QCString
{
public:
- QCString() : m_data(0) {} // make null string
- QCString( const QCString &s );
- QCString( int size );
- QCString( const char *str );
- QCString( const char *str, uint maxlen );
- ~QCString();
-
- QCString &operator=( const QCString &s );// deep copy
- QCString &operator=( const char *str ); // deep copy
-
- bool isNull() const;
- bool isEmpty() const;
- uint length() const;
- uint size() const { return m_data ? length()+1 : 0; }
- char * data() const { return m_data; }
- bool resize( uint newlen );
- bool truncate( uint pos );
- bool fill( char c, int len = -1 );
-
- QCString copy() const;
-
- QCString &sprintf( const char *format, ... );
-
- int find( char c, int index=0, bool cs=TRUE ) const;
- int find( const char *str, int index=0, bool cs=TRUE ) const;
- int find( const QCString &str, int index=0, bool cs=TRUE ) const;
- int find( const QRegExp &, int index=0 ) const;
- int findRev( char c, int index=-1, bool cs=TRUE) const;
- int findRev( const char *str, int index=-1, bool cs=TRUE) const;
- int findRev( const QRegExp &, int index=-1 ) const;
- int contains( char c, bool cs=TRUE ) const;
- int contains( const char *str, bool cs=TRUE ) const;
- int contains( const QRegExp & ) const;
- bool stripPrefix(const char *prefix);
-
- QCString left( uint len ) const;
- QCString right( uint len ) const;
- QCString mid( uint index, uint len=0xffffffff) const;
-
- QCString lower() const;
- QCString upper() const;
-
- QCString stripWhiteSpace() const;
- QCString simplifyWhiteSpace() const;
-
- QCString &assign( const char *str );
- QCString &insert( uint index, const char * );
- QCString &insert( uint index, char );
- QCString &append( const char *s );
- QCString &prepend( const char *s );
- QCString &remove( uint index, uint len );
- QCString &replace( uint index, uint len, const char * );
- QCString &replace( const QRegExp &, const char * );
-
- short toShort( bool *ok=0 ) const;
- ushort toUShort( bool *ok=0 ) const;
- int toInt( bool *ok=0 ) const;
- uint toUInt( bool *ok=0 ) const;
- long toLong( bool *ok=0 ) const;
- ulong toULong( bool *ok=0 ) const;
-
- QCString &setNum( short );
- QCString &setNum( ushort );
- QCString &setNum( int );
- QCString &setNum( uint );
- QCString &setNum( long );
- QCString &setNum( ulong );
- QCString &setNum( float, char f='g', int prec=6 );
- QCString &setNum( double, char f='g', int prec=6 );
-
- operator const char *() const;
- QCString &operator+=( const char *str );
- QCString &operator+=( char c );
- char &at( uint index ) const;
- char &operator[]( int i ) const { return at(i); }
-
- private:
- static void msg_index( uint );
- void duplicate( const QCString &s );
- void duplicate( const char *str);
- QCString &duplicate( const char *str, int);
-
- char * m_data;
-};
-
-inline char &QCString::at( uint index ) const
-{
- return m_data[index];
-}
+ /** creates an empty string */
+ QCString() : m_rep()
+ {
+ }
+
+ /** destroys the string */
+ ~QCString()
+ {
+ }
+
+ /** makes a copy of a string. */
+ QCString( const QCString &s ) : m_rep(s.m_rep)
+ {
+ }
+
+ /** creates a string with room for size characters
+ * @param[in] size the number of character to allocate (including the 0-terminator)
+ */
+ QCString( int size ) : m_rep(size)
+ {
+ }
+
+ /** creates a string from a plain C string.
+ * @param[in] str A zero terminated C string. When 0 an empty string is created.
+ */
+ QCString( const char *str ) : m_rep(str)
+ {
+ }
+
+ /** creates a string from \a str and copies over the first \a maxlen characters. */
+ QCString( const char *str, uint maxlen ) : m_rep(str,maxlen)
+ {
+ }
+
+ /** replaces the contents by that of string \a s. */
+ QCString &operator=( const QCString &s )
+ {
+ m_rep = s.m_rep;
+ return *this;
+ }
+
+ /** replaces the contents by that of C string \a str. */
+ QCString &operator=( const char *str)
+ {
+ m_rep = str;
+ return *this;
+ }
+
+ /** Returns TRUE iff the string is empty. Equivalent to isEmpty(). */
+ bool isNull() const
+ {
+ return m_rep.isEmpty();
+ }
+
+ /** Returns TRUE iff the string is empty */
+ bool isEmpty() const
+ {
+ return m_rep.isEmpty();
+ }
+
+ /** Returns the length of the string, excluding the 0-terminator. Equivalent to size(). */
+ uint length() const
+ {
+ return m_rep.length();
+ }
+
+ /** Returns the length of the string, excluding the 0-terminator. */
+ uint size() const
+ {
+ return m_rep.length();
+ }
+
+ /** Returns a pointer to the contents of the string in the form of a 0-terminated C string */
+ char *data() const
+ {
+ return m_rep.data();
+ }
+
+ /** Resizes the string to hold \a newlen characters
+ * (this value should include the 0-terminator). If the string is enlarged the contents will
+ * be left unmodified.
+ */
+ bool resize( uint newlen )
+ {
+ m_rep.resize(newlen);
+ return TRUE;
+ }
+
+ /** Truncates the string at position \a pos. */
+ bool truncate( uint pos )
+ {
+ return resize(pos+1);
+ }
+
+ /** Fills a string with a predefined character
+ * @param[in] c the character used to fill the string with.
+ * @param[in] len the number of character to fill. Use -1 to fill the whole string.
+ * @note the string will be resized to contain \a len characters. The contents of the
+ * string will be lost.
+ */
+ bool fill( char c, int len = -1 )
+ {
+ m_rep.fill(c,len);
+ return TRUE;
+ }
+
+ /** Returns a deep copy of the string. */
+ QCString copy() const
+ {
+ if (length()==0) return QCString();
+ QCString cs(length()+1);
+ memcpy(cs.data(),data(),length());
+ return cs;
+ }
+
+ QCString &sprintf( const char *format, ... );
+ int find( char c, int index=0, bool cs=TRUE ) const;
+ int find( const char *str, int index=0, bool cs=TRUE ) const;
+ int find( const QCString &str, int index=0, bool cs=TRUE ) const;
+ int find( const QRegExp &rx, int index=0 ) const;
+ int findRev( char c, int index=-1, bool cs=TRUE) const;
+ int findRev( const char *str, int index=-1, bool cs=TRUE) const;
+ int findRev( const QRegExp &rx, int index=-1 ) const;
+ int contains( char c, bool cs=TRUE ) const;
+ int contains( const char *str, bool cs=TRUE ) const;
+ int contains( const QRegExp &rx ) const;
+ bool stripPrefix(const char *prefix);
+ QCString left( uint len ) const;
+ QCString right( uint len ) const;
+ QCString mid( uint index, uint len=0xffffffff) const;
+ QCString lower() const;
+ QCString upper() const;
+ QCString stripWhiteSpace() const;
+ QCString simplifyWhiteSpace() const;
+ QCString &assign( const char *str );
+ QCString &insert( uint index, const char *s );
+ QCString &insert( uint index, char c);
+ QCString &append( const char *s );
+ QCString &prepend( const char *s );
+ QCString &remove( uint index, uint len );
+ QCString &replace( uint index, uint len, const char *s);
+ QCString &replace( const QRegExp &rx, const char *str );
+ short toShort( bool *ok=0 ) const;
+ ushort toUShort( bool *ok=0 ) const;
+ int toInt( bool *ok=0 ) const;
+ uint toUInt( bool *ok=0 ) const;
+ long toLong( bool *ok=0 ) const;
+ ulong toULong( bool *ok=0 ) const;
+ QCString &setNum(short n);
+ QCString &setNum(ushort n);
+ QCString &setNum(int n);
+ QCString &setNum(uint n);
+ QCString &setNum(long n);
+ QCString &setNum(ulong n);
+
+ /** Converts the string to a plain C string */
+ operator const char *() const
+ {
+ return (const char *)data();
+ }
+
+ /** Appends string \a str to this string and returns a reference to the result. */
+ QCString &operator+=( const char *str )
+ {
+ if (!str) return *this;
+ int len1 = length();
+ int len2 = (int)strlen(str);
+ resize(len1+len2+1);
+ memcpy(data()+len1,str,len2);
+ return *this;
+ }
+
+ /** Appends character \a c to this string and returns a reference to the result. */
+ QCString &operator+=( char c )
+ {
+ int len = length();
+ resize(len+2);
+ data()[len]=c;
+ return *this;
+ }
+
+ /** Returns a reference to the character at index \a i. */
+ char &at( uint i) const
+ {
+ return m_rep.at(i);
+ }
+
+ /** Indexing operator. Equavalent to at(). */
+ char &operator[]( int i ) const
+ {
+ return m_rep.at((uint)i);
+ }
-inline void QCString::duplicate( const QCString &s )
-{
- if (!s.isEmpty())
- {
- uint l = (uint)strlen(s.data());
- m_data = (char *)malloc(l+1);
- if (m_data) memcpy(m_data,s.data(),l+1);
- }
- else
- {
- m_data=0;
- }
-}
+ private:
-inline void QCString::duplicate( const char *str)
-{
- if (str && str[0]!='\0')
- {
- uint l = (uint)strlen(str);
- m_data = (char *)malloc(l+1);
- if (m_data) memcpy(m_data,str,l+1);
- }
- else
- {
- m_data=0;
- }
-}
+ struct LSData;
+
+ // long string representation
+ struct LongStringRep
+ {
+ uchar isShort; // : 1; // should be shared with ShortStringRep
+ //uchar : 7;
+ LSData *d;
+ };
+
+#define SHORT_STR_CAPACITY ((int)sizeof(LongStringRep)-2)
+#define SHORT_STR_MAX_LEN (SHORT_STR_CAPACITY-1)
+
+ // short string representation
+ struct ShortStringRep
+ {
+ uchar isShort; // : 1; // should be shared with LongStringRep
+ uchar len; // : 7;
+ char str[SHORT_STR_CAPACITY]; // size including 0-terminator
+ };
+
+ // ref counting string header
+ struct LSHeader
+ {
+ int len; // length of string without 0 terminator
+ int refCount; // -1=leaked, 0=one ref & non-cost, n>0, n+1 refs, const
+ };
+ // ref counting string data and methods
+ struct LSData : public LSHeader
+ {
+ char *toStr()
+ {
+ return (char*)(this+1); // string data starts after the header
+ }
+
+ // creates a LSData item with room for size bytes (which includes the 0 terminator!)
+ // if size is zero, an empty string will be created.
+ static LSData *create(int size)
+ {
+ LSData *data;
+ data = (LSData*)malloc(sizeof(LSHeader)+size);
+ data->len = size-1;
+ data->refCount = 0;
+ data->toStr()[size-1] = 0;
+ return data;
+ }
+ // remove out reference to the data. Frees memory if no more users
+ void dispose()
+ {
+ if (--refCount<0) free(this);
+ }
+
+ // resizes LSData so it can hold size bytes (which includes the 0 terminator!)
+ // Since this is for long strings only, size should be > SHORT_STR_CAPACITY
+ static LSData *resize(LSData *d,int size)
+ {
+ if (d->len>0 && d->refCount==0) // non-const, non-empty
+ {
+ d = (LSData*)realloc(d,sizeof(LSHeader)+size);
+ d->len = size-1;
+ d->toStr()[size-1] = 0;
+ return d;
+ }
+ else // need to make a copy
+ {
+ LSData *newData = LSData::create(size);
+ int len = d->len;
+ if (len>=size) len=size-1;
+ memcpy(newData->toStr(),d->toStr(),len);
+ newData->toStr()[len]=0;
+ d->dispose();
+ return newData;
+ }
+ }
+ };
+
+ class StringRep
+ {
+ public:
+ StringRep()
+ {
+ initEmpty();
+ }
+ void initEmpty()
+ {
+ u.s.isShort=TRUE;
+ u.s.len=0;
+ //memset(u.s.str,0,SHORT_STR_CAPACITY);
+ }
+ ~StringRep()
+ {
+ if (!u.s.isShort)
+ {
+ u.l.d->dispose();
+ }
+ }
+ StringRep(const StringRep &s)
+ {
+ if (&s!=this)
+ {
+ u.s.isShort = s.u.s.isShort;
+ if (s.u.s.isShort)
+ {
+ u.s.len = s.u.s.len;
+ memcpy(u.s.str,s.u.s.str,s.u.s.len+1);
+ }
+ else
+ {
+ u.l.d = s.u.l.d;
+ u.l.d->refCount++;
+ }
+ }
+ else // self-assignment
+ {
+ u = s.u; // avoid uninitialized warning from gcc
+ }
+ }
+ StringRep(int size)
+ {
+ u.s.isShort = size<=SHORT_STR_CAPACITY;
+ if (size<=SHORT_STR_CAPACITY) // init short string
+ {
+ if (size>0)
+ {
+ u.s.len = size-1;
+ u.s.str[size-1]='\0';
+ }
+ else
+ {
+ u.s.len = 0;
+ }
+ }
+ else // int long string
+ {
+ u.l.d = LSData::create(size);
+ }
+ }
+ StringRep(const char *str)
+ {
+ if (str)
+ {
+ int len = (int)strlen(str);
+ u.s.isShort = len<SHORT_STR_CAPACITY;
+ if (len<SHORT_STR_CAPACITY)
+ {
+ u.s.len = len;
+ qstrncpy(u.s.str,str,SHORT_STR_CAPACITY);
+ }
+ else
+ {
+ u.l.d = LSData::create(len+1);
+ memcpy(u.l.d->toStr(),str,u.l.d->len);
+ }
+ }
+ else // create empty string
+ {
+ initEmpty();
+ }
+ }
+ StringRep( const char *str, uint maxlen )
+ {
+ if (str && maxlen>0)
+ {
+ uint len=(uint)strlen(str);
+ if (len>maxlen) len=maxlen;
+ u.s.isShort = len<=SHORT_STR_MAX_LEN;
+ if (u.s.isShort)
+ {
+ u.s.len = len;
+ memcpy(u.s.str,str,len);
+ u.s.str[len]='\0';
+ }
+ else
+ {
+ u.l.d = LSData::create(len+1);
+ memcpy(u.l.d->toStr(),str,len);
+ }
+ }
+ else // create empty string
+ {
+ initEmpty();
+ }
+ }
+ StringRep &operator=(const StringRep &s)
+ {
+ if (&s!=this)
+ {
+ if (!u.s.isShort)
+ {
+ u.l.d->dispose();
+ }
+ u.s.isShort = s.u.s.isShort;
+ if (u.s.isShort) // copy by value
+ {
+ u.s.len = s.u.s.len;
+ memcpy(u.s.str,s.u.s.str,s.u.s.len+1);
+ }
+ else // copy by reference
+ {
+ u.l.d = s.u.l.d;
+ u.l.d->refCount++;
+ }
+ }
+ else // self-assignment
+ {
+ u = s.u; // avoid uninitialized warning from gcc
+ }
+ return *this;
+ }
+ StringRep &operator=(const char *str)
+ {
+ if (!u.s.isShort)
+ {
+ u.l.d->dispose();
+ }
+ if (str)
+ {
+ int len = (int)strlen(str);
+ u.s.isShort = len<SHORT_STR_CAPACITY;
+ if (len<SHORT_STR_CAPACITY)
+ {
+ u.s.len = len;
+ qstrncpy(u.s.str,str,SHORT_STR_CAPACITY);
+ }
+ else
+ {
+ u.l.d = LSData::create(len+1);
+ memcpy(u.l.d->toStr(),str,len);
+ }
+ }
+ else
+ {
+ initEmpty();
+ }
+ return *this;
+ }
+ bool isEmpty() const
+ {
+ return u.s.isShort && u.s.len==0;
+ }
+ uint length() const
+ {
+ return u.s.isShort ? u.s.len : u.l.d->len;
+ }
+ char *data() const
+ {
+ if (u.s.isShort)
+ {
+ return u.s.len==0 ? 0 : (char*)u.s.str;
+ }
+ else
+ {
+ return u.l.d->len==0 ? 0 : u.l.d->toStr();
+ }
+ }
+ char &at(int i) const
+ {
+ if (u.s.isShort)
+ {
+ return (char&)u.s.str[i];
+ }
+ else
+ {
+ return u.l.d->toStr()[i];
+ }
+ }
+ bool resize( uint newlen )
+ {
+ if (u.s.isShort && newlen<=SHORT_STR_CAPACITY) // resize short string
+ {
+ if (newlen>0)
+ {
+ u.s.len = newlen-1;
+ u.s.str[newlen-1]='\0';
+ }
+ else // string becomes empty
+ {
+ initEmpty();
+ }
+ }
+ else if (u.s.isShort) // turn short string into long string
+ {
+ StringRep tmp = *this;
+ u.s.isShort=FALSE;
+ u.l.d = LSData::create(newlen);
+ if (tmp.u.s.len>0)
+ {
+ memcpy(u.l.d->toStr(),tmp.u.s.str,tmp.u.s.len+1);
+ }
+ else
+ {
+ u.l.d->toStr()[0]='\0';
+ }
+ }
+ else if (!u.s.isShort && newlen<=SHORT_STR_CAPACITY) // turn long string into short string
+ {
+ if (newlen>0)
+ {
+ StringRep tmp(newlen); // copy short part into tmp buffer
+ memcpy(tmp.u.s.str,u.l.d->toStr(),newlen-1);
+ tmp.u.s.str[newlen-1]='\0';
+ u.l.d->dispose();
+ u.s = tmp.u.s;
+ }
+ else
+ {
+ u.l.d->dispose();
+ initEmpty();
+ }
+ }
+ else // resize long string
+ {
+ u.l.d = u.l.d->resize(u.l.d,newlen);
+ }
+ return TRUE;
+ }
+ bool fill( char c, int len )
+ {
+ if (len<0) len=length();
+ if (len!=(int)length())
+ {
+ if (len>0)
+ {
+ resize(len+1);
+ }
+ else
+ {
+ if (!u.s.isShort)
+ {
+ u.l.d->dispose();
+ }
+ initEmpty();
+ }
+ }
+ if (len>0)
+ {
+ memset(data(),c,len);
+ }
+ return TRUE;
+ }
+ private:
+ union ShortOrLongStringSelector
+ {
+ ShortStringRep s;
+ LongStringRep l;
+ } u;
+ };
+ StringRep m_rep;
-inline QCString &QCString::duplicate( const char *str, int)
-{
- if (m_data==str) return *this;
- if (m_data) free(m_data);
- duplicate(str);
- return *this;
-}
+};
/*****************************************************************************
QCString stream functions
@@ -327,56 +686,6 @@ Q_EXPORT QDataStream &operator>>( QDataStream &, QCString & );
#endif
/*****************************************************************************
- QCString inline functions
- *****************************************************************************/
-
-inline QCString &QCString::operator=( const QCString &s )
-{ return (QCString&)assign( s ); }
-
-inline QCString &QCString::operator=( const char *str )
-{ return (QCString&)duplicate( str, qstrlen(str)+1 ); }
-
-inline bool QCString::isNull() const
-{ return data() == 0; }
-
-inline bool QCString::isEmpty() const
-{ return data() == 0 || *data() == '\0'; }
-
-inline uint QCString::length() const
-{ return qstrlen( data() ); }
-
-inline bool QCString::truncate( uint pos )
-{ return resize(pos+1); }
-
-inline QCString QCString::copy() const
-{ return QCString( data() ); }
-
-inline QCString &QCString::prepend( const char *s )
-{ return insert(0,s); }
-
-inline QCString &QCString::append( const char *s )
-{ return operator+=(s); }
-
-inline QCString &QCString::setNum( short n )
-{ return setNum((long)n); }
-
-inline QCString &QCString::setNum( ushort n )
-{ return setNum((ulong)n); }
-
-inline QCString &QCString::setNum( int n )
-{ return setNum((long)n); }
-
-inline QCString &QCString::setNum( uint n )
-{ return setNum((ulong)n); }
-
-inline QCString &QCString::setNum( float n, char f, int prec )
-{ return setNum((double)n,f,prec); }
-
-inline QCString::operator const char *() const
-{ return (const char *)data(); }
-
-
-/*****************************************************************************
QCString non-member operators
*****************************************************************************/
@@ -476,5 +785,4 @@ inline const char *qPrint(const QCString &s)
if (!s.isEmpty()) return s.data(); else return "";
}
-
#endif // QCSTRING_H
diff --git a/qtools/qfeatures.h b/qtools/qfeatures.h
index 84fa715..d6c2882 100644
--- a/qtools/qfeatures.h
+++ b/qtools/qfeatures.h
@@ -637,7 +637,7 @@
# define QT_NO_VBUTTONGROUP
#endif
/*!
- Horizonal box layout widgets
+ Horizontal box layout widgets
*/
#ifdef QT_NO_FRAME
# define QT_NO_HBOX
diff --git a/qtools/qfile_unix.cpp b/qtools/qfile_unix.cpp
index 0422fb4..dd41c4e 100644
--- a/qtools/qfile_unix.cpp
+++ b/qtools/qfile_unix.cpp
@@ -550,6 +550,7 @@ int QFile::writeBlock( const char *p, uint len )
return -1;
}
#endif
+ if (p==0) return 0;
int nwritten; // number of bytes written
if ( isRaw() ) // raw file
nwritten = (int)WRITE( fd, p, len );
diff --git a/qtools/qglobal.h b/qtools/qglobal.h
index 024b40c..aa11f01 100644
--- a/qtools/qglobal.h
+++ b/qtools/qglobal.h
@@ -98,7 +98,10 @@
# if !defined(MAC_OS_X_VERSION_10_9)
# define MAC_OS_X_VERSION_10_9 MAC_OS_X_VERSION_10_8 + 10
# endif
-# if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_9)
+# if !defined(MAC_OS_X_VERSION_10_10)
+# define MAC_OS_X_VERSION_10_10 MAC_OS_X_VERSION_10_9 + 10
+# endif
+# if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_10)
# warning "This version of Mac OS X is unsupported"
# endif
#elif defined(MSDOS) || defined(_MSDOS) || defined(__MSDOS__)
diff --git a/qtools/qtools.pro.in b/qtools/qtools.pro.in
index f287d34..ba8a086 100644
--- a/qtools/qtools.pro.in
+++ b/qtools/qtools.pro.in
@@ -7,7 +7,6 @@ HEADERS = qarray.h \
qcollection.h \
qconfig.h \
qcstring.h \
- scstring.h \
qdatastream.h \
qdatetime.h \
qdict.h \
@@ -54,7 +53,7 @@ HEADERS = qarray.h \
SOURCES = qbuffer.cpp \
qcollection.cpp \
- scstring.cpp \
+ qcstring.cpp \
qdatastream.cpp \
qdatetime.cpp \
qdir.cpp \
diff --git a/qtools/scstring.cpp b/qtools/scstring.cpp
deleted file mode 100644
index 26d3a52..0000000
--- a/qtools/scstring.cpp
+++ /dev/null
@@ -1,798 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2004 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-// with this switch you can choose between the original qcstring implementation,
-// which implicitly shares data so copying is faster, but requires at least 12 bytes, and
-// the new implementation in this file, which has a smaller footprint (only 4 bytes for
-// an empty string), but always copies strings.
-#define SMALLSTRING
-
-#include "qcstring.h"
-#ifndef SMALLSTRING
-#include "qcstring.cpp"
-#else
-#define SCString QCString
-
-#include <qstring.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <qregexp.h>
-#include <qdatastream.h>
-
-
-SCString::SCString(int size)
-{
- if (size>0)
- {
- m_data = (char *)malloc(size);
- if (m_data)
- {
- if (size>1) memset(m_data,' ',size-1);
- m_data[size-1]='\0';
- }
- }
- else
- {
- m_data=0;
- }
-}
-
-SCString::SCString( const SCString &s )
-{
- duplicate(s);
-}
-
-SCString::SCString( const char *str )
-{
- duplicate(str);
-}
-
-SCString::SCString( const char *str, uint maxlen )
-{
- uint l;
- if (str && ( l = QMIN(qstrlen(str),maxlen) ))
- {
- m_data=(char *)malloc(l+1);
- strncpy(m_data,str,l+1);
- m_data[l]='\0';
- }
- else
- {
- m_data=0;
- }
-}
-
-SCString::~SCString()
-{
- if (m_data) free(m_data);
- m_data=0;
-}
-
-SCString &SCString::assign( const char *str )
-{
- if (m_data==str) return *this;
- if (m_data) free(m_data);
- duplicate(str);
- return *this;
-}
-
-bool SCString::resize( uint newlen )
-{
- if (newlen==0)
- {
- if (m_data) { free(m_data); m_data=0; }
- return TRUE;
- }
- if (m_data==0) // newlen>0
- {
- m_data = (char *)malloc(newlen);
- }
- else
- {
- m_data = (char *)realloc(m_data,newlen);
- }
- if (m_data==0) return FALSE;
- m_data[newlen-1]='\0';
- return TRUE;
-}
-
-bool SCString::fill( char c, int len )
-{
- uint l=length();
- if (len<0) len=l;
- if ((uint)len!=l)
- {
- if (m_data) free(m_data);
- if (len>0)
- {
- m_data=(char *)malloc(len+1);
- if (m_data==0) return FALSE;
- m_data[len]='\0';
- }
- else
- {
- m_data=0;
- }
- }
- if (len>0)
- {
- uint i;
- for (i=0;i<(uint)len;i++) m_data[i]=c;
- }
- return TRUE;
-}
-
-SCString &SCString::sprintf( const char *format, ... )
-{
- va_list ap;
- va_start( ap, format );
- uint l = length();
- const uint minlen=4095;
- if (l<minlen)
- {
- if (m_data)
- m_data = (char *)realloc(m_data,minlen+1);
- else
- m_data = (char *)malloc(minlen+1);
- m_data[minlen]='\0';
- }
- vsnprintf( m_data, minlen, format, ap );
- resize( qstrlen(m_data) + 1 ); // truncate
- va_end( ap );
- return *this;
-}
-
-
-int SCString::find( char c, int index, bool cs ) const
-{
- uint len = length();
- if ( m_data==0 || (uint)index>len ) // index outside string
- return -1;
- register const char *d;
- if ( cs ) // case sensitive
- {
- d = strchr( m_data+index, c );
- }
- else
- {
- d = m_data+index;
- c = tolower( (uchar) c );
- while ( *d && tolower((uchar) *d) != c )
- d++;
- if ( !*d && c ) // not found
- d = 0;
- }
- return d ? (int)(d - m_data) : -1;
-}
-
-int SCString::find( const char *str, int index, bool cs ) const
-{
- uint l = length();
- if ( m_data==0 || (uint)index > l ) // index outside string
- return -1;
- if ( !str ) // no search string
- return -1;
- if ( !*str ) // zero-length search string
- return index;
- register const char *d;
- if ( cs ) // case sensitive
- {
- d = strstr( m_data+index, str );
- }
- else // case insensitive
- {
- d = m_data+index;
- int len = qstrlen( str );
- while ( *d )
- {
- if ( qstrnicmp(d, str, len) == 0 )
- break;
- d++;
- }
- if ( !*d ) // not found
- d = 0;
- }
- return d ? (int)(d - m_data) : -1;
-}
-
-int SCString::find( const QCString &str, int index, bool cs ) const
-{
- return find(str.data(),index,cs);
-}
-
-int SCString::find( const QRegExp &rx, int index ) const
-{
- QString d = QString::fromLatin1( m_data );
- return d.find( rx, index );
-}
-
-int SCString::findRev( char c, int index, bool cs) const
-{
- const char *b = m_data;
- const char *d;
- uint len = length();
- if ( b == 0 ) return -1; // empty string
- if ( index < 0 ) // neg index ==> start from end
- {
- if ( len == 0 ) return -1;
- if ( cs )
- {
- d = strrchr( b, c );
- return d ? (int)(d - b) : -1;
- }
- index = len;
- }
- else if ( (uint)index > len ) // bad index
- {
- return -1;
- }
- d = b+index;
- if ( cs ) // case sensitive
- {
- while ( d >= b && *d != c )
- d--;
- }
- else // case insensitive
- {
- c = tolower( (uchar) c );
- while ( d >= b && tolower((uchar) *d) != c )
- d--;
- }
- return d >= b ? (int)(d - b) : -1;
-}
-
-int SCString::findRev( const char *str, int index, bool cs) const
-{
- int slen = qstrlen(str);
- uint len = length();
- if ( index < 0 ) // neg index ==> start from end
- index = len-slen;
- else if ( (uint)index > len ) // bad index
- return -1;
- else if ( (uint)(index + slen) > len ) // str would be too long
- index = len - slen;
- if ( index < 0 )
- return -1;
-
- register char *d = m_data + index;
- if ( cs ) // case sensitive
- {
- for ( int i=index; i>=0; i-- )
- if ( qstrncmp(d--,str,slen)==0 )
- return i;
- }
- else // case insensitive
- {
- for ( int i=index; i>=0; i-- )
- if ( qstrnicmp(d--,str,slen)==0 )
- return i;
- }
- return -1;
-
-}
-
-int SCString::findRev( const QRegExp &rx, int index ) const
-{
- QString d = QString::fromLatin1( m_data );
- return d.findRev( rx, index );
-}
-
-int SCString::contains( char c, bool cs ) const
-{
- int count = 0;
- char *d = m_data;
- if ( !d )
- return 0;
- if ( cs ) // case sensitive
- {
- while ( *d )
- if ( *d++ == c )
- count++;
- }
- else // case insensitive
- {
- c = tolower( (uchar) c );
- while ( *d ) {
- if ( tolower((uchar) *d) == c )
- count++;
- d++;
- }
- }
- return count;
-}
-
-int SCString::contains( const char *str, bool cs ) const
-{
- int count = 0;
- char *d = data();
- if ( !d )
- return 0;
- int len = qstrlen( str );
- while ( *d ) // counts overlapping strings
- {
- if ( cs )
- {
- if ( qstrncmp( d, str, len ) == 0 )
- count++;
- }
- else
- {
- if ( qstrnicmp(d, str, len) == 0 )
- count++;
- }
- d++;
- }
- return count;
-}
-
-int SCString::contains( const QRegExp &rx ) const
-{
- QString d = QString::fromLatin1( m_data );
- return d.contains( rx );
-}
-
-SCString SCString::left( uint len ) const
-{
- if ( isEmpty() )
- {
- return SCString();
- }
- else if ( len >= length() )
- {
- return *this;
- }
- else
- {
- SCString s( len+1 );
- strncpy( s.data(), m_data, len );
- *(s.data()+len) = '\0';
- return s;
- }
-}
-
-SCString SCString::right( uint len ) const
-{
- if ( isEmpty() )
- {
- return SCString();
- }
- else
- {
- uint l = length();
- if ( len > l ) len = l;
- char *p = m_data + (l - len);
- return SCString( p );
- }
-}
-
-SCString SCString::mid( uint index, uint len) const
-{
- uint slen = length();
- if ( len == 0xffffffff ) len = slen-index;
- if ( isEmpty() || index >= slen )
- {
- return SCString();
- }
- else
- {
- register char *p = data()+index;
- SCString s( len+1 );
- strncpy( s.data(), p, len );
- *(s.data()+len) = '\0';
- return s;
- }
-}
-
-SCString SCString::lower() const
-{
- SCString s( m_data );
- register char *p = s.data();
- if ( p )
- {
- while ( *p )
- {
- *p = tolower((uchar) *p);
- p++;
- }
- }
- return s;
-}
-
-SCString SCString::upper() const
-{
- SCString s( m_data );
- register char *p = s.data();
- if ( p ) {
- while ( *p ) {
- *p = toupper((uchar)*p);
- p++;
- }
- }
- return s;
-}
-
-SCString SCString::stripWhiteSpace() const
-{
- if ( isEmpty() ) // nothing to do
- return *this;
-
- register char *s = m_data;
- int reslen = length();
- if ( !isspace((uchar) s[0]) && !isspace((uchar) s[reslen-1]) )
- return *this; // returns a copy
-
- SCString result(s);
- s = result.data();
- int start = 0;
- int end = reslen - 1;
- while ( isspace((uchar) s[start]) ) // skip white space from start
- start++;
- if ( s[start] == '\0' )
- { // only white space
- return SCString();
- }
- while ( end && isspace((uchar) s[end]) ) // skip white space from end
- end--;
- end -= start - 1;
- memmove( result.data(), &s[start], end );
- result.resize( end + 1 );
- return result;
-}
-
-SCString SCString::simplifyWhiteSpace() const
-{
- if ( isEmpty() ) // nothing to do
- return *this;
-
- SCString result( length()+1 );
- char *from = data();
- char *to = result.data();
- char *first = to;
- while ( TRUE )
- {
- while ( *from && isspace((uchar) *from) )
- from++;
- while ( *from && !isspace((uchar)*from) )
- *to++ = *from++;
- if ( *from )
- *to++ = 0x20; // ' '
- else
- break;
- }
- if ( to > first && *(to-1) == 0x20 )
- to--;
- *to = '\0';
- result.resize( (int)((long)to - (long)result.data()) + 1 );
- return result;
-}
-
-SCString &SCString::insert( uint index, const char *s )
-{
- int len = qstrlen(s);
- if ( len == 0 )
- return *this;
- uint olen = length();
- int nlen = olen + len;
- if ( index >= olen ) // insert after end of string
- {
- m_data = (char *)realloc(m_data,nlen+index-olen+1);
- if ( m_data )
- {
- memset( m_data+olen, ' ', index-olen );
- memcpy( m_data+index, s, len+1 );
- }
- }
- else if ( (m_data = (char *)realloc(m_data,nlen+1)) ) // normal insert
- {
- memmove( m_data+index+len, m_data+index, olen-index+1 );
- memcpy( m_data+index, s, len );
- }
- return *this;
-}
-
-SCString &SCString::insert( uint index, char c ) // insert char
-{
- char buf[2];
- buf[0] = c;
- buf[1] = '\0';
- return insert( index, buf );
-}
-
-SCString& SCString::operator+=( const char *str )
-{
- if ( !str ) return *this; // nothing to append
- uint len1 = length();
- uint len2 = qstrlen(str);
- char *newData = (char *)realloc( m_data, len1 + len2 + 1 );
- if (newData)
- {
- m_data = newData;
- memcpy( m_data + len1, str, len2 + 1 );
- }
- return *this;
-}
-
-SCString &SCString::operator+=( char c )
-{
- uint len = length();
- char *newData = (char *)realloc( m_data, length()+2 );
- if (newData)
- {
- m_data = newData;
- m_data[len] = c;
- m_data[len+1] = '\0';
- }
- return *this;
-}
-
-SCString &SCString::remove( uint index, uint len )
-{
- uint olen = length();
- if ( index + len >= olen ) // range problems
- {
- if ( index < olen ) // index ok
- {
- resize( index+1 );
- }
- }
- else if ( len != 0 )
- {
- memmove( m_data+index, m_data+index+len, olen-index-len+1 );
- resize( olen-len+1 );
- }
- return *this;
-}
-
-SCString &SCString::replace( uint index, uint len, const char *s )
-{
- remove( index, len );
- insert( index, s );
- return *this;
-}
-
-SCString &SCString::replace( const QRegExp &rx, const char *str )
-{
- QString d = QString::fromLatin1( m_data );
- QString r = QString::fromLatin1( str );
- d.replace( rx, r );
- return assign(d.ascii());
-}
-
-long SCString::toLong( bool *ok ) const
-{
- QString s(m_data);
- return s.toLong(ok);
-}
-
-ulong SCString::toULong( bool *ok ) const
-{
- QString s(m_data);
- return s.toULong(ok);
-}
-
-short SCString::toShort( bool *ok ) const
-{
- QString s(m_data);
- return s.toShort(ok);
-}
-
-ushort SCString::toUShort( bool *ok ) const
-{
- QString s(m_data);
- return s.toUShort(ok);
-}
-
-int SCString::toInt( bool *ok ) const
-{
- QString s(m_data);
- return s.toInt(ok);
-}
-
-uint SCString::toUInt( bool *ok ) const
-{
- QString s(m_data);
- return s.toUInt(ok);
-}
-
-SCString &SCString::setNum( long n )
-{
- char buf[20];
- register char *p = &buf[19];
- bool neg;
- if ( n < 0 )
- {
- neg = TRUE;
- n = -n;
- }
- else
- {
- neg = FALSE;
- }
- *p = '\0';
- do
- {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while ( n );
- if ( neg ) *--p = '-';
- operator=( p );
- return *this;
-}
-
-SCString &SCString::setNum( ulong n )
-{
- char buf[20];
- register char *p = &buf[19];
- *p = '\0';
- do
- {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while ( n );
- operator=( p );
- return *this;
-}
-
-void SCString::msg_index( uint index )
-{
-#if defined(CHECK_RANGE)
- qWarning( "SCString::at: Absolute index %d out of range", index );
-#else
- Q_UNUSED( index )
-#endif
-}
-
-bool SCString::stripPrefix(const char *prefix)
-{
- if (prefix==0) return FALSE;
- uint plen = qstrlen(prefix);
- if (m_data && qstrncmp(prefix,m_data,plen)==0) // prefix matches
- {
- uint len = qstrlen(m_data);
- uint newlen = len-plen+1;
- qmemmove(m_data,m_data+plen,newlen);
- resize(newlen);
- return TRUE;
- }
- return FALSE;
-}
-
-//---------------------------------------------------------------------------
-
-void *qmemmove( void *dst, const void *src, uint len )
-{
- register char *d;
- register char *s;
- if ( dst > src ) {
- d = (char *)dst + len - 1;
- s = (char *)src + len - 1;
- while ( len-- )
- *d-- = *s--;
- } else if ( dst < src ) {
- d = (char *)dst;
- s = (char *)src;
- while ( len-- )
- *d++ = *s++;
- }
- return dst;
-}
-
-char *qstrdup( const char *str )
-{
- if ( !str )
- return 0;
- char *dst = new char[strlen(str)+1];
- CHECK_PTR( dst );
- return strcpy( dst, str );
-}
-
-char *qstrncpy( char *dst, const char *src, uint len )
-{
- if ( !src )
- return 0;
- strncpy( dst, src, len );
- if ( len > 0 )
- dst[len-1] = '\0';
- return dst;
-}
-
-int qstricmp( const char *str1, const char *str2 )
-{
- register const uchar *s1 = (const uchar *)str1;
- register const uchar *s2 = (const uchar *)str2;
- int res;
- uchar c;
- if ( !s1 || !s2 )
- return s1 == s2 ? 0 : (int)((long)s2 - (long)s1);
- for ( ; !(res = (c=tolower(*s1)) - tolower(*s2)); s1++, s2++ )
- if ( !c ) // strings are equal
- break;
- return res;
-}
-
-int qstrnicmp( const char *str1, const char *str2, uint len )
-{
- register const uchar *s1 = (const uchar *)str1;
- register const uchar *s2 = (const uchar *)str2;
- int res;
- uchar c;
- if ( !s1 || !s2 )
- return (int)((long)s2 - (long)s1);
- for ( ; len--; s1++, s2++ ) {
- if ( (res = (c=tolower(*s1)) - tolower(*s2)) )
- return res;
- if ( !c ) // strings are equal
- break;
- }
- return 0;
-}
-
-#ifndef QT_NO_DATASTREAM
-
-QDataStream &operator<<( QDataStream &s, const QByteArray &a )
-{
- return s.writeBytes( a.data(), a.size() );
-}
-
-QDataStream &operator>>( QDataStream &s, QByteArray &a )
-{
- Q_UINT32 len;
- s >> len; // read size of array
- if ( len == 0 || s.eof() ) { // end of file reached
- a.resize( 0 );
- return s;
- }
- if ( !a.resize( (uint)len ) ) { // resize array
-#if defined(CHECK_NULL)
- qWarning( "QDataStream: Not enough memory to read QByteArray" );
-#endif
- len = 0;
- }
- if ( len > 0 ) // not null array
- s.readRawBytes( a.data(), (uint)len );
- return s;
-}
-
-QDataStream &operator<<( QDataStream &s, const SCString &str )
-{
- return s.writeBytes( str.data(), str.size() );
-}
-
-QDataStream &operator>>( QDataStream &s, SCString &str )
-{
- Q_UINT32 len;
- s >> len; // read size of string
- if ( len == 0 || s.eof() ) { // end of file reached
- str.resize( 0 );
- return s;
- }
- if ( !str.resize( (uint)len )) {// resize string
-#if defined(CHECK_NULL)
- qWarning( "QDataStream: Not enough memory to read QCString" );
-#endif
- len = 0;
- }
- if ( len > 0 ) // not null array
- s.readRawBytes( str.data(), (uint)len );
- return s;
-}
-
-#endif //QT_NO_DATASTREAM
-
-
-
-#endif
diff --git a/qtools/scstring.h b/qtools/scstring.h
deleted file mode 100644
index a9b462c..0000000
--- a/qtools/scstring.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2004 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef SCSTRING_H
-#define SCSTRING_H
-
-#include <stdlib.h>
-
-class QRegExp;
-
-/** This is an alternative implementation of QCString. It provides basically
- * the same functions but uses less memory for administration. This class
- * is just a wrapper around a plain C string requiring only 4 bytes "overhead".
- * QCString features sharing of data and stores the string length, but
- * requires 4 + 12 bytes for this (even for the empty string). As doxygen
- * uses a LOT of string during a run it saves a lot of memory to use a
- * more memory efficient implementation at the cost of relatively low
- * runtime overhead.
- */
-class SCString
-{
-public:
- SCString() : m_data(0) {} // make null string
- SCString( const SCString &s );
- SCString( int size );
- SCString( const char *str );
- SCString( const char *str, uint maxlen );
- ~SCString();
-
- SCString &operator=( const SCString &s );// deep copy
- SCString &operator=( const char *str ); // deep copy
-
- bool isNull() const;
- bool isEmpty() const;
- uint length() const;
- uint size() const { return m_data ? length()+1 : 0; }
- char * data() const { return m_data; }
- bool resize( uint newlen );
- bool truncate( uint pos );
- bool fill( char c, int len = -1 );
-
- SCString copy() const;
-
- SCString &sprintf( const char *format, ... );
-
- int find( char c, int index=0, bool cs=TRUE ) const;
- int find( const char *str, int index=0, bool cs=TRUE ) const;
- int find( const QRegExp &, int index=0 ) const;
- int find( const QCString &str, int index, bool cs ) const;
- int findRev( char c, int index=-1, bool cs=TRUE) const;
- int findRev( const char *str, int index=-1, bool cs=TRUE) const;
- int findRev( const QRegExp &, int index=-1 ) const;
- int contains( char c, bool cs=TRUE ) const;
- int contains( const char *str, bool cs=TRUE ) const;
- int contains( const QRegExp & ) const;
- bool stripPrefix(const char *prefix);
-
- SCString left( uint len ) const;
- SCString right( uint len ) const;
- SCString mid( uint index, uint len=0xffffffff) const;
-
- SCString lower() const;
- SCString upper() const;
-
- SCString stripWhiteSpace() const;
- SCString simplifyWhiteSpace() const;
-
- SCString &assign( const char *str );
- SCString &insert( uint index, const char * );
- SCString &insert( uint index, char );
- SCString &append( const char *s );
- SCString &prepend( const char *s );
- SCString &remove( uint index, uint len );
- SCString &replace( uint index, uint len, const char * );
- SCString &replace( const QRegExp &, const char * );
-
- short toShort( bool *ok=0 ) const;
- ushort toUShort( bool *ok=0 ) const;
- int toInt( bool *ok=0 ) const;
- uint toUInt( bool *ok=0 ) const;
- long toLong( bool *ok=0 ) const;
- ulong toULong( bool *ok=0 ) const;
-
- SCString &setNum( short );
- SCString &setNum( ushort );
- SCString &setNum( int );
- SCString &setNum( uint );
- SCString &setNum( long );
- SCString &setNum( ulong );
- QCString &setNum( float, char f='g', int prec=6 );
- QCString &setNum( double, char f='g', int prec=6 );
-
- operator const char *() const;
- SCString &operator+=( const char *str );
- SCString &operator+=( char c );
- char &at( uint index ) const;
- char &operator[]( int i ) const { return at(i); }
-
- private:
- static void msg_index( uint );
- void duplicate( const SCString &s );
- void duplicate( const char *str);
- SCString &duplicate( const char *str, int);
-
- char * m_data;
-};
-
-inline char &SCString::at( uint index ) const
-{
- return m_data[index];
-}
-
-inline void SCString::duplicate( const SCString &s )
-{
- if (!s.isEmpty())
- {
- uint l = strlen(s.data());
- m_data = (char *)malloc(l+1);
- if (m_data) memcpy(m_data,s.data(),l+1);
- }
- else
- m_data=0;
-}
-inline void SCString::duplicate( const char *str)
-{
- if (str && str[0]!='\0')
- {
- uint l = strlen(str);
- m_data = (char *)malloc(l+1);
- if (m_data) memcpy(m_data,str,l+1);
- }
- else
- m_data=0;
-}
-inline SCString &SCString::duplicate( const char *str, int)
-{
- if (m_data) free(m_data);
- duplicate(str);
- return *this;
-}
-
-#endif
-
diff --git a/src/cite.cpp b/src/cite.cpp
index fb96c7a..f0d7d66 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -21,20 +21,11 @@
#include "util.h"
#include "language.h"
#include "ftextstream.h"
+#include "resourcemgr.h"
#include <qdir.h>
//--------------------------------------------------------------------------
-static const char *doxygen_bst =
-#include "doxygen.bst.h"
-;
-
-static const char *bib2xhtml_pl =
-#include "bib2xhtml.pl.h"
-;
-
-//--------------------------------------------------------------------------
-
const QCString CiteConsts::fileName("citelist");
const QCString CiteConsts::anchorPrefix("CITEREF_");
const QCString bibTmpFile("bibTmpFile_");
@@ -153,26 +144,12 @@ void CiteDict::generatePage() const
f.close();
// 2. generate bib2xhtml
- QCString bib2xhtmlFile = outputDir+"/bib2xhtml.pl";
- f.setName(bib2xhtmlFile);
- QCString bib2xhtml = bib2xhtml_pl;
- if (!f.open(IO_WriteOnly))
- {
- err("could not open file %s for writing\n",bib2xhtmlFile.data());
- }
- f.writeBlock(bib2xhtml, bib2xhtml.length());
- f.close();
+ QCString bib2xhtmlFile = outputDir+"/bib2xhtml.pl";
+ ResourceMgr::instance().copyResource("bib2xhtml.pl",outputDir);
// 3. generate doxygen.bst
QCString doxygenBstFile = outputDir+"/doxygen.bst";
- QCString bstData = doxygen_bst;
- f.setName(doxygenBstFile);
- if (!f.open(IO_WriteOnly))
- {
- err("could not open file %s for writing\n",doxygenBstFile.data());
- }
- f.writeBlock(bstData, bstData.length());
- f.close();
+ ResourceMgr::instance().copyResource("doxygen.bst",outputDir);
// 4. for all formats we just copy the bib files to as special output directory
// so bibtex can find them without path (bibtex doesn't support paths or
@@ -211,8 +188,15 @@ void CiteDict::generatePage() const
// 5. run bib2xhtml perl script on the generated file which will insert the
// bibliography in citelist.doc
- portable_system("perl","\""+bib2xhtmlFile+"\" "+bibOutputFiles+" \""+
- citeListFile+"\"");
+ int exitCode;
+ portable_sysTimerStop();
+ if ((exitCode=portable_system("perl","\""+bib2xhtmlFile+"\" "+bibOutputFiles+" \""+
+ citeListFile+"\"")) != 0)
+ {
+ err("Problems running bibtex. Verify that the command 'perl --version' works from the command line. Exit code: %d\n",
+ exitCode);
+ }
+ portable_sysTimerStop();
QDir::setCurrent(oldDir);
diff --git a/src/classdef.cpp b/src/classdef.cpp
index d02dd5d..5c42f57 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -2673,7 +2673,7 @@ bool ClassDef::isLinkable() const
}
else
{
- return isLinkableInProject() || isReference();
+ return isReference() || isLinkableInProject();
}
}
@@ -3879,7 +3879,8 @@ void ClassDef::addListReferences()
: theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),
displayName(),
- 0
+ 0,
+ this
);
}
if (m_impl->memberGroupSDict)
@@ -4234,7 +4235,13 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
MemberList * ml = getMemberList(lt);
MemberList * ml2 = getMemberList((MemberListType)lt2);
if (getLanguage()==SrcLangExt_VHDL) // use specific declarations function
- {
+ {
+ static ClassDef *cdef;
+ if (cdef!=this)
+ { // only one inline link
+ VhdlDocGen::writeInlineClassLink(this,ol);
+ cdef=this;
+ }
if (ml)
{
VhdlDocGen::writeVhdlDeclarations(ml,ol,0,this,0,0);
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index b0ca85f..eeb7f78 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -140,6 +140,7 @@ CommandMap cmdMap[] =
{ "diafile", CMD_DIAFILE },
{ "--", CMD_NDASH },
{ "---", CMD_MDASH },
+ { "_setscope", CMD_SETSCOPE },
{ 0, 0 },
};
@@ -226,6 +227,16 @@ int Mapper::map(const char *n)
return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
}
+QString Mapper::find(const int n)
+{
+ QDictIterator<int> mapIterator(m_map);
+ for (int *curVal = mapIterator.toFirst();(curVal = mapIterator.current());++mapIterator)
+ {
+ if (*curVal == n || (*curVal == (n | SIMPLESECT_BIT))) return mapIterator.currentKey();
+ }
+ return NULL;
+}
+
Mapper::Mapper(const CommandMap *cm,bool caseSensitive) : m_map(89), m_cs(caseSensitive)
{
m_map.setAutoDelete(TRUE);
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index 75fd8ec..fd33b10 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -129,7 +129,8 @@ enum CommandType
CMD_NDASH = 99,
CMD_MDASH = 100,
CMD_STARTUML = 101,
- CMD_ENDUML = 102
+ CMD_ENDUML = 102,
+ CMD_SETSCOPE = 103
};
enum HtmlTagType
@@ -201,6 +202,7 @@ class Mapper
{
public:
int map(const char *n);
+ QString find(const int n);
Mapper(const CommandMap *cm,bool caseSensitive);
private:
QDict<int> m_map;
diff --git a/src/commentcnv.l b/src/commentcnv.l
index ec56b90..64e18be 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -450,7 +450,14 @@ void replaceComment(int offset);
copyToOutput(yytext,(int)yyleng);
g_lastCommentContext = YY_START;
g_javaBlock=0;
- g_blockName=&yytext[1];
+ if (qstrcmp(&yytext[1],"startuml")==0)
+ {
+ g_blockName="uml";
+ }
+ else
+ {
+ g_blockName=&yytext[1];
+ }
BEGIN(VerbatimCode);
}
<CComment,ReadLine>[\\@]("f$"|"f["|"f{"[a-z]*) {
@@ -554,7 +561,7 @@ void replaceComment(int offset);
copyToOutput(yytext,(int)yyleng);
}
<Verbatim>^[ \t]*"///" {
- if (g_blockName=="dot" || g_blockName=="msc" || g_blockName=="startuml" || g_blockName.at(0)=='f')
+ if (g_blockName=="dot" || g_blockName=="msc" || g_blockName=="uml" || g_blockName.at(0)=='f')
{
// see bug 487871, strip /// from dot images and formulas.
int l=0;
@@ -1004,7 +1011,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
warn(g_fileName,ctx->lineNr,"Conditional section%sdoes not have "
"a corresponding \\endcond command within this file.",sectionInfo.data());
}
- if (g_nestingCount>0 || (YY_START==CComment && g_lang!=SrcLangExt_Markdown))
+ if (g_nestingCount>0 && g_lang!=SrcLangExt_Markdown)
{
QCString tmp= "(probable line reference: ";
bool first = TRUE;
diff --git a/src/commentscan.l b/src/commentscan.l
index 3bfd563..702a616 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -1120,7 +1120,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>{B}*("\\\\"|"@@")"f"[$\[{] { // escaped formula command
addOutput(yytext);
}
-<Comment>{B}*{CMD}"~"[a-z_A-Z]* { // language switch command
+<Comment>{B}*{CMD}"~"[a-z_A-Z-]* { // language switch command
QCString langId = QString(yytext).stripWhiteSpace().data()+2;
if (!langId.isEmpty() &&
qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
@@ -2160,7 +2160,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
/* ----- handle language specific sections ------- */
-<SkipLang>[\\@]"~"[a-zA-Z]* { /* language switch */
+<SkipLang>[\\@]"~"[a-zA-Z-]* { /* language switch */
QCString langId = &yytext[2];
if (langId.isEmpty() ||
qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
diff --git a/src/condparser.h b/src/condparser.h
index 0310f36..7c65411 100644
--- a/src/condparser.h
+++ b/src/condparser.h
@@ -28,24 +28,25 @@ class CondParser
{
// public functions
public:
+ CondParser() : m_e(0), m_tokenType(NOTHING) {}
bool parse(const char *fileName,int lineNr,const char *expr);
// enumerations
private:
- enum TOKENTYPE
+ enum TOKENTYPE
{
- NOTHING = -1,
- DELIMITER,
- VARIABLE,
+ NOTHING = -1,
+ DELIMITER,
+ VARIABLE,
UNKNOWN
};
- enum OPERATOR_ID
+ enum OPERATOR_ID
{
- UNKNOWN_OP = -1,
- AND = 1,
- OR,
+ UNKNOWN_OP = -1,
+ AND = 1,
+ OR,
NOT
- };
+ };
// data
private:
diff --git a/src/config.h b/src/config.h
index 505e4d1..981f6fe 100644
--- a/src/config.h
+++ b/src/config.h
@@ -533,6 +533,7 @@ class Config
m_dict = new QDict<ConfigOption>(257);
m_options->setAutoDelete(TRUE);
m_obsolete->setAutoDelete(TRUE);
+ m_disabled->setAutoDelete(TRUE);
m_initialized = FALSE;
create();
}
diff --git a/src/config.xml b/src/config.xml
index 1e97b47..994190d 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -1797,13 +1797,13 @@ doxygen -w html new_header.html new_footer.html new_stylesheet.css YourConfigFil
since it does not replace the standard style sheet and is therefore more
robust against future updates. Doxygen will copy the style sheet files to
the output directory.
- \note The order of the extra stylesheet files is of importance (e.g. the last
- stylesheet in the list overrules the setting of the previous ones in the list).
+ \note The order of the extra style sheet files is of importance (e.g. the last
+ style sheet in the list overrules the setting of the previous ones in the list).
]]>
</docs>
<docs doxywizard='0' doxyfile='0'>
<![CDATA[
- Here is an example stylesheet that gives the contents area a fixed width:
+ Here is an example style sheet that gives the contents area a fixed width:
\verbatim
body {
background-color: #CCC;
@@ -1858,7 +1858,7 @@ hr.footer {
<docs>
<![CDATA[
The \c HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
- Doxygen will adjust the colors in the stylesheet and background images
+ Doxygen will adjust the colors in the style sheet and background images
according to this color. Hue is specified as an angle on a colorwheel,
see http://en.wikipedia.org/wiki/Hue for more information.
For instance the value 0 represents red, 60 is yellow, 120 is green,
@@ -2173,7 +2173,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
Windows users are probably better off using the HTML help feature.
- Via custom stylesheets (see \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET")
+ Via custom style sheets (see \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET")
one can further \ref doxygen_finetune "fine-tune" the look of the index.
As an example, the default style sheet generated by doxygen has an
example that shows how to put an image at the root of the tree instead of
@@ -2537,6 +2537,19 @@ EXTRA_PACKAGES=times
]]>
</docs>
</option>
+ <option type='list' id='LATEX_EXTRA_STYLESHEET' format='file' defval='' depends='GENERATE_LATEX'>
+ <docs>
+<![CDATA[
+ The \c LATEX_EXTRA_STYLESHEET tag can be used to specify additional
+ user-defined \f$\mbox{\LaTeX}\f$ style sheets that are included after the standard
+ style sheets created by doxygen. Using this option one can overrule
+ certain style aspects. Doxygen will copy the style sheet files to
+ the output directory.
+ \note The order of the extra style sheet files is of importance (e.g. the last
+ style sheet in the list overrules the setting of the previous ones in the list).
+]]>
+ </docs>
+ </option>
<option type='list' id='LATEX_EXTRA_FILES' format='file' depends='GENERATE_LATEX'>
<docs>
<![CDATA[
@@ -2673,6 +2686,16 @@ EXTRA_PACKAGES=times
]]>
</docs>
</option>
+ <option type='bool' id='RTF_SOURCE_CODE' defval='0' depends='GENERATE_RTF'>
+ <docs>
+<![CDATA[
+ If the \c RTF_SOURCE_CODE tag is set to \c YES then doxygen will include
+ source code with syntax highlighting in the RTF output.
+ <br>Note that which sources are shown also depends on other settings
+ such as \ref cfg_source_browser "SOURCE_BROWSER".
+]]>
+ </docs>
+ </option>
</group>
<group name='Man' docs='Configuration options related to the man page output'>
<option type='bool' id='GENERATE_MAN' defval='0'>
@@ -3304,7 +3327,7 @@ to be found in the default search path.
]]>
</docs>
</option>
- <option type='string' id='PLANTUML_JAR_PATH' format='dir' defval='' depends='HAVE_DOT'>
+ <option type='string' id='PLANTUML_JAR_PATH' format='dir' defval=''>
<docs>
<![CDATA[
When using plantuml, the \c PLANTUML_JAR_PATH tag should be used to specify the path where
@@ -3314,7 +3337,7 @@ to be found in the default search path.
]]>
</docs>
</option>
- <option type='list' id='PLANTUML_INCLUDE_PATH' format='dir' defval='' depends='HAVE_DOT'>
+ <option type='list' id='PLANTUML_INCLUDE_PATH' format='dir' defval=''>
<docs>
<![CDATA[
When using plantuml, the specified paths are searched for files specified by the \c !include
diff --git a/src/context.cpp b/src/context.cpp
index b35fffa..551db1a 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -13,6 +13,7 @@
*
*/
+#include <assert.h>
#include <qdir.h>
#include "context.h"
@@ -665,6 +666,18 @@ class TranslateContext::Private : public PropertyMapper
static bool extractAll = Config_getBool("EXTRACT_ALL");
return theTranslator->trNamespaceMemberDescription(extractAll);
}
+ TemplateVariant classHierarchyDescription() const
+ {
+ return theTranslator->trClassHierarchyDescription();
+ }
+ TemplateVariant gotoGraphicalHierarchy() const
+ {
+ return theTranslator->trGotoGraphicalHierarchy();
+ }
+ TemplateVariant gotoTextualHierarchy() const
+ {
+ return theTranslator->trGotoTextualHierarchy();
+ }
TemplateVariant classMembersDescription() const
{
static bool extractAll = Config_getBool("EXTRACT_ALL");
@@ -1011,6 +1024,12 @@ class TranslateContext::Private : public PropertyMapper
addProperty("macros", this,&Private::macros);
//%% string namespaceMembersDescription
addProperty("namespaceMembersDescription",this,&Private::namespaceMembersDescription);
+ //%% string classHierarchyDescription
+ addProperty("classHierarchyDescription",this,&Private::classHierarchyDescription);
+ //%% string gotoGraphicalHierarchy
+ addProperty("gotoGraphicalHierarchy",this,&Private::gotoGraphicalHierarchy);
+ //%% string gotoTextualHierarchy
+ addProperty("gotoTextualHierarchy",this,&Private::gotoTextualHierarchy);
m_javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
m_fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
@@ -1108,6 +1127,7 @@ class DefinitionContext : public PropertyMapper
public:
DefinitionContext(Definition *d) : m_def(d)
{
+ assert(d!=0);
//%% string name: the name of the symbol
addProperty("name",this,&DefinitionContext::name);
//%% string bareName: the bare name of the symbol with scope info
@@ -2944,7 +2964,7 @@ class PageContext::Private : public DefinitionContext<PageContext::Private>
}
TemplateVariant relPath() const
{
- if (m_pageDef==Doxygen::mainPage)
+ if (m_isMainPage)
{
return "";
}
@@ -2955,7 +2975,7 @@ class PageContext::Private : public DefinitionContext<PageContext::Private>
}
TemplateVariant highlight() const
{
- if (m_pageDef==Doxygen::mainPage)
+ if (m_isMainPage)
{
return "main";
}
@@ -4820,194 +4840,74 @@ TemplateVariant ClassIndexContext::get(const char *n) const
//------------------------------------------------------------------------
-//%% struct ClassInheritanceNode: node in inheritance tree
-//%% {
-class ClassInheritanceNodeContext::Private : public PropertyMapper
+static int computeMaxDepth(const TemplateListIntf *list)
{
- public:
- Private(ClassDef *cd) : m_classDef(cd)
+ int maxDepth=0;
+ if (list)
+ {
+ TemplateListIntf::ConstIterator *it = list->createIterator();
+ TemplateVariant v;
+ for (it->toFirst();it->current(v);it->toNext())
{
- //%% bool is_leaf_node: true if this node does not have any children
- addProperty("is_leaf_node",this,&Private::isLeafNode);
- //%% ClassInheritance children: list of nested classes/namespaces
- addProperty("children",this,&Private::children);
- //%% Class class: class info
- addProperty("class",this,&Private::getClass);
+ const TemplateStructIntf *s = v.toStruct();
+ TemplateVariant child = s->get("children");
+ int d = computeMaxDepth(child.toList())+1;
+ if (d>maxDepth) maxDepth=d;
}
- void addChildren(const BaseClassList *bcl,bool hideSuper)
- {
- if (bcl==0) return;
- BaseClassListIterator bcli(*bcl);
- BaseClassDef *bcd;
- for (bcli.toFirst() ; (bcd=bcli.current()) ; ++bcli)
- {
- ClassDef *cd=bcd->classDef;
- if (cd->getLanguage()==SrcLangExt_VHDL && (VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
- {
- continue;
- }
-
- bool b;
- if (cd->getLanguage()==SrcLangExt_VHDL)
- {
- b=hasVisibleRoot(cd->subClasses());
- }
- else
- {
- b=hasVisibleRoot(cd->baseClasses());
- }
+ delete it;
+ }
+ return maxDepth;
+}
- if (cd->isVisibleInHierarchy() && b) // hasVisibleRoot(cd->baseClasses()))
- {
- bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
- ClassInheritanceNodeContext *tnc = new ClassInheritanceNodeContext(cd);
- m_children.append(tnc);
- if (hasChildren)
- {
- //printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
- bool wasVisited=cd->visited;
- cd->visited=TRUE;
- if (cd->getLanguage()==SrcLangExt_VHDL)
- {
- tnc->addChildren(cd->baseClasses(),wasVisited);
- }
- else
- {
- tnc->addChildren(cd->subClasses(),wasVisited);
- }
- }
- }
- }
- }
- TemplateVariant isLeafNode() const
- {
- return m_children.isEmpty();
- }
- TemplateVariant children() const
- {
- return TemplateVariant(&m_children);
- }
- TemplateVariant getClass() const
+static int computeNumNodesAtLevel(const TemplateStructIntf *s,int level,int maxLevel)
+{
+ int num=0;
+ if (level<maxLevel)
+ {
+ num++;
+ TemplateVariant child = s->get("children");
+ if (child.toList())
{
- if (!m_cache.classContext)
+ TemplateListIntf::ConstIterator *it = child.toList()->createIterator();
+ TemplateVariant v;
+ for (it->toFirst();it->current(v);it->toNext())
{
- m_cache.classContext.reset(ClassContext::alloc(m_classDef));
+ num+=computeNumNodesAtLevel(v.toStruct(),level+1,maxLevel);
}
- return m_cache.classContext.get();
+ delete it;
}
- private:
- ClassDef *m_classDef;
- GenericNodeListContext m_children;
- struct Cachable
- {
- SharedPtr<ClassContext> classContext;
- };
- mutable Cachable m_cache;
-};
-//%% }
-
-ClassInheritanceNodeContext::ClassInheritanceNodeContext(ClassDef *cd) : RefCountedContext("ClassInheritanceNodeContext")
-{
- p = new Private(cd);
-}
-
-ClassInheritanceNodeContext::~ClassInheritanceNodeContext()
-{
- delete p;
-}
-
-TemplateVariant ClassInheritanceNodeContext::get(const char *n) const
-{
- return p->get(n);
-}
-
-void ClassInheritanceNodeContext::addChildren(const BaseClassList *bcl,bool hideSuper)
-{
- p->addChildren(bcl,hideSuper);
+ }
+ return num;
}
-//------------------------------------------------------------------------
-
-//%% list ClassInheritance[ClassInheritanceNode]: list of classes
-class ClassInheritanceContext::Private : public GenericNodeListContext
+static int computePreferredDepth(const TemplateListIntf *list,int maxDepth)
{
- public:
- void addClasses(const ClassSDict &classSDict)
+ int preferredNumEntries = Config_getInt("HTML_INDEX_NUM_ENTRIES");
+ int preferredDepth=1;
+ if (preferredNumEntries>0)
+ {
+ int depth = maxDepth;
+ for (int i=1;i<=depth;i++)
{
- ClassSDict::Iterator cli(classSDict);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
+ int num=0;
+ TemplateListIntf::ConstIterator *it = list->createIterator();
+ TemplateVariant v;
+ for (it->toFirst();it->current(v);it->toNext())
{
- bool b;
- if (cd->getLanguage()==SrcLangExt_VHDL)
- {
- if ((VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
- {
- continue;
- }
- b=!hasVisibleRoot(cd->subClasses());
- }
- else
- {
- b=!hasVisibleRoot(cd->baseClasses());
- }
- if (b)
- {
- if (cd->isVisibleInHierarchy()) // should it be visible
- {
- // new root level class
- ClassInheritanceNodeContext *tnc = ClassInheritanceNodeContext::alloc(cd);
- append(tnc);
- bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
- if (cd->getLanguage()==SrcLangExt_VHDL && hasChildren)
- {
- tnc->addChildren(cd->baseClasses(),cd->visited);
- cd->visited=TRUE;
- }
- else if (hasChildren)
- {
- tnc->addChildren(cd->subClasses(),cd->visited);
- cd->visited=TRUE;
- }
- }
- }
+ num+=computeNumNodesAtLevel(v.toStruct(),0,i);
+ }
+ delete it;
+ if (num<=preferredNumEntries)
+ {
+ preferredDepth=i;
+ }
+ else
+ {
+ break;
}
}
-};
-
-ClassInheritanceContext::ClassInheritanceContext() : RefCountedContext("ClassInheritanceContext")
-{
- p = new Private;
- initClassHierarchy(Doxygen::classSDict);
- initClassHierarchy(Doxygen::hiddenClasses);
- p->addClasses(*Doxygen::classSDict);
- p->addClasses(*Doxygen::hiddenClasses);
-}
-
-ClassInheritanceContext::~ClassInheritanceContext()
-{
- delete p;
-}
-
-// TemplateListIntf
-int ClassInheritanceContext::count() const
-{
- return (int)p->count();
-}
-
-TemplateVariant ClassInheritanceContext::at(int index) const
-{
- TemplateVariant result;
- if (index>=0 && index<count())
- {
- result = p->at(index);
}
- return result;
-}
-
-TemplateListIntf::ConstIterator *ClassInheritanceContext::createIterator() const
-{
- return p->createIterator();
+ return preferredDepth;
}
//------------------------------------------------------------------------
@@ -5017,13 +4917,27 @@ TemplateListIntf::ConstIterator *ClassInheritanceContext::createIterator() const
class ClassHierarchyContext::Private : public PropertyMapper
{
public:
+ Private()
+ {
+ m_classTree.reset(NestingContext::alloc(0,0));
+ initClassHierarchy(Doxygen::classSDict);
+ initClassHierarchy(Doxygen::hiddenClasses);
+ m_classTree->addClassHierarchy(*Doxygen::classSDict,TRUE);
+ m_classTree->addClassHierarchy(*Doxygen::hiddenClasses,TRUE);
+ //%% ClassInheritance tree
+ addProperty("tree", this,&Private::tree);
+ addProperty("fileName", this,&Private::fileName);
+ addProperty("relPath", this,&Private::relPath);
+ addProperty("highlight", this,&Private::highlight);
+ addProperty("subhighlight", this,&Private::subhighlight);
+ addProperty("title", this,&Private::title);
+ addProperty("preferredDepth", this,&Private::preferredDepth);
+ addProperty("maxDepth", this,&Private::maxDepth);
+ addProperty("diagrams", this,&Private::diagrams);
+ }
TemplateVariant tree() const
{
- if (!m_cache.classTree)
- {
- m_cache.classTree.reset(ClassInheritanceContext::alloc());
- }
- return m_cache.classTree.get();
+ return m_classTree.get();
}
TemplateVariant fileName() const
{
@@ -5041,6 +4955,34 @@ class ClassHierarchyContext::Private : public PropertyMapper
{
return "classhierarchy";
}
+ DotGfxHierarchyTable *getHierarchy() const
+ {
+ if (!m_cache.hierarchy)
+ {
+ m_cache.hierarchy.reset(new DotGfxHierarchyTable());
+ }
+ return m_cache.hierarchy.get();
+ }
+ TemplateVariant diagrams() const
+ {
+ if (!m_cache.diagrams)
+ {
+ TemplateList *diagrams = TemplateList::alloc();
+ DotGfxHierarchyTable *hierarchy = getHierarchy();
+ if (hierarchy->subGraphs())
+ {
+ int id=0;
+ QListIterator<DotNode> li(*hierarchy->subGraphs());
+ DotNode *n;
+ for (li.toFirst();(n=li.current());++li)
+ {
+ diagrams->append(InheritanceGraphContext::alloc(hierarchy,n,id++));
+ }
+ }
+ m_cache.diagrams.reset(diagrams);
+ }
+ return m_cache.diagrams.get();
+ }
TemplateVariant title() const
{
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
@@ -5053,20 +4995,36 @@ class ClassHierarchyContext::Private : public PropertyMapper
return theTranslator->trClassHierarchy();
}
}
- Private()
+ TemplateVariant maxDepth() const
{
- //%% ClassInheritance tree
- addProperty("tree",this,&Private::tree);
- addProperty("fileName",this,&Private::fileName);
- addProperty("relPath",this,&Private::relPath);
- addProperty("highlight",this,&Private::highlight);
- addProperty("subhighlight",this,&Private::subhighlight);
- addProperty("title",this,&Private::title);
+ if (!m_cache.maxDepthComputed)
+ {
+ m_cache.maxDepth = computeMaxDepth(m_classTree.get());
+ m_cache.maxDepthComputed=TRUE;
+ }
+ return m_cache.maxDepth;
+ }
+ TemplateVariant preferredDepth() const
+ {
+ if (!m_cache.preferredDepthComputed)
+ {
+ m_cache.preferredDepth = computePreferredDepth(m_classTree.get(),maxDepth().toInt());
+ m_cache.preferredDepthComputed=TRUE;
+ }
+ return m_cache.preferredDepth;
}
private:
+ SharedPtr<NestingContext> m_classTree;
struct Cachable
{
- SharedPtr<ClassInheritanceContext> classTree;
+ Cachable() : maxDepth(0), maxDepthComputed(FALSE),
+ preferredDepth(0), preferredDepthComputed(FALSE), hierarchy(0) {}
+ int maxDepth;
+ bool maxDepthComputed;
+ int preferredDepth;
+ bool preferredDepthComputed;
+ SharedPtr<TemplateList> diagrams;
+ ScopedPtr<DotGfxHierarchyTable> hierarchy;
};
mutable Cachable m_cache;
};
@@ -5095,7 +5053,7 @@ class NestingNodeContext::Private : public PropertyMapper
{
public:
Private(const NestingNodeContext *parent,const NestingNodeContext *thisNode,
- Definition *d,int index,int level,bool addCls)
+ Definition *d,int index,int level,bool addCls,bool inherit, bool hideSuper)
: m_parent(parent), m_def(d), m_level(level), m_index(index)
{
m_children.reset(NestingContext::alloc(thisNode,level+1));
@@ -5129,7 +5087,7 @@ class NestingNodeContext::Private : public PropertyMapper
addProperty("fileName",this,&Private::fileName);
addNamespaces(addCls);
- addClasses();
+ addClasses(inherit,hideSuper);
addDirFiles();
addPages();
addModules();
@@ -5281,12 +5239,34 @@ class NestingNodeContext::Private : public PropertyMapper
return m_def->getOutputFileBase();
}
- void addClasses()
+ //------------------------------------------------------------------
+
+ void addClasses(bool inherit, bool hideSuper)
{
ClassDef *cd = m_def->definitionType()==Definition::TypeClass ? (ClassDef*)m_def : 0;
- if (cd && cd->getClassSDict())
+ if (cd && inherit)
{
- m_children->addClasses(*cd->getClassSDict(),FALSE);
+ bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
+ if (hasChildren)
+ {
+ bool wasVisited=cd->visited;
+ cd->visited=TRUE;
+ if (cd->getLanguage()==SrcLangExt_VHDL)
+ {
+ m_children->addDerivedClasses(cd->baseClasses(),wasVisited);
+ }
+ else
+ {
+ m_children->addDerivedClasses(cd->subClasses(),wasVisited);
+ }
+ }
+ }
+ else
+ {
+ if (cd && cd->getClassSDict())
+ {
+ m_children->addClasses(*cd->getClassSDict(),FALSE);
+ }
}
}
void addNamespaces(bool addClasses)
@@ -5350,9 +5330,10 @@ class NestingNodeContext::Private : public PropertyMapper
//%% }
NestingNodeContext::NestingNodeContext(const NestingNodeContext *parent,
- Definition *d,int index,int level,bool addClass) : RefCountedContext("NestingNodeContext")
+ Definition *d,int index,int level,bool addClass,bool inherit,bool hideSuper)
+ : RefCountedContext("NestingNodeContext")
{
- p = new Private(parent,this,d,index,level,addClass);
+ p = new Private(parent,this,d,index,level,addClass,inherit,hideSuper);
}
NestingNodeContext::~NestingNodeContext()
@@ -5392,7 +5373,7 @@ class NestingContext::Private : public GenericNodeListContext
bool isLinkable = nd->isLinkableInProject();
if (isLinkable || hasChildren)
{
- NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,nd,m_index,m_level,addClasses);
+ NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,nd,m_index,m_level,addClasses,FALSE,FALSE);
append(nnc);
m_index++;
}
@@ -5421,7 +5402,7 @@ class NestingContext::Private : public GenericNodeListContext
{
if (classVisibleInIndex(cd) && cd->templateMaster()==0)
{
- NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE);
+ NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,FALSE,FALSE);
append(nnc);
m_index++;
}
@@ -5436,7 +5417,7 @@ class NestingContext::Private : public GenericNodeListContext
{
if (dd->getOuterScope()==Doxygen::globalScope)
{
- append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE));
+ append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE,FALSE,FALSE));
m_index++;
}
}
@@ -5447,7 +5428,7 @@ class NestingContext::Private : public GenericNodeListContext
DirDef *dd;
for (li.toFirst();(dd=li.current());++li)
{
- append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE));
+ append(NestingNodeContext::alloc(m_parent,dd,m_index,m_level,FALSE,FALSE,FALSE));
m_index++;
}
}
@@ -5463,7 +5444,7 @@ class NestingContext::Private : public GenericNodeListContext
{
if (fd->getDirDef()==0) // top level file
{
- append(NestingNodeContext::alloc(m_parent,fd,m_index,m_level,FALSE));
+ append(NestingNodeContext::alloc(m_parent,fd,m_index,m_level,FALSE,FALSE,FALSE));
m_index++;
}
}
@@ -5475,7 +5456,7 @@ class NestingContext::Private : public GenericNodeListContext
FileDef *fd;
for (li.toFirst();(fd=li.current());++li)
{
- append(NestingNodeContext::alloc(m_parent,fd,m_index,m_level,FALSE));
+ append(NestingNodeContext::alloc(m_parent,fd,m_index,m_level,FALSE,FALSE,FALSE));
m_index++;
}
}
@@ -5489,7 +5470,7 @@ class NestingContext::Private : public GenericNodeListContext
pd->getOuterScope()==0 ||
pd->getOuterScope()->definitionType()!=Definition::TypePage)
{
- append(NestingNodeContext::alloc(m_parent,pd,m_index,m_level,FALSE));
+ append(NestingNodeContext::alloc(m_parent,pd,m_index,m_level,FALSE,FALSE,FALSE));
m_index++;
}
}
@@ -5505,7 +5486,7 @@ class NestingContext::Private : public GenericNodeListContext
(!gd->isReference() || externalGroups)
)
{
- append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE));
+ append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE,FALSE,FALSE));
m_index++;
}
}
@@ -5518,11 +5499,74 @@ class NestingContext::Private : public GenericNodeListContext
{
if (gd->isVisible())
{
- append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE));
+ append(NestingNodeContext::alloc(m_parent,gd,m_index,m_level,FALSE,FALSE,FALSE));
m_index++;
}
}
}
+ void addDerivedClasses(const BaseClassList *bcl,bool hideSuper)
+ {
+ if (bcl==0) return;
+ BaseClassListIterator bcli(*bcl);
+ BaseClassDef *bcd;
+ for (bcli.toFirst() ; (bcd=bcli.current()) ; ++bcli)
+ {
+ ClassDef *cd=bcd->classDef;
+ if (cd->getLanguage()==SrcLangExt_VHDL && (VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
+ {
+ continue;
+ }
+
+ bool b;
+ if (cd->getLanguage()==SrcLangExt_VHDL)
+ {
+ b=hasVisibleRoot(cd->subClasses());
+ }
+ else
+ {
+ b=hasVisibleRoot(cd->baseClasses());
+ }
+
+ if (cd->isVisibleInHierarchy() && b)
+ {
+ NestingNodeContext *tnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,TRUE,hideSuper);
+ append(tnc);
+ m_index++;
+ }
+ }
+ }
+ void addClassHierarchy(const ClassSDict &classSDict,bool)
+ {
+ ClassSDict::Iterator cli(classSDict);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ {
+ bool b;
+ if (cd->getLanguage()==SrcLangExt_VHDL)
+ {
+ if ((VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
+ {
+ continue;
+ }
+ b=!hasVisibleRoot(cd->subClasses());
+ }
+ else
+ {
+ b=!hasVisibleRoot(cd->baseClasses());
+ }
+ if (b)
+ {
+ if (cd->isVisibleInHierarchy()) // should it be visible
+ {
+ // new root level class
+ NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,TRUE,cd->visited);
+ append(nnc);
+ m_index++;
+ }
+ }
+ }
+ }
+
private:
const NestingNodeContext *m_parent;
int m_level;
@@ -5600,78 +5644,17 @@ void NestingContext::addModules(const GroupList &modules)
p->addModules(modules);
}
-//------------------------------------------------------------------------
-
-static int computeMaxDepth(const TemplateListIntf *list)
-{
- int maxDepth=0;
- if (list)
- {
- TemplateListIntf::ConstIterator *it = list->createIterator();
- TemplateVariant v;
- for (it->toFirst();it->current(v);it->toNext())
- {
- const TemplateStructIntf *s = v.toStruct();
- TemplateVariant child = s->get("children");
- int d = computeMaxDepth(child.toList())+1;
- if (d>maxDepth) maxDepth=d;
- }
- delete it;
- }
- return maxDepth;
-}
-
-static int computeNumNodesAtLevel(const TemplateStructIntf *s,int level,int maxLevel)
+void NestingContext::addClassHierarchy(const ClassSDict &classSDict,bool rootOnly)
{
- int num=0;
- if (level<maxLevel)
- {
- num++;
- TemplateVariant child = s->get("children");
- if (child.toList())
- {
- TemplateListIntf::ConstIterator *it = child.toList()->createIterator();
- TemplateVariant v;
- for (it->toFirst();it->current(v);it->toNext())
- {
- num+=computeNumNodesAtLevel(v.toStruct(),level+1,maxLevel);
- }
- delete it;
- }
- }
- return num;
+ p->addClassHierarchy(classSDict,rootOnly);
}
-static int computePreferredDepth(const TemplateListIntf *list,int maxDepth)
+void NestingContext::addDerivedClasses(const BaseClassList *bcl,bool hideSuper)
{
- int preferredNumEntries = Config_getInt("HTML_INDEX_NUM_ENTRIES");
- int preferredDepth=1;
- if (preferredNumEntries>0)
- {
- int depth = maxDepth;
- for (int i=1;i<=depth;i++)
- {
- int num=0;
- TemplateListIntf::ConstIterator *it = list->createIterator();
- TemplateVariant v;
- for (it->toFirst();it->current(v);it->toNext())
- {
- num+=computeNumNodesAtLevel(v.toStruct(),0,i);
- }
- delete it;
- if (num<=preferredNumEntries)
- {
- preferredDepth=i;
- }
- else
- {
- break;
- }
- }
- }
- return preferredDepth;
+ p->addDerivedClasses(bcl,hideSuper);
}
+//------------------------------------------------------------------------
//%% struct ClassTree: Class nesting relations
//%% {
@@ -5758,7 +5741,8 @@ class ClassTreeContext::Private : public PropertyMapper
SharedPtr<NestingContext> m_classTree;
struct Cachable
{
- Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+ Cachable() : maxDepth(0), maxDepthComputed(FALSE),
+ preferredDepth(0), preferredDepthComputed(FALSE) {}
int maxDepth;
bool maxDepthComputed;
int preferredDepth;
@@ -6166,7 +6150,8 @@ class FileTreeContext::Private : public PropertyMapper
SharedPtr<NestingContext> m_dirFileTree;
struct Cachable
{
- Cachable() : maxDepthComputed(FALSE), preferredDepthComputed(FALSE) {}
+ Cachable() : maxDepth(0), maxDepthComputed(FALSE),
+ preferredDepth(0), preferredDepthComputed(FALSE) {}
int maxDepth;
bool maxDepthComputed;
int preferredDepth;
@@ -7045,6 +7030,56 @@ TemplateVariant NamespaceMembersIndexContext::get(const char *name) const
return p->get(name);
}
+//------------------------------------------------------------------------
+
+//%% struct InheritanceGraph: a connected graph reprenting part of the overall interitance tree
+//%% {
+class InheritanceGraphContext::Private : public PropertyMapper
+{
+ public:
+ Private(DotGfxHierarchyTable *hierarchy,DotNode *n,int id) : m_hierarchy(hierarchy), m_node(n), m_id(id)
+ {
+ addProperty("graph",this,&Private::graph);
+ }
+ TemplateVariant graph() const
+ {
+ QGString result;
+ static bool haveDot = Config_getBool("HAVE_DOT");
+ static bool graphicalHierarchy = Config_getBool("GRAPHICAL_HIERARCHY");
+ if (haveDot && graphicalHierarchy)
+ {
+ FTextStream t(&result);
+ m_hierarchy->createGraph(m_node,t,
+ /*GOF_BITMAP,
+ EOF_Html,*/
+ g_globals.outputDir,
+ g_globals.outputDir+portable_pathSeparator()+"inherits"+Doxygen::htmlFileExtension,
+ m_id);
+ }
+ return TemplateVariant(result.data(),TRUE);
+ }
+ private:
+ DotGfxHierarchyTable *m_hierarchy;
+ DotNode *m_node;
+ int m_id;
+};
+
+InheritanceGraphContext::InheritanceGraphContext(DotGfxHierarchyTable *hierarchy,DotNode *n,int id)
+ : RefCountedContext("InheritanceGraphContext")
+{
+ p = new Private(hierarchy,n,id);
+}
+
+InheritanceGraphContext::~InheritanceGraphContext()
+{
+ delete p;
+}
+
+TemplateVariant InheritanceGraphContext::get(const char *name) const
+{
+ return p->get(name);
+}
+
//------------------------------------------------------------------------
@@ -8082,7 +8117,7 @@ class HtmlSpaceless : public TemplateSpacelessIntf
{
m_insideString='\0';
}
- else // start of string
+ else if (m_insideString=='\0') // start of string
{
m_insideString=c;
}
@@ -8107,8 +8142,8 @@ class HtmlSpaceless : public TemplateSpacelessIntf
}
}
result+='\0';
- //printf("HtmlSpaceless::remove({%s})={%s} m_insideTag=%d m_insideString=%d removeSpaces=%d\n",s.data(),result.data(),
- // m_insideTag,m_insideString,m_removeSpaces);
+ //printf("HtmlSpaceless::remove({%s})={%s} m_insideTag=%d m_insideString=%c (%d) removeSpaces=%d\n",s.data(),result.data(),
+ // m_insideTag,m_insideString,m_insideString,m_removeSpaces);
return result.data();
}
private:
@@ -8147,7 +8182,6 @@ void generateOutputViaTemplate()
SharedPtr<ExampleListContext> exampleList (ExampleListContext::alloc());
SharedPtr<ModuleTreeContext> moduleTree (ModuleTreeContext::alloc());
SharedPtr<ModuleListContext> moduleList (ModuleListContext::alloc());
- SharedPtr<PageContext> mainPage (PageContext::alloc(Doxygen::mainPage,TRUE));
SharedPtr<GlobalsIndexContext> globalsIndex (GlobalsIndexContext::alloc());
SharedPtr<ClassMembersIndexContext> classMembersIndex (ClassMembersIndexContext::alloc());
SharedPtr<NamespaceMembersIndexContext> namespaceMembersIndex(NamespaceMembersIndexContext::alloc());
@@ -8187,7 +8221,19 @@ void generateOutputViaTemplate()
//%% DirList dirList
ctx->set("dirList",dirList.get());
//%% Page mainPage
- ctx->set("mainPage",mainPage.get());
+ if (Doxygen::mainPage)
+ {
+ SharedPtr<PageContext> mainPage(PageContext::alloc(Doxygen::mainPage,TRUE));
+ ctx->set("mainPage",mainPage.get());
+ }
+ else
+ {
+ // TODO: for LaTeX output index should be main... => solve in template
+ Doxygen::mainPage = new PageDef("[generated]",1,"index","",theTranslator->trMainPage());
+ Doxygen::mainPage->setFileName("index",TRUE);
+ SharedPtr<PageContext> mainPage(PageContext::alloc(Doxygen::mainPage,TRUE));
+ ctx->set("mainPage",mainPage.get());
+ }
//%% GlobalsIndex globalsIndex:
ctx->set("globalsIndex",globalsIndex.get());
//%% ClassMembersIndex classMembersIndex:
diff --git a/src/context.h b/src/context.h
index b39ab40..6b5b810 100644
--- a/src/context.h
+++ b/src/context.h
@@ -51,6 +51,8 @@ struct MemberInfo;
class MemberGroup;
class MemberGroupSDict;
class MemberGroupList;
+class DotNode;
+class DotGfxHierarchyTable;
//----------------------------------------------------
@@ -419,6 +421,26 @@ class ClassIndexContext : public RefCountedContext, public TemplateStructIntf
//----------------------------------------------------
+class InheritanceGraphContext : public RefCountedContext, public TemplateStructIntf
+{
+ public:
+ static InheritanceGraphContext *alloc(DotGfxHierarchyTable *hierarchy,DotNode *n,int id)
+ { return new InheritanceGraphContext(hierarchy,n,id); }
+
+ // TemplateStructIntf methods
+ virtual TemplateVariant get(const char *name) const;
+ virtual int addRef() { return RefCountedContext::addRef(); }
+ virtual int release() { return RefCountedContext::release(); }
+
+ private:
+ InheritanceGraphContext(DotGfxHierarchyTable *hierarchy,DotNode *n,int id);
+ ~InheritanceGraphContext();
+ class Private;
+ Private *p;
+};
+
+//----------------------------------------------------
+
class ClassInheritanceNodeContext : public RefCountedContext, public TemplateStructIntf
{
public:
@@ -485,8 +507,8 @@ class NestingNodeContext : public RefCountedContext, public TemplateStructIntf
{
public:
static NestingNodeContext *alloc(const NestingNodeContext *parent,Definition *def,
- int index,int level,bool addClasses)
- { return new NestingNodeContext(parent,def,index,level,addClasses); }
+ int index,int level,bool addClasses,bool inherit,bool hideSuper)
+ { return new NestingNodeContext(parent,def,index,level,addClasses,inherit,hideSuper); }
QCString id() const;
@@ -497,7 +519,7 @@ class NestingNodeContext : public RefCountedContext, public TemplateStructIntf
private:
NestingNodeContext(const NestingNodeContext *parent,
- Definition *,int index,int level,bool addClasses);
+ Definition *,int index,int level,bool addClasses,bool inherit,bool hideSuper);
~NestingNodeContext();
class Private;
Private *p;
@@ -527,6 +549,8 @@ class NestingContext : public RefCountedContext, public TemplateListIntf
void addPages(const PageSDict &pages,bool rootOnly);
void addModules(const GroupSDict &modules);
void addModules(const GroupList &modules);
+ void addClassHierarchy(const ClassSDict &clDict,bool rootOnly);
+ void addDerivedClasses(const BaseClassList *bcl,bool hideSuper);
private:
NestingContext(const NestingNodeContext *parent,int level);
diff --git a/src/definition.cpp b/src/definition.cpp
index d2e3e01..6cb26de 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -58,10 +58,10 @@ class DefinitionImpl
SectionDict *sectionDict; // dictionary of all sections, not accessible
- MemberSDict *sourceRefByDict;
- MemberSDict *sourceRefsDict;
- QList<ListItemInfo> *xrefListItems;
- GroupList *partOfGroups;
+ MemberSDict *sourceRefByDict;
+ MemberSDict *sourceRefsDict;
+ QList<ListItemInfo> *xrefListItems;
+ GroupList *partOfGroups;
DocInfo *details; // not exported
DocInfo *inbodyDocs; // not exported
@@ -89,11 +89,11 @@ class DefinitionImpl
QCString id; // clang unique id
};
-DefinitionImpl::DefinitionImpl()
- : sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
+DefinitionImpl::DefinitionImpl()
+ : sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
xrefListItems(0), partOfGroups(0),
- details(0), inbodyDocs(0), brief(0), body(0),
- outerScope(0)
+ details(0), inbodyDocs(0), brief(0), body(0), hidden(FALSE), isArtificial(FALSE),
+ outerScope(0), lang(SrcLangExt_Unknown)
{
}
@@ -755,6 +755,7 @@ bool readCodeFragment(const char *fileName,
{
while ((c=fgetc(f))!='\n' && c!=EOF) /* skip */;
lineNr++;
+ if (found && c == '\n') c = '\0';
}
if (!feof(f))
{
@@ -763,7 +764,7 @@ bool readCodeFragment(const char *fileName,
while (lineNr<=endLine && !feof(f) && !found)
{
int pc=0;
- while ((c=fgetc(f))!='{' && c!=':' && c!=EOF)
+ while ((c=fgetc(f))!='{' && c!=':' && c!=EOF) // } so vi matching brackets has no problem
{
//printf("parsing char `%c'\n",c);
if (c=='\n')
@@ -816,7 +817,7 @@ bool readCodeFragment(const char *fileName,
result+=spaces;
}
// copy until end of line
- result+=c;
+ if (c) result+=c;
startLine=lineNr;
if (c==':')
{
@@ -890,16 +891,17 @@ QCString Definition::getSourceFileBase() const
QCString Definition::getSourceAnchor() const
{
- QCString anchorStr;
+ const int maxAnchorStrLen = 20;
+ char anchorStr[maxAnchorStrLen];
if (m_impl->body && m_impl->body->startLine!=-1)
{
if (Htags::useHtags)
{
- anchorStr.sprintf("L%d",m_impl->body->startLine);
+ qsnprintf(anchorStr,maxAnchorStrLen,"L%d",m_impl->body->startLine);
}
else
{
- anchorStr.sprintf("l%05d",m_impl->body->startLine);
+ qsnprintf(anchorStr,maxAnchorStrLen,"l%05d",m_impl->body->startLine);
}
}
return anchorStr;
@@ -909,6 +911,7 @@ QCString Definition::getSourceAnchor() const
void Definition::writeSourceDef(OutputList &ol,const char *)
{
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
+ static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE");
ol.pushGeneratorState();
//printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
QCString fn = getSourceFileBase();
@@ -928,13 +931,16 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
// write text left from linePos marker
ol.parseText(refText.left(lineMarkerPos));
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
- // write line link (HTML, LaTeX optionally)
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write line link (HTML, LaTeX optionally, RTF optionally)
ol.writeObjectLink(0,fn,anchorStr,lineStr);
ol.enableAll();
ol.disable(OutputGenerator::Html);
@@ -942,7 +948,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.disable(OutputGenerator::Latex);
}
- // write normal text (Man/RTF, Latex optionally)
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write normal text (Man, Latex optionally, RTF optionally)
ol.docify(lineStr);
ol.popGeneratorState();
@@ -951,13 +961,16 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
fileMarkerPos-lineMarkerPos-2));
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
- // write file link (HTML, LaTeX optionally)
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write file link (HTML, LaTeX optionally, RTF optionally)
ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
ol.enableAll();
ol.disable(OutputGenerator::Html);
@@ -965,7 +978,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.disable(OutputGenerator::Latex);
}
- // write normal text (Man/RTF, Latex optionally)
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write normal text (Man, Latex optionally, RTF optionally)
ol.docify(m_impl->body->fileDef->name());
ol.popGeneratorState();
@@ -978,12 +995,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
// write text left from file marker
ol.parseText(refText.left(fileMarkerPos));
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
// write file link (HTML only)
ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
ol.enableAll();
@@ -992,7 +1012,11 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.disable(OutputGenerator::Latex);
}
- // write normal text (Latex/Man only)
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ // write normal text (RTF/Latex/Man only)
ol.docify(m_impl->body->fileDef->name());
ol.popGeneratorState();
@@ -1001,12 +1025,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
lineMarkerPos-fileMarkerPos-2));
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.disableAllBut(OutputGenerator::Html);
// write line link (HTML only)
ol.writeObjectLink(0,fn,anchorStr,lineStr);
@@ -1016,6 +1043,10 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.disable(OutputGenerator::Latex);
}
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
// write normal text (Latex/Man only)
ol.docify(lineStr);
ol.popGeneratorState();
@@ -1105,6 +1136,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool /*funcOnly*/)
{
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
+ static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE");
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE");
ol.pushGeneratorState();
@@ -1157,14 +1189,18 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
ol.pushGeneratorState();
//ol.disableAllBut(OutputGenerator::Html);
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
- QCString lineStr,anchorStr;
- anchorStr.sprintf("l%05d",md->getStartBodyLine());
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+ const int maxLineNrStr = 10;
+ char anchorStr[maxLineNrStr];
+ qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
//printf("Write object link to %s\n",md->getBodyDef()->getSourceFileBase().data());
ol.writeObjectLink(0,md->getBodyDef()->getSourceFileBase(),anchorStr,name);
ol.popGeneratorState();
@@ -1176,6 +1212,10 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.docify(name);
ol.popGeneratorState();
}
@@ -1184,12 +1224,15 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
// for HTML write a real link
ol.pushGeneratorState();
//ol.disableAllBut(OutputGenerator::Html);
- ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
+ if (!rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.writeObjectLink(md->getReference(),
md->getOutputFileBase(),
@@ -1203,6 +1246,10 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
{
ol.disable(OutputGenerator::Latex);
}
+ if (rtfSourceCode)
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
ol.docify(name);
ol.popGeneratorState();
}
@@ -1286,9 +1333,6 @@ void Definition::addSourceReferencedBy(MemberDef *md)
void Definition::addSourceReferences(MemberDef *md)
{
- QCString name = md->name();
- QCString scope = md->getScopeString();
-
if (md)
{
QCString name = md->name();
@@ -1524,12 +1568,12 @@ QCString Definition::navigationPathAsString() const
if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
{
result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
- ((const GroupDef*)this)->groupTitle()+"</a>";
+ convertToHtml(((const GroupDef*)this)->groupTitle())+"</a>";
}
else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty())
{
result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
- ((const PageDef*)this)->title()+"</a>";
+ convertToHtml(((const PageDef*)this)->title())+"</a>";
}
else if (definitionType()==Definition::TypeClass)
{
@@ -1540,17 +1584,17 @@ QCString Definition::navigationPathAsString() const
}
result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension;
if (!anchor().isEmpty()) result+="#"+anchor();
- result+="\">"+name+"</a>";
+ result+="\">"+convertToHtml(name)+"</a>";
}
else
{
result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
- locName+"</a>";
+ convertToHtml(locName)+"</a>";
}
}
else
{
- result+="<b>"+locName+"</b>";
+ result+="<b>"+convertToHtml(locName)+"</b>";
}
result+="</li>";
return result;
@@ -1618,7 +1662,7 @@ void Definition::writeToc(OutputList &ol)
}
cs[0]='0'+nextLevel;
if (inLi[nextLevel]) ol.writeString("</li>\n");
- ol.writeString("<li class=\"level"+QCString(cs)+"\"><a href=\"#"+si->label+"\">"+si->title+"</a>");
+ ol.writeString("<li class=\"level"+QCString(cs)+"\"><a href=\"#"+si->label+"\">"+(si->title.isEmpty()?si->label:si->title)+"</a>");
inLi[nextLevel]=TRUE;
level = nextLevel;
}
diff --git a/src/diagram.cpp b/src/diagram.cpp
index e50baec..cc16b50 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -1337,7 +1337,7 @@ void ClassDiagram::writeFigure(FTextStream &output,const char *path,
QCString epstopdfArgs(4096);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
epsBaseName.data(),epsBaseName.data());
- //printf("Converting eps using `%s'\n",epstopdfCmd.data());
+ //printf("Converting eps using `%s'\n",epstopdfArgs.data());
portable_sysTimerStart();
if (portable_system("epstopdf",epstopdfArgs)!=0)
{
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index d2d9684..d4af3f0 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -18,7 +18,7 @@
static int g_dirCount=0;
-DirDef::DirDef(const char *path) : Definition(path,1,1,path)
+DirDef::DirDef(const char *path) : Definition(path,1,1,path), visited(FALSE)
{
bool fullPathNames = Config_getBool("FULL_PATH_NAMES");
// get display name (stipping the paths mentioned in STRIP_FROM_PATH)
diff --git a/src/dirdef.h b/src/dirdef.h
index 1a9f40c..9a8a5ad 100644
--- a/src/dirdef.h
+++ b/src/dirdef.h
@@ -54,7 +54,7 @@ class DirDef : public Definition
bool isLinkableInProject() const;
bool isLinkable() const;
QCString displayName(bool=TRUE) const { return m_dispName; }
- QCString shortName() const { return m_shortName; }
+ const QCString &shortName() const { return m_shortName; }
void addSubDir(DirDef *subdir);
FileList * getFiles() const { return m_fileList; }
void addFile(FileDef *fd);
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index cabb7ad..edcafdb 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -178,14 +178,14 @@ class TextGeneratorDocbookImpl : public TextGeneratorIntf
class DocbookCodeGenerator : public CodeOutputInterface
{
public:
- DocbookCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1),
+ DocbookCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1), m_col(0),
m_insideCodeLine(FALSE), m_insideSpecialHL(FALSE) {}
virtual ~DocbookCodeGenerator() {}
void codify(const char *text)
{
Docbook_DB(("(codify \"%s\")\n",text));
- writeDocbookCodeString(m_t,text,col);
+ writeDocbookCodeString(m_t,text,m_col);
}
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
@@ -193,7 +193,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
{
Docbook_DB(("(writeCodeLink)\n"));
writeDocbookLink(m_t,ref,file,anchor,name,tooltip);
- col+=strlen(name);
+ m_col+=strlen(name);
}
void writeTooltip(const char *, const DocLinkInfo &, const char *,
const char *, const SourceLinkInfo &, const SourceLinkInfo &
@@ -217,7 +217,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
}
}
m_insideCodeLine=TRUE;
- col=0;
+ m_col=0;
}
void endCodeLine()
{
@@ -255,7 +255,6 @@ class DocbookCodeGenerator : public CodeOutputInterface
{
m_refId=compId;
if (anchorId) m_refId+=(QCString)"_1"+anchorId;
- m_isMemberRef = anchorId!=0;
if (extRef) m_external=extRef;
}
}
@@ -275,8 +274,7 @@ class DocbookCodeGenerator : public CodeOutputInterface
QCString m_refId;
QCString m_external;
int m_lineNumber;
- bool m_isMemberRef;
- int col;
+ int m_col;
bool m_insideCodeLine;
bool m_insideSpecialHL;
};
@@ -486,6 +484,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << endl << "}";
t << "</literallayout>" << endl;
+ if (md->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
}
}
else if (md->memberType()==MemberType_Define)
@@ -538,6 +542,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
t << memberOutputFileBase(md);
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
+ if (md->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
}
}
else if (md->memberType()==MemberType_Typedef)
@@ -556,6 +566,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
t << memberOutputFileBase(md);
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
+ if (md->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
}
else if (md->memberType()==MemberType_Function)
{
@@ -599,6 +615,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
}
t << ")";
+ if (md->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
}
else
{
@@ -633,7 +655,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
MemberListIterator emli(*enumFields);
MemberDef *emd;
t << " <formalpara>" << endl;
- t << " <title>Enumerator:</title>" << endl;
+ t << " <title>" << theTranslator->trEnumerationValues() << ":</title>" << endl;
t << " <variablelist>" << endl;
for (emli.toFirst();(emd=emli.current());++emli)
{
@@ -643,9 +665,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
writeDocbookString(t,emd->name());
t << "</term>" << endl;
t << " <listitem>" << endl;
- t << " <para>";
- writeDocbookString(t,emd->briefDescription());
- t << "</para>" << endl;
+ if(Config_getBool("REPEAT_BRIEF"))
+ {
+ t << " <para>";
+ writeDocbookString(t,emd->briefDescription());
+ t << "</para>" << endl;
+ }
t << " </listitem>" << endl;
t << " </varlistentry>" << endl;
}
@@ -683,9 +708,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << "</title>";
- t << " <emphasis>";
- writeDocbookString(t,md->briefDescription());
- t << "</emphasis>" << endl;
+ if(Config_getBool("REPEAT_BRIEF"))
+ {
+ t << " <emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis>" << endl;
+ }
t << " ";
writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
t << endl;
@@ -704,9 +732,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << " " << convertToXML(md->argsString()) << "</title>";
- t << " <emphasis>";
- writeDocbookString(t,md->briefDescription());
- t << "</emphasis>" << endl;
+ if(Config_getBool("REPEAT_BRIEF"))
+ {
+ t << " <emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis>" << endl;
+ }
t << " ";
writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
t << endl;
@@ -766,9 +797,12 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << "_1" << md->anchor() << "\">" << endl;
t << " <title>" << convertToXML(md->definition()) << "</title>";
- t << " <emphasis>";
- writeDocbookString(t,md->briefDescription());
- t << "</emphasis>" << endl;
+ if(Config_getBool("REPEAT_BRIEF"))
+ {
+ t << " <emphasis>";
+ writeDocbookString(t,md->briefDescription());
+ t << "</emphasis>" << endl;
+ }
t << " ";
writeDocbookDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
t << endl;
@@ -798,59 +832,47 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c
count++;
}
}
+
+ if (count==0) return; // empty list
switch (ml->listType())
{
- case MemberListType_decDefineMembers: title="Defines"; desctitle="Define Documentation"; break;
- case MemberListType_decTypedefMembers: title="Typedefs"; desctitle="Typedef Documentation"; break;
- case MemberListType_decEnumMembers: title="Enumerations"; desctitle="Enumeration Type documentation"; break;
- case MemberListType_decFuncMembers: title="Functions"; desctitle="Function Documentation"; break;
- case MemberListType_decVarMembers: title="Variables"; desctitle="Variable Documentation"; break;
- case MemberListType_pubAttribs: title="Public Attributes"; desctitle="Member Documentation"; break;
- case MemberListType_priAttribs: title="Private Attributes"; desctitle="Member Documentation"; break;
- case MemberListType_proAttribs: title="Protected Attributes";desctitle="Member Documentation"; break;
+ case MemberListType_decDefineMembers: title=theTranslator->trDefines(); desctitle=theTranslator->trDefineDocumentation(); break;
+ case MemberListType_decTypedefMembers: title=theTranslator->trTypedefs(); desctitle=theTranslator->trTypedefDocumentation(); break;
+ case MemberListType_decEnumMembers: title=theTranslator->trEnumerations(); desctitle=theTranslator->trEnumerationTypeDocumentation(); break;
+ case MemberListType_decFuncMembers: title=theTranslator->trFunctions(); desctitle=theTranslator->trFunctionDocumentation(); break;
+ case MemberListType_decVarMembers: title=theTranslator->trVariables(); desctitle=theTranslator->trVariableDocumentation(); break;
+ case MemberListType_pubAttribs: title=theTranslator->trPublicAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break;
+ case MemberListType_priAttribs: title=theTranslator->trPrivateAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break;
+ case MemberListType_proAttribs: title=theTranslator->trProtectedAttribs(); desctitle=theTranslator->trMemberDataDocumentation(); break;
default: title=""; desctitle=""; break;
}
- if (count==0) return; // empty list
-
- for (mli.toFirst();(md=mli.current());++mli)
- {
- if (md->documentation())
- {
- doc_count++;
- }
- }
-
if (detailed)
{
- if (desctitle)
+ for (mli.toFirst();(md=mli.current());++mli)
{
- if (desctitle=="Member Documentation")
- {
- if (doc_count > 0)
- {
- t << " <simplesect>" << endl;
- t << " <title>" << desctitle << "</title>" << endl;
- }
- }
- else if (desctitle=="Define Documentation")
- {
- if (doc_count > 0)
+ if (md->documentation().isEmpty() && !Config_getBool("REPEAT_BRIEF"))
{
- t << " <section>" << endl;
- t << " <title>" << desctitle << "</title>" << endl;
+ continue;
}
- }
- else
- {
+ doc_count = 1;
+ break;
+ }
+
+ if(doc_count == 0)
+ {
+ return;
+ }
+
+ if (desctitle)
+ {
t << " <section>" << endl;
t << " <title>" << desctitle << "</title>" << endl;
- }
}
} else
{
- t << " <simplesect>" << endl;
+ t << " <section>" << endl;
if (header)
{
t << " <title>" << convertToXML(header) << "</title>" << endl;
@@ -873,36 +895,24 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c
// to prevent this duplication in the Docbook output, we filter those here.
if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0)
{
- generateDocbookForMember(md,t,d,detailed);
+ if (detailed && md->documentation().isEmpty() && !Config_getBool("REPEAT_BRIEF"))
+ {
+ continue;
+ }
+
+ generateDocbookForMember(md,t,d,detailed);
}
}
if (detailed)
{
if (desctitle)
{
- if (desctitle=="Member Documentation")
- {
- if (doc_count > 0)
- {
- t << " </simplesect>" << endl;
- }
- }
- else if (desctitle=="Define Documentation")
- {
- if (doc_count > 0)
- {
- t << " </section>" << endl;
- }
- }
- else
- {
t << " </section>" << endl;
- }
}
}
else
{
- t << " </simplesect>" << endl;
+ t << " </section>" << endl;
}
}
@@ -912,11 +922,11 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
{
ClassSDict::Iterator cli(*cl);
ClassDef *cd;
- QCString title = "Classes";
+ QCString title = theTranslator->trClasses();
if (cli.toFirst())
{
- t << " <simplesect>" << endl;
+ t << " <section>" << endl;
t << " <title> " << title << " </title>" << endl;
}
for (cli.toFirst();(cd=cli.current());++cli)
@@ -928,6 +938,12 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
t << " <listitem>" << endl;
t << " <para>" << "struct <link linkend=\"" << classOutputFileBase(cd) << "\">" << convertToXML(cd->name()) << "</link>";
t << "</para>" << endl;
+ if (cd->briefDescription())
+ {
+ t << "<para><emphasis>";
+ writeDocbookString(t,cd->briefDescription());
+ t << "</emphasis></para>" << endl;
+ }
t << " </listitem>" << endl;
t << " </itemizedlist>" << endl;
t << " </para>" << endl;
@@ -935,7 +951,7 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
}
if (cli.toFirst())
{
- t << " </simplesect>" << endl;
+ t << " </section>" << endl;
}
}
}
@@ -946,7 +962,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,FTextStream &t)
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
- QCString title = "Namespaces";
+ QCString title = theTranslator->trNamespaces();
if (nli.toFirst())
{
@@ -980,7 +996,7 @@ static void writeInnerFiles(const FileList *fl,FTextStream &t)
{
QListIterator<FileDef> fli(*fl);
FileDef *fd;
- QCString title = "Files";
+ QCString title = theTranslator->trFile(TRUE,TRUE);
if (fli.toFirst())
{
@@ -1030,7 +1046,7 @@ static void writeInnerGroups(const GroupList *gl,FTextStream &t)
if (gli.toFirst())
{
t << " <simplesect>" << endl;
- t << " <title>Modules</title>" << endl;
+ t << " <title>" << theTranslator->trModules() << "</title>" << endl;
t << " </simplesect>" << endl;
t << " <para>" << endl;
t << " <itemizedlist>" << endl;
@@ -1057,7 +1073,7 @@ static void writeInnerDirs(const DirList *dl,FTextStream &t)
{
QListIterator<DirDef> subdirs(*dl);
DirDef *subdir;
- QCString title = "Directories";
+ QCString title = theTranslator->trDirectories();
if (subdirs.toFirst())
{
t << " <simplesect>" << endl;
@@ -1219,18 +1235,23 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti)
generateDocbookSection(cd,t,ml,g_docbookSectionMapper.find(ml->listType()));
}
}
- if (cd->briefDescription())
+
+ if(Config_getBool("REPEAT_BRIEF"))
{
- t << " <simplesect>" << endl;
- t << " <title>Brief Description</title>" << endl;
- writeDocbookDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
- t << " </simplesect>" << endl;
+ if (cd->briefDescription())
+ {
+ t << " <simplesect>" << endl;
+ // A title as 'Brief Description' may not be necessary.
+ //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
+ writeDocbookDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
+ t << " </simplesect>" << endl;
+ }
}
if (cd->documentation())
{
t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,cd->docFile(),cd->docLine(),cd,0,cd->documentation());
t << " <para>Definition at line " << cd->getDefLine() << " of file " << stripPath(cd->getDefFileName()) << "</para>" << endl;
t << " <para>The Documentation for this struct was generated from the following file: </para>" << endl;
@@ -1338,18 +1359,21 @@ static void generateDocbookForNamespace(NamespaceDef *nd,FTextStream &ti)
}
}
- if (nd->briefDescription())
+ if(Config_getBool("REPEAT_BRIEF"))
{
- t << " <simplesect>" << endl;
- t << " <title>Brief Description</title>" << endl;
- writeDocbookDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
- t << " </simplesect>" << endl;
+ if (nd->briefDescription())
+ {
+ t << " <simplesect>" << endl;
+ //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
+ writeDocbookDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
+ t << " </simplesect>" << endl;
+ }
}
if (nd->documentation())
{
t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation());
t << " <para>Definition at line " << nd->getDefLine() << " of file " << stripPath(nd->getDefFileName()) << "</para>" << endl;
t << " <para>The Documentation for this struct was generated from the following file: </para>" << endl;
@@ -1475,7 +1499,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti)
}
t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
writeDocbookDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation());
if (Config_getBool("FULL_PATH_NAMES"))
@@ -1547,18 +1571,18 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti)
if (gd->briefDescription())
{
- t << " <simplesect>" << endl;
- t << " <title>Brief Description</title>" << endl;
+ //t << " <section>" << endl;
+ //t << " <title>" << theTranslator->trBriefDescription() << "</title>" << endl;
writeDocbookDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription());
- t << " </simplesect>" << endl;
+ //t << " </section>" << endl;
}
if (gd->documentation())
{
- t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <section>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,gd->docFile(),gd->docLine(),gd,0,gd->documentation());
- t << " </simplesect>" << endl;
+ t << " </section>" << endl;
}
writeInnerFiles(gd->getFiles(),t);
@@ -1625,8 +1649,7 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti)
writeDocbookHeader_ID(t, dd->getOutputFileBase());
t << " <title>";
- writeDocbookString(t, dd->displayName());
- t << " Directory Reference";
+ t << theTranslator->trDirReference(dd->displayName());
t << "</title>" << endl;
if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT"))
{
@@ -1639,7 +1662,7 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti)
writeInnerFiles(dd->getFiles(),t);
t << " <simplesect>" << endl;
- t << " <title>Detailed Description</title>" << endl;
+ t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl;
writeDocbookDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription());
writeDocbookDocBlock(t,dd->docFile(),dd->docLine(),dd,0,dd->documentation());
t << " <para>Directory location is " << dd->name() << "</para>" << endl;
@@ -1693,7 +1716,15 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample)
}
else
{
- QCString pid = pageName+"_1"+pageName;
+ QCString pid;
+ if(isExample)
+ {
+ pid = pageName;
+ }
+ else
+ {
+ pid = pageName+"_1"+pageName;
+ }
writeDocbookHeader_ID(t, pid);
}
@@ -1851,7 +1882,7 @@ void generateDocbook()
if (gli.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>Module Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trModuleDocumentation() << "</title>" << endl;
}
for (;(gd=gli.current());++gli)
@@ -1876,7 +1907,7 @@ void generateDocbook()
if (cli.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>Class Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trClassDocumentation() << "</title>" << endl;
}
for (cli.toFirst();(cd=cli.current());++cli)
@@ -1903,7 +1934,7 @@ void generateDocbook()
if (fnli.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>File Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trFileDocumentation() << "</title>" << endl;
}
for (;(fn=fnli.current());++fnli)
@@ -1934,7 +1965,7 @@ void generateDocbook()
if (sdi.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>Directory Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trDirDocumentation() << "</title>" << endl;
}
for (sdi.toFirst();(dir=sdi.current());++sdi)
@@ -1960,7 +1991,7 @@ void generateDocbook()
if (pdi.toFirst())
{
t << " <chapter>" << endl;
- t << " <title>Example Documentation</title>" << endl;
+ t << " <title>" << theTranslator->trExampleDocumentation() << "</title>" << endl;
}
for (pdi.toFirst();(pd=pdi.current());++pdi)
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index a227dd8..90262e3 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -36,6 +36,53 @@
#include "htmlentity.h"
#include "plantuml.h"
+static void visitPreStart(FTextStream &t, const bool hasCaption, QCString name, QCString width, QCString height)
+{
+ QCString tmpStr;
+ t << " <figure>" << endl;
+ t << " <title></title>" << endl;
+ t << " <mediaobject>" << endl;
+ t << " <imageobject>" << endl;
+ t << " <imagedata";
+ if (!width.isEmpty())
+ {
+ t << " width=\"" << convertToXML(width) << "\"";
+ }
+ else
+ {
+ t << " width=\"50%\"";
+ }
+ if (!height.isEmpty())
+ {
+ t << " depth=\"" << convertToXML(tmpStr) << "\"";
+ }
+ t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << name << "\">";
+ t << "</imagedata>" << endl;
+ t << " </imageobject>" << endl;
+ if (hasCaption)
+ {
+ t << " <caption>" << endl;
+ }
+}
+
+static void visitPostEnd(FTextStream &t, const bool hasCaption)
+{
+ t << endl;
+ if (hasCaption)
+ {
+ t << " </caption>" << endl;
+ }
+ t << " </mediaobject>" << endl;
+ t << " </figure>" << endl;
+}
+
+static void visitCaption(DocbookDocVisitor *parent, QList<DocNode> children)
+{
+ QListIterator<DocNode> cli(children);
+ DocNode *n;
+ for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
+}
+
DocbookDocVisitor::DocbookDocVisitor(FTextStream &t,CodeOutputInterface &ci)
: DocVisitor(DocVisitor_Docbook), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
{
@@ -205,14 +252,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
}
file.writeBlock( stext, stext.length() );
file.close();
- m_t << " <figure>" << endl;
- m_t << " <title>" << name << "</title>" << endl;
- m_t << " <mediaobject>" << endl;
- m_t << " <imageobject>" << endl;
- writeDotFile(baseName);
- m_t << " </imageobject>" << endl;
- m_t << " </mediaobject>" << endl;
- m_t << " </figure>" << endl;
+ writeDotFile(baseName, s);
m_t << "</para>" << endl;
}
break;
@@ -238,14 +278,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
text+="}";
file.writeBlock( text, text.length() );
file.close();
- m_t << " <figure>" << endl;
- m_t << " <title>" << name << "</title>" << endl;
- m_t << " <mediaobject>" << endl;
- m_t << " <imageobject>" << endl;
- writeMscFile(baseName);
- m_t << " </imageobject>" << endl;
- m_t << " </mediaobject>" << endl;
- m_t << " </figure>" << endl;
+ writeMscFile(baseName,s);
m_t << "</para>" << endl;
}
break;
@@ -259,14 +292,8 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
{
shortName=shortName.right(shortName.length()-i-1);
}
- m_t << " <figure>" << endl;
- m_t << " <title>" << shortName << "</title>" << endl;
- m_t << " <mediaobject>" << endl;
- m_t << " <imageobject>" << endl;
- writePlantUMLFile(baseName);
- m_t << " </imageobject>" << endl;
- m_t << " </mediaobject>" << endl;
- m_t << " </figure>" << endl;
+ m_t << "<para>" << endl;
+ writePlantUMLFile(baseName,s);
m_t << "</para>" << endl;
}
break;
@@ -850,8 +877,13 @@ void DocbookDocVisitor::visitPre(DocImage *img)
{
if (m_hide) return;
m_t << endl;
- m_t << " <figure>" << endl;
- m_t << " <title>";
+ QCString baseName=img->name();
+ int i;
+ if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
+ {
+ baseName=baseName.right(baseName.length()-i-1);
+ }
+ visitPreStart(m_t, img -> hasCaption(), baseName, img -> width(), img -> height());
}
else
{
@@ -865,39 +897,14 @@ void DocbookDocVisitor::visitPost(DocImage *img)
if (img->type()==DocImage::DocBook)
{
if (m_hide) return;
- QCString typevar;
- m_t << "</title>" << endl;
- m_t << " <mediaobject>" << endl;
- m_t << " <imageobject>" << endl;
+ visitPostEnd(m_t, img -> hasCaption());
+ // copy the image to the output dir
QCString baseName=img->name();
int i;
if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
{
baseName=baseName.right(baseName.length()-i-1);
}
- m_t << " <imagedata";
- if (!img->width().isEmpty())
- {
- m_t << " width=\"";
- filter(img->width());
- m_t << "\"";
- }
- else
- {
- m_t << " width=\"50%\"";
- }
- if (!img->height().isEmpty())
- {
- m_t << " depth=\"";
- filter(img->height());
- m_t << "\"";
- }
- m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << "\">";
- m_t << "</imagedata>" << endl;
- m_t << " </imageobject>" << endl;
- m_t << " </mediaobject>" << endl;
- m_t << " </figure>" << endl;
- // copy the image to the output dir
QCString m_file;
bool ambig;
FileDef *fd=findFileDef(Doxygen::imageNameDict, baseName, ambig);
@@ -1028,6 +1035,8 @@ void DocbookDocVisitor::visitPre(DocParamSect *s)
}
m_t << " </title>" << endl;
m_t << " <tgroup cols=\"2\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
+ m_t << " <colspec colwidth=\"1*\"/>" << endl;
+ m_t << " <colspec colwidth=\"4*\"/>" << endl;
m_t << " <tbody>" << endl;
}
@@ -1203,7 +1212,7 @@ void DocbookDocVisitor::popEnabled()
delete v;
}
-void DocbookDocVisitor::writeMscFile(const QCString &baseName)
+void DocbookDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s)
{
QCString shortName = baseName;
int i;
@@ -1213,13 +1222,12 @@ void DocbookDocVisitor::writeMscFile(const QCString &baseName)
}
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_BITMAP);
- m_t << " <imagedata";
- m_t << " width=\"50%\"";
- m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << ".png" << "\">";
- m_t << "</imagedata>" << endl;
+ visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+ visitCaption(this, s->children());
+ visitPostEnd(m_t, s->hasCaption());
}
-void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName)
+void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName, DocVerbatim *s)
{
QCString shortName = baseName;
int i;
@@ -1229,10 +1237,9 @@ void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName)
}
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
generatePlantUMLOutput(baseName,outDir,PUML_BITMAP);
- m_t << " <imagedata";
- m_t << " width=\"50%\"";
- m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << ".png" << "\">";
- m_t << "</imagedata>" << endl;
+ visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+ visitCaption(this, s->children());
+ visitPostEnd(m_t, s->hasCaption());
}
void DocbookDocVisitor::startMscFile(const QCString &fileName,
@@ -1255,50 +1262,17 @@ void DocbookDocVisitor::startMscFile(const QCString &fileName,
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP);
m_t << "<para>" << endl;
- m_t << " <figure>" << endl;
- m_t << " <title></title>" << endl;
- m_t << " <mediaobject>" << endl;
- m_t << " <imageobject>" << endl;
- m_t << " <imagedata";
- if (!width.isEmpty())
- {
- m_t << " width=\"";
- m_t << width;
- m_t << "\"";
- }
- else
- {
- m_t << " width=\"50%\"";
- }
- if (!height.isEmpty())
- {
- m_t << " depth=\"";
- m_t << height;
- m_t << "\"";
- }
- m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << ".png" << "\">";
- m_t << "</imagedata>" << endl;
- m_t << " </imageobject>" << endl;
- if (hasCaption)
- {
- m_t << " <caption>" << endl;
- }
+ visitPreStart(m_t, hasCaption, baseName + ".png", width, height);
}
void DocbookDocVisitor::endMscFile(bool hasCaption)
{
if (m_hide) return;
- m_t << "endl";
- if (hasCaption)
- {
- m_t << " </caption>" << endl;
- }
- m_t << " </mediaobject>" << endl;
- m_t << " </figure>" << endl;
+ visitPostEnd(m_t, hasCaption);
m_t << "</para>" << endl;
}
-void DocbookDocVisitor::writeDiaFile(const QCString &baseName)
+void DocbookDocVisitor::writeDiaFile(const QCString &baseName, DocVerbatim *s)
{
QCString shortName = baseName;
int i;
@@ -1308,9 +1282,9 @@ void DocbookDocVisitor::writeDiaFile(const QCString &baseName)
}
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
writeDiaGraphFromFile(baseName+".dia",outDir,shortName,DIA_BITMAP);
- m_t << " <imagedata";
- m_t << " align=\"center\" fileref=\"" << shortName << ".png" << "\">";
- m_t << "</imagedata>" << endl;
+ visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+ visitCaption(this, s->children());
+ visitPostEnd(m_t, s->hasCaption());
}
void DocbookDocVisitor::startDiaFile(const QCString &fileName,
@@ -1333,46 +1307,17 @@ void DocbookDocVisitor::startDiaFile(const QCString &fileName,
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP);
m_t << "<para>" << endl;
- m_t << " <figure>" << endl;
- m_t << " <title></title>" << endl;
- m_t << " <mediaobject>" << endl;
- m_t << " <imageobject>" << endl;
- m_t << " <imagedata";
- if (!width.isEmpty())
- {
- m_t << " width=\"";
- m_t << width;
- m_t << "\"";
- }
- else if (!height.isEmpty())
- {
- m_t << " depth=\"";
- m_t << height;
- m_t << "\"";
- }
- m_t << " align=\"center\" fileref=\"" << baseName << ".png" << "\">";
- m_t << "</imagedata>" << endl;
- m_t << " </imageobject>" << endl;
- if (hasCaption)
- {
- m_t << " <caption>" << endl;
- }
+ visitPreStart(m_t, hasCaption, baseName + ".png", width, height);
}
void DocbookDocVisitor::endDiaFile(bool hasCaption)
{
if (m_hide) return;
- m_t << "endl";
- if (hasCaption)
- {
- m_t << " </caption>" << endl;
- }
- m_t << " </mediaobject>" << endl;
- m_t << " </figure>" << endl;
+ visitPostEnd(m_t, hasCaption);
m_t << "</para>" << endl;
}
-void DocbookDocVisitor::writeDotFile(const QCString &baseName)
+void DocbookDocVisitor::writeDotFile(const QCString &baseName, DocVerbatim *s)
{
QCString shortName = baseName;
int i;
@@ -1383,11 +1328,9 @@ void DocbookDocVisitor::writeDotFile(const QCString &baseName)
QCString outDir = Config_getString("DOCBOOK_OUTPUT");
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
writeDotGraphFromFile(baseName+".dot",outDir,shortName,GOF_BITMAP);
- m_t << " <imagedata";
- //If no width is specified use default value for PDF rendering
- m_t << " width=\"50%\"";
- m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << shortName << "." << imgExt << "\">";
- m_t << "</imagedata>" << endl;
+ visitPreStart(m_t, s->hasCaption(), baseName + ".dot", s->width(),s->height());
+ visitCaption(this, s->children());
+ visitPostEnd(m_t, s->hasCaption());
}
void DocbookDocVisitor::startDotFile(const QCString &fileName,
@@ -1411,46 +1354,14 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName,
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
writeDotGraphFromFile(fileName,outDir,baseName,GOF_BITMAP);
m_t << "<para>" << endl;
- m_t << " <figure>" << endl;
- m_t << " <title></title>" << endl;
- m_t << " <mediaobject>" << endl;
- m_t << " <imageobject>" << endl;
- m_t << " <imagedata";
- if (!width.isEmpty())
- {
- m_t << " width=\"";
- m_t << width;
- m_t << "\"";
- }
- else
- {
- m_t << " width=\"50%\"";
- }
- if (!height.isEmpty())
- {
- m_t << " depth=\"";
- m_t << height;
- m_t << "\"";
- }
- m_t << " align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << baseName << "." << imgExt << "\">";
- m_t << "</imagedata>" << endl;
- m_t << " </imageobject>" << endl;
- if (hasCaption)
- {
- m_t << " <caption>" << endl;
- }
+ visitPreStart(m_t, hasCaption, baseName + "." + imgExt, width, height);
}
void DocbookDocVisitor::endDotFile(bool hasCaption)
{
if (m_hide) return;
- m_t << "endl";
- if (hasCaption)
- {
- m_t << " </caption>" << endl;
- }
- m_t << " </mediaobject>" << endl;
- m_t << " </figure>" << endl;
+ m_t << endl;
+ visitPostEnd(m_t, hasCaption);
m_t << "</para>" << endl;
}
diff --git a/src/docbookvisitor.h b/src/docbookvisitor.h
index dd67aba..3796d8a 100644
--- a/src/docbookvisitor.h
+++ b/src/docbookvisitor.h
@@ -147,16 +147,16 @@ class DocbookDocVisitor : public DocVisitor
void startMscFile(const QCString &fileName,const QCString &width,
const QCString &height, bool hasCaption);
void endMscFile(bool hasCaption);
- void writeMscFile(const QCString &fileName);
+ void writeMscFile(const QCString &fileName, DocVerbatim *s);
void startDiaFile(const QCString &fileName,const QCString &width,
const QCString &height, bool hasCaption);
void endDiaFile(bool hasCaption);
- void writeDiaFile(const QCString &fileName);
+ void writeDiaFile(const QCString &fileName, DocVerbatim *s);
void startDotFile(const QCString &fileName,const QCString &width,
const QCString &height, bool hasCaption);
void endDotFile(bool hasCaption);
- void writeDotFile(const QCString &fileName);
- void writePlantUMLFile(const QCString &fileName);
+ void writeDotFile(const QCString &fileName, DocVerbatim *s);
+ void writePlantUMLFile(const QCString &fileName, DocVerbatim *s);
//--------------------------------------
// state variables
//--------------------------------------
diff --git a/src/docparser.cpp b/src/docparser.cpp
index b21c15c..9a120dc 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -232,6 +232,27 @@ static void docParserPopContext(bool keepParamInfo=FALSE)
//---------------------------------------------------------------------------
+// replaces { with < and } with > and also
+// replaces &gt; with < and &gt; with > within string s
+static void unescapeCRef(QCString &s)
+{
+ char *p = s.data();
+ if (p)
+ {
+ char c;
+ while ((c=*p))
+ {
+ if (c=='{') c='<'; else if (c=='}') c='>';
+ *p++=c;
+ }
+ }
+
+ s=substitute(s,"&lt;","<");
+ s=substitute(s,"&gt;",">");
+}
+
+//---------------------------------------------------------------------------
+
/*! search for an image in the imageNameDict and if found
* copies the image to the output directory (which depends on the \a type
* parameter).
@@ -819,7 +840,6 @@ static bool defaultHandleToken(DocNode *parent,int tok,
QList<DocNode> &children,bool
handleWord=TRUE);
-
static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
const QCString &cmdName)
{
@@ -1027,11 +1047,11 @@ static void handleUnclosedStyleCommands()
}
}
-static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
+static void handleLinkedWord(DocNode *parent,QList<DocNode> &children,bool ignoreAutoLinkFlag=FALSE)
{
QCString name = linkToText(SrcLangExt_Unknown,g_token->name,TRUE);
static bool autolinkSupport = Config_getBool("AUTOLINK_SUPPORT");
- if (!autolinkSupport) // no autolinking -> add as normal word
+ if (!autolinkSupport && !ignoreAutoLinkFlag) // no autolinking -> add as normal word
{
children.append(new DocWord(parent,name));
return;
@@ -1113,7 +1133,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
// special case, where matching Foo: fails to be an Obj-C reference,
// but Foo itself might be linkable.
g_token->name=g_token->name.left(len-1);
- handleLinkedWord(parent,children);
+ handleLinkedWord(parent,children,ignoreAutoLinkFlag);
children.append(new DocWord(parent,":"));
}
else if (!g_insideHtmlLink && (cd=getClass(g_token->name+"-p")))
@@ -1220,10 +1240,84 @@ static DocAnchor *handleAnchor(DocNode *parent)
}
+/* Helper function that deals with the title, width, and height arguments of various commands.
+ * @param[in] cmd Command id for which to extract caption and size info.
+ * @param[in] parent Parent node, owner of the children list passed as
+ * the third argument.
+ * @param[in] children The list of child nodes to which the node representing
+ * the token can be added.
+ * @param[out] width the extracted width specifier
+ * @param[out] height the extracted height specifier
+ */
+static void defaultHandleTitleAndSize(const int cmd, DocNode *parent, QList<DocNode> &children, QCString &width,QCString &height)
+{
+ g_nodeStack.push(parent);
+
+ // parse title
+ doctokenizerYYsetStateTitle();
+ int tok;
+ while ((tok=doctokenizerYYlex()))
+ {
+ if (tok==TK_WORD && (g_token->name=="width=" || g_token->name=="height="))
+ {
+ // special case: no title, but we do have a size indicator
+ doctokenizerYYsetStateTitleAttrValue();
+ // strip =
+ g_token->name = g_token->name.left(g_token->name.length()-1);
+ break;
+ }
+ if (!defaultHandleToken(parent,tok,children))
+ {
+ switch (tok)
+ {
+ case TK_COMMAND:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\%s",
+ qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data());
+ break;
+ case TK_SYMBOL:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
+ qPrint(g_token->name));
+ break;
+ default:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
+ tokToString(tok));
+ break;
+ }
+ }
+ }
+ // parse size attributes
+ if (tok == 0)
+ {
+ tok=doctokenizerYYlex();
+ }
+ while (tok==TK_WORD) // there are values following the title
+ {
+ if (g_token->name=="width")
+ {
+ width = g_token->chars;
+ }
+ else if (g_token->name=="height")
+ {
+ height = g_token->chars;
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option '%s' after \\%s command, expected 'width' or 'height'",
+ qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data());
+ }
+ tok=doctokenizerYYlex();
+ }
+ doctokenizerYYsetStatePara();
+
+ handlePendingStyleCommands(parent,children);
+ DocNode *n=g_nodeStack.pop();
+ ASSERT(n==parent);
+}
+
/* Helper function that deals with the most common tokens allowed in
- * title like sections.
- * @param parent Parent node, owner of the children list passed as
- * the third argument.
+ * title like sections.
+ * @param parent Parent node, owner of the children list passed as
+ * the third argument.
* @param tok The token to process.
* @param children The list of child nodes to which the node representing
* the token can be added.
@@ -1410,6 +1504,17 @@ reparsetoken:
doctokenizerYYsetStatePara();
}
break;
+ case CMD_SETSCOPE:
+ {
+ QCString scope;
+ doctokenizerYYsetStateSetScope();
+ doctokenizerYYlex();
+ scope = g_token->name;
+ g_context = scope;
+ //printf("Found scope='%s'\n",scope.data());
+ doctokenizerYYsetStatePara();
+ }
+ break;
default:
return FALSE;
}
@@ -2089,6 +2194,11 @@ DocFormula::DocFormula(DocNode *parent,int id) :
m_name.sprintf("form_%d",m_id);
m_text = formula->getFormulaText();
}
+ else // wrong \form#<n> command
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Wrong formula id %d",id);
+ m_id = -1;
+ }
}
//---------------------------------------------------------------------------
@@ -2366,7 +2476,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
// compound->definitionType());
return;
}
- else if (compound->definitionType()==Definition::TypeFile &&
+ else if (compound && compound->definitionType()==Definition::TypeFile &&
((FileDef*)compound)->generateSourceFile()
) // undocumented file that has source code we can link to
{
@@ -2466,6 +2576,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
ASSERT(!target.isEmpty());
m_relPath = g_relPath;
CiteInfo *cite = Doxygen::citeDict->find(target);
+ //printf("cite=%p text='%s' numBibFiles=%d\n",cite,cite?cite->text.data():"<null>",numBibFiles);
if (numBibFiles>0 && cite && !cite->text.isEmpty()) // ref to citation
{
m_text = cite->text;
@@ -2477,17 +2588,28 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
return;
}
m_text = target;
- warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\cite command",
- qPrint(target));
+ if (numBibFiles==0)
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"\\cite command found but no bib files specified via CITE_BIB_FILES!");
+ }
+ else if (cite==0)
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\cite command",
+ qPrint(target));
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"\\cite command to '%s' does not have an associated number",
+ qPrint(target));
+ }
}
//---------------------------------------------------------------------------
DocLink::DocLink(DocNode *parent,const QCString &target)
{
- m_parent = parent;
- Definition *compound;
- //PageInfo *page;
+ m_parent = parent;
+ Definition *compound = 0;
QCString anchor;
m_refText = target;
m_relPath = g_relPath;
@@ -2504,7 +2626,7 @@ DocLink::DocLink(DocNode *parent,const QCString &target)
m_file = compound->getOutputFileBase();
m_ref = compound->getReference();
}
- else if (compound->definitionType()==Definition::TypeFile &&
+ else if (compound && compound->definitionType()==Definition::TypeFile &&
((FileDef*)compound)->generateSourceFile()
) // undocumented file that has source code we can link to
{
@@ -2619,53 +2741,7 @@ DocDotFile::DocDotFile(DocNode *parent,const QCString &name,const QCString &cont
void DocDotFile::parse()
{
- g_nodeStack.push(this);
- DBG(("DocDotFile::parse() start\n"));
-
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\dotfile",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- tok=doctokenizerYYlex();
- while (tok==TK_WORD) // there are values following the title
- {
- if (g_token->name=="width")
- {
- m_width=g_token->chars;
- }
- else if (g_token->name=="height")
- {
- m_height=g_token->chars;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
- qPrint(g_token->name));
- }
- tok=doctokenizerYYlex();
- }
- ASSERT(tok==0);
- doctokenizerYYsetStatePara();
- handlePendingStyleCommands(this,m_children);
+ defaultHandleTitleAndSize(CMD_DOTFILE,this,m_children,m_width,m_height);
bool ambig;
FileDef *fd = findFileDef(Doxygen::dotFileNameDict,m_name,ambig);
@@ -2689,10 +2765,6 @@ void DocDotFile::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"included dot file %s is not found "
"in any of the paths specified via DOTFILE_DIRS!",qPrint(m_name));
}
-
- DBG(("DocDotFile::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
}
DocMscFile::DocMscFile(DocNode *parent,const QCString &name,const QCString &context) :
@@ -2703,53 +2775,7 @@ DocMscFile::DocMscFile(DocNode *parent,const QCString &name,const QCString &cont
void DocMscFile::parse()
{
- g_nodeStack.push(this);
- DBG(("DocMscFile::parse() start\n"));
-
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\mscfile",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- tok=doctokenizerYYlex();
- while (tok==TK_WORD) // there are values following the title
- {
- if (g_token->name=="width")
- {
- m_width=g_token->chars;
- }
- else if (g_token->name=="height")
- {
- m_height=g_token->chars;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
- qPrint(g_token->name));
- }
- tok=doctokenizerYYlex();
- }
- ASSERT(tok==0);
- doctokenizerYYsetStatePara();
- handlePendingStyleCommands(this,m_children);
+ defaultHandleTitleAndSize(CMD_MSCFILE,this,m_children,m_width,m_height);
bool ambig;
FileDef *fd = findFileDef(Doxygen::mscFileNameDict,m_name,ambig);
@@ -2773,10 +2799,6 @@ void DocMscFile::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"included msc file %s is not found "
"in any of the paths specified via MSCFILE_DIRS!",qPrint(m_name));
}
-
- DBG(("DocMscFile::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
}
//---------------------------------------------------------------------------
@@ -2789,53 +2811,7 @@ DocDiaFile::DocDiaFile(DocNode *parent,const QCString &name,const QCString &cont
void DocDiaFile::parse()
{
- g_nodeStack.push(this);
- DBG(("DocDiaFile::parse() start\n"));
-
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\diafile",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- tok=doctokenizerYYlex();
- while (tok==TK_WORD) // there are values following the title
- {
- if (g_token->name=="width")
- {
- m_width=g_token->chars;
- }
- else if (g_token->name=="height")
- {
- m_height=g_token->chars;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
- qPrint(g_token->name));
- }
- tok=doctokenizerYYlex();
- }
- ASSERT(tok==0);
- doctokenizerYYsetStatePara();
- handlePendingStyleCommands(this,m_children);
+ defaultHandleTitleAndSize(CMD_DIAFILE,this,m_children,m_width,m_height);
bool ambig;
FileDef *fd = findFileDef(Doxygen::diaFileNameDict,m_name,ambig);
@@ -2859,10 +2835,6 @@ void DocDiaFile::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"included dia file %s is not found "
"in any of the paths specified via DIAFILE_DIRS!",qPrint(m_name));
}
-
- DBG(("DocDiaFile::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
}
//---------------------------------------------------------------------------
@@ -2886,7 +2858,7 @@ void DocVhdlFlow::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\mscfile",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\vhdlflow",
qPrint(g_token->name));
break;
case TK_SYMBOL:
@@ -2925,66 +2897,7 @@ DocImage::DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString
void DocImage::parse()
{
- g_nodeStack.push(this);
- DBG(("DocImage::parse() start\n"));
-
- // parse title
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (tok==TK_WORD && (g_token->name=="width=" || g_token->name=="height="))
- {
- // special case: no title, but we do have a size indicator
- doctokenizerYYsetStateTitleAttrValue();
- // strip =
- g_token->name=g_token->name.left(g_token->name.length()-1);
- break;
- }
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\image",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- // parse size attributes
- tok=doctokenizerYYlex();
- while (tok==TK_WORD) // there are values following the title
- {
- if (g_token->name=="width")
- {
- m_width=g_token->chars;
- }
- else if (g_token->name=="height")
- {
- m_height=g_token->chars;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
- qPrint(g_token->name));
- }
- tok=doctokenizerYYlex();
- }
- doctokenizerYYsetStatePara();
-
- handlePendingStyleCommands(this,m_children);
- DBG(("DocImage::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
+ defaultHandleTitleAndSize(CMD_IMAGE,this,m_children,m_width,m_height);
}
@@ -3308,7 +3221,6 @@ int DocIndexEntry::parse()
break;
}
}
- if (tok!=0) retval=tok;
doctokenizerYYsetStatePara();
m_entry = m_entry.stripWhiteSpace();
endindexentry:
@@ -5049,7 +4961,7 @@ void DocPara::handleImage(const QCString &cmdName)
"%s is not valid",
qPrint(imgType),qPrint(cmdName));
return;
- }
+ }
doctokenizerYYsetStateFile();
tok=doctokenizerYYlex();
doctokenizerYYsetStatePara();
@@ -5065,55 +4977,8 @@ void DocPara::handleImage(const QCString &cmdName)
img->parse();
}
-void DocPara::handleDotFile(const QCString &cmdName)
-{
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStateFile();
- tok=doctokenizerYYlex();
- doctokenizerYYsetStatePara();
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- QCString name = g_token->name;
- DocDotFile *df = new DocDotFile(this,name,g_context);
- m_children.append(df);
- df->parse();
-}
-
-void DocPara::handleMscFile(const QCString &cmdName)
-{
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStateFile();
- tok=doctokenizerYYlex();
- doctokenizerYYsetStatePara();
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- QCString name = g_token->name;
- DocMscFile *df = new DocMscFile(this,name,g_context);
- m_children.append(df);
- df->parse();
-}
-
-void DocPara::handleDiaFile(const QCString &cmdName)
+template<class T>
+void DocPara::handleFile(const QCString &cmdName)
{
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
@@ -5132,7 +4997,7 @@ void DocPara::handleDiaFile(const QCString &cmdName)
return;
}
QCString name = g_token->name;
- DocDiaFile *df = new DocDiaFile(this,name,g_context);
+ T *df = new T(this,name,g_context);
m_children.append(df);
df->parse();
}
@@ -5298,6 +5163,10 @@ int DocPara::handleStartCode()
{
lang="."+lang;
}
+ if (g_xmlComment)
+ {
+ g_token->verb = substitute(substitute(g_token->verb,"&lt;","<"),"&gt;",">");
+ }
// search for the first non-whitespace line, index is stored in li
int i=0,li=0,l=g_token->verb.length();
while (i<l && (g_token->verb.at(i)==' ' || g_token->verb.at(i)=='\n'))
@@ -5563,18 +5432,32 @@ int DocPara::handleCommand(const QCString &cmdName)
break;
case CMD_DOT:
{
+ DocVerbatim *dv = new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Dot,g_isExample,g_exampleName);
+ doctokenizerYYsetStatePara();
+ QCString width,height;
+ defaultHandleTitleAndSize(CMD_DOT,dv,dv->children(),width,height);
doctokenizerYYsetStateDot();
retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Dot,g_isExample,g_exampleName));
+ dv->setText(g_token->verb);
+ dv->setWidth(width);
+ dv->setHeight(height);
+ m_children.append(dv);
if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"dot section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
case CMD_MSC:
{
+ DocVerbatim *dv = new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Msc,g_isExample,g_exampleName);
+ doctokenizerYYsetStatePara();
+ QCString width,height;
+ defaultHandleTitleAndSize(CMD_MSC,dv,dv->children(),width,height);
doctokenizerYYsetStateMsc();
retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Msc,g_isExample,g_exampleName));
+ dv->setText(g_token->verb);
+ dv->setWidth(width);
+ dv->setHeight(height);
+ m_children.append(dv);
if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"msc section ended without end marker");
doctokenizerYYsetStatePara();
}
@@ -5582,15 +5465,26 @@ int DocPara::handleCommand(const QCString &cmdName)
case CMD_STARTUML:
{
static QCString jarPath = Config_getString("PLANTUML_JAR_PATH");
+ doctokenizerYYsetStatePlantUMLOpt();
+ retval = doctokenizerYYlex();
+ QCString plantFile(g_token->sectionId);
+ DocVerbatim *dv = new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::PlantUML,FALSE,plantFile);
+ doctokenizerYYsetStatePara();
+ QCString width,height;
+ defaultHandleTitleAndSize(CMD_STARTUML,dv,dv->children(),width,height);
doctokenizerYYsetStatePlantUML();
retval = doctokenizerYYlex();
+ dv->setText(g_token->verb);
+ dv->setWidth(width);
+ dv->setHeight(height);
if (jarPath.isEmpty())
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"ignoring startuml command because PLANTUML_JAR_PATH is not set");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"ignoring \\startuml command because PLANTUML_JAR_PATH is not set");
+ delete dv;
}
else
{
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::PlantUML,FALSE,g_token->sectionId));
+ m_children.append(dv);
}
if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"startuml section ended without end marker");
doctokenizerYYsetStatePara();
@@ -5708,16 +5602,16 @@ int DocPara::handleCommand(const QCString &cmdName)
handleImage(cmdName);
break;
case CMD_DOTFILE:
- handleDotFile(cmdName);
+ handleFile<DocDotFile>(cmdName);
break;
case CMD_VHDLFLOW:
handleVhdlFlow();
break;
case CMD_MSCFILE:
- handleMscFile(cmdName);
+ handleFile<DocMscFile>(cmdName);
break;
case CMD_DIAFILE:
- handleDiaFile(cmdName);
+ handleFile<DocDiaFile>(cmdName);
break;
case CMD_LINK:
handleLink(cmdName,FALSE);
@@ -5963,6 +5857,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
case XML_SUMMARY:
case XML_REMARKS:
+ case XML_EXAMPLE:
g_xmlComment=TRUE;
// fall through
case XML_VALUE:
@@ -5972,7 +5867,6 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
retval = TK_NEWPARA;
}
break;
- case XML_EXAMPLE:
case XML_DESCRIPTION:
if (insideTable(this))
{
@@ -5985,6 +5879,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
case XML_PARAM:
case XML_TYPEPARAM:
{
+ g_xmlComment=TRUE;
QCString paramName;
if (findAttribute(tagHtmlAttribs,"name",&paramName))
{
@@ -6028,9 +5923,11 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
break;
case XML_EXCEPTION:
{
+ g_xmlComment=TRUE;
QCString exceptName;
if (findAttribute(tagHtmlAttribs,"cref",&exceptName))
{
+ unescapeCRef(exceptName);
retval = handleParamSection(exceptName,DocParamSect::Exception,TRUE);
}
else
@@ -6055,6 +5952,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
break;
case XML_RETURNS:
+ g_xmlComment=TRUE;
retval = handleSimpleSection(DocSimpleSect::Return,TRUE);
g_hasReturnCommand=TRUE;
break;
@@ -6075,12 +5973,13 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
//printf("XML_SEE: empty tag=%d\n",g_token->emptyTag);
if (findAttribute(tagHtmlAttribs,"cref",&cref))
{
+ unescapeCRef(cref);
if (g_token->emptyTag) // <see cref="..."/> style
{
bool inSeeBlock = g_inSeeBlock;
g_token->name = cref;
g_inSeeBlock = TRUE;
- handleLinkedWord(this,m_children);
+ handleLinkedWord(this,m_children,TRUE);
g_inSeeBlock = inSeeBlock;
}
else // <see cref="...">...</see> style
@@ -6106,9 +6005,11 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
break;
case XML_SEEALSO:
{
+ g_xmlComment=TRUE;
QCString cref;
if (findAttribute(tagHtmlAttribs,"cref",&cref))
{
+ unescapeCRef(cref);
// Look for an existing "see" section
DocSimpleSect *ss=0;
QListIterator<DocNode> cli(m_children);
@@ -6163,6 +6064,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
case XML_INCLUDE:
case XML_PERMISSION:
// These tags are defined in .Net but are currently unsupported
+ g_xmlComment=TRUE;
break;
case HTML_UNKNOWN:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported xml/html tag <%s> found", qPrint(tagName));
@@ -6786,17 +6688,13 @@ int DocSection::parse()
}
else if ((m_level<=1+Doxygen::subpageNestingLevel && retval==RetVal_Subsubsection) ||
(m_level<=2+Doxygen::subpageNestingLevel && retval==RetVal_Paragraph)
- )
+ )
{
- int level;
- if (retval==RetVal_Subsection) level=2;
- else if (retval==RetVal_Subsubsection) level=3;
- else level=4;
+ int level = (retval==RetVal_Subsubsection) ? 3 : 4;
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected %s "
"command found inside %s!",
sectionLevelToName[level],sectionLevelToName[m_level]);
retval=0; // stop parsing
-
}
else
{
@@ -7047,23 +6945,62 @@ static QCString extractCopyDocId(const char *data, uint &j, uint len)
return id;
}
+// macro to check if the input starts with a specific command.
+// note that data[i] should point to the start of the command (\ or @ character)
+// and the sizeof(str) returns the size of str including the '\0' terminator;
+// a fact we abuse to skip over the start of the command character.
+#define CHECK_FOR_COMMAND(str,action) \
+ do if ((i+sizeof(str)<len) && qstrncmp(data+i+1,str,sizeof(str)-1)==0) \
+ { j=i+sizeof(str); action; } while(0)
+
static uint isCopyBriefOrDetailsCmd(const char *data, uint i,uint len,bool &brief)
{
int j=0;
if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
{
- if (i+10<len && qstrncmp(data+i+1,"copybrief",9)==0) // @copybrief or \copybrief
- {
- j=i+10;
- brief=TRUE;
- }
- else if (i+12<len && qstrncmp(data+i+1,"copydetails",11)==0) // @copydetails or \copydetails
+ CHECK_FOR_COMMAND("copybrief",brief=TRUE); // @copybrief or \copybrief
+ CHECK_FOR_COMMAND("copydetails",brief=FALSE); // @copydetails or \copydetails
+ }
+ return j;
+}
+
+static uint isVerbatimSection(const char *data,uint i,uint len,QCString &endMarker)
+{
+ int j=0;
+ if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
+ {
+ CHECK_FOR_COMMAND("dot",endMarker="enddot");
+ CHECK_FOR_COMMAND("code",endMarker="endcode");
+ CHECK_FOR_COMMAND("msc",endMarker="endmsc");
+ CHECK_FOR_COMMAND("verbatim",endMarker="endverbatim");
+ CHECK_FOR_COMMAND("latexonly",endMarker="endlatexonly");
+ CHECK_FOR_COMMAND("htmlonly",endMarker="endhtmlonly");
+ CHECK_FOR_COMMAND("xmlonly",endMarker="endxmlonly");
+ CHECK_FOR_COMMAND("rtfonly",endMarker="endrtfonly");
+ CHECK_FOR_COMMAND("manonly",endMarker="endmanonly");
+ CHECK_FOR_COMMAND("docbookonly",endMarker="enddocbookonly");
+ CHECK_FOR_COMMAND("startuml",endMarker="enduml");
+ }
+ //printf("isVerbatimSection(%s)=%d)\n",QCString(&data[i]).left(10).data(),j);
+ return j;
+}
+
+static uint skipToEndMarker(const char *data,uint i,uint len,const QCString &endMarker)
+{
+ while (i<len)
+ {
+ if ((data[i]=='@' || data[i]=='\\') && // start of command character
+ (i==0 || (data[i-1]!='@' && data[i-1]!='\\'))) // that is not escaped
{
- j=i+12;
- brief=FALSE;
+ if (i+endMarker.length()+1<=len && qstrncmp(data+i+1,endMarker,endMarker.length())==0)
+ {
+ return i+endMarker.length()+1;
+ }
}
+ i++;
}
- return j;
+ // oops no endmarker found...
+ return i<len ? i+1 : len;
}
static QCString processCopyDoc(const char *data,uint &len)
@@ -7098,7 +7035,7 @@ static QCString processCopyDoc(const char *data,uint &len)
uint l=brief.length();
buf.addStr(processCopyDoc(brief,l));
}
- else
+ else
{
uint l=doc.length();
buf.addStr(processCopyDoc(doc,l));
@@ -7112,13 +7049,30 @@ static QCString processCopyDoc(const char *data,uint &len)
isBrief?"brief":"details",id.data());
}
}
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,
+ "@copy%s or @copydoc target '%s' not found", isBrief?"brief":"details",
+ id.data());
+ }
// skip over command
i=j;
}
else
{
- buf.addChar(c);
- i++;
+ QCString endMarker;
+ uint k = isVerbatimSection(data,i,len,endMarker);
+ if (k>0)
+ {
+ int orgPos = i;
+ i=skipToEndMarker(data,k,len,endMarker);
+ buf.addStr(data+orgPos,i-orgPos);
+ }
+ else
+ {
+ buf.addChar(c);
+ i++;
+ }
}
}
else // not a command, just copy
diff --git a/src/docparser.h b/src/docparser.h
index 3dc3d84..e8ef754 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -447,6 +447,14 @@ class DocVerbatim : public DocNode
QCString relPath() const { return m_relPath; }
QCString language() const { return m_lang; }
bool isBlock() const { return m_isBlock; }
+ bool hasCaption() const { return !m_children.isEmpty(); }
+ QCString width() const { return m_width; }
+ QCString height() const { return m_height; }
+ const QList<DocNode> &children() const { return m_children; }
+ QList<DocNode> &children() { return m_children; }
+ void setText(const QCString &t) { m_text=t; }
+ void setWidth(const QCString &w) { m_width=w; }
+ void setHeight(const QCString &h) { m_height=h; }
private:
QCString m_context;
@@ -457,6 +465,9 @@ class DocVerbatim : public DocNode
QCString m_relPath;
QCString m_lang;
bool m_isBlock;
+ QCString m_width;
+ QCString m_height;
+ QList<DocNode> m_children;
};
@@ -686,7 +697,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode
private:
HtmlAttribList m_attribs;
QCString m_name;
- Type m_type;
+ Type m_type;
QCString m_width;
QCString m_height;
QCString m_relPath;
@@ -1114,9 +1125,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
int direction);
void handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t);
void handleImage(const QCString &cmdName);
- void handleDotFile(const QCString &cmdName);
- void handleMscFile(const QCString &cmdName);
- void handleDiaFile(const QCString &cmdName);
+ template<class T> void handleFile(const QCString &cmdName);
void handleInclude(const QCString &cmdName,DocInclude::Type t);
void handleLink(const QCString &cmdName,bool isJavaLink);
void handleCite();
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index c95230b..ead8da1 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -161,5 +161,7 @@ void doctokenizerYYsetStateSnippet();
void doctokenizerYYstartAutoList();
void doctokenizerYYendAutoList();
void doctokenizerYYsetStatePlantUML();
+void doctokenizerYYsetStateSetScope();
+void doctokenizerYYsetStatePlantUMLOpt();
#endif
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index e0e72a7..d018450 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -49,6 +49,7 @@ static int g_inputPos = 0;
static const char *g_inputString;
static QCString g_fileName;
static bool g_insidePre;
+static int g_sharpCount=0;
// context for section finding phase
static Definition *g_definition;
@@ -320,9 +321,9 @@ static int yyread(char *buf,int max_size)
}
//--------------------------------------------------------------------------
-#define REAL_YY_DECL int doctokenizerYYlex (void)
-#define YY_DECL static int local_doctokinizer(void)
-#define LOCAL_YY_DECL local_doctokinizer()
+//#define REAL_YY_DECL int doctokenizerYYlex (void)
+//#define YY_DECL static int local_doctokinizer(void)
+//#define LOCAL_YY_DECL local_doctokinizer()
%}
@@ -370,12 +371,14 @@ SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
FUNCARG "("{FUNCPART}")"({BLANK}*("volatile"|"const"){BLANK})?
+FUNCARG2 "("{FUNCPART}")"({BLANK}*("volatile"|"const"))?
OPNEW {BLANK}+"new"({BLANK}*"[]")?
OPDEL {BLANK}+"delete"({BLANK}*"[]")?
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
OPCAST {BLANK}+[^<(\r\n.,][^(\r\n.,]*
OPMASK ({BLANK}*{OPNORM}{FUNCARG})
OPMASKOPT ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
+OPMASKOP2 ({BLANK}*{OPNORM}{FUNCARG2}?)|({OPCAST}{FUNCARG2})
LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
@@ -390,9 +393,10 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
-REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}?
+REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG2}?
REFWORD3 ({ID}":")*{ID}":"?
-REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
+REFWORD4 (({SCOPEPRE}*"operator"{OPMASKOP2})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOP2})){CVSPEC}?
+REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
%option noyywrap
%option yylineno
@@ -433,6 +437,8 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
%x St_SkipTitle
%x St_Anchor
%x St_Snippet
+%x St_SetScope
+%x St_SetScopeEnd
%x St_Sections
%s St_SecLabel1
@@ -853,14 +859,28 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
<St_Msc>. { /* msc text */
g_token->verb+=yytext;
}
-<St_PlantUMLOpt>\n {
- g_token->sectionId=g_token->sectionId.stripWhiteSpace();
- BEGIN(St_PlantUML);
+<St_PlantUMLOpt>{BLANK}*"{"[^}]*"}" { // case 1: file name is specified as {filename}
+ g_token->sectionId = QCString(yytext).stripWhiteSpace();
+ // skip curly brackets around the optional image name
+ g_token->sectionId = g_token->sectionId.mid(1,g_token->sectionId.length()-2).stripWhiteSpace();
+ return RetVal_OK;
+ }
+<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}+/{ID}"=" { // case 2: plain file name specified followed by an attribute
+ g_token->sectionId = QCString(yytext).stripWhiteSpace();
+ return RetVal_OK;
+ }
+<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}+/"\"" { // case 3: plain file name specified followed by a quoted title
+ g_token->sectionId = QCString(yytext).stripWhiteSpace();
+ return RetVal_OK;
}
-<St_PlantUMLOpt>["{}] { // skip curly brackets or quotes around the optional image name
+<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}*/\n { // case 4: plain file name specified without title or attributes
+ g_token->sectionId = QCString(yytext).stripWhiteSpace();
+ return RetVal_OK;
}
<St_PlantUMLOpt>. {
- g_token->sectionId += yytext;
+ g_token->sectionId = "";
+ unput(*yytext);
+ return RetVal_OK;
}
<St_PlantUML>{CMD}"enduml" {
return RetVal_OK;
@@ -872,7 +892,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
}
<St_Title>"\"" { // quoted title
BEGIN(St_TitleQ);
- }
+ }
<St_Title>[ \t]+ {
g_token->chars=yytext;
return TK_WHITESPACE;
@@ -897,6 +917,13 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
g_token->paramDir=TokenInfo::Unspecified;
return TK_COMMAND;
}
+<St_TitleN>{ID}"=" { /* attribute */
+ if (yytext[0]=='%') // strip % if present
+ g_token->name = &yytext[1];
+ else
+ g_token->name = yytext;
+ return TK_WORD;
+ }
<St_TitleN>{WORD1} |
<St_TitleN>{WORD2} { /* word */
if (yytext[0]=='%') // strip % if present
@@ -942,8 +969,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
}
<St_TitleA>{BLANK}*{ID}{BLANK}*"="{BLANK}* { // title attribute
g_token->name = yytext;
- g_token->name = g_token->name.left(
- g_token->name.find('=')).stripWhiteSpace();
+ g_token->name = g_token->name.left(g_token->name.find('=')).stripWhiteSpace();
BEGIN(St_TitleV);
}
<St_TitleV>[^ \t\r\n]+ { // attribute value
@@ -1009,6 +1035,34 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
<St_IntRef>{BLANK}+"\"" {
BEGIN(St_Ref2);
}
+<St_SetScope>{SCOPEMASK}{BLANK} {
+ g_token->name = yytext;
+ g_token->name = g_token->name.stripWhiteSpace();
+ return TK_WORD;
+ }
+<St_SetScope>{SCOPEMASK}"<" {
+ g_token->name = yytext;
+ g_token->name = g_token->name.stripWhiteSpace();
+ g_sharpCount=1;
+ BEGIN(St_SetScopeEnd);
+ }
+<St_SetScope>{BLANK} {
+ }
+<St_SetScopeEnd>"<" {
+ g_token->name += yytext;
+ g_sharpCount++;
+ }
+<St_SetScopeEnd>">" {
+ g_token->name += yytext;
+ g_sharpCount--;
+ if (g_sharpCount<=0)
+ {
+ return TK_WORD;
+ }
+ }
+<St_SetScopeEnd>. {
+ g_token->name += yytext;
+ }
<St_Ref2>"&"{ID}";" { /* symbol */
g_token->name = yytext;
return TK_SYMBOL;
@@ -1224,7 +1278,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
return TK_COMMAND;
}
<*>. {
- warn(g_fileName,yylineno,"Unexpected character `%s'",yytext);
+ warn(g_fileName,yylineno,"Unexpected character `%s'",yytext);
}
%%
@@ -1341,13 +1395,19 @@ void doctokenizerYYsetStateMsc()
BEGIN(St_Msc);
}
-void doctokenizerYYsetStatePlantUML()
+void doctokenizerYYsetStatePlantUMLOpt()
{
g_token->verb="";
g_token->sectionId="";
BEGIN(St_PlantUMLOpt);
}
+void doctokenizerYYsetStatePlantUML()
+{
+ g_token->verb="";
+ BEGIN(St_PlantUML);
+}
+
void doctokenizerYYsetStateParam()
{
BEGIN(St_Param);
@@ -1408,6 +1468,11 @@ void doctokenizerYYsetStateSnippet()
BEGIN(St_Snippet);
}
+void doctokenizerYYsetStateSetScope()
+{
+ BEGIN(St_SetScope);
+}
+
void doctokenizerYYcleanup()
{
yy_delete_buffer( YY_CURRENT_BUFFER );
@@ -1440,13 +1505,13 @@ void doctokenizerYYendAutoList()
g_autoListLevel--;
}
-REAL_YY_DECL
-{
- printlex(yy_flex_debug, TRUE, __FILE__, g_fileName);
- int retval = LOCAL_YY_DECL;
- printlex(yy_flex_debug, FALSE, __FILE__, g_fileName);
- return retval;
-}
+//REAL_YY_DECL
+//{
+// printlex(yy_flex_debug, TRUE, __FILE__, g_fileName);
+// int retval = LOCAL_YY_DECL;
+// printlex(yy_flex_debug, FALSE, __FILE__, g_fileName);
+// return retval;
+//}
#if !defined(YY_FLEX_SUBMINOR_VERSION)
extern "C" { // some bogus code to keep the compiler happy
void doctokenizerYYdummy() { yy_flex_realloc(0,0); }
diff --git a/src/dot.cpp b/src/dot.cpp
index 4638309..f9b4302 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -772,18 +772,18 @@ static bool checkDeliverables(const QCString &file1,
//--------------------------------------------------------------------
-/** Class representing a list of DotNode objects. */
-class DotNodeList : public QList<DotNode>
+inline int DotNode::findParent( DotNode *n )
{
- public:
- DotNodeList() : QList<DotNode>() {}
- ~DotNodeList() {}
- private:
- int compareValues(const DotNode *n1,const DotNode *n2) const
- {
- return qstricmp(n1->m_label,n2->m_label);
- }
-};
+ if ( !m_parents ) return -1;
+ return m_parents->find(n);
+}
+
+//--------------------------------------------------------------------
+
+int DotNodeList::compareValues(const DotNode *n1,const DotNode *n2) const
+{
+ return qstricmp(n1->m_label,n2->m_label);
+}
//--------------------------------------------------------------------
@@ -1908,7 +1908,7 @@ void DotNode::write(FTextStream &t,
bool reNumber
)
{
- //printf("DotNode::write(%d) name=%s this=%p written=%d\n",distance,m_label.data(),this,m_written);
+ //printf("DotNode::write(%d) name=%s this=%p written=%d visible=%d\n",m_distance,m_label.data(),this,m_written,m_visible);
if (m_written) return; // node already written to the output
if (!m_visible) return; // node is not visible
writeBox(t,gt,format,m_truncated==Truncated,reNumber);
@@ -2261,12 +2261,106 @@ const DotNode *DotNode::findDocNode() const
int DotGfxHierarchyTable::m_curNodeNumber;
+void DotGfxHierarchyTable::createGraph(DotNode *n,FTextStream &out,
+ const char *path,const char *fileName,int id) const
+{
+ QDir d(path);
+ QCString baseName;
+ QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
+ baseName.sprintf("inherit_graph_%d",id);
+ QCString imgName = baseName+"."+ imgExt;
+ QCString mapName = baseName+".map";
+ QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
+ QCString absMapName = QCString(d.absPath().data())+"/"+mapName;
+ QCString absBaseName = QCString(d.absPath().data())+"/"+baseName;
+ QListIterator<DotNode> dnli2(*m_rootNodes);
+ DotNode *node;
+
+ // compute md5 checksum of the graph were are about to generate
+ QGString theGraph;
+ FTextStream md5stream(&theGraph);
+ writeGraphHeader(md5stream,theTranslator->trGraphicalHierarchy());
+ md5stream << " rankdir=\"LR\";" << endl;
+ for (dnli2.toFirst();(node=dnli2.current());++dnli2)
+ {
+ if (node->m_subgraphId==n->m_subgraphId)
+ {
+ node->clearWriteFlag();
+ }
+ }
+ for (dnli2.toFirst();(node=dnli2.current());++dnli2)
+ {
+ if (node->m_subgraphId==n->m_subgraphId)
+ {
+ node->write(md5stream,DotNode::Hierarchy,GOF_BITMAP,FALSE,TRUE,TRUE,TRUE);
+ }
+ }
+ writeGraphFooter(md5stream);
+ resetReNumbering();
+ uchar md5_sig[16];
+ QCString sigStr(33);
+ MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
+ MD5SigToString(md5_sig,sigStr.data(),33);
+ bool regenerate=FALSE;
+ if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
+ !checkDeliverables(absImgName,absMapName))
+ {
+ regenerate=TRUE;
+ // image was new or has changed
+ QCString dotName=absBaseName+".dot";
+ QFile f(dotName);
+ if (!f.open(IO_WriteOnly)) return;
+ FTextStream t(&f);
+ t << theGraph;
+ f.close();
+ resetReNumbering();
+
+ DotRunner *dotRun = new DotRunner(dotName,d.absPath().data(),TRUE,absImgName);
+ dotRun->addJob(imgExt,absImgName);
+ dotRun->addJob(MAP_CMD,absMapName);
+ DotManager::instance()->addRun(dotRun);
+ }
+ else
+ {
+ removeDotGraph(absBaseName+".dot");
+ }
+ Doxygen::indexList->addImageFile(imgName);
+ // write image and map in a table row
+ QCString mapLabel = escapeCharsInString(n->m_label,FALSE);
+ if (imgExt=="svg") // vector graphics
+ {
+ if (regenerate || !writeSVGFigureLink(out,QCString(),baseName,absImgName))
+ {
+ if (regenerate)
+ {
+ DotManager::instance()->addSVGConversion(absImgName,QCString(),
+ FALSE,QCString(),FALSE,0);
+ }
+ int mapId = DotManager::instance()->addSVGObject(fileName,baseName,
+ absImgName,QCString());
+ out << "<!-- SVG " << mapId << " -->" << endl;
+ }
+ }
+ else // normal bitmap
+ {
+ out << "<img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
+ << mapLabel << "\"/>" << endl;
+
+ if (regenerate || !insertMapFile(out,absMapName,QCString(),mapLabel))
+ {
+ int mapId = DotManager::instance()->addMap(fileName,absMapName,QCString(),
+ FALSE,QCString(),mapLabel);
+ out << "<!-- MAP " << mapId << " -->" << endl;
+ }
+ }
+}
+
void DotGfxHierarchyTable::writeGraph(FTextStream &out,
const char *path,const char *fileName) const
{
//printf("DotGfxHierarchyTable::writeGraph(%s)\n",name);
//printf("m_rootNodes=%p count=%d\n",m_rootNodes,m_rootNodes->count());
-
+
if (m_rootSubgraphs->count()==0) return;
QDir d(path);
@@ -2284,97 +2378,8 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
int count=0;
for (dnli.toFirst();(n=dnli.current());++dnli)
{
- QCString baseName;
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- baseName.sprintf("inherit_graph_%d",count++);
- //baseName = convertNameToFile(baseName);
- QCString imgName = baseName+"."+ imgExt;
- QCString mapName = baseName+".map";
- QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
- QCString absMapName = QCString(d.absPath().data())+"/"+mapName;
- QCString absBaseName = QCString(d.absPath().data())+"/"+baseName;
- QListIterator<DotNode> dnli2(*m_rootNodes);
- DotNode *node;
-
- // compute md5 checksum of the graph were are about to generate
- QGString theGraph;
- FTextStream md5stream(&theGraph);
- writeGraphHeader(md5stream,theTranslator->trGraphicalHierarchy());
- md5stream << " rankdir=\"LR\";" << endl;
- for (dnli2.toFirst();(node=dnli2.current());++dnli2)
- {
- if (node->m_subgraphId==n->m_subgraphId)
- {
- node->clearWriteFlag();
- }
- }
- for (dnli2.toFirst();(node=dnli2.current());++dnli2)
- {
- if (node->m_subgraphId==n->m_subgraphId)
- {
- node->write(md5stream,DotNode::Hierarchy,GOF_BITMAP,FALSE,TRUE,TRUE,TRUE);
- }
- }
- writeGraphFooter(md5stream);
- resetReNumbering();
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- bool regenerate=FALSE;
- if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
- !checkDeliverables(absImgName,absMapName))
- {
- regenerate=TRUE;
- // image was new or has changed
- QCString dotName=absBaseName+".dot";
- QFile f(dotName);
- if (!f.open(IO_WriteOnly)) return;
- FTextStream t(&f);
- t << theGraph;
- f.close();
- resetReNumbering();
-
- DotRunner *dotRun = new DotRunner(dotName,d.absPath().data(),TRUE,absImgName);
- dotRun->addJob(imgExt,absImgName);
- dotRun->addJob(MAP_CMD,absMapName);
- DotManager::instance()->addRun(dotRun);
- }
- else
- {
- removeDotGraph(absBaseName+".dot");
- }
- Doxygen::indexList->addImageFile(imgName);
- // write image and map in a table row
- QCString mapLabel = escapeCharsInString(n->m_label,FALSE);
out << "<tr><td>";
- if (imgExt=="svg") // vector graphics
- {
- if (regenerate || !writeSVGFigureLink(out,QCString(),baseName,absImgName))
- {
- if (regenerate)
- {
- DotManager::instance()->addSVGConversion(absImgName,QCString(),
- FALSE,QCString(),FALSE,0);
- }
- int mapId = DotManager::instance()->addSVGObject(fileName,baseName,
- absImgName,QCString());
- out << "<!-- SVG " << mapId << " -->" << endl;
- }
- }
- else // normal bitmap
- {
- out << "<img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
- << mapLabel << "\"/>" << endl;
-
- if (regenerate || !insertMapFile(out,absMapName,QCString(),mapLabel))
- {
- int mapId = DotManager::instance()->addMap(fileName,absMapName,QCString(),
- FALSE,QCString(),mapLabel);
- out << "<!-- MAP " << mapId << " -->" << endl;
- }
- }
-
+ createGraph(n,out,path,fileName,count++);
out << "</td></tr>" << endl;
}
out << "</table>" << endl;
diff --git a/src/dot.h b/src/dot.h
index 8906199..41a416e 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -122,6 +122,7 @@ class DotNode
friend class DotNodeList;
friend class DotCallGraph;
friend class DotGroupCollaboration;
+ friend class DotInheritanceGraph;
friend QCString computeMd5Signature(
DotNode *root, GraphType gt,
@@ -133,12 +134,15 @@ class DotNode
);
};
-inline int DotNode::findParent( DotNode *n )
+/** Class representing a list of DotNode objects. */
+class DotNodeList : public QList<DotNode>
{
- if( !m_parents )
- return -1;
- return m_parents->find(n);
-}
+ public:
+ DotNodeList() : QList<DotNode>() {}
+ ~DotNodeList() {}
+ private:
+ int compareValues(const DotNode *n1,const DotNode *n2) const;
+};
/** Represents a graphical class hierarchy */
class DotGfxHierarchyTable
@@ -147,6 +151,8 @@ class DotGfxHierarchyTable
DotGfxHierarchyTable();
~DotGfxHierarchyTable();
void writeGraph(FTextStream &t,const char *path, const char *fileName) const;
+ void createGraph(DotNode *rootNode,FTextStream &t,const char *path,const char *fileName,int id) const;
+ const DotNodeList *subGraphs() const { return m_rootSubgraphs; }
private:
void addHierarchy(DotNode *n,ClassDef *cd,bool hide);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 8600a30..e127b8e 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -100,6 +100,9 @@
#include "context.h"
#include "fileparser.h"
+// provided by the generated file resources.cpp
+extern void initResources();
+
#define RECURSE_ENTRYTREE(func,var) \
do { if (var->children()) { \
EntryNavListIterator eli(*var->children()); \
@@ -1007,6 +1010,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,
while (i<level)
{
int idx=getScopeFragment(name,p,&l);
+ if (idx==-1) return prevScope;
QCString nsName = name.mid(idx,l);
if (nsName.isEmpty()) return prevScope;
if (!fullScope.isEmpty()) fullScope+="::";
@@ -1334,7 +1338,7 @@ static void addClassToContext(EntryNav *rootNav)
{
tArgList = getTemplateArgumentsFromName(fullName,root->tArgLists);
}
- cd=new ClassDef(root->fileName,root->startLine,root->startColumn,
+ cd=new ClassDef(tagInfo?tagName:root->fileName,root->startLine,root->startColumn,
fullName,sec,tagName,refFileName,TRUE,root->spec&Entry::Enum);
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d tagInfo=%p\n",
fullName.data(),sec,root->tArgLists ? (int)root->tArgLists->count() : -1, tagInfo);
@@ -1761,7 +1765,7 @@ static void buildNamespaceList(EntryNav *rootNav)
tagFileName = tagInfo->fileName;
}
//printf("++ new namespace %s lang=%s tagName=%s\n",fullName.data(),langToString(root->lang).data(),tagName.data());
- NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,
+ NamespaceDef *nd=new NamespaceDef(tagInfo?tagName:root->fileName,root->startLine,
root->startColumn,fullName,tagName,tagFileName,
root->type,root->spec&Entry::Published);
nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
@@ -2131,10 +2135,15 @@ static void findUsingDeclImports(EntryNav *rootNav)
//printf("found member %s\n",mni->memberName());
MemberDef *newMd = 0;
{
+ QCString fileName = root->fileName;
+ if (fileName.isEmpty() && rootNav->tagInfo())
+ {
+ fileName = rootNav->tagInfo()->tagName;
+ }
ArgumentList *templAl = md->templateArguments();
ArgumentList *al = md->templateArguments();
newMd = new MemberDef(
- root->fileName,root->startLine,root->startColumn,
+ fileName,root->startLine,root->startColumn,
md->typeString(),memName,md->argsString(),
md->excpString(),root->protection,root->virt,
md->isStatic(),Member,md->memberType(),
@@ -2320,9 +2329,15 @@ static MemberDef *addVariableToClass(
}
}
+ QCString fileName = root->fileName;
+ if (fileName.isEmpty() && rootNav->tagInfo())
+ {
+ fileName = rootNav->tagInfo()->tagName;
+ }
+
// new member variable, typedef or enum value
MemberDef *md=new MemberDef(
- root->fileName,root->startLine,root->startColumn,
+ fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
prot,Normal,root->stat,related,
mtype,root->tArgLists ? root->tArgLists->getLast() : 0,0);
@@ -2555,11 +2570,18 @@ static MemberDef *addVariableToFile(
}
}
}
+
+ QCString fileName = root->fileName;
+ if (fileName.isEmpty() && rootNav->tagInfo())
+ {
+ fileName = rootNav->tagInfo()->tagName;
+ }
+
Debug::print(Debug::Variables,0,
" new variable, nd=%s!\n",nd?nd->name().data():"<global>");
// new global variable, enum value or typedef
MemberDef *md=new MemberDef(
- root->fileName,root->startLine,root->startColumn,
+ fileName,root->startLine,root->startColumn,
root->type,name,root->args,0,
Public, Normal,root->stat,Member,
mtype,root->tArgLists ? root->tArgLists->getLast() : 0,0);
@@ -3067,8 +3089,13 @@ static void addInterfaceOrServiceToServiceOrSingleton(
enum MemberType const type = (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC)
? MemberType_Interface
: MemberType_Service;
+ QCString fileName = root->fileName;
+ if (fileName.isEmpty() && rootNav->tagInfo())
+ {
+ fileName = rootNav->tagInfo()->tagName;
+ }
MemberDef *const md = new MemberDef(
- root->fileName, root->startLine, root->startColumn, root->type, rname,
+ fileName, root->startLine, root->startColumn, root->type, rname,
"", "", root->protection, root->virt, root->stat, Member,
type, 0, root->argList);
md->setTagInfo(rootNav->tagInfo());
@@ -3239,13 +3266,19 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
name=name.left(i);
}
+ QCString fileName = root->fileName;
+ if (fileName.isEmpty() && rootNav->tagInfo())
+ {
+ fileName = rootNav->tagInfo()->tagName;
+ }
+
//printf("root->name=`%s; root->args=`%s' root->argList=`%s'\n",
// root->name.data(),root->args.data(),argListToString(root->argList).data()
// );
// adding class member
MemberDef *md=new MemberDef(
- root->fileName,root->startLine,root->startColumn,
+ fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
root->protection,root->virt,
root->stat && root->relatesType != MemberOf,
@@ -5218,7 +5251,7 @@ static void addListReferences()
addRefItem(xrefItems,
name,
theTranslator->trPage(TRUE,TRUE),
- name,pd->title(),0);
+ name,pd->title(),0,0);
}
}
@@ -5235,7 +5268,7 @@ static void addListReferences()
addRefItem(xrefItems,
name,
theTranslator->trDir(TRUE,TRUE),
- name,dd->displayName(),0);
+ name,dd->displayName(),0,0);
}
}
@@ -7034,7 +7067,7 @@ static void findEnums(EntryNav *rootNav)
if (cd && !name.isEmpty()) // found a enum inside a compound
{
- //printf("Enum `%s'::`%s'\n",cd->name(),name.data());
+ //printf("Enum `%s'::`%s'\n",cd->name().data(),name.data());
fd=0;
mnsd=Doxygen::memberNameSDict;
isGlobal=FALSE;
@@ -7067,17 +7100,17 @@ static void findEnums(EntryNav *rootNav)
if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setBodyDef(rootNav->fileDef());
- md->setMemberSpecifiers(root->spec); // UNO IDL "published"
+ md->setMemberSpecifiers(root->spec);
md->setEnumBaseType(root->args);
- //printf("Enum %s definition at line %d of %s: protection=%d\n",
- // root->name.data(),root->bodyLine,root->fileName.data(),root->protection);
+ //printf("Enum %s definition at line %d of %s: protection=%d scope=%s\n",
+ // root->name.data(),root->bodyLine,root->fileName.data(),root->protection,cd?cd->name().data():"<none>");
md->addSectionsToDefinition(root->anchors);
md->setMemberGroupId(root->mGrpId);
md->enableCallGraph(root->callGraph);
md->enableCallerGraph(root->callerGraph);
//printf("%s::setRefItems(%d)\n",md->name().data(),root->sli?root->sli->count():-1);
md->setRefItems(root->sli);
- //printf("found enum %s nd=%p\n",name.data(),nd);
+ //printf("found enum %s nd=%p\n",md->name().data(),nd);
bool defSet=FALSE;
QCString baseType = root->args;
@@ -7251,26 +7284,35 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
{
SrcLangExt sle;
if (
- (sle=rootNav->lang())==SrcLangExt_CSharp ||
- sle==SrcLangExt_Java ||
+ (sle=rootNav->lang())==SrcLangExt_CSharp ||
+ sle==SrcLangExt_Java ||
sle==SrcLangExt_XML ||
(root->spec&Entry::Strong)
)
{
- // Unlike classic C/C++ enums, for C++11, C# & Java enum
- // values are only visible inside the enum scope, so we must create
+ // Unlike classic C/C++ enums, for C++11, C# & Java enum
+ // values are only visible inside the enum scope, so we must create
// them here and only add them to the enum
e->loadEntry(g_storage);
Entry *root = e->entry();
//printf("md->qualifiedName()=%s rootNav->name()=%s tagInfo=%p name=%s\n",
// md->qualifiedName().data(),rootNav->name().data(),rootNav->tagInfo(),root->name.data());
+ QCString qualifiedName = substitute(rootNav->name(),"::",".");
+ if (!scope.isEmpty() && rootNav->tagInfo())
+ {
+ qualifiedName=substitute(scope,"::",".")+"."+qualifiedName;
+ }
if (substitute(md->qualifiedName(),"::",".")== // TODO: add function to get canonical representation
- substitute(rootNav->name(),"::",".") || // enum value scope matches that of the enum
- rootNav->tagInfo() // be less strict for tag files as members can have incomplete scope
- )
+ qualifiedName // enum value scope matches that of the enum
+ )
{
+ QCString fileName = root->fileName;
+ if (fileName.isEmpty() && rootNav->tagInfo())
+ {
+ fileName = rootNav->tagInfo()->tagName;
+ }
MemberDef *fmd=new MemberDef(
- root->fileName,root->startLine,root->startColumn,
+ fileName,root->startLine,root->startColumn,
root->type,root->name,root->args,0,
Public, Normal,root->stat,Member,
MemberType_EnumValue,0,0);
@@ -8401,7 +8443,7 @@ static void findDefineDocumentation(EntryNav *rootNav)
if (rootNav->tagInfo() && !root->name.isEmpty()) // define read from a tag file
{
- MemberDef *md=new MemberDef("<tagfile>",1,1,
+ MemberDef *md=new MemberDef(rootNav->tagInfo()->tagName,1,1,
"#define",root->name,root->args,0,
Public,Normal,FALSE,Member,MemberType_Define,0,0);
md->setTagInfo(rootNav->tagInfo());
@@ -8626,7 +8668,7 @@ static void buildPageList(EntryNav *rootNav)
"page",
name,
title,
- 0
+ 0,0
);
rootNav->releaseEntry();
@@ -9159,6 +9201,33 @@ static void readTagFile(Entry *root,const char *tl)
}
//----------------------------------------------------------------------------
+static void copyLatexStyleSheet()
+{
+ QStrList latexExtraStyleSheet = Config_getList("LATEX_EXTRA_STYLESHEET");
+ for (uint i=0; i<latexExtraStyleSheet.count(); ++i)
+ {
+ QCString fileName(latexExtraStyleSheet.at(i));
+ if (!fileName.isEmpty())
+ {
+ QFileInfo fi(fileName);
+ if (!fi.exists())
+ {
+ err("Style sheet '%s' specified by LATEX_EXTRA_STYLESHEET does not exist!\n",fileName.data());
+ }
+ else
+ {
+ QCString destFileName = Config_getString("LATEX_OUTPUT")+"/"+fi.fileName().data();
+ if (!checkExtension(fi.fileName().data(), latexStyleExtension))
+ {
+ destFileName += latexStyleExtension;
+ }
+ copyFile(fileName, destFileName);
+ }
+ }
+ }
+}
+
+//----------------------------------------------------------------------------
static void copyStyleSheet()
{
QCString &htmlStyleSheet = Config_getString("HTML_STYLESHEET");
@@ -9187,6 +9256,10 @@ static void copyStyleSheet()
{
err("Style sheet '%s' specified by HTML_EXTRA_STYLESHEET does not exist!\n",fileName.data());
}
+ else if (fi.fileName()=="doxygen.css" || fi.fileName()=="tabs.css" || fi.fileName()=="navtree.css")
+ {
+ err("Style sheet %s specified by HTML_EXTRA_STYLESHEET is already a built-in stylesheet. Please use a different name\n",fi.fileName().data());
+ }
else
{
QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
@@ -9247,8 +9320,9 @@ static ParserInterface *getParserForFile(const char *fn)
{
QCString fileName=fn;
QCString extension;
+ int sep = fileName.findRev('/');
int ei = fileName.findRev('.');
- if (ei!=-1)
+ if (ei!=-1 && (sep==-1 || ei>sep)) // matches dir/file.ext but not dir.1/file
{
extension=fileName.right(fileName.length()-ei);
}
@@ -9297,6 +9371,10 @@ static void parseFile(ParserInterface *parser,
msg("Reading %s...\n",fn);
readInputFile(fileName,preBuf);
}
+ if (preBuf.data() && preBuf.curPos()>0 && *(preBuf.data()+preBuf.curPos()-1)!='\n')
+ {
+ preBuf.addChar('\n'); // add extra newline to help parser
+ }
BufStr convBuf(preBuf.curPos()+1024);
@@ -9914,6 +9992,7 @@ static const char *getArg(int argc,char **argv,int &optind)
void initDoxygen()
{
+ initResources();
const char *lang = portable_getenv("LC_ALL");
if (lang) portable_setenv("LANG",lang);
setlocale(LC_ALL,"");
@@ -10883,7 +10962,7 @@ void parseInput()
QCString htmlOutput;
bool &generateHtml = Config_getBool("GENERATE_HTML");
- if (generateHtml)
+ if (generateHtml || g_useOutputTemplate /* TODO: temp hack */)
htmlOutput = createOutputDirectory(outputDirectory,"HTML_OUTPUT","/html");
QCString docbookOutput;
@@ -11360,6 +11439,7 @@ void generateOutput()
g_outputList->add(new LatexGenerator);
LatexGenerator::init();
+ copyLatexStyleSheet();
// copy static stuff
copyExtraFiles("LATEX_EXTRA_FILES","LATEX_OUTPUT");
}
diff --git a/src/entry.cpp b/src/entry.cpp
index 9f863d2..b5928b3 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -170,7 +170,7 @@ Entry::Entry(const Entry &e)
anchors->append(new SectionInfo(*s));
}
- // deep copy type contraint list
+ // deep copy type constraint list
if (e.typeConstr)
{
typeConstr = e.typeConstr->deepCopy();
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 9c18e20..dd97c1c 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -327,6 +327,17 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
//printf("Writing source ref for file %s\n",name().data());
if (Config_getBool("SOURCE_BROWSER"))
{
+ //if Latex enabled and LATEX_SOURCE_CODE isn't -> skip, bug_738548
+ ol.pushGeneratorState();
+ if (ol.isEnabled(OutputGenerator::Latex) && !Config_getBool("LATEX_SOURCE_CODE"))
+ {
+ ol.disable(OutputGenerator::Latex);
+ }
+ if (ol.isEnabled(OutputGenerator::RTF) && !Config_getBool("RTF_SOURCE_CODE"))
+ {
+ ol.disable(OutputGenerator::RTF);
+ }
+
ol.startParagraph();
QCString refText = theTranslator->trDefinedInSourceFile();
int fileMarkerPos = refText.find("@0");
@@ -339,6 +350,8 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
refText.length()-fileMarkerPos-2)); // text right from marker 2
}
ol.endParagraph();
+ //Restore settings, bug_738548
+ ol.popGeneratorState();
}
ol.endTextBlock();
}
@@ -901,6 +914,7 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
+ static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE");
DevNullCodeDocInterface devNullIntf;
QCString title = m_docname;
if (!m_fileVersion.isEmpty())
@@ -909,8 +923,8 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
}
QCString pageTitle = theTranslator->trSourceFile(title);
ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
if (!latexSourceCode) ol.disable(OutputGenerator::Latex);
+ if (!rtfSourceCode) ol.disable(OutputGenerator::RTF);
bool isDocFile = isDocumentationFile();
bool genSourceFile = !isDocFile && generateSourceFile();
@@ -942,10 +956,12 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
if (isLinkable())
{
if (latexSourceCode) ol.disable(OutputGenerator::Latex);
+ if (rtfSourceCode) ol.disable(OutputGenerator::RTF);
ol.startTextLink(getOutputFileBase(),0);
ol.parseText(theTranslator->trGotoDocumentation());
ol.endTextLink();
if (latexSourceCode) ol.enable(OutputGenerator::Latex);
+ if (rtfSourceCode) ol.enable(OutputGenerator::RTF);
}
(void)sameTu;
@@ -1400,6 +1416,7 @@ void FileDef::addListReferences()
getOutputFileBase(),
theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name(),
+ 0,
0
);
}
@@ -1847,7 +1864,7 @@ void FileDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCS
}
else
{
- ml->writeDeclarations(ol,0,0,this,0,title,0,definitionType());
+ ml->writeDeclarations(ol,0,0,this,0,title,0);
}
}
}
diff --git a/src/filedef.h b/src/filedef.h
index 8cd5703..33eae35 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -96,7 +96,7 @@ class FileDef : public Definition
QCString absFilePath() const { return m_filePath; }
/*! Returns the name as it is used in the documentation */
- QCString docName() const { return m_docname; }
+ const QCString &docName() const { return m_docname; }
/*! Returns TRUE if this file is a source file. */
bool isSource() const { return m_isSource; }
diff --git a/src/filename.cpp b/src/filename.cpp
index 35a1841..8719f3c 100644
--- a/src/filename.cpp
+++ b/src/filename.cpp
@@ -45,9 +45,12 @@ void FileName::generateDiskNames()
{
// skip references
for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
- // name if unique, so diskname is simply the name
- //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
- fd->m_diskName=name;
+ if (fd)
+ {
+ // name if unique, so diskname is simply the name
+ //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
+ fd->m_diskName=name;
+ }
}
else if (count>1) // multiple occurrences of the same file name
{
@@ -57,28 +60,31 @@ void FileName::generateDiskNames()
while (!found) // search for the common prefix of all paths
{
for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
- char c=fd->m_path.at(i);
- if (c=='/') j=i; // remember last position of dirname
- ++it;
- while ((fd=it.current()) && !found)
+ if (fd)
{
- if (!fd->isReference())
+ char c=fd->m_path.at(i);
+ if (c=='/') j=i; // remember last position of dirname
+ ++it;
+ while ((fd=it.current()) && !found)
{
- //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
- if (i==(int)fd->m_path.length())
+ if (!fd->isReference())
{
- //warning("Input file %s found multiple times!\n"
- // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
- found=TRUE;
- }
- else if (fd->m_path[i]!=c)
- {
- found=TRUE;
+ //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
+ if (i==(int)fd->m_path.length())
+ {
+ //warning("Input file %s found multiple times!\n"
+ // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
+ found=TRUE;
+ }
+ else if (fd->m_path[i]!=c)
+ {
+ found=TRUE;
+ }
}
+ ++it;
}
- ++it;
+ i++;
}
- i++;
}
for (it.toFirst();(fd=it.current());++it)
{
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 03baeed..51934cd 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -114,6 +114,7 @@ class Scope
static QCString docBlock; //!< contents of all lines of a documentation block
static QCString currentModule=0; //!< name of the current enclosing module
+static QCString currentClass=0; //!< name of the current enclosing class
static UseSDict *useMembers= new UseSDict; //!< info about used modules
static UseEntry *useEntry = 0; //!< current use statement info
static QList<Scope> scopeStack;
@@ -386,8 +387,23 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
}
}
}
+//-------------------------------------------------------------------------------
+/**
+ searches for definition of a module (Namespace)
+ @param mname the name of the module
+ @param cd the entry, if found or null
+ @returns true, if module is found
+*/
+static bool getFortranNamespaceDefs(const QCString &mname,
+ NamespaceDef *&cd)
+{
+ if (mname.isEmpty()) return FALSE; /* empty name => nothing to link */
+ // search for module
+ if ((cd=Doxygen::namespaceSDict->find(mname))) return TRUE;
+ return FALSE;
+}
//-------------------------------------------------------------------------------
/**
searches for definition of a type
@@ -467,6 +483,7 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
{
FileDef *fd=md->getFileDef();
GroupDef *gd=md->getGroupDef();
+ ClassDef *cd=md->getClassDef();
//cout << "found link with same name: " << fd->fileName() << " " << memberName;
//if (md->getNamespaceDef() != 0) cout << " in namespace " << md->getNamespaceDef()->name();cout << endl;
@@ -477,7 +494,9 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
if (nspace == 0)
{ // found function in global scope
- return TRUE;
+ if(cd == 0) { // Skip if bound to type
+ return TRUE;
+ }
}
else if (moduleName == nspace->name())
{ // found in local scope
@@ -534,7 +553,7 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
CodeOutputInterface &ol,
const char *text)
{
- MemberDef *md;
+ MemberDef *md=0;
QCString memberName= removeRedundantWhiteSpace(memberText);
if (getFortranDefs(memberName, currentModule, md, usedict) && md->isLinkable())
@@ -563,6 +582,7 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
static void generateLink(CodeOutputInterface &ol, char *lname)
{
ClassDef *cd=0;
+ NamespaceDef *nsd=0;
QCString tmp = lname;
tmp = removeRedundantWhiteSpace(tmp.lower());
@@ -580,6 +600,12 @@ static void generateLink(CodeOutputInterface &ol, char *lname)
addToSearchIndex(tmp.data());
}
}
+ // check for module
+ else if ( (getFortranNamespaceDefs(tmp, nsd)) && nsd->isLinkable() )
+ { // write module link
+ writeMultiLineCodeLink(ol,nsd,tmp);
+ addToSearchIndex(tmp.data());
+ }
// check for function/variable
else if (getLink(useMembers, tmp, ol, tmp))
{
@@ -694,7 +720,7 @@ CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE|CLASS|PROCEDURE)
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
-ATTR_SPEC (IMPLICIT|ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|IMPURE|ELEMENTAL|VALUE|NOPASS|DEFERRED)
+ATTR_SPEC (IMPLICIT|ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|IMPURE|ELEMENTAL|VALUE|NOPASS|DEFERRED|CONTIGUOUS|VOLATILE)
ACCESS_SPEC (PROTECTED|PRIVATE|PUBLIC)
/* Assume that attribute statements are almost the same as attributes. */
ATTR_STMT {ATTR_SPEC}|DIMENSION
@@ -721,6 +747,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
%x UseOnly
%x Import
%x Declaration
+%x DeclarationBinding
%x DeclContLine
%x Parameterlist
%x String
@@ -731,8 +758,8 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
/*-------- ignore ------------------------------------------------------------*/
-<Start>{IGNORE}/{BS}"("? { // do not search keywords, intrinsics... TODO: complete list
- codifyLines(yytext);
+<Start>{IGNORE}/{BS}"(" { // do not search keywords, intrinsics... TODO: complete list
+ codifyLines(yytext);
}
/*-------- inner construct ---------------------------------------------------*/
@@ -757,12 +784,11 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
codifyLines(yytext);
endFontClass();
}
-<Start>"end"({BS}{FLOW})?/[ \t\n] { // list is a bit long as not all have possible end
+<Start>{BS}"end"({BS}{FLOW})/[ \t\n] { // list is a bit long as not all have possible end
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
}
-
<Start>"implicit"{BS}"none" {
startFontClass("keywordtype");
codifyLines(yytext);
@@ -807,10 +833,12 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
<UseOnly,Import>{BS},{BS} { codifyLines(yytext); }
<UseOnly,Import>{BS}&{BS}"\n" { codifyLines(yytext); YY_FTN_RESET}
<UseOnly>{ID} {
+ QCString tmp = yytext;
+ tmp = tmp.lower();
+ useEntry->onlyNames.append(tmp);
g_insideBody=TRUE;
generateLink(*g_code, yytext);
g_insideBody=FALSE;
- useEntry->onlyNames.append(yytext);
}
<Use,UseOnly,Import>"\n" {
unput(*yytext);
@@ -845,6 +873,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
endFontClass();
yy_push_state(YY_START);
BEGIN(ClassName);
+ currentClass="class";
}
<ClassName>{ID} {
if (currentModule == "module")
@@ -864,7 +893,11 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
yy_pop_state();
YY_FTN_REJECT;
}
-<Start>"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule
+<Start>^{BS}"end"({BS_}"type").* { // just reset currentClass, rest is done in following rule
+ currentClass=0;
+ YY_FTN_REJECT;
+ }
+<Start>^{BS}"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule
currentModule=0;
YY_FTN_REJECT;
}
@@ -893,7 +926,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
yy_pop_state();
YY_FTN_RESET
}
-<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface"){BS} { // Fortran subroutine or function ends
+<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface")?{BS} { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl;
endScope();
startFontClass("keyword");
@@ -942,6 +975,14 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
generateLink(*g_code, yytext);
}
}
+<Declaration>{BS}("=>"|"="){BS} { // Procedure binding
+ BEGIN(DeclarationBinding);
+ g_code->codify(yytext);
+ }
+<DeclarationBinding>{ID} { // Type bound procedure link
+ generateLink(*g_code, yytext);
+ yy_pop_state();
+ }
<Declaration>[(] { // start of array specification
bracketCount++;
g_code->codify(yytext);
@@ -952,7 +993,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
g_code->codify(yytext);
}
-<Declaration>"&" { // continuation line
+<Declaration,DeclarationBinding>"&" { // continuation line
g_code->codify(yytext);
yy_push_state(YY_START);
BEGIN(DeclContLine);
@@ -963,7 +1004,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
yy_pop_state();
YY_FTN_RESET
}
-<Declaration>"\n" { // end declaration line
+<Declaration,DeclarationBinding>"\n" { // end declaration line
if (g_endComment)
{
g_endComment=FALSE;
@@ -980,9 +1021,11 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
/*-------- subprog calls -----------------------------------------*/
<Start>"call"{BS_} {
- codifyLines(yytext);
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
yy_push_state(YY_START);
- BEGIN(SubCall);
+ BEGIN(SubCall);
}
<SubCall>{ID} { // subroutine call
g_insideBody=TRUE;
@@ -991,13 +1034,21 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
yy_pop_state();
}
<Start>{ID}{BS}/"(" { // function call
- g_insideBody=TRUE;
- generateLink(*g_code, yytext);
- g_insideBody=FALSE;
+ if (g_isFixedForm && yy_my_start == 6)
+ {
+ // fixed form continuation line
+ YY_FTN_REJECT;
+ }
+ else
+ {
+ g_insideBody=TRUE;
+ generateLink(*g_code, yytext);
+ g_insideBody=FALSE;
+ }
}
/*-------- comments ---------------------------------------------------*/
-<Start>\n?{BS}"!>"|"!<" { // start comment line or comment block
+<Start,Declaration,DeclarationBinding>\n?{BS}"!>"|"!<" { // start comment line or comment block
if (yytext[0] == '\n')
{
yy_old_start = 0;
@@ -1010,7 +1061,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
BEGIN(DocBlock);
docBlock=yytext;
}
-<Declaration>{BS}"!<" { // start comment line or comment block
+<Declaration,DeclarationBinding>{BS}"!<" { // start comment line or comment block
yy_push_state(YY_START);
BEGIN(DocBlock);
docBlock=yytext;
@@ -1136,6 +1187,17 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
<*>{LOG_OPER} { // Fortran logical comparison keywords
g_code->codify(yytext);
}
+<*><<EOF>> {
+ if (YY_START == DocBlock) {
+ if (!Config_getBool("STRIP_CODE_COMMENTS"))
+ {
+ startFontClass("comment");
+ codifyLines(docBlock);
+ endFontClass();
+ }
+ }
+ yyterminate();
+ }
%%
/*@ ----------------------------------------------------------------------------
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 8ea8aeb..4875606 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -99,13 +99,15 @@ struct SymbolModifiers {
bool nonoverridable;
bool nopass;
bool pass;
+ bool contiguous;
+ bool volat; /* volatile is a reserverd name */
QCString passVar;
SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D),
optional(FALSE), protect(FALSE), dimension(), allocatable(FALSE),
external(FALSE), intrinsic(FALSE), parameter(FALSE),
pointer(FALSE), target(FALSE), save(FALSE), deferred(FALSE), nonoverridable(FALSE),
- nopass(FALSE), pass(FALSE), passVar() {}
+ nopass(FALSE), pass(FALSE), contiguous(FALSE), volat(FALSE), passVar() {}
SymbolModifiers& operator|=(const SymbolModifiers &mdfs);
SymbolModifiers& operator|=(QCString mdfrString);
@@ -258,7 +260,7 @@ CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?)
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
-ATTR_SPEC (EXTERNAL|ALLOCATABLE|DIMENSION{ARGS}|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE)
+ATTR_SPEC (EXTERNAL|ALLOCATABLE|DIMENSION{ARGS}|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE|CONTIGUOUS|VOLATILE)
ACCESS_SPEC (PRIVATE|PUBLIC)
LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")"
/* Assume that attribute statements are almost the same as attributes. */
@@ -470,6 +472,7 @@ SCOPENAME ({ID}{BS}"::"{BS})*
}
^{BS}interface{BS_}{ID}{ARGS}? { ifType = IF_GENERIC;
+ current->bodyLine = yyLineNr + lineCountPrepass + 1; // we have to be at the line after the definition and we have to take continuation lines into account.
yy_push_state(InterfaceBody);
// extract generic name
@@ -482,6 +485,7 @@ SCOPENAME ({ID}{BS}"::"{BS})*
<InterfaceBody>^{BS}end{BS}interface({BS_}{ID})? {
// end scope only if GENERIC interface
+ last_entry->parent()->endBodyLine = yyLineNr - 1;
if (ifType == IF_GENERIC && !endScope(current_root))
yyterminate();
@@ -609,6 +613,7 @@ private {
current->name = yytext;
current->fileName = yyFileName;
current->bodyLine = yyLineNr;
+ current->startLine = yyLineNr;
/* if type is part of a module, mod name is necessary for output */
if ((current_root) &&
@@ -649,6 +654,7 @@ private {
current->name = name;
current->fileName = yyFileName;
current->bodyLine = yyLineNr;
+ current->startLine = yyLineNr;
addCurrentEntry(1);
}
{BS}"=>"[^(\n|\!)]* { /* Specific bindings come after the ID. */
@@ -664,6 +670,7 @@ private {
<TypedefBody,TypedefBodyContains>{
^{BS}"end"{BS}"type"({BS_}{ID})?{BS}/(\n|!) { /* end type definition */
+ last_entry->parent()->endBodyLine = yyLineNr;
if (!endScope(current_root))
yyterminate();
typeMode = false;
@@ -679,6 +686,7 @@ private {
// in a scope of their own, even if multiple
// are group in one INTERFACE/END INTERFACE block.
//
+ last_entry->endBodyLine = yyLineNr - 1;
if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
endScope(current_root);
@@ -693,6 +701,8 @@ private {
}
<Start,ModuleBody,TypedefBody,SubprogBody>{
^{BS}{TYPE_SPEC}/{SEPARATE} {
+ current->bodyLine = yyLineNr + 1;
+ current->endBodyLine = yyLineNr + lineCountPrepass;
/* variable declaration starts */
if(YY_START == Start)
{
@@ -804,6 +814,7 @@ private {
current->type = argType;
current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference
+ current->startLine = yyLineNr;
addCurrentEntry(1);
}
else if (!argType.isEmpty())
@@ -883,7 +894,8 @@ private {
// locate !< comment
updateVariablePrepassComment(yyColNr-(int)yyleng, yyColNr);
}
-<Variable>{BS}"=" { yy_push_state(YY_START);
+<Variable>{BS}"=" {
+ yy_push_state(YY_START);
initializer="=";
initializerScope = initializerArrayScope = 0;
BEGIN(Initialization);
@@ -984,6 +996,8 @@ private {
result = QCString(yytext).stripWhiteSpace();
addSubprogram(result);
yy_push_state(Subprog);
+ current->bodyLine = yyLineNr + lineCountPrepass + 1; // we have to be at the line after the definition and we have to take continuation lines into account.
+ current->startLine = yyLineNr;
}
<Subprog>{BS} { /* ignore white space */ }
@@ -1491,7 +1505,9 @@ static void copyEntry(Entry *dest, Entry *src)
{
dest->type = src->type;
dest->fileName = src->fileName;
+ dest->startLine = src->startLine;
dest->bodyLine = src->bodyLine;
+ dest->endBodyLine = src->endBodyLine;
dest->args = src->args;
dest->argList = new ArgumentList(*src->argList);
dest->doc = src->doc;
@@ -1572,6 +1588,8 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
nopass |= mdfs.nopass;
pass |= mdfs.pass;
passVar = mdfs.passVar;
+ contiguous |= mdfs.contiguous;
+ volat |= mdfs.volat;
return *this;
}
@@ -1650,6 +1668,14 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
{
newMdf.nonoverridable = TRUE;
}
+ else if (mdfString=="contiguous")
+ {
+ newMdf.contiguous = TRUE;
+ }
+ else if (mdfString=="volatile")
+ {
+ newMdf.volat = TRUE;
+ }
else if (mdfString.contains("pass"))
{
newMdf.pass = TRUE;
@@ -1804,6 +1830,16 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
if (!typeName.isEmpty()) typeName += ", ";
typeName += "protected";
}
+ if (mdfs.contiguous)
+ {
+ if (!typeName.isEmpty()) typeName += ", ";
+ typeName += "contiguous";
+ }
+ if (mdfs.volat)
+ {
+ if (!typeName.isEmpty()) typeName += ", ";
+ typeName += "volatile";
+ }
return typeName;
}
@@ -2007,7 +2043,7 @@ static void addModule(const char *name, bool isModule)
DBG_CTX((stderr, "0=========> got module %s\n", name));
if (isModule)
- current->section = Entry::CLASS_SEC;
+ current->section = Entry::NAMESPACE_SEC;
else
current->section = Entry::FUNCTION_SEC;
@@ -2026,6 +2062,7 @@ static void addModule(const char *name, bool isModule)
current->type = "program";
current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference
+ current->startLine = yyLineNr;
current->protection = Public ;
addCurrentEntry(1);
startScope(last_entry);
@@ -2042,8 +2079,8 @@ static void addSubprogram(const char *text)
current->type += " " + subtype;
current->type = current->type.stripWhiteSpace();
current->fileName = yyFileName;
- current->bodyLine = yyLineNr; // used for source reference
- current->startLine = -1; // ??? what is startLine for?
+ current->bodyLine = yyLineNr; // used for source reference start of body of routine
+ current->startLine = yyLineNr; // used for source reference start of definition
current->args.resize(0);
current->argList->clear();
docBlock.resize(0);
@@ -2091,6 +2128,7 @@ static void addInterface(QCString name, InterfaceType type)
current->fileName = yyFileName;
current->bodyLine = yyLineNr;
+ current->startLine = yyLineNr;
addCurrentEntry(1);
}
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 4613a92..f45d956 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -36,549 +36,10 @@
#include "htmldocvisitor.h"
#include "filedef.h"
#include "util.h"
+#include "resourcemgr.h"
#define MAX_INDENT 1024
-
-static const char navtree_script[]=
-#include "navtree.js.h"
-;
-
-static const char resize_script[]=
-#include "resize.js.h"
-;
-
-static const char navtree_css[]=
-#include "navtree.css.h"
-;
-
-static unsigned char blank_png[352] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char folderopen_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,228,195,193,190,187,218,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,195,215,221,225,225,178,176,176,175,176,178,180,255,255,255,255,255,255,
- 255,255,255,255,255,255,189,206,215,219,226,220,214,212,207,204,200,176,255,255,255,255,255,255,
- 255,255,255,255,168,154,153,153,152,152,151,149,150,150,149,147,146,145,145,167,255,255,255,255,
- 255,255,255,255,146,187,187,188,187,187,185,183,183,182,179,178,175,173,174,145,255,255,255,255,
- 255,255,255,255,146,180,182,182,181,181,179,178,176,174,173,171,169,170,168,144,255,255,255,255,
- 255,255,255,255,144,173,176,176,177,175,175,174,171,170,168,168,166,166,164,143,255,255,255,255,
- 255,255,255,255,142,168,170,171,170,170,169,168,166,166,165,163,163,164,162,142,255,255,255,255,
- 255,255,255,255,141,162,166,164,164,165,163,163,161,161,161,161,161,160,159,141,255,255,255,255,
- 255,255,255,255,138,157,159,159,158,158,158,157,157,157,157,156,157,157,155,138,255,255,255,255,
- 255,255,255,255,137,154,153,154,154,153,154,154,154,153,154,154,154,154,154,137,255,255,255,255,
- 255,255,255,255,137,154,154,154,154,154,154,154,153,154,154,153,153,153,154,137,255,255,255,255,
- 255,255,255,255,137,125,125,125,125,124,125,124,124,125,124,124,125,124,125,138,255,255,255,255,
- 255,255,255,255,212,209,204,199,193,190,186,183,180,181,185,188,192,197,202,203,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char folderopen_a_png[528] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char folderclosed_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,197,155,155,155,155,196,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,155,191,191,191,192,155,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,168,144,180,180,181,180,145,145,146,145,146,146,146,146,145,167,255,255,255,255,
- 255,255,255,255,147,225,226,226,225,226,225,221,221,219,215,214,212,211,213,145,255,255,255,255,
- 255,255,255,255,147,212,211,211,210,211,210,205,206,205,201,201,199,196,201,145,255,255,255,255,
- 255,255,255,255,146,204,203,204,203,203,202,200,200,197,197,196,195,194,196,145,255,255,255,255,
- 255,255,255,255,146,202,200,201,201,200,199,198,198,195,194,194,193,192,194,145,255,255,255,255,
- 255,255,255,255,145,200,196,196,196,195,195,193,192,192,190,189,189,189,191,143,255,255,255,255,
- 255,255,255,255,143,192,191,190,190,189,189,188,186,187,186,185,185,185,187,142,255,255,255,255,
- 255,255,255,255,142,186,184,183,182,183,182,183,180,181,181,181,181,181,182,141,255,255,255,255,
- 255,255,255,255,138,177,175,176,176,177,177,176,175,174,175,175,175,174,176,138,255,255,255,255,
- 255,255,255,255,138,173,169,170,168,170,169,170,170,169,171,171,171,171,174,137,255,255,255,255,
- 255,255,255,255,138,166,163,163,162,162,162,162,162,162,164,163,163,163,166,137,255,255,255,255,
- 255,255,255,255,137,124,124,124,125,124,124,124,125,125,124,124,125,124,125,138,255,255,255,255,
- 255,255,255,255,231,231,228,225,222,220,218,216,214,215,217,219,221,224,227,226,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char folderclosed_a_png[528] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char doc_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,218,214,208,208,204,191,179,190,197,209,231,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,195,224,226,226,222,214,204,181,203,229,188,225,255,255,255,255,255,255,255,
- 255,255,255,255,255,198,226,228,227,227,224,215,203,180,252,229,184,224,255,255,255,255,255,255,
- 255,255,255,255,255,198,229,230,229,229,228,224,214,154,252,252,229,187,235,255,255,255,255,255,
- 255,255,255,255,255,198,232,233,233,232,231,230,223,176,154,144,165,177,216,255,255,255,255,255,
- 255,255,255,255,255,198,236,236,216,226,238,219,232,225,209,190,189,166,193,255,255,255,255,255,
- 255,255,255,255,255,198,239,240,178,177,230,175,169,184,188,219,208,189,187,255,255,255,255,255,
- 255,255,255,255,255,198,241,242,240,218,237,236,240,235,241,244,221,208,182,255,255,255,255,255,
- 255,255,255,255,255,198,243,243,188,154,183,158,166,140,185,198,231,219,177,255,255,255,255,255,
- 255,255,255,255,255,198,243,245,248,228,241,241,226,249,237,227,239,232,177,255,255,255,255,255,
- 255,255,255,255,255,198,244,246,213,172,163,149,171,200,167,149,242,239,177,255,255,255,255,255,
- 255,255,255,255,255,198,249,248,240,218,237,236,240,235,241,244,244,242,177,255,255,255,255,255,
- 255,255,255,255,255,198,249,251,188,155,184,158,166,140,185,198,246,244,177,255,255,255,255,255,
- 255,255,255,255,255,198,251,253,248,228,241,241,226,249,237,227,249,246,177,255,255,255,255,255,
- 255,255,255,255,255,196,253,252,252,252,252,251,251,250,250,249,249,248,175,255,255,255,255,255,
- 255,255,255,255,255,194, 64, 30, 37, 37, 37, 37, 37, 37, 37, 37, 30, 64,188,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char doc_a_png[528] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-#if 0
-static unsigned char module_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,255,193,128,136,255,255,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,255,213,128,170,255,255,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,247,247,128,196,255,247,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,213,255,153,230,255,213,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,187,255,187,255,230,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,153,255,247,255,196,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,128,247,255,255,170,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,128,213,255,255,136,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,255,255,128,187,255,230,138,204,255,217,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char namespace_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,226,128,128,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,255,189,128,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,255,244,141,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,255,255,220,198,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,226,255,255,220,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,198,220,255,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,198,141,250,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,198,128,198,255,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,157,255,255,198,128,128,226,255,255,157,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char class_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,187,247,255,255,230,170,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,196,255,255,255,255,255,255,170,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,145,255,255,230,128,136,230,247,179,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,179,255,255,170,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,179,255,255,162,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,179,255,255,170,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,145,255,255,221,128,128,221,255,179,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,196,255,255,255,255,255,255,187,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,187,247,255,255,240,179,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,255,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-
-static unsigned char letter_a_png[528] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 60,156,204,204,204,204,204,204,204,204,156, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 78,255,255,255,255,255,255,255,255,255,255,255,252, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,210,255,255,255,255,255,255,255,255,255,255,255,255,207, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,255,255,255,255,255,255,255,255,255,255,255,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,222,255,255,255,255,255,255,255,255,255,255,255,255,219, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,111,255,255,255,255,255,255,255,255,255,255,255,255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 99,198,204,204,204,204,204,204,204,204,195, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-#endif
-
-
-static unsigned char arrow_right_png[352] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,152,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char arrow_right_a_png[352] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,223, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,176, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,248,117, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,211, 60, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,255,255, 77, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,211, 60, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,248,117, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,176, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,223, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char arrow_down_png[352] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
- 255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
- 255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
- 255,255,255,255,255,152,152,152,152,152,255,255,255,255,255,255,
- 255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,152,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char arrow_down_a_png[352] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,231,255,255,255,255,255,255,255,216, 0, 0, 0, 0,
- 0, 0, 0, 87,255,255,255,255,255,255,255, 65, 0, 0, 0, 0,
- 0, 0, 0, 0,186,255,255,255,255,255,164, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 38,251,255,255,255,241, 25, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,127,255,255,255,107, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,221,255,204, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72,253, 52, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-#define SPLITBAR_LINE 170,242,224,202,183,170
-#define SPLITBAR_BLOCK2 SPLITBAR_LINE , SPLITBAR_LINE
-#define SPLITBAR_BLOCK4 SPLITBAR_BLOCK2 , SPLITBAR_BLOCK2
-#define SPLITBAR_BLOCK8 SPLITBAR_BLOCK4 , SPLITBAR_BLOCK4
-#define SPLITBAR_BLOCK16 SPLITBAR_BLOCK8 , SPLITBAR_BLOCK8
-#define SPLITBAR_BLOCK32 SPLITBAR_BLOCK16 , SPLITBAR_BLOCK16
-
-#define SPLITBAR_ALTLINE1 170,242,170,202,170,170
-#define SPLITBAR_ALTLINE2 170,243,224,255,183,255
-#define SPLITBAR_ALTBLOCK2 SPLITBAR_ALTLINE1 , SPLITBAR_ALTLINE2
-#define SPLITBAR_ALTBLOCK4 SPLITBAR_ALTBLOCK2 , SPLITBAR_ALTBLOCK2
-#define SPLITBAR_ALTBLOCK8 SPLITBAR_ALTBLOCK4 , SPLITBAR_ALTBLOCK4
-
-static unsigned char splitbar_png[32*32*6] =
-{
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK8,
- SPLITBAR_BLOCK8,
- SPLITBAR_ALTBLOCK8,
- SPLITBAR_BLOCK8,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32
-};
-
-struct FTVImageInfo
-{
- const char *alt;
- const char *name;
- const unsigned char *data;
- //unsigned int len;
- unsigned short width, height;
-};
-
-//extern FTVImageInfo image_info[];
-
-#if 0
-#define FTVIMG_blank 0
-#define FTVIMG_doc 1
-#define FTVIMG_folderclosed 2
-#define FTVIMG_folderopen 3
-#define FTVIMG_lastnode 4
-#define FTVIMG_link 5
-#define FTVIMG_mlastnode 6
-#define FTVIMG_mnode 7
-#define FTVIMG_node 8
-#define FTVIMG_plastnode 9
-#define FTVIMG_pnode 10
-#define FTVIMG_vertline 11
-#define FTVIMG_ns 12
-#define FTVIMG_cl 13
-#define FTVIMG_mo 14
-
-#define FTV_S(name) #name
-#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
-#define FTVIMG_INDEX(name) FTVIMG_ ## name
-#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
-#define FTV_IMGATTRIBS(name) \
- "src=\"" FTV_ICON_FILE(name) "\" " \
- "alt=\"" << FTV_INFO(name).alt << "\" " \
- "width=\"" << FTV_INFO(name).width << "\" " \
- "height=\"" << FTV_INFO(name).height << "\" "
-
-
-static FTVImageInfo image_info[] =
-{
- { "&#160;", "ftv2blank.png", 0 /*ftv2blank_png*/ /*,174*/,16,22 },
- { "*", "ftv2doc.png", 0 /*ftv2doc_png*/ /*,255*/,24,22 },
- { "+", "ftv2folderclosed.png", 0 /*ftv2folderclosed_png*/ /*,259*/,24,22 },
- { "-", "ftv2folderopen.png", 0 /*ftv2folderopen_png*/ /*,261*/,24,22 },
- { "\\", "ftv2lastnode.png", 0 /*ftv2lastnode_png*/ /*,233*/,16,22 },
- { "-", "ftv2link.png", 0 /*ftv2link_png*/ /*,358*/,24,22 },
- { "\\", "ftv2mlastnode.png", 0 /*ftv2mlastnode_png*/ /*,160*/,16,22 },
- { "o", "ftv2mnode.png", 0 /*ftv2mnode_png*/ /*,194*/,16,22 },
- { "o", "ftv2node.png", 0 /*ftv2node_png*/ /*,235*/,16,22 },
- { "\\", "ftv2plastnode.png", 0 /*ftv2plastnode_png*/ /*,165*/,16,22 },
- { "o", "ftv2pnode.png", 0 /*ftv2pnode_png*/ /*,200*/,16,22 },
- { "|", "ftv2vertline.png", 0 /*ftv2vertline_png*/ /*,229*/,16,22 },
- { "N", "ftv2ns.png", 0 /*ftv2vertline_png*/ /*,352*/,24,22 },
- { "C", "ftv2cl.png", 0 /*ftv2vertline_png*/ /*,352*/,24,22 },
- { "M", "ftv2mo.png", 0 /*ftv2vertline_png*/ /*,352*/,24,22 },
- { 0, 0, 0 /*, 0*/, 0, 0 }
-};
-#endif
-
-static ColoredImgDataItem ftv_image_data[] =
-{
- { "ftv2blank.png", 16, 22, blank_png, blank_png },
- { "ftv2doc.png", 24, 22, doc_png, doc_a_png },
- { "ftv2folderclosed.png", 24, 22, folderclosed_png, folderclosed_a_png },
- { "ftv2folderopen.png", 24, 22, folderopen_png, folderopen_a_png },
-// { "ftv2ns.png", 24, 22, namespace_png, letter_a_png },
-// { "ftv2mo.png", 24, 22, module_png, letter_a_png },
-// { "ftv2cl.png", 24, 22, class_png, letter_a_png },
- { "ftv2lastnode.png", 16, 22, blank_png, blank_png },
- { "ftv2link.png", 24, 22, doc_png, doc_a_png },
- { "ftv2mlastnode.png", 16, 22, arrow_down_png, arrow_down_a_png },
- { "ftv2mnode.png", 16, 22, arrow_down_png, arrow_down_a_png },
- { "ftv2node.png", 16, 22, blank_png, blank_png },
- { "ftv2plastnode.png", 16, 22, arrow_right_png, arrow_right_a_png },
- { "ftv2pnode.png", 16, 22, arrow_right_png, arrow_right_a_png },
- { "ftv2vertline.png", 16, 22, blank_png, blank_png },
- { "ftv2splitbar.png", 6,1024, splitbar_png, 0 },
- { 0, 0, 0, 0, 0 }
-};
-
static int folderId=1;
struct FTVNode
@@ -1118,7 +579,7 @@ static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t,
static void generateJSNavTree(const QList<FTVNode> &nodeList)
{
QCString htmlOutput = Config_getString("HTML_OUTPUT");
- QFile f(htmlOutput+"/navtree.js");
+ QFile f(htmlOutput+"/navtreedata.js");
NavIndexEntryList navIndex;
if (f.open(IO_WriteOnly) /*&& fidx.open(IO_WriteOnly)*/)
{
@@ -1218,8 +679,8 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
}
t << endl << "var SYNCONMSG = '" << theTranslator->trPanelSynchronisationTooltip(FALSE) << "';";
t << endl << "var SYNCOFFMSG = '" << theTranslator->trPanelSynchronisationTooltip(TRUE) << "';";
- t << endl << navtree_script;
}
+ ResourceMgr::instance().copyResource("navtree.js",htmlOutput);
}
//-----------------------------------------------------------
@@ -1228,7 +689,13 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
void FTVHelp::generateTreeViewImages()
{
QCString dname=Config_getString("HTML_OUTPUT");
- writeColoredImgData(dname,ftv_image_data);
+ const ResourceMgr &rm = ResourceMgr::instance();
+ rm.copyResource("doc.luma",dname);
+ rm.copyResource("folderopen.luma",dname);
+ rm.copyResource("folderclosed.luma",dname);
+ rm.copyResource("arrowdown.luma",dname);
+ rm.copyResource("arrowright.luma",dname);
+ rm.copyResource("splitbar.lum",dname);
}
// new style scripts
@@ -1239,28 +706,9 @@ void FTVHelp::generateTreeViewScripts()
// generate navtree.js & navtreeindex.js
generateJSNavTree(m_indentNodes[0]);
- // generate resize.js
- {
- QFile f(htmlOutput+"/resize.js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << resize_script;
- }
- }
- // generate navtree.css
- {
- QFile f(htmlOutput+"/navtree.css");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << substitute(
- replaceColorMarkers(navtree_css),
- "$width",
- QCString().setNum(Config_getInt("TREEVIEW_WIDTH"))+"px"
- );
- }
- }
+ // copy resize.js & navtree.css
+ ResourceMgr::instance().copyResource("resize.js",htmlOutput);
+ ResourceMgr::instance().copyResource("navtree.css",htmlOutput);
}
// write tree inside page
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 9160538..5c08048 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -151,13 +151,13 @@ bool GroupDef::addClass(const ClassDef *cd)
static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
if (cd->isHidden()) return FALSE;
updateLanguage(cd);
- if (classSDict->find(cd->qualifiedName())==0)
+ QCString qn = cd->name();
+ if (classSDict->find(qn)==0)
{
- QCString qn = cd->qualifiedName();
//printf("--- addClass %s sort=%d\n",qn.data(),sortBriefDocs);
if (sortBriefDocs)
{
- classSDict->inSort(cd->qualifiedName(),cd);
+ classSDict->inSort(qn,cd);
}
else
{
@@ -180,13 +180,13 @@ bool GroupDef::addClass(const ClassDef *cd)
j++;
}
//printf("Found scope at index %d\n",j);
- classSDict->insertAt(j,cd->qualifiedName(),cd);
+ classSDict->insertAt(j,qn,cd);
found=TRUE;
}
}
if (!found) // no insertion point found -> just append
{
- classSDict->append(cd->qualifiedName(),cd);
+ classSDict->append(qn,cd);
}
}
return TRUE;
@@ -510,7 +510,31 @@ void GroupDef::removeMember(MemberDef *md)
bool GroupDef::containsGroup(const GroupDef *def)
{
- return this==def || groupList->find(def) >= 0;
+ if (this==def)
+ {
+ return TRUE;
+ }
+ else if (groupList->find(def)>=0)
+ {
+ return TRUE;
+ }
+ else // look for subgroups as well
+ {
+ GroupList *groups = partOfGroups();
+ if (groups)
+ {
+ GroupListIterator it(*groups);
+ GroupDef *gd;
+ for (;(gd=it.current());++it)
+ {
+ if (gd->containsGroup(def))
+ {
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
}
void GroupDef::addGroup(const GroupDef *def)
@@ -1346,16 +1370,23 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
for (;(g=gli.current());++gli)
{
GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)) &&
- !gd->containsGroup(subGroup) )
- {
- gd->addGroup(subGroup);
- subGroup->makePartOfGroup(gd);
- }
- else if (gd==subGroup)
+ if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
{
- warn(root->fileName,root->startLine,"Trying to add group %s to itself!",
- gd->name().data());
+ if (gd==subGroup)
+ {
+ warn(root->fileName,root->startLine,"Refusing to add group %s to itself",
+ gd->name().data());
+ }
+ else if (gd->containsGroup(subGroup))
+ {
+ warn(root->fileName,root->startLine,"Refusing to add group %s to group %s, since the latter is already a "
+ "subgroup of the former\n", subGroup->name().data(),gd->name().data());
+ }
+ else
+ {
+ gd->addGroup(subGroup);
+ subGroup->makePartOfGroup(gd);
+ }
}
}
}
@@ -1503,6 +1534,7 @@ void GroupDef::addListReferences()
getOutputFileBase(),
theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name(),
+ 0,
0
);
}
@@ -1589,7 +1621,7 @@ void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
}
if (ml)
{
- ml->writeDeclarations(ol,0,0,0,this,title,0,definitionType());
+ ml->writeDeclarations(ol,0,0,0,this,title,0);
}
}
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index e319a1f..cd6b635 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -325,6 +325,32 @@ void HtmlDocVisitor::visit(DocStyleChange *s)
}
+static void visitPreCaption(FTextStream &t, DocVerbatim *s)
+{
+ if (s->hasCaption())
+ {
+ t << "<div class=\"caption\">" << endl;
+ }
+}
+
+
+static void visitPostCaption(FTextStream &t, DocVerbatim *s)
+{
+ if (s->hasCaption())
+ {
+ t << "</div>" << endl;
+ }
+}
+
+
+static void visitCaption(HtmlDocVisitor *parent, QList<DocNode> children)
+{
+ QListIterator<DocNode> cli(children);
+ DocNode *n;
+ for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
+}
+
+
void HtmlDocVisitor::visit(DocVerbatim *s)
{
if (m_hide) return;
@@ -382,6 +408,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
static int dotindex = 1;
QCString fileName(4096);
+ forceEndParagraph(s);
fileName.sprintf("%s%d%s",
(Config_getString("HTML_OUTPUT")+"/inline_dotgraph_").data(),
dotindex++,
@@ -392,16 +419,21 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
{
err("Could not open file %s for writing\n",fileName.data());
}
- file.writeBlock( s->text(), s->text().length() );
- file.close();
+ else
+ {
+ file.writeBlock( s->text(), s->text().length() );
+ file.close();
- forceEndParagraph(s);
- m_t << "<div align=\"center\">" << endl;
- writeDotFile(fileName,s->relPath(),s->context());
- m_t << "</div>" << endl;
- forceStartParagraph(s);
+ m_t << "<div align=\"center\">" << endl;
+ writeDotFile(fileName,s->relPath(),s->context());
+ visitPreCaption(m_t, s);
+ visitCaption(this, s->children());
+ visitPostCaption(m_t, s);
+ m_t << "</div>" << endl;
- if (Config_getBool("DOT_CLEANUP")) file.remove();
+ if (Config_getBool("DOT_CLEANUP")) file.remove();
+ }
+ forceStartParagraph(s);
}
break;
case DocVerbatim::Msc:
@@ -420,17 +452,24 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
{
err("Could not open file %s.msc for writing\n",baseName.data());
}
- QCString text = "msc {";
- text+=s->text();
- text+="}";
+ else
+ {
+ QCString text = "msc {";
+ text+=s->text();
+ text+="}";
- file.writeBlock( text, text.length() );
- file.close();
+ file.writeBlock( text, text.length() );
+ file.close();
- m_t << "<div align=\"center\">" << endl;
- writeMscFile(baseName+".msc",s->relPath(),s->context());
- if (Config_getBool("DOT_CLEANUP")) file.remove();
- m_t << "</div>" << endl;
+ m_t << "<div align=\"center\">" << endl;
+ writeMscFile(baseName+".msc",s->relPath(),s->context());
+ visitPreCaption(m_t, s);
+ visitCaption(this, s->children());
+ visitPostCaption(m_t, s);
+ m_t << "</div>" << endl;
+
+ if (Config_getBool("DOT_CLEANUP")) file.remove();
+ }
forceStartParagraph(s);
}
break;
@@ -442,6 +481,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
QCString baseName = writePlantUMLSource(htmlOutput,s->exampleFile(),s->text());
m_t << "<div align=\"center\">" << endl;
writePlantUMLFile(baseName,s->relPath(),s->context());
+ visitPreCaption(m_t, s);
+ visitCaption(this, s->children());
+ visitPostCaption(m_t, s);
m_t << "</div>" << endl;
forceStartParagraph(s);
}
diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp
index 216b65c..9327526 100644
--- a/src/htmlentity.cpp
+++ b/src/htmlentity.cpp
@@ -193,7 +193,7 @@ static struct htmlEntityInfo
{ SYM(upsih), "\xcf\x92", "&upsih;", "<upsih/>", "&#978;", "{$\\Upsilon$}", NULL, "\\u978?", { NULL, DocSymbol::Perl_unknown }},
{ SYM(piv), "\xcf\x96", "&piv;", "<piv/>", "&#982;", "{$\\varpi$}", NULL, "\\u982?", { NULL, DocSymbol::Perl_unknown }},
{ SYM(bull), "\xe2\x80\xa2", "&bull;", "<bull/>", "&#8226;", "\\textbullet{}", NULL, "\\'95", { NULL, DocSymbol::Perl_unknown }},
- { SYM(hellip), "\xe2\x80\xa6", "&hellip;", "<hellip/>", "&#8230;", "{$\\cdots$}", NULL, "\\'85", { NULL, DocSymbol::Perl_unknown }},
+ { SYM(hellip), "\xe2\x80\xa6", "&hellip;", "<hellip/>", "&#8230;", "{$\\dots$}", NULL, "\\'85", { NULL, DocSymbol::Perl_unknown }},
{ SYM(prime), "\xe2\x80\xb2", "&prime;", "<prime/>", "&#8242;", "'", NULL, "\\u8242?", { "\\\'", DocSymbol::Perl_string }},
{ SYM(Prime), "\xe2\x80\xb3", "&Prime;", "<Prime/>", "&#8243;", "''", NULL, "\\u8243?", { "\"", DocSymbol::Perl_char }},
{ SYM(oline), "\xe2\x80\xbe", "&oline;", "<oline/>", "&#8254;", "{$\\overline{\\,}$}", NULL, "\\u8254?", { NULL, DocSymbol::Perl_unknown }},
@@ -298,7 +298,7 @@ static struct htmlEntityInfo
// doxygen extension to the HTML4 table of HTML entities
{ SYM(tm), "\xe2\x84\xa2", "&trade;", "<trademark/>", "&#8482;", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }},
- { SYM(apos), "'", "'", "'", "&apos;", "'", "'", "'", { "\\\'", DocSymbol::Perl_string }},
+ { SYM(apos), "'", "'", "'", "&apos;", "\\textquotesingle{}", "'", "'", { "\\\'", DocSymbol::Perl_string }},
// doxygen commands represented as HTML entities
{ SYM(BSlash), "\\", "\\", "\\", "\\", "\\textbackslash{}", "\\\\", "\\\\", { "\\\\", DocSymbol::Perl_string }},
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 62ae1c7..3bb6792 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -41,826 +41,16 @@
#include "image.h"
#include "ftvhelp.h"
#include "bufstr.h"
+#include "resourcemgr.h"
//#define DBG_HTML(x) x;
-#define DBG_HTML(x)
-
-static const char defaultHtmlHeader[] =
-#include "header.html.h"
-;
-
-static const char defaultHtmlFooter[] =
-#include "footer.html.h"
-;
-
-static const char defaultStyleSheet[] =
-#include "doxygen.css.h"
-;
-
-static const char search_functions_script[]=
-#include "search_functions.php.h"
-;
-
-static const char search_opensearch_script[]=
-#include "search_opensearch.php.h"
-;
-
-static const char search_styleSheet[] =
-#include "search.css.h"
-;
-
-static const char search_jquery_script1[]=
-#include "jquery_p1.js.h"
-;
-
-static const char search_jquery_script2[]=
-#include "jquery_p2.js.h"
-;
-
-static const char search_jquery_script3[]=
-#include "jquery_p3.js.h"
-;
-
-static const char search_jquery_script4[]=
-#include "jquery_ui.js.h"
-;
-
-static const char search_jquery_script5[]=
-#include "jquery_fx.js.h"
-;
-
-static const char search_jquery_script6[]=
-#include "jquery_pt.js.h"
-;
-
-static const char svgpan_script[]=
-#include "svgpan.js.h"
-;
-
-static const char dynsections_script[]=
-#include "dynsections.js.h"
-;
-
-static const char extsearch_script[]=
-#include "extsearch.js.h"
-;
+#define DBG_HTML(x)
static QCString g_header;
static QCString g_footer;
static QCString g_mathjax_code;
-//------------------------- Pictures for the Tabs ------------------------
-
-// active tab background luma
-static unsigned char tab_a_png[36] =
-{
- 31, 42, 59, 69, 73, 74, 75, 77, 77,
- 77, 79, 80, 80, 82, 81, 83, 84, 86,
- 87, 88, 89, 90, 91, 91, 93, 94, 94,
- 96, 96, 97, 98, 98, 99, 99, 99, 100
-};
-
-// normal tab background luma
-static unsigned char tab_b_png[36] =
-{
- 218, 228, 235, 233, 230, 227, 225, 222, 221,
- 218, 217, 215, 214, 213, 212, 211, 210, 209,
- 209, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 207, 209, 211, 213, 217, 219, 206, 188
-};
-
-// hovering tab background luma
-static unsigned char tab_h_png[36] =
-{
- 181, 191, 198, 196, 193, 190, 188, 185, 184,
- 181, 180, 178, 177, 176, 175, 174, 173, 172,
- 172, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 164, 166, 168, 170, 174, 176, 163, 145
-};
-
-// shadowed header
-static unsigned char header_png[12] =
-{
- 255, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250
-};
-
-// function header
-static unsigned char func_header_png[56] =
-{
- 248, 247, 246, 245, 244, 243, 242, 241,
- 240, 239, 238, 237, 236, 235, 234, 233,
- 232, 231, 230, 229, 228, 223, 223, 223,
- 223, 223, 223, 223, 223, 223, 223, 223,
- 224, 224, 224, 224, 225, 225, 225, 225,
- 225, 226, 226, 226, 227, 227, 227, 227,
- 228, 228, 228, 229, 229, 229, 229, 229
-};
-
-// tab separator
-static unsigned char tab_s_png[36] =
-{
- 187, 186, 185, 183, 182, 181, 180, 178, 176,
- 174, 173, 171, 169, 167, 164, 163, 161, 158,
- 156, 154, 152, 150, 148, 145, 143, 141, 140,
- 138, 136, 134, 131, 131, 128, 126, 125, 124
-};
-
-// breadcrumbs luma
-static unsigned char bc_s_png[240] =
-{
- 150,187,187,148,148,148,148,148,
- 147,175,186,147,147,147,147,147,
- 146,153,185,185,146,146,146,146,
- 144,144,177,183,144,144,144,144,
- 144,144,159,182,144,144,144,144,
- 143,143,144,179,181,143,143,143,
- 142,142,142,165,180,142,142,142,
- 141,141,141,144,178,178,141,141,
- 139,139,139,139,167,176,139,139,
- 137,137,137,137,146,174,137,137,
- 137,137,137,137,137,169,173,137,
- 135,135,135,135,135,150,171,135,
- 133,133,133,133,133,135,167,169,
- 132,132,132,132,132,132,154,167,
- 129,129,129,129,129,129,140,164,
- 129,129,129,129,129,129,154,163,
- 127,127,127,127,127,128,161,161,
- 125,125,125,125,125,141,158,125,
- 123,123,123,123,123,152,156,123,
- 121,121,121,121,129,154,121,121,
- 120,120,120,120,143,152,120,120,
- 118,118,118,120,150,150,118,118,
- 117,117,117,132,148,117,117,117,
- 114,114,114,142,145,114,114,114,
- 113,113,120,143,113,113,113,113,
- 111,111,133,141,111,111,111,111,
- 110,112,140,140,110,110,110,110,
- 109,124,138,109,109,109,109,109,
- 107,133,136,107,107,107,107,107,
- 111,134,106,106,106,106,106,106
-};
-
-// breadcrumbs alpha map
-static unsigned char bc_s_a_png[240] =
-{
- 241,241, 21, 0, 0, 0, 0, 0,
- 162,205,117, 0, 0, 0, 0, 0,
- 54,231,225, 3, 0, 0, 0, 0,
- 0,198,215, 78, 0, 0, 0, 0,
- 0, 93,211,186, 0, 0, 0, 0,
- 0, 6,232,235, 42, 0, 0, 0,
- 0, 0,132,203,147, 0, 0, 0,
- 0, 0, 27,242,241, 15, 0, 0,
- 0, 0, 0,168,205,108, 0, 0,
- 0, 0, 0, 63,228,219, 0, 0,
- 0, 0, 0, 0,207,221, 72, 0,
- 0, 0, 0, 0,102,208,177, 0,
- 0, 0, 0, 0, 9,238,240, 36,
- 0, 0, 0, 0, 0,138,201,138,
- 0, 0, 0, 0, 0, 77,187,158,
- 0, 0, 0, 0, 0,159,204,120,
- 0, 0, 0, 0, 15,241,241, 21,
- 0, 0, 0, 0,111,208,171, 0,
- 0, 0, 0, 0,210,222, 66, 0,
- 0, 0, 0, 60,227,219, 0, 0,
- 0, 0, 0,162,204,114, 0, 0,
- 0, 0, 18,238,238, 21, 0, 0,
- 0, 0,114,205,165, 0, 0, 0,
- 0, 0,216,225, 60, 0, 0, 0,
- 0, 66,226,216, 0, 0, 0, 0,
- 0,165,204,111, 0, 0, 0, 0,
- 21,241,241, 18, 0, 0, 0, 0,
- 117,203,159, 0, 0, 0, 0, 0,
- 219,227, 57, 0, 0, 0, 0, 0,
- 211,201, 0, 0, 0, 0, 0, 0
-};
-
-// doxygen logo luma
-static unsigned char doxygen_png[3224] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 91, 91, 91, 91, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,253,253,253,253, 32, 32,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,251,251,251,251, 32, 32,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249,249, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249, 32, 32, 32, 32, 32,249, 32, 32, 32, 32, 32,255,255,255,
- 32, 32, 32, 32, 46,132,190,190,147, 61,247,247,247,247, 32, 32,247,247, 32, 32,118,161,190,190,161,118, 32, 32,247, 32, 46, 89, 89, 89, 89, 46, 32,247,247, 32, 89, 89, 89, 89, 61, 89, 89, 89, 89, 46, 32,247, 32, 46, 89, 89, 89, 89, 32,247, 32, 32,118,175,190,161, 89, 61, 89, 89, 89, 61, 32,247,247,247, 32, 32,104,147,190,190,190,132, 89, 32, 32,247,247, 32, 46, 89, 89, 89, 75, 32, 89,161,190,161, 75, 32,255,255,
- 32, 32, 32, 74,230,244,244,244,244,244,244,244,244,244, 32, 32,244, 32, 74,216,244,244,244,244,244,244,216, 74, 32,244, 32,187,244,244,244,159, 32,244, 32,117,244,244,244,230, 46,173,244,244,244,131, 32,244, 32,131,244,244,244,173, 32, 32, 46,173,244,244,244,244,244,230,244,244,244,131, 32,244,244, 32, 74,202,244,244,244,244,244,244,244,173, 46, 32,244, 32, 89,244,244,244,187,145,244,244,244,244,244, 89, 32,255,
- 32, 32, 46,213,241,241,241,241,241,241,241,241,241,241, 32, 32, 32, 60,227,241,241,241,241,241,241,241,241,227, 60, 32, 32, 46,227,241,241,241,102, 32, 60,227,241,241,241, 88, 32,116,241,241,241,199, 32,241, 32,185,241,241,241,116, 32, 32,143,241,241,241,241,241,241,241,241,241,241,130, 32,241, 32, 74,227,241,241,241,199,185,241,241,241,241,171, 32,241, 32, 88,241,241,241,241,241,241,241,241,241,241,199, 32,255,
- 32, 32,128,237,237,237,223,128, 87,128,237,237,237,237, 32, 32, 32,182,237,237,237,196,100,100,196,237,237,237,182, 32,237, 32,100,237,237,237,223, 59,196,237,237,237,141, 32, 32, 46,237,237,237,237, 59, 32, 46,237,237,237,237, 46, 32, 59,237,237,237,237,169, 87, 87,182,237,237,237,128, 32,237, 32,196,237,237,237, 87, 32, 32, 73,223,237,237,237, 73, 32, 32, 87,237,237,237,237,223,182,223,237,237,237,237, 46, 32,
- 32, 32,207,234,234,234,113, 32, 32, 32,234,234,234,234, 32, 32, 59,234,234,234,221, 45, 32, 32, 45,221,234,234,234, 59, 32,234, 32,140,234,234,234,221,234,234,234,194, 32, 32,234, 32,167,234,234,234,126, 32, 99,234,234,234,167, 32, 32,126,234,234,234,180, 32, 32, 32,126,234,234,234,126, 32, 32, 99,234,234,234,167, 32, 32, 32, 32,153,234,234,234,126, 32, 32, 86,234,234,234,207, 45, 32, 45,234,234,234,234, 86, 32,
- 32, 45,231,231,231,218, 32, 32, 32, 32,231,231,231,231, 32, 32, 98,231,231,231,165, 32,231,231, 32,165,231,231,231, 98, 32,231, 32, 45,191,231,231,231,231,231,218, 72, 32,231,231, 32, 98,231,231,231,165, 32,151,231,231,231,112, 32, 32,165,231,231,231,112, 32,231, 32,125,231,231,231,125, 32, 32,138,231,231,231,178,125,125,125,125,178,231,231,231,178, 32, 32, 85,231,231,231,178, 32,255, 32,191,231,231,231, 85, 32,
- 32, 84,227,227,227,175, 32, 32, 32, 32,227,227,227,227, 32, 32,123,227,227,227,123, 32,227,227, 32,123,227,227,227,123, 32,227,227, 32, 71,227,227,227,227,227,123, 32,227,227,227,227, 32,214,227,227,227, 45,201,227,227,227, 45, 32, 32,175,227,227,227, 84, 32,227, 32,123,227,227,227,123, 32, 32,175,227,227,227,227,227,227,227,227,227,227,227,227,175, 32, 32, 84,227,227,227,175, 32,255, 32,175,227,227,227, 84, 32,
- 32, 83,223,223,223,172, 32, 32, 32, 32,223,223,223,223, 32, 32,121,223,223,223,121, 32,223,223, 32,121,223,223,223,121, 32,223,223,223, 32,172,223,223,223,210, 45, 32,223,223,223,223, 32,147,223,223,223,134,223,223,223,147, 32,223, 32,172,223,223,223, 83, 32,223, 32,121,223,223,223,121, 32, 32,172,223,223,223,223,223,223,223,223,223,223,223,223,172, 32, 32, 83,223,223,223,172, 32,255, 32,172,223,223,223, 83, 32,
- 32, 82,220,220,220,170, 32, 32, 32, 32,220,220,220,220, 32, 32,120,220,220,220,120, 32,220,220, 32,120,220,220,220,120, 32,220,220, 32, 95,220,220,220,220,220,132, 32,220,220,220,220, 32, 95,220,220,220,207,220,220,220, 95, 32,220, 32,170,220,220,220,107, 32,220, 32,120,220,220,220,120, 32, 32,170,220,220,220,132, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 82,220,220,220,170, 32,255, 32,170,220,220,220, 82, 32,
- 32, 57,216,216,216,216, 32, 32, 32, 32,216,216,216,216, 32, 32, 81,216,216,216,167, 32,216,216, 32,155,216,216,216, 81, 32,216, 32, 57,204,216,216,216,216,216,216, 93, 32,216,216,216,216, 32,204,216,216,216,216,216,204, 32,216,216, 32,118,216,216,216,167, 32, 32, 32,130,216,216,216,118, 32, 32,118,216,216,216,191, 32, 32,216,216,216, 32, 32, 44, 57, 32, 32, 81,216,216,216,167, 32,255, 32,167,216,216,216, 81, 32,
- 32, 32,189,213,213,213,116, 32, 32, 80,213,213,213,213, 32, 32, 44,201,213,213,213, 68, 32, 32, 68,213,213,213,213, 44, 32, 32, 32,165,213,213,213,165,213,213,213,201, 44, 32,213,213,213, 32,129,213,213,213,213,213,141, 32,213,213, 32, 80,213,213,213,213,165,116,153,213,213,213,213,116, 32, 32, 56,213,213,213,213,153, 56, 32, 32, 32, 44,104,189,116, 32, 32, 80,213,213,213,165, 32,255, 32,165,213,213,213, 80, 32,
- 32, 32,139,210,210,210,210,174,174,210,210,210,210,210, 32, 32, 32,127,210,210,210,198,127,127,198,210,210,210,127, 32,210, 32,115,210,210,210,174, 44,139,210,210,210,163, 32, 32,210,210, 32, 68,210,210,210,210,210, 91, 32,210,210,210, 32,174,210,210,210,210,210,210,210,210,210,210,115, 32,210, 32,127,210,210,210,210,210,174,163,163,210,210,210,115, 32, 32, 79,210,210,210,163, 32,255, 32,163,210,210,210, 79, 32,
- 32, 32, 55,194,206,206,206,206,206,194,206,206,206,206, 32, 32, 32, 44,171,206,206,206,206,206,206,206,206,171, 44, 32, 32, 67,206,206,206,206, 67, 32, 44,183,206,206,206,113, 32,206,206,206, 32,183,206,206,206,194, 32,206,206,206,206, 32, 67,194,206,206,206,206,206,171,206,206,206,113, 32,206, 32, 32,136,206,206,206,206,206,206,206,206,206,206,113, 32, 32, 78,206,206,206,160, 32,255, 32,160,206,206,206, 78, 32,
- 32, 32, 32,100,192,203,203,203,157, 55,203,203,203,203, 32, 32,203, 32, 43,135,203,203,203,203,203,203,135, 43, 32, 32, 43,180,203,203,203,112, 32,203, 32, 66,203,203,203,203, 66, 32,203,203, 32,157,203,203,203,135, 32,203,203,203,203,203, 32, 43,112,157,157,123, 55,112,203,203,203,112, 32,203,203, 32, 32, 78,146,203,203,203,203,203,203,169,123, 55, 32, 32, 78,203,203,203,157, 32,255, 32,157,203,203,203, 78, 32,
- 32, 32, 32, 32, 54,110,110, 88, 32, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 54, 99,110,110, 99, 54, 32, 32,200,200, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,200,200, 32, 54,200,200,200,200, 77, 32,200,200,200,200,200, 32, 32, 32, 32, 32, 32, 32,166,200,200,200, 88, 32,200,200,200,200, 32, 32, 32, 66, 77, 77, 77, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,255, 32, 32, 32, 32, 32, 32,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,198,198,198,198, 32, 32, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, 32,109,198,198,198,176, 32,198,198,198,198,198, 32, 98,121, 76, 32, 32, 54,109,198,198,198,198, 43, 32,198,198,198,198,198,198,198, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,255,255,255,255,255,255,255,255,
- 32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 33,159,191,191,191,117, 36, 41, 41, 41, 41, 41, 34,108,191,191,191,191,191,191,191,191,191,117, 36, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
- 32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 78, 38, 64,190,192,192,192, 66, 66, 41, 41, 85,128, 65, 34,107,190,192,192,192,192,192,192,192,139, 48, 39, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
- 32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 96, 36, 95,147,148,148,139, 55, 41, 41, 85,121,128, 91, 38, 75,137,158,190,190,190,170,139, 97, 49, 37, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
- 32, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41, 36, 45, 45, 45, 48, 38, 41, 41, 76, 76, 76, 76, 76, 37, 34, 42, 33, 33, 33, 39, 48, 59, 41, 41, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41,255,
- 32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-// doxygen logo alpha map
-static unsigned char doxygen_a_png[3224] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,145,247,247,247,247,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 16,115,181,181,132,247,247,247,247,247,247, 0, 0, 0, 0, 0, 99,148,181,181,148, 99, 0, 0, 0, 0, 16, 66, 66, 66, 66, 16, 0, 0, 0, 0, 66, 66, 66, 66, 33, 66, 66, 66, 66, 16, 0, 0, 0, 16, 66, 66, 66, 66, 0, 0, 0, 0, 99,165,181,148, 66, 33, 66, 66, 66, 33, 0, 0, 0, 0, 0, 0, 82,132,181,181,181,115, 66, 0, 0, 0, 0, 0, 16, 66, 66, 66, 49, 0, 66,148,181,148, 49, 0, 0, 0,
- 0, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247, 0, 0, 0,112,214,247,247,247,247,247,247,214,112, 0, 16,247,247,247,247,247,247, 46, 0, 0,145,247,247,247,247,247,247,247,247,247,247, 16, 0, 16,247,247,247,247,247, 66, 0, 63,165,247,247,247,247,247,247,247,247,247,247, 33, 0, 0, 0, 96,198,247,247,247,247,247,247,247,165, 63, 0, 0, 16,247,247,247,247,247,145,247,247,247,247,247,145, 0, 0,
- 0, 0,112,247,247,247,247,247,247,247,247,247,247,247,247, 0, 0,129,247,247,247,247,247,247,247,247,247,247,129, 0,181,247,247,247,247,247,148, 0,129,247,247,247,247,247,247,247,247,247,247,247,115, 0,115,247,247,247,247,247,165, 30,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247, 63, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247, 96, 0,
- 0, 16,247,247,247,247,247,247,247,247,247,247,247,247,247, 0, 79,247,247,247,247,247,247,247,247,247,247,247,247, 79, 79,247,247,247,247,247,247,129,247,247,247,247,247,247,129,247,247,247,247,247,198, 0,181,247,247,247,247,247, 99,145,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 96,247,247,247,247,247,247,247,247,247,247,247,247,165, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247,198, 0,
- 0,115,247,247,247,247,247,247,247,247,247,247,247,247,247, 0,181,247,247,247,247,247,247,247,247,247,247,247,247,181, 0,129,247,247,247,247,247,247,247,247,247,247,247,145, 16,247,247,247,247,247,247, 33,247,247,247,247,247,247, 33,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 0,198,247,247,247,247,247,198,181,247,247,247,247,247,247, 49, 66,247,247,247,247,247,247,247,247,247,247,247,247,247, 16,
- 0,214,247,247,247,247,247,129, 66,247,247,247,247,247,247, 33,247,247,247,247,247,247, 96, 96,247,247,247,247,247,247, 33, 0,145,247,247,247,247,247,247,247,247,247,198, 30, 0,165,247,247,247,247,247,115,247,247,247,247,247,165,115,247,247,247,247,247,181, 66,115,247,247,247,247,247,115, 82,247,247,247,247,247,165,115,115,148,247,247,247,247,247,115, 66,247,247,247,247,247,247,181,247,247,247,247,247,247, 66,
- 16,247,247,247,247,247,231, 0, 0,247,247,247,247,247,247, 82,247,247,247,247,247,165, 0, 0,165,247,247,247,247,247, 82, 0, 30,247,247,247,247,247,247,247,247,247, 96, 0, 0, 82,247,247,247,247,247,165,247,247,247,247,247, 99,165,247,247,247,247,247, 99, 0,115,247,247,247,247,247,115,132,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,198,247,247,247,247,247, 66,
- 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0, 96,247,247,247,247,247,247,247,129, 0, 0, 0, 0,231,247,247,247,247,247,247,247,247,247,247, 16,181,247,247,247,247,247, 66, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0, 0,181,247,247,247,247,247,247, 30, 0, 0, 0, 0,148,247,247,247,247,247,247,247,247,247,148, 0,181,247,247,247,247,247, 66, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0,129,247,247,247,247,247,247,247,145, 0, 0, 0, 0, 82,247,247,247,247,247,247,247,247,247, 82, 0,181,247,247,247,247,247, 99, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 79, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 33,247,247,247,247,247,247, 14, 0,247,247,247,247,247,247, 66,247,247,247,247,247,181, 0, 0,165,247,247,247,247,247, 66, 0, 79,247,247,247,247,247,247,247,247,247,129, 0, 0, 0, 0,231,247,247,247,247,247,247,247,231, 0, 0,115,247,247,247,247,247,181,115,165,247,247,247,247,247,115,115,247,247,247,247,247,214, 63, 0, 0, 0, 16,112,247,247, 33, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0,214,247,247,247,247,247,198,198,247,247,247,247,247,247, 16,247,247,247,247,247,247,132,132,247,247,247,247,247,247, 16, 14,181,247,247,247,247,247,247,247,247,247,247, 79, 0, 0, 0,132,247,247,247,247,247,247,247,148, 0, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 33,247,247,247,247,247,247,247,198,181,181,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0,148,247,247,247,247,247,247,247,247,247,247,247,247,247, 0,132,247,247,247,247,247,247,247,247,247,247,247,247,145, 0,145,247,247,247,247,247,247,247,247,247,247,247,181, 14, 0, 0, 49,247,247,247,247,247,247,247, 82, 0, 0, 0,198,247,247,247,247,247,247,247,247,247,247,247,247,115, 0,145,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0, 46,247,247,247,247,247,247,247,247,247,247,247,247,247, 0, 30,247,247,247,247,247,247,247,247,247,247,247,247, 30,112,247,247,247,247,247,247, 96,247,247,247,247,247,247,145, 0, 0, 0,214,247,247,247,247,247,231, 0, 0, 0, 0, 96,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 30,148,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0, 0,129,247,247,247,247,247,247,247,247,247,247,247,247, 0, 0, 96,247,247,247,247,247,247,247,247,247,247, 96, 16,247,247,247,247,247,247,145, 0,112,247,247,247,247,247,247, 49, 0, 0,181,247,247,247,247,247,148, 0, 0, 0, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247,115, 0, 0, 46,148,247,247,247,247,247,247,247,247,247,247,247, 33, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0, 0, 0,129,247,247,247,247,181,145,247,247,247,247,145, 0, 0, 0, 46,148,247,247,247,247,247,247,148, 46, 0, 0,112,214,247,247,247,145, 14, 0, 0,145,247,247,247,247,145, 0, 0, 33,247,247,247,247,247,247, 66, 0, 0, 0, 0, 0, 99,132,115,181,181,132,198,247,247,247,247,247, 82, 0, 0, 0, 0, 66,165,247,247,247,247,247,247,198,132, 33, 0, 0,145,247,247,247,181, 79, 0, 79,181,247,247,247,145, 0,
- 0, 0, 0, 0, 33,115,115, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 99,115,115, 99, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115,247,247,247,247,247,214, 0, 0, 0, 0, 0, 99,247,247,247,247,247,247,247,247,247,247,247,247, 16, 0, 0, 0, 0, 0, 0, 0, 49, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,224,255,255,255,255,255,255,101,164,255,255,255,143,250,255,255,255,255,255,255,255,255,255,255,255, 98,170,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
- 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,136,251,255,255,255,255,255,255,101,130,255,255,255,153,250,255,255,255,255,255,255,255,255,255,255,121, 98,189,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
- 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,252,255,255,255,255,255,164,164,255,255,255,255,176,249,251,255,255,255,255,255,255,255,255,150, 86,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
- 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,164,198,255,255,255,255,201,133,164,255,255,255,255,255,145,203,255,255,255,255,255,255,255,117, 79,194,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
- 0, 66,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 73, 73,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 47, 70,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 66, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-// magnifying glass icon (raw png)
-unsigned char mag_sel_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
- 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
- 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
- 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
- 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
- 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
- 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0xe4, 0x94, 0xbb, 0x8a, 0x22, 0x41, 0x14, 0x86, 0xbf, 0xda, 0x16, 0x3a,
- 0x10, 0xba, 0x03, 0x2f, 0x78, 0x03, 0x51, 0x11, 0x4c, 0xd4, 0x40, 0xd4,
- 0x37, 0x30, 0x31, 0x30, 0xe9, 0x07, 0xf0, 0x15, 0x14, 0x7c, 0x1e, 0x31,
- 0x37, 0x33, 0x11, 0x73, 0xe9, 0x56, 0x44, 0x84, 0x36, 0xe9, 0x40, 0x50,
- 0x54, 0x14, 0xc4, 0xc0, 0xa8, 0x6d, 0x50, 0x6a, 0x92, 0x1d, 0xd9, 0x9d,
- 0x99, 0x75, 0x0d, 0x26, 0x58, 0xd8, 0x3f, 0xaa, 0xe2, 0xfc, 0xf5, 0xd5,
- 0x39, 0x9c, 0x53, 0x25, 0xa4, 0x94, 0x7c, 0xa7, 0x7e, 0xf0, 0xcd, 0xfa,
- 0xf7, 0x81, 0xbe, 0xf7, 0xc5, 0xf9, 0x7c, 0x96, 0x93, 0xc9, 0x84, 0xe5,
- 0x72, 0xc9, 0x66, 0xb3, 0x21, 0x99, 0x4c, 0x92, 0xcf, 0xe7, 0xa9, 0x54,
- 0x2a, 0x04, 0x02, 0x01, 0xf1, 0x2a, 0x50, 0x48, 0x29, 0x39, 0x9d, 0x4e,
- 0x72, 0x30, 0x18, 0x60, 0x59, 0xd6, 0x27, 0x43, 0xb5, 0x5a, 0xa5, 0xd1,
- 0x68, 0x10, 0x0c, 0x06, 0xc5, 0xcb, 0x19, 0x4e, 0xa7, 0x53, 0x2c, 0xcb,
- 0x22, 0x95, 0x4a, 0x51, 0x2a, 0x95, 0xc8, 0x64, 0x32, 0xac, 0x56, 0x2b,
- 0x66, 0xb3, 0x19, 0x93, 0xc9, 0x84, 0x48, 0x24, 0x42, 0xbd, 0x5e, 0x7f,
- 0xbd, 0x64, 0xdb, 0xb6, 0x01, 0x28, 0x97, 0xcb, 0x54, 0x2a, 0x15, 0x34,
- 0x4d, 0x13, 0xa1, 0x50, 0x48, 0x2a, 0x8a, 0xc2, 0x7a, 0xbd, 0xc6, 0xb6,
- 0x6d, 0xea, 0xf5, 0x3a, 0xa3, 0xd1, 0x48, 0xf6, 0xfb, 0xfd, 0xc7, 0x61,
- 0xc3, 0x30, 0xa8, 0xd5, 0x6a, 0xe2, 0x53, 0x53, 0xb6, 0xdb, 0x2d, 0x00,
- 0xc5, 0x62, 0x11, 0x4d, 0xd3, 0x04, 0x80, 0xa6, 0x69, 0xa2, 0x50, 0x28,
- 0xf0, 0x6b, 0x1c, 0x10, 0x86, 0x61, 0x3c, 0x60, 0x80, 0xf8, 0xb2, 0xcb,
- 0x89, 0x44, 0x02, 0x00, 0xc7, 0x71, 0x00, 0xde, 0x27, 0x5d, 0xfe, 0xdc,
- 0x3f, 0xe2, 0x1f, 0xa0, 0xe2, 0x8f, 0x63, 0x93, 0xcb, 0xe5, 0x00, 0x18,
- 0x8f, 0xc7, 0x98, 0xa6, 0x89, 0xeb, 0xba, 0xd2, 0x34, 0x4d, 0xc6, 0xe3,
- 0x31, 0x00, 0xe9, 0x74, 0x1a, 0x80, 0x5a, 0xad, 0xf6, 0x80, 0x3e, 0xed,
- 0xf2, 0x7a, 0xbd, 0x96, 0xc3, 0xe1, 0x90, 0xf9, 0x7c, 0xfe, 0xa5, 0x29,
- 0x1c, 0x0e, 0xd3, 0xe9, 0x74, 0xd0, 0x75, 0x5d, 0x00, 0x8c, 0x46, 0xa3,
- 0x8f, 0x17, 0xfc, 0x0e, 0xf4, 0x3c, 0x4f, 0xee, 0x76, 0x3b, 0x16, 0x8b,
- 0x05, 0x8e, 0xe3, 0xb0, 0xdf, 0xef, 0x89, 0xc7, 0xe3, 0xa4, 0xd3, 0x69,
- 0x6c, 0xdb, 0xe6, 0x74, 0x3a, 0x11, 0x8d, 0x46, 0x69, 0xb7, 0xdb, 0x0f,
- 0xe8, 0xd3, 0x0c, 0x01, 0x3c, 0xcf, 0x93, 0xae, 0xeb, 0xe2, 0x79, 0x1e,
- 0xb7, 0xdb, 0x0d, 0x9f, 0xcf, 0x87, 0xa2, 0x28, 0x5c, 0x2e, 0x17, 0x7a,
- 0xbd, 0x1e, 0xc7, 0xe3, 0x91, 0x58, 0x2c, 0x46, 0xab, 0xd5, 0x7a, 0x0a,
- 0x7d, 0xbc, 0x14, 0x55, 0x55, 0x85, 0xaa, 0xaa, 0x9f, 0x0c, 0x7e, 0xbf,
- 0x5f, 0x36, 0x9b, 0x4d, 0xba, 0xdd, 0x2e, 0xd7, 0xeb, 0x95, 0xeb, 0xf5,
- 0x8a, 0xae, 0xeb, 0x7f, 0xcf, 0xf0, 0x99, 0x5c, 0xd7, 0x95, 0x87, 0xc3,
- 0x81, 0xfb, 0xfd, 0x4e, 0x36, 0x9b, 0x7d, 0xad, 0xe4, 0xff, 0xe7, 0xfb,
- 0x7a, 0x1b, 0x00, 0x59, 0xa8, 0xba, 0x68, 0xca, 0x4f, 0xc5, 0xa7, 0x00,
- 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int mag_sel_png_len = 563;
-
-unsigned char mag_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
- 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
- 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
- 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
- 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
- 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
- 0x2a, 0xbd, 0x00, 0x00, 0x01, 0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0xe4, 0x94, 0xbb, 0xaa, 0xea, 0x50, 0x10, 0x86, 0xbf, 0xec, 0x08, 0x29,
- 0x36, 0x24, 0x85, 0x17, 0xbc, 0x81, 0x18, 0x11, 0x6c, 0xd4, 0x42, 0x8c,
- 0x0f, 0x61, 0xe1, 0x2b, 0xf8, 0x0a, 0x0a, 0x3e, 0x8f, 0xf8, 0x0c, 0x36,
- 0x62, 0x1f, 0x92, 0x88, 0x88, 0x10, 0x9b, 0x14, 0x42, 0x44, 0x45, 0x41,
- 0x2c, 0xac, 0x92, 0x80, 0xb2, 0x4e, 0x73, 0x94, 0x03, 0xfb, 0xb0, 0x4d,
- 0xb1, 0x8b, 0x03, 0xe7, 0xaf, 0xd6, 0x62, 0xfe, 0xf5, 0x31, 0xc3, 0xcc,
- 0x1a, 0x49, 0x08, 0xc1, 0x4f, 0xea, 0x83, 0x1f, 0xd6, 0xbf, 0x0f, 0x4c,
- 0x3c, 0x0f, 0xd7, 0xeb, 0x55, 0x38, 0x8e, 0xc3, 0x66, 0xb3, 0x61, 0xb7,
- 0xdb, 0x51, 0x2a, 0x95, 0xa8, 0xd7, 0xeb, 0x18, 0x86, 0x41, 0x32, 0x99,
- 0x94, 0xe2, 0x02, 0x25, 0x21, 0x04, 0x97, 0xcb, 0x45, 0x4c, 0xa7, 0x53,
- 0x6c, 0xdb, 0xfe, 0x62, 0xe8, 0x74, 0x3a, 0xf4, 0x7a, 0x3d, 0x52, 0xa9,
- 0x94, 0x14, 0x3b, 0xc3, 0xc5, 0x62, 0x81, 0x6d, 0xdb, 0x94, 0xcb, 0x65,
- 0x5a, 0xad, 0x16, 0x95, 0x4a, 0x85, 0xed, 0x76, 0xcb, 0x72, 0xb9, 0xc4,
- 0x71, 0x1c, 0xb2, 0xd9, 0x2c, 0xdd, 0x6e, 0x37, 0x7e, 0xc9, 0xae, 0xeb,
- 0x02, 0xd0, 0x6e, 0xb7, 0x31, 0x0c, 0x03, 0x55, 0x55, 0xa5, 0x74, 0x3a,
- 0x2d, 0x64, 0x59, 0xc6, 0xf7, 0x7d, 0x5c, 0xd7, 0x8d, 0x0d, 0xfc, 0x00,
- 0xd8, 0xef, 0xf7, 0x00, 0x34, 0x9b, 0x4d, 0x54, 0x55, 0x95, 0x00, 0x54,
- 0x55, 0x95, 0x1a, 0x8d, 0x06, 0x7f, 0xc6, 0x63, 0x03, 0x8b, 0xc5, 0x22,
- 0x00, 0x9e, 0xe7, 0x01, 0x3c, 0x27, 0x5d, 0xfc, 0xbe, 0xbf, 0xe2, 0xb1,
- 0x81, 0xb5, 0x5a, 0x0d, 0x00, 0xd3, 0x34, 0xb1, 0x2c, 0x8b, 0x20, 0x08,
- 0x84, 0x65, 0x59, 0x98, 0xa6, 0x09, 0x80, 0xae, 0xeb, 0xaf, 0x07, 0xf3,
- 0xf9, 0xfc, 0x7d, 0x97, 0x7d, 0xdf, 0x17, 0xb3, 0xd9, 0x8c, 0xd5, 0x6a,
- 0xf5, 0x57, 0x53, 0x26, 0x93, 0x61, 0x34, 0x1a, 0xa1, 0x69, 0x9a, 0x14,
- 0x6b, 0x6c, 0xa2, 0x28, 0x12, 0x87, 0xc3, 0x81, 0xf5, 0x7a, 0x8d, 0xe7,
- 0x79, 0x1c, 0x8f, 0x47, 0x0a, 0x85, 0x02, 0xba, 0xae, 0xe3, 0xba, 0x2e,
- 0x97, 0xcb, 0x85, 0x5c, 0x2e, 0xc7, 0x70, 0x38, 0x7c, 0x0b, 0x95, 0x9e,
- 0xcb, 0x21, 0x8a, 0x22, 0x11, 0x04, 0x01, 0x51, 0x14, 0x71, 0xbf, 0xdf,
- 0x49, 0x24, 0x12, 0xc8, 0xb2, 0xcc, 0xed, 0x76, 0x63, 0x32, 0x99, 0x70,
- 0x3e, 0x9f, 0xc9, 0xe7, 0xf3, 0x0c, 0x06, 0x83, 0x6f, 0xa1, 0xaf, 0x9f,
- 0xa2, 0x28, 0x8a, 0xa4, 0x28, 0xca, 0x17, 0xc3, 0xe7, 0xe7, 0xa7, 0xe8,
- 0xf7, 0xfb, 0x8c, 0xc7, 0x63, 0xc2, 0x30, 0x24, 0x0c, 0x43, 0x34, 0x4d,
- 0x7b, 0x9f, 0xe1, 0x77, 0x0a, 0x82, 0x40, 0x9c, 0x4e, 0x27, 0x1e, 0x8f,
- 0x07, 0xd5, 0x6a, 0x35, 0x5e, 0xc9, 0xff, 0xcf, 0xfa, 0xfa, 0x35, 0x00,
- 0x70, 0xf3, 0xae, 0xcb, 0x89, 0xcd, 0xd2, 0x46, 0x00, 0x00, 0x00, 0x00,
- 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int mag_png_len = 524;
-
-unsigned char search_l_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
- 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
- 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
- 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
- 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
- 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
- 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0xac, 0x54, 0x3d, 0xab, 0xda, 0x50, 0x18, 0x7e, 0xce, 0xc9, 0x39, 0x31,
- 0x4d, 0xfc, 0x40, 0x30, 0x46, 0x14, 0xec, 0x50, 0x44, 0x17, 0x2f, 0x9d,
- 0xba, 0x15, 0xda, 0xd1, 0xa1, 0x2e, 0xdd, 0x3b, 0x14, 0x4a, 0xa1, 0x7f,
- 0xa6, 0x74, 0xbd, 0x43, 0xff, 0x84, 0xfd, 0x05, 0x82, 0xda, 0xa5, 0x83,
- 0x1d, 0xdc, 0x8a, 0x88, 0xa0, 0x44, 0x83, 0xc6, 0x28, 0xad, 0x1f, 0x49,
- 0xde, 0x2e, 0x8d, 0x78, 0x6f, 0xaf, 0x34, 0x68, 0x9f, 0xed, 0xbc, 0x70,
- 0x1e, 0x9e, 0x8f, 0xf7, 0x1c, 0x46, 0x44, 0x38, 0x45, 0xaf, 0xd7, 0x63,
- 0xb6, 0x6d, 0xe7, 0x6d, 0xdb, 0x6e, 0xba, 0xae, 0xfb, 0x6e, 0xb3, 0xd9,
- 0xdc, 0x6c, 0xb7, 0xdb, 0x04, 0xe7, 0x1c, 0x8c, 0x31, 0xfc, 0x0b, 0x2c,
- 0x22, 0xec, 0x76, 0xbb, 0xcc, 0xf3, 0xbc, 0xcc, 0x68, 0x34, 0x7a, 0xed,
- 0xba, 0xee, 0x87, 0x6c, 0x36, 0x7b, 0x93, 0xcb, 0xe5, 0x44, 0x3a, 0x9d,
- 0x86, 0xa6, 0x69, 0x50, 0x14, 0x25, 0x3e, 0x61, 0xa7, 0xd3, 0x61, 0xf3,
- 0xf9, 0xfc, 0xc9, 0x78, 0x3c, 0xbe, 0xd5, 0x75, 0xfd, 0x79, 0xa5, 0x52,
- 0x11, 0xa6, 0x69, 0x22, 0x95, 0x4a, 0x41, 0xd3, 0x34, 0x08, 0x21, 0xc0,
- 0x18, 0x8b, 0x45, 0x28, 0x00, 0x60, 0xb5, 0x5a, 0xa5, 0x27, 0x93, 0xc9,
- 0xa7, 0x62, 0xb1, 0xf8, 0xb2, 0x5a, 0xad, 0x22, 0x9f, 0xcf, 0xc3, 0x30,
- 0x0c, 0x48, 0x29, 0xc1, 0x39, 0x47, 0x5c, 0xbb, 0x00, 0x20, 0xda, 0xed,
- 0x36, 0x9f, 0x4e, 0xa7, 0xaf, 0x4c, 0xd3, 0x7c, 0x51, 0xaf, 0xd7, 0x61,
- 0x59, 0x16, 0x74, 0x5d, 0x87, 0x94, 0x12, 0x97, 0x40, 0x2c, 0x16, 0x0b,
- 0x93, 0x88, 0xde, 0xd6, 0x6a, 0x35, 0xdd, 0xb2, 0x2c, 0x18, 0x86, 0x01,
- 0x21, 0x04, 0x2e, 0x05, 0xf7, 0x3c, 0xaf, 0x59, 0x2e, 0x97, 0x9f, 0x45,
- 0xca, 0x38, 0xe7, 0xb8, 0x06, 0x3c, 0x08, 0x82, 0x46, 0xa1, 0x50, 0x78,
- 0x74, 0xad, 0xb2, 0x23, 0xa1, 0x94, 0xf2, 0x69, 0x26, 0x93, 0xe1, 0x51,
- 0x66, 0xf7, 0xf7, 0xd2, 0xf7, 0xfd, 0x07, 0x2f, 0x9e, 0x9b, 0x73, 0x55,
- 0x55, 0xb3, 0x91, 0x55, 0xc6, 0x18, 0xc2, 0x30, 0xbc, 0x1b, 0xf2, 0x19,
- 0xd5, 0xe7, 0xe6, 0x5c, 0x4a, 0x39, 0x06, 0x70, 0x5c, 0x8b, 0xb8, 0xeb,
- 0x71, 0xd6, 0x32, 0x11, 0x75, 0xf6, 0xfb, 0xfd, 0xd1, 0xea, 0xd5, 0xa5,
- 0x10, 0xd1, 0xb7, 0xf5, 0x7a, 0x1d, 0x84, 0x61, 0x08, 0x22, 0xba, 0x9e,
- 0x50, 0x51, 0x94, 0xaf, 0x8e, 0xe3, 0xfc, 0xdc, 0xed, 0x76, 0xf8, 0x1f,
- 0xe0, 0x89, 0x44, 0xe2, 0xc7, 0x72, 0xb9, 0xfc, 0xee, 0x38, 0x0e, 0x7c,
- 0xdf, 0x3f, 0x5a, 0xbf, 0xdf, 0x76, 0x6c, 0xc2, 0x46, 0xa3, 0xf1, 0x2b,
- 0x08, 0x82, 0xdb, 0xe1, 0x70, 0xe8, 0x2c, 0x16, 0x0b, 0x04, 0x41, 0x00,
- 0x22, 0xba, 0xb8, 0x1c, 0xfe, 0x67, 0x05, 0xbe, 0x78, 0x9e, 0xf7, 0x79,
- 0x30, 0x18, 0x8c, 0x67, 0xb3, 0x19, 0x45, 0x25, 0x9d, 0x53, 0x49, 0x44,
- 0x38, 0x1c, 0x0e, 0x38, 0x2d, 0xf3, 0xce, 0x6f, 0x03, 0x60, 0x29, 0x84,
- 0xf8, 0xe8, 0x79, 0x9e, 0xdb, 0xef, 0xf7, 0xdf, 0x97, 0x4a, 0xa5, 0xc7,
- 0xd1, 0x53, 0x54, 0x55, 0x15, 0x52, 0xca, 0xbf, 0x14, 0x0b, 0x21, 0x1e,
- 0x8c, 0x87, 0x9d, 0x1e, 0x5a, 0xad, 0x96, 0x00, 0x50, 0x27, 0xa2, 0x37,
- 0xaa, 0xaa, 0x36, 0x0d, 0xc3, 0x28, 0x26, 0x93, 0x49, 0xa1, 0x69, 0x9a,
- 0xc2, 0x39, 0x8f, 0x95, 0xc1, 0xef, 0x01, 0x00, 0x35, 0xe5, 0xd5, 0x5e,
- 0xd0, 0xed, 0x0c, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
- 0xae, 0x42, 0x60, 0x82
-};
-unsigned int search_l_png_len = 604;
-
-unsigned char search_m_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x02, 0x00, 0x00, 0x00, 0x35, 0x5e, 0x4b, 0x4d, 0x00, 0x00, 0x00,
- 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xd6, 0xd8, 0xd4, 0x4f, 0x58,
- 0x32, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66,
- 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20,
- 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9,
- 0x65, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0x62, 0x2c, 0x2f, 0x2f, 0x67, 0x60, 0x60, 0x60, 0x3c, 0x7e, 0xfc, 0x38,
- 0x88, 0xfa, 0xf8, 0xf1, 0x23, 0x88, 0xfa, 0xff, 0xff, 0x3f, 0x90, 0x62,
- 0x62, 0x00, 0x03, 0x5a, 0x50, 0x2c, 0x10, 0x1b, 0x58, 0x6e, 0xdd, 0xba,
- 0x05, 0xa4, 0x00, 0x02, 0x0c, 0x00, 0xa5, 0x07, 0x0f, 0x3c, 0x7e, 0xe1,
- 0x45, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
- 0x60, 0x82
-};
-unsigned int search_m_png_len = 158;
-
-unsigned char search_r_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0x9d, 0x92, 0x5d, 0xf2, 0x00, 0x00, 0x00,
- 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
- 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
- 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
- 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
- 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
- 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0xa4, 0xd4, 0xbf, 0xaa, 0x1a, 0x41, 0x14, 0x06, 0xf0, 0x6f, 0xf6, 0x9f,
- 0xb2, 0x0a, 0x6b, 0xa5, 0x56, 0x8b, 0xa4, 0x92, 0xd4, 0x69, 0x7c, 0x03,
- 0xb1, 0x59, 0x49, 0x11, 0x52, 0xdf, 0xbc, 0x43, 0xcc, 0x2b, 0xa4, 0x4c,
- 0x97, 0x67, 0x08, 0xa4, 0x11, 0x2c, 0x52, 0x5c, 0x42, 0x24, 0x60, 0x8a,
- 0x34, 0x29, 0x42, 0x50, 0x41, 0x21, 0xa0, 0x97, 0xd5, 0x55, 0xb3, 0xbb,
- 0xee, 0xb2, 0xce, 0xee, 0xcc, 0x49, 0x91, 0x28, 0xc2, 0x0d, 0xe6, 0xaa,
- 0xa7, 0x9d, 0xc3, 0x8f, 0x73, 0x98, 0xf9, 0x86, 0x75, 0x3a, 0x1d, 0xc2,
- 0x89, 0x12, 0x42, 0x24, 0xf9, 0x7c, 0x7e, 0x5a, 0x2c, 0x16, 0x3f, 0x96,
- 0x4a, 0xa5, 0x5e, 0xb5, 0x5a, 0xfd, 0x52, 0x2e, 0x97, 0xfd, 0x46, 0xa3,
- 0x21, 0x8e, 0xfb, 0xd8, 0x60, 0x30, 0x38, 0x09, 0x65, 0x59, 0x86, 0x24,
- 0x49, 0x10, 0x04, 0x81, 0xf0, 0x3c, 0x6f, 0xb3, 0xd9, 0x6c, 0x7e, 0x58,
- 0x96, 0x75, 0x5b, 0xab, 0xd5, 0xde, 0x34, 0x9b, 0xcd, 0x5f, 0x07, 0xc8,
- 0xf7, 0xfd, 0x93, 0x90, 0x94, 0xf2, 0x80, 0x85, 0x61, 0x88, 0xe5, 0x72,
- 0x49, 0xe3, 0xf1, 0x58, 0xc6, 0x71, 0xfc, 0xc1, 0xb6, 0xed, 0xe7, 0x8e,
- 0xe3, 0x84, 0x00, 0xc0, 0xa4, 0x94, 0x27, 0x21, 0x22, 0x82, 0x94, 0x12,
- 0x52, 0x4a, 0xa4, 0x69, 0x8a, 0x28, 0x8a, 0xb0, 0x58, 0x2c, 0x30, 0x1c,
- 0x0e, 0x85, 0xeb, 0xba, 0xef, 0x6b, 0xb5, 0xda, 0x4d, 0xab, 0xd5, 0x8a,
- 0x34, 0xc6, 0xd8, 0x29, 0x07, 0x8c, 0x31, 0x28, 0x8a, 0x02, 0x22, 0x82,
- 0xae, 0xeb, 0x30, 0x0c, 0x03, 0xb9, 0x5c, 0x0e, 0x86, 0x61, 0xa8, 0x52,
- 0xca, 0xa7, 0xf3, 0xf9, 0xfc, 0x67, 0xbf, 0xdf, 0x7f, 0xa5, 0xe0, 0x81,
- 0xc5, 0x18, 0x03, 0x63, 0x0c, 0x9a, 0xa6, 0xa1, 0x50, 0x28, 0xa0, 0x52,
- 0xa9, 0xa0, 0x5e, 0xaf, 0x6b, 0x00, 0x5e, 0xac, 0xd7, 0xeb, 0x47, 0x0f,
- 0x86, 0x8e, 0x41, 0x55, 0x55, 0x61, 0x9a, 0x26, 0x2a, 0x95, 0x0a, 0x6c,
- 0xdb, 0xb6, 0x82, 0x20, 0x78, 0x76, 0x36, 0xb4, 0xc7, 0xf6, 0x93, 0x55,
- 0xab, 0x55, 0x26, 0x84, 0x78, 0xac, 0x1c, 0x5f, 0xf3, 0xb9, 0xa5, 0xeb,
- 0x3a, 0x2c, 0xcb, 0x82, 0xae, 0xeb, 0xbb, 0x03, 0xa4, 0x69, 0xda, 0xd9,
- 0x53, 0x29, 0x8a, 0x02, 0xd3, 0x34, 0x99, 0x61, 0x18, 0xcb, 0x8b, 0x56,
- 0x3b, 0xc6, 0xfe, 0x4e, 0x76, 0x77, 0x15, 0x44, 0x44, 0xe0, 0x9c, 0x0b,
- 0x22, 0xfa, 0xaa, 0x5c, 0x83, 0x48, 0x29, 0x11, 0x86, 0xe1, 0x86, 0x88,
- 0xbe, 0x5f, 0x35, 0xd1, 0x6e, 0xb7, 0x83, 0xe7, 0x79, 0x3d, 0x55, 0x55,
- 0x7d, 0xd0, 0x05, 0x25, 0xa5, 0x24, 0xce, 0x39, 0x4d, 0x26, 0x93, 0x45,
- 0xb7, 0xdb, 0x7d, 0x42, 0x44, 0x50, 0x2e, 0x59, 0x49, 0x08, 0x81, 0xf5,
- 0x7a, 0x9d, 0x4c, 0xa7, 0xd3, 0x77, 0x42, 0x88, 0x6f, 0x00, 0xa0, 0xed,
- 0x0f, 0xb3, 0x2c, 0x3b, 0xe4, 0xe9, 0x5f, 0xf9, 0x23, 0xfa, 0x93, 0x6d,
- 0xce, 0x39, 0x56, 0xab, 0x95, 0x18, 0x0e, 0x87, 0x9f, 0x82, 0x20, 0x78,
- 0xdd, 0x6e, 0xb7, 0xd3, 0x7b, 0xe9, 0x27, 0xa2, 0x7b, 0x08, 0x11, 0x21,
- 0x4d, 0x53, 0x70, 0xce, 0x11, 0xc7, 0xb1, 0x74, 0x5d, 0xd7, 0x9f, 0xcd,
- 0x66, 0x3d, 0xce, 0xf9, 0x4b, 0xc7, 0x71, 0xee, 0x0e, 0xef, 0x70, 0x34,
- 0x1a, 0xe1, 0x7f, 0xff, 0x51, 0x92, 0x24, 0xd8, 0x6e, 0xb7, 0x61, 0x14,
- 0x45, 0x9f, 0x39, 0xe7, 0x6f, 0x19, 0x63, 0xb7, 0x8e, 0xe3, 0x44, 0xc7,
- 0x7d, 0xbf, 0x07, 0x00, 0x5f, 0x77, 0x46, 0x8c, 0x30, 0x2c, 0xd8, 0x9d,
- 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int search_r_png_len = 612;
-
-static unsigned char close_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0xac, 0x77, 0x26, 0x00, 0x00, 0x00,
- 0xd8, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x75, 0x51, 0xbd, 0x12, 0x46,
- 0x40, 0x0c, 0xdc, 0x18, 0x15, 0x0a, 0x14, 0x14, 0x1a, 0x43, 0xeb, 0x35,
- 0xbc, 0x7f, 0xa7, 0x43, 0x67, 0x06, 0x33, 0x28, 0xd0, 0xde, 0x77, 0x7b,
- 0x23, 0x2a, 0xdf, 0x16, 0x97, 0x9f, 0xdb, 0xcb, 0x26, 0x39, 0xc1, 0x83,
- 0x7d, 0xdf, 0xcd, 0xb2, 0x2c, 0xd8, 0xb6, 0x0d, 0xe7, 0x79, 0x22, 0x8a,
- 0x22, 0xc4, 0x71, 0x8c, 0x3c, 0xcf, 0x91, 0xa6, 0xa9, 0x90, 0xe6, 0x8e,
- 0x69, 0x9a, 0xcc, 0x38, 0x8e, 0xb8, 0xae, 0x4b, 0xdf, 0xbe, 0x36, 0x0c,
- 0x43, 0x94, 0x65, 0x89, 0xa2, 0x28, 0xc4, 0x3b, 0x8e, 0xe3, 0x2f, 0x91,
- 0x2f, 0xa8, 0xc2, 0x42, 0x56, 0xd1, 0x78, 0xf3, 0x3c, 0xbb, 0x04, 0x2f,
- 0xda, 0xb6, 0x45, 0x55, 0x55, 0x74, 0x9d, 0x65, 0x2c, 0x22, 0xb8, 0xef,
- 0x1b, 0xeb, 0xba, 0xc2, 0x67, 0x8f, 0x4c, 0x10, 0x7d, 0xdf, 0xa3, 0xae,
- 0x6b, 0xe7, 0xd3, 0x32, 0x56, 0x90, 0xe7, 0x53, 0x46, 0x31, 0x0c, 0x83,
- 0x73, 0x95, 0xa8, 0x31, 0x93, 0x9c, 0xc7, 0xe3, 0xd4, 0x0a, 0xb6, 0xa0,
- 0x44, 0x5a, 0xc6, 0xc6, 0x18, 0x77, 0xcd, 0x41, 0xbd, 0x24, 0x49, 0x94,
- 0xfb, 0x12, 0x59, 0x51, 0x5b, 0xd2, 0x16, 0xed, 0xfa, 0x20, 0xdc, 0x6f,
- 0xd7, 0x75, 0x9f, 0x6b, 0xd3, 0x2a, 0x41, 0x10, 0xa0, 0x69, 0x1a, 0x57,
- 0x59, 0x28, 0x47, 0x99, 0x2f, 0x30, 0xcf, 0x7b, 0xfb, 0x41, 0xcf, 0x1a,
- 0x2c, 0xeb, 0xeb, 0x07, 0x29, 0x9d, 0x65, 0x19, 0x6c, 0xab, 0x6e, 0x5d,
- 0x3f, 0x07, 0x0a, 0x79, 0x90, 0x0e, 0x11, 0x45, 0xc2, 0x00, 0x00, 0x00,
- 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-static unsigned int close_png_len = 273;
-
-
-static unsigned char closed_png[81] =
-{
- 0, 0, 0, 0,142, 0, 0, 0, 0,
- 0, 0, 0, 0,142,142, 0, 0, 0,
- 0, 0, 0, 0,142,142,142, 0, 0,
- 0, 0, 0, 0,142,142,142,142, 0,
- 0, 0, 0, 0,142,142,142,142,142,
- 0, 0, 0, 0,142,142,142,142, 0,
- 0, 0, 0, 0,142,142,142, 0, 0,
- 0, 0, 0, 0,142,142, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 0
-};
-
-static unsigned char closed_a_png[81] =
-{
- 0, 0, 0, 0,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255, 0, 0, 0,
- 0, 0, 0, 0,255,255,255, 0, 0,
- 0, 0, 0, 0,255,255,255,255, 0,
- 0, 0, 0, 0,255,255,255,255,255,
- 0, 0, 0, 0,255,255,255,255, 0,
- 0, 0, 0, 0,255,255,255, 0, 0,
- 0, 0, 0, 0,255,255, 0, 0, 0,
- 0, 0, 0, 0,255, 0, 0, 0, 0
-};
-
-static unsigned char open_png[81] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 142,142,142,142,142,142,142,142,142,
- 0,142,142,142,142,142,142,142, 0,
- 0, 0,142,142,142,142,142, 0, 0,
- 0, 0, 0,142,142,142, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 0
-};
-
-static unsigned char open_a_png[81] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255,255,255,255,255,255,255,255,255,
- 0,255,255,255,255,255,255,255, 0,
- 0, 0,255,255,255,255,255, 0, 0,
- 0, 0, 0,255,255,255, 0, 0, 0,
- 0, 0, 0, 0,255, 0, 0, 0, 0
-};
-
-static unsigned char bdwn_png[7*8] =
-{
- 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0,142, 0, 0, 0,
- 142, 0, 0,142, 0, 0,142,
- 142,142, 0,142, 0,142,142,
- 142,142,142,142,142,142,142,
- 0,142,142,142,142,142, 0,
- 0, 0,142,142,142, 0, 0,
-};
-
-static unsigned char bdwn_a_png[7*8] =
-{
- 0, 0, 0,255, 0, 0, 0,
- 0, 0, 0,255, 0, 0, 0,
- 0, 0, 0,255, 0, 0, 0,
- 128, 0, 0,255, 0, 0,128,
- 255,128, 0,255, 0,128,255,
- 128,255,128,255,128,255,128,
- 0,128,255,255,255,128, 0,
- 0, 0,128,255,128, 0, 0,
-};
-
-static unsigned char sync_on_png[576] =
-{
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,138,128,128,128,128,133,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,129,205,186,128,128,128,128,160,210,134,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,139,217,255,181,128,128,128,128,152,255,229,147,128,128,128,128,128,128,
- 128,128,128,128,128,156,236,255,255,181,128,128,128,128,152,255,255,243,164,128,128,128,128,128,
- 128,128,128,128,175,249,255,255,255,223,196,198,198,197,211,255,255,255,253,186,128,128,128,128,
- 128,128,133,202,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,214,137,128,128,
- 128,128,135,217,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,140,128,128,
- 128,128,128,128,189,255,255,255,255,238,224,225,225,224,232,255,255,255,255,201,131,128,128,128,
- 128,128,128,128,128,167,245,255,255,183,128,128,128,128,155,255,255,250,179,128,128,128,128,128,
- 128,128,128,128,128,128,150,231,255,188,128,128,128,128,161,255,238,158,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,136,216,188,128,128,128,128,161,223,142,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,130,141,128,128,128,128,135,132,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
-};
-
-static unsigned char sync_off_png[576] =
-{
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,138,128,128,128,128,128,128,133,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,129,205,186,128,128,128,128,128,128,160,210,134,128,128,128,128,128,128,
- 128,128,128,128,128,139,217,255,181,128,128,128,128,128,128,152,255,229,147,128,128,128,128,128,
- 128,128,128,128,156,236,255,255,181,128,128,128,128,128,128,152,255,255,243,164,128,128,128,128,
- 128,128,128,175,249,255,255,255,223,196,198,198,128,128,197,211,255,255,255,253,186,128,128,128,
- 128,128,202,255,255,255,255,255,255,255,255,225,128,128,255,255,255,255,255,255,255,214,128,128,
- 128,128,217,255,255,255,255,255,255,255,255,128,128,198,255,255,255,255,255,255,255,225,128,128,
- 128,128,128,189,255,255,255,255,238,224,225,128,128,225,224,232,255,255,255,255,201,128,128,128,
- 128,128,128,128,167,245,255,255,183,128,128,128,128,128,128,155,255,255,250,179,128,128,128,128,
- 128,128,128,128,128,150,231,255,188,128,128,128,128,128,128,161,255,238,158,128,128,128,128,128,
- 128,128,128,128,128,128,136,216,188,128,128,128,128,128,128,161,223,142,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,130,141,128,128,128,128,128,128,135,132,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
-};
-
-static unsigned char sync_a_png[576] =
-{
- 0, 0, 0, 0, 0, 0, 0, 29, 98,157,207,231,234,211,164,104, 38, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 21,143,234,255,255,255,255,255,255,255,255,244,155, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 70,221,255,255,255,255,255,255,255,255,255,255,255,255,235, 93, 0, 0, 0, 0,
- 0, 0, 0, 92,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116, 0, 0, 0,
- 0, 0, 68,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 96, 0, 0,
- 0, 20,225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243, 41, 0,
- 0,143,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,172, 1,
- 28,238,255,255,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 42,
- 99,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,133,
- 160,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,204,
- 212,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,224,
- 234,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,237,255,236,
- 235,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,255,236,
- 216,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,226,
- 168,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,
- 107,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,147,
- 39,245,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 53,
- 0,159,255,255,255,255,255,255,251,255,255,255,255,255,255,255,255,255,255,255,255,255,190, 3,
- 0, 31,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,249, 54, 0,
- 0, 0, 91,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119, 0, 0,
- 0, 0, 0,116,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145, 0, 0, 0,
- 0, 0, 0, 0, 98,240,255,255,255,255,255,255,255,255,255,255,255,255,248,119, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 45,168,252,255,255,255,255,255,255,255,255,255,184, 58, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 45,131,201,222,234,236,224,204,142, 54, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-//------------------------------------------------------------------------
-
-static const char tabs_css[] =
-".tabs, .tabs2, .tabs3 {\n"
-" background-image: url('tab_b.png');\n"
-" width: 100%;\n"
-" z-index: 101;\n"
-" font-size: 13px;\n"
-" font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n"
-"}\n"
-"\n"
-".tabs2 {\n"
-" font-size: 10px;\n"
-"}\n"
-".tabs3 {\n"
-" font-size: 9px;\n"
-"}\n"
-"\n"
-".tablist {\n"
-" margin: 0;\n"
-" padding: 0;\n"
-" display: table;\n"
-"}\n"
-"\n"
-".tablist li {\n"
-" float: left;\n"
-" display: table-cell;\n"
-" background-image: url('tab_b.png');\n"
-" line-height: 36px;\n"
-" list-style: none;\n"
-"}\n"
-"\n"
-".tablist a {\n"
-" display: block;\n"
-" padding: 0 20px;\n"
-" font-weight: bold;\n"
-" background-image:url('tab_s.png');\n"
-" background-repeat:no-repeat;\n"
-" background-position:right;\n"
-" color: ##30;\n"
-" text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
-" text-decoration: none;\n"
-" outline: none;\n"
-"}\n"
-"\n"
-".tabs3 .tablist a {\n"
-" padding: 0 10px;\n"
-"}\n"
-"\n"
-".tablist a:hover {\n"
-" background-image: url('tab_h.png');\n"
-" background-repeat:repeat-x;\n"
-" color: #fff;\n"
-" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-" text-decoration: none;\n"
-"}\n"
-"\n"
-".tablist li.current a {\n"
-" background-image: url('tab_a.png');\n"
-" background-repeat:repeat-x;\n"
-" color: #fff;\n"
-" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-"}\n"
-;
-
-struct img_data_item
-{
- const char *name;
- unsigned char *content;
- unsigned int len;
-};
-
-
-static void writeImgData(const char *dir,img_data_item *data)
-{
- while (data->name)
- {
- QCString fileName;
- fileName=(QCString)dir+"/"+data->name;
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- f.writeBlock((char*)data->content,
- data->len>0 ? data->len : qstrlen((char*)data->content));
- }
- else
- {
- fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
- }
- Doxygen::indexList->addImageFile(QCString("/search/")+data->name);
- data++;
- }
-}
-
-static ColoredImgDataItem colored_tab_data[] =
-{
- // file_name W H luma_data alpha_data
- { "tab_a.png", 1, 36, tab_a_png, 0 },
- { "tab_b.png", 1, 36, tab_b_png, 0 },
- { "tab_h.png", 1, 36, tab_h_png, 0 },
- { "tab_s.png", 1, 36, tab_s_png, 0 },
- { "nav_h.png", 1, 12, header_png, 0 },
- { "nav_f.png", 1, 56, func_header_png, 0 },
- { "bc_s.png", 8, 30, bc_s_png, bc_s_a_png },
- { "doxygen.png", 104,31, doxygen_png, doxygen_a_png },
- { "closed.png", 9, 9, closed_png, closed_a_png },
- { "open.png", 9, 9, open_png, open_a_png },
- { "bdwn.png", 7, 8, bdwn_png, bdwn_a_png },
- { "sync_on.png", 24, 24, sync_on_png, sync_a_png },
- { "sync_off.png",24, 24, sync_off_png, sync_a_png },
- { 0, 0, 0, 0, 0 }
-};
-
-static img_data_item search_client_data[] =
-{
- // file_name raw_data num bytes
- { "mag_sel.png", mag_sel_png, mag_sel_png_len },
- { "search_l.png", search_l_png, search_l_png_len },
- { "search_m.png", search_m_png, search_m_png_len },
- { "search_r.png", search_r_png, search_r_png_len },
- { "close.png", close_png, close_png_len },
- { 0, 0, 0 }
-};
-
-static img_data_item search_server_data[] =
-{
- // file_name raw_data num bytes
- { "mag.png", mag_png, mag_png_len },
- { "search_l.png", search_l_png, search_l_png_len },
- { "search_m.png", search_m_png, search_m_png_len },
- { "search_r.png", search_r_png, search_r_png_len },
- { 0, 0, 0 }
-};
-
-//------------------------------------------------------------------------
static void writeClientSearchBox(FTextStream &t,const char *relPath)
{
@@ -912,40 +102,6 @@ static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlig
//------------------------------------------------------------------------
-/// substitute all occurrences of \a src in \a s by \a dst
-QCString substitute(const char *s,const char *src,const char *dst)
-{
- if (s==0 || src==0) return s;
- const char *p, *q;
- int srcLen = qstrlen(src);
- int dstLen = dst ? qstrlen(dst) : 0;
- int resLen;
- if (srcLen!=dstLen)
- {
- int count;
- for (count=0, p=s; (q=strstr(p,src))!=0; p=q+srcLen) count++;
- resLen = (int)(p-s)+qstrlen(p)+count*(dstLen-srcLen);
- }
- else // result has same size as s
- {
- resLen = qstrlen(s);
- }
- QCString result(resLen+1);
- char *r;
- for (r=result.data(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
- {
- int l = (int)(q-p);
- memcpy(r,p,l);
- r+=l;
- if (dst) memcpy(r,dst,dstLen);
- r+=dstLen;
- }
- qstrcpy(r,p);
- //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
- return result;
-}
-//----------------------------------------------------------------------
-
/// Clear a text block \a s from \a begin to \a end markers
QCString clearBlock(const char *s,const char *begin,const char *end)
{
@@ -989,6 +145,7 @@ QCString clearBlock(const char *s,const char *begin,const char *end)
QCString selectBlock(const QCString& s,const QCString &name,bool enable)
{
+ // TODO: this is an expensive function that is called a lot -> optimize it
const QCString begin = "<!--BEGIN " + name + "-->";
const QCString end = "<!--END " + name + "-->";
const QCString nobegin = "<!--BEGIN !" + name + "-->";
@@ -1015,11 +172,13 @@ static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSe
{
QGString result;
FTextStream t(&result);
- if (serverSide) {
+ if (serverSide)
+ {
writeServerSearchBox(t, relPath, highlightSearch);
}
- else {
- writeClientSearchBox(t, relPath);
+ else
+ {
+ writeClientSearchBox(t, relPath);
}
return QCString(result);
}
@@ -1129,6 +288,7 @@ static QCString substituteHtmlKeywords(const QCString &s,
{
treeViewCssJs = "<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
"<script type=\"text/javascript\" src=\"$relpath^resize.js\"></script>\n"
+ "<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
"<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n"
"<script type=\"text/javascript\">\n"
" $(document).ready(initResizable);\n"
@@ -1139,12 +299,16 @@ static QCString substituteHtmlKeywords(const QCString &s,
if (searchEngine)
{
searchCssJs = "<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
+ if (!serverBasedSearch)
+ {
+ searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
+ }
searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
if (!serverBasedSearch)
{
searchCssJs += "<script type=\"text/javascript\">\n"
- " $(document).ready(function() { searchBox.OnSelectItem(0); });\n"
+ " $(document).ready(function() { init_search(); });\n"
"</script>";
}
else
@@ -1157,7 +321,7 @@ static QCString substituteHtmlKeywords(const QCString &s,
// OPENSEARCH_PROVIDER {
searchCssJs += "<link rel=\"search\" href=\"" + relPath +
- "search-opensearch.php?v=opensearch.xml\" "
+ "search_opensearch.php?v=opensearch.xml\" "
"type=\"application/opensearchdescription+xml\" title=\"" +
(hasProjectName ? projectName : QCString("Doxygen")) +
"\"/>";
@@ -1341,9 +505,11 @@ void HtmlCodeGenerator::writeLineNumber(const char *ref,const char *filename,
const char *anchor,int l)
{
if (!m_streamSet) return;
- QCString lineNumber,lineAnchor;
- lineNumber.sprintf("%5d",l);
- lineAnchor.sprintf("l%05d",l);
+ const int maxLineNrStr = 10;
+ char lineNumber[maxLineNrStr];
+ char lineAnchor[maxLineNrStr];
+ qsnprintf(lineNumber,maxLineNrStr,"%5d",l);
+ qsnprintf(lineAnchor,maxLineNrStr,"l%05d",l);
m_t << "<div class=\"line\">";
m_t << "<a name=\"" << lineAnchor << "\"></a><span class=\"lineno\">";
@@ -1535,7 +701,7 @@ void HtmlGenerator::init()
}
else
{
- g_header = defaultHtmlHeader;
+ g_header = ResourceMgr::instance().getAsString("header.html");
}
if (!Config_getString("HTML_FOOTER").isEmpty())
@@ -1545,7 +711,7 @@ void HtmlGenerator::init()
}
else
{
- g_footer = defaultHtmlFooter;
+ g_footer = ResourceMgr::instance().getAsString("footer.html");
}
if (Config_getBool("USE_MATHJAX"))
@@ -1558,60 +724,37 @@ void HtmlGenerator::init()
}
createSubDirs(d);
- QCString fileName=dname+"/tabs.css";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << replaceColorMarkers(tabs_css);
- }
- else
- {
- fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data());
- }
-
- {
- QFile f(dname+"/jquery.js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << search_jquery_script1 << search_jquery_script2 << search_jquery_script3;
- if (Config_getBool("GENERATE_TREEVIEW"))
- {
- t << search_jquery_script4 << search_jquery_script5;
- }
- if (Config_getBool("SOURCE_BROWSER"))
- {
- t << search_jquery_script6;
- }
- }
- }
-
+ ResourceMgr &mgr = ResourceMgr::instance();
+ mgr.copyResource("tabs.css",dname);
+ mgr.copyResource("jquery.js",dname);
if (Config_getBool("INTERACTIVE_SVG"))
{
- QFile f(dname+"/svgpan.js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << svgpan_script;
- }
+ mgr.copyResource("svgpan.js",dname);
}
{
QFile f(dname+"/dynsections.js");
if (f.open(IO_WriteOnly))
{
- FTextStream t(&f);
- t << dynsections_script;
- if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS"))
+ const Resource *res = mgr.get("dynsections.js");
+ if (res)
{
- t << endl <<
- "$(document).ready(function() {\n"
- " $('.code,.codeRef').each(function() {\n"
- " $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n"
- " $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n"
- " });\n"
- "});\n";
+ FTextStream t(&f);
+ t << (const char *)res->data;
+ if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS"))
+ {
+ t << endl <<
+ "$(document).ready(function() {\n"
+ " $('.code,.codeRef').each(function() {\n"
+ " $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n"
+ " $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n"
+ " });\n"
+ "});\n";
+ }
+ }
+ else
+ {
+ err("Resource dynsections.js not compiled in");
}
}
}
@@ -1622,57 +765,95 @@ void HtmlGenerator::writeTabData()
{
Doxygen::indexList->addStyleSheetFile("tabs.css");
QCString dname=Config_getString("HTML_OUTPUT");
- writeColoredImgData(dname,colored_tab_data);
-
- {
- unsigned char shadow[6] = { 5, 5, 5, 5, 5, 5 };
- unsigned char shadow_alpha[6] = { 80, 60, 40, 20, 10, 0 };
- ColoredImage img(1,6,shadow,shadow_alpha,0,0,100);
- img.save(dname+"/nav_g.png");
- }
+ ResourceMgr &mgr = ResourceMgr::instance();
+ //writeColoredImgData(dname,colored_tab_data);
+ mgr.copyResource("tab_a.lum",dname);
+ mgr.copyResource("tab_b.lum",dname);
+ mgr.copyResource("tab_h.lum",dname);
+ mgr.copyResource("tab_s.lum",dname);
+ mgr.copyResource("nav_h.lum",dname);
+ mgr.copyResource("nav_f.lum",dname);
+ mgr.copyResource("bc_s.luma",dname);
+ mgr.copyResource("doxygen.luma",dname);
+ mgr.copyResource("closed.luma",dname);
+ mgr.copyResource("open.luma",dname);
+ mgr.copyResource("bdwn.luma",dname);
+ mgr.copyResource("sync_on.luma",dname);
+ mgr.copyResource("sync_off.luma",dname);
+
+ //{
+ // unsigned char shadow[6] = { 5, 5, 5, 5, 5, 5 };
+ // unsigned char shadow_alpha[6] = { 80, 60, 40, 20, 10, 0 };
+ // ColoredImage img(1,6,shadow,shadow_alpha,0,0,100);
+ // img.save(dname+"/nav_g.png");
+ //}
+ mgr.copyResource("nav_g.png",dname);
}
void HtmlGenerator::writeSearchData(const char *dir)
{
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
+ //writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
+ ResourceMgr &mgr = ResourceMgr::instance();
+
+ mgr.copyResource("search_l.png",dir);
+ Doxygen::indexList->addImageFile("search/search_l.png");
+ mgr.copyResource("search_m.png",dir);
+ Doxygen::indexList->addImageFile("search/search_m.png");
+ mgr.copyResource("search_r.png",dir);
+ Doxygen::indexList->addImageFile("search/search_r.png");
+ if (serverBasedSearch)
+ {
+ mgr.copyResource("mag.png",dir);
+ Doxygen::indexList->addImageFile("search/mag.png");
+ }
+ else
+ {
+ mgr.copyResource("close.png",dir);
+ Doxygen::indexList->addImageFile("search/close.png");
+ mgr.copyResource("mag_sel.png",dir);
+ Doxygen::indexList->addImageFile("search/mag_sel.png");
+ }
+
QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
QFile f(searchDirName+"/search.css");
if (f.open(IO_WriteOnly))
{
- FTextStream t(&f);
- QCString searchCss = replaceColorMarkers(search_styleSheet);
- searchCss = substitute(searchCss,"$doxygenversion",versionString);
- if (Config_getBool("DISABLE_INDEX"))
+ const Resource *res = mgr.get("search.css");
+ if (res)
{
- // move up the search box if there are no tabs
- searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
+ FTextStream t(&f);
+ QCString searchCss = replaceColorMarkers((const char *)res->data);
+ searchCss = substitute(searchCss,"$doxygenversion",versionString);
+ if (Config_getBool("DISABLE_INDEX"))
+ {
+ // move up the search box if there are no tabs
+ searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
+ }
+ t << searchCss;
+ Doxygen::indexList->addStyleSheetFile("search/search.css");
}
- t << searchCss;
}
- Doxygen::indexList->addStyleSheetFile("search/search.css");
}
void HtmlGenerator::writeStyleSheetFile(QFile &file)
{
FTextStream t(&file);
- t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
+ t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",versionString));
}
void HtmlGenerator::writeHeaderFile(QFile &file, const char * /*cssname*/)
{
FTextStream t(&file);
t << "<!-- HTML header for doxygen " << versionString << "-->" << endl;
- QCString contents(defaultHtmlHeader);
- t << contents;
+ t << ResourceMgr::instance().getAsString("header.html");
}
void HtmlGenerator::writeFooterFile(QFile &file)
{
FTextStream t(&file);
t << "<!-- HTML footer for doxygen " << versionString << "-->" << endl;
- QCString contents(defaultHtmlFooter);
- t << contents;
+ t << ResourceMgr::instance().getAsString("footer.html");
}
void HtmlGenerator::startFile(const char *name,const char *,
@@ -1722,7 +903,6 @@ void HtmlGenerator::writeSearchInfo(FTextStream &t,const QCString &relPath)
t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
t << " onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
- writeSearchCategories(t);
t << "</div>\n";
t << "\n";
t << "<!-- iframe showing the search results (closed by default) -->\n";
@@ -1810,7 +990,7 @@ void HtmlGenerator::writeStyleInfo(int part)
//t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
//t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
- t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
+ t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",versionString));
endPlainFile();
Doxygen::indexList->addStyleSheetFile("doxygen.css");
}
@@ -3038,9 +2218,10 @@ void HtmlGenerator::writeSearchPage()
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool disableIndex = Config_getBool("DISABLE_INDEX");
static QCString projectName = Config_getString("PROJECT_NAME");
+ static QCString htmlOutput = Config_getString("HTML_OUTPUT");
// OPENSEARCH_PROVIDER {
- QCString configFileName = Config_getString("HTML_OUTPUT")+"/search-config.php";
+ QCString configFileName = htmlOutput+"/search_config.php";
QFile cf(configFileName);
if (cf.open(IO_WriteOnly))
{
@@ -3066,26 +2247,11 @@ void HtmlGenerator::writeSearchPage()
t << "</script>\n";
}
- QCString functionsFileName = Config_getString("HTML_OUTPUT")+"/search-functions.php";
- QFile ff(functionsFileName);
- if (ff.open(IO_WriteOnly))
- {
- FTextStream t(&ff);
- // Write stuff from search_functions.php source file...
- t << search_functions_script;
- }
-
- QCString opensearchFileName = Config_getString("HTML_OUTPUT")+"/search-opensearch.php";
- QFile of(opensearchFileName);
- if (of.open(IO_WriteOnly))
- {
- FTextStream t(&of);
- // Write stuff from search_opensearch.php source file...
- t << search_opensearch_script;
- }
+ ResourceMgr::instance().copyResource("search_functions.php",htmlOutput);
+ ResourceMgr::instance().copyResource("search_opensearch.php",htmlOutput);
// OPENSEARCH_PROVIDER }
- QCString fileName = Config_getString("HTML_OUTPUT")+"/search.php";
+ QCString fileName = htmlOutput+"/search.php";
QFile f(fileName);
if (f.open(IO_WriteOnly))
{
@@ -3108,7 +2274,7 @@ void HtmlGenerator::writeSearchPage()
}
t << "<script language=\"php\">\n";
- t << "require_once \"search-functions.php\";\n";
+ t << "require_once \"search_functions.php\";\n";
t << "main();\n";
t << "</script>\n";
@@ -3122,12 +2288,12 @@ void HtmlGenerator::writeSearchPage()
writePageFooter(t,"Search","","");
}
- QCString scriptName = Config_getString("HTML_OUTPUT")+"/search/search.js";
+ QCString scriptName = htmlOutput+"/search/search.js";
QFile sf(scriptName);
if (sf.open(IO_WriteOnly))
{
FTextStream t(&sf);
- t << extsearch_script;
+ t << ResourceMgr::instance().getAsString("extsearch.js");
}
else
{
@@ -3219,7 +2385,7 @@ void HtmlGenerator::writeExternalSearchPage()
}
if (!first) t << endl;
t << "};" << endl << endl;
- t << extsearch_script;
+ t << ResourceMgr::instance().getAsString("extsearch.js");
t << endl;
t << "$(document).ready(function() {" << endl;
t << " var query = trim(getURLParameter('query'));" << endl;
diff --git a/src/index.cpp b/src/index.cpp
index 96b0f76..bc0b48e 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -2158,7 +2158,8 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
const LetterToIndexMap<MemberIndexList> &memberLists,
DefinitionIntf::DefType type)
{
- ASSERT((int)type<3);
+ int index = (int)type;
+ ASSERT(index<3);
typedef void (*writeLinkForMember_t)(OutputList &ol,MemberDef *md,const char *separator,
QCString &prevNamespaceName);
@@ -2238,8 +2239,11 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
sep = ", ";
// link to class for other members with the same name
}
- // write the link for the specific list type
- writeLinkForMemberMap[(int)type](ol,md,sep,prevDefName);
+ if (index<3)
+ {
+ // write the link for the specific list type
+ writeLinkForMemberMap[index](ol,md,sep,prevDefName);
+ }
}
}
if (!firstItem) ol.endItemListItem();
diff --git a/src/jquery_fx.js b/src/jquery_fx.js
deleted file mode 100644
index 97e5843..0000000
--- a/src/jquery_fx.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery); \ No newline at end of file
diff --git a/src/jquery_p1.js b/src/jquery_p1.js
deleted file mode 100644
index 06eb7e6..0000000
--- a/src/jquery_p1.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7.1
- * 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: Mon Nov 21 21:11:03 2011 -0500
- */
-(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))
-}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;
-if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},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(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},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(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false
diff --git a/src/jquery_p2.js b/src/jquery_p2.js
deleted file mode 100644
index bc16cf6..0000000
--- a/src/jquery_p2.js
+++ /dev/null
@@ -1,10 +0,0 @@
-}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.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(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.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 bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.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(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1
-},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);
-ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;
diff --git a/src/jquery_p3.js b/src/jquery_p3.js
deleted file mode 100644
index c0f18ce..0000000
--- a/src/jquery_p3.js
+++ /dev/null
@@ -1,3 +0,0 @@
-if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)
-}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b
-})}})(window); \ No newline at end of file
diff --git a/src/jquery_pt.js b/src/jquery_pt.js
deleted file mode 100644
index cbc428d..0000000
--- a/src/jquery_pt.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- PowerTip - v1.2.0 - 2013-04-03
- http://stevenbenner.github.com/jquery-powertip/
- Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
- Released under MIT license.
- https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
-*/
-(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}})); \ No newline at end of file
diff --git a/src/jquery_ui.js b/src/jquery_ui.js
deleted file mode 100644
index 0ef321d..0000000
--- a/src/jquery_ui.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
- * jQuery UI 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
- * jQuery UI Widget 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
- * jQuery UI Mouse 1.8.18
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- * jquery.ui.widget.js
- */
-(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;
-p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
- * jQuery hashchange event - v1.3 - 7/21/2010
- * http://benalman.com/projects/jquery-hashchange-plugin/
- *
- * Copyright (c) 2010 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this); \ No newline at end of file
diff --git a/src/lang_cfg.py b/src/lang_cfg.py
index efed05f..efed05f 100644..100755
--- a/src/lang_cfg.py
+++ b/src/lang_cfg.py
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index af1a5fd..4cba261 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -71,6 +71,75 @@ static const char *getSectionName(int level)
return secLabels[QMIN(maxLevels-1,l)];
}
+static void visitPreStart(FTextStream &t, const bool hasCaption, QCString name, QCString width, QCString height)
+{
+ if (hasCaption)
+ {
+ t << "\n\\begin{DoxyImage}\n";
+ }
+ else
+ {
+ t << "\n\\begin{DoxyImageNoCaption}\n"
+ " \\mbox{";
+ }
+
+ t << "\\includegraphics";
+ if (!width.isEmpty() || !height.isEmpty())
+ {
+ t << "[";
+ }
+ if (!width.isEmpty())
+ {
+ t << "width=" << width;
+ }
+ if (!width.isEmpty() && !height.isEmpty())
+ {
+ t << ",";
+ }
+ if (!height.isEmpty())
+ {
+ t << "height=" << height;
+ }
+ if (width.isEmpty() && height.isEmpty())
+ {
+ /* default setting */
+ t << "[width=\\textwidth,height=\\textheight/2,keepaspectratio=true]";
+ }
+ else
+ {
+ t << "]";
+ }
+
+ t << "{" << name << "}";
+
+ if (hasCaption)
+ {
+ t << "\n\\caption{";
+ }
+}
+
+
+
+static void visitPostEnd(FTextStream &t, const bool hasCaption)
+{
+ t << "}\n"; // end mbox or caption
+ if (hasCaption)
+ {
+ t << "\\end{DoxyImage}\n";
+ }
+ else{
+ t << "\\end{DoxyImageNoCaption}\n";
+ }
+}
+
+
+static void visitCaption(LatexDocVisitor *parent, QList<DocNode> children)
+{
+ QListIterator<DocNode> cli(children);
+ DocNode *n;
+ for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
+}
+
QCString LatexDocVisitor::escapeMakeIndexChars(const char *s)
{
QCString result;
@@ -284,15 +353,17 @@ void LatexDocVisitor::visit(DocVerbatim *s)
{
err("Could not open file %s for writing\n",fileName.data());
}
- file.writeBlock( s->text(), s->text().length() );
- file.close();
+ else
+ {
+ file.writeBlock( s->text(), s->text().length() );
+ file.close();
- m_t << "\\begin{center}\n";
- startDotFile(fileName,"","",FALSE);
- endDotFile(FALSE);
- m_t << "\\end{center}\n";
+ startDotFile(fileName,s->width(),s->height(),s->hasCaption());
+ visitCaption(this, s->children());
+ endDotFile(s->hasCaption());
- if (Config_getBool("DOT_CLEANUP")) file.remove();
+ if (Config_getBool("DOT_CLEANUP")) file.remove();
+ }
}
break;
case DocVerbatim::Msc:
@@ -309,17 +380,18 @@ void LatexDocVisitor::visit(DocVerbatim *s)
{
err("Could not open file %s.msc for writing\n",baseName.data());
}
- QCString text = "msc {";
- text+=s->text();
- text+="}";
- file.writeBlock( text, text.length() );
- file.close();
+ else
+ {
+ QCString text = "msc {";
+ text+=s->text();
+ text+="}";
+ file.writeBlock( text, text.length() );
+ file.close();
- m_t << "\\begin{center}\n";
- writeMscFile(baseName);
- m_t << "\\end{center}\n";
+ writeMscFile(baseName, s);
- if (Config_getBool("DOT_CLEANUP")) file.remove();
+ if (Config_getBool("DOT_CLEANUP")) file.remove();
+ }
}
break;
case DocVerbatim::PlantUML:
@@ -327,9 +399,7 @@ void LatexDocVisitor::visit(DocVerbatim *s)
QCString latexOutput = Config_getString("LATEX_OUTPUT");
QCString baseName = writePlantUMLSource(latexOutput,s->exampleFile(),s->text());
- m_t << "\\begin{center}\n";
- writePlantUMLFile(baseName);
- m_t << "\\end{center}\n";
+ writePlantUMLFile(baseName, s);
}
break;
}
@@ -825,7 +895,7 @@ static const char *getTableName(const DocNode *n)
bool isNested=FALSE;
while (n && !isNested)
{
- isNested = n->kind()==DocNode::Kind_HtmlTable;
+ isNested = n->kind()==DocNode::Kind_HtmlTable || n->kind()==DocNode::Kind_ParamSect;
n = n->parent();
}
return isNested ? "TabularNC" : "TabularC";
@@ -1098,40 +1168,18 @@ void LatexDocVisitor::visitPost(DocHtmlHeader *)
if (m_hide) return;
m_t << "}";
}
-
void LatexDocVisitor::visitPre(DocImage *img)
{
if (img->type()==DocImage::Latex)
{
if (m_hide) return;
- if (img->hasCaption())
- {
- m_t << "\n\\begin{DoxyImage}\n";
- }
- else
- {
- m_t << "\n\\begin{DoxyImageNoCaption}\n"
- " \\mbox{";
- }
QCString gfxName = img->name();
if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf")
{
gfxName=gfxName.left(gfxName.length()-4);
}
- m_t << "\\includegraphics";
- if (!img->width().isEmpty())
- {
- m_t << "[width=" << img->width() << "]";
- }
- else if (!img->height().isEmpty())
- {
- m_t << "[height=" << img->height() << "]";
- }
- m_t << "{" << gfxName << "}";
- if (img->hasCaption())
- {
- m_t << "\n\\caption{";
- }
+
+ visitPreStart(m_t,img->hasCaption(), gfxName, img->width(), img->height());
}
else // other format -> skip
{
@@ -1145,14 +1193,7 @@ void LatexDocVisitor::visitPost(DocImage *img)
if (img->type()==DocImage::Latex)
{
if (m_hide) return;
- m_t << "}\n"; // end mbox or caption
- if (img->hasCaption())
- {
- m_t << "\\end{DoxyImage}\n";
- }
- else{
- m_t << "\\end{DoxyImageNoCaption}\n";
- }
+ visitPostEnd(m_t,img->hasCaption());
}
else // other format
{
@@ -1610,57 +1651,13 @@ void LatexDocVisitor::startDotFile(const QCString &fileName,
QCString outDir = Config_getString("LATEX_OUTPUT");
QCString name = fileName;
writeDotGraphFromFile(name,outDir,baseName,GOF_EPS);
- if (hasCaption)
- {
- m_t << "\n\\begin{DoxyImage}\n";
- }
- else
- {
- m_t << "\n\\begin{DoxyImageNoCaption}\n"
- " \\mbox{";
- }
- m_t << "\\includegraphics";
- if (!width.isEmpty())
- {
- m_t << "[width=" << width << "]";
- }
- else if (!height.isEmpty())
- {
- m_t << "[height=" << height << "]";
- }
- else
- {
- m_t << "[width=\\textwidth,height=\\textheight/2,keepaspectratio=true]";
- }
- m_t << "{" << baseName;
- //if (Config_getBool("USE_PDFLATEX"))
- //{
- // m_t << ".pdf";
- //}
- //else
- //{
- // m_t << ".eps";
- //}
- m_t << "}";
-
- if (hasCaption)
- {
- m_t << "\n\\caption{";
- }
+ visitPreStart(m_t,hasCaption, baseName, width, height);
}
void LatexDocVisitor::endDotFile(bool hasCaption)
{
if (m_hide) return;
- m_t << "}\n"; // end caption or mbox
- if (hasCaption)
- {
- m_t << "\\end{DoxyImage}\n";
- }
- else
- {
- m_t << "\\end{DoxyImageNoCaption}\n";
- }
+ visitPostEnd(m_t,hasCaption);
}
void LatexDocVisitor::startMscFile(const QCString &fileName,
@@ -1683,61 +1680,17 @@ void LatexDocVisitor::startMscFile(const QCString &fileName,
QCString outDir = Config_getString("LATEX_OUTPUT");
writeMscGraphFromFile(fileName,outDir,baseName,MSC_EPS);
- if (hasCaption)
- {
- m_t << "\n\\begin{DoxyImage}\n";
- }
- else
- {
- m_t << "\n\\begin{DoxyImageNoCaption}\n"
- " \\mbox{";
- }
- m_t << "\\includegraphics";
- if (!width.isEmpty())
- {
- m_t << "[width=" << width << "]";
- }
- else if (!height.isEmpty())
- {
- m_t << "[height=" << height << "]";
- }
- else
- {
- m_t << "[width=\\textwidth,height=\\textheight/2,keepaspectratio=true]";
- }
- m_t << "{" << baseName;
- //if (Config_getBool("USE_PDFLATEX"))
- //{
- // m_t << ".pdf";
- //}
- //else
- //{
- // m_t << ".eps";
- //}
- m_t << "}";
-
- if (hasCaption)
- {
- m_t << "\n\\caption{";
- }
+ visitPreStart(m_t,hasCaption, baseName, width, height);
}
void LatexDocVisitor::endMscFile(bool hasCaption)
{
if (m_hide) return;
- m_t << "}\n"; // end caption or mbox
- if (hasCaption)
- {
- m_t << "\\end{DoxyImage}\n";
- }
- else
- {
- m_t << "\\end{DoxyImageNoCaption}\n";
- }
+ visitPostEnd(m_t,hasCaption);
}
-void LatexDocVisitor::writeMscFile(const QCString &baseName)
+void LatexDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s)
{
QCString shortName = baseName;
int i;
@@ -1747,11 +1700,9 @@ void LatexDocVisitor::writeMscFile(const QCString &baseName)
}
QCString outDir = Config_getString("LATEX_OUTPUT");
writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_EPS);
- m_t << "\n\\begin{DoxyImageNoCaption}"
- " \\mbox{\\includegraphics";
- m_t << "{" << shortName << "}";
- m_t << "}\n"; // end mbox
- m_t << "\\end{DoxyImageNoCaption}\n";
+ visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height());
+ visitCaption(this, s->children());
+ visitPostEnd(m_t, s->hasCaption());
}
@@ -1775,61 +1726,17 @@ void LatexDocVisitor::startDiaFile(const QCString &fileName,
QCString outDir = Config_getString("LATEX_OUTPUT");
writeDiaGraphFromFile(fileName,outDir,baseName,DIA_EPS);
- if (hasCaption)
- {
- m_t << "\n\\begin{DoxyImage}\n";
- }
- else
- {
- m_t << "\n\\begin{DoxyImageNoCaption}\n"
- " \\mbox{";
- }
- m_t << "\\includegraphics";
- if (!width.isEmpty())
- {
- m_t << "[width=" << width << "]";
- }
- else if (!height.isEmpty())
- {
- m_t << "[height=" << height << "]";
- }
- else
- {
- m_t << "[width=\\textwidth,height=\\textheight/2,keepaspectratio=true]";
- }
- m_t << "{" << baseName;
- //if (Config_getBool("USE_PDFLATEX"))
- //{
- // m_t << ".pdf";
- //}
- //else
- //{
- // m_t << ".eps";
- //}
- m_t << "}";
-
- if (hasCaption)
- {
- m_t << "\n\\caption{";
- }
+ visitPreStart(m_t,hasCaption, baseName, width, height);
}
void LatexDocVisitor::endDiaFile(bool hasCaption)
{
if (m_hide) return;
- m_t << "}\n"; // end caption or mbox
- if (hasCaption)
- {
- m_t << "\\end{DoxyImage}\n";
- }
- else
- {
- m_t << "\\end{DoxyImageNoCaption}\n";
- }
+ visitPostEnd(m_t,hasCaption);
}
-void LatexDocVisitor::writeDiaFile(const QCString &baseName)
+void LatexDocVisitor::writeDiaFile(const QCString &baseName, DocVerbatim *s)
{
QCString shortName = baseName;
int i;
@@ -1839,14 +1746,12 @@ void LatexDocVisitor::writeDiaFile(const QCString &baseName)
}
QCString outDir = Config_getString("LATEX_OUTPUT");
writeDiaGraphFromFile(baseName+".dia",outDir,shortName,DIA_EPS);
- m_t << "\n\\begin{DoxyImageNoCaption}"
- " \\mbox{\\includegraphics";
- m_t << "{" << shortName << "}";
- m_t << "}\n"; // end mbox
- m_t << "\\end{DoxyImageNoCaption}\n";
+ visitPreStart(m_t, s->hasCaption(), shortName, s->width(), s->height());
+ visitCaption(this, s->children());
+ visitPostEnd(m_t, s->hasCaption());
}
-void LatexDocVisitor::writePlantUMLFile(const QCString &baseName)
+void LatexDocVisitor::writePlantUMLFile(const QCString &baseName, DocVerbatim *s)
{
QCString shortName = baseName;
int i;
@@ -1856,10 +1761,8 @@ void LatexDocVisitor::writePlantUMLFile(const QCString &baseName)
}
QCString outDir = Config_getString("LATEX_OUTPUT");
generatePlantUMLOutput(baseName,outDir,PUML_EPS);
- m_t << "\n\\begin{DoxyImageNoCaption}"
- " \\mbox{\\includegraphics";
- m_t << "{" << shortName << "}";
- m_t << "}\n"; // end mbox
- m_t << "\\end{DoxyImageNoCaption}\n";
+ visitPreStart(m_t, s->hasCaption(), shortName, s->width(), s->height());
+ visitCaption(this, s->children());
+ visitPostEnd(m_t, s->hasCaption());
}
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 64560b9..0391dcd 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -170,13 +170,13 @@ class LatexDocVisitor : public DocVisitor
void startMscFile(const QCString &fileName,const QCString &width,
const QCString &height, bool hasCaption);
void endMscFile(bool hasCaption);
- void writeMscFile(const QCString &fileName);
+ void writeMscFile(const QCString &fileName, DocVerbatim *s);
void startDiaFile(const QCString &fileName,const QCString &width,
const QCString &height, bool hasCaption);
void endDiaFile(bool hasCaption);
- void writeDiaFile(const QCString &fileName);
- void writePlantUMLFile(const QCString &fileName);
+ void writeDiaFile(const QCString &fileName, DocVerbatim *s);
+ void writePlantUMLFile(const QCString &fileName, DocVerbatim *s);
void pushEnabled();
void popEnabled();
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 4ad577e..d4d8fae 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -36,30 +36,7 @@
#include "classlist.h"
#include "namespacedef.h"
#include "filename.h"
-
-static const char doxygenLatexStyle[] =
-#include "doxygen.sty.h"
-;
-
-//static QCString filterTitle(const char *s)
-//{
-// QCString tmp=s,result;
-// uint i;for (i=0;i<tmp.length();i++)
-// {
-// char c=tmp.at(i);
-// switch(c)
-// {
-// case '#': result+="\\#"; break;
-// case '"': result+="\\\""; break;
-// case '%': result+="\\%"; break;
-// case '[': result+="{"; break;
-// case ']': result+="}"; break;
-// default: result+=c; break;
-// }
-// }
-// return result;
-//}
-
+#include "resourcemgr.h"
LatexGenerator::LatexGenerator() : OutputGenerator()
@@ -293,7 +270,29 @@ static void writeDefaultHeaderPart1(FTextStream &t)
"\\usepackage{fixltx2e}\n" // for \textsubscript
"\\usepackage{calc}\n"
"\\usepackage{doxygen}\n"
- "\\usepackage{graphicx}\n"
+ "\\usepackage[export]{adjustbox} % also loads graphicx\n";
+ QStrList extraLatexStyle = Config_getList("LATEX_EXTRA_STYLESHEET");
+ for (uint i=0; i<extraLatexStyle.count(); ++i)
+ {
+ QCString fileName(extraLatexStyle.at(i));
+ if (!fileName.isEmpty())
+ {
+ QFileInfo fi(fileName);
+ if (fi.exists())
+ {
+ if (checkExtension(fi.fileName().data(), latexStyleExtension))
+ {
+ // strip the extension, it will be added by the usepackage in the tex conversion process
+ t << "\\usepackage{" << stripExtensionGeneral(fi.fileName().data(), latexStyleExtension) << "}\n";
+ }
+ else
+ {
+ t << "\\usepackage{" << fi.fileName().utf8() << "}\n";
+ }
+ }
+ }
+ }
+ t << "\\usepackage{graphicx}\n"
"\\usepackage[utf8]{inputenc}\n"
"\\usepackage{makeidx}\n"
"\\usepackage{multicol}\n"
@@ -316,7 +315,6 @@ static void writeDefaultHeaderPart1(FTextStream &t)
// Define default fonts
t << "% Font selection\n"
"\\usepackage[T1]{fontenc}\n"
- "\\usepackage{mathptmx}\n"
"\\usepackage[scaled=.90]{helvet}\n"
"\\usepackage{courier}\n"
"\\usepackage{amssymb}\n"
@@ -525,7 +523,7 @@ static void writeDefaultHeaderPart3(FTextStream &t)
static void writeDefaultStyleSheet(FTextStream &t)
{
- t << doxygenLatexStyle;
+ t << ResourceMgr::instance().getAsString("doxygen.sty");
}
static void writeDefaultFooter(FTextStream &t)
@@ -1089,7 +1087,7 @@ void LatexGenerator::endIndexItem(const char *ref,const char *fn)
{
if (!ref && fn)
{
- t << "}{\\pageref{" << fn << "}}{}" << endl;
+ t << "}{\\pageref{" << stripPath(fn) << "}}{}" << endl;
}
}
@@ -1954,10 +1952,10 @@ void LatexGenerator::exceptionEntry(const char* prefix,bool closeBracket)
void LatexGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *)
{
- LatexDocVisitor *visitor =
+ LatexDocVisitor *visitor =
new LatexDocVisitor(t,*this,ctx?ctx->getDefFileExtension():QCString(""),insideTabbing);
n->accept(visitor);
- delete visitor;
+ delete visitor;
}
void LatexGenerator::startConstraintList(const char *header)
diff --git a/src/latexgen.h b/src/latexgen.h
index f68612d..60c649a 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -22,6 +22,8 @@
class QFile;
+static const char *latexStyleExtension = ".sty";
+
/** Generator for LaTeX output. */
class LatexGenerator : public OutputGenerator
{
diff --git a/src/layout.cpp b/src/layout.cpp
index 739a2a3..c364886 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -1104,7 +1104,7 @@ class LayoutParser : public QXmlDefaultHandler
}
}
// create new item and make it the new root
- m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title,intro);
+ m_rootNav = new LayoutNavEntry(m_rootNav,kind,isVisible,baseFile,title,intro);
}
void endNavEntry()
diff --git a/src/layout_default.h b/src/layout_default.h
deleted file mode 100644
index d775926..0000000
--- a/src/layout_default.h
+++ /dev/null
@@ -1,194 +0,0 @@
-"<doxygenlayout version=\"1.0\">\n"
-" <!-- Generated by doxygen $doxygenversion -->\n"
-" <!-- Navigation index tabs for HTML output -->\n"
-" <navindex>\n"
-" <tab type=\"mainpage\" visible=\"yes\" title=\"\"/>\n"
-" <tab type=\"pages\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"modules\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"namespaces\" visible=\"yes\" title=\"\">\n"
-" <tab type=\"namespacelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"namespacemembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" </tab>\n"
-" <tab type=\"classes\" visible=\"yes\" title=\"\">\n"
-" <tab type=\"classlist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"classindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n"
-" <tab type=\"hierarchy\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"classmembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" </tab>\n"
-" <tab type=\"files\" visible=\"yes\" title=\"\">\n"
-" <tab type=\"filelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"globals\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" </tab>\n"
-" <tab type=\"examples\" visible=\"yes\" title=\"\" intro=\"\"/> \n"
-" </navindex>\n"
-"\n"
-" <!-- Layout definition for a class page -->\n"
-" <class>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n"
-" <inheritancegraph visible=\"$CLASS_GRAPH\"/>\n"
-" <collaborationgraph visible=\"$COLLABORATION_GRAPH\"/>\n"
-" <memberdecl>\n"
-" <nestedclasses visible=\"yes\" title=\"\"/>\n"
-" <publictypes title=\"\"/>\n"
-" <services title=\"\"/>\n"
-" <interfaces title=\"\"/>\n"
-" <publicslots title=\"\"/>\n"
-" <signals title=\"\"/>\n"
-" <publicmethods title=\"\"/>\n"
-" <publicstaticmethods title=\"\"/>\n"
-" <publicattributes title=\"\"/>\n"
-" <publicstaticattributes title=\"\"/>\n"
-" <protectedtypes title=\"\"/>\n"
-" <protectedslots title=\"\"/>\n"
-" <protectedmethods title=\"\"/>\n"
-" <protectedstaticmethods title=\"\"/>\n"
-" <protectedattributes title=\"\"/>\n"
-" <protectedstaticattributes title=\"\"/>\n"
-" <packagetypes title=\"\"/>\n"
-" <packagemethods title=\"\"/>\n"
-" <packagestaticmethods title=\"\"/>\n"
-" <packageattributes title=\"\"/>\n"
-" <packagestaticattributes title=\"\"/>\n"
-" <properties title=\"\"/>\n"
-" <events title=\"\"/>\n"
-" <privatetypes title=\"\"/>\n"
-" <privateslots title=\"\"/>\n"
-" <privatemethods title=\"\"/>\n"
-" <privatestaticmethods title=\"\"/>\n"
-" <privateattributes title=\"\"/>\n"
-" <privatestaticattributes title=\"\"/>\n"
-" <friends title=\"\"/>\n"
-" <related title=\"\" subtitle=\"\"/>\n"
-" <membergroups visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" <memberdef>\n"
-" <inlineclasses title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <services title=\"\"/>\n"
-" <interfaces title=\"\"/>\n"
-" <constructors title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <related title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <properties title=\"\"/>\n"
-" <events title=\"\"/>\n"
-" </memberdef>\n"
-" <allmemberslink visible=\"yes\"/>\n"
-" <usedfiles visible=\"$SHOW_USED_FILES\"/>\n"
-" <authorsection visible=\"yes\"/>\n"
-" </class>\n"
-"\n"
-" <!-- Layout definition for a namespace page -->\n"
-" <namespace>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <memberdecl>\n"
-" <nestednamespaces visible=\"yes\" title=\"\"/>\n"
-" <constantgroups visible=\"yes\" title=\"\"/>\n"
-" <classes visible=\"yes\" title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <membergroups visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" <memberdef>\n"
-" <inlineclasses title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" </memberdef>\n"
-" <authorsection visible=\"yes\"/>\n"
-" </namespace>\n"
-"\n"
-" <!-- Layout definition for a file page -->\n"
-" <file>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n"
-" <includegraph visible=\"$INCLUDE_GRAPH\"/>\n"
-" <includedbygraph visible=\"$INCLUDED_BY_GRAPH\"/>\n"
-" <sourcelink visible=\"yes\"/>\n"
-" <memberdecl>\n"
-" <classes visible=\"yes\" title=\"\"/>\n"
-" <namespaces visible=\"yes\" title=\"\"/>\n"
-" <constantgroups visible=\"yes\" title=\"\"/>\n"
-" <defines title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <membergroups visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" <memberdef>\n"
-" <inlineclasses title=\"\"/>\n"
-" <defines title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" </memberdef>\n"
-" <authorsection/>\n"
-" </file>\n"
-"\n"
-" <!-- Layout definition for a group page -->\n"
-" <group>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <groupgraph visible=\"$GROUP_GRAPHS\"/>\n"
-" <memberdecl>\n"
-" <nestedgroups visible=\"yes\" title=\"\"/>\n"
-" <dirs visible=\"yes\" title=\"\"/>\n"
-" <files visible=\"yes\" title=\"\"/>\n"
-" <namespaces visible=\"yes\" title=\"\"/>\n"
-" <classes visible=\"yes\" title=\"\"/>\n"
-" <defines title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <enumvalues title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <signals title=\"\"/>\n"
-" <publicslots title=\"\"/>\n"
-" <protectedslots title=\"\"/>\n"
-" <privateslots title=\"\"/>\n"
-" <events title=\"\"/>\n"
-" <properties title=\"\"/>\n"
-" <friends title=\"\"/>\n"
-" <membergroups visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" <memberdef>\n"
-" <pagedocs/>\n"
-" <inlineclasses title=\"\"/>\n"
-" <defines title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <enumvalues title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <signals title=\"\"/>\n"
-" <publicslots title=\"\"/>\n"
-" <protectedslots title=\"\"/>\n"
-" <privateslots title=\"\"/>\n"
-" <events title=\"\"/>\n"
-" <properties title=\"\"/>\n"
-" <friends title=\"\"/>\n"
-" </memberdef>\n"
-" <authorsection visible=\"yes\"/>\n"
-" </group>\n"
-"\n"
-" <!-- Layout definition for a directory page -->\n"
-" <directory>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <directorygraph visible=\"yes\"/>\n"
-" <memberdecl>\n"
-" <dirs visible=\"yes\"/>\n"
-" <files visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" </directory>\n"
-"</doxygenlayout>\n"
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 703b885..39df3cd 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -98,6 +98,7 @@ HEADERS = arguments.h \
qhp.h \
qhpxmlwriter.h \
reflist.h \
+ resourcemgr.h \
rtfdocvisitor.h \
rtfgen.h \
rtfstyle.h \
@@ -188,6 +189,7 @@ SOURCES = arguments.cpp \
qhp.cpp \
qhpxmlwriter.cpp \
reflist.cpp \
+ resourcemgr.cpp \
rtfdocvisitor.cpp \
rtfgen.cpp \
rtfstyle.cpp \
@@ -220,7 +222,8 @@ SOURCES = arguments.cpp \
../generated_src/doxygen/tclscanner.cpp \
../generated_src/doxygen/fortrancode.cpp \
../generated_src/doxygen/fortranscanner.cpp \
- ../generated_src/doxygen/version.cpp
+ ../generated_src/doxygen/version.cpp \
+ ../generated_src/doxygen/resources.cpp
@@ -230,7 +233,8 @@ win32-g++:TMAKE_CXXFLAGS += -fno-exceptions
linux-g++:TMAKE_CXXFLAGS += -fno-exceptions
INCLUDEPATH += ../generated_src/doxygen ../src ../qtools ../libmd5 ../vhdlparser
INCLUDEPATH += %%SQLITE3_INC%%
-DEPENDPATH += ../generated_src/doxygen
+INCLUDEPATH += %%LIBCLANG_INC%%
+DEPENDPATH += ../generated_src/doxygen ../qtools ../libmd5 ../vhdlparser
win32:INCLUDEPATH += .
DESTDIR = ../lib
TARGET = doxygen
diff --git a/src/libdoxygen.t.in b/src/libdoxygen.t.in
index 314e94c..1d242d0 100644
--- a/src/libdoxygen.t.in
+++ b/src/libdoxygen.t.in
@@ -111,98 +111,16 @@ sub GenerateLex {
$(YACC) -l -d -p ce_parsexpYY constexp.y -o \$(GENERATED_SRC)/ce_parse.c
-rm $(GENERATED_SRC)/ce_parse.c
-
-
-TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
-
#$ GenerateDep("layout.cpp","\$(GENERATED_SRC)/layout_default.xml.h");
-#$ GenerateDep("cite.cpp","\$(GENERATED_SRC)/doxygen.bst.h","\$(GENERATED_SRC)/bib2xhtml.pl.h");
-
-#$ GenerateDep("ftvhelp.cpp","\$(GENERATED_SRC)/navtree.js.h","\$(GENERATED_SRC)/resize.js.h","\$(GENERATED_SRC)/navtree.css.h");
-
-#$ GenerateDep("htmlgen.cpp","\$(GENERATED_SRC)/header.html.h","\$(GENERATED_SRC)/footer.html.h","\$(GENERATED_SRC)/doxygen.css.h","\$(GENERATED_SRC)/search_functions.php.h","\$(GENERATED_SRC)/search_opensearch.php.h","\$(GENERATED_SRC)/search.css.h","\$(GENERATED_SRC)/jquery_p1.js.h","\$(GENERATED_SRC)/jquery_p2.js.h","\$(GENERATED_SRC)/jquery_p3.js.h","\$(GENERATED_SRC)/jquery_ui.js.h","\$(GENERATED_SRC)/jquery_fx.js.h","\$(GENERATED_SRC)/jquery_pt.js.h","\$(GENERATED_SRC)/svgpan.js.h","\$(GENERATED_SRC)/dynsections.js.h","\$(GENERATED_SRC)/extsearch.js.h");
-
-#$ GenerateDep("xmlgen.cpp","\$(GENERATED_SRC)/index.xsd.h","\$(GENERATED_SRC)/compound.xsd.h");
-
-#$ GenerateDep("latexgen.cpp","\$(GENERATED_SRC)/doxygen.sty.h");
-
-#$ GenerateDep("searchindex.cpp","\$(GENERATED_SRC)/search.js.h");
-
-$(GENERATED_SRC)/index.xsd.h: index.xsd
- $(TO_C_CMD)
+$(GENERATED_SRC)/version.cpp: ../configure
+ $(PYTHON) version.py $(GENERATED_SRC)
-$(GENERATED_SRC)/compound.xsd.h: compound.xsd
- $(TO_C_CMD)
+TO_C_CMD=$(PYTHON) to_c_cmd.py < $< > $@
$(GENERATED_SRC)/layout_default.xml.h: layout_default.xml
$(TO_C_CMD)
-$(GENERATED_SRC)/header.html.h: header.html
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/footer.html.h: footer.html
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/search_functions.php.h: search_functions.php
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/search_opensearch.php.h: search_opensearch.php
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/search.js.h: search.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/search.css.h: search.css
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/extsearch.js.h: extsearch.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.css.h: doxygen.css
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.sty.h: doxygen.sty
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/navtree.js.h: navtree.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/resize.js.h: resize.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p1.js.h: jquery_p1.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p2.js.h: jquery_p2.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_p3.js.h: jquery_p3.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_ui.js.h: jquery_ui.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_fx.js.h: jquery_fx.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/jquery_pt.js.h: jquery_pt.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/navtree.css.h: navtree.css
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/svgpan.js.h: svgpan.js
- $(TO_C_CMD)
+../generated_src/doxygen/resources.cpp: res2cc_cmd.py $(wildcard ../templates/html/*) $(wildcard ../templates/xml) $(wildcard ../templates/latex)
+ $(PYTHON) res2cc_cmd.py ../templates ../generated_src/doxygen/resources.cpp
-$(GENERATED_SRC)/dynsections.js.h: dynsections.js
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/doxygen.bst.h: doxygen.bst
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/bib2xhtml.pl.h: bib2xhtml.pl
- $(TO_C_CMD)
-
-$(GENERATED_SRC)/version.cpp: ../configure
- $(PYTHON) version.py $(GENERATED_SRC)
diff --git a/src/lodepng.cpp b/src/lodepng.cpp
index 46011a8..084f1c8 100644
--- a/src/lodepng.cpp
+++ b/src/lodepng.cpp
@@ -1406,7 +1406,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t
for(i = 0; i < numcodes; i++) uivector_push_back(&lldll, HuffmanTree_getLength(&codes, (unsigned)i));
for(i = 0; i < numcodesD; i++) uivector_push_back(&lldll, HuffmanTree_getLength(&codesD, (unsigned)i));
- /*make lldl smaller by using repeat codes 16 (copy length 3-6 times), 17 (3-10 zeroes), 18 (11-138 zeroes)*/
+ /*make lldl smaller by using repeat codes 16 (copy length 3-6 times), 17 (3-10 zeros), 18 (11-138 zeros)*/
for(i = 0; i < (unsigned)lldll.size; i++)
{
unsigned j = 0;
@@ -2547,7 +2547,7 @@ unsigned LodePNG_convert(unsigned char* out, const unsigned char* in, LodePNG_In
return 0;
}
-/*Paeth predicter, used by PNG filter type 4*/
+/*Path predictor, used by PNG filter type 4*/
static int paethPredictor(int a, int b, int c)
{
int p = a + b - c;
@@ -2795,7 +2795,7 @@ static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, cons
{
/*
This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. Steps:
- *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)
+ *) if no Adam7: 1) unfilter 2) remove padding bits (= possible extra bits per scanline if bpp < 8)
*) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace
NOTE: the in buffer will be overwritten with intermediate data!
*/
@@ -3763,7 +3763,7 @@ static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const
{
/*
This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:
- *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter
+ *) if no Adam7: 1) add padding bits (= possible extra bits per scanline if bpp < 8) 2) filter
*) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter
*/
unsigned bpp = LodePNG_InfoColor_getBpp(&infoPng->color);
@@ -3791,7 +3791,7 @@ static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const
}
ucvector_cleanup(&padded);
}
- else error = filter(*out, in, w, h, &infoPng->color); /*we can immediatly filter into the out buffer, no other steps needed*/
+ else error = filter(*out, in, w, h, &infoPng->color); /*we can immediately filter into the out buffer, no other steps needed*/
}
}
else /*interlaceMethod is 1 (Adam7)*/
diff --git a/src/markdown.cpp b/src/markdown.cpp
index 12d72ff..fdf1b0f 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -2374,8 +2374,8 @@ void MarkdownFileParser::parseInput(const char *fileName,
bool markdownEnabled = Doxygen::markdownSupport;
Doxygen::markdownSupport = TRUE;
- bool needsEntry;
- Protection prot;
+ bool needsEntry = FALSE;
+ Protection prot=Public;
while (parseCommentBlock(
this,
current,
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 66814a6..72f3e3c 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -118,8 +118,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
// ol.endMemberDoc(hasArgs=FALSE);
//
-static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
- const QCString & /*scopeName*/,MemberDef *md)
+static bool writeDefArgumentList(OutputList &ol,Definition *scope,MemberDef *md)
{
ArgumentList *defArgList=(md->isDocsForDefinition()) ?
md->argumentList() : md->declArgumentList();
@@ -182,9 +181,9 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
//printf("===> name=%s isDefine=%d\n",md->name().data(),md->isDefine());
QCString cName;
- if (cd)
+ if (scope)
{
- cName=cd->name();
+ cName=scope->name();
int il=cName.find('<');
int ir=cName.findRev('>');
if (il!=-1 && ir!=-1 && ir>il)
@@ -192,9 +191,9 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
cName=cName.mid(il,ir-il+1);
//printf("1. cName=%s\n",cName.data());
}
- else if (cd->templateArguments())
+ else if (scope->definitionType()==Definition::TypeClass && ((ClassDef*)scope)->templateArguments())
{
- cName=tempArgListToString(cd->templateArguments(),cd->getLanguage());
+ cName=tempArgListToString(((ClassDef*)scope)->templateArguments(),scope->getLanguage());
//printf("2. cName=%s\n",cName.data());
}
else // no template specifier
@@ -238,8 +237,8 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
QCString n=a->type.left(vp);
if (hasFuncPtrType) n=a->type.left(wp);
if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
- if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
- linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,n);
+ if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
+ linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),md,n);
}
else // non-function pointer type
{
@@ -247,8 +246,8 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
if (a->type!="...")
{
- if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
- linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,n);
+ if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
+ linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),md,n);
}
}
if (!isDefine)
@@ -292,17 +291,17 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
if (hasFuncPtrType) // write the part of the argument type
// that comes after the name
{
- linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),
+ linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),
md,a->type.right(a->type.length()-vp));
}
if (!a->defval.isEmpty()) // write the default value
{
QCString n=a->defval;
- if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
+ if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
ol.docify(" = ");
ol.startTypewriter();
- linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,n,FALSE,TRUE,TRUE);
+ linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),md,n,FALSE,TRUE,TRUE);
ol.endTypewriter();
}
@@ -361,7 +360,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
if (!defArgList->trailingReturnType.isEmpty())
{
linkifyText(TextGeneratorOLImpl(ol), // out
- cd, // scope
+ scope, // scope
md->getBodyDef(), // fileScope
md, // self
defArgList->trailingReturnType, // text
@@ -738,7 +737,7 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
const char *t,const char *na,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,MemberType mt,
const ArgumentList *tal,const ArgumentList *al
- ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na))
+ ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na)), visited(FALSE)
{
//printf("MemberDef::MemberDef(%s)\n",na);
m_impl = new MemberDefImpl;
@@ -748,7 +747,7 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
m_isDestructorCached = 0;
}
-MemberDef::MemberDef(const MemberDef &md) : Definition(md)
+MemberDef::MemberDef(const MemberDef &md) : Definition(md), visited(FALSE)
{
m_impl = new MemberDefImpl;
m_isLinkableCached = 0;
@@ -2649,6 +2648,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.startMemberDoc(ciname,name(),memAnchor,title,showInline);
ClassDef *cd=getClassDef();
+ NamespaceDef *nd=getNamespaceDef();
if (!Config_getBool("HIDE_SCOPE_NAMES"))
{
bool first=TRUE;
@@ -2759,7 +2759,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
this,
substitute(ldef,"::",sep)
);
- hasParameterList=writeDefArgumentList(ol,cd,scopeName,this);
+ Definition *scope = cd;
+ if (scope==0) scope = nd;
+ hasParameterList=writeDefArgumentList(ol,scope,this);
}
if (hasOneLineInitializer()) // add initializer
@@ -3210,9 +3212,9 @@ void MemberDef::warnIfUndocumented()
static bool extractAll = Config_getBool("EXTRACT_ALL");
//printf("warnIfUndoc: d->isLinkable()=%d isLinkable()=%d "
- // "isDocumentedFriendClass()=%d name()=%s prot=%d\n",
+ // "isDocumentedFriendClass()=%d name()=%s prot=%d isReference=%d\n",
// d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
- // name().data(),prot);
+ // name().data(),m_impl->prot,isReference());
if ((!hasUserDocumentation() && !extractAll) &&
!isFriendClass() &&
name().find('@')==-1 && d && d->name().find('@')==-1 &&
@@ -3507,7 +3509,7 @@ void MemberDef::addListReference(Definition *)
addRefItem(xrefItems,
qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
memLabel,
- getOutputFileBase()+"#"+anchor(),memName,memArgs);
+ getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
}
}
@@ -5092,3 +5094,9 @@ bool MemberDef::isRelatedOrFriend() const
return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
}
+bool MemberDef::isReference() const
+{
+ return Definition::isReference() ||
+ (m_impl->templateMaster && m_impl->templateMaster->isReference());
+}
+
diff --git a/src/memberdef.h b/src/memberdef.h
index a669d68..b68149f 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -263,6 +263,7 @@ class MemberDef : public Definition
QCString documentation() const;
QCString briefDescription(bool abbr=FALSE) const;
QCString fieldType() const;
+ bool isReference() const;
//-----------------------------------------------------------------------------------
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 51eb4a1..aa0a36e 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -326,7 +326,7 @@ void MemberGroup::addListReferences(Definition *def)
name,
theTranslator->trGroup(TRUE,TRUE),
name,
- grpHeader,0);
+ grpHeader,0,def);
}
}
diff --git a/src/membergroup.h b/src/membergroup.h
index e3f6c0f..daf8ccb 100644
--- a/src/membergroup.h
+++ b/src/membergroup.h
@@ -63,7 +63,7 @@ class MemberGroup
MemberListType lt,
ClassDef *inheritedFrom,const QCString &inheritId);
- QCString documentation() const { return doc; }
+ const QCString &documentation() const { return doc; }
bool allMembersInSameSection() const { return inSameSection; }
void addToDeclarationSection();
int countDecMembers(GroupDef *gd=0);
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 68b3bcb..95726a0 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -33,16 +33,35 @@
#include "config.h"
#include "docparser.h"
-MemberList::MemberList()
+MemberList::MemberList() : m_listType(MemberListType_pubMethods)
{
memberGroupList=0;
+ m_varCnt=0;
+ m_funcCnt=0;
+ m_enumCnt=0;
+ m_enumValCnt=0;
+ m_typeCnt=0;
+ m_protoCnt=0;
+ m_defCnt=0;
+ m_friendCnt=0;
m_numDecMembers=-1; // special value indicating that value needs to be computed
m_numDocMembers=-1; // special value indicating that value needs to be computed
+ m_inGroup=FALSE;
+ m_inFile=FALSE;
+ m_needsSorting=FALSE;
}
MemberList::MemberList(MemberListType lt) : m_listType(lt)
{
memberGroupList=0;
+ m_varCnt=0;
+ m_funcCnt=0;
+ m_enumCnt=0;
+ m_enumValCnt=0;
+ m_typeCnt=0;
+ m_protoCnt=0;
+ m_defCnt=0;
+ m_friendCnt=0;
m_numDecMembers=-1; // special value indicating that value needs to be computed
m_numDocMembers=-1; // special value indicating that value needs to be computed
m_inGroup=FALSE;
diff --git a/src/message.cpp b/src/message.cpp
index 11b4502..4156720 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -152,15 +152,16 @@ static void format_warn(const char *file,int line,const char *text)
static void do_warn(const char *tag, const char *file, int line, const char *prefix, const char *fmt, va_list args)
{
if (!Config_getBool(tag)) return; // warning type disabled
- char text[40960];
+ const int bufSize = 40960;
+ char text[bufSize];
int l=0;
if (prefix)
{
- strcpy(text,prefix);
+ qstrncpy(text,prefix,bufSize);
l=strlen(prefix);
}
- vsnprintf(text+l, 40960-l, fmt, args);
- text[40960-1]='\0';
+ vsnprintf(text+l, bufSize-l, fmt, args);
+ text[bufSize-1]='\0';
format_warn(file,line,text);
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 8580a2e..f7c8123 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -832,7 +832,8 @@ void NamespaceDef::addListReferences()
theTranslator->trModule(TRUE,TRUE) :
theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),displayName(),
- 0
+ 0,
+ this
);
}
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
@@ -1087,7 +1088,7 @@ MemberList *NamespaceDef::getMemberList(MemberListType lt) const
void NamespaceDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0,DefinitionIntf::TypeNamespace);
+ if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0);
}
void NamespaceDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
diff --git a/src/parserintf.h b/src/parserintf.h
index 019b4a9..989fdcf 100644
--- a/src/parserintf.h
+++ b/src/parserintf.h
@@ -147,6 +147,10 @@ class ParserManager
*/
ParserManager()
: m_defaultParser(0) { m_parsers.setAutoDelete(TRUE); }
+ ~ParserManager()
+ {
+ delete m_defaultParser;
+ }
void registerDefaultParser(ParserInterface *parser)
{
diff --git a/src/plantuml.cpp b/src/plantuml.cpp
index 5e5bd98..87e70e1 100644
--- a/src/plantuml.cpp
+++ b/src/plantuml.cpp
@@ -116,7 +116,7 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",baseName,baseName);
portable_sysTimerStart();
- if (exitCode=portable_system("epstopdf",epstopdfArgs)!=0)
+ if ((exitCode=portable_system("epstopdf",epstopdfArgs))!=0)
{
err("Problems running epstopdf. Check your TeX installation! Exit code: %d\n",exitCode);
}
diff --git a/src/pre.l b/src/pre.l
index ebc6cf8..9e88b0d 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -71,8 +71,8 @@ struct CondCtx
struct FileState
{
- FileState(int size) : fileBuf(size),
- oldFileBuf(0), oldFileBufPos(0) {}
+ FileState(int size) : lineNr(1), fileBuf(size),
+ oldFileBuf(0), oldFileBufPos(0), bufState(0) {}
int lineNr;
BufStr fileBuf;
BufStr *oldFileBuf;
@@ -2299,7 +2299,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<DefName>{ID}{B}+"1"/[ \r\t\n] { // special case: define with 1 -> can be "guard"
//printf("Define `%s'\n",yytext);
- g_argDict = 0;
+ delete g_argDict; g_argDict=0;
g_defArgs = -1;
g_defArgsStr.resize(0);
g_defName = yytext;
@@ -2328,7 +2328,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_expectGuard=FALSE;
}
<DefName>{ID}/{B}*"\n" { // empty define
- g_argDict = 0;
+ delete g_argDict; g_argDict=0;
g_defArgs = -1;
g_defName = yytext;
g_defArgsStr.resize(0);
@@ -2357,7 +2357,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<DefName>{ID}/{B}* { // define with content
//printf("Define `%s'\n",yytext);
- g_argDict = 0;
+ delete g_argDict; g_argDict=0;
g_defArgs = -1;
g_defArgsStr.resize(0);
g_defText.resize(0);
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 1d384b1..43b6bde 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -483,7 +483,7 @@ class PrintDocVisitor : public DocVisitor
case DocImage::Rtf: printf("rtf"); break;
case DocImage::DocBook: printf("docbook"); break;
}
- printf("\" width=%s height=%s>\n",img->width().data(),img->height().data());
+ printf("\" %s %s>\n",img->width().data(),img->height().data());
}
void visitPost(DocImage *)
{
diff --git a/src/pyscanner.l b/src/pyscanner.l
index c67875e..1ac7b7a 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -938,6 +938,7 @@ STARTDOCSYMS "##"
}
")" { // end of parameter list
+ current->args = argListToString(current->argList);
}
":"{B} {
@@ -1268,6 +1269,19 @@ STARTDOCSYMS "##"
BEGIN(VariableEnd);
}
}
+ {TRIDOUBLEQUOTE} { // start of a comment block
+ g_specialBlock = FALSE;
+ current->program+=yytext;
+ initTriDoubleQuoteBlock();
+ BEGIN(TripleComment);
+ }
+
+ {TRISINGLEQUOTE} { // start of a comment block
+ g_specialBlock = FALSE;
+ current->program+=yytext;
+ initTriSingleQuoteBlock();
+ BEGIN(TripleComment);
+ }
"\"" {
g_stringContext=YY_START;
current->initializer+="\"";
diff --git a/src/reflist.cpp b/src/reflist.cpp
index ee6ac91..3cc7694 100644
--- a/src/reflist.cpp
+++ b/src/reflist.cpp
@@ -20,6 +20,7 @@
#include "reflist.h"
#include "util.h"
#include "ftextstream.h"
+#include "definition.h"
/*! Create a list of items that are cross referenced with documentation blocks
* @param listName String representing the name of the list.
@@ -144,6 +145,12 @@ void RefList::generatePage()
doc += "\\anchor ";
doc += item->listAnchor;
doc += "\n";
+ if (item->scope)
+ {
+ doc += "\\_setscope ";
+ doc += item->scope->name();
+ doc += " ";
+ }
doc += item->prefix;
doc += " \\_internalref ";
doc += item->name;
@@ -166,6 +173,7 @@ void RefList::generatePage()
doc += "</dd>";
}
doc += "</dl>\n";
+ //printf("generatePage('%s')\n",doc.data());
addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0);
}
diff --git a/src/reflist.h b/src/reflist.h
index 97b1420..5b647ea 100644
--- a/src/reflist.h
+++ b/src/reflist.h
@@ -23,14 +23,17 @@
#include <qlist.h>
#include "sortdict.h"
+class Definition;
+
/** This struct represents an item in the list of references. */
struct RefItem
{
- RefItem() /*: written(FALSE)*/ {}
+ RefItem() : scope(0) {}
QCString text; //!< text of the item.
QCString listAnchor; //!< anchor in the list
QCString prefix; //!< type prefix for the name
+ Definition *scope; //!< scope to use for references.
QCString name; //!< name of the entity containing the reference
QCString title; //!< display name of the entity
QCString args; //!< optional arguments for the entity (if function)
diff --git a/src/res2cc_cmd.py b/src/res2cc_cmd.py
new file mode 100755
index 0000000..772ac84
--- /dev/null
+++ b/src/res2cc_cmd.py
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+# Script that compiles a set of resources into a single C++ source file. The C++ file
+# offers an initResources() function, which registers the resources with the resource
+# manager (class ResourceMgr)
+#
+# Copyright (C) 1997-2014 by Dimitri van Heesch.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation under the terms of the GNU General Public License is hereby
+# granted. No representations are made about the suitability of this software
+# for any purpose. It is provided "as is" without express or implied warranty.
+# See the GNU General Public License for more details.
+#
+# Documents produced by Doxygen are derivative works derived from the
+# input used in their production; they are not affected by this license.
+#
+from __future__ import print_function
+from os import listdir, stat, walk
+from os.path import isfile, join, splitext
+import sys
+
+class File(object):
+ def __init__(self,directory,subdir,fileName,mode):
+ self.directory = directory
+ self.subdir = subdir
+ self.fileName = fileName
+ filePath = join(directory,subdir,fileName)
+ self.fileSize = stat(filePath).st_size
+ self.bareName = fileName.replace('.','_')
+ self.inputFile = open(filePath,mode)
+
+ def formatByte(self,byte):
+ if isinstance(byte,int):
+ return "%02x" % byte
+ else:
+ return format(ord(byte),'02x')
+
+ def writeBytes(self,data,outputFile):
+ bytes_per_line=16
+ print("static const unsigned char %s_data[] = " % self.bareName,file=outputFile)
+ print("{",file=outputFile)
+ lines = [data[x:x+bytes_per_line] for x in range(0,len(data),bytes_per_line)]
+ linesAsString = ',\n '.join([', '.join(['0x'+self.formatByte(byte) for byte in line]) for line in lines])
+ print(' %s' % linesAsString,file=outputFile)
+ print("};",file=outputFile)
+ print("const int %s_len = %d;\n" % (self.bareName,len(data)),file=outputFile)
+
+ def convertToBytes(self,outputFile):
+ lines = [x for x in self.inputFile.readlines() if not x.startswith('#')]
+ w,h = (int(x) for x in lines[0].split())
+ data = "".join(map(chr,[int(w>>8),int(w&0xFF),int(h>>8),int(h&0xFF)]+
+ [int(x) for line in lines[1:] for x in line.split()]))
+ self.writeBytes(data,outputFile)
+
+ @staticmethod
+ def factory(directory,subdir,fname):
+ ext = splitext(fname)[1]
+ if ext=='.lum': return LumFile(directory,subdir,fname)
+ if ext=='.luma': return LumaFile(directory,subdir,fname)
+ if ext=='.css': return CSSFile(directory,subdir,fname)
+ return VerbatimFile(directory,subdir,fname)
+
+class VerbatimFile(File):
+ def __init__(self,directory,subdir,fileName):
+ File.__init__(self,directory,subdir,fileName,"rb")
+ def writeContents(self,outputFile):
+ self.writeBytes(self.inputFile.read(),outputFile)
+ def writeDirEntry(self,outputFile):
+ print(" { \"%s\", \"%s\", %s_data, %s_len, Resource::Verbatim }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class CSSFile(File):
+ def __init__(self,directory,subdir,fileName):
+ File.__init__(self,directory,subdir,fileName,"r")
+ def writeContents(self,outputFile):
+ self.writeBytes(self.inputFile.read(),outputFile)
+ def writeDirEntry(self,outputFile):
+ print(" { \"%s\", \"%s\", %s_data, %s_len, Resource::CSS }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class LumFile(File):
+ def __init__(self,directory,subdir,fileName):
+ File.__init__(self,directory,subdir,fileName,"r")
+ def writeContents(self,outputFile):
+ self.convertToBytes(outputFile)
+ def writeDirEntry(self,outputFile):
+ print(" { \"%s\", \"%s\", %s_data, %s_len, Resource::Luminance }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+class LumaFile(File):
+ def __init__(self,directory,subdir,fileName):
+ File.__init__(self,directory,subdir,fileName,"r")
+ def writeContents(self,outputFile):
+ self.convertToBytes(outputFile)
+ def writeDirEntry(self,outputFile):
+ print(" { \"%s\", \"%s\", %s_data, %s_len, Resource::LumAlpha }," % (self.subdir,self.fileName,self.bareName,self.bareName), file=outputFile)
+
+def main():
+ if len(sys.argv)<3:
+ sys.exit('Usage: %s directory output_file.cpp' % sys.argv[0])
+ directory = sys.argv[1]
+ files = []
+ for dirName, subdirList, fileList in walk(directory):
+ for fname in sorted(fileList):
+ subdir = dirName[len(directory)+1:] if dirName.startswith(directory) else dirName
+ if subdir:
+ files.append(File.factory(directory,subdir,fname))
+ outputFile = open(sys.argv[2],"w")
+ print("#include \"resourcemgr.h\"\n",file=outputFile)
+ for f in files:
+ f.writeContents(outputFile)
+ print("static Resource resourceDir[] =",file=outputFile)
+ print("{",file=outputFile)
+ for f in files:
+ f.writeDirEntry(outputFile)
+ print("};",file=outputFile)
+ print("static int resourceDir_len = %s;" % len(files), file=outputFile)
+ print("void initResources() { ResourceMgr::instance().registerResources(resourceDir,resourceDir_len); }",file=outputFile)
+
+if __name__ == '__main__':
+ main()
diff --git a/src/resize_js.h b/src/resize_js.h
deleted file mode 100644
index 160b16c..0000000
--- a/src/resize_js.h
+++ /dev/null
@@ -1,93 +0,0 @@
-"var cookie_namespace = 'doxygen'; \n"
-"var sidenav,navtree,content,header;\n"
-"\n"
-"function readCookie(cookie) \n"
-"{\n"
-" var myCookie = cookie_namespace+\"_\"+cookie+\"=\";\n"
-" if (document.cookie) \n"
-" {\n"
-" var index = document.cookie.indexOf(myCookie);\n"
-" if (index != -1) \n"
-" {\n"
-" var valStart = index + myCookie.length;\n"
-" var valEnd = document.cookie.indexOf(\";\", valStart);\n"
-" if (valEnd == -1) \n"
-" {\n"
-" valEnd = document.cookie.length;\n"
-" }\n"
-" var val = document.cookie.substring(valStart, valEnd);\n"
-" return val;\n"
-" }\n"
-" }\n"
-" return 0;\n"
-"}\n"
-"\n"
-"function writeCookie(cookie, val, expiration) \n"
-"{\n"
-" if (val==undefined) return;\n"
-" if (expiration == null) \n"
-" {\n"
-" var date = new Date();\n"
-" date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week\n"
-" expiration = date.toGMTString();\n"
-" }\n"
-" document.cookie = cookie_namespace + \"_\" + cookie + \"=\" + val + \"; expires=\" + expiration+\"; path=/\";\n"
-"}\n"
-" \n"
-"function resizeWidth() \n"
-"{\n"
-" var windowWidth = $(window).width() + \"px\";\n"
-" var sidenavWidth = $(sidenav).outerWidth();\n"
-" content.css({marginLeft:parseInt(sidenavWidth)+\"px\"}); \n"
-" writeCookie('width',sidenavWidth, null);\n"
-"}\n"
-"\n"
-"function restoreWidth(navWidth)\n"
-"{\n"
-" var windowWidth = $(window).width() + \"px\";\n"
-" content.css({marginLeft:parseInt(navWidth)+6+\"px\"});\n"
-" sidenav.css({width:navWidth + \"px\"});\n"
-"}\n"
-"\n"
-"function resizeHeight() \n"
-"{\n"
-" var headerHeight = header.outerHeight();\n"
-" var footerHeight = footer.outerHeight();\n"
-" var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
-" content.css({height:windowHeight + \"px\"});\n"
-" navtree.css({height:windowHeight + \"px\"});\n"
-" sidenav.css({height:windowHeight + \"px\",top: headerHeight+\"px\"});\n"
-"}\n"
-"\n"
-"function initResizable()\n"
-"{\n"
-" header = $(\"#top\");\n"
-" sidenav = $(\"#side-nav\");\n"
-" content = $(\"#doc-content\");\n"
-" navtree = $(\"#nav-tree\");\n"
-" footer = $(\"#nav-path\");\n"
-" $(\".side-nav-resizable\").resizable({resize: function(e, ui) { resizeWidth(); } });\n"
-" $(window).resize(function() { resizeHeight(); });\n"
-" var width = readCookie('width');\n"
-" if (width) { restoreWidth(width); } else { resizeWidth(); }\n"
-" resizeHeight();\n"
-" var url = location.href;\n"
-" var i=url.indexOf(\"#\");\n"
-" if (i>=0) window.location.hash=url.substr(i);\n"
-" var _preventDefault = function(evt) { evt.preventDefault(); };\n"
-" $(\"#splitbar\").bind(\"dragstart\", _preventDefault).bind(\"selectstart\", _preventDefault);\n"
-" $(document).bind('touchmove',function(e){\n"
-" try {\n"
-" var target = e.target;\n"
-" while (target) {\n"
-" if ($(target).css('-webkit-overflow-scrolling')=='touch') return;\n"
-" target = target.parentNode;\n"
-" }\n"
-" e.preventDefault();\n"
-" } catch(err) {\n"
-" e.preventDefault();\n"
-" }\n"
-" });\n"
-"}\n"
-"\n"
-"\n"
diff --git a/src/resourcemgr.cpp b/src/resourcemgr.cpp
new file mode 100644
index 0000000..a15a702
--- /dev/null
+++ b/src/resourcemgr.cpp
@@ -0,0 +1,183 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2014 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+#include <qdict.h>
+#include <qfile.h>
+#include <qcstring.h>
+#include <qglobal.h>
+#include <string.h>
+
+#include "resourcemgr.h"
+#include "util.h"
+#include "version.h"
+#include "ftextstream.h"
+#include "message.h"
+#include "config.h"
+
+class ResourceMgr::Private
+{
+ public:
+ Private() : resources(257) {}
+ QDict<Resource> resources;
+};
+
+ResourceMgr &ResourceMgr::instance()
+{
+ static ResourceMgr theInstance;
+ return theInstance;
+}
+
+ResourceMgr::ResourceMgr()
+{
+ p = new Private;
+}
+
+ResourceMgr::~ResourceMgr()
+{
+ delete p;
+}
+
+void ResourceMgr::registerResources(const Resource resources[],int numResources)
+{
+ for (int i=0;i<numResources;i++)
+ {
+ p->resources.insert(resources[i].name,&resources[i]);
+ }
+}
+
+bool ResourceMgr::copyCategory(const char *categoryName,const char *targetDir) const
+{
+ QDictIterator<Resource> it(p->resources);
+ const Resource *res;
+ for (it.toFirst();(res=it.current());++it)
+ {
+ if (qstrcmp(res->category,categoryName)==0)
+ {
+ if (!copyResource(res->name,targetDir))
+ {
+ return FALSE;
+ }
+ }
+ }
+ return TRUE;
+}
+
+bool ResourceMgr::copyResourceAs(const char *name,const char *targetDir,const char *targetName) const
+{
+ QCString pathName = QCString(targetDir)+"/"+targetName;
+ const Resource *res = get(name);
+ if (res)
+ {
+ switch (res->type)
+ {
+ case Resource::Verbatim:
+ {
+ QFile f(pathName);
+ if (f.open(IO_WriteOnly) && f.writeBlock((const char *)res->data,res->size)==res->size)
+ {
+ return TRUE;
+ }
+ }
+ break;
+ case Resource::Luminance:
+ {
+ QCString n = name;
+ n = n.left(n.length()-4)+".png"; // replace .lum by .png
+ uchar *p = (uchar*)res->data;
+ int width = (p[0]<<8)+p[1];
+ int height = (p[2]<<8)+p[3];
+ ColoredImgDataItem images[2];
+ images[0].name = n;
+ images[0].width = width;
+ images[0].height = height;
+ images[0].content = &p[4];
+ images[0].alpha = 0;
+ images[1].name = 0; // terminator
+ writeColoredImgData(targetDir,images);
+ return TRUE;
+ }
+ break;
+ case Resource::LumAlpha:
+ {
+ QCString n = name;
+ n = n.left(n.length()-5)+".png"; // replace .luma by .png
+ uchar *p = (uchar*)res->data;
+ int width = (p[0]<<8)+p[1];
+ int height = (p[2]<<8)+p[3];
+ ColoredImgDataItem images[2];
+ images[0].name = n;
+ images[0].width = width;
+ images[0].height = height;
+ images[0].content = &p[4];
+ images[0].alpha = &p[4+width*height];
+ images[1].name = 0; // terminator
+ writeColoredImgData(targetDir,images);
+ return TRUE;
+ }
+ break;
+ case Resource::CSS:
+ {
+ QFile f(pathName);
+ if (f.open(IO_WriteOnly))
+ {
+ QCString buf(res->size+1);
+ memcpy(buf.data(),res->data,res->size);
+ FTextStream t(&f);
+ buf = replaceColorMarkers(buf);
+ if (qstrcmp(name,"navtree.css")==0)
+ {
+ t << substitute(buf,"$width",QCString().setNum(Config_getInt("TREEVIEW_WIDTH"))+"px");
+ }
+ else
+ {
+ t << substitute(buf,"$doxygenversion",versionString);
+ }
+ return TRUE;
+ }
+ }
+ break;
+ }
+ }
+ else
+ {
+ err("requested resource '%s' not compiled in!\n",name);
+ }
+ return FALSE;
+}
+
+bool ResourceMgr::copyResource(const char *name,const char *targetDir) const
+{
+ return copyResourceAs(name,targetDir,name);
+}
+
+const Resource *ResourceMgr::get(const char *name) const
+{
+ return p->resources.find(name);
+}
+
+QCString ResourceMgr::getAsString(const char *name) const
+{
+ const Resource *res = get(name);
+ if (res)
+ {
+ QCString result(res->size+1);
+ memcpy(result.data(),res->data,res->size);
+ return result;
+ }
+ else
+ {
+ return QCString();
+ }
+}
+
diff --git a/src/resourcemgr.h b/src/resourcemgr.h
new file mode 100644
index 0000000..6347e70
--- /dev/null
+++ b/src/resourcemgr.h
@@ -0,0 +1,63 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2014 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+#ifndef RESOURCEMGR_H
+#define RESOURCEMGR_H
+
+#include <qcstring.h>
+
+/** @brief Compiled resource */
+struct Resource
+{
+ enum Type { Verbatim, Luminance, LumAlpha, CSS };
+ const char *category;
+ const char *name;
+ const unsigned char *data;
+ int size;
+ Type type;
+};
+
+/** @brief Singleton for managing resources compiled into an executable */
+class ResourceMgr
+{
+ public:
+ /** Returns the one and only instance of this class */
+ static ResourceMgr &instance();
+
+ /** Registers an array of resources */
+ void registerResources(const Resource resources[],int numResources);
+
+ /** Copies all resource belonging to a given category to a given target directory */
+ bool copyCategory(const char *categoryName,const char *targetDir) const;
+
+ /** Copies a registered resource to a given target directory */
+ bool copyResource(const char *name,const char *targetDir) const;
+
+ /** Copies a registered resource to a given target directory under a given target name */
+ bool copyResourceAs(const char *name,const char *targetDir,const char *targetName) const;
+
+ /** Returns a pointer to the resource object with the given name. */
+ const Resource *get(const char *name) const;
+
+ /** Gets the resource data as a C string */
+ QCString getAsString(const char *name) const;
+
+ private:
+ ResourceMgr();
+ ~ResourceMgr();
+ class Private;
+ Private *p;
+};
+
+#endif
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index ccdadcf..354469b 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -66,6 +66,7 @@ RTFGenerator::RTFGenerator() : OutputGenerator()
m_bstartedBody = FALSE;
m_omitParagraph = FALSE;
m_numCols = 0;
+ m_prettyCode=Config_getBool("RTF_SOURCE_CODE");
}
RTFGenerator::~RTFGenerator()
@@ -539,6 +540,8 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
+
switch (is)
{
case isTitlePageStart:
@@ -810,6 +813,11 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << fd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+ if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
+ {
+ t << "\\par " << rtf_Style_Reset << endl;
+ t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"" << fd->getSourceFileBase() << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+ }
isFirst=FALSE;
}
else
@@ -819,6 +827,11 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << fd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+ if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
+ {
+ t << "\\par " << rtf_Style_Reset << endl;
+ t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"" << fd->getSourceFileBase() << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
+ }
}
}
}
@@ -2268,11 +2281,12 @@ bool isLeadBytes(int c)
// note: function is not reentrant!
-static void encodeForOutput(FTextStream &t,const QCString &s)
+static void encodeForOutput(FTextStream &t,const char *s)
{
+ if (s==0) return;
QCString encoding;
bool converted=FALSE;
- int l = s.length();
+ int l = qstrlen(s);
static QByteArray enc;
if (l*4>(int)enc.size()) enc.resize(l*4); // worst case
encoding.sprintf("CP%s",theTranslator->trRTFansicp().data());
@@ -2284,7 +2298,7 @@ static void encodeForOutput(FTextStream &t,const QCString &s)
{
size_t iLeft=l;
size_t oLeft=enc.size();
- char *inputPtr = s.data();
+ char *inputPtr = (char*)s;
char *outputPtr = enc.data();
if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
{
@@ -2296,7 +2310,7 @@ static void encodeForOutput(FTextStream &t,const QCString &s)
}
if (!converted) // if we did not convert anything, copy as is.
{
- memcpy(enc.data(),s.data(),l);
+ memcpy(enc.data(),s,l);
enc.resize(l);
}
uint i;
@@ -2355,7 +2369,7 @@ static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncl
err("read error in %s before end of RTF header!\n",infName.data());
return FALSE;
}
- if (bIncludeHeader) encodeForOutput(t,lineBuf);
+ if (bIncludeHeader) encodeForOutput(t,lineBuf.data());
} while (lineBuf.find("\\comment begin body")==-1);
diff --git a/src/rtfgen.h b/src/rtfgen.h
index 7b31673..2617ee6 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -126,7 +126,7 @@ class RTFGenerator : public OutputGenerator
void writeAnchor(const char *fileName,const char *name);
void startCodeFragment();
void endCodeFragment();
- void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
+ void writeLineNumber(const char *,const char *,const char *,int l) { t << QString("%1").arg(l,5) << " "; }
void startCodeLine(bool) { col=0; }
void endCodeLine() { lineBreak(); }
void startEmphasis() { t << "{\\i "; }
@@ -277,6 +277,7 @@ class RTFGenerator : public OutputGenerator
void incrementIndentLevel();
void decrementIndentLevel();
int col;
+ bool m_prettyCode;
bool m_bstartedBody; // has startbody been called yet?
int m_listLevel; // // RTF does not really have a addative indent...manually set list level.
diff --git a/src/rtfstyle.h b/src/rtfstyle.h
index 4f0a03f..ae7e456 100644
--- a/src/rtfstyle.h
+++ b/src/rtfstyle.h
@@ -65,7 +65,7 @@ struct StyleData
unsigned index; // index in style-sheet, i.e. number in s-clause
char* reference; // everything required to apply the style
- char* definition; // aditional tags like \snext and style name
+ char* definition; // additional tags like \snext and style name
StyleData(const char* reference, const char* definition);
~StyleData();
diff --git a/src/scanner.l b/src/scanner.l
index 716dc6a..d012b93 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -1228,7 +1228,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
{
lineCount();
lastSkipRoundContext = YY_START;
- roundCount=1;
+ roundCount=0;
BEGIN( SkipRound );
}
else if (qstrncmp(yytext,"@property",9)==0) // ObjC 2.0 property
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index 27674c2..22727fe 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -36,6 +36,7 @@
#include "memberdef.h"
#include "filename.h"
#include "membername.h"
+#include "resourcemgr.h"
// file format: (all multi-byte values are stored in big endian format)
// 4 byte header
@@ -583,9 +584,9 @@ void SearchIndexExternal::write(const char *fileName)
#include "doxygen.h"
#include "message.h"
-static const char search_script[]=
-#include "search.js.h"
-;
+//static const char search_script[]=
+//#include "search.js.h"
+//;
#define SEARCH_INDEX_ALL 0
#define SEARCH_INDEX_CLASSES 1
@@ -1265,15 +1266,10 @@ void writeJavascriptSearchIndex()
}
{
- QFile f(searchDirName+"/search.js");
+ QFile f(searchDirName+"/searchdata.js");
if (f.open(IO_WriteOnly))
{
FTextStream t(&f);
- t << "// Search script generated by doxygen" << endl;
- t << "// Copyright (C) 2009 by Dimitri van Heesch." << endl << endl;
- t << "// The code in this file is loosly based on main.js, part of Natural Docs," << endl;
- t << "// which is Copyright (C) 2003-2008 Greg Valure" << endl;
- t << "// Natural Docs is licensed under the GPL." << endl << endl;
t << "var indexSectionsWithContent =" << endl;
t << "{" << endl;
bool first=TRUE;
@@ -1314,8 +1310,25 @@ void writeJavascriptSearchIndex()
}
if (!first) t << "\n";
t << "};" << endl << endl;
- t << search_script;
+ t << "var indexSectionLabels =" << endl;
+ t << "{" << endl;
+ first=TRUE;
+ static SearchIndexCategoryMapping map;
+ j=0;
+ for (i=0;i<NUM_SEARCH_INDICES;i++)
+ {
+ if (g_searchIndexCount[i]>0)
+ {
+ if (!first) t << "," << endl;
+ t << " " << j << ": \"" << convertToXML(map.categoryLabel[i]) << "\"";
+ first=FALSE;
+ j++;
+ }
+ }
+ if (!first) t << "\n";
+ t << "};" << endl << endl;
}
+ ResourceMgr::instance().copyResource("search.js",searchDirName);
}
{
QFile f(searchDirName+"/nomatches.html");
@@ -1341,24 +1354,6 @@ void writeJavascriptSearchIndex()
Doxygen::indexList->addStyleSheetFile("search/search.js");
}
-void writeSearchCategories(FTextStream &t)
-{
- static SearchIndexCategoryMapping map;
- int i,j=0;
- for (i=0;i<NUM_SEARCH_INDICES;i++)
- {
- if (g_searchIndexCount[i]>0)
- {
- t << "<a class=\"SelectItem\" href=\"javascript:void(0)\" "
- << "onclick=\"searchBox.OnSelectItem(" << j << ")\">"
- << "<span class=\"SelectionMark\">&#160;</span>"
- << convertToXML(map.categoryLabel[i])
- << "</a>";
- j++;
- }
- }
-}
-
//---------------------------------------------------------------------------------------------
void initSearchIndexer()
diff --git a/src/searchindex.h b/src/searchindex.h
index 872c0d3..17d39a2 100644
--- a/src/searchindex.h
+++ b/src/searchindex.h
@@ -110,6 +110,5 @@ class SearchIndexExternal : public SearchIndexIntf
//------- client side search index ----------------------
void writeJavascriptSearchIndex();
-void writeSearchCategories(FTextStream &t);
#endif
diff --git a/src/store.cpp b/src/store.cpp
index 8916015..8d9a0cd 100644
--- a/src/store.cpp
+++ b/src/store.cpp
@@ -382,9 +382,9 @@ int Store::read(char *buf,uint size)
void Store::printFreeList()
{
printf("FreeList: ");
- portable_off_t pos = m_head->pos;
- while (pos)
+ while (m_head)
{
+ portable_off_t pos = m_head->pos;
printf("%x ",(int)pos);
m_head = m_head->next;
}
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 4b21047..be0472a 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -251,8 +251,20 @@ class TagFileParser : public QXmlDefaultHandler
{
m_startElementHandlers.setAutoDelete(TRUE);
m_endElementHandlers.setAutoDelete(TRUE);
+ m_curClass=0;
+ m_curFile=0;
+ m_curNamespace=0;
+ m_curPackage=0;
+ m_curGroup=0;
+ m_curPage=0;
+ m_curDir=0;
+ m_curMember=0;
+ m_curEnumValue=0;
+ m_curIncludes=0;
+ m_state = Invalid;
+ m_locator = 0;
}
-
+
void setDocumentLocator ( QXmlLocator * locator )
{
m_locator = locator;
diff --git a/src/tclscanner.l b/src/tclscanner.l
index 88e3d1d..f162637 100644
--- a/src/tclscanner.l
+++ b/src/tclscanner.l
@@ -2833,14 +2833,18 @@ tcl_inf("TCL_SUBST: use '%s'\n",s);
}
}
- if (tcl.input_string.at(tcl.input_string.length()-1) == '\n')
+ if (tcl.input_string.at(tcl.input_string.length()-1) == 0x1A)
+ {
+ }
+ else if (tcl.input_string.at(tcl.input_string.length()-1) == '\n')
{
tcl.input_string[tcl.input_string.length()-1] = 0x1A;
- }
- else
+ }
+ else
{
tcl.input_string += 0x1A;
}
+
tcl.code = NULL;
tcl.code_font=NULL;
tcl.code_line=1;
diff --git a/src/template.cpp b/src/template.cpp
index 942d833..9fa03aa 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -33,6 +33,7 @@
#include "ftextstream.h"
#include "message.h"
#include "util.h"
+#include "resourcemgr.h"
#define ENABLE_TRACING 0
@@ -115,7 +116,7 @@ static QCString replace(const char *s,char csrc,char cdst)
class TemplateVariant::Private
{
public:
- Private() : raw(FALSE) {}
+ Private(Type t) : type(t), intVal(0), boolVal(TRUE), strukt(0), list(0), raw(FALSE) {}
Type type;
int intVal;
QCString strVal;
@@ -128,60 +129,52 @@ class TemplateVariant::Private
TemplateVariant::TemplateVariant()
{
- p = new Private;
- p->type=None;
+ p = new Private(None);
}
TemplateVariant::TemplateVariant(bool b)
{
- p = new Private;
- p->type = Bool;
+ p = new Private(Bool);
p->boolVal = b;
}
TemplateVariant::TemplateVariant(int v)
{
- p = new Private;
- p->type = Integer;
+ p = new Private(Integer);
p->intVal = v;
}
TemplateVariant::TemplateVariant(const char *s,bool raw)
{
- p = new Private;
- p->type = String;
+ p = new Private(String);
p->strVal = s;
p->raw = raw;
}
TemplateVariant::TemplateVariant(const QCString &s,bool raw)
{
- p = new Private;
- p->type = String;
+ p = new Private(String);
p->strVal = s;
p->raw = raw;
}
TemplateVariant::TemplateVariant(TemplateStructIntf *s)
{
- p = new Private;
- p->type = Struct;
+ p = new Private(Struct);
p->strukt = s;
p->strukt->addRef();
}
TemplateVariant::TemplateVariant(TemplateListIntf *l)
{
- p = new Private;
- p->type = List;
+ p = new Private(List);
p->list = l;
p->list->addRef();
}
TemplateVariant::TemplateVariant(const TemplateVariant::Delegate &delegate)
{
- p = new Private;
- p->type = Function;
+ p = new Private(Function);
p->delegate = delegate;
}
@@ -194,8 +187,7 @@ TemplateVariant::~TemplateVariant()
TemplateVariant::TemplateVariant(const TemplateVariant &v)
{
- p = new Private;
- p->type = v.p->type;
+ p = new Private(v.p->type);
p->raw = v.p->raw;
switch (p->type)
{
@@ -1435,11 +1427,11 @@ class ExprAstVariable : public ExprAst
const QCString &name() const { return m_name; }
virtual TemplateVariant resolve(TemplateContext *c)
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
TemplateVariant v = c->get(m_name);
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
if (!v.isValid())
{
- ci->warn(ci->templateName(),ci->line(),"undefined variable '%s' in expression",m_name.data());
+ if (ci) ci->warn(ci->templateName(),ci->line(),"undefined variable '%s' in expression",m_name.data());
}
return v;
}
@@ -1486,6 +1478,7 @@ class ExprAstFilter : public ExprAst
TemplateVariant apply(const TemplateVariant &v,TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return v; // should not happen
TRACE(("Applying filter '%s' to '%s' (type=%d)\n",m_name.data(),v.toString().data(),v.type()));
TemplateVariant arg;
if (m_arg) arg = m_arg->resolve(c);
@@ -1577,6 +1570,7 @@ class ExprAstBinary : public ExprAst
virtual TemplateVariant resolve(TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return TemplateVariant(); // should not happen
TemplateVariant lhs = m_lhs->resolve(c);
TemplateVariant rhs = m_rhs ? m_rhs->resolve(c) : TemplateVariant();
switch(m_operator)
@@ -1982,10 +1976,21 @@ class ExpressionParser
ExprAst *parseLiteral()
{
TRACE(("{parseLiteral(%s)\n",m_curToken.id.data()));
- ExprAst *lit = new ExprAstLiteral(m_curToken.id);
+ ExprAst *expr = new ExprAstLiteral(m_curToken.id);
getNextToken();
+ if (expr)
+ {
+ while (m_curToken.type==ExprToken::Operator &&
+ m_curToken.op==Operator::Filter)
+ {
+ getNextToken();
+ ExprAstFilter *filter = parseFilter();
+ if (!filter) break;
+ expr = new ExprAstFilterAppl(expr,filter);
+ }
+ }
TRACE(("}parseLiteral()\n"));
- return lit;
+ return expr;
}
ExprAst *parseIdentifierOptionalArgs()
@@ -2060,6 +2065,11 @@ class ExpressionParser
if (p==0 || *p=='\0') return FALSE;
while (*p==' ') p++; // skip over spaces
char c=*p;
+ if (*p=='\0') // only spaces...
+ {
+ m_tokenStream = p;
+ return FALSE;
+ }
const char *q = p;
switch (c)
{
@@ -2238,7 +2248,7 @@ class ExpressionParser
char s[2];
s[0]=c;
s[1]=0;
- warn(m_parser->templateName(),m_line,"Found unknown token %s while parsing %s",s,m_tokenStream);
+ warn(m_parser->templateName(),m_line,"Found unknown token '%s' (%d) while parsing %s",s,c,m_tokenStream);
m_curToken.id = s;
p++;
}
@@ -2297,7 +2307,7 @@ class TemplateNodeList : public QList<TemplateNode>
class TemplateImpl : public TemplateNode, public Template
{
public:
- TemplateImpl(TemplateEngine *e,const QCString &name,const QCString &data);
+ TemplateImpl(TemplateEngine *e,const QCString &name,const char *data,int size);
void render(FTextStream &ts, TemplateContext *c);
TemplateEngine *engine() const { return m_engine; }
@@ -2603,6 +2613,7 @@ class TemplateNodeText : public TemplateNode
{
//printf("TemplateNodeText::render(%s)\n",m_data.data());
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (ci->spacelessEnabled())
{
ts << ci->spacelessIntf()->remove(m_data);
@@ -2641,6 +2652,7 @@ class TemplateNodeVariable : public TemplateNode
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_var)
{
@@ -2695,6 +2707,37 @@ template<class T> class TemplateNodeCreator : public TemplateNode
return dynamic_cast<TemplateImpl*>(root);
}
protected:
+ void mkpath(TemplateContextImpl *ci,const QCString &fileName)
+ {
+ int i=fileName.find('/');
+ QCString outputDir = ci->outputDirectory();
+ QDir d(outputDir);
+ if (!d.exists())
+ {
+ QDir rootDir;
+ rootDir.setPath(QDir::currentDirPath());
+ if (!rootDir.mkdir(outputDir))
+ {
+ err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+ "exist and cannot be created\n",outputDir.data());
+ return;
+ }
+ d.setPath(outputDir);
+ }
+ int j=0;
+ while (i!=-1) // fileName contains path part
+ {
+ if (d.exists())
+ {
+ bool ok = d.mkdir(fileName.mid(j,i-j));
+ if (!ok) break;
+ QCString dirName = outputDir+'/'+fileName.left(i);
+ d = QDir(dirName);
+ j = i+1;
+ }
+ i=fileName.find('/',i+1);
+ }
+ }
QCString m_templateName;
int m_line;
};
@@ -2760,6 +2803,7 @@ class TemplateNodeIf : public TemplateNodeCreator<TemplateNodeIf>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
//printf("TemplateNodeIf::render #trueNodes=%d #falseNodes=%d\n",m_trueNodes.count(),m_falseNodes.count());
bool processed=FALSE;
@@ -2824,6 +2868,7 @@ class TemplateNodeRepeat : public TemplateNodeCreator<TemplateNodeRepeat>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
TemplateVariant v;
if (m_expr && (v=m_expr->resolve(c)).type()==TemplateVariant::Integer)
@@ -2936,6 +2981,7 @@ class TemplateNodeRange : public TemplateNodeCreator<TemplateNodeRange>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
//printf("TemplateNodeRange::render #loopNodes=%d\n",
// m_loopNodes.count());
@@ -3097,6 +3143,7 @@ class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
//printf("TemplateNodeFor::render #loopNodes=%d #emptyNodes=%d\n",
// m_loopNodes.count(),m_emptyNodes.count());
@@ -3192,12 +3239,13 @@ class TemplateNodeMsg : public TemplateNodeCreator<TemplateNodeMsg>
QStrList stopAt;
stopAt.append("endmsg");
parser->parse(this,line,stopAt,m_nodes);
- parser->removeNextToken(); // skip over endmarkers
+ parser->removeNextToken(); // skip over endmsg
TRACE(("}TemplateNodeMsg()\n"));
}
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
TemplateEscapeIntf *escIntf = ci->escapeIntf();
ci->setActiveEscapeIntf(0); // avoid escaping things we send to standard out
@@ -3239,6 +3287,7 @@ class TemplateNodeBlock : public TemplateNodeCreator<TemplateNodeBlock>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
TemplateImpl *t = getTemplate();
if (t)
@@ -3319,6 +3368,7 @@ class TemplateNodeExtend : public TemplateNodeCreator<TemplateNodeExtend>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_extendExpr==0) return;
@@ -3337,7 +3387,6 @@ class TemplateNodeExtend : public TemplateNodeCreator<TemplateNodeExtend>
if (baseTemplate)
{
// fill block context
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
TemplateBlockContext *bc = ci->blockContext();
// add overruling blocks to the context
@@ -3398,6 +3447,7 @@ class TemplateNodeInclude : public TemplateNodeCreator<TemplateNodeInclude>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_includeExpr)
{
@@ -3474,28 +3524,10 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
delete m_templateExpr;
delete m_fileExpr;
}
- void mkpath(TemplateContextImpl *ci,const QCString &fileName)
- {
- int i=fileName.find('/');
- QCString outputDir = ci->outputDirectory();
- QDir d(outputDir);
- int j=0;
- while (i!=-1) // fileName contains path part
- {
- if (d.exists())
- {
- bool ok = d.mkdir(fileName.mid(j,i-j));
- if (!ok) break;
- QCString dirName = outputDir+'/'+fileName.left(i);
- d = QDir(dirName);
- j = i+1;
- }
- i=fileName.find('/',i+1);
- }
- }
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_templateExpr && m_fileExpr)
{
@@ -3518,7 +3550,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
TemplateImpl *createTemplate = ct ? dynamic_cast<TemplateImpl*>(ct) : 0;
if (createTemplate)
{
- //mkpath(ci,outputFile);
+ mkpath(ci,outputFile);
QCString extension=outputFile;
int i=extension.findRev('.');
if (i!=-1)
@@ -3529,6 +3561,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
{
outputFile.prepend(ci->outputDirectory()+"/");
}
+ //printf("NoteCreate(%s)\n",outputFile.data());
QFile f(outputFile);
if (f.open(IO_WriteOnly))
{
@@ -3601,9 +3634,11 @@ class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
{
//printf("TemplateNodeTree::renderChildren(%d)\n",ctx->list->count());
// render all children of node to a string and return it
+ TemplateContext *c = ctx->templateCtx;
+ TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return QCString(); // should not happen
QGString result;
FTextStream ss(&result);
- TemplateContext *c = ctx->templateCtx;
c->push();
TemplateVariant node;
TemplateListIntf::ConstIterator *it = ctx->list->createIterator();
@@ -3621,14 +3656,21 @@ class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
if (list && list->count()>0) // non-empty list
{
TreeContext childCtx(this,list,ctx->templateCtx);
-// TemplateVariant children(&childCtx,renderChildrenStub);
TemplateVariant children(TemplateVariant::Delegate::fromFunction(&childCtx,renderChildrenStub));
children.setRaw(TRUE);
c->set("children",children);
m_treeNodes.render(ss,c);
hasChildren=TRUE;
}
+ else if (list==0)
+ {
+ ci->warn(m_templateName,m_line,"recursetree: children attribute has type '%s' instead of list\n",v.typeAsString().data());
+ }
}
+ //else
+ //{
+ // ci->warn(m_templateName,m_line,"recursetree: children attribute is not valid");
+ //}
}
if (!hasChildren)
{
@@ -3643,6 +3685,7 @@ class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
{
//printf("TemplateNodeTree::render()\n");
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
TemplateVariant v = m_treeExpr->resolve(c);
const TemplateListIntf *list = v.toList();
@@ -3714,9 +3757,10 @@ class TemplateNodeIndexEntry : public TemplateNodeCreator<TemplateNodeIndexEntry
}
void render(FTextStream &, TemplateContext *c)
{
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (!m_name.isEmpty())
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
ci->setLocation(m_templateName,m_line);
QListIterator<Mapping> it(m_args);
Mapping *mapping;
@@ -3757,9 +3801,10 @@ class TemplateNodeOpenSubIndex : public TemplateNodeCreator<TemplateNodeOpenSubI
}
void render(FTextStream &, TemplateContext *c)
{
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (!m_name.isEmpty())
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
ci->setLocation(m_templateName,m_line);
ci->openSubIndex(m_name);
}
@@ -3792,9 +3837,10 @@ class TemplateNodeCloseSubIndex : public TemplateNodeCreator<TemplateNodeCloseSu
}
void render(FTextStream &, TemplateContext *c)
{
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (!m_name.isEmpty())
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
ci->setLocation(m_templateName,m_line);
ci->closeSubIndex(m_name);
}
@@ -3855,6 +3901,7 @@ class TemplateNodeWith : public TemplateNodeCreator<TemplateNodeWith>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
c->push();
QListIterator<Mapping> it(m_args);
@@ -3966,6 +4013,7 @@ class TemplateNodeSet : public TemplateNodeCreator<TemplateNodeSet>
void render(FTextStream &, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (m_mapping)
{
@@ -3996,6 +4044,7 @@ class TemplateNodeSpaceless : public TemplateNodeCreator<TemplateNodeSpaceless>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
bool wasSpaceless = ci->spacelessEnabled();
ci->enableSpaceless(TRUE);
@@ -4038,6 +4087,7 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
void render(FTextStream &ts, TemplateContext *c)
{
TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
ci->setLocation(m_templateName,m_line);
if (!m_var.isEmpty() && m_listExpr && m_patternExpr)
{
@@ -4106,6 +4156,81 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
//----------------------------------------------------------
+/** @brief Class representing an 'markers' tag in a template */
+class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource>
+{
+ public:
+ TemplateNodeResource(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+ : TemplateNodeCreator<TemplateNodeResource>(parser,parent,line)
+ {
+ TRACE(("{TemplateNodeResource(%s)\n",data.data()));
+ ExpressionParser ep(parser,line);
+ int i;
+ if (data.isEmpty())
+ {
+ parser->warn(m_templateName,line,"resource tag is missing resource file argument");
+ m_resExpr=0;
+ m_asExpr=0;
+ }
+ else if ((i=data.find(" as "))!=-1) // resource a as b
+ {
+ m_resExpr = ep.parse(data.left(i)); // part before as
+ m_asExpr = ep.parse(data.mid(i+4)); // part after as
+ }
+ else // resource a
+ {
+ m_resExpr = ep.parse(data);
+ m_asExpr = 0;
+ }
+ TRACE(("}TemplateNodeResource(%s)\n",data.data()));
+ }
+ ~TemplateNodeResource()
+ {
+ delete m_resExpr;
+ delete m_asExpr;
+ }
+ void render(FTextStream &, TemplateContext *c)
+ {
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
+ ci->setLocation(m_templateName,m_line);
+ if (m_resExpr)
+ {
+ QCString resourceFile = m_resExpr->resolve(c).toString();
+ if (resourceFile.isEmpty())
+ {
+ ci->warn(m_templateName,m_line,"invalid parameter for resource command\n");
+ }
+ else
+ {
+ QCString outputDirectory = ci->outputDirectory();
+ if (m_asExpr)
+ {
+ QCString targetFile = m_asExpr->resolve(c).toString();
+ mkpath(ci,targetFile);
+ if (targetFile.isEmpty())
+ {
+ ci->warn(m_templateName,m_line,"invalid parameter at right side of 'as' for resource command\n");
+ }
+ else
+ {
+ ResourceMgr::instance().copyResourceAs(resourceFile,outputDirectory,targetFile);
+ }
+ }
+ else
+ {
+ ResourceMgr::instance().copyResource(resourceFile,outputDirectory);
+ }
+ }
+ }
+ }
+ private:
+ ExprAst *m_resExpr;
+ ExprAst *m_asExpr;
+};
+
+//----------------------------------------------------------
+
/** @brief Factory class for creating tag AST nodes found in a template */
class TemplateNodeFactory
{
@@ -4152,23 +4277,24 @@ class TemplateNodeFactory
};
// register a handler for each start tag we support
-static TemplateNodeFactory::AutoRegister<TemplateNodeIf> autoRefIf("if");
-static TemplateNodeFactory::AutoRegister<TemplateNodeFor> autoRefFor("for");
-static TemplateNodeFactory::AutoRegister<TemplateNodeMsg> autoRefMsg("msg");
-static TemplateNodeFactory::AutoRegister<TemplateNodeSet> autoRefSet("set");
-static TemplateNodeFactory::AutoRegister<TemplateNodeTree> autoRefTree("recursetree");
-static TemplateNodeFactory::AutoRegister<TemplateNodeWith> autoRefWith("with");
-static TemplateNodeFactory::AutoRegister<TemplateNodeBlock> autoRefBlock("block");
-static TemplateNodeFactory::AutoRegister<TemplateNodeCycle> autoRefCycle("cycle");
-static TemplateNodeFactory::AutoRegister<TemplateNodeRange> autoRefRange("range");
-static TemplateNodeFactory::AutoRegister<TemplateNodeExtend> autoRefExtend("extend");
-static TemplateNodeFactory::AutoRegister<TemplateNodeCreate> autoRefCreate("create");
-static TemplateNodeFactory::AutoRegister<TemplateNodeRepeat> autoRefRepeat("repeat");
-static TemplateNodeFactory::AutoRegister<TemplateNodeInclude> autoRefInclude("include");
-static TemplateNodeFactory::AutoRegister<TemplateNodeMarkers> autoRefMarkers("markers");
-static TemplateNodeFactory::AutoRegister<TemplateNodeSpaceless> autoRefSpaceless("spaceless");
-static TemplateNodeFactory::AutoRegister<TemplateNodeIndexEntry> autoRefIndexEntry("indexentry");
-static TemplateNodeFactory::AutoRegister<TemplateNodeOpenSubIndex> autoRefOpenSubIndex("opensubindex");
+static TemplateNodeFactory::AutoRegister<TemplateNodeIf> autoRefIf("if");
+static TemplateNodeFactory::AutoRegister<TemplateNodeFor> autoRefFor("for");
+static TemplateNodeFactory::AutoRegister<TemplateNodeMsg> autoRefMsg("msg");
+static TemplateNodeFactory::AutoRegister<TemplateNodeSet> autoRefSet("set");
+static TemplateNodeFactory::AutoRegister<TemplateNodeTree> autoRefTree("recursetree");
+static TemplateNodeFactory::AutoRegister<TemplateNodeWith> autoRefWith("with");
+static TemplateNodeFactory::AutoRegister<TemplateNodeBlock> autoRefBlock("block");
+static TemplateNodeFactory::AutoRegister<TemplateNodeCycle> autoRefCycle("cycle");
+static TemplateNodeFactory::AutoRegister<TemplateNodeRange> autoRefRange("range");
+static TemplateNodeFactory::AutoRegister<TemplateNodeExtend> autoRefExtend("extend");
+static TemplateNodeFactory::AutoRegister<TemplateNodeCreate> autoRefCreate("create");
+static TemplateNodeFactory::AutoRegister<TemplateNodeRepeat> autoRefRepeat("repeat");
+static TemplateNodeFactory::AutoRegister<TemplateNodeInclude> autoRefInclude("include");
+static TemplateNodeFactory::AutoRegister<TemplateNodeMarkers> autoRefMarkers("markers");
+static TemplateNodeFactory::AutoRegister<TemplateNodeResource> autoRefResource("resource");
+static TemplateNodeFactory::AutoRegister<TemplateNodeSpaceless> autoRefSpaceless("spaceless");
+static TemplateNodeFactory::AutoRegister<TemplateNodeIndexEntry> autoRefIndexEntry("indexentry");
+static TemplateNodeFactory::AutoRegister<TemplateNodeOpenSubIndex> autoRefOpenSubIndex("opensubindex");
static TemplateNodeFactory::AutoRegister<TemplateNodeCloseSubIndex> autoRefCloseSubIndex("closesubindex");
//----------------------------------------------------------
@@ -4253,7 +4379,7 @@ void TemplateBlockContext::push(TemplateNodeBlock *block)
class TemplateLexer
{
public:
- TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const QCString &data);
+ TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const char *data,int size);
void tokenize(QList<TemplateToken> &tokens);
private:
void addToken(QList<TemplateToken> &tokens,
@@ -4265,9 +4391,12 @@ class TemplateLexer
QCString m_data;
};
-TemplateLexer::TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const QCString &data) :
- m_engine(engine), m_fileName(fileName), m_data(data)
+TemplateLexer::TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const char *data,int size) :
+ m_engine(engine), m_fileName(fileName)
{
+ m_data.resize(size+1);
+ memcpy(m_data.data(),data,size);
+ m_data[size]=0;
}
void TemplateLexer::tokenize(QList<TemplateToken> &tokens)
@@ -4472,9 +4601,8 @@ void TemplateLexer::addToken(QList<TemplateToken> &tokens,
if (startPos<endPos)
{
int len = endPos-startPos+1;
- QCString text(len+1);
+ QCString text(len);
qstrncpy(text.data(),data+startPos,len);
- text[len]='\0';
if (type!=TemplateToken::Text) text = text.stripWhiteSpace();
tokens.append(new TemplateToken(type,text,line));
}
@@ -4607,12 +4735,12 @@ void TemplateParser::warn(const char *fileName,int line,const char *fmt,...) con
//----------------------------------------------------------
-TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const QCString &data)
+TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const char *data,int size)
: TemplateNode(0)
{
m_name = name;
m_engine = engine;
- TemplateLexer lexer(engine,name,data);
+ TemplateLexer lexer(engine,name,data,size);
QList<TemplateToken> tokens;
tokens.setAutoDelete(TRUE);
lexer.tokenize(tokens);
@@ -4622,12 +4750,13 @@ TemplateImpl::TemplateImpl(TemplateEngine *engine,const QCString &name,const QCS
void TemplateImpl::render(FTextStream &ts, TemplateContext *c)
{
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
if (!m_nodes.isEmpty())
{
TemplateNodeExtend *ne = dynamic_cast<TemplateNodeExtend*>(m_nodes.getFirst());
if (ne==0) // normal template, add blocks to block context
{
- TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
TemplateBlockContext *bc = ci->blockContext();
QListIterator<TemplateNode> li(m_nodes);
TemplateNode *n;
@@ -4681,6 +4810,13 @@ class TemplateEngine::Private
Template *templ = m_templateCache.find(fileName);
if (templ==0)
{
+ const Resource *res = ResourceMgr::instance().get(fileName);
+ if (res)
+ {
+ templ = new TemplateImpl(m_engine,fileName,(const char *)res->data,res->size);
+ m_templateCache.insert(fileName,templ);
+ }
+#if 0
QFile f(fileName);
if (f.open(IO_ReadOnly))
{
@@ -4697,6 +4833,7 @@ class TemplateEngine::Private
delete[] data;
}
}
+#endif
else
{
err("Cound not open template file %s\n",fileName.data());
diff --git a/src/translator_hr.h b/src/translator_hr.h
index 70dba21..98a746a 100644
--- a/src/translator_hr.h
+++ b/src/translator_hr.h
@@ -943,9 +943,9 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2
* be followed by a single name or by a list of names
* of the category.
*/
- virtual QCString trMember(bool first_capital, bool singular)
+ virtual QCString trMember(bool, bool singular)
{
- QCString result((first_capital ? "član" : "član"));
+ QCString result("član");
if (!singular) result+="ovi";
return result;
}
diff --git a/src/util.cpp b/src/util.cpp
index b313b86..000de53 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -264,8 +264,9 @@ void writePageRef(OutputDocInterface &od,const char *cn,const char *mn)
*/
QCString generateMarker(int id)
{
- QCString result;
- result.sprintf("@%d",id);
+ const int maxMarkerStrLen = 20;
+ char result[maxMarkerStrLen];
+ qsnprintf(result,maxMarkerStrLen,"@%d",id);
return result;
}
@@ -3699,7 +3700,7 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwr
ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
Argument *srcA,*dstA;
- for (;(srcA=srcAli.current(),dstA=dstAli.current());++srcAli,++dstAli)
+ for (;(srcA=srcAli.current()) && (dstA=dstAli.current());++srcAli,++dstAli)
{
if (srcA->defval.isEmpty() && !dstA->defval.isEmpty())
{
@@ -4715,6 +4716,7 @@ bool resolveLink(/* in */ const char *scName,
*resContext=0;
QCString linkRef=lr;
+ QCString linkRefWithoutTemplates = stripTemplateSpecifiersFromScope(linkRef,FALSE);
//printf("ResolveLink linkRef=%s inSee=%d\n",lr,inSeeBlock);
FileDef *fd;
GroupDef *gd;
@@ -4771,6 +4773,12 @@ bool resolveLink(/* in */ const char *scName,
resAnchor=cd->anchor();
return TRUE;
}
+ else if ((cd=getClass(linkRefWithoutTemplates))) // C#/Java generic class link
+ {
+ *resContext=cd;
+ resAnchor=cd->anchor();
+ return TRUE;
+ }
else if ((cd=getClass(linkRef+"-p"))) // Obj-C protocol link
{
*resContext=cd;
@@ -4913,8 +4921,10 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
ambig=FALSE;
if (n==0) return 0;
- QCString key;
- key.sprintf("%p:",fnDict);
+ const int maxAddrSize = 20;
+ char addr[maxAddrSize];
+ qsnprintf(addr,maxAddrSize,"%p:",fnDict);
+ QCString key = addr;
key+=n;
g_findFileDefCache.setAutoDelete(TRUE);
@@ -5030,6 +5040,41 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n)
//----------------------------------------------------------------------
+/// substitute all occurrences of \a src in \a s by \a dst
+QCString substitute(const QCString &s,const QCString &src,const QCString &dst)
+{
+ 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.data(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
+ {
+ int l = (int)(q-p);
+ memcpy(r,p,l);
+ r+=l;
+ if (dst) memcpy(r,dst,dstLen);
+ r+=dstLen;
+ }
+ qstrcpy(r,p);
+ //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
+ return result;
+}
+
+//----------------------------------------------------------------------
+
QCString substituteKeywords(const QCString &s,const char *title,
const char *projName,const char *projNum,const char *projBrief)
{
@@ -5989,10 +6034,11 @@ QCString substituteTemplateArgumentsInString(
// for its template instance argument.
bool found=FALSE;
for (formAli.toFirst();
- (formArg=formAli.current()) && !found && (actArg=actAli.current());
+ (formArg=formAli.current()) && !found;
++formAli,++actAli
)
{
+ actArg = actAli.current();
if (formArg->type.left(6)=="class " && formArg->name.isEmpty())
{
formArg->name = formArg->type.mid(6);
@@ -6008,7 +6054,7 @@ QCString substituteTemplateArgumentsInString(
//printf("n=%s formArg->type='%s' formArg->name='%s' formArg->defval='%s'\n",
// n.data(),formArg->type.data(),formArg->name.data(),formArg->defval.data());
//printf(">> formArg->name='%s' actArg->type='%s' actArg->name='%s'\n",
- // formArg->name.data(),actArg->type.data(),actArg->name.data()
+ // formArg->name.data(),actArg ? actArg->type.data() : "",actArg ? actArg->name.data() : ""
// );
if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
{
@@ -6249,7 +6295,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
{
// append documentation block to the page.
pd->setDocumentation(doc,fileName,startLine);
- //printf("Adding page docs `%s' pi=%p name=%s\n",doc.data(),pi,name);
+ //printf("Adding page docs `%s' pi=%p name=%s\n",doc.data(),pd,name);
}
else // new page
{
@@ -6326,7 +6372,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
void addRefItem(const QList<ListItemInfo> *sli,
const char *key,
- const char *prefix, const char *name,const char *title,const char *args)
+ const char *prefix, const char *name,const char *title,const char *args,Definition *scope)
{
//printf("addRefItem(sli=%p,key=%s,prefix=%s,name=%s,title=%s,args=%s)\n",sli,key,prefix,name,title,args);
if (sli && key && key[0]!='@') // check for @ to skip anonymous stuff (see bug427012)
@@ -6351,6 +6397,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
ASSERT(item!=0);
item->prefix = prefix;
+ item->scope = scope;
item->name = name;
item->title = title;
item->args = args;
@@ -6462,6 +6509,8 @@ void filterLatexString(FTextStream &t,const char *str,
break;
case '"': t << "\\char`\\\"{}";
break;
+ case '\'': t << "\\textquotesingle{}";
+ break;
default:
//if (!insideTabbing && forceBreaks && c!=' ' && *p!=' ')
@@ -6519,16 +6568,25 @@ QCString rtfFormatBmkStr(const char *name)
return *tag;
}
-QCString stripExtension(const char *fName)
+bool checkExtension(const char *fName, const char *ext)
+{
+ return (QCString(fName).right(QCString(ext).length())==ext);
+}
+
+QCString stripExtensionGeneral(const char *fName, const char *ext)
{
QCString result=fName;
- if (result.right(Doxygen::htmlFileExtension.length())==Doxygen::htmlFileExtension)
+ if (result.right(QCString(ext).length())==QCString(ext))
{
- result=result.left(result.length()-Doxygen::htmlFileExtension.length());
+ result=result.left(result.length()-QCString(ext).length());
}
return result;
}
+QCString stripExtension(const char *fName)
+{
+ return stripExtensionGeneral(fName, Doxygen::htmlFileExtension);
+}
void replaceNamespaceAliases(QCString &scope,int i)
{
diff --git a/src/util.h b/src/util.h
index 2fc71ce..937b222 100644
--- a/src/util.h
+++ b/src/util.h
@@ -192,7 +192,7 @@ void mergeArguments(ArgumentList *,ArgumentList *,bool forceNameOverwrite=FALSE)
QCString substituteClassNames(const QCString &s);
-QCString substitute(const char *s,const char *src,const char *dst);
+QCString substitute(const QCString &s,const QCString &src,const QCString &dst);
QCString clearBlock(const char *s,const char *begin,const char *end);
@@ -316,7 +316,7 @@ int filterCRLF(char *buf,int len);
void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
const char *key,
- const char *name,const char *title,const char *args);
+ const char *name,const char *title,const char *args,Definition *scope);
PageDef *addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,QList<SectionInfo> *anchors,
@@ -340,6 +340,10 @@ QCString rtfFormatBmkStr(const char *name);
QCString linkToText(SrcLangExt lang,const char *link,bool isFileName);
+bool checkExtension(const char *fName, const char *ext);
+
+QCString stripExtensionGeneral(const char *fName, const char *ext);
+
QCString stripExtension(const char *fName);
void replaceNamespaceAliases(QCString &scope,int i);
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index ad95fd1..3f7cd1d 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -737,7 +737,7 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
if (mdef) return mdef;
// nothing found so far
- // if we are an architecture or package body search in entitiy
+ // if we are an architecture or package body search in entity
if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
@@ -1445,7 +1445,7 @@ bool VhdlDocGen::isNumber(const QCString& s)
void VhdlDocGen::formatString(const QCString &s, OutputList& ol,const MemberDef* mdef)
{
QCString qcs = s;
- QCString temp(qcs.length());
+ QCString temp;
qcs.stripPrefix(":");
qcs.stripPrefix("is");
qcs.stripPrefix("IS");
@@ -1464,7 +1464,7 @@ void VhdlDocGen::formatString(const QCString &s, OutputList& ol,const MemberDef*
if (j>0) b=qcs[j-1];
if (c=='"' || c==',' || c=='\''|| c=='(' || c==')' || c==':' || c=='[' || c==']' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>'))
{
- if (temp.at(index-1) != ' ')
+ if (temp.length()>=index && temp.at(index-1) != ' ')
{
temp+=" ";
}
@@ -1785,21 +1785,6 @@ QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool fun
void VhdlDocGen::writeVhdlDeclarations(MemberList* ml,
OutputList& ol,GroupDef* gd,ClassDef* cd,FileDef *fd,NamespaceDef* nd)
{
- static ClassDef *cdef;
- //static GroupDef* gdef;
- if (cd && cdef!=cd)
- { // only one inline link
- VhdlDocGen::writeInlineClassLink(cd,ol);
- cdef=cd;
- }
-
- /*
- if (gd && gdef==gd) return;
- if (gd && gdef!=gd)
- {
- gdef=gd;
- }
- */
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::LIBRARY,FALSE),0,FALSE,VhdlDocGen::LIBRARY);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::USE,FALSE),0,FALSE,VhdlDocGen::USE);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::FUNCTION,FALSE),0,FALSE,VhdlDocGen::FUNCTION);
@@ -2322,6 +2307,7 @@ void VhdlDocGen::writePlainVHDLDeclarations(
{
SDict<QCString> pack(1009);
+ pack.setAutoDelete(TRUE);
bool first=TRUE;
MemberDef *md;
diff --git a/src/vhdljjparser.cpp b/src/vhdljjparser.cpp
index f31c9fb..7b0c112 100644
--- a/src/vhdljjparser.cpp
+++ b/src/vhdljjparser.cpp
@@ -42,26 +42,6 @@ static int iDocLine = -1;
static QCString inputString;
static Entry gBlock;
static Entry* previous = 0;
-#if 0
-int iLine;
-QStringList qrl;
-ParserInterface *g_thisParser;
-int inputPosition;
-int inputLen;
-int startComment = 0;
-QFile inputFile;
-QCString inbuf;
-
-QCString yyFileName;
-bool g_lexInit = FALSE;
-int yyLineNr = 1;
-int g_lastCommentContext = 0;
-bool docBlockAutoBrief;
-char docBlockTerm;
-int iDocLine = -1;
-int num_chars;
-int* lineParse;
-#endif
//-------------------------------------------------------
static Entry* oldEntry;
@@ -92,7 +72,7 @@ int VhdlParser::levelCounter;
static QList<VhdlConfNode> configL;
-struct
+static struct
{
QCString doc;
bool brief;
@@ -124,7 +104,6 @@ void startCodeBlock(int index)
int ll=strComment.length();
iCodeLen=inputString.findRev(strComment.data())+ll;
// fprintf(stderr,"\n startin code..%d %d %d\n",iCodeLen,num_chars,ll);
- //assert(false);
gBlock.reset();
int len=strComment.length();
QCString name=strComment.right(len-index);//
@@ -134,8 +113,6 @@ void startCodeBlock(int index)
else
gBlock.name=name;
- //int li=strComment.contains('\n');
-
gBlock.startLine=yyLineNr;
gBlock.bodyLine=yyLineNr;
@@ -217,7 +194,7 @@ void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,En
VhdlParser::current=new Entry();
VhdlParser::initEntry(VhdlParser::current);
groupEnterFile(fileName,yyLineNr);
- lineParse=new int[200];
+ lineParse=new int[200]; // Dimitri: dangerous constant: should be bigger than largest token id in VhdlParserConstants.h
VhdlParserIF::parseVhdlfile(fileBuf,inLine);
delete VhdlParser::current;
@@ -226,13 +203,16 @@ void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,En
if (!inLine)
VhdlParser::mapLibPackage(root);
- delete lineParse;
+ delete[] lineParse;
yyFileName.resize(0);
libUse.clear();
VhdlDocGen::resetCodeVhdlParserState();
}
-void VhdlParser::lineCount(){ yyLineNr++; }
+void VhdlParser::lineCount()
+{
+ yyLineNr++;
+}
void VhdlParser::lineCount(const char* text)
{
@@ -309,7 +289,6 @@ bool checkInlineCode(QCString & doc)
void VhdlParser::handleFlowComment(const char* doc)
{
- lineCount(doc);
if (VhdlDocGen::getFlowMember())
{
QCString qcs(doc);
@@ -319,6 +298,7 @@ void VhdlParser::handleFlowComment(const char* doc)
}
}
+
void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
{
int position=0;
@@ -328,7 +308,7 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
if (checkMultiComment(doc,yyLineNr))
{
- lineCount(doc1);
+ strComment.resize(0);
return;
}
@@ -345,7 +325,6 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
if (isIn)
{
isIn=false;
- lineCount(doc1);
return;
}
@@ -353,7 +332,9 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
bool needsEntry=FALSE;
Protection protection=Public;
- int lineNr = iDocLine;
+ int lineNr;
+ if (iDocLine==-1)
+ lineNr=yyLineNr;
if (oldEntry==current)
{
@@ -375,13 +356,13 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
{
current->docLine = yyLineNr;
}
- // printf("parseCommentBlock file<%s>\n [%s]\n",yyFileName.data(),doc.data());
+ // printf("parseCommentBlock file<%s>\n [%s]\n at line [%d] \n ",yyFileName.data(),doc.data(),iDocLine);
while (parseCommentBlock(
g_thisParser,
current,
doc, // text
yyFileName, // file
- lineNr, // line of block start
+ iDocLine, // line of block start
brief,
0,
FALSE,
@@ -405,7 +386,8 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
}
newEntry();
}
- lineCount(doc1);
+ iDocLine=-1;
+ strComment.resize(0);
}
void VHDLLanguageScanner::parsePrototype(const char *text)
@@ -571,12 +553,10 @@ void VhdlParser::addConfigureNode(const char* a,const char*b, bool,bool isLeaf,b
QCString ent,arch,lab;
QCString l=genLabels;
ent=a;
- // lab = VhdlDocGen::parseForConfig(ent,arch);
if (b)
{
ent=b;
- // lab=VhdlDocGen::parseForBinding(ent,arch);
}
int level=0;
@@ -619,8 +599,7 @@ void VhdlParser::addConfigureNode(const char* a,const char*b, bool,bool isLeaf,b
}
configL.append(co);
-
-}// addConfigure
+}
void VhdlParser::addProto(const char *s1,const char *s2,const char *s3,
@@ -788,23 +767,55 @@ void VhdlParser::createFlow()
currP=0;
}
+void VhdlParser::setMultCommentLine()
+{
+ iDocLine=yyLineNr;
+}
+
+void VhdlParser::oneLineComment(QCString qcs)
+{
+ bool isEndCode=qcs.contains("\\endcode");
+
+ int index = qcs.find("\\code");
+ if (isEndCode)
+ {
+ int end = inputString.find(qcs.data(),iCodeLen);
+ makeInlineDoc(end);
+ }
+ else if (index > 0)
+ {
+ // assert(false);
+ strComment=qcs;
+ startCodeBlock(index);
+ strComment.resize(0);
+ }
+
+ if (!isEndCode && index==-1)
+ {
+ int j=qcs.find("--!");
+ qcs=qcs.right(qcs.length()-3-j);
+ if (!checkMultiComment(qcs,iDocLine))
+ {
+ handleCommentBlock(qcs,TRUE);
+ }
+ }
+}
+
+
bool checkMultiComment(QCString& qcs,int line)
{
QList<Entry> *pTemp=getEntryAtLine(VhdlParser::current_root,line);
if (pTemp->isEmpty()) return false;
- //int ii=pTemp->count();
- // qcs.stripPrefix("--!");
VhdlDocGen::prepareComment(qcs);
while (!pTemp->isEmpty())
{
Entry *e=(Entry*)pTemp->getFirst();
e->briefLine=line;
e->brief+=qcs;
- iDocLine=-1;
+
pTemp->removeFirst();
- //ii=pTemp->count();
}
return true;
}
@@ -819,7 +830,7 @@ QList<Entry>* getEntryAtLine(const Entry* ce,int line)
if (rt->bodyLine==line)
{
lineEntry.insert(0,rt);
- } // if
+ }
getEntryAtLine(rt,line);
}
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index f2da28c..65711ab 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -32,6 +32,59 @@
#include "config.h"
#include "htmlentity.h"
+static void visitCaption(XmlDocVisitor *parent, QList<DocNode> children)
+{
+ QListIterator<DocNode> cli(children);
+ DocNode *n;
+ for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
+}
+
+static void visitPreStart(FTextStream &t, const char *cmd, const bool doCaption,
+ XmlDocVisitor *parent, QList<DocNode> children,
+ const QCString &name, bool writeType, DocImage::Type type, const QCString &width,
+ const QCString &height)
+{
+ QCString tmpStr;
+
+ t << "<" << cmd;
+ if (writeType)
+ {
+ t << " type=\"";
+ switch(type)
+ {
+ case DocImage::Html: t << "html"; break;
+ case DocImage::Latex: t << "latex"; break;
+ case DocImage::Rtf: t << "rtf"; break;
+ case DocImage::DocBook: t << "docbook"; break;
+ }
+ t << "\"";
+ }
+ if (!name.isEmpty())
+ {
+ t << " name=\"" << name << "\"";
+ }
+ if (!width.isEmpty())
+ {
+ t << " width=\"" << convertToXML(width) << "\"";
+ }
+ else if (!height.isEmpty())
+ {
+ t << " height=\"" << convertToXML(height) << "\"";
+ }
+ if (doCaption)
+ {
+ t << " caption=\"";
+ visitCaption(parent, children);
+ t << "\"";
+ }
+ t << ">";
+}
+
+static void visitPostEnd(FTextStream &t, const char *cmd)
+{
+ t << "</" << cmd << ">" << endl;
+}
+
XmlDocVisitor::XmlDocVisitor(FTextStream &t,CodeOutputInterface &ci)
: DocVisitor(DocVisitor_XML), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
{
@@ -199,20 +252,20 @@ void XmlDocVisitor::visit(DocVerbatim *s)
filter(s->text());
m_t << "</docbookonly>";
break;
- case DocVerbatim::Dot:
- m_t << "<dot>";
+ case DocVerbatim::Dot:
+ visitPreStart(m_t, "dot", s->hasCaption(), this, s->children(), QCString(""), FALSE, DocImage::Html, s->width(), s->height());
filter(s->text());
- m_t << "</dot>";
+ visitPostEnd(m_t, "dot");
break;
- case DocVerbatim::Msc:
- m_t << "<msc>";
+ case DocVerbatim::Msc:
+ visitPreStart(m_t, "msc", s->hasCaption(), this, s->children(), QCString(""), FALSE, DocImage::Html, s->width(), s->height());
filter(s->text());
- m_t << "</msc>";
+ visitPostEnd(m_t, "msc");
break;
case DocVerbatim::PlantUML:
- m_t << "<plantuml>";
+ visitPreStart(m_t, "plantuml", s->hasCaption(), this, s->children(), QCString(""), FALSE, DocImage::Html, s->width(), s->height());
filter(s->text());
- m_t << "</plantuml>";
+ visitPostEnd(m_t, "plantuml");
break;
}
}
@@ -682,15 +735,6 @@ void XmlDocVisitor::visitPost(DocHtmlHeader *)
void XmlDocVisitor::visitPre(DocImage *img)
{
if (m_hide) return;
- m_t << "<image type=\"";
- switch(img->type())
- {
- case DocImage::Html: m_t << "html"; break;
- case DocImage::Latex: m_t << "latex"; break;
- case DocImage::Rtf: m_t << "rtf"; break;
- case DocImage::DocBook: m_t << "docbook"; break;
- }
- m_t << "\"";
QCString baseName=img->name();
int i;
@@ -698,20 +742,7 @@ void XmlDocVisitor::visitPre(DocImage *img)
{
baseName=baseName.right(baseName.length()-i-1);
}
- m_t << " name=\"" << baseName << "\"";
- if (!img->width().isEmpty())
- {
- m_t << " width=\"";
- filter(img->width());
- m_t << "\"";
- }
- else if (!img->height().isEmpty())
- {
- m_t << " height=\"";
- filter(img->height());
- m_t << "\"";
- }
- m_t << ">";
+ visitPreStart(m_t, "image", FALSE, this, img->children(), baseName, TRUE, img->type(), img->width(), img->height());
// copy the image to the output dir
QFile inImage(img->name());
@@ -732,43 +763,43 @@ void XmlDocVisitor::visitPre(DocImage *img)
void XmlDocVisitor::visitPost(DocImage *)
{
if (m_hide) return;
- m_t << "</image>" << endl;
+ visitPostEnd(m_t, "image");
}
void XmlDocVisitor::visitPre(DocDotFile *df)
{
if (m_hide) return;
- m_t << "<dotfile name=\"" << df->file() << "\">";
+ visitPreStart(m_t, "dotfile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
}
void XmlDocVisitor::visitPost(DocDotFile *)
{
if (m_hide) return;
- m_t << "</dotfile>" << endl;
+ visitPostEnd(m_t, "dotfile");
}
void XmlDocVisitor::visitPre(DocMscFile *df)
{
if (m_hide) return;
- m_t << "<mscfile name=\"" << df->file() << "\">";
+ visitPreStart(m_t, "mscfile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
}
void XmlDocVisitor::visitPost(DocMscFile *)
{
if (m_hide) return;
- m_t << "</mscfile>" << endl;
+ visitPostEnd(m_t, "mscfile");
}
void XmlDocVisitor::visitPre(DocDiaFile *df)
{
if (m_hide) return;
- m_t << "<diafile name=\"" << df->file() << "\">";
+ visitPreStart(m_t, "diafile", FALSE, this, df->children(), df->file(), FALSE, DocImage::Html, df->width(), df->height());
}
void XmlDocVisitor::visitPost(DocDiaFile *)
{
if (m_hide) return;
- m_t << "</diafile>" << endl;
+ visitPostEnd(m_t, "diafile");
}
void XmlDocVisitor::visitPre(DocLink *lnk)
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 549ff0f..8e1d02f 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -46,6 +46,7 @@
#include "dirdef.h"
#include "section.h"
#include "htmlentity.h"
+#include "resourcemgr.h"
// no debug info
#define XML_DB(x) do {} while(0)
@@ -56,18 +57,6 @@
//------------------
-static const char index_xsd[] =
-#include "index.xsd.h"
-;
-
-//------------------
-//
-static const char compound_xsd[] =
-#include "compound.xsd.h"
-;
-
-//------------------
-
/** Helper class mapping MemberList::ListType to a string representing */
class XmlSectionMapper : public QIntDict<char>
{
@@ -235,12 +224,11 @@ class XMLCodeGenerator : public CodeOutputInterface
{
public:
- XMLCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1),
- m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE),
- m_insideSpecialHL(FALSE) {}
+ XMLCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1), m_isMemberRef(FALSE), m_col(0),
+ m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE), m_insideSpecialHL(FALSE) {}
virtual ~XMLCodeGenerator() { }
-
- void codify(const char *text)
+
+ void codify(const char *text)
{
XML_DB(("(codify \"%s\")\n",text));
if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
@@ -248,11 +236,11 @@ class XMLCodeGenerator : public CodeOutputInterface
m_t << "<highlight class=\"normal\">";
m_normalHLNeedStartTag=FALSE;
}
- writeXMLCodeString(m_t,text,col);
+ writeXMLCodeString(m_t,text,m_col);
}
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
- const char *tooltip)
+ const char *tooltip)
{
XML_DB(("(writeCodeLink)\n"));
if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
@@ -261,7 +249,7 @@ class XMLCodeGenerator : public CodeOutputInterface
m_normalHLNeedStartTag=FALSE;
}
writeXMLLink(m_t,ref,file,anchor,name,tooltip);
- col+=qstrlen(name);
+ m_col+=qstrlen(name);
}
void writeTooltip(const char *, const DocLinkInfo &, const char *,
const char *, const SourceLinkInfo &, const SourceLinkInfo &
@@ -269,7 +257,7 @@ class XMLCodeGenerator : public CodeOutputInterface
{
XML_DB(("(writeToolTip)\n"));
}
- void startCodeLine(bool)
+ void startCodeLine(bool)
{
XML_DB(("(startCodeLine)\n"));
m_t << "<codeline";
@@ -293,11 +281,11 @@ class XMLCodeGenerator : public CodeOutputInterface
m_t << " external=\"" << m_external << "\"";
}
}
- m_t << ">";
+ m_t << ">";
m_insideCodeLine=TRUE;
- col=0;
+ m_col=0;
}
- void endCodeLine()
+ void endCodeLine()
{
XML_DB(("(endCodeLine)\n"));
if (!m_insideSpecialHL && !m_normalHLNeedStartTag)
@@ -311,7 +299,7 @@ class XMLCodeGenerator : public CodeOutputInterface
m_external.resize(0);
m_insideCodeLine=FALSE;
}
- void startFontClass(const char *colorClass)
+ void startFontClass(const char *colorClass)
{
XML_DB(("(startFontClass)\n"));
if (m_insideCodeLine && !m_insideSpecialHL && !m_normalHLNeedStartTag)
@@ -336,7 +324,7 @@ class XMLCodeGenerator : public CodeOutputInterface
const char *anchorId,int l)
{
XML_DB(("(writeLineNumber)\n"));
- // we remember the information provided here to use it
+ // we remember the information provided here to use it
// at the <codeline> start tag.
m_lineNumber = l;
if (compId)
@@ -360,12 +348,12 @@ class XMLCodeGenerator : public CodeOutputInterface
}
private:
- FTextStream &m_t;
+ FTextStream &m_t;
QCString m_refId;
QCString m_external;
int m_lineNumber;
bool m_isMemberRef;
- int col;
+ int m_col;
bool m_insideCodeLine;
bool m_normalHLNeedStartTag;
@@ -1262,7 +1250,8 @@ static void generateXMLForClass(ClassDef *cd,FTextStream &ti)
writeXMLHeader(t);
t << " <compounddef id=\""
<< classOutputFileBase(cd) << "\" kind=\""
- << cd->compoundTypeString() << "\" prot=\"";
+ << cd->compoundTypeString() << "\" language=\""
+ << langToString(cd->getLanguage()) << "\" prot=\"";
switch (cd->protection())
{
case Public: t << "public"; break;
@@ -1387,37 +1376,6 @@ static void generateXMLForClass(ClassDef *cd,FTextStream &ti)
generateXMLSection(cd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
}
}
-#if 0
- generateXMLSection(cd,ti,t,cd->pubTypes,"public-type");
- generateXMLSection(cd,ti,t,cd->pubMethods,"public-func");
- generateXMLSection(cd,ti,t,cd->pubAttribs,"public-attrib");
- generateXMLSection(cd,ti,t,cd->pubSlots,"public-slot");
- generateXMLSection(cd,ti,t,cd->signals,"signal");
- generateXMLSection(cd,ti,t,cd->dcopMethods,"dcop-func");
- generateXMLSection(cd,ti,t,cd->properties,"property");
- generateXMLSection(cd,ti,t,cd->events,"event");
- generateXMLSection(cd,ti,t,cd->pubStaticMethods,"public-static-func");
- generateXMLSection(cd,ti,t,cd->pubStaticAttribs,"public-static-attrib");
- generateXMLSection(cd,ti,t,cd->proTypes,"protected-type");
- generateXMLSection(cd,ti,t,cd->proMethods,"protected-func");
- generateXMLSection(cd,ti,t,cd->proAttribs,"protected-attrib");
- generateXMLSection(cd,ti,t,cd->proSlots,"protected-slot");
- generateXMLSection(cd,ti,t,cd->proStaticMethods,"protected-static-func");
- generateXMLSection(cd,ti,t,cd->proStaticAttribs,"protected-static-attrib");
- generateXMLSection(cd,ti,t,cd->pacTypes,"package-type");
- generateXMLSection(cd,ti,t,cd->pacMethods,"package-func");
- generateXMLSection(cd,ti,t,cd->pacAttribs,"package-attrib");
- generateXMLSection(cd,ti,t,cd->pacStaticMethods,"package-static-func");
- generateXMLSection(cd,ti,t,cd->pacStaticAttribs,"package-static-attrib");
- generateXMLSection(cd,ti,t,cd->priTypes,"private-type");
- generateXMLSection(cd,ti,t,cd->priMethods,"private-func");
- generateXMLSection(cd,ti,t,cd->priAttribs,"private-attrib");
- generateXMLSection(cd,ti,t,cd->priSlots,"private-slot");
- generateXMLSection(cd,ti,t,cd->priStaticMethods,"private-static-func");
- generateXMLSection(cd,ti,t,cd->priStaticAttribs,"private-static-attrib");
- generateXMLSection(cd,ti,t,cd->friends,"friend");
- generateXMLSection(cd,ti,t,cd->related,"related");
-#endif
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
@@ -1490,8 +1448,9 @@ static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti)
//t.setEncoding(FTextStream::UnicodeUTF8);
writeXMLHeader(t);
- t << " <compounddef id=\""
- << nd->getOutputFileBase() << "\" kind=\"namespace\">" << endl;
+ t << " <compounddef id=\"" << nd->getOutputFileBase()
+ << "\" kind=\"namespace\" language=\""
+ << langToString(nd->getLanguage()) << "\">" << endl;
t << " <compoundname>";
writeXMLString(t,nd->name());
t << "</compoundname>" << endl;
@@ -1519,14 +1478,6 @@ static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti)
generateXMLSection(nd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
}
}
-#if 0
- generateXMLSection(nd,ti,t,&nd->decDefineMembers,"define");
- generateXMLSection(nd,ti,t,&nd->decProtoMembers,"prototype");
- generateXMLSection(nd,ti,t,&nd->decTypedefMembers,"typedef");
- generateXMLSection(nd,ti,t,&nd->decEnumMembers,"enum");
- generateXMLSection(nd,ti,t,&nd->decFuncMembers,"func");
- generateXMLSection(nd,ti,t,&nd->decVarMembers,"var");
-#endif
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
@@ -1578,8 +1529,9 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti)
//t.setEncoding(FTextStream::UnicodeUTF8);
writeXMLHeader(t);
- t << " <compounddef id=\""
- << fd->getOutputFileBase() << "\" kind=\"file\">" << endl;
+ t << " <compounddef id=\"" << fd->getOutputFileBase()
+ << "\" kind=\"file\" language=\""
+ << langToString(fd->getLanguage()) << "\">" << endl;
t << " <compoundname>";
writeXMLString(t,fd->name());
t << "</compoundname>" << endl;
@@ -1663,14 +1615,6 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti)
generateXMLSection(fd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
}
}
-#if 0
- generateXMLSection(fd,ti,t,fd->decDefineMembers,"define");
- generateXMLSection(fd,ti,t,fd->decProtoMembers,"prototype");
- generateXMLSection(fd,ti,t,fd->decTypedefMembers,"typedef");
- generateXMLSection(fd,ti,t,fd->decEnumMembers,"enum");
- generateXMLSection(fd,ti,t,fd->decFuncMembers,"func");
- generateXMLSection(fd,ti,t,fd->decVarMembers,"var");
-#endif
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
@@ -1753,14 +1697,6 @@ static void generateXMLForGroup(GroupDef *gd,FTextStream &ti)
generateXMLSection(gd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
}
}
-#if 0
- generateXMLSection(gd,ti,t,&gd->decDefineMembers,"define");
- generateXMLSection(gd,ti,t,&gd->decProtoMembers,"prototype");
- generateXMLSection(gd,ti,t,&gd->decTypedefMembers,"typedef");
- generateXMLSection(gd,ti,t,&gd->decEnumMembers,"enum");
- generateXMLSection(gd,ti,t,&gd->decFuncMembers,"func");
- generateXMLSection(gd,ti,t,&gd->decVarMembers,"var");
-#endif
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription());
@@ -1906,18 +1842,11 @@ void generateXML()
QCString outputDirectory = Config_getString("XML_OUTPUT");
QDir xmlDir(outputDirectory);
createSubDirs(xmlDir);
- QCString fileName=outputDirectory+"/index.xsd";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- f.writeBlock(index_xsd,qstrlen(index_xsd));
- f.close();
- fileName=outputDirectory+"/compound.xsd";
- f.setName(fileName);
+ ResourceMgr::instance().copyResource("index.xsd",outputDirectory);
+
+ QCString fileName=outputDirectory+"/compound.xsd";
+ QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
@@ -1925,7 +1854,8 @@ void generateXML()
}
// write compound.xsd, but replace special marker with the entities
- const char *startLine = compound_xsd;
+ QCString compound_xsd = ResourceMgr::instance().getAsString("compound.xsd");
+ const char *startLine = compound_xsd.data();
while (*startLine)
{
// find end of the line
diff --git a/templates/html/arrowdown.luma b/templates/html/arrowdown.luma
new file mode 100644
index 0000000..df7834c
--- /dev/null
+++ b/templates/html/arrowdown.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+16 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255
+255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 255 255 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255
+255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 152 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 231 255 255 255 255 255 255 255 216 0 0 0 0
+ 0 0 0 87 255 255 255 255 255 255 255 65 0 0 0 0
+ 0 0 0 0 186 255 255 255 255 255 164 0 0 0 0 0
+ 0 0 0 0 38 251 255 255 255 241 25 0 0 0 0 0
+ 0 0 0 0 0 127 255 255 255 107 0 0 0 0 0 0
+ 0 0 0 0 0 0 221 255 204 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 72 253 52 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 77 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/templates/html/arrowright.luma b/templates/html/arrowright.luma
new file mode 100644
index 0000000..63209b0
--- /dev/null
+++ b/templates/html/arrowright.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+16 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 152 255 255 255 255 255
+255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255
+255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255
+255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255
+255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 223 75 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 255 255 176 33 0 0 0 0 0 0 0 0 0
+ 0 0 0 255 255 255 248 117 0 0 0 0 0 0 0 0
+ 0 0 0 255 255 255 255 255 211 60 0 0 0 0 0 0
+ 0 0 0 255 255 255 255 255 255 255 77 0 0 0 0 0
+ 0 0 0 255 255 255 255 255 211 60 0 0 0 0 0 0
+ 0 0 0 255 255 255 248 117 0 0 0 0 0 0 0 0
+ 0 0 0 255 255 176 33 0 0 0 0 0 0 0 0 0
+ 0 0 0 223 75 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/templates/html/bc_s.luma b/templates/html/bc_s.luma
new file mode 100644
index 0000000..2aac5d6
--- /dev/null
+++ b/templates/html/bc_s.luma
@@ -0,0 +1,66 @@
+# breadcrumb tabs
+# width & height
+8 30
+# luma data
+150 187 187 148 148 148 148 148
+147 175 186 147 147 147 147 147
+146 153 185 185 146 146 146 146
+144 144 177 183 144 144 144 144
+144 144 159 182 144 144 144 144
+143 143 144 179 181 143 143 143
+142 142 142 165 180 142 142 142
+141 141 141 144 178 178 141 141
+139 139 139 139 167 176 139 139
+137 137 137 137 146 174 137 137
+137 137 137 137 137 169 173 137
+135 135 135 135 135 150 171 135
+133 133 133 133 133 135 167 169
+132 132 132 132 132 132 154 167
+129 129 129 129 129 129 140 164
+129 129 129 129 129 129 154 163
+127 127 127 127 127 128 161 161
+125 125 125 125 125 141 158 125
+123 123 123 123 123 152 156 123
+121 121 121 121 129 154 121 121
+120 120 120 120 143 152 120 120
+118 118 118 120 150 150 118 118
+117 117 117 132 148 117 117 117
+114 114 114 142 145 114 114 114
+113 113 120 143 113 113 113 113
+111 111 133 141 111 111 111 111
+110 112 140 140 110 110 110 110
+109 124 138 109 109 109 109 109
+107 133 136 107 107 107 107 107
+111 134 106 106 106 106 106 106
+# alpha data
+241 241 21 0 0 0 0 0
+162 205 117 0 0 0 0 0
+ 54 231 225 3 0 0 0 0
+ 0 198 215 78 0 0 0 0
+ 0 93 211 186 0 0 0 0
+ 0 6 232 235 42 0 0 0
+ 0 0 132 203 147 0 0 0
+ 0 0 27 242 241 15 0 0
+ 0 0 0 168 205 108 0 0
+ 0 0 0 63 228 219 0 0
+ 0 0 0 0 207 221 72 0
+ 0 0 0 0 102 208 177 0
+ 0 0 0 0 9 238 240 36
+ 0 0 0 0 0 138 201 138
+ 0 0 0 0 0 77 187 158
+ 0 0 0 0 0 159 204 120
+ 0 0 0 0 15 241 241 21
+ 0 0 0 0 111 208 171 0
+ 0 0 0 0 210 222 66 0
+ 0 0 0 60 227 219 0 0
+ 0 0 0 162 204 114 0 0
+ 0 0 18 238 238 21 0 0
+ 0 0 114 205 165 0 0 0
+ 0 0 216 225 60 0 0 0
+ 0 66 226 216 0 0 0 0
+ 0 165 204 111 0 0 0 0
+ 21 241 241 18 0 0 0 0
+117 203 159 0 0 0 0 0
+219 227 57 0 0 0 0 0
+211 201 0 0 0 0 0 0
+
diff --git a/templates/html/bdwn.luma b/templates/html/bdwn.luma
new file mode 100644
index 0000000..17e677d
--- /dev/null
+++ b/templates/html/bdwn.luma
@@ -0,0 +1,21 @@
+# arrow down button
+# width height
+7 8
+# luma data
+ 0 0 0 142 0 0 0
+ 0 0 0 142 0 0 0
+ 0 0 0 142 0 0 0
+142 0 0 142 0 0 142
+142 142 0 142 0 142 142
+142 142 142 142 142 142 142
+ 0 142 142 142 142 142 0
+ 0 0 142 142 142 0 0
+# alpha data
+ 0 0 0 255 0 0 0
+ 0 0 0 255 0 0 0
+ 0 0 0 255 0 0 0
+128 0 0 255 0 0 128
+255 128 0 255 0 128 255
+128 255 128 255 128 255 128
+ 0 128 255 255 255 128 0
+ 0 0 128 255 128 0 0
diff --git a/src/bib2xhtml.pl b/templates/html/bib2xhtml.pl
index da6dc62..da6dc62 100755
--- a/src/bib2xhtml.pl
+++ b/templates/html/bib2xhtml.pl
diff --git a/templates/html/close.png b/templates/html/close.png
new file mode 100644
index 0000000..9342d3d
--- /dev/null
+++ b/templates/html/close.png
Binary files differ
diff --git a/templates/html/closed.luma b/templates/html/closed.luma
new file mode 100644
index 0000000..1f57335
--- /dev/null
+++ b/templates/html/closed.luma
@@ -0,0 +1,23 @@
+# tree closed icon
+# width & height
+9 9
+# luma data
+0 0 0 0 142 0 0 0 0
+0 0 0 0 142 142 0 0 0
+0 0 0 0 142 142 142 0 0
+0 0 0 0 142 142 142 142 0
+0 0 0 0 142 142 142 142 142
+0 0 0 0 142 142 142 142 0
+0 0 0 0 142 142 142 0 0
+0 0 0 0 142 142 0 0 0
+0 0 0 0 142 0 0 0 0
+# alpha data
+0 0 0 0 255 0 0 0 0
+0 0 0 0 255 255 0 0 0
+0 0 0 0 255 255 255 0 0
+0 0 0 0 255 255 255 255 0
+0 0 0 0 255 255 255 255 255
+0 0 0 0 255 255 255 255 0
+0 0 0 0 255 255 255 0 0
+0 0 0 0 255 255 0 0 0
+0 0 0 0 255 0 0 0 0
diff --git a/templates/html/doc.luma b/templates/html/doc.luma
new file mode 100644
index 0000000..cdcd810
--- /dev/null
+++ b/templates/html/doc.luma
@@ -0,0 +1,50 @@
+# document icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 218 214 208 208 204 191 179 190 197 209 231 255 255 255 255 255 255 255 255
+255 255 255 255 255 195 224 226 226 222 214 204 181 203 229 188 225 255 255 255 255 255 255 255
+255 255 255 255 255 198 226 228 227 227 224 215 203 180 252 229 184 224 255 255 255 255 255 255
+255 255 255 255 255 198 229 230 229 229 228 224 214 154 252 252 229 187 235 255 255 255 255 255
+255 255 255 255 255 198 232 233 233 232 231 230 223 176 154 144 165 177 216 255 255 255 255 255
+255 255 255 255 255 198 236 236 216 226 238 219 232 225 209 190 189 166 193 255 255 255 255 255
+255 255 255 255 255 198 239 240 178 177 230 175 169 184 188 219 208 189 187 255 255 255 255 255
+255 255 255 255 255 198 241 242 240 218 237 236 240 235 241 244 221 208 182 255 255 255 255 255
+255 255 255 255 255 198 243 243 188 154 183 158 166 140 185 198 231 219 177 255 255 255 255 255
+255 255 255 255 255 198 243 245 248 228 241 241 226 249 237 227 239 232 177 255 255 255 255 255
+255 255 255 255 255 198 244 246 213 172 163 149 171 200 167 149 242 239 177 255 255 255 255 255
+255 255 255 255 255 198 249 248 240 218 237 236 240 235 241 244 244 242 177 255 255 255 255 255
+255 255 255 255 255 198 249 251 188 155 184 158 166 140 185 198 246 244 177 255 255 255 255 255
+255 255 255 255 255 198 251 253 248 228 241 241 226 249 237 227 249 246 177 255 255 255 255 255
+255 255 255 255 255 196 253 252 252 252 252 251 251 250 250 249 249 248 175 255 255 255 255 255
+255 255 255 255 255 194 64 30 37 37 37 37 37 37 37 37 30 64 188 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
diff --git a/src/doxygen.bst b/templates/html/doxygen.bst
index c6ae7a8..c6ae7a8 100644
--- a/src/doxygen.bst
+++ b/templates/html/doxygen.bst
diff --git a/src/doxygen.css b/templates/html/doxygen.css
index 2f4bf70..1d9002f 100644
--- a/src/doxygen.css
+++ b/templates/html/doxygen.css
@@ -227,7 +227,7 @@ span.lineno a:hover {
background-color: #C8C8C8;
}
-div.ah {
+div.ah, span.ah {
background-color: black;
font-weight: bold;
color: #ffffff;
@@ -245,6 +245,15 @@ div.ah {
background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
}
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
+}
+
div.groupHeader {
margin-left: 16px;
margin-top: 12px;
@@ -773,7 +782,7 @@ div.directory {
width: 24px;
height: 18px;
margin-bottom: 4px;
- background-image:url('ftv2folderopen.png');
+ background-image:url('folderopen.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
@@ -784,7 +793,7 @@ div.directory {
width: 24px;
height: 18px;
margin-bottom: 4px;
- background-image:url('ftv2folderclosed.png');
+ background-image:url('folderclosed.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
@@ -795,7 +804,7 @@ div.directory {
width: 24px;
height: 18px;
margin-bottom: 4px;
- background-image:url('ftv2doc.png');
+ background-image:url('doc.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
diff --git a/templates/html/doxygen.luma b/templates/html/doxygen.luma
new file mode 100644
index 0000000..48d9435
--- /dev/null
+++ b/templates/html/doxygen.luma
@@ -0,0 +1,68 @@
+# doxygen logo
+# width & height
+104 31
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 91 91 91 91 32 32 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 255 255 255 255 32 32 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 253 253 253 253 32 32 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 251 251 251 251 32 32 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 249 249 249 249 32 32 249 249 249 249 32 32 32 32 32 32 249 249 249 249 32 32 32 32 32 32 249 249 249 249 32 32 32 32 32 32 32 32 32 32 249 249 249 32 32 32 32 32 249 249 249 249 32 32 32 32 32 32 32 32 32 32 249 249 249 249 249 249 32 32 32 32 32 32 32 249 249 249 249 249 32 32 32 32 32 249 32 32 32 32 32 255 255 255
+ 32 32 32 32 46 132 190 190 147 61 247 247 247 247 32 32 247 247 32 32 118 161 190 190 161 118 32 32 247 32 46 89 89 89 89 46 32 247 247 32 89 89 89 89 61 89 89 89 89 46 32 247 32 46 89 89 89 89 32 247 32 32 118 175 190 161 89 61 89 89 89 61 32 247 247 247 32 32 104 147 190 190 190 132 89 32 32 247 247 32 46 89 89 89 75 32 89 161 190 161 75 32 255 255
+ 32 32 32 74 230 244 244 244 244 244 244 244 244 244 32 32 244 32 74 216 244 244 244 244 244 244 216 74 32 244 32 187 244 244 244 159 32 244 32 117 244 244 244 230 46 173 244 244 244 131 32 244 32 131 244 244 244 173 32 32 46 173 244 244 244 244 244 230 244 244 244 131 32 244 244 32 74 202 244 244 244 244 244 244 244 173 46 32 244 32 89 244 244 244 187 145 244 244 244 244 244 89 32 255
+ 32 32 46 213 241 241 241 241 241 241 241 241 241 241 32 32 32 60 227 241 241 241 241 241 241 241 241 227 60 32 32 46 227 241 241 241 102 32 60 227 241 241 241 88 32 116 241 241 241 199 32 241 32 185 241 241 241 116 32 32 143 241 241 241 241 241 241 241 241 241 241 130 32 241 32 74 227 241 241 241 199 185 241 241 241 241 171 32 241 32 88 241 241 241 241 241 241 241 241 241 241 199 32 255
+ 32 32 128 237 237 237 223 128 87 128 237 237 237 237 32 32 32 182 237 237 237 196 100 100 196 237 237 237 182 32 237 32 100 237 237 237 223 59 196 237 237 237 141 32 32 46 237 237 237 237 59 32 46 237 237 237 237 46 32 59 237 237 237 237 169 87 87 182 237 237 237 128 32 237 32 196 237 237 237 87 32 32 73 223 237 237 237 73 32 32 87 237 237 237 237 223 182 223 237 237 237 237 46 32
+ 32 32 207 234 234 234 113 32 32 32 234 234 234 234 32 32 59 234 234 234 221 45 32 32 45 221 234 234 234 59 32 234 32 140 234 234 234 221 234 234 234 194 32 32 234 32 167 234 234 234 126 32 99 234 234 234 167 32 32 126 234 234 234 180 32 32 32 126 234 234 234 126 32 32 99 234 234 234 167 32 32 32 32 153 234 234 234 126 32 32 86 234 234 234 207 45 32 45 234 234 234 234 86 32
+ 32 45 231 231 231 218 32 32 32 32 231 231 231 231 32 32 98 231 231 231 165 32 231 231 32 165 231 231 231 98 32 231 32 45 191 231 231 231 231 231 218 72 32 231 231 32 98 231 231 231 165 32 151 231 231 231 112 32 32 165 231 231 231 112 32 231 32 125 231 231 231 125 32 32 138 231 231 231 178 125 125 125 125 178 231 231 231 178 32 32 85 231 231 231 178 32 255 32 191 231 231 231 85 32
+ 32 84 227 227 227 175 32 32 32 32 227 227 227 227 32 32 123 227 227 227 123 32 227 227 32 123 227 227 227 123 32 227 227 32 71 227 227 227 227 227 123 32 227 227 227 227 32 214 227 227 227 45 201 227 227 227 45 32 32 175 227 227 227 84 32 227 32 123 227 227 227 123 32 32 175 227 227 227 227 227 227 227 227 227 227 227 227 175 32 32 84 227 227 227 175 32 255 32 175 227 227 227 84 32
+ 32 83 223 223 223 172 32 32 32 32 223 223 223 223 32 32 121 223 223 223 121 32 223 223 32 121 223 223 223 121 32 223 223 223 32 172 223 223 223 210 45 32 223 223 223 223 32 147 223 223 223 134 223 223 223 147 32 223 32 172 223 223 223 83 32 223 32 121 223 223 223 121 32 32 172 223 223 223 223 223 223 223 223 223 223 223 223 172 32 32 83 223 223 223 172 32 255 32 172 223 223 223 83 32
+ 32 82 220 220 220 170 32 32 32 32 220 220 220 220 32 32 120 220 220 220 120 32 220 220 32 120 220 220 220 120 32 220 220 32 95 220 220 220 220 220 132 32 220 220 220 220 32 95 220 220 220 207 220 220 220 95 32 220 32 170 220 220 220 107 32 220 32 120 220 220 220 120 32 32 170 220 220 220 132 32 32 32 32 32 32 32 32 32 32 32 82 220 220 220 170 32 255 32 170 220 220 220 82 32
+ 32 57 216 216 216 216 32 32 32 32 216 216 216 216 32 32 81 216 216 216 167 32 216 216 32 155 216 216 216 81 32 216 32 57 204 216 216 216 216 216 216 93 32 216 216 216 216 32 204 216 216 216 216 216 204 32 216 216 32 118 216 216 216 167 32 32 32 130 216 216 216 118 32 32 118 216 216 216 191 32 32 216 216 216 32 32 44 57 32 32 81 216 216 216 167 32 255 32 167 216 216 216 81 32
+ 32 32 189 213 213 213 116 32 32 80 213 213 213 213 32 32 44 201 213 213 213 68 32 32 68 213 213 213 213 44 32 32 32 165 213 213 213 165 213 213 213 201 44 32 213 213 213 32 129 213 213 213 213 213 141 32 213 213 32 80 213 213 213 213 165 116 153 213 213 213 213 116 32 32 56 213 213 213 213 153 56 32 32 32 44 104 189 116 32 32 80 213 213 213 165 32 255 32 165 213 213 213 80 32
+ 32 32 139 210 210 210 210 174 174 210 210 210 210 210 32 32 32 127 210 210 210 198 127 127 198 210 210 210 127 32 210 32 115 210 210 210 174 44 139 210 210 210 163 32 32 210 210 32 68 210 210 210 210 210 91 32 210 210 210 32 174 210 210 210 210 210 210 210 210 210 210 115 32 210 32 127 210 210 210 210 210 174 163 163 210 210 210 115 32 32 79 210 210 210 163 32 255 32 163 210 210 210 79 32
+ 32 32 55 194 206 206 206 206 206 194 206 206 206 206 32 32 32 44 171 206 206 206 206 206 206 206 206 171 44 32 32 67 206 206 206 206 67 32 44 183 206 206 206 113 32 206 206 206 32 183 206 206 206 194 32 206 206 206 206 32 67 194 206 206 206 206 206 171 206 206 206 113 32 206 32 32 136 206 206 206 206 206 206 206 206 206 206 113 32 32 78 206 206 206 160 32 255 32 160 206 206 206 78 32
+ 32 32 32 100 192 203 203 203 157 55 203 203 203 203 32 32 203 32 43 135 203 203 203 203 203 203 135 43 32 32 43 180 203 203 203 112 32 203 32 66 203 203 203 203 66 32 203 203 32 157 203 203 203 135 32 203 203 203 203 203 32 43 112 157 157 123 55 112 203 203 203 112 32 203 203 32 32 78 146 203 203 203 203 203 203 169 123 55 32 32 78 203 203 203 157 32 255 32 157 203 203 203 78 32
+ 32 32 32 32 54 110 110 88 32 32 32 32 32 32 32 32 200 200 32 32 54 99 110 110 99 54 32 32 200 200 32 32 32 32 32 32 32 200 200 32 32 32 32 32 32 200 200 32 54 200 200 200 200 77 32 200 200 200 200 200 32 32 32 32 32 32 32 166 200 200 200 88 32 200 200 200 200 32 32 32 66 77 77 77 32 32 32 32 200 200 32 32 32 32 32 32 255 32 32 32 32 32 32 255
+ 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 198 198 198 198 32 32 32 32 32 32 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 32 109 198 198 198 176 32 198 198 198 198 198 32 98 121 76 32 32 54 109 198 198 198 198 43 32 198 198 198 198 198 198 198 32 32 32 32 198 198 198 198 198 198 198 198 198 198 198 198 255 255 255 255 255 255 255 255
+ 32 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 33 159 191 191 191 117 36 41 41 41 41 41 34 108 191 191 191 191 191 191 191 191 191 117 36 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 255
+ 32 41 97 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 78 38 64 190 192 192 192 66 66 41 41 85 128 65 34 107 190 192 192 192 192 192 192 192 139 48 39 41 41 105 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 97 41 255
+ 32 41 97 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 96 36 95 147 148 148 139 55 41 41 85 121 128 91 38 75 137 158 190 190 190 170 139 97 49 37 41 41 105 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 97 41 255
+ 32 41 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 41 36 45 45 45 48 38 41 41 76 76 76 76 76 37 34 42 33 33 33 39 48 59 41 41 41 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 41 255
+ 32 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 66 66 66 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 145 247 247 247 247 145 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 247 247 247 247 247 247 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 247 247 247 247 247 247 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 247 247 247 247 247 247 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 16 115 181 181 132 247 247 247 247 247 247 0 0 0 0 0 99 148 181 181 148 99 0 0 0 0 16 66 66 66 66 16 0 0 0 0 66 66 66 66 33 66 66 66 66 16 0 0 0 16 66 66 66 66 0 0 0 0 99 165 181 148 66 33 66 66 66 33 0 0 0 0 0 0 82 132 181 181 181 115 66 0 0 0 0 0 16 66 66 66 49 0 66 148 181 148 49 0 0 0
+ 0 0 0 129 247 247 247 247 247 247 247 247 247 247 247 0 0 0 112 214 247 247 247 247 247 247 214 112 0 16 247 247 247 247 247 247 46 0 0 145 247 247 247 247 247 247 247 247 247 247 16 0 16 247 247 247 247 247 66 0 63 165 247 247 247 247 247 247 247 247 247 247 33 0 0 0 96 198 247 247 247 247 247 247 247 165 63 0 0 16 247 247 247 247 247 145 247 247 247 247 247 145 0 0
+ 0 0 112 247 247 247 247 247 247 247 247 247 247 247 247 0 0 129 247 247 247 247 247 247 247 247 247 247 129 0 181 247 247 247 247 247 148 0 129 247 247 247 247 247 247 247 247 247 247 247 115 0 115 247 247 247 247 247 165 30 247 247 247 247 247 247 247 247 247 247 247 247 115 0 0 129 247 247 247 247 247 247 247 247 247 247 247 63 0 66 247 247 247 247 247 247 247 247 247 247 247 247 96 0
+ 0 16 247 247 247 247 247 247 247 247 247 247 247 247 247 0 79 247 247 247 247 247 247 247 247 247 247 247 247 79 79 247 247 247 247 247 247 129 247 247 247 247 247 247 129 247 247 247 247 247 198 0 181 247 247 247 247 247 99 145 247 247 247 247 247 247 247 247 247 247 247 247 115 0 96 247 247 247 247 247 247 247 247 247 247 247 247 165 0 66 247 247 247 247 247 247 247 247 247 247 247 247 198 0
+ 0 115 247 247 247 247 247 247 247 247 247 247 247 247 247 0 181 247 247 247 247 247 247 247 247 247 247 247 247 181 0 129 247 247 247 247 247 247 247 247 247 247 247 145 16 247 247 247 247 247 247 33 247 247 247 247 247 247 33 247 247 247 247 247 247 247 247 247 247 247 247 247 115 0 198 247 247 247 247 247 198 181 247 247 247 247 247 247 49 66 247 247 247 247 247 247 247 247 247 247 247 247 247 16
+ 0 214 247 247 247 247 247 129 66 247 247 247 247 247 247 33 247 247 247 247 247 247 96 96 247 247 247 247 247 247 33 0 145 247 247 247 247 247 247 247 247 247 198 30 0 165 247 247 247 247 247 115 247 247 247 247 247 165 115 247 247 247 247 247 181 66 115 247 247 247 247 247 115 82 247 247 247 247 247 165 115 115 148 247 247 247 247 247 115 66 247 247 247 247 247 247 181 247 247 247 247 247 247 66
+ 16 247 247 247 247 247 231 0 0 247 247 247 247 247 247 82 247 247 247 247 247 165 0 0 165 247 247 247 247 247 82 0 30 247 247 247 247 247 247 247 247 247 96 0 0 82 247 247 247 247 247 165 247 247 247 247 247 99 165 247 247 247 247 247 99 0 115 247 247 247 247 247 115 132 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181 66 247 247 247 247 247 181 0 198 247 247 247 247 247 66
+ 66 247 247 247 247 247 181 0 0 247 247 247 247 247 247 115 247 247 247 247 247 115 0 0 115 247 247 247 247 247 115 0 0 96 247 247 247 247 247 247 247 129 0 0 0 0 231 247 247 247 247 247 247 247 247 247 247 16 181 247 247 247 247 247 66 0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 66 247 247 247 247 247 181 0 0 247 247 247 247 247 247 115 247 247 247 247 247 115 0 0 115 247 247 247 247 247 115 0 0 0 181 247 247 247 247 247 247 30 0 0 0 0 148 247 247 247 247 247 247 247 247 247 148 0 181 247 247 247 247 247 66 0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 66 247 247 247 247 247 181 0 0 247 247 247 247 247 247 115 247 247 247 247 247 115 0 0 115 247 247 247 247 247 115 0 0 129 247 247 247 247 247 247 247 145 0 0 0 0 82 247 247 247 247 247 247 247 247 247 82 0 181 247 247 247 247 247 99 0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 181 79 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 33 247 247 247 247 247 247 14 0 247 247 247 247 247 247 66 247 247 247 247 247 181 0 0 165 247 247 247 247 247 66 0 79 247 247 247 247 247 247 247 247 247 129 0 0 0 0 231 247 247 247 247 247 247 247 231 0 0 115 247 247 247 247 247 181 115 165 247 247 247 247 247 115 115 247 247 247 247 247 214 63 0 0 0 16 112 247 247 33 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 214 247 247 247 247 247 198 198 247 247 247 247 247 247 16 247 247 247 247 247 247 132 132 247 247 247 247 247 247 16 14 181 247 247 247 247 247 247 247 247 247 247 79 0 0 0 132 247 247 247 247 247 247 247 148 0 0 66 247 247 247 247 247 247 247 247 247 247 247 247 247 115 33 247 247 247 247 247 247 247 198 181 181 247 247 247 247 115 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 148 247 247 247 247 247 247 247 247 247 247 247 247 247 0 132 247 247 247 247 247 247 247 247 247 247 247 247 145 0 145 247 247 247 247 247 247 247 247 247 247 247 181 14 0 0 49 247 247 247 247 247 247 247 82 0 0 0 198 247 247 247 247 247 247 247 247 247 247 247 247 115 0 145 247 247 247 247 247 247 247 247 247 247 247 247 247 115 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 46 247 247 247 247 247 247 247 247 247 247 247 247 247 0 30 247 247 247 247 247 247 247 247 247 247 247 247 30 112 247 247 247 247 247 247 96 247 247 247 247 247 247 145 0 0 0 214 247 247 247 247 247 231 0 0 0 0 96 247 247 247 247 247 247 247 247 247 247 247 247 115 0 30 148 247 247 247 247 247 247 247 247 247 247 247 247 115 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 0 129 247 247 247 247 247 247 247 247 247 247 247 247 0 0 96 247 247 247 247 247 247 247 247 247 247 96 16 247 247 247 247 247 247 145 0 112 247 247 247 247 247 247 49 0 0 181 247 247 247 247 247 148 0 0 0 0 0 129 247 247 247 247 247 247 247 247 247 247 247 115 0 0 46 148 247 247 247 247 247 247 247 247 247 247 247 33 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 0 0 129 247 247 247 247 181 145 247 247 247 247 145 0 0 0 46 148 247 247 247 247 247 247 148 46 0 0 112 214 247 247 247 145 14 0 0 145 247 247 247 247 145 0 0 33 247 247 247 247 247 247 66 0 0 0 0 0 99 132 115 181 181 132 198 247 247 247 247 247 82 0 0 0 0 66 165 247 247 247 247 247 247 198 132 33 0 0 145 247 247 247 181 79 0 79 181 247 247 247 145 0
+ 0 0 0 0 33 115 115 82 0 0 0 0 0 0 0 0 0 0 0 0 33 99 115 115 99 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 115 247 247 247 247 247 214 0 0 0 0 0 99 247 247 247 247 247 247 247 247 247 247 247 247 16 0 0 0 0 0 0 0 49 66 66 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 108 224 255 255 255 255 255 255 101 164 255 255 255 143 250 255 255 255 255 255 255 255 255 255 255 255 98 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165 0
+ 0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 136 251 255 255 255 255 255 255 101 130 255 255 255 153 250 255 255 255 255 255 255 255 255 255 255 121 98 189 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165 0
+ 0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 198 252 255 255 255 255 255 164 164 255 255 255 255 176 249 251 255 255 255 255 255 255 255 255 150 86 192 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165 0
+ 0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 164 198 255 255 255 255 201 133 164 255 255 255 255 255 145 203 255 255 255 255 255 255 255 117 79 194 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165 0
+ 0 66 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 73 73 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 47 70 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 66 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
diff --git a/src/dynsections.js b/templates/html/dynsections.js
index 85e1836..85e1836 100644
--- a/src/dynsections.js
+++ b/templates/html/dynsections.js
diff --git a/src/extsearch.js b/templates/html/extsearch.js
index 920c12b..47d2595 100644
--- a/src/extsearch.js
+++ b/templates/html/extsearch.js
@@ -11,7 +11,7 @@ function SearchBox(name, resultsPath, inFrame, label)
{
this.DOMSearchBox().className = 'MSearchBoxActive';
var searchField = this.DOMSearchField();
- if (searchField.value == this.searchLabel)
+ if (searchField.value == this.searchLabel)
{
searchField.value = '';
}
diff --git a/templates/html/folderclosed.luma b/templates/html/folderclosed.luma
new file mode 100644
index 0000000..594b36b
--- /dev/null
+++ b/templates/html/folderclosed.luma
@@ -0,0 +1,49 @@
+# folder closed icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 197 155 155 155 155 196 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 155 191 191 191 192 155 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 168 144 180 180 181 180 145 145 146 145 146 146 146 146 145 167 255 255 255 255
+255 255 255 255 147 225 226 226 225 226 225 221 221 219 215 214 212 211 213 145 255 255 255 255
+255 255 255 255 147 212 211 211 210 211 210 205 206 205 201 201 199 196 201 145 255 255 255 255
+255 255 255 255 146 204 203 204 203 203 202 200 200 197 197 196 195 194 196 145 255 255 255 255
+255 255 255 255 146 202 200 201 201 200 199 198 198 195 194 194 193 192 194 145 255 255 255 255
+255 255 255 255 145 200 196 196 196 195 195 193 192 192 190 189 189 189 191 143 255 255 255 255
+255 255 255 255 143 192 191 190 190 189 189 188 186 187 186 185 185 185 187 142 255 255 255 255
+255 255 255 255 142 186 184 183 182 183 182 183 180 181 181 181 181 181 182 141 255 255 255 255
+255 255 255 255 138 177 175 176 176 177 177 176 175 174 175 175 175 174 176 138 255 255 255 255
+255 255 255 255 138 173 169 170 168 170 169 170 170 169 171 171 171 171 174 137 255 255 255 255
+255 255 255 255 138 166 163 163 162 162 162 162 162 162 164 163 163 163 166 137 255 255 255 255
+255 255 255 255 137 124 124 124 125 124 124 124 125 125 124 124 125 124 125 138 255 255 255 255
+255 255 255 255 231 231 228 225 222 220 218 216 214 215 217 219 221 224 227 226 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/templates/html/folderopen.luma b/templates/html/folderopen.luma
new file mode 100644
index 0000000..0b89813
--- /dev/null
+++ b/templates/html/folderopen.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+24 22
+# luma data
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 228 195 193 190 187 218 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 195 215 221 225 225 178 176 176 175 176 178 180 255 255 255 255 255 255
+255 255 255 255 255 255 189 206 215 219 226 220 214 212 207 204 200 176 255 255 255 255 255 255
+255 255 255 255 168 154 153 153 152 152 151 149 150 150 149 147 146 145 145 167 255 255 255 255
+255 255 255 255 146 187 187 188 187 187 185 183 183 182 179 178 175 173 174 145 255 255 255 255
+255 255 255 255 146 180 182 182 181 181 179 178 176 174 173 171 169 170 168 144 255 255 255 255
+255 255 255 255 144 173 176 176 177 175 175 174 171 170 168 168 166 166 164 143 255 255 255 255
+255 255 255 255 142 168 170 171 170 170 169 168 166 166 165 163 163 164 162 142 255 255 255 255
+255 255 255 255 141 162 166 164 164 165 163 163 161 161 161 161 161 160 159 141 255 255 255 255
+255 255 255 255 138 157 159 159 158 158 158 157 157 157 157 156 157 157 155 138 255 255 255 255
+255 255 255 255 137 154 153 154 154 153 154 154 154 153 154 154 154 154 154 137 255 255 255 255
+255 255 255 255 137 154 154 154 154 154 154 154 153 154 154 153 153 153 154 137 255 255 255 255
+255 255 255 255 137 125 125 125 125 124 125 124 124 125 124 124 125 124 125 138 255 255 255 255
+255 255 255 255 212 209 204 199 193 190 186 183 180 181 185 188 192 197 202 203 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+# alpha data
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0
+ 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/src/footer.html b/templates/html/footer.html
index d2aa9e6..d2aa9e6 100644
--- a/src/footer.html
+++ b/templates/html/footer.html
diff --git a/src/header.html b/templates/html/header.html
index 70305df..70305df 100644
--- a/src/header.html
+++ b/templates/html/header.html
diff --git a/templates/html/htmlallmembers.tpl b/templates/html/htmlallmembers.tpl
new file mode 100644
index 0000000..98f88d6
--- /dev/null
+++ b/templates/html/htmlallmembers.tpl
@@ -0,0 +1,22 @@
+{% extend 'htmlbase.tpl' %}
+
+{% block title %}
+ <div class="headertitle"><div class="title">{{ compound.name }} {{ tr.memberList }}</div></div>
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<p>{{ tr.theListOfAllMembers }} <a class="el" href="{{ compound.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ compound.name }}</a>{{ tr.incInheritedMembers }}</p>
+<table class="directory">
+{% for mi in compound.allMembersList %}
+ <tr {% cycle 'class="even"' '' %}>
+ {# TODO: objective-C #}
+ <td>{% with obj=mi.member text=mi.ambiguityScope|append:mi.member.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </td>
+ </tr>
+{% endfor %}
+</table>
+</div>
+{% endblock %}
diff --git a/templates/html/htmlannotated.tpl b/templates/html/htmlannotated.tpl
new file mode 100644
index 0000000..dd72ac9
--- /dev/null
+++ b/templates/html/htmlannotated.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.classListDescription }}
+</div>
+{% indexentry nav name=tr.classes file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=classTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlbase.tpl b/templates/html/htmlbase.tpl
new file mode 100644
index 0000000..d394b45
--- /dev/null
+++ b/templates/html/htmlbase.tpl
@@ -0,0 +1,216 @@
+{% block header %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen {{ doxygen.version }}"/>
+<title>{{ config.PROJECT_NAME }}: {{ page.title }}</title>
+<link href="{{ page.relPath }}tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}jquery.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}dynsections.js"></script>
+{% if config.GENERATE_TREEVIEW %}
+<link href="{{ page.relPath }}navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}resize.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}navtreedata.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+{% endif %}
+{% if config.SEARCHENGINE %}
+<link href="{{ page.relPath }}search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}search/search.js"></script>
+ {% if config.SERVER_BASED_SEARCH %}
+<script type="text/javascript">
+ $(document).ready(function() {
+ if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }
+ });
+</script>
+<link rel="search" href="{{ page.relPath }}search-opensearch.php?v=opensearch.xml" type="application/opensearchdescription+xml" title="{{ config.PROJECT_NAME }}"/>
+ {% else %}
+<script type="text/javascript">
+ $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+ {% endif %}
+{% endif %}
+{% if config.USE_MATHJAX %}
+<script type="text/x-mathjax-config">
+ MathJax.Hub.Config({
+ extensions: ["tex2jax.js"], {# TODO: support MATHJAX_EXTENSIONS #}
+ jax: ["input/TeX","output/{{ config.MATHJAX_FORMAT }}"],
+});
+{# TODO: support MATHJAX_CODEFILE #}
+</script>
+<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+{% endif %}
+<link href="{{ page.relPath }}{{ config.HTML_STYLESHEET|default:'doxygen.css' }}" rel="stylesheet" type="text/css" />
+{% if config.HTML_EXTRA_STYLESHEET %}
+<link href="{{ page.relPath }}{{ config.HTML_EXTRA_STYLESHEET }}" rel="stylesheet" type="text/css" />
+{% endif %}
+</head>
+<body>
+{% endblock %}
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+{% block titlearea %}
+{% if config.PROJECT_NAME or config.PROJECT_BRIEF or config.PROJECT_LOGO or config.DISABLE_INDEX and config.SEARCHENGINE %}
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ {% if config.PROJECT_LOGO %}
+ <td id="projectlogo"><img alt="Logo" src="{{ page.relPath }}{{ config.PROJECT_LOGO|stripPath }}"/></td>
+ {% endif %}
+ <td style="padding-left: 0.5em;">
+ {% if config.PROJECT_NAME %}
+ <div id="projectname">{{ config.PROJECT_NAME }}
+ {% if config.PROJECT_NUMBER %}
+ <span id="projectnumber">{{ config.PROJECT_NUMBER }}</span>
+ {% endif %}
+ </div>
+ {% endif %}
+ {% if config.PROJECT_BRIEF %}
+ <div id="projectbrief">{{ config.PROJECT_BRIEF }}</div>
+ {% endif %}
+ </td>
+ {% if config.DISABLE_INDEX and config.SEARCHENGINE %}{# search box is part of title area #}
+ <td>
+ {% if config.SERVER_BASED_SEARCH %}
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <div class="left">
+ <form id="FSearchBox" action="{{ page.relPath }}{% if config.EXTERNAL_SEARCH %}search{{ doxygen.htmlFileExtension }}{% else %}search.php{% endif %}" method="get">
+ <img id="MSearchSelect" src="{{ page.relPath }}search/mag.png" alt=""/>
+ <input type="text" id="MSearchField" name="query" value="{{ tr.search }}" size="20" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"/>
+ </form>
+ </div>
+ <div class="right"></div>
+ </div>
+ {% else %}{# !SERVER_BASED_SEARCH #}
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="{{ page.relPath }}search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="{{ tr.search }}" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img
+ id="MSearchCloseImg" border="0" src="{{ page.relPath }}search/close.png"
+ alt=""/></a>
+ </span>
+ </div>
+ </td>
+ {% endif %}{# SERVER_BASED_SEARCH #}
+ {% endif %}{# DISABLE_INDEX and SEARCHENGINE #}
+ </tr>
+ </tbody>
+</table>
+</div>
+{% endif %}{# titlearea visible #}
+{% endblock %}
+<!-- end header part -->
+<!-- Generated by Doxygen {{ doxygen.version }} -->
+{% block search %}
+{% if config.SEARCHENGINE %}{# TODO: can't we move this to the header? #}
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "{{ page.relPath }}search",false,'{{ tr.search }}');
+</script>
+{% endif %}
+{% endblock %}
+
+{% block tabs %}
+{% if not config.DISABLE_INDEX %}
+{% include 'htmltabs.tpl' %}
+{% endif %}
+{% endblock %}
+
+{% block navpath %}
+{% endblock %}
+
+
+</div><!-- top -->
+{% block splitbar %}
+{% if config.GENERATE_TREEVIEW %}
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('{{ page.fileName }}{% if page_postfix %}{{ page_postfix }}{% endif %}{{ config.HTML_FILE_EXTENSION }}','{{ page.relPath }}');});
+</script>
+<div id="doc-content">
+{% endif %}
+{% endblock %}
+
+{% block searchInfo %}
+{% if config.SEARCHENGINE and not config.SERVER_BASED_SEARCH %}
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+{# TODO: get search categories dynamically, since we don't know them here #}
+</div>
+{% endif %}
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+{% endblock %}
+
+<div class="header">
+{% block title %}
+ <div class="headertitle"><div class="title">{{ page.title }}</div></div>
+{% endblock %}
+</div>
+
+{% block content %}
+{% endblock %}
+
+{% block endsplitbar %}
+{% if config.GENERATE_TREEVIEW %}
+</div><!-- content -->
+{% endif %}
+{% endblock %}
+
+{% block footer %}
+{% if config.GENERATE_TREEVIEW %}
+<div id="nav-path" class="navpath">{# id is needed for treeview function! #}
+ <ul>
+ {# navpath #}
+ <li class="footer">
+{% if config.HTML_TIMESTAMP %}
+{{ tr.generatedAt:doxygen.date,config.PROJECT_NAME }}
+{% else %}
+{{ tr.generatedby }}
+{% endif %}
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="{{ page.relPath }}doxygen.png" alt="doxygen"/></a> {{ doxygen.version }} </li>
+ </ul>
+</div>
+{% else %}
+ <hr class="footer"/><address class="footer"><small>
+{% if config.HTML_TIMESTAMP %}
+{{ tr.generatedAt:doxygen.date,config.PROJECT_NAME }}
+{% else %}
+{{ tr.generatedby }}
+{% endif %}
+&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="{{ page.relPath }}doxygen.png" alt="doxygen"/></a>
+ {{ doxygen.version }}
+ </small></address>
+{% endif %}
+</body>
+</html>
+{% endblock %}
diff --git a/templates/html/htmlclass.tpl b/templates/html/htmlclass.tpl
new file mode 100644
index 0000000..bb734b6
--- /dev/null
+++ b/templates/html/htmlclass.tpl
@@ -0,0 +1,452 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for class {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.classes %}
+ <a href="#nested-classes">{{ tr.classes }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.allMembersList %}
+ {% if not first %} &#124; {% endif %}
+ <a href="{{ compound.allMembersFileName }}{{ config.HTML_FILE_EXTENSION }}#all-members-list">{{ tr.listOfAllMembers }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% with memberListInfo=compound.publicTypes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.unoIDLServices %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.unoIDLInterfaces %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.signals %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicStaticMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicStaticAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedTypes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedStaticMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedStaticAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageTypes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageStaticMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageStaticAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.properties %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.events %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateTypes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateStaticMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateStaticAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.friends %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.related %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# includes #}
+ {% if compound.includeInfo %}
+ <div class="textblock">
+ {% with ii=compound.includeInfo %}
+ {% include 'htmlinclude.tpl' %}
+ {% endwith %}
+ </div>
+ {% endif %}
+{# inheritancegraph #}
+ {% if compound.hasInheritanceDiagram %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.inheritanceDiagramFor:compound.name }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.inheritanceDiagram }}
+ </div>
+ {# TODO: legend #}
+ {% else %}
+ {# textual inheritance list #}
+ {% if compound.inherits|length>0 %}
+ <p>
+ {% markers c in compound.inherits with tr.inheritsList:compound.inherits|length %}
+ {% with obj=c.class text=c.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {% if compound.inheritedBy|length>0 %}
+ <p>
+ {% markers c in compound.inheritedBy with tr.inheritedByList:compound.inheritedBy|length %}
+ {% with obj=c.class text=c.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {% endif %}
+{# collaborationgraph #}
+ {% if compound.hasCollaborationDiagram %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.collaborationDiagramFor:compound.name }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.collaborationDiagram }}
+ </div>
+ {% endif %}
+{# memberdecls #}
+ {# TODO: isSimple #}
+ {# nestedClasses #}
+ {% with list=compound.classes label='nested-classes' title=tr.classes local=1 %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# publicTypes #}
+ {% with memberListInfo=compound.publicTypes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# services #}
+ {% with memberListInfo=compound.unoIDLServices %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# interfaces #}
+ {% with memberListInfo=compound.unoIDLInterfaces %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicSlots #}
+ {% with memberListInfo=compound.publicSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# signals #}
+ {% with memberListInfo=compound.signals %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicMethods #}
+ {% with memberListInfo=compound.publicMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicStaticMethods #}
+ {% with memberListInfo=compound.publicStaticMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicAttributes #}
+ {% with memberListInfo=compound.publicAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicStaticAttributes #}
+ {% with memberListInfo=compound.publicStaticAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedtypes #}
+ {% with memberListInfo=compound.protectedTypes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedslots #}
+ {% with memberListInfo=compound.protectedSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedmethods #}
+ {% with memberListInfo=compound.protectedMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedstaticmethods #}
+ {% with memberListInfo=compound.protectedStaticMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedattributes #}
+ {% with memberListInfo=compound.protectedAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedstaticattributes #}
+ {% with memberListInfo=compound.protectedStaticAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packagetypes #}
+ {% with memberListInfo=compound.packageTypes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packagemethods #}
+ {% with memberListInfo=compound.packageMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packagestaticmethods #}
+ {% with memberListInfo=compound.packageStaticMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packageattributes #}
+ {% with memberListInfo=compound.packageAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packagestaticattributes #}
+ {% with memberListInfo=compound.packageStaticAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# properties #}
+ {% with memberListInfo=compound.properties %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# events #}
+ {% with memberListInfo=compound.events %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privatetypes #}
+ {% with memberListInfo=compound.privateTypes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privateslots #}
+ {% with memberListInfo=compound.privateSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privatemethods #}
+ {% with memberListInfo=compound.privateMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privatestaticmethods #}
+ {% with memberListInfo=compound.privateStaticMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privateattributes #}
+ {% with memberListInfo=compound.privateAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privatestaticattributes #}
+ {% with memberListInfo=compound.privateStaticAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# friends #}
+ {% with memberListInfo=compound.friends %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# related #}
+ {% with memberListInfo=compound.related %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# member groups #}
+ {% if compound.memberGroups %}
+ {% for memberListInfo in compound.memberGroups %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endfor %}
+ {% endif %}
+ {# additionalInheritedMembers #}
+ {% if compound.additionalInheritedMembers %}
+ <table class="memberdecls">
+ <tr class="heading"><td colspan="2"><h2 class="groupheader">
+ <a name="inherited"></a>{{ tr.additionalInheritedMembers }}
+ </h2></td></tr>
+ {# write additional inherited members #}
+ {% for info in compound.additionalInheritedMembers %}
+ {% include 'htmlmeminherit.tpl' %}
+ {% endfor %}
+ </table>
+ {% endif %}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {% if compound.anchor %}
+ <a name="{{ compound.anchor }}" id="{{ compound.anchor }}"></a>
+ {% else %}
+ <a name="details" id="details"></a>
+ {% endif %}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# template specifier #}
+ {% if compound.language=='cpp' and compound.templateDecls %}
+ <h3>{% spaceless %}
+ {% for targList in compound.templateDecls %}
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;<br/>
+ {% endfor %}
+ {% endspaceless %}
+ {{ compound.compoundType }}&#160;{{ compound.name }}
+ </h3>
+ {% endif %}
+ {# brief description #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {{ compound.details }}
+ </div>
+ {# type constraints #}
+ {% with obj=compound %}
+ {% include 'htmltypeconstraints.tpl' %}
+ {% endwith %}
+ {# examples #}
+ {% if compound.examples %}
+ <dl><dt><b>{{ tr.examples }}</b><dd>
+ {% markers obj in compound.examples with tr.exampleList:compound.examples|length %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </dd></dl>
+ {% endif %}
+ {# source definition #}
+ {% if compound.sourceDef %}
+ {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+{% endif %}
+{# member definitions #}
+ {# inline classes #}
+ {% if compound.classes %}
+ {# TODO write inlined simple classes: tr.classDocumentation / tr.typeDocumentation #}
+ {% endif %}
+ {# typedefs #}
+ {% with memberListInfo=compound.detailedTypedefs %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.detailedEnums %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# services #}
+ {% with memberListInfo=compound.detailedServices %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# interfaces #}
+ {% with memberListInfo=compound.detailedInterfaces %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# constructors #}
+ {% with memberListInfo=compound.detailedConstructors %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.detailedMethods %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# related #}
+ {% with memberListInfo=compound.detailedRelated %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.detailedVariables %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# properties #}
+ {% with memberListInfo=compound.detailedProperties %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# events #}
+ {% with memberListInfo=compound.detailedEvents %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+{# used files #}
+ {% if config.SHOW_USED_FILES %}
+ <hr/>
+ {{ compound.generatedFromFiles }}
+ <ul>
+ {% for file in compound.usedFiles %}
+ <li>{% if file.sourceFileName %}
+ <a class="el" href="{{ file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">
+ {% endif %}
+ {% if not file.sourceFileName and file.isLinkable %}
+ <a class="el" href="{{ file.fileName }}{{ config.HTML_FILE_EXTENSION }}">
+ {% endif %}
+ {% if config.FULL_PATH_NAMES %}
+ {{ file.name }}
+ {% else %}
+ {{ file.name|stripPath }}
+ {% endif %}
+ {% if file.sourceFileName or file.isLinkable %}
+ </a>
+ {% endif %}
+ {% if file.versionInfo %} {{ file.versionInfo }}{% endif %}
+ </li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlclasses.tpl b/templates/html/htmlclasses.tpl
new file mode 100644
index 0000000..803b1a9
--- /dev/null
+++ b/templates/html/htmlclasses.tpl
@@ -0,0 +1,49 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% indexentry nav name=tr.classIndex file=page.fileName anchor='' %}
+</div>
+{% with index=classIndex.list|alphaIndex:'name' %}
+ {# quick index at top #}
+ <div class="qindex">
+ {% for section in index %}
+ <a class="qindex" href="#letter_{{ section.label }}">{{ section.letter }}</a>
+ {% if not forloop.last %}
+ &#160;|&#160;
+ {% endif %}
+ {% endfor %}
+ </div>
+ {# multi column index #}
+ <div class="classindex" style="column-count:{{ config.COLS_IN_ALPHA_INDEX }};-moz-column-count:{{ config.COLS_IN_ALPHA_INDEX }};-webkit-column-count:{{ config.COLS_IN_ALPHA_INDEX}}">
+ {% for section in index %}
+ <ul>
+ {% for cls in section.items %}
+ <li>
+ <span class="ai">
+ {% if forloop.first %}
+ <a name="#letter_{{ section.label }}"></a>
+ <span class="ah">&#160;&#160;{{ section.letter }}&#160;&#160;</span><br/>
+ {% endif %}
+ {% with obj=cls text=cls.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </span>
+ </li>
+ {% endfor %}
+ </ul>
+ {% endfor %}
+ </div><!-- classindex -->
+ {# quick index at bottom #}
+ <div class="qindex">
+ {% for section in index %}
+ <a class="qindex" href="#letter_{{ section.label }}">{{ section.letter }}</a>
+ {% if not forloop.last %}
+ &#160;|&#160;
+ {% endif %}
+ {% endfor %}
+ </div>
+{% endwith %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlclmembers.tpl b/templates/html/htmlclmembers.tpl
new file mode 100644
index 0000000..29d495e
--- /dev/null
+++ b/templates/html/htmlclmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+ {{ tr.classMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlclmembersindex.tpl b/templates/html/htmlclmembersindex.tpl
new file mode 100644
index 0000000..2f15c12
--- /dev/null
+++ b/templates/html/htmlclmembersindex.tpl
@@ -0,0 +1,26 @@
+{% with page=namespaceMembersIndex %}
+ {# all members #}
+ {% with list=namespaceMembersIndex.all section='' template='htmlclmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with list=namespaceMembersIndex.functions section='_func' template='htmlclmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with list=namespaceMembersIndex.variables section='_vars' template='htmlclmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlclmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with list=namespaceMembersIndex.enums section='_enum' template='htmlclmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# enumValues #}
+ {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlclmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endwith %}
diff --git a/templates/html/htmldeclcomp.tpl b/templates/html/htmldeclcomp.tpl
new file mode 100644
index 0000000..4bd99d2
--- /dev/null
+++ b/templates/html/htmldeclcomp.tpl
@@ -0,0 +1,32 @@
+{# inputs: list, label, title, local #}
+{% if list %}
+ <table class="memberdecls"><tr class="heading"><td colspan="2">
+ <h2 class="groupheader"><a name="{{ label }}"></a>{{ title }}</h2></td></tr>
+ {% for nc in list %}
+ <tr class="memitem:{{ nc.anchor }}">
+ <td class="memItemLeft" align="right" valign="top">{% if nc.compoundType %}{{ nc.compoundType }}&#160;{% endif %}</td>
+ <td class="memItemRight" valign="bottom">
+ {% if local %}
+ {% with obj=nc text=nc.bareName %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% else %}
+ {% with obj=nc text=nc.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ </td></tr>
+ {# brief description #}
+ {% if nc.brief %}
+ <tr class="memdesc:{{ nc.anchor }}"><td class="mdescLeft">&#160;</td><td class="mdescRight">
+ {{ nc.brief }}
+ {% if nc.hasDetails %}
+ {# TODO: link to group if member is grouped #}
+ <a href="{{ page.relPath }}{{ nc.fileName }}{{ config.HTML_FILE_EXTENSION}}{% if nc.anchor %}#{{ nc.anchor }}{% endif %}">{{ tr.more }}</a>
+ {% endif %}
+ <br/></td></tr>
+ {% endif %}
+ <tr class="separator:{{ nc.anchor}}"><td class="memSeparator" colspan="2">&#160;</td></tr>
+ {% endfor %}
+ </table>
+{% endif %}
diff --git a/templates/html/htmldir.tpl b/templates/html/htmldir.tpl
new file mode 100644
index 0000000..7417f7b
--- /dev/null
+++ b/templates/html/htmldir.tpl
@@ -0,0 +1,78 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for directory {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+ {% if compound.navigationPath %}
+ <div id="nav-path" class="navpath">
+ <ul>
+ {% for obj in compound.navigationPath %}
+ <li class="navelem">
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+ {% endif %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.dirs %}
+ <a href="#subdirs">{{ tr.directories }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.files %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#files">{{ tr.files }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# dir graph #}
+{# TODO #}
+{# member declarations #}
+ {# directories #}
+ {% with list=compound.dirs label='subdirs' title=tr.directories local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# files #}
+ {% with list=compound.files, label='files' title=tr.files local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {# anchor #}
+ <a name="details" id="details"></a>
+ {# header #}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# brief #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {# details #}
+ {{ compound.details }}
+ </div>
+{% endif %}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmldirtree.tpl b/templates/html/htmldirtree.tpl
new file mode 100644
index 0000000..2fa266a
--- /dev/null
+++ b/templates/html/htmldirtree.tpl
@@ -0,0 +1,46 @@
+{# input tree with maxDepth, preferredDepth, and nodes #}
+<div class="directory">
+{# level selection #}
+{% if tree.maxDepth > 1 %}
+ <div class="levels">[{{ tr.detailLevel }}
+ {% range i from 1 to tree.maxDepth %}
+ <span onclick="javascript:toggleLevel({{ i }});">{{ i }}</span>
+ {% endrange %}
+ ]</div>
+{% endif %}
+{# the table with entries #}
+<table class="directory">
+{% recursetree tree.tree %}
+ {% indexentry nav name=node.name file=node.fileName anchor=node.anchor %}
+ {% spaceless %}
+ <tr id="row_{{ node.id }}" class="{% cycle 'even' 'odd' %}"{%if node.level>tree.preferredDepth %} style="display:none;"{% endif %}>
+ <td class="entry">
+ {% if node.is_leaf_node %}
+ <span style="width:{{ (node.level+1)*16 }}px;display:inline-block;">&#160;</span>
+ {% else %}
+ <span style="width:{{ (node.level)*16 }}px;display:inline-block;">&#160;</span>
+ <span id="arr_{{ node.id }}" class="arrow" onclick="toggleFolder('{{ node.id}}')">
+ {%if node.level+1<tree.preferredDepth %}&#9660;{% else %}&#9658;{% endif %}
+ </span>
+ {% endif %}
+ {% if node.namespace %}
+ <span class="icona"><span class="icon">N</span></span>
+ {% elif node.class %}
+ <span class="icona"><span class="icon">C</span></span>
+ {% elif node.dir %}
+ <span id="img_{{ node.id }}" class="iconf{%if node.level+1<tree.preferredDepth %}open{% else %}closed{% endif %}" onclick="toggleFolder('{{ node.id }}')">&#160;</span>
+ {% elif node.file %}
+ <span class="icondoc"></span>
+ {% endif %}
+ {% with obj=node text=node.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </td><td class="desc">{{ node.brief }}</td>
+ </tr>
+ {% endspaceless %}
+ {% opensubindex nav %}
+ {{ children }}
+ {% closesubindex nav %}
+{% endrecursetree %}
+</table>
+</div><!-- directory -->
diff --git a/templates/html/htmldyncontents.tpl b/templates/html/htmldyncontents.tpl
new file mode 100644
index 0000000..37411c3
--- /dev/null
+++ b/templates/html/htmldyncontents.tpl
@@ -0,0 +1,7 @@
+{# input: obj which should have dynSectionId attribute #}
+{% if config.HTML_DYNAMIC_SECTIONS %}
+ <div id="dynsection-{{ obj.dynSectionId }}-summary" class="dynsummary" style="display:block;"></div>
+ <div class="dyncontent" id="dynsection-{{ obj.dynSectionId }}-content" style="display:none;">
+{% else %}
+ <div class="dyncontent">
+{% endif %}
diff --git a/templates/html/htmldynheader.tpl b/templates/html/htmldynheader.tpl
new file mode 100644
index 0000000..405c053
--- /dev/null
+++ b/templates/html/htmldynheader.tpl
@@ -0,0 +1,7 @@
+{# input: obj which should have dynSectionId and relPath attributes #}
+{% if config.HTML_DYNAMIC_SECTIONS %}
+<div id="dynsection-{{ obj.dynSectionId }}" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><img
+ id="dynsection-{{ obj.dynSectionId }}-trigger" src="{{ obj.relPath }}closed.png" alt="+"/>
+{% else %}
+<div class="dynheader">
+{% endif %}
diff --git a/templates/html/htmlfile.tpl b/templates/html/htmlfile.tpl
new file mode 100644
index 0000000..67af096
--- /dev/null
+++ b/templates/html/htmlfile.tpl
@@ -0,0 +1,256 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for file {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.classes %}
+ <a href="#nested-classes">{{ tr.classes }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.namespaces %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#namespaces">{{ tr.namespaces }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.constantgroups %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#constantgroups">{{ tr.constantgroups }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% with memberListInfo=compound.macros %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# includes #}
+ {% if compound.includeList %}
+ <div class="textblock">
+ {% for ii in compound.includeList %}
+ {% include 'htmlinclude.tpl' %}
+ <br/>
+ {% endfor %}
+ </div>
+ {% endif %}
+{# include graph #}
+ {% if compound.hasIncludeGraph %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.includeDependencyGraph:compound.name }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.includeGraph }}
+ </div>
+ {% endif %}
+{# included by graph #}
+ {% if compound.hasIncludedByGraph %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.includedByDependencyGraph }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.includedByGraph }}
+ </div>
+ {% endif %}
+{# source link #}
+ {% if compound.hasSourceFile %}
+ <p><a href="{{ page.relPath }}{{ compound.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoSourceCode }}</a></p>
+ {% endif %}
+{# member declarations #}
+ {# classes #}
+ {% with list=compound.classes label='nested-classes' title=tr.classes local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# namespaces #}
+ {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# constantgroups #}
+ {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# defines #}
+ {% with memberListInfo=compound.macros %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# membergroups #}
+ {% if compound.memberGroups %}
+ {% for memberListInfo in compound.memberGroups %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endfor %}
+ {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {# anchor #}
+ <a name="details" id="details"></a>
+ {# header #}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# brief #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {# details #}
+ {{ compound.details }}
+ {# source definition #}
+ {% if compound.sourceDef %}
+ {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div>
+{% endif %}
+{# member definitions #}
+ {# inline classes #}
+ {% if compound.inlineClasses %}
+ <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+ {% for class in compound.inlineClasses %}
+ {# write anchor #}
+ <a class="anchor" id="{{ class.anchor }}"></a>
+ <div class="memitem">
+ <div class="memproto">
+ <table class="memname">
+ <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+ </table>
+ </div>
+ <div class="memdoc">
+ <div class="textblock">
+ {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+ {# template specifier #}
+ {% if class.language=='cpp' and class.templateDecls %}
+ <h3>{% spaceless %}
+ {% for targList in class.templateDecls %}
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;<br/>
+ {% endfor %}
+ {% endspaceless %}
+ {{ class.classType }}&#160;{{ class.name }}
+ </h3>
+ {% endif %}
+ {# brief description #}
+ {% if class.brief and config.REPEAT_BRIEF %}
+ <p>{{ class.brief }}</p>
+ {% endif %}
+ {# detailed docs #}
+ {{ class.details }}
+ {# source def #}
+ {% if class.sourceDef %}
+ {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div><!-- textblock -->
+ {# table with fields #}
+ <table class="fieldtable">
+ <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+ {% for member in class.members %}
+ <tr><td class="fieldtype">
+ <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+ </td>
+ <td class="fieldname">
+ {{ member.name }}
+ {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+ {{ member.bitfields }}
+ </td>
+ <td class="fielddoc">
+ {% if member.brief and not member.details %}{# only brief #}
+ {{ member.brief }}
+ {% else %} {# only details or both #}
+ {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+ {{ member.details }}
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </div><!-- memdoc -->
+ </div><!-- memitem -->
+ {% endfor %}
+ {% endif %}
+ {# defines #}
+ {% with memberListInfo=compound.detailedMacros %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.detailedTypedefs %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.detailedEnums %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.detailedFunctions %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.detailedVariables %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlfiles.tpl b/templates/html/htmlfiles.tpl
new file mode 100644
index 0000000..1871d4d
--- /dev/null
+++ b/templates/html/htmlfiles.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.fileListDescription }}
+</div>
+{% indexentry nav name=tr.fileList file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=fileTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlflmembers.tpl b/templates/html/htmlflmembers.tpl
new file mode 100644
index 0000000..e2c781a
--- /dev/null
+++ b/templates/html/htmlflmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+ {{ tr.fileMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlgraphhierarchy.tpl b/templates/html/htmlgraphhierarchy.tpl
new file mode 100644
index 0000000..2c2dde5
--- /dev/null
+++ b/templates/html/htmlgraphhierarchy.tpl
@@ -0,0 +1,13 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+<p><a href="hierarchy{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoTextualHierarchy }}</a></p>
+</div>
+<table border="0" cellspacing="10" cellpadding="0">
+{% for d in classHierarchy.diagrams %}
+<tr><td>{{ d.graph }}</td></tr>
+{% endfor %}
+</table>
+</div>
+{% endblock %}
diff --git a/templates/html/htmlhierarchy.tpl b/templates/html/htmlhierarchy.tpl
new file mode 100644
index 0000000..5d03755
--- /dev/null
+++ b/templates/html/htmlhierarchy.tpl
@@ -0,0 +1,17 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+<p>{{ tr.classHierarchyDescription }}</p>
+{% if config.HAVE_DOT and config.GRAPHICAL_HIERARCHY %}
+<p><a href="inherits{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoGraphicalHierarchy }}</a></p>
+{% endif %}
+</div>
+{% indexentry nav name=tr.classHierarchy file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=classHierarchy %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div>
+{% endblock %}
diff --git a/templates/html/htmlinclude.tpl b/templates/html/htmlinclude.tpl
new file mode 100644
index 0000000..24bfac6
--- /dev/null
+++ b/templates/html/htmlinclude.tpl
@@ -0,0 +1,27 @@
+{# input: ii with attributes (file,name,isImport,isLocal), compound with attribute language #}
+{% spaceless %}
+ {% if ii.file or ii.name %}
+ <tt>
+ {% if compound.language=='java' or compound.language=='idl' %}
+ import&#160;
+ {%else %}
+ {% if ii.isImport %}
+ #import&#160;
+ {% else %}
+ #include&#160;
+ {% endif %}
+ {%endif %}
+ {% if ii.isLocal %}"{% else %}&lt;{% endif %}
+ {% if ii.name %}
+ {% if ii.file %}
+ <a class="el" href="{{ ii.file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ ii.name }}</a>
+ {% else %}
+ {{ ii.name }}
+ {% endif %}
+ {% else %}
+ <a class="el" href="{{ ii.file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ ii.file.name }}</a>
+ {% endif %}
+ {% if ii.isLocal %}"{% else %}&gt;{% endif %}
+ </tt>
+ {% endif %}
+{% endspaceless %}
diff --git a/templates/html/htmlindexpages.tpl b/templates/html/htmlindexpages.tpl
new file mode 100644
index 0000000..65bf1b6
--- /dev/null
+++ b/templates/html/htmlindexpages.tpl
@@ -0,0 +1,19 @@
+{# inputs: list, section #}
+{% with letter='' %}
+ {# create full index page #}
+ {% create page.fileName|append:section|append:config.HTML_FILE_EXTENSION from template %}
+{% endwith %}
+{% if list|length>maxItemsForMultiPageList %}
+ {% opensubindex nav %}
+ {% with index=list|alphaIndex:'name' %}
+ {% for sect in index %}
+ {% with letter=sect.letter %}
+ {% set page_postfix=section|append:'_'|append:sect.label %}
+ {% indexentry nav name=letter file=page.fileName|append:page_postfix anchor='' %}
+ {# create index pages for all globals starting with a specific letter #}
+ {% create page.fileName|append:page_postfix|append:config.HTML_FILE_EXTENSION from template %}
+ {% endwith %}
+ {% endfor %}
+ {% endwith %}
+ {% closesubindex nav %}
+{% endif %}
diff --git a/templates/html/htmljsnavindex.tpl b/templates/html/htmljsnavindex.tpl
new file mode 100644
index 0000000..07a9efc
--- /dev/null
+++ b/templates/html/htmljsnavindex.tpl
@@ -0,0 +1,7 @@
+{# input idx, entries #}
+var NAVTREEINDEX{{ idx }} =
+{
+{% for entry in entries %}
+ "{{ entry.file }}{{ config.HTML_FILE_EXTENSION }}{% if entry.anchor %}#{{ entry.anchor }}{% endif %}":[{% for e in entry.path %}{% if not forloop.first %}{{ e.index }}{% if not forloop.last%},{% endif %}{% endif %}{% endfor %}]{% if not forloop.last %},{%endif %}
+{% endfor %}
+};
diff --git a/templates/html/htmljsnavtree.tpl b/templates/html/htmljsnavtree.tpl
new file mode 100644
index 0000000..a7ad88e
--- /dev/null
+++ b/templates/html/htmljsnavtree.tpl
@@ -0,0 +1,20 @@
+var NAVTREE =
+[
+{% recursetree index.nav %}
+ [ "{{ node.name }}", {% if node.file %}"{{ node.file }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}"{% else %}null{% endif %},{% if not node.is_leaf_node %} [
+ {{ children }}
+ ]{% else %} null{% endif %} ]{% if not node.last %},{% endif %}
+{% endrecursetree %}
+];
+
+var NAVTREEINDEX =
+[
+{% with navlist=index.nav|flatten|listsort:config.HTML_FILE_EXTENSION|prepend:'{{file}}'|append:'#{{anchor}}' navpages=navlist|paginate:250 %}
+ {% for page in navpages %}
+ "{{ page.0.file }}{{ config.HTML_FILE_EXTENSION }}{% if page.0.anchor %}#{{ page.0.anchor }}{% endif %}"{% if not forloop.last %},{%endif %}
+ {% with idx=forloop.counter0 entries=page %}
+ {% create forloop.counter0|prepend:'navtreeindex'|append:'.js' from 'htmljsnavindex.tpl' %}
+ {% endwith %}
+ {% endfor %}
+{% endwith %}
+];
diff --git a/templates/html/htmllayout.tpl b/templates/html/htmllayout.tpl
new file mode 100644
index 0000000..9b82238
--- /dev/null
+++ b/templates/html/htmllayout.tpl
@@ -0,0 +1,237 @@
+{% msg %}----- Start generating HTML output for {{ config.PROJECT_NAME }} from template ----{% endmsg %}
+
+{# ---- copy fixed resources to the output ----- #}
+
+{% resource 'doxygen.css' %}
+{% resource 'tabs.css' %}
+{% resource 'jquery.js' %}
+{% resource 'dynsections.js %}
+{% resource 'tab_a.lum' %}
+{% resource 'tab_b.lum' %}
+{% resource 'tab_h.lum' %}
+{% resource 'tab_s.lum' %}
+{% resource 'tab_h.lum' %}
+{% resource 'bc_s.luma' %}
+{% resource 'doxygen.luma' %}
+{% resource 'closed.luma' %}
+{% resource 'open.luma' %}
+{% resource 'bdwn.luma' %}
+{% resource 'sync_on.luma' %}
+{% resource 'sync_off.luma' %}
+
+{# navigation #}
+{% resource 'nav_f.lum' %}
+{% resource 'nav_g.png' %}
+{% resource 'nav_h.lum' %}
+{% resource 'navtree.css' %}
+
+{# general search resources #}
+{% resource 'search_l.png' as 'search/search_l.png' %}
+{% resource 'search_m.png' as 'search/search_m.png' %}
+{% resource 'search_r.png' as 'search/search_r.png' %}
+{% if config.DISABLE_INDEX %}
+ {% resource 'search_noidx.css' as 'search/search.css' %}
+{% else %}
+ {% resource 'search.css' as 'search/search.css' %}
+{% endif %}
+
+{% if config.SERVER_BASED_SEARCH %}
+ {# server side search resources #}
+ {% resource 'mag.png' as 'search/mag.png' %}
+ {% resource 'extsearch.js as 'search/search.js' %}
+ {% resource 'search_functions.php' as 'search/search_functions.php' %}
+ {% resource 'search_opensearch.php' as 'search/search_opensearch.php' %}
+{% else %}
+ {# client side search resources #}
+ {% resource 'mag_sel.png' as 'search/mag_sel.png' %}
+ {% resource 'close.png' as 'search/close.png' %}
+ {% resource 'search.js' as 'search/search.js' %}
+{% endif %}
+
+{# interactive SVGs #}
+{% resource 'svgpan.js' %}
+
+{# -------------------------------------------------- #}
+
+{# global constants #}
+{% set maxItemsForFlatList=2 %}
+{% set maxItemsForMultiPageList=4 %}
+
+{# global variable #}
+{% set page_postfix='' %}
+
+{# open the global navigation index #}
+{% indexentry nav name=tr.mainPage file='index' anchor='' %}
+{% opensubindex nav %}
+
+{# ----------- HTML DOCUMENTATION PAGES ------------ #}
+
+{# write main page documentation #}
+{% with page=mainPage compound=mainPage isMainPage=True %}
+ {% create mainPage.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpage.tpl' %}
+{% endwith %}
+
+{# write namespace documentation pages #}
+{% for compound in namespaceList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlnamespace.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# write class documentation pages #}
+{% for compound in classList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlclass.tpl' %}
+ {% if compound.allMembersList and not config.OPTIMIZE_OUTPUT_FOR_C %}
+ {% create compound.allMembersFileName|append:config.HTML_FILE_EXTENSION from 'htmlallmembers.tpl' %}
+ {% endif %}
+ {% endwith %}
+{% endfor %}
+
+{# write the file sources #}
+{% for compound in fileList %}
+ {% with page=compound %}
+ {# TODO: to deal with clang optimisation, we need to write the sources in a different order! #}
+ {# TODO: now writing sources has the side-effect of creating cross-references. Need to split that up! #}
+ {% if compound.hasSourceFile %}
+ {% create compound.sourceFileName|append:config.HTML_FILE_EXTENSION from 'htmlsource.tpl' %}
+ {% endif %}
+ {% endwith %}
+{% endfor %}
+
+{# write file documentation pages #}
+{% for compound in fileList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlfile.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# write related page documentation #}
+{% for compound in pageList %}
+ {% with page=compound isMainPage=False %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpage.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# write module documentation #}
+{% for compound in moduleList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlmodule.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# TODO: write example documentation #}
+
+{# ----------- INDEXES ------------ #}
+
+{# --- related pages --- #}
+{% if pageTree.tree %}
+ {% with page=pageTree %}
+ {% create pageTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpages.tpl' %}
+ {% endwith %}
+{% endif %}
+
+{# --- modules --- #}
+{% if moduleTree.tree %}
+ {% with page=moduleTree %}
+ {% create moduleTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlmodules.tpl' %}
+ {% endwith %}
+{% endif %}
+
+{# --- namespaces --- #}
+{% indexentry nav name=tr.namespaces file='' anchor='' %}
+{% opensubindex nav %}
+
+ {% if namespaceTree.tree %}
+ {% with page=namespaceTree %}
+ {% create namespaceTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlnamespaces.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# write symbol indices for namespace members #}
+ {% if namespaceMembersIndex.all %}
+ {% with page=namespaceMembersIndex scope='namespace' template='htmlnsmembers.tpl' %}
+ {% indexentry nav name=tr.namespaceMembers file=page.fileName anchor='' %}
+ {% include 'htmlmembersindex.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+{% closesubindex nav %}
+
+{# --- classes --- #}
+{% indexentry nav name=tr.classes file='' anchor='' %}
+{% opensubindex nav %}
+
+ {# write the annotated class list #}
+ {% if classTree.tree %}
+ {% with page=classTree %}
+ {% create classTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlannotated.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# write class index #}
+ {% if classIndex.list %}
+ {% with page=classIndex %}
+ {% create classIndex.fileName|append:config.HTML_FILE_EXTENSION from 'htmlclasses.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# TODO: write the class inheritance hierarchy #}
+ {% if classHierarchy.tree %}
+ {% with page=classHierarchy %}
+ {% create classHierarchy.fileName|append:config.HTML_FILE_EXTENSION from 'htmlhierarchy.tpl' %}
+ {% endwith %}
+ {% with page=classHierarchy %}
+ {% if config.HAVE_DOT and config.GRAPHICAL_HIERARCHY %}
+ {% create 'inherits'|append:config.HTML_FILE_EXTENSION from 'htmlgraphhierarchy.tpl' %}
+ {% endif %}
+ {% endwith %}
+ {% endif %}
+
+ {# write symbol indices for class members #}
+ {% if classMembersIndex.all %}
+ {% with page=classMembersIndex scope='class' template='htmlclmembers.tpl' %}
+ {% indexentry nav name=tr.classMembers file=page.fileName anchor='' %}
+ {% include 'htmlmembersindex.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+{% closesubindex nav %}
+
+{# --- files --- #}
+{% indexentry nav name=tr.files file='' anchor='' %}
+{% opensubindex nav %}
+
+ {# write the directory/file hierarchy #}
+ {% if fileTree.tree %}
+ {% with page=fileTree %}
+ {% create fileTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlfiles.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# write symbol indices for global namespace #}
+ {% if globalsIndex.all %}
+ {% with page=globalsIndex scope='file' template='htmlflmembers.tpl' %}
+ {% indexentry nav name=tr.fileMembers file=page.fileName anchor='' %}
+ {% include 'htmlmembersindex.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+{% closesubindex nav %}
+
+{# write directory documentation pages #}
+{% for compound in dirList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmldir.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# close the global navigation index #}
+{% closesubindex nav %}
+
+{# write the navigation tree data #}
+{% if config.GENERATE_TREEVIEW %}
+ {% create 'navtreedata.js' from 'htmljsnavtree.tpl' %}
+{% endif %}
+
+{% msg %}----- End generating HTML output for {{ config.PROJECT_NAME }} from template ----{% endmsg %}
diff --git a/templates/html/htmlmemberindex.tpl b/templates/html/htmlmemberindex.tpl
new file mode 100644
index 0000000..216dd31
--- /dev/null
+++ b/templates/html/htmlmemberindex.tpl
@@ -0,0 +1,37 @@
+{# input: list #}
+{% set singleList=(list|length<=maxItemsForFlatList) or (list|length>maxItemsForMultiPageList) %}
+{% if singleList %}
+<ul>
+{% endif %}
+{% with index=list|alphaIndex:'name' %}
+ {% for section in index %}
+ {% if not singleList or letter=='' or section.letter==letter %}
+ {% if not singleList %}
+ <a class="anchor" id="{{ section.label }}"></a><h3>- {{ section.letter }} -</h3>
+ <ul>
+ {% endif %}
+ {% for nameList in section.items|groupBy:'name' %}
+ {% spaceless %}
+ {% for item in nameList|listsort:'{{item.file.name}}' %}
+ {% if forloop.first %}
+ <li>{{ item.name }}{% if (item.isFunction or item.isSignal or item.isSlot) and not item.isObjCMethod %}(){% endif %}&#160;:&#160;
+ {% endif %}
+ {% with obj=item scope=item|get:scope text=scope.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% if not forloop.last %},&#160;
+ {% else %}
+ </li>
+ {% endif %}
+ {% endfor %}
+ {% endspaceless %}
+ {% endfor %}
+ {% if not singleList %}
+ </ul>
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+{% endwith %}
+{% if singleList %}
+</ul>
+{% endif %}
diff --git a/templates/html/htmlmembersindex.tpl b/templates/html/htmlmembersindex.tpl
new file mode 100644
index 0000000..ef891df
--- /dev/null
+++ b/templates/html/htmlmembersindex.tpl
@@ -0,0 +1,81 @@
+{# input: page #}
+{% opensubindex nav %}
+{# all members #}
+{% with list=page.all section='' %}
+ {% indexentry nav name=tr.all file=page.fileName|append:page_postfix anchor='' %}
+ {% include 'htmlindexpages.tpl' %}
+{% endwith %}
+{# functions #}
+{% if page.functions %}
+ {% set page_postfix='_func' %}
+ {% indexentry nav name=tr.functions file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.functions section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# variables #}
+{% if page.variables %}
+ {% set page_postfix='_vars' %}
+ {% indexentry nav name=tr.variables file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.variables section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# typedefs #}
+{% if page.typedefs %}
+ {% set page_postfix='_type' %}
+ {% indexentry nav name=tr.typedefs file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.typedefs section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# enums #}
+{% if page.enums %}
+ {% set page_postfix='_enum' %}
+ {% indexentry nav name=tr.enums file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.enums section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# enumValues #}
+{% if page.enumValues %}
+ {% set page_postfix='_eval' %}
+ {% indexentry nav name=tr.enumValues file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.enumValues section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# macros #}
+{% if page.macros %}
+ {% set page_postfix='_defs' %}
+ {% indexentry nav name=tr.macros file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.macros section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# properties #}
+{% if page.properties %}
+ {% set page_postfix='_prop' %}
+ {% indexentry nav name=tr.properties file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.properties section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# events #}
+{% if page.events %}
+ {% set page_postfix='_evnt' %}
+ {% indexentry nav name=tr.events file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.events section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# related #}
+{% if page.related %}
+ {% set page_postfix='_rela' %}
+ {% indexentry nav name=tr.related file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.related section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{% set page_postfix='' %}
+{% closesubindex nav %}
diff --git a/templates/html/htmlmembertabs.tpl b/templates/html/htmlmembertabs.tpl
new file mode 100644
index 0000000..93341a6
--- /dev/null
+++ b/templates/html/htmlmembertabs.tpl
@@ -0,0 +1,48 @@
+{# inputs page, list #}
+{% if not config.DISABLE_INDEX %}
+{# third row of tabs #}
+<div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li {% if section=='' %}class="current"{% endif %}><a href="{{ page.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.all }}</a></li>
+{% if page.functions %}
+ <li {% if section=='_func' %}class="current"{% endif %}><a href="{{page.fileName}}_func{{ config.HTML_FILE_EXTENSION }}">{{ tr.functions }}</a></li>
+{% endif %}
+{% if page.variables %}
+ <li {% if section=='_vars' %}class="current"{% endif %}><a href="{{page.fileName}}_vars{{ config.HTML_FILE_EXTENSION }}">{{ tr.variables }}</a></li>
+{% endif %}
+{% if page.typedefs %}
+ <li {% if section=='_type' %}class="current"{% endif %}><a href="{{page.fileName}}_type{{ config.HTML_FILE_EXTENSION }}">{{ tr.typedefs }}</a></li>
+{% endif %}
+{% if page.enums %}
+ <li {% if section=='_enum' %}class="current"{% endif %}><a href="{{page.fileName}}_enum{{ config.HTML_FILE_EXTENSION }}">{{ tr.enums }}</a></li>
+{% endif %}
+{% if page.enumValues %}
+ <li {% if section=='_eval' %}class="current"{% endif %}><a href="{{page.fileName}}_eval{{ config.HTML_FILE_EXTENSION }}">{{ tr.enumValues }}</a></li>
+{% endif %}
+{% if page.macros %}
+ <li {% if section=='_defs' %}class="current"{% endif %}><a href="{{page.fileName}}_defs{{ config.HTML_FILE_EXTENSION }}">{{ tr.macros }}</a></li>
+{% endif %}
+{% if page.properties %}
+ <li {% if section=='_prop' %}class="current"{% endif %}><a href="{{page.fileName}}_prop{{ config.HTML_FILE_EXTENSION }}">{{ tr.properties }}</a></li>
+{% endif %}
+{% if page.events %}
+ <li {% if section=='_evnt' %}class="current"{% endif %}><a href="{{page.fileName}}_evnt{{ config.HTML_FILE_EXTENSION }}">{{ tr.events }}</a></li>
+{% endif %}
+{% if page.related %}
+ <li {% if section=='_rela' %}class="current"{% endif %}><a href="{{page.fileName}}_rela{{ config.HTML_FILE_EXTENSION }}">{{ tr.related }}</a></li>
+{% endif %}
+ </ul>
+</div>
+{# forth row of tabs #}
+{% if list|length>maxItemsForMultiPageList %}
+<div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ {% with index=list|alphaIndex:'name' %}
+ {% for sect in index %}
+ <li {% if sect.letter==letter %}class="current"{% endif %}><a href="{{page.fileName}}{{section}}_{{sect.label}}{{ config.HTML_FILE_EXTENSION }}">{{ sect.letter }}</a></li>
+ {% endfor %}
+ {% endwith %}
+ </ul>
+</div>
+{% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemdecl.tpl b/templates/html/htmlmemdecl.tpl
new file mode 100644
index 0000000..6af75ce
--- /dev/null
+++ b/templates/html/htmlmemdecl.tpl
@@ -0,0 +1,214 @@
+{# inputs: member, inheritId=<string> anonymousNestingLevel=<int> #}
+{% if not member.isEnumValue %}
+ {# start member declaration #}
+ <tr class="memitem:{{ member.anchor}}{% if inheritId %} inherit {{ inheritId }}{% endif %}">
+ {% if member.isEnumeration %}
+ {% if anonymousNestingLevel>0 %}
+ <td class="memItemLeft">
+ {% else %}
+ <td class="memItemLeft" align="right" valign="top">
+ {% endif %}
+ {# write optional anchor #}
+ {% if not member.hasDetails %}
+ <a class="anchor" id="{% if member.anonymousMember %}{{ member.anonymousMember.anchor}}{% else %}{{ member.anchor }}{% endif %}"></a>
+ {% endif %}
+ {# write optional indent #}
+ {% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+ enum&#160;</td><td class="memTemplItemRight" valign="bottom">
+ {# write name #}
+ {% if not member.isAnonymous %}
+ {% with obj=member text=member.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% if member.enumBaseType %} : {{ member.enumBaseType }}{% endif %}
+ {% if member.enumValues|length>0 and config.ENUM_VALUES_PER_LINE>0 %}
+ {
+ {% for enumVal in member.enumValues %}
+ {% if member.enumValues|length>config.ENUM_VALUES_PER_LINE and forloop.counter0|divisibleby:config.ENUM_VALUES_PER_LINE %}
+ <br/>&#160;&#160;
+ {% endif %}
+ {% spaceless %}
+ {% with obj=enumVal text=enumVal.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% if enumVal.hasOneLineInitializer %}
+ {{ member.initializer }}
+ {% endif %}
+ {% if not forloop.last %},{% endif %}
+ {% endwith %}
+ {% endspaceless %}
+ {% endfor %}
+ {% if member.enumValues|length>config.ENUM_VALUES_PER_LINE %}
+ <br/>
+ {% endif %}
+ }
+ {% endif %}
+ {% else %}
+ {% if anonymousNestingLevel>0 or member.anonymousType %}
+ <td class="memItemLeft">
+ {% else %}
+ {% if member.templateArgs %}
+ <td class="memTemplParams" colspan="2">
+ {% else %}
+ <td class="memItemLeft" align="right" valign="top">
+ {% endif %}
+ {% endif %}
+ {# write optional anchor #}
+ {% if not member.hasDetails %}
+ <a class="anchor" id="{% if member.anonymousMember %}{{ member.anonymousMember.anchor}}{% else %}{{ member.anchor }}{% endif %}"></a>
+ {% endif %}
+ {# write optional indent #}
+ {% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+ {# write template list #}
+ {% if member.templateArgs and member.language=='cpp' %}
+ {% spaceless %}
+ template&lt;
+ {% for targ in member.templateArgs %}
+ {{ targ.type }} {{ targ.name }}{% if targ.defVal %} = {{ targ.defval }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ {% endspaceless %} &gt;
+ </td></tr><tr class="memitem:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="memTemplItemLeft" align="right" valign="top">
+ {% endif %}
+ {# write type #}
+ {% if member.anonymousType %}
+ {% with ctx=member.anonymousType anonymousNestingLevel=anonymousNestingLevel|add:1 %}
+ {{ ctx.compoundType }}
+ {% if ctx.bareName %}
+ &#160;<b>{{ ctx.bareName }}</b> {# TODO: associated documentation is lost! #}
+ {% endif %}
+ {</td></tr>
+ {# recursively write members that can appear inside the anonymous class/struct #}
+ {% with memberListInfo=ctx.publicTypes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.publicMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.publicStaticMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.publicAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.publicStaticAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedTypes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedStaticMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedStaticAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateTypes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateStaticMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateStaticAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ <tr class="memitem:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}">
+ <td class="memItemLeft" valign="top">{% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+ }
+ {% else %}
+ {% if member.isObjCMethod %}
+ {% if member.isStatic %}+&#160;{% else %}-&#160;{% endif %}
+ {% else %}
+ {{ member.declType }}
+ {% endif %}
+ {% endif %}
+ {% spaceless %}
+ &#160;
+ {% if anonymousNestingLevel>0 %}
+ &#160;&#160;
+ {% else %}
+ </td><td class="{% if member.templateArgs %}memTemplItemRight{% else %}memItemRight{% endif %}" valign="bottom">
+ {% endif %}
+ {% endspaceless %}
+ {# write name #}
+ {% if not member.isAnonymous %}
+ {% if member.anonymousMember %}
+ {% with obj=member.anonymousMember text=member.anonymousMember.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% else %}
+ {% with obj=member text=member.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% endif %}
+ {# write arguments #}
+ {% if not member.isObjCMethod %}
+ {{ member.declArgs }}
+ {% endif %}
+ {# write exceptions #}
+ {% if member.exception %}
+ {{ member.exception }}
+ {% endif %}
+ {# write bitfield #}
+ {% if member.bitfields %}
+ {{ member.bitfields }}
+ {% endif %}
+ {# write one-line initializer #}
+ {% if member.hasOneLineInitializer %}
+ {% if member.isDefine %}&#160;&#160;&#160;{% endif %}
+ {{ member.initializer }}
+ {% endif %}
+ {# write template alias #}
+ {% if member.templateAlias %}
+ {{ member.templateAlias }}
+ {% endif %}
+ {# write obj-c implementation #}
+ {% if member.isObjCMethod or member.isObjCProperty %}
+ {% if member.isImplementation %}
+ <code> [implementation]</code>
+ {% endif %}
+ {% endif %}
+ {# write getter/setter property #}
+ {% if member.isProperty and member.propertyAttrs|length>0 %}
+ <code> [
+ {% for attr in member.propertyAttrs %}
+ {{ attr }}{% if not forloop.last %},{% endif %}
+ {% endfor %}
+ ]</code>
+ {% endif %}
+ {# write event methods #}
+ {% if member.isEvent and member.eventAttrs|length>0 %}
+ <code> [
+ {% for attr in member.eventAttrs %}
+ {{ attr }}{% if not forloop.last %},{% endif %}
+ {% endfor %}
+ ]</code>
+ {% endif %}
+ {# end member declaration #}
+ {% endif %} {# member.isEnumeration #}
+ </td></tr>
+ {# brief description #}
+ {% if member.brief %}
+ <tr class="memdesc:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="mdescLeft">&#160;</td><td class="mdescRight">
+ {{ member.brief }}
+ {% if member.hasDetails %}
+ {# TODO: link to group if member is grouped #}
+ <a href="#{{ member.anchor }}">{{ tr.more }}</a>
+ {% endif %}
+ <br/></td></tr>
+ {% endif %}
+ <tr class="separator:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="memSeparator" colspan="2">&#160;</td></tr>
+{% endif %} {# not member.isEnumValue #}
diff --git a/templates/html/htmlmemdecls.tpl b/templates/html/htmlmemdecls.tpl
new file mode 100644
index 0000000..846c8f3
--- /dev/null
+++ b/templates/html/htmlmemdecls.tpl
@@ -0,0 +1,38 @@
+{# inputs: memberListInfo or memberGroupInfo #}
+{% if memberListInfo %}
+ {% if memberListInfo.members|length>0 or memberListInfo.memberGroups|length>0 %}
+ <table class="memberdecls">
+ {# section header #}
+ <tr class="heading"><td colspan="2"><h2 class="groupheader">{{ memberListInfo.title }}<a name="{{ memberListInfo.anchor }}"></a></h2></td></tr>
+ {% if memberListInfo.subtitle %}
+ <tr><td class="ititle" colspan="2">{{ memberListInfo.subtitle }}</td></tr>
+ {% endif %}
+ {# normal members #}
+ {% with inheritId='' anonymousNestingLevel=0 %}
+ {% for member in memberListInfo.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+ {% endwith %}
+ {# grouped members #}
+ {% for memgroup in memberListInfo.memberGroups %}
+ {% with memberListInfo=memgroup inheritId='' anonymousNestingLevel=0 %}
+ {% if memberListInfo.title!='[NOHEADER]' %}
+ <tr><td colspan="2"><div class="groupHeader">{{ memberListInfo.title }}</div></td></tr>
+ {% if memberListInfo.docs %}
+ <tr><td colspan="2"><div class="groupText">{{ memberListInfo.docs }}</div></td></tr>
+ {% endif %}
+ {% endif %}
+ {% for member in memberListInfo.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+ {% endwith %}
+ {% endfor %}
+ {# inherited members #}
+ {% if memberListInfo.inherited %}
+ {% for info in memberListInfo.inherited %}
+ {% include 'htmlmeminherit.tpl' %}
+ {% endfor %}
+ {% endif %}
+ </table>
+ {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemdef.tpl b/templates/html/htmlmemdef.tpl
new file mode 100644
index 0000000..c469f1f
--- /dev/null
+++ b/templates/html/htmlmemdef.tpl
@@ -0,0 +1,284 @@
+{# inputs: memberListInfo #}
+{% if memberListInfo %}
+ {% if memberListInfo.members|length>0 %}
+ <h2 class="groupheader">{{ memberListInfo.title }}</h2>
+ {% for member in memberListInfo.members %}
+ {% if member.hasDetails %} {# TODO: not the same as isDetailedSectionVisible! #}
+ {# TODO: handle enum + anonymous members #}
+ <a class="anchor" id="{{ member.anchor }}"></a> {# TODO: for namespace members written in a file we need to prepend file_ #}
+ <div class="memitem">
+ <div class="memproto">
+ {# write template declarations #}
+ {% if member.language=='cpp' and member.templateDecls|length>0 %}
+ {% for targList in member.templateDecls %}
+ {% spaceless %}
+ <div class="memtemplate">
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;
+ </div>
+ {% endspaceless %}
+ {% endfor %}
+ {% endif %}
+ {# start of labels if present #}
+ {% if member.labels|length>0 %}
+ <table class="mlabels"><tr><td class="mlabels-left">
+ {% endif %}
+ <table class="memname">
+ <tr><td class="memname">
+ {{ member.definition }}
+ {# write argument list #}
+ {# TODO: TCL #}
+ {% if member.hasParameterList %}
+ {% if member.isObjCMethod %}
+ </td><td></td>
+ {% for arg in member.parameters %}
+ {% if not forloop.first %}
+ <tr><td class="paramkey">{{ arg.namePart }}</td><td></td>
+ {% endif %}
+ <td class="paramtype">({{ arg.type }})&#160;</td><td class="paramname">
+ {% if arg.name or arg.type=='...' %}
+ <em>{% if not arg.name %}{{ arg.type }}{% else %}{{ arg.name }}{% endif %}</em>
+ {% endif %}
+ {% if not forloop.last %}
+ ,</td></tr>
+ {% endif %}
+ {% endfor %}
+ {% else %}
+ </td><td>(</td>
+ {% for arg in member.parameters %}
+ {% if member.isDefine %}
+ {% if not forloop.first %}
+ <tr><td class="paramkey"></td><td></td>
+ {% endif %}
+ <td class="paramtype"></td><td class="paramname">
+ {% spaceless %}
+ {% if arg.type %}
+ <em>{{ arg.type }}</em>
+ {% endif %}
+ {% if not forloop.last %}
+ ,</td></tr>
+ {% endif %}
+ {% endspaceless %}
+ {% else %} {# normal function/method #}
+ {% if forloop.first %}
+ <td class="paramtype">
+ {% endif %}
+ {% if arg.attrib %}{{ arg.attrib }} {% endif %}
+ {% if arg.type!='...' %}
+ {{ arg.type }}
+ {% endif %}
+ &#160;</td><td class="paramname">
+ {% if arg.name or arg.type=='...' %}
+ <em>{% if not arg.name %}{{ arg.type }}{% else %}{{ arg.name }}{% endif %}</em>
+ {% endif %}
+ {{ arg.array }}
+ {% if arg.defVal %} = {{ arg.defVal }}{% endif %}
+ {% if not forloop.last %}
+ ,</td></tr><tr><td class="paramkey"></td><td></td><td class="paramtype">
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% if member.parameters|length==0 %}
+ <td class="paramname">
+ {% endif %}
+ {% if member.parameters|length<2 %}
+ </td><td>)</td><td>
+ {% else %}
+ &#160;</td></tr>
+ <tr><td></td><td>)</td><td></td><td>
+ {% endif %}
+ {{ member.extraTypeChars }}
+ {% if member.hasConstQualifier %} const {% endif %}
+ {% if member.hasVolatileQualifier %} volatile {% endif %}
+ {{ member.trailingReturnType }}
+ {% endif %}
+ {% endif %}
+ {# one line initializer #}
+ {% if member.hasOneLineInitializer %}
+ {% if member.isDefine %}&#160;&#160;&#160;{% endif %}
+ {{ member.initializer }}
+ {% endif %}
+ {# exception list #}
+ {% if member.exception %}
+ {# TODO: special exception rendering for UNO IDL... #}
+ {{ member.exception }}
+ {% endif %}
+ </td></tr>
+ </table>
+ {# end of labels if present #}
+ {% if member.labels|length>0 %}
+ </td><td class="mlabels-right">{% spaceless %}
+ {% for label in member.labels %}
+ <span class="mlabel">{{ label }}</span>
+ {% endfor %}{% endspaceless %}
+ </td></tr></table>
+ {% endif %}
+ </div>
+ <div class="memdoc">
+ {# TODO: write group include #}
+ {# multi-line initializer #}
+ {% if member.hasMultiLineInitializer %}
+ <b>{% if member.isDefine %}{{ tr.defineValue }}{% else %}{{ tr.initialValue }}{% endif %}</b>
+ <div class="fragment">{{ member.initializerAsCode }}</div>
+ {% endif %}
+ {# brief description #}
+ {% if member.brief and config.REPEAT_BRIEF and config.BRIEF_MEMBER_DESC %}
+ <p>{{ member.brief }}</p>
+ {% endif %}
+ {# detailed description #}
+ {# TODO: VHDL #}
+ {{ member.details }}
+ {# inbody description #}
+ {{ member.inbodyDocs }}
+ {# argument list #}
+ {{ member.paramDocs }}
+ {# enum values #}
+ {% if member.isEnumeration and member.enumValues|length>0 %}
+ <table class="fieldtable">
+ <tr><th colspan="2">{{ tr.enumValues }}</th></tr>
+ {% for enumVal in member.enumValues %}
+ <tr><td class="fieldname"><em><a class="anchor" id="{{ enumVal.anchor}}"></a>{{ enumVal.name }}</em>&#160;</td>
+ <td class="fielddoc">{{ enumVal.brief }}{{ enumVal.details }}</td>
+ </tr>
+ {% endfor %}
+ </table>
+ {% endif %}
+ {# reimplements #}
+ {% if member.reimplements %}
+ <p>
+ {% markers mem in member.reimplements with tr.reimplements %}
+ {% with obj=mem text=mem.class.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {% if member.implements %}
+ <p>
+ {% markers mem in member.implements with tr.implements %}
+ {% with obj=mem text=mem.class.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {# reimplementedBy #}
+ {% if member.reimplementedBy %}
+ <p>
+ {% markers mem in member.reimplementedBy with tr.reimplementedBy:member.reimplementedBy|length %}
+ {% with obj=mem text=mem.class.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {% if member.implementedBy %}
+ <p>
+ {% markers mem in member.implementedBy with tr.implementedBy:member.implementedBy|length %}
+ {% with obj=mem text=mem.class.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {# category relation #}
+
+ {# TODO #}
+
+ {# examples #}
+ {% if member.examples %}
+ <dl><dt><b>{{ tr.examples }}</b><dd>
+ {% markers obj in member.examples with tr.exampleList:member.examples|length %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </dd></dl>
+ {% endif %}
+ {# type constraints #}
+ {% with obj=member %}
+ {% include 'htmltypeconstraints.tpl' %}
+ {% endwith %}
+ {# source def #}
+ {% if member.sourceDef %}
+ {% markers obj in member.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ {# source refs #}
+ {% if member.sourceRefs|length>0 %}
+ <p>
+ {% markers mem in member.sourceRefs with tr.sourceRefs:member.sourceRefs|length %}
+ {% if mem.sourceDef and config.REFERENCES_LINK_SOURCE %}
+ {% with obj=mem.sourceDef.0 text=mem.name|append:mem.functionQualifier %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% else %}
+ {% with obj=mem text=mem.name|append:mem.functionQualifier %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {# source refs by #}
+ {% if member.sourceRefBys|length>0%}
+ <p>
+ {% markers mem in member.sourceRefBys with tr.sourceRefBys:member.sourceRefBys|length %}
+ {% if mem.sourceDef and config.REFERENCES_LINK_SOURCE %}
+ {% with obj=mem.sourceDef.0 text=mem.name|append:mem.functionQualifier %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% else %}
+ {% with obj=mem text=mem.name|append:mem.functionQualifier %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {# inline code #}
+ {% if member.hasSources and config.INLINE_SOURCES %}
+ <div class="fragment">
+ {{ member.sourceCode }}
+ </div>
+ {% endif %}
+ {# call graph #}
+ {% if member.hasCallGraph %}
+ {% with obj=member %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.callGraph }}
+ </div>
+ {% with obj=member %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ member.callGraph }}
+ </div>
+ {% endif %}
+ {# caller graph #}
+ {% if member.hasCallerGraph %}
+ {% with obj=member %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.callerGraph }}
+ </div>
+ {% with obj=member %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ member.callerGraph }}
+ </div>
+ {% endif %}
+ </div>
+ </div>
+ {% endif %}
+ {% endfor %} {# for each member #}
+ {# TODO: write member group docs #}
+ {% endif %}
+{% endif %}
+
diff --git a/templates/html/htmlmeminherit.tpl b/templates/html/htmlmeminherit.tpl
new file mode 100644
index 0000000..830bf10
--- /dev/null
+++ b/templates/html/htmlmeminherit.tpl
@@ -0,0 +1,20 @@
+{# input: info (with .id .inheritedFrom and .members) #}
+<tr class="inherit_header {{ info.id }}">
+<td colspan="2" onclick="javascript:toggleInherit('{{ info.id }}')">
+<img src="{{ page.relPath }}closed.png" alt="-"/>&#160;
+ {% markers mark in info.inheritedFrom with tr.inheritedFrom %}
+ {% if markers.id==0 %} {# the title mark #}
+ {{ mark }}
+ {% endif %}
+ {% if markers.id==1 %} {# the class link mark #}
+ {% with obj=mark text=mark.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% endmarkers %}
+</td></tr>
+{% with inheritId=info.id anonymousNestingLevel=0 %}
+ {% for member in info.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+{% endwith %}
diff --git a/templates/html/htmlmemlist.tpl b/templates/html/htmlmemlist.tpl
new file mode 100644
index 0000000..30b4789
--- /dev/null
+++ b/templates/html/htmlmemlist.tpl
@@ -0,0 +1,15 @@
+{# input: memberListInfo #}
+{% if memberListInfo %}
+ {% if memberListInfo.members|length>0 or memberListInfo.memberGroups|length>0 %}
+ {% for member in memberListInfo.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+ {% for memgroup in memberListInfo.memberGroups %}
+ {% with memberListInfo=memgroup inheritId='' %}
+ {% for member in memberListInfo.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+ {% endwith %}
+ {% endfor %}
+ {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemsummary.tpl b/templates/html/htmlmemsummary.tpl
new file mode 100644
index 0000000..6b7481e
--- /dev/null
+++ b/templates/html/htmlmemsummary.tpl
@@ -0,0 +1,7 @@
+{% if memberListInfo %}
+ {% if memberListInfo.members|length>0 %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#{{ memberListInfo.anchor }}">{{ memberListInfo.title }}</a>
+ {% set first=False %}
+ {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmodule.tpl b/templates/html/htmlmodule.tpl
new file mode 100644
index 0000000..ff97b2c
--- /dev/null
+++ b/templates/html/htmlmodule.tpl
@@ -0,0 +1,310 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for module {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.modules %}
+ <a href="#modules">{{ tr.modules }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.dirs %}
+ <a href="#dirs">{{ tr.dirs }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.files %}
+ <a href="#files">{{ tr.files }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.classes %}
+ <a href="#classes">{{ tr.classes }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.namespaces %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#namespaces">{{ tr.namespaces }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.constantgroups %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#constantgroups">{{ tr.constantgroups }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% with memberListInfo=compound.macros %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.enumvalues %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.signals %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.events %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.properties %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.friends %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# group graph #}
+ {% if compound.hasGroupGraph %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.collaborationDiagramFor:compound.name }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.groupGraph }}
+ </div>
+ {% endif %}
+{# member declarations #}
+ {# modules #}
+ {% with list=compound.modules label='modules' title=tr.modules local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# dirs #}
+ {% with list=compound.dirs, label='dirs' title=tr.directories local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# files #}
+ {% with list=compound.files, label='files' title=tr.files local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# namespaces #}
+ {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# classes #}
+ {% with list=compound.classes label='classes' title=tr.classes local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# constantgroups #}
+ {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# defines #}
+ {% with memberListInfo=compound.macros %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# enum values #}
+ {% with memberListInfo=compound.enumvalues %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# signals #}
+ {% with memberListInfo=compound.signals %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# public slots #}
+ {% with memberListInfo=compound.publicSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protected slots #}
+ {% with memberListInfo=compound.protectedSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# private slots #}
+ {% with memberListInfo=compound.privateSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# private events #}
+ {% with memberListInfo=compound.events %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# private properties #}
+ {% with memberListInfo=compound.properties %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# private friends #}
+ {% with memberListInfo=compound.friends %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# membergroups #}
+ {% if compound.memberGroups %}
+ {% for memberListInfo in compound.memberGroups %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endfor %}
+ {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {# anchor #}
+ <a name="details" id="details"></a>
+ {# header #}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# brief #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {# details #}
+ {{ compound.details }}
+ {# source definition #}
+ {% if compound.sourceDef %}
+ {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div>
+{% endif %}
+{# member definitions #}
+ {# inline classes #}
+ {% if compound.inlineClasses %}
+ <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+ {% for class in compound.inlineClasses %}
+ {# write anchor #}
+ <a class="anchor" id="{{ class.anchor }}"></a>
+ <div class="memitem">
+ <div class="memproto">
+ <table class="memname">
+ <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+ </table>
+ </div>
+ <div class="memdoc">
+ <div class="textblock">
+ {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+ {# template specifier #}
+ {% if class.language=='cpp' and class.templateDecls %}
+ <h3>{% spaceless %}
+ {% for targList in class.templateDecls %}
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;<br/>
+ {% endfor %}
+ {% endspaceless %}
+ {{ class.classType }}&#160;{{ class.name }}
+ </h3>
+ {% endif %}
+ {# brief description #}
+ {% if class.brief and config.REPEAT_BRIEF %}
+ <p>{{ class.brief }}</p>
+ {% endif %}
+ {# detailed docs #}
+ {{ class.details }}
+ {# source def #}
+ {% if class.sourceDef %}
+ {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div><!-- textblock -->
+ {# table with fields #}
+ <table class="fieldtable">
+ <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+ {% for member in class.members %}
+ <tr><td class="fieldtype">
+ <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+ </td>
+ <td class="fieldname">
+ {{ member.name }}
+ {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+ {{ member.bitfields }}
+ </td>
+ <td class="fielddoc">
+ {% if member.brief and not member.details %}{# only brief #}
+ {{ member.brief }}
+ {% else %} {# only details or both #}
+ {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+ {{ member.details }}
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </div><!-- memdoc -->
+ </div><!-- memitem -->
+ {% endfor %}
+ {% endif %}
+ {# defines #}
+ {% with memberListInfo=compound.detailedMacros %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.detailedTypedefs %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.detailedEnums %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.detailedFunctions %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.detailedVariables %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlmodules.tpl b/templates/html/htmlmodules.tpl
new file mode 100644
index 0000000..f19c225
--- /dev/null
+++ b/templates/html/htmlmodules.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.modulesDescription }}
+</div>
+{% indexentry nav name=tr.modules file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=moduleTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnamespace.tpl b/templates/html/htmlnamespace.tpl
new file mode 100644
index 0000000..e21ba9d
--- /dev/null
+++ b/templates/html/htmlnamespace.tpl
@@ -0,0 +1,206 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for namespace {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.classes %}
+ <a href="#nested-classes">{{ tr.classes }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.namespaces %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#namespaces">{{ tr.namespaces }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.constantgroups %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#constantgroups">{{ tr.constantgroups }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# member declarations #}
+ {# classes #}
+ {% with list=compound.classes label='nested-classes' title=tr.classes local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# namespaces #}
+ {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# constantgroups #}
+ {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# membergroups #}
+ {% if compound.memberGroups %}
+ {% for memberListInfo in compound.memberGroups %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endfor %}
+ {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {# anchor #}
+ <a name="details" id="details"></a>
+ {# header #}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# brief #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {# details #}
+ {{ compound.details }}
+ {# source definition #}
+ {% if compound.sourceDef %}
+ {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div>
+{% endif %}
+{# member definitions #}
+ {# inline classes #}
+ {% if compound.inlineClasses %}
+ <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+ {% for class in compound.inlineClasses %}
+ {# write anchor #}
+ <a class="anchor" id="{{ class.anchor }}"></a>
+ <div class="memitem">
+ <div class="memproto">
+ <table class="memname">
+ <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+ </table>
+ </div>
+ <div class="memdoc">
+ <div class="textblock">
+ {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+ {# template specifier #}
+ {% if class.language=='cpp' and class.templateDecls %}
+ <h3>{% spaceless %}
+ {% for targList in class.templateDecls %}
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;<br/>
+ {% endfor %}
+ {% endspaceless %}
+ {{ class.classType }}&#160;{{ class.name }}
+ </h3>
+ {% endif %}
+ {# brief description #}
+ {% if class.brief and config.REPEAT_BRIEF %}
+ <p>{{ class.brief }}</p>
+ {% endif %}
+ {# detailed docs #}
+ {{ class.details }}
+ {# source def #}
+ {% if class.sourceDef %}
+ {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div><!-- textblock -->
+ {# table with fields #}
+ <table class="fieldtable">
+ <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+ {% for member in class.members %}
+ <tr><td class="fieldtype">
+ <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+ </td>
+ <td class="fieldname">
+ {{ member.name }}
+ {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+ {{ member.bitfields }}
+ </td>
+ <td class="fielddoc">
+ {% if member.brief and not member.details %}{# only brief #}
+ {{ member.brief }}
+ {% else %} {# only details or both #}
+ {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+ {{ member.details }}
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </div><!-- memdoc -->
+ </div><!-- memitem -->
+ {% endfor %}
+ {% endif %}
+ {# typedefs #}
+ {% with memberListInfo=compound.detailedTypedefs %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.detailedEnums %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.detailedFunctions %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.detailedVariables %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlnamespaces.tpl b/templates/html/htmlnamespaces.tpl
new file mode 100644
index 0000000..4767d13
--- /dev/null
+++ b/templates/html/htmlnamespaces.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.namespaceListDescription }}
+</div>
+{% indexentry nav name=tr.namespaceList file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=namespaceTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnavpath.tpl b/templates/html/htmlnavpath.tpl
new file mode 100644
index 0000000..5df06e1
--- /dev/null
+++ b/templates/html/htmlnavpath.tpl
@@ -0,0 +1,14 @@
+{# input: navpath which is a list of links #}
+{% if navpath %}
+ <div id="nav-path" class="navpath">
+ <ul>
+ {% for obj in navpath %}
+ <li class="navelem">
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+{% endif %}
diff --git a/templates/html/htmlnavtree.tpl b/templates/html/htmlnavtree.tpl
new file mode 100644
index 0000000..8da89a2
--- /dev/null
+++ b/templates/html/htmlnavtree.tpl
@@ -0,0 +1,22 @@
+var NAVTREE =
+[
+ [ "{% if mainPage.title %}mainPage.title|jsstring{% else %}{{ tr.mainPage }}{% endif %}",
+ "index{{ config.HTML_FILE_EXTENSION }}",
+ ]
+];
+
+var NAVTREEINDEX =
+[
+{# write first entry of each sub index #}
+{% for entries in navTree.subindices %}
+ "{{ entries[0].url }}"{% if not forloop.last %},{% endif %}
+{% endfor %}
+ ]
+];
+
+{# write all sub indices #}
+{% for entries in navTree.subindices %}
+ {% with idx=forloop.counter0 %}
+ {% create idx|prepend:'navtreeindex'|append:'.js' from htmlnavindex.tpl' %}
+ {% endwith %}
+{% endfor %}
diff --git a/templates/html/htmlnsmembers.tpl b/templates/html/htmlnsmembers.tpl
new file mode 100644
index 0000000..3f4c0bd
--- /dev/null
+++ b/templates/html/htmlnsmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl' %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+ {{ tr.namespaceMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnsmembersindex.tpl b/templates/html/htmlnsmembersindex.tpl
new file mode 100644
index 0000000..dc3bfd4
--- /dev/null
+++ b/templates/html/htmlnsmembersindex.tpl
@@ -0,0 +1,26 @@
+{% with page=namespaceMembersIndex %}
+ {# all members #}
+ {% with list=namespaceMembersIndex.all section='' template='htmlnsmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with list=namespaceMembersIndex.functions section='_func' template='htmlnsmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with list=namespaceMembersIndex.variables section='_vars' template='htmlnsmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlnsmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with list=namespaceMembersIndex.enums section='_enum' template='htmlnsmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+ {# enumValues #}
+ {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlnsmembers.tpl' %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endwith %}
diff --git a/templates/html/htmlobjlink.tpl b/templates/html/htmlobjlink.tpl
new file mode 100644
index 0000000..51a281f
--- /dev/null
+++ b/templates/html/htmlobjlink.tpl
@@ -0,0 +1,6 @@
+{# inputs: obj (with .isLinkable .anchor .fileName), text, config, page.relPath #}
+{% if obj.isLinkable %}
+<a class="el" href="{{ page.relPath }}{{ obj.fileName }}{{ config.HTML_FILE_EXTENSION }}{% if obj.anchor %}#{{ obj.anchor }}{% endif %}">{{ text }}</a>
+{% else %}
+<b>{{ text }}</b>
+{% endif %}
diff --git a/templates/html/htmlpage.tpl b/templates/html/htmlpage.tpl
new file mode 100644
index 0000000..3882989
--- /dev/null
+++ b/templates/html/htmlpage.tpl
@@ -0,0 +1,58 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for page {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{% if isMainPage and config.DISABLE_INDEX %}
+{# no other navigation means, so we produce the links on the main page #}
+<ul>
+{% if pageTree.tree %}
+ <li><a href="{{ page.relPath }}pages{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.pages }}</span></a></li>
+{% endif %}
+{% if moduleTree.tree %}
+ <li><a href="{{ page.relPath }}modules{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.modules }}</span></a></li>
+{% endif %}
+{% if namespaceList %}
+ <li><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaces }}</span></a>
+ <ul>
+ <li><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceList }} </span></a></li>
+ <li><a href="{{ page.relPath }}namespacemembers{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceMembers }}</span></a></li>
+ </ul>
+ </li>
+{% endif %}
+{% if classList %}
+ <li><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classes }}</span></a>
+ <ul>
+ <li><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classList }}</span></a></li>
+ <li><a href="{{ page.relPath }}classes{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classIndex }}</span></a></li>
+ {% if classHierarchy.tree %}
+ <li><a href="{{ page.relPath }}hierarchy{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classHierarchy }} </span></a></li>
+ {% endif %}
+ {% if classMembersIndex.all %}
+ <li><a href="{{ page.relPath }}functions{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classMembers }} </span></a></li>
+ {% endif %}
+ </ul>
+ </li>
+{% endif %}
+{% if fileList %}
+ <li><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.files }}</span></a>
+ <ul>
+ <li><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileList }} </span></a></li>
+ <li><a href="{{ page.relPath }}globals{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileMembers }} </span></a></li>
+ </ul>
+ </li>
+{% endif %}
+{% if exampleList.items %}
+ <li><a href="{{ page.relPath }}examples{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.examples }}</span></a>
+{% endif %}
+</ul>
+{% endif %}
+{{ compound.details }}
+</div>
+{% endblock %}
diff --git a/templates/html/htmlpages.tpl b/templates/html/htmlpages.tpl
new file mode 100644
index 0000000..cc00bf5
--- /dev/null
+++ b/templates/html/htmlpages.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.relatedPagesDesc }}
+</div>
+{% indexentry nav name=tr.pages file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=pageTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlsource.tpl b/templates/html/htmlsource.tpl
new file mode 100644
index 0000000..cb4e65d
--- /dev/null
+++ b/templates/html/htmlsource.tpl
@@ -0,0 +1,37 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML source code for file {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+ {% if compound.navigationPath %}
+ <div id="nav-path" class="navpath">
+ <ul>
+ {% for obj in compound.navigationPath %}
+ <li class="navelem">
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+ {% endif %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="headertitle"><div class="title">{{ compound.name }}
+ {% if compound.version %} ({{ compound.version }}){% endif %}
+ </div></div>
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+<a href="{{ page.relPath }}{{ compound.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoDocumentation }}</a>
+</div>
+<div class="fragment">
+{{ compound.sources }}
+</div><!-- fragment -->
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmltabs.tpl b/templates/html/htmltabs.tpl
new file mode 100644
index 0000000..9ce8c44
--- /dev/null
+++ b/templates/html/htmltabs.tpl
@@ -0,0 +1,96 @@
+{# main navigation row #}
+<div id="navrow1" class="tabs">
+ <ul class="tablist">
+ {# main tab #}
+ <li{% if page.highlight=='main' %} class="current"{% endif %}><a href="{{ page.relPath }}index{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.mainPage|nowrap }}</span></a></li>
+ {# pages tab #}
+ {% if pageTree.tree %}
+ <li{% if page.highlight=='pages' %} class="current"{% endif %}><a href="{{ page.relPath }}pages{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.pages|nowrap }}</span></a></li>
+ {% endif %}
+ {# modules tab #}
+ {% if moduleTree.tree %}
+ <li{% if page.highlight=='modules' %} class="current"{% endif %}><a href="{{ page.relPath }}modules{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.modules|nowrap }}</span></a></li>
+ {% endif %}
+ {# namespaces tab #}
+ {% if namespaceList %}
+ <li{% if page.highlight=='namespaces' %} class="current"{% endif %}><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaces|nowrap }}</span></a></li>
+ {% endif %}
+ {# classes tab #}
+ {% if classList %}
+ <li{% if page.highlight=='classes' %} class="current"{% endif %}><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classes|nowrap }}</span></a></li>
+ {% endif %}
+ {# files tab #}
+ {% if fileList %}
+ <li{% if page.highlight=='files' %} class="current"{% endif %}><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.files|nowrap }}</span></a></li>
+ {% endif %}
+ {# examples tab #}
+ {% if exampleList.items %}
+ <li{% if page.highlight=='examples' %} class="current"{% endif %}><a href="{{ page.relPath }}examples{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.examples|nowrap }}</span></a></li>
+ {% endif %}
+ {# search box #}
+ {% if config.SEARCHENGINE %}
+ {% if config.SERVER_BASED_SEARCH %}
+ {# server based search box #}
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <div class="left">
+ <form id="FSearchBox" action="{{ page.relPath }}search{% if config.EXTERNAL_SEARCH %}{{ config.HTML_FILE_EXTENSION }}{% else %}.php{% endif %}" method="get">
+ <img id="MSearchSelect" src="{{ page.relPath }}search/mag.png" alt=""/>
+ {% if page.highlight!='search' %}
+ <input type="text" id="MSearchField" name="query" value="{{ tr.search }}" size="20" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"/>
+ </form>
+ </div><div class="right"></div>
+ </div>
+ </li>
+ {% endif %}
+ {% else %}
+ {# client based search box #}
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="{{ page.relPath }}search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="{{ tr.search }}" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"
+ onkeyup="searchBox.OnSearchFieldChange(event)"/>
+ </span><span class="right">
+ <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img
+ id="MSearchCloseImg" border="0" src="{{ page.relPath }}search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ {% endif %}
+ {% endif %}
+ </ul>
+</div>
+{# second navigation row #}
+<div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ {# namespace subtabs #}
+ {% if page.highlight=='namespaces' %}
+ <li{% if page.subhighlight=='namespacelist' %} class="current"{% endif %}><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceList|nowrap }}</span></a></li>
+ <li{% if page.subhighlight=='namespacemembers' %} class="current"{% endif %}><a href="{{ page.relPath }}namespacemembers{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceMembers|nowrap }}</span></a></li>
+ {% endif %}
+ {# class subtabs #}
+ {% if page.highlight=='classes' %}
+ <li{% if page.subhighlight=='classlist' %} class="current"{% endif %}><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classList|nowrap }}</span></a></li>
+ <li{% if page.subhighlight=='classindex' %} class="current"{% endif %}><a href="{{ page.relPath }}classes{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classIndex|nowrap }}</span></a></li>
+ {% if classHierarchy.tree %}
+ <li{% if page.subhighlight=='classhierarchy' %} class="current"{% endif %}><a href="{{ page.relPath }}hierarchy{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classHierarchy|nowrap }}</span></a></li>
+ {% endif %}
+ {% if classMembersIndex.all %}
+ <li{% if page.subhighlight=='classmembers' %} class="current"{% endif %}><a href="{{ page.relPath }}functions{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classMembers|nowrap }}</span></a></li>
+ {% endif %}
+ {% endif %}
+ {# file subtabs #}
+ {% if page.highlight=='files' %}
+ <li{% if page.subhighlight=='filelist' %} class="current"{% endif %}><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileList|nowrap }}</span></a></li>
+ <li{% if page.subhighlight=='filemembers' %} class="current"{% endif %}><a href="{{ page.relPath }}globals{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileMembers|nowrap }}</span></a></li>
+ {% endif %}
+ </ul>
+</div>
diff --git a/templates/html/htmltypeconstraints.tpl b/templates/html/htmltypeconstraints.tpl
new file mode 100644
index 0000000..12c9581
--- /dev/null
+++ b/templates/html/htmltypeconstraints.tpl
@@ -0,0 +1,13 @@
+{# obj should be a class or member #}
+{% if obj.typeConstraints|length>0 %}
+ <div class="typecontraint">
+ <dl><dt><b>{{ tr.typeConstraints }}</b></dt>
+ <dd><table border="0" cellspacing="2" cellpadding="0">
+ {% for arg in obj.typeConstraints %}
+ <tr><td valign="top"><em>{{ arg.name }}</em></td>
+ <td>&#160;</td><td valign="top"><em>{{ arg.type }}</em></td>
+ <td>&#160;</td><td>{{ arg.docs }}</td>
+ </tr>
+ {% endfor %}
+ </table></dl></div>
+{% endif %}
diff --git a/templates/html/jquery.js b/templates/html/jquery.js
new file mode 100644
index 0000000..1f4d0b4
--- /dev/null
+++ b/templates/html/jquery.js
@@ -0,0 +1,68 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * 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: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},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(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},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(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.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(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.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 bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.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(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*!
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}})); \ No newline at end of file
diff --git a/templates/html/mag.png b/templates/html/mag.png
new file mode 100644
index 0000000..492f71f
--- /dev/null
+++ b/templates/html/mag.png
Binary files differ
diff --git a/templates/html/mag_sel.png b/templates/html/mag_sel.png
new file mode 100644
index 0000000..81f6040
--- /dev/null
+++ b/templates/html/mag_sel.png
Binary files differ
diff --git a/templates/html/nav_f.lum b/templates/html/nav_f.lum
new file mode 100644
index 0000000..ab84773
--- /dev/null
+++ b/templates/html/nav_f.lum
@@ -0,0 +1,11 @@
+# function header
+# width & height
+1 56
+# luma data
+248 247 246 245 244 243 242 241
+240 239 238 237 236 235 234 233
+232 231 230 229 228 223 223 223
+223 223 223 223 223 223 223 223
+224 224 224 224 225 225 225 225
+225 226 226 226 227 227 227 227
+228 228 228 229 229 229 229 229
diff --git a/templates/html/nav_g.png b/templates/html/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/templates/html/nav_g.png
Binary files differ
diff --git a/templates/html/nav_h.lum b/templates/html/nav_h.lum
new file mode 100644
index 0000000..d30ee08
--- /dev/null
+++ b/templates/html/nav_h.lum
@@ -0,0 +1,6 @@
+# shadowed header
+# width & height
+1 12
+# luma data
+255 240 241 242 243 244
+245 246 247 248 249 250
diff --git a/src/navtree.css b/templates/html/navtree.css
index a2ae30a..c618811 100644
--- a/src/navtree.css
+++ b/templates/html/navtree.css
@@ -94,7 +94,7 @@
}
.ui-resizable-e {
- background:url("ftv2splitbar.png") repeat scroll right center transparent;
+ background:url("splitbar.png") repeat scroll right center transparent;
cursor:e-resize;
height:100%;
right:0;
diff --git a/src/navtree.js b/templates/html/navtree.js
index 3914be8..9df45a7 100644
--- a/src/navtree.js
+++ b/templates/html/navtree.js
@@ -105,7 +105,7 @@ function createIndent(o,domNode,node,level)
node.expandToggle.onclick = function() {
if (node.expanded) {
$(node.getChildrenUL()).slideUp("fast");
- node.plus_img.src = node.relpath+"ftv2pnode.png";
+ node.plus_img.src = node.relpath+"arrowright.png";
node.expanded = false;
} else {
expandNode(o, node, false, false);
@@ -113,7 +113,7 @@ function createIndent(o,domNode,node,level)
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
- imgNode.src = node.relpath+"ftv2pnode.png";
+ imgNode.src = node.relpath+"arrowright.png";
} else {
var span = document.createElement("span");
span.style.display = 'inline-block';
@@ -269,9 +269,9 @@ function expandNode(o, node, imm, showRoot)
$(node.getChildrenUL()).slideDown("fast");
}
if (node.isLast) {
- node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+ node.plus_img.src = node.relpath+"arrowdown.png";
} else {
- node.plus_img.src = node.relpath+"ftv2mnode.png";
+ node.plus_img.src = node.relpath+"arrowdown.png";
}
node.expanded = true;
}
@@ -341,11 +341,7 @@ function showNode(o, node, index, hash)
getNode(o, node);
}
$(node.getChildrenUL()).css({'display':'block'});
- if (node.isLast) {
- node.plus_img.src = node.relpath+"ftv2mlastnode.png";
- } else {
- node.plus_img.src = node.relpath+"ftv2mnode.png";
- }
+ node.plus_img.src = node.relpath+"arrowdown.png";
node.expanded = true;
var n = node.children[o.breadcrumbs[index]];
if (index+1<o.breadcrumbs.length) {
@@ -483,7 +479,7 @@ function initNavTree(toroot,relpath)
o.node.expanded = false;
o.node.isLast = true;
o.node.plus_img = document.createElement("img");
- o.node.plus_img.src = relpath+"ftv2pnode.png";
+ o.node.plus_img.src = relpath+"arrowright.png";
o.node.plus_img.width = 16;
o.node.plus_img.height = 22;
diff --git a/templates/html/open.luma b/templates/html/open.luma
new file mode 100644
index 0000000..27eb4b6
--- /dev/null
+++ b/templates/html/open.luma
@@ -0,0 +1,23 @@
+# tree open icon
+# width & height
+9 9
+# luma data
+ 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0
+142 142 142 142 142 142 142 142 142
+ 0 142 142 142 142 142 142 142 0
+ 0 0 142 142 142 142 142 0 0
+ 0 0 0 142 142 142 0 0 0
+ 0 0 0 0 142 0 0 0 0
+# alpha data
+ 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0
+255 255 255 255 255 255 255 255 255
+ 0 255 255 255 255 255 255 255 0
+ 0 0 255 255 255 255 255 0 0
+ 0 0 0 255 255 255 0 0 0
+ 0 0 0 0 255 0 0 0 0
diff --git a/src/resize.js b/templates/html/resize.js
index 304fcb6..304fcb6 100644
--- a/src/resize.js
+++ b/templates/html/resize.js
diff --git a/src/search.css b/templates/html/search.css
index a77ab21..a77ab21 100644
--- a/src/search.css
+++ b/templates/html/search.css
diff --git a/src/search.js b/templates/html/search.js
index 10cee88..dedce3b 100644
--- a/src/search.js
+++ b/templates/html/search.js
@@ -9,11 +9,11 @@ function convertToId(search)
{
result+=c;
}
- else if (cn<16)
+ else if (cn<16)
{
result+="_0"+cn.toString(16);
}
- else
+ else
{
result+="_"+cn.toString(16);
}
@@ -52,14 +52,14 @@ function getYPos(item)
/* A class handling everything associated with the search panel.
Parameters:
- name - The name of the global variable that will be
+ name - The name of the global variable that will be
storing this instance. Is needed to be able to set timeouts.
resultPath - path to use for external files
*/
function SearchBox(name, resultsPath, inFrame, label)
{
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
-
+
// ---------- Instance variables
this.name = name;
this.resultsPath = resultsPath;
@@ -136,7 +136,7 @@ function SearchBox(name, resultsPath, inFrame, label)
}
// stop selection hide timer
- if (this.hideTimeout)
+ if (this.hideTimeout)
{
clearTimeout(this.hideTimeout);
this.hideTimeout=0;
@@ -165,7 +165,7 @@ function SearchBox(name, resultsPath, inFrame, label)
if (e.shiftKey==1)
{
this.OnSearchSelectShow();
- var win=this.DOMSearchSelectWindow();
+ var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
@@ -216,7 +216,7 @@ function SearchBox(name, resultsPath, inFrame, label)
this.SelectItemCount = function(id)
{
var count=0;
- var win=this.DOMSearchSelectWindow();
+ var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
@@ -231,7 +231,7 @@ function SearchBox(name, resultsPath, inFrame, label)
this.SelectItemSet = function(id)
{
var i,j=0;
- var win=this.DOMSearchSelectWindow();
+ var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
@@ -335,7 +335,7 @@ function SearchBox(name, resultsPath, inFrame, label)
hasResultsPage = false;
}
- window.frames.MSearchResults.location = resultsPageWithSearch;
+ window.frames.MSearchResults.location = resultsPageWithSearch;
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
if (domPopupSearchResultsWindow.style.display!='block')
@@ -369,12 +369,12 @@ function SearchBox(name, resultsPath, inFrame, label)
// -------- Activation Functions
- // Activates or deactivates the search panel, resetting things to
- // their default values if necessary.
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
this.Activate = function(isActive)
{
if (isActive || // open it
- this.DOMPopupSearchResultsWindow().style.display == 'block'
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
)
{
this.DOMSearchBox().className = 'MSearchBoxActive';
@@ -382,8 +382,8 @@ function SearchBox(name, resultsPath, inFrame, label)
var searchField = this.DOMSearchField();
if (searchField.value == this.searchLabel) // clear "Search" term upon entry
- {
- searchField.value = '';
+ {
+ searchField.value = '';
this.searchActive = true;
}
}
@@ -422,12 +422,12 @@ function SearchResults(name)
}
if (element.nodeName == 'DIV' && element.hasChildNodes())
- {
- element = element.firstChild;
+ {
+ element = element.firstChild;
}
else if (element.nextSibling)
- {
- element = element.nextSibling;
+ {
+ element = element.nextSibling;
}
else
{
@@ -438,8 +438,8 @@ function SearchResults(name)
while (element && element!=parentElement && !element.nextSibling);
if (element && element!=parentElement)
- {
- element = element.nextSibling;
+ {
+ element = element.nextSibling;
}
}
}
@@ -492,7 +492,7 @@ function SearchResults(name)
var rowMatchName = row.id.toLowerCase();
rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
- if (search.length<=rowMatchName.length &&
+ if (search.length<=rowMatchName.length &&
rowMatchName.substr(0, search.length)==search)
{
row.style.display = 'block';
@@ -563,7 +563,7 @@ function SearchResults(name)
this.ProcessKeys = function(e)
{
- if (e.type == "keydown")
+ if (e.type == "keydown")
{
this.repeatOn = false;
this.lastKey = e.keyCode;
@@ -584,7 +584,7 @@ function SearchResults(name)
return this.lastKey!=0;
}
- this.Nav = function(evt,itemIndex)
+ this.Nav = function(evt,itemIndex)
{
var e = (evt) ? evt : window.event; // for IE
if (e.keyCode==13) return true;
@@ -598,7 +598,7 @@ function SearchResults(name)
{
var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
if (child && child.style.display == 'block') // children visible
- {
+ {
var n=0;
var tmpElem;
while (1) // search for last child
@@ -691,7 +691,7 @@ function SearchResults(name)
if (elem)
{
elem.focus();
- }
+ }
}
else if (this.lastKey==27) // Escape
{
@@ -774,3 +774,18 @@ function createResults()
}
}
+function init_search()
+{
+ var results = document.getElementById("MSearchSelectWindow");
+ for (var key in indexSectionLabels)
+ {
+ var link = document.createElement('a');
+ link.setAttribute('class','SelectItem');
+ link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+ link.href='javascript:void(0)';
+ link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+ results.appendChild(link);
+ }
+ searchBox.OnSelectItem(0);
+}
+
diff --git a/src/search_functions.php b/templates/html/search_functions.php
index 5ad2e5d..caa9e3b 100644
--- a/src/search_functions.php
+++ b/templates/html/search_functions.php
@@ -1,5 +1,5 @@
<script language="PHP">
-require_once "search-config.php";
+require_once "search_config.php";
function end_form($value)
{
diff --git a/templates/html/search_l.png b/templates/html/search_l.png
new file mode 100644
index 0000000..c872f4d
--- /dev/null
+++ b/templates/html/search_l.png
Binary files differ
diff --git a/templates/html/search_m.png b/templates/html/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/templates/html/search_m.png
Binary files differ
diff --git a/templates/html/search_noidx.css b/templates/html/search_noidx.css
new file mode 100644
index 0000000..69ded6e
--- /dev/null
+++ b/templates/html/search_noidx.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+ float: left;
+}
+
+#MSearchBox {
+ white-space : nowrap;
+ position: absolute;
+ float: none;
+ display: inline;
+ margin-top: 0px;
+ right: 0px;
+ width: 170px;
+ z-index: 102;
+ background-color: white;
+}
+
+#MSearchBox .left
+{
+ display:block;
+ position:absolute;
+ left:10px;
+ width:20px;
+ height:19px;
+ background:url('search_l.png') no-repeat;
+ background-position:right;
+}
+
+#MSearchSelect {
+ display:block;
+ position:absolute;
+ width:20px;
+ height:19px;
+}
+
+.left #MSearchSelect {
+ left:4px;
+}
+
+.right #MSearchSelect {
+ right:5px;
+}
+
+#MSearchField {
+ display:block;
+ position:absolute;
+ height:19px;
+ background:url('search_m.png') repeat-x;
+ border:none;
+ width:111px;
+ margin-left:20px;
+ padding-left:4px;
+ color: #909090;
+ outline: none;
+ font: 9pt Arial, Verdana, sans-serif;
+}
+
+#FSearchBox #MSearchField {
+ margin-left:15px;
+}
+
+#MSearchBox .right {
+ display:block;
+ position:absolute;
+ right:10px;
+ top:0px;
+ width:20px;
+ height:19px;
+ background:url('search_r.png') no-repeat;
+ background-position:left;
+}
+
+#MSearchClose {
+ display: none;
+ position: absolute;
+ top: 4px;
+ background : none;
+ border: none;
+ margin: 0px 4px 0px 0px;
+ padding: 0px 0px;
+ outline: none;
+}
+
+.left #MSearchClose {
+ left: 6px;
+}
+
+.right #MSearchClose {
+ right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid ##A0;
+ background-color: ##FA;
+ z-index: 1;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: ##50;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ width: 60ex;
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: ##F0;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: ##58;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: ##58;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+}
+
+.SRResult {
+ display: none;
+}
+
+DIV.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: ##F2;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/src/search_opensearch.php b/templates/html/search_opensearch.php
index 3b59516..e3a4634 100644
--- a/src/search_opensearch.php
+++ b/templates/html/search_opensearch.php
@@ -1,5 +1,5 @@
<script language="PHP">
-require "search-functions.php";
+require "search_functions.php";
$mode = array_key_exists('v', $_GET)?$_GET['v']:"";
$query = array_key_exists('query', $_GET)?$_GET['query']:"";
@@ -43,9 +43,9 @@ http://dev.squello.com/doc/html/favicon.ico</Image>
<Url type="text/html" method="GET"
template="$link/search.php?query={searchTerms}" />
<Url type="application/x-suggestions+json" method="GET"
-template="$link/search-opensearch.php?v=json&amp;query={searchTerms}" />
+template="$link/search_opensearch.php?v=json&amp;query={searchTerms}" />
<Url type="application/x-suggestions+xml" method="GET"
-template="$link/search-opensearch.php?v=xml&amp;query={searchTerms}" />
+template="$link/search_opensearch.php?v=xml&amp;query={searchTerms}" />
</OpenSearchDescription>
END_OPENSEARCH;
}
diff --git a/templates/html/search_r.png b/templates/html/search_r.png
new file mode 100644
index 0000000..97ee8b4
--- /dev/null
+++ b/templates/html/search_r.png
Binary files differ
diff --git a/templates/html/splitbar.lum b/templates/html/splitbar.lum
new file mode 100644
index 0000000..d5f0595
--- /dev/null
+++ b/templates/html/splitbar.lum
@@ -0,0 +1,1028 @@
+# vertical split bar for treeview
+# width & height
+6 1024
+# luma data
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
diff --git a/src/svgpan.js b/templates/html/svgpan.js
index 4218e79..4218e79 100644
--- a/src/svgpan.js
+++ b/templates/html/svgpan.js
diff --git a/templates/html/sync_off.luma b/templates/html/sync_off.luma
new file mode 100644
index 0000000..6f7567c
--- /dev/null
+++ b/templates/html/sync_off.luma
@@ -0,0 +1,54 @@
+# synchonized view disabled button
+# width & height
+24 24
+# luma data
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 138 128 128 128 128 128 128 133 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 129 205 186 128 128 128 128 128 128 160 210 134 128 128 128 128 128 128
+128 128 128 128 128 139 217 255 181 128 128 128 128 128 128 152 255 229 147 128 128 128 128 128
+128 128 128 128 156 236 255 255 181 128 128 128 128 128 128 152 255 255 243 164 128 128 128 128
+128 128 128 175 249 255 255 255 223 196 198 198 128 128 197 211 255 255 255 253 186 128 128 128
+128 128 202 255 255 255 255 255 255 255 255 225 128 128 255 255 255 255 255 255 255 214 128 128
+128 128 217 255 255 255 255 255 255 255 255 128 128 198 255 255 255 255 255 255 255 225 128 128
+128 128 128 189 255 255 255 255 238 224 225 128 128 225 224 232 255 255 255 255 201 128 128 128
+128 128 128 128 167 245 255 255 183 128 128 128 128 128 128 155 255 255 250 179 128 128 128 128
+128 128 128 128 128 150 231 255 188 128 128 128 128 128 128 161 255 238 158 128 128 128 128 128
+128 128 128 128 128 128 136 216 188 128 128 128 128 128 128 161 223 142 128 128 128 128 128 128
+128 128 128 128 128 128 128 130 141 128 128 128 128 128 128 135 132 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+# alpha data
+ 0 0 0 0 0 0 0 29 98 157 207 231 234 211 164 104 38 0 0 0 0 0 0 0
+ 0 0 0 0 0 21 143 234 255 255 255 255 255 255 255 255 244 155 33 0 0 0 0 0
+ 0 0 0 0 70 221 255 255 255 255 255 255 255 255 255 255 255 255 235 93 0 0 0 0
+ 0 0 0 92 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 116 0 0 0
+ 0 0 68 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 96 0 0
+ 0 20 225 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 243 41 0
+ 0 143 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 172 1
+ 28 238 255 255 255 255 255 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 42
+ 99 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 133
+160 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204
+212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224
+234 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 237 255 236
+235 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 255 236
+216 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 226
+168 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 208
+107 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 147
+ 39 245 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 53
+ 0 159 255 255 255 255 255 255 251 255 255 255 255 255 255 255 255 255 255 255 255 255 190 3
+ 0 31 239 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 54 0
+ 0 0 91 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 119 0 0
+ 0 0 0 116 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 145 0 0 0
+ 0 0 0 0 98 240 255 255 255 255 255 255 255 255 255 255 255 255 248 119 0 0 0 0
+ 0 0 0 0 0 45 168 252 255 255 255 255 255 255 255 255 255 184 58 0 0 0 0 0
+ 0 0 0 0 0 0 0 45 131 201 222 234 236 224 204 142 54 0 0 0 0 0 0 0
+
diff --git a/templates/html/sync_on.luma b/templates/html/sync_on.luma
new file mode 100644
index 0000000..ca79254
--- /dev/null
+++ b/templates/html/sync_on.luma
@@ -0,0 +1,54 @@
+# synchonized view enabled button
+# width & height
+24 24
+# luma data
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 138 128 128 128 128 133 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 129 205 186 128 128 128 128 160 210 134 128 128 128 128 128 128 128
+128 128 128 128 128 128 139 217 255 181 128 128 128 128 152 255 229 147 128 128 128 128 128 128
+128 128 128 128 128 156 236 255 255 181 128 128 128 128 152 255 255 243 164 128 128 128 128 128
+128 128 128 128 175 249 255 255 255 223 196 198 198 197 211 255 255 255 253 186 128 128 128 128
+128 128 133 202 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 214 137 128 128
+128 128 135 217 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 225 140 128 128
+128 128 128 128 189 255 255 255 255 238 224 225 225 224 232 255 255 255 255 201 131 128 128 128
+128 128 128 128 128 167 245 255 255 183 128 128 128 128 155 255 255 250 179 128 128 128 128 128
+128 128 128 128 128 128 150 231 255 188 128 128 128 128 161 255 238 158 128 128 128 128 128 128
+128 128 128 128 128 128 128 136 216 188 128 128 128 128 161 223 142 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 130 141 128 128 128 128 135 132 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+# alpha data
+ 0 0 0 0 0 0 0 29 98 157 207 231 234 211 164 104 38 0 0 0 0 0 0 0
+ 0 0 0 0 0 21 143 234 255 255 255 255 255 255 255 255 244 155 33 0 0 0 0 0
+ 0 0 0 0 70 221 255 255 255 255 255 255 255 255 255 255 255 255 235 93 0 0 0 0
+ 0 0 0 92 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 116 0 0 0
+ 0 0 68 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 96 0 0
+ 0 20 225 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 243 41 0
+ 0 143 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 172 1
+ 28 238 255 255 255 255 255 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 42
+ 99 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 133
+160 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204
+212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224
+234 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 237 255 236
+235 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 255 236
+216 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 226
+168 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 208
+107 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 147
+ 39 245 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 53
+ 0 159 255 255 255 255 255 255 251 255 255 255 255 255 255 255 255 255 255 255 255 255 190 3
+ 0 31 239 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 54 0
+ 0 0 91 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 119 0 0
+ 0 0 0 116 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 145 0 0 0
+ 0 0 0 0 98 240 255 255 255 255 255 255 255 255 255 255 255 255 248 119 0 0 0 0
+ 0 0 0 0 0 45 168 252 255 255 255 255 255 255 255 255 255 184 58 0 0 0 0 0
+ 0 0 0 0 0 0 0 45 131 201 222 234 236 224 204 142 54 0 0 0 0 0 0 0
+
diff --git a/templates/html/tab_a.lum b/templates/html/tab_a.lum
new file mode 100644
index 0000000..2d1dbcf
--- /dev/null
+++ b/templates/html/tab_a.lum
@@ -0,0 +1,8 @@
+# active tab background luma
+# width & height
+1 36
+# luma data
+31 42 59 69 73 74 75 77 77
+77 79 80 80 82 81 83 84 86
+87 88 89 90 91 91 93 94 94
+96 96 97 98 98 99 99 99 100
diff --git a/templates/html/tab_b.lum b/templates/html/tab_b.lum
new file mode 100644
index 0000000..48e9c42
--- /dev/null
+++ b/templates/html/tab_b.lum
@@ -0,0 +1,8 @@
+# normal tab background luma
+# width & height
+1 36
+# luma data
+218 228 235 233 230 227 225 222 221
+218 217 215 214 213 212 211 210 209
+209 197 198 199 200 201 202 203 204
+205 207 209 211 213 217 219 206 188
diff --git a/templates/html/tab_h.lum b/templates/html/tab_h.lum
new file mode 100644
index 0000000..57d9d47
--- /dev/null
+++ b/templates/html/tab_h.lum
@@ -0,0 +1,8 @@
+# hovering tab background luma
+# width & height
+1 36
+# luma data
+181 191 198 196 193 190 188 185 184
+181 180 178 177 176 175 174 173 172
+172 154 155 156 157 158 159 160 161
+162 164 166 168 170 174 176 163 145
diff --git a/templates/html/tab_s.lum b/templates/html/tab_s.lum
new file mode 100644
index 0000000..152ce16
--- /dev/null
+++ b/templates/html/tab_s.lum
@@ -0,0 +1,8 @@
+# tab separator
+# width & height
+1 36
+# luma data
+187 186 185 183 182 181 180 178 176
+174 173 171 169 167 164 163 161 158
+156 154 152 150 148 145 143 141 140
+138 136 134 131 131 128 126 125 124
diff --git a/templates/html/tabs.css b/templates/html/tabs.css
new file mode 100644
index 0000000..737d559
--- /dev/null
+++ b/templates/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: ##30;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/src/doxygen.sty b/templates/latex/doxygen.sty
index c423e12..acd68e4 100644
--- a/src/doxygen.sty
+++ b/templates/latex/doxygen.sty
@@ -142,7 +142,9 @@
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
% (only if no caption is specified)
\newenvironment{DoxyImageNoCaption}{%
+ \begin{center}%
}{%
+ \end{center}%
}
% Used by @attention
diff --git a/src/compound.xsd b/templates/xml/compound.xsd
index be897c3..50e532e 100644
--- a/src/compound.xsd
+++ b/templates/xml/compound.xsd
@@ -39,6 +39,7 @@
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" />
<xsd:attribute name="kind" type="DoxCompoundKind" />
+ <xsd:attribute name="language" type="DoxLanguage" use="optional"/>
<xsd:attribute name="prot" type="DoxProtectionKind" />
<xsd:attribute name="final" type="DoxBool" use="optional"/>
<xsd:attribute name="sealed" type="DoxBool" use="optional"/>
@@ -686,6 +687,26 @@
</xsd:restriction>
</xsd:simpleType>
+ <xsd:simpleType name="DoxLanguage">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Unknown" />
+ <xsd:enumeration value="IDL" />
+ <xsd:enumeration value="Java" />
+ <xsd:enumeration value="C#" />
+ <xsd:enumeration value="D" />
+ <xsd:enumeration value="PHP" />
+ <xsd:enumeration value="Objective-C" />
+ <xsd:enumeration value="C++" />
+ <xsd:enumeration value="Javascript" />
+ <xsd:enumeration value="Python" />
+ <xsd:enumeration value="Fortran" />
+ <xsd:enumeration value="VHDL" />
+ <xsd:enumeration value="XML" />
+ <xsd:enumeration value="Tcl" />
+ <xsd:enumeration value="Markdown" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
<xsd:simpleType name="DoxVirtualKind">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="non-virtual" />
diff --git a/src/index.xsd b/templates/xml/index.xsd
index d7ab2a9..d7ab2a9 100644
--- a/src/index.xsd
+++ b/templates/xml/index.xsd
diff --git a/testing/008/008__brief_8c.xml b/testing/008/008__brief_8c.xml
index 3416798..4fcf6a6 100644
--- a/testing/008/008__brief_8c.xml
+++ b/testing/008/008__brief_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="008__brief_8c" kind="file">
+ <compounddef id="008__brief_8c" kind="file" language="C++">
<compoundname>008_brief.c</compoundname>
<briefdescription>
<para>A brief description. </para>
diff --git a/testing/009/class_bug.xml b/testing/009/class_bug.xml
index 75a3fa1..dc1ff06 100644
--- a/testing/009/class_bug.xml
+++ b/testing/009/class_bug.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_bug" kind="class" prot="public">
+ <compounddef id="class_bug" kind="class" language="C++" prot="public">
<compoundname>Bug</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_bug_1a1f720954dd97cd1203e80501a6eae74c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_deprecated.xml b/testing/009/class_deprecated.xml
index 2420466..53a6273 100644
--- a/testing/009/class_deprecated.xml
+++ b/testing/009/class_deprecated.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_deprecated" kind="class" prot="public">
+ <compounddef id="class_deprecated" kind="class" language="C++" prot="public">
<compoundname>Deprecated</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_deprecated_1a1d5f6803e72c625727e7083d1722dbf9" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_reminder.xml b/testing/009/class_reminder.xml
index 2f3c641..c4f639e 100644
--- a/testing/009/class_reminder.xml
+++ b/testing/009/class_reminder.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_reminder" kind="class" prot="public">
+ <compounddef id="class_reminder" kind="class" language="C++" prot="public">
<compoundname>Reminder</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_reminder_1a173b5218bb11287b0e86a550d9f0728d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_test.xml b/testing/009/class_test.xml
index 505617f..b9f7f9f 100644
--- a/testing/009/class_test.xml
+++ b/testing/009/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1a9fc54b716f326514a4c5f434137f4fc0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/009/class_todo.xml b/testing/009/class_todo.xml
index 0ac555f..c98fdac 100644
--- a/testing/009/class_todo.xml
+++ b/testing/009/class_todo.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_todo" kind="class" prot="public">
+ <compounddef id="class_todo" kind="class" language="C++" prot="public">
<compoundname>Todo</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_todo_1a9e70ec9176ac4c1b20e011b4daddc9d8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/011/category_integer_07_arithmetic_08.xml b/testing/011/category_integer_07_arithmetic_08.xml
index 9d64d98..73308db 100644
--- a/testing/011/category_integer_07_arithmetic_08.xml
+++ b/testing/011/category_integer_07_arithmetic_08.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="category_integer_07_arithmetic_08" kind="category" prot="public">
+ <compounddef id="category_integer_07_arithmetic_08" kind="category" language="Objective-C" prot="public">
<compoundname>Integer(Arithmetic)</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="category_integer_07_arithmetic_08_1a12f411c5872ba3bafb8ea7dd1826cf2a" prot="public" static="no" const="no" explicit="no" inline="no" virt="virtual">
diff --git a/testing/011/interface_integer.xml b/testing/011/interface_integer.xml
index bdbcad2..e922dda 100644
--- a/testing/011/interface_integer.xml
+++ b/testing/011/interface_integer.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="interface_integer" kind="class" prot="public">
+ <compounddef id="interface_integer" kind="class" language="Objective-C" prot="public">
<compoundname>Integer</compoundname>
<basecompoundref prot="public" virt="non-virtual">Object</basecompoundref>
<sectiondef kind="protected-attrib">
diff --git a/testing/013/class_t1.xml b/testing/013/class_t1.xml
index 2a9b415..e0dc3a2 100644
--- a/testing/013/class_t1.xml
+++ b/testing/013/class_t1.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_t1" kind="class" prot="public">
+ <compounddef id="class_t1" kind="class" language="C++" prot="public">
<compoundname>T1</compoundname>
<includes refid="013__class_8h" local="yes">inc/013_class.h</includes>
<briefdescription>
diff --git a/testing/013/class_t2.xml b/testing/013/class_t2.xml
index 9c85ff6..ca534e6 100644
--- a/testing/013/class_t2.xml
+++ b/testing/013/class_t2.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_t2" kind="class" prot="public">
+ <compounddef id="class_t2" kind="class" language="C++" prot="public">
<compoundname>T2</compoundname>
<includes refid="013__class_8h" local="no">013_class.h</includes>
<briefdescription>
diff --git a/testing/013/class_t3.xml b/testing/013/class_t3.xml
index 49e7a16..2fba932 100644
--- a/testing/013/class_t3.xml
+++ b/testing/013/class_t3.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_t3" kind="class" prot="public">
+ <compounddef id="class_t3" kind="class" language="C++" prot="public">
<compoundname>T3</compoundname>
<includes refid="013__class_8h" local="no">013_class.h</includes>
<briefdescription>
diff --git a/testing/013/class_t4.xml b/testing/013/class_t4.xml
index d87571d..907049f 100644
--- a/testing/013/class_t4.xml
+++ b/testing/013/class_t4.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_t4" kind="class" prot="public">
+ <compounddef id="class_t4" kind="class" language="C++" prot="public">
<compoundname>T4</compoundname>
<includes refid="013__class_8h" local="yes">inc/013_class.h</includes>
<briefdescription>
diff --git a/testing/015/015__cond_8c.xml b/testing/015/015__cond_8c.xml
index 39baed7..fb3a06c 100644
--- a/testing/015/015__cond_8c.xml
+++ b/testing/015/015__cond_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="015__cond_8c" kind="file">
+ <compounddef id="015__cond_8c" kind="file" language="C++">
<compoundname>015_cond.c</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="015__cond_8c_1a2521dcda743ec66ad8e030113d6e0c63" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/016/016__copydoc_8c.xml b/testing/016/016__copydoc_8c.xml
index dd1de8f..992122d 100644
--- a/testing/016/016__copydoc_8c.xml
+++ b/testing/016/016__copydoc_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="016__copydoc_8c" kind="file">
+ <compounddef id="016__copydoc_8c" kind="file" language="C++">
<compoundname>016_copydoc.c</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="016__copydoc_8c_1af721a79655a3857b98d70fa6ada8a916" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/018/018__def_8c.xml b/testing/018/018__def_8c.xml
index b55a2eb..0b30670 100644
--- a/testing/018/018__def_8c.xml
+++ b/testing/018/018__def_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="018__def_8c" kind="file">
+ <compounddef id="018__def_8c" kind="file" language="C++">
<compoundname>018_def.c</compoundname>
<sectiondef kind="define">
<memberdef kind="define" id="018__def_8c_1a824c99cb152a3c2e9111a2cb9c34891e" prot="public" static="no">
diff --git a/testing/022/indexpage.xml b/testing/022/indexpage.xml
index 83ed868..afcf23a 100644
--- a/testing/022/indexpage.xml
+++ b/testing/022/indexpage.xml
@@ -4,14 +4,15 @@
<compoundname>index</compoundname>
<title>My Project</title>
<detaileddescription>
- <para>Class relations expressed via an inline dot graph: <dot>
+ <para>Class relations expressed via an inline dot graph: <dot>
digraph example {
node [shape=record, fontname=Helvetica, fontsize=10];
b [ label="class B" URL="\ref B"];
c [ label="class C" URL="\ref C"];
b -&gt; c [ arrowhead="open", style="dashed" ];
}
-</dot> </para>
+</dot>
+ </para>
</detaileddescription>
</compounddef>
</doxygen>
diff --git a/testing/025/class_test.xml b/testing/025/class_test.xml
index 8d3f076..f0c7abd 100644
--- a/testing/025/class_test.xml
+++ b/testing/025/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1a47b775f65718978f1ffcd96376f8ecfa" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/026/class_test.xml b/testing/026/class_test.xml
index f49cc8d..a332757 100644
--- a/testing/026/class_test.xml
+++ b/testing/026/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<templateparamlist>
<param>
diff --git a/testing/027/struct_car.xml b/testing/027/struct_car.xml
index 0e40922..c73ad34 100644
--- a/testing/027/struct_car.xml
+++ b/testing/027/struct_car.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_car" kind="struct" prot="public">
+ <compounddef id="struct_car" kind="struct" language="C++" prot="public">
<compoundname>Car</compoundname>
<basecompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</basecompoundref>
<sectiondef kind="protected-attrib">
diff --git a/testing/027/struct_object.xml b/testing/027/struct_object.xml
index 107548d..4047446 100644
--- a/testing/027/struct_object.xml
+++ b/testing/027/struct_object.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_object" kind="struct" prot="public">
+ <compounddef id="struct_object" kind="struct" language="C++" prot="public">
<compoundname>Object</compoundname>
<derivedcompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</derivedcompoundref>
<sectiondef kind="private-attrib">
diff --git a/testing/027/struct_truck.xml b/testing/027/struct_truck.xml
index 1da9e2f..14ebde2 100644
--- a/testing/027/struct_truck.xml
+++ b/testing/027/struct_truck.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_truck" kind="struct" prot="public">
+ <compounddef id="struct_truck" kind="struct" language="C++" prot="public">
<compoundname>Truck</compoundname>
<basecompoundref refid="struct_vehicle" prot="public" virt="non-virtual">Vehicle</basecompoundref>
<sectiondef kind="protected-attrib">
diff --git a/testing/027/struct_vehicle.xml b/testing/027/struct_vehicle.xml
index a1f7654..bf480e8 100644
--- a/testing/027/struct_vehicle.xml
+++ b/testing/027/struct_vehicle.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_vehicle" kind="struct" prot="public">
+ <compounddef id="struct_vehicle" kind="struct" language="C++" prot="public">
<compoundname>Vehicle</compoundname>
<basecompoundref refid="struct_object" prot="public" virt="non-virtual">Object</basecompoundref>
<derivedcompoundref refid="struct_car" prot="public" virt="non-virtual">Car</derivedcompoundref>
diff --git a/testing/029/029__hideinit_8c.xml b/testing/029/029__hideinit_8c.xml
index 4bf1516..f5db794 100644
--- a/testing/029/029__hideinit_8c.xml
+++ b/testing/029/029__hideinit_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="029__hideinit_8c" kind="file">
+ <compounddef id="029__hideinit_8c" kind="file" language="C++">
<compoundname>029_hideinit.c</compoundname>
<sectiondef kind="var">
<memberdef kind="variable" id="029__hideinit_8c_1a799f44203647e4c53bdb0386aa95680f" prot="public" static="no" mutable="no">
diff --git a/testing/035/035__invariant_8c.xml b/testing/035/035__invariant_8c.xml
index d036388..f1a924d 100644
--- a/testing/035/035__invariant_8c.xml
+++ b/testing/035/035__invariant_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="035__invariant_8c" kind="file">
+ <compounddef id="035__invariant_8c" kind="file" language="C++">
<compoundname>035_invariant.c</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="035__invariant_8c_1a92e32ddd4278ab907422d5aaa34cb796" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/036/036__link_8c.xml b/testing/036/036__link_8c.xml
index 4347d4b..c0dea58 100644
--- a/testing/036/036__link_8c.xml
+++ b/testing/036/036__link_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="036__link_8c" kind="file">
+ <compounddef id="036__link_8c" kind="file" language="C++">
<compoundname>036_link.c</compoundname>
<innerclass refid="class_test" prot="public">Test</innerclass>
<sectiondef kind="func">
diff --git a/testing/037/class_receiver.xml b/testing/037/class_receiver.xml
index eb37d47..5c4fde6 100644
--- a/testing/037/class_receiver.xml
+++ b/testing/037/class_receiver.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_receiver" kind="class" prot="public">
+ <compounddef id="class_receiver" kind="class" language="C++" prot="public">
<compoundname>Receiver</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_receiver_1a162099741e0324e6254c9bc570566e40" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
@@ -25,11 +25,12 @@
<briefdescription>
</briefdescription>
<detaileddescription>
- <para><ref refid="class_receiver" kindref="compound">Receiver</ref> class. Can be used to receive and execute commands. After execution of a command, the receiver will send an acknowledgement <msc>
+ <para><ref refid="class_receiver" kindref="compound">Receiver</ref> class. Can be used to receive and execute commands. After execution of a command, the receiver will send an acknowledgement <msc>
Receiver,Sender;
Receiver&lt;-Sender [label="Command()", URL="\ref Command()"];
Receiver-&gt;Sender [label="Ack()", URL="\ref Sender::Ack()", ID="1"];
-</msc> </para>
+</msc>
+ </para>
</detaileddescription>
<location file="037_msc.cpp" bodystart="28" bodyend="33"/>
<listofallmembers>
diff --git a/testing/037/class_sender.xml b/testing/037/class_sender.xml
index 117ed93..e58ab88 100644
--- a/testing/037/class_sender.xml
+++ b/testing/037/class_sender.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_sender" kind="class" prot="public">
+ <compounddef id="class_sender" kind="class" language="C++" prot="public">
<compoundname>Sender</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_sender_1a8ad2c6f9baa4e798868fe4a4d45f8fda" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
@@ -25,11 +25,12 @@
<briefdescription>
</briefdescription>
<detaileddescription>
- <para><ref refid="class_sender" kindref="compound">Sender</ref> class. Can be used to send a command to the server. The receiver will acknowledge the command by calling <ref refid="class_sender_1a8ad2c6f9baa4e798868fe4a4d45f8fda" kindref="member">Ack()</ref>. <msc>
+ <para><ref refid="class_sender" kindref="compound">Sender</ref> class. Can be used to send a command to the server. The receiver will acknowledge the command by calling <ref refid="class_sender_1a8ad2c6f9baa4e798868fe4a4d45f8fda" kindref="member">Ack()</ref>. <msc>
Sender,Receiver;
Sender-&gt;Receiver [label="Command()", URL="\ref Receiver::Command()"];
Sender&lt;-Receiver [label="Ack()", URL="\ref Ack()", ID="1"];
-</msc> </para>
+</msc>
+ </para>
</detaileddescription>
<location file="037_msc.cpp" bodystart="13" bodyend="18"/>
<listofallmembers>
diff --git a/testing/039/class_test.xml b/testing/039/class_test.xml
index 3f38916..244e88d 100644
--- a/testing/039/class_test.xml
+++ b/testing/039/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="user-defined">
<header>A group of functions.</header>
diff --git a/testing/040/namespace_n_s.xml b/testing/040/namespace_n_s.xml
index 14ffc26..64beb23 100644
--- a/testing/040/namespace_n_s.xml
+++ b/testing/040/namespace_n_s.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace_n_s" kind="namespace">
+ <compounddef id="namespace_n_s" kind="namespace" language="C++">
<compoundname>NS</compoundname>
<briefdescription>
</briefdescription>
diff --git a/testing/041/class_test.xml b/testing/041/class_test.xml
index 294b67c..7068026 100644
--- a/testing/041/class_test.xml
+++ b/testing/041/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1a8e7b46ceaf7bd2ab94114b390b3288ca" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/042/namespaceorg_1_1doxygen_1_1_test.xml b/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
index b48c307..7ed33d5 100644
--- a/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
+++ b/testing/042/namespaceorg_1_1doxygen_1_1_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespaceorg_1_1doxygen_1_1_test" kind="namespace">
+ <compounddef id="namespaceorg_1_1doxygen_1_1_test" kind="namespace" language="Java">
<compoundname>org::doxygen::Test</compoundname>
<briefdescription>
</briefdescription>
diff --git a/testing/044/struct_s.xml b/testing/044/struct_s.xml
index 9505f8c..2aa62c2 100644
--- a/testing/044/struct_s.xml
+++ b/testing/044/struct_s.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="struct_s" kind="struct" prot="public">
+ <compounddef id="struct_s" kind="struct" language="C++" prot="public">
<compoundname>S</compoundname>
<includes refid="044__section_8h" local="no">044_section.h</includes>
<sectiondef kind="public-attrib">
diff --git a/testing/046/046__related_8cpp.xml b/testing/046/046__related_8cpp.xml
index 0291e84..9f5eab6 100644
--- a/testing/046/046__related_8cpp.xml
+++ b/testing/046/046__related_8cpp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="046__related_8cpp" kind="file">
+ <compounddef id="046__related_8cpp" kind="file" language="C++">
<compoundname>046_related.cpp</compoundname>
<innerclass refid="class_test" prot="public">Test</innerclass>
<sectiondef kind="func">
diff --git a/testing/046/class_test.xml b/testing/046/class_test.xml
index 3c631ab..62712d4 100644
--- a/testing/046/class_test.xml
+++ b/testing/046/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="C++" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1a1683da699dc049d74101488d143c8e98" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/047/047__return_8cpp.xml b/testing/047/047__return_8cpp.xml
index 2ed45d1..b57a0c3 100644
--- a/testing/047/047__return_8cpp.xml
+++ b/testing/047/047__return_8cpp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="047__return_8cpp" kind="file">
+ <compounddef id="047__return_8cpp" kind="file" language="C++">
<compoundname>047_return.cpp</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="047__return_8cpp_1aab0ee031d46db05d47213d2625ab6aac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/048/048__showinit_8c.xml b/testing/048/048__showinit_8c.xml
index a44ccb9..34b2c1c 100644
--- a/testing/048/048__showinit_8c.xml
+++ b/testing/048/048__showinit_8c.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="048__showinit_8c" kind="file">
+ <compounddef id="048__showinit_8c" kind="file" language="C++">
<compoundname>048_showinit.c</compoundname>
<sectiondef kind="var">
<memberdef kind="variable" id="048__showinit_8c_1a799f44203647e4c53bdb0386aa95680f" prot="public" static="no" mutable="no">
diff --git a/testing/054/054__parblock_8cpp.xml b/testing/054/054__parblock_8cpp.xml
index a562a6d..ae6e462 100644
--- a/testing/054/054__parblock_8cpp.xml
+++ b/testing/054/054__parblock_8cpp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="054__parblock_8cpp" kind="file">
+ <compounddef id="054__parblock_8cpp" kind="file" language="C++">
<compoundname>054_parblock.cpp</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="054__parblock_8cpp_1a2dd0ac47f42a9994b91d34403be05fe9" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/057__caller__graphs_8tcl.xml b/testing/057/057__caller__graphs_8tcl.xml
index 4c54e1c..c3dfb78 100644
--- a/testing/057/057__caller__graphs_8tcl.xml
+++ b/testing/057/057__caller__graphs_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="057__caller__graphs_8tcl" kind="file">
+ <compounddef id="057__caller__graphs_8tcl" kind="file" language="Tcl">
<compoundname>057_caller_graphs.tcl</compoundname>
<innernamespace refid="namespacebar">bar</innernamespace>
<innernamespace refid="namespacefoo">foo</innernamespace>
diff --git a/testing/057/__057__caller__graphs_8tcl.xml b/testing/057/__057__caller__graphs_8tcl.xml
index 2fdcf6a..48ab815 100644
--- a/testing/057/__057__caller__graphs_8tcl.xml
+++ b/testing/057/__057__caller__graphs_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="__057__caller__graphs_8tcl" kind="file">
+ <compounddef id="__057__caller__graphs_8tcl" kind="file" language="Tcl">
<compoundname>_057_caller_graphs.tcl</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="__057__caller__graphs_8tcl_1a7c3c8acee94bf61ba9e911dafe35adac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespace1.xml b/testing/057/namespace1.xml
index e74d8fe..6a40cc4 100644
--- a/testing/057/namespace1.xml
+++ b/testing/057/namespace1.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace1" kind="namespace">
+ <compounddef id="namespace1" kind="namespace" language="Tcl">
<compoundname>1</compoundname>
<innernamespace refid="namespace1_1_11">1::1</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace1_1_11.xml b/testing/057/namespace1_1_11.xml
index e5c5596..8ff3ce9 100644
--- a/testing/057/namespace1_1_11.xml
+++ b/testing/057/namespace1_1_11.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace1_1_11" kind="namespace">
+ <compounddef id="namespace1_1_11" kind="namespace" language="Tcl">
<compoundname>1::1</compoundname>
<innernamespace refid="namespace1_1_11_1_11">1::1::1</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace1_1_11_1_11.xml b/testing/057/namespace1_1_11_1_11.xml
index caccbe4..f7f9716 100644
--- a/testing/057/namespace1_1_11_1_11.xml
+++ b/testing/057/namespace1_1_11_1_11.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace1_1_11_1_11" kind="namespace">
+ <compounddef id="namespace1_1_11_1_11" kind="namespace" language="Tcl">
<compoundname>1::1::1</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespace1_1_11_1_11_1aa604df053f7ebe36205d1a5675459b96" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespace2.xml b/testing/057/namespace2.xml
index 6ea122c..0ce04a8 100644
--- a/testing/057/namespace2.xml
+++ b/testing/057/namespace2.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2" kind="namespace">
+ <compounddef id="namespace2" kind="namespace" language="Tcl">
<compoundname>2</compoundname>
<innernamespace refid="namespace2_1_12">2::2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12.xml b/testing/057/namespace2_1_12.xml
index d2a589a..af86ebe 100644
--- a/testing/057/namespace2_1_12.xml
+++ b/testing/057/namespace2_1_12.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2_1_12" kind="namespace">
+ <compounddef id="namespace2_1_12" kind="namespace" language="Tcl">
<compoundname>2::2</compoundname>
<innernamespace refid="namespace2_1_12_1_12">2::2::2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12.xml
index d04a73c..0a6d7fa 100644
--- a/testing/057/namespace2_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2_1_12_1_12" kind="namespace">
+ <compounddef id="namespace2_1_12_1_12" kind="namespace" language="Tcl">
<compoundname>2::2::2</compoundname>
<innernamespace refid="namespace2_1_12_1_12_1_12">2::2::2::2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12.xml
index 980906d..461d61e 100644
--- a/testing/057/namespace2_1_12_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12_1_12.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2_1_12_1_12_1_12" kind="namespace">
+ <compounddef id="namespace2_1_12_1_12_1_12" kind="namespace" language="Tcl">
<compoundname>2::2::2::2</compoundname>
<innernamespace refid="namespace2_1_12_1_12_1_12_1_12">2::2::2::2::2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/057/namespace2_1_12_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
index 0c6957b..3981ff0 100644
--- a/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12_1_12_1_12.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespace2_1_12_1_12_1_12_1_12" kind="namespace">
+ <compounddef id="namespace2_1_12_1_12_1_12_1_12" kind="namespace" language="Tcl">
<compoundname>2::2::2::2::2</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespace2_1_12_1_12_1_12_1_12_1ac07f64c62783fd8b44317389b4a711f8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespacebar.xml b/testing/057/namespacebar.xml
index 3c0f6e9..85cde41 100644
--- a/testing/057/namespacebar.xml
+++ b/testing/057/namespacebar.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacebar" kind="namespace">
+ <compounddef id="namespacebar" kind="namespace" language="Tcl">
<compoundname>bar</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespacebar_1aa1678a9adb588c0b91b118de7cc38ddb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/057/namespacefoo.xml b/testing/057/namespacefoo.xml
index 2aae8ea..0d81332 100644
--- a/testing/057/namespacefoo.xml
+++ b/testing/057/namespacefoo.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacefoo" kind="namespace">
+ <compounddef id="namespacefoo" kind="namespace" language="Tcl">
<compoundname>foo</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespacefoo_1a265acdcaea6da32c3bbd9afb5d0e32a4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/058/058__bracket__recursion_8tcl.xml b/testing/058/058__bracket__recursion_8tcl.xml
index fd36cee..dcb60e4 100644
--- a/testing/058/058__bracket__recursion_8tcl.xml
+++ b/testing/058/058__bracket__recursion_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="058__bracket__recursion_8tcl" kind="file">
+ <compounddef id="058__bracket__recursion_8tcl" kind="file" language="Tcl">
<compoundname>058_bracket_recursion.tcl</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="058__bracket__recursion_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/059/059__command__catch_8tcl.xml b/testing/059/059__command__catch_8tcl.xml
index 6604413..a12a366 100644
--- a/testing/059/059__command__catch_8tcl.xml
+++ b/testing/059/059__command__catch_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="059__command__catch_8tcl" kind="file">
+ <compounddef id="059__command__catch_8tcl" kind="file" language="Tcl">
<compoundname>059_command_catch.tcl</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/060/060__command__switch_8tcl.xml b/testing/060/060__command__switch_8tcl.xml
index 05e01c6..f1792f4 100644
--- a/testing/060/060__command__switch_8tcl.xml
+++ b/testing/060/060__command__switch_8tcl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="060__command__switch_8tcl" kind="file">
+ <compounddef id="060__command__switch_8tcl" kind="file" language="Tcl">
<compoundname>060_command_switch.tcl</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/061/class_test.xml b/testing/061/class_test.xml
index 0922539..b233e9c 100644
--- a/testing/061/class_test.xml
+++ b/testing/061/class_test.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="class_test" kind="class" prot="public">
+ <compounddef id="class_test" kind="class" language="Tcl" prot="public">
<compoundname>Test</compoundname>
<sectiondef kind="public-func">
<memberdef kind="function" id="class_test_1af863c78bca81b4e276dcbb30f12e8ec6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/062/namespacen1.xml b/testing/062/namespacen1.xml
index 0ef31ff..a31fc29 100644
--- a/testing/062/namespacen1.xml
+++ b/testing/062/namespacen1.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacen1" kind="namespace">
+ <compounddef id="namespacen1" kind="namespace" language="Tcl">
<compoundname>n1</compoundname>
<innernamespace refid="namespacen1_1_1n1">n1::n1</innernamespace>
<sectiondef kind="func">
diff --git a/testing/062/namespacen2.xml b/testing/062/namespacen2.xml
index 39c21d2..29c4d80 100644
--- a/testing/062/namespacen2.xml
+++ b/testing/062/namespacen2.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacen2" kind="namespace">
+ <compounddef id="namespacen2" kind="namespace" language="Tcl">
<compoundname>n2</compoundname>
<innernamespace refid="namespacen2_1_1n2">n2::n2</innernamespace>
<sectiondef kind="func">
diff --git a/testing/062/namespacen3.xml b/testing/062/namespacen3.xml
index 25c803c..bfc1364 100644
--- a/testing/062/namespacen3.xml
+++ b/testing/062/namespacen3.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespacen3" kind="namespace">
+ <compounddef id="namespacen3" kind="namespace" language="Tcl">
<compoundname>n3</compoundname>
<innernamespace refid="namespacen3_1_1n3">n3::n3</innernamespace>
<sectiondef kind="func">
diff --git a/testing/063/namespaceoo.xml b/testing/063/namespaceoo.xml
index eb0c93c..044c364 100644
--- a/testing/063/namespaceoo.xml
+++ b/testing/063/namespaceoo.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespaceoo" kind="namespace">
+ <compounddef id="namespaceoo" kind="namespace" language="Tcl">
<compoundname>oo</compoundname>
<innernamespace refid="namespaceoo_1_1define">oo::define</innernamespace>
<innernamespace refid="namespaceoo_1_1_helpers">oo::Helpers</innernamespace>
diff --git a/testing/063/namespaceoo_1_1_helpers.xml b/testing/063/namespaceoo_1_1_helpers.xml
index ff309cf..40b4830 100644
--- a/testing/063/namespaceoo_1_1_helpers.xml
+++ b/testing/063/namespaceoo_1_1_helpers.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespaceoo_1_1_helpers" kind="namespace">
+ <compounddef id="namespaceoo_1_1_helpers" kind="namespace" language="Tcl">
<compoundname>oo::Helpers</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespaceoo_1_1_helpers_1a96c5b755588beb2e930cff23ce811d6c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/063/namespaceoo_1_1define.xml b/testing/063/namespaceoo_1_1define.xml
index aa62fbd..214b705 100644
--- a/testing/063/namespaceoo_1_1define.xml
+++ b/testing/063/namespaceoo_1_1define.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
- <compounddef id="namespaceoo_1_1define" kind="namespace">
+ <compounddef id="namespaceoo_1_1define" kind="namespace" language="Tcl">
<compoundname>oo::define</compoundname>
<sectiondef kind="func">
<memberdef kind="function" id="namespaceoo_1_1define_1a89e7ea222a316f1926c1f9f30f2cc5c1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
diff --git a/testing/064/struct_foo.xml b/testing/064/struct_foo.xml
new file mode 100644
index 0000000..3765625
--- /dev/null
+++ b/testing/064/struct_foo.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
+ <compounddef id="struct_foo" kind="struct" language="C++" prot="public">
+ <compoundname>Foo</compoundname>
+ <sectiondef kind="public-func">
+ <memberdef kind="function" id="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Foo::operator int</definition>
+ <argsstring>()</argsstring>
+ <name>operator int</name>
+ <briefdescription>
+ <para>Conversion to int. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="064_castoperator.cpp" line="22" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Foo::operator int</definition>
+ <argsstring>() const </argsstring>
+ <name>operator int</name>
+ <briefdescription>
+ <para>Conversion to int const. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="064_castoperator.cpp" line="24" column="1"/>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ <para><ref refid="struct_foo" kindref="compound">Foo</ref>. </para>
+ </briefdescription>
+ <detaileddescription>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>No autolink for operator int()</para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">operator int()</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">title</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">Foo::operator int()</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">Foo::operator int()</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" kindref="member">title</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>No autolink for operator int() const</para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">operator int() const</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </detaileddescription>
+ <location file="064_castoperator.cpp" bodystart="20" bodyend="25"/>
+ <listofallmembers>
+ <member refid="struct_foo_1aab9774d892b6cd4a0fbebd034b4c1fad" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator int</name>
+ </member>
+ <member refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator int</name>
+ </member>
+ </listofallmembers>
+ </compounddef>
+</doxygen>
diff --git a/testing/064_castoperator.cpp b/testing/064_castoperator.cpp
new file mode 100644
index 0000000..d6f8006
--- /dev/null
+++ b/testing/064_castoperator.cpp
@@ -0,0 +1,25 @@
+// objective: test linking to the cast operator with and without const
+// check: struct_foo.xml
+/**
+ * @brief Foo
+ *
+ * - No autolink for operator int()
+ * - @ref operator int()
+ * - @ref operator int() "title"
+ * - Foo::operator int()
+ * - @ref Foo::operator int()
+ * - @ref Foo::operator int() "title"
+ *
+ * - No autolink for operator int() const
+ * - @ref operator int() const
+ * - @ref operator int() const "title"
+ * - Foo::operator int() const
+ * - @ref Foo::operator int() const
+ * - @ref Foo::operator int() const "title"
+ */
+struct Foo {
+ /** @brief Conversion to int */
+ operator int();
+ /** @brief Conversion to int const */
+ operator int() const;
+};
diff --git a/testing/065/indexpage.xml b/testing/065/indexpage.xml
new file mode 100644
index 0000000..e462e55
--- /dev/null
+++ b/testing/065/indexpage.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
+ <compounddef id="indexpage" kind="page">
+ <compoundname>index</compoundname>
+ <title>My Project</title>
+ <detaileddescription>
+ <para>これは日本語(en)です. Output for all languages. </para>
+ </detaileddescription>
+ </compounddef>
+</doxygen>
diff --git a/testing/065_tilde.dox b/testing/065_tilde.dox
new file mode 100644
index 0000000..0b4986f
--- /dev/null
+++ b/testing/065_tilde.dox
@@ -0,0 +1,12 @@
+// objective: test \~ command with non default OUTPUT_LANGUAGE which contains '-' letter
+// check: indexpage.xml
+// config: OUTPUT_LANGUAGE = Japanese-en
+/**
+\mainpage
+\~english This is English.
+\~dutch Dit is Nederlands.
+\~japanese これは日本語です.
+\~japanese-en これは日本語(en)です.
+\~german Dies ist Deutsch.
+\~ Output for all languages.
+*/
diff --git a/tmake/lib/linux-g++/tmake.conf b/tmake/lib/linux-g++/tmake.conf
index 193fadd..e100bce 100644
--- a/tmake/lib/linux-g++/tmake.conf
+++ b/tmake/lib/linux-g++/tmake.conf
@@ -11,7 +11,7 @@ TMAKE_CC = gcc
TMAKE_CFLAGS = -pipe -fsigned-char
TMAKE_CFLAGS_WARN_ON = -Wall -W
TMAKE_CFLAGS_WARN_OFF =
-TMAKE_CFLAGS_RELEASE = -O2
+TMAKE_CFLAGS_RELEASE = -O3
TMAKE_CFLAGS_DEBUG = -g
TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
diff --git a/tmake/lib/macosx-c++/tmake.conf b/tmake/lib/macosx-c++/tmake.conf
index ade3437..377b06f 100644
--- a/tmake/lib/macosx-c++/tmake.conf
+++ b/tmake/lib/macosx-c++/tmake.conf
@@ -11,7 +11,7 @@ TMAKE_CC = cc
TMAKE_CFLAGS = -pipe
TMAKE_CFLAGS_WARN_ON = -Wall -W -Wno-deprecated-declarations
TMAKE_CFLAGS_WARN_OFF =
-TMAKE_CFLAGS_RELEASE = -O2
+TMAKE_CFLAGS_RELEASE = -O3
TMAKE_CFLAGS_DEBUG = -g -fstack-protector
TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
diff --git a/vhdlparser/CharStream.cc b/vhdlparser/CharStream.cc
index 8cc17c3..65179f5 100644
--- a/vhdlparser/CharStream.cc
+++ b/vhdlparser/CharStream.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. CharStream.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. CharStream.cc Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#include "CharStream.h"
@@ -209,4 +209,4 @@ void CharStream::UpdateLineColumn(JAVACC_CHAR_TYPE c) {
}
}
-/* JavaCC - OriginalChecksum=e709b9ee1adf0fcb6b1c5e1641f10348 (do not edit this line) */
+/* JavaCC - OriginalChecksum=ade3c1b57a731a003629de593814ffa6 (do not edit this line) */
diff --git a/vhdlparser/CharStream.h b/vhdlparser/CharStream.h
index b0e74b6..f901e38 100644
--- a/vhdlparser/CharStream.h
+++ b/vhdlparser/CharStream.h
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. CharStream.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. CharStream.h Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#ifndef CHARSTREAM_H
#define CHARSTREAM_H
@@ -28,17 +28,17 @@ namespace parser {
class CharStream {
- public:
- void setTabSize(int i) { tabSize = i; }
- int getTabSize(int) { return tabSize; }
- virtual int getColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; }
- virtual int getLine() { return trackLineColumn ? bufline[bufpos] : -1; }
- virtual int getEndColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; }
- virtual int getEndLine() { return trackLineColumn ? bufline[bufpos] : -1; }
- virtual int getBeginColumn() { return trackLineColumn ? bufcolumn[tokenBegin] : -1; }
- virtual int getBeginLine() { return trackLineColumn ? bufline[tokenBegin] : -1; }
-
- virtual bool getTrackLineColumn() { return trackLineColumn; }
+public:
+ void setTabSize(int i) { tabSize = i; }
+ int getTabSize(int) { return tabSize; }
+ virtual int getColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; }
+ virtual int getLine() { return trackLineColumn ? bufline[bufpos] : -1; }
+ virtual int getEndColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; }
+ virtual int getEndLine() { return trackLineColumn ? bufline[bufpos] : -1; }
+ virtual int getBeginColumn() { return trackLineColumn ? bufcolumn[tokenBegin] : -1; }
+ virtual int getBeginLine() { return trackLineColumn ? bufline[tokenBegin] : -1; }
+
+ virtual bool getTrackLineColumn() { return trackLineColumn; }
virtual void setTrackLineColumn(bool val) { trackLineColumn = val; }
/**
@@ -47,25 +47,25 @@ class CharStream {
* (longer) token. So, they will be used again as the prefix of the next
* token and it is the implemetation's responsibility to do this right.
*/
-virtual inline void backup(int amount) {
- inBuf += amount;
- bufpos -= amount;
- if (bufpos < 0) {
- bufpos += bufsize;
+ virtual inline void backup(int amount) {
+ inBuf += amount;
+ bufpos -= amount;
+ if (bufpos < 0) {
+ bufpos += bufsize;
+ }
}
-}
/**
* Returns the next character that marks the beginning of the next token.
* All characters must remain in the buffer between two successive calls
* to this method to implement backup correctly.
*/
-virtual inline JAVACC_CHAR_TYPE BeginToken() {
- tokenBegin = -1;
- JAVACC_CHAR_TYPE c = readChar();
- tokenBegin = bufpos;
- return c;
-}
+ virtual inline JAVACC_CHAR_TYPE BeginToken() {
+ tokenBegin = -1;
+ JAVACC_CHAR_TYPE c = readChar();
+ tokenBegin = bufpos;
+ return c;
+ }
/**
@@ -73,31 +73,30 @@ virtual inline JAVACC_CHAR_TYPE BeginToken() {
* of selecting the input is the responsibility of the class
* implementing this class.
*/
-virtual inline JAVACC_CHAR_TYPE readChar() {
- if (inBuf > 0) {
- --inBuf;
- ++bufpos;
- if (bufpos == bufsize) {
- bufpos = 0;
+ virtual inline JAVACC_CHAR_TYPE readChar() {
+ if (inBuf > 0) {
+ --inBuf;
+ ++bufpos;
+ if (bufpos == bufsize) {
+ bufpos = 0;
+ }
+ return buffer[bufpos];
}
- return buffer[bufpos];
- }
+ ++bufpos;
+ if (bufpos >= maxNextCharInd) {
+ FillBuff();
+ }
- ++bufpos;
- if (bufpos >= maxNextCharInd) {
- FillBuff();
- }
+ JAVACC_CHAR_TYPE c = buffer[bufpos];
- JAVACC_CHAR_TYPE c = buffer[bufpos];
+ if (trackLineColumn) {
+ UpdateLineColumn(c);
+ }
- if (trackLineColumn) {
- UpdateLineColumn(c);
+ return c;
}
- return c;
-}
-
virtual void ExpandBuff(bool wrapAround);
virtual void FillBuff();
@@ -112,8 +111,7 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
if (bufpos >= tokenBegin)
return JAVACC_STRING_TYPE(buffer + tokenBegin, bufpos - tokenBegin + 1);
else
- return JAVACC_STRING_TYPE(buffer + tokenBegin, bufsize - tokenBegin)
- .append(buffer, bufpos + 1);
+ return JAVACC_STRING_TYPE(buffer + tokenBegin, bufsize - tokenBegin).append(buffer, bufpos + 1);
}
/**
@@ -126,8 +124,7 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
if ((bufpos + 1) >= len) {
return JAVACC_STRING_TYPE(buffer + bufpos - len + 1, len);
}
- return JAVACC_STRING_TYPE(buffer + bufsize - (len - bufpos - 1), len - bufpos - 1)
- .append(buffer, bufpos + 1);
+ return JAVACC_STRING_TYPE(buffer + bufsize - (len - bufpos - 1), len - bufpos - 1).append(buffer, bufpos + 1);
}
/**
@@ -144,74 +141,71 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
}
bool endOfInput() {
- return inBuf == 0 && bufpos + 1 >= maxNextCharInd &&
- inputStream->endOfInput();
+ return inBuf == 0 && bufpos + 1 >= maxNextCharInd && inputStream->endOfInput();
}
CharStream(const JAVACC_CHAR_TYPE *buf, int sz, int startline,
int startcolumn, int buffersize) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
+ bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(NULL), deleteStream(false) {
ReInit(JAVACC_STRING_TYPE(buf, sz), startline, startcolumn, buffersize);
}
CharStream(const JAVACC_CHAR_TYPE *buf, int sz, int startline, int startcolumn) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
+ bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(NULL), deleteStream(false) {
ReInit(JAVACC_STRING_TYPE(buf, sz), startline, startcolumn, INITIAL_BUFFER_SIZE);
}
CharStream(const JAVACC_STRING_TYPE& str, int startline,
int startcolumn, int buffersize) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
+ bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(NULL), deleteStream(false) {
ReInit(str, startline, startcolumn, buffersize);
}
CharStream(const JAVACC_STRING_TYPE& str, int startline, int startcolumn) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0) ,tabSize(8), trackLineColumn(true){
+ bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(NULL), deleteStream(false) {
ReInit(str, startline, startcolumn, INITIAL_BUFFER_SIZE);
}
CharStream(ReaderStream *input_stream, int startline,
- int startcolumn, int) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
- ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
+ int startcolumn, int buffersize) :
+ bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(NULL), deleteStream(false) {
+ ReInit(input_stream, startline, startcolumn, buffersize);
}
CharStream(ReaderStream *input_stream, int startline, int startcolumn) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
+ bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(NULL), deleteStream(false) {
ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
}
CharStream(ReaderStream *input_stream) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
+ bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(NULL), deleteStream(false) {
ReInit(input_stream, 1, 1, INITIAL_BUFFER_SIZE);
}
- virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn,
- int buffersize);
+ virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn, int buffersize);
- virtual void ReInit(ReaderStream *input_stream, int startline,
- int startcolumn) {
+ virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn) {
ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
}
@@ -232,26 +226,26 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
protected:
virtual void UpdateLineColumn(JAVACC_CHAR_TYPE c);
- int *bufline;
- int *bufcolumn;
- ReaderStream *inputStream;
- bool deleteStream;
- JAVACC_CHAR_TYPE * buffer;
- int bufpos;
- int bufsize;
- int tokenBegin;
- int column;
- int line;
- bool prevCharIsCR ;
- bool prevCharIsLF ;
- int available;
- int maxNextCharInd;
- int inBuf ;
- int tabSize ;
- bool trackLineColumn;
+ int* bufline;
+ int* bufcolumn;
+ JAVACC_CHAR_TYPE* buffer;
+ int bufpos;
+ int bufsize;
+ int tokenBegin;
+ int column;
+ int line;
+ bool prevCharIsCR;
+ bool prevCharIsLF;
+ int available;
+ int maxNextCharInd;
+ int inBuf;
+ int tabSize;
+ bool trackLineColumn;
+ ReaderStream* inputStream;
+ bool deleteStream;
};
}
}
#endif
-/* JavaCC - OriginalChecksum=5eaf75ef6a2c7859369c80cf6fd037e0 (do not edit this line) */
+/* JavaCC - OriginalChecksum=89f4cb30f0d3487ee809cca18a2924f2 (do not edit this line) */
diff --git a/vhdlparser/ErrorHandler.h b/vhdlparser/ErrorHandler.h
index fba0a0e..f5e53e4 100644
--- a/vhdlparser/ErrorHandler.h
+++ b/vhdlparser/ErrorHandler.h
@@ -1,15 +1,16 @@
-/* Generated By:JavaCC: Do not edit this line. ErrorHandler.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ErrorHandler.h Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,BUILD_PARSER=true,BUILD_TOKEN_MANAGER=true */
#ifndef ERRORHANDLER_H
#define ERRORHANDLER_H
-//#include <string>
+#include <stdio.h>
+#include <string>
#include "JavaCC.h"
#include "Token.h"
namespace vhdl {
namespace parser {
-//JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
+JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
class VhdlParser;
class ErrorHandler {
@@ -23,22 +24,22 @@ namespace parser {
// expectedKind - token kind that the parser was trying to consume.
// expectedToken - the image of the token - tokenImages[expectedKind].
// actual - the actual token that the parser got instead.
- virtual void handleUnexpectedToken(int , JAVACC_STRING_TYPE , Token *, VhdlParser *) {
+ virtual void handleUnexpectedToken(int /*expectedKind*/, JAVACC_STRING_TYPE expectedToken, Token *actual, VhdlParser * /*parser*/) {
error_count++;
- // fprintf(stderr, "Expecting %s at: %d:%d but got %s\n", addUnicodeEscapes(expectedToken).c_str(), actual->beginLine, actual->beginColumn, addUnicodeEscapes(actual->image).c_str());
+ fprintf(stderr, "Expecting %s at: %d:%d but got %s\n", addUnicodeEscapes(expectedToken).c_str(), actual->beginLine, actual->beginColumn, addUnicodeEscapes(actual->image).c_str());
}
// Called when the parser cannot continue parsing.
// last - the last token successfully parsed.
// unexpected - the token at which the error occurs.
- // production - the production in which this error occurrs.
- virtual void handleParseError(Token *, Token *, JAVACC_SIMPLE_STRING , VhdlParser *) {
+ // production - the production in which this error occurs.
+ virtual void handleParseError(Token * /*last*/, Token *unexpected, JAVACC_SIMPLE_STRING production, VhdlParser * /*parser*/) {
error_count++;
- // fprintf(stderr, "Encountered: %s at: %d:%d while parsing: %s\n", addUnicodeEscapes(unexpected->image).c_str(), unexpected->beginLine, unexpected->beginColumn, production.c_str());
+ fprintf(stderr, "Encountered: %s at: %d:%d while parsing: %s\n", addUnicodeEscapes(unexpected->image).c_str(), unexpected->beginLine, unexpected->beginColumn, production.c_str());
}
virtual int getErrorCount() {
return error_count;
}
- virtual void handleOtherError(JAVACC_STRING_TYPE message, VhdlParser *) {
+ virtual void handleOtherError(JAVACC_STRING_TYPE message, VhdlParser * /*parser*/) {
fprintf(stderr, "Error: %s\n", (char*)message.c_str());
}
virtual ~ErrorHandler() {}
@@ -61,11 +62,11 @@ namespace parser {
// errorAfter : prefix that was seen before this error occurred
// curchar : the offending character
//
- virtual void lexicalError(bool EOFSeen, int /*lexState*/, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, VhdlParserTokenManager*) {
+ virtual void lexicalError(bool EOFSeen, int /*lexState*/, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, VhdlParserTokenManager* /*token_manager*/) {
// by default, we just print an error message and return.
fprintf(stderr, "Lexical error at: %d:%d. Encountered: %c after: %s.\n", errorLine, errorColumn, curChar, (EOFSeen? "EOF" : (const char*)errorAfter.c_str()));
}
- virtual void lexicalError(JAVACC_STRING_TYPE errorMessage, VhdlParserTokenManager* ) {
+ virtual void lexicalError(JAVACC_STRING_TYPE errorMessage, VhdlParserTokenManager* /*token_manager*/) {
fprintf(stderr, "%s\n", (char*)errorMessage.c_str());
}
virtual ~TokenManagerErrorHandler() {}
@@ -75,4 +76,4 @@ namespace parser {
}
#endif
-/* JavaCC - OriginalChecksum=685d19cb4cd943b60089f599e45f23ad (do not edit this line) */
+/* JavaCC - OriginalChecksum=c18f1105ba178be8e21cc9f279f94496 (do not edit this line) */
diff --git a/vhdlparser/JavaCC.h b/vhdlparser/JavaCC.h
index b97c20d..224b2b5 100644
--- a/vhdlparser/JavaCC.h
+++ b/vhdlparser/JavaCC.h
@@ -1,13 +1,11 @@
-/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef __JAVACC_H
-#define __JAVACC_H
+#ifndef JAVACC_H_
+#define JAVACC_H_
#include <stdio.h>
-#include <string.h>
+#include <string>
#include <memory.h>
#include <assert.h>
-#include <cstring>
-
#include "vhdlstring.h"
#ifndef JAVACC_CHAR_TYPE
@@ -18,24 +16,17 @@
#define JAVACC_STRING_TYPE VhdlString
#endif
-#define finally // TODO(Sreeni): Get rid of when we fix jjtree
-
#define JAVACC_SIMPLE_STRING VhdlString
-JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
-
-
typedef JAVACC_STRING_TYPE StringBuffer;
typedef JAVACC_STRING_TYPE String;
// Abstraction on stream classes to read a block of data into a buffer.
class ReaderStream {
- public:
+public:
// Read block of data into a buffer and return the actual number read.
- virtual size_t read(JAVACC_CHAR_TYPE *, int, size_t) {
- return 0;
- }
- virtual bool endOfInput() { return true; }
+ virtual size_t read(JAVACC_CHAR_TYPE * /*bufptr*/, int /*offset*/, size_t /*len*/) { return 0; }
+ virtual bool endOfInput() { return true; }
virtual ~ReaderStream() {}
};
@@ -49,4 +40,4 @@ const JAVACC_CHAR_TYPE EMPTY[] = { 0 };
#endif
#endif
-/* JavaCC - OriginalChecksum=775c677272b259e2a33aac80851ba9f1 (do not edit this line) */
+/* JavaCC - OriginalChecksum=eb066370c81bb58bb68713327da9719f (do not edit this line) */
diff --git a/vhdlparser/JavaCC.h.in b/vhdlparser/JavaCC.h.in
index b97c20d..224b2b5 100644
--- a/vhdlparser/JavaCC.h.in
+++ b/vhdlparser/JavaCC.h.in
@@ -1,13 +1,11 @@
-/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef __JAVACC_H
-#define __JAVACC_H
+#ifndef JAVACC_H_
+#define JAVACC_H_
#include <stdio.h>
-#include <string.h>
+#include <string>
#include <memory.h>
#include <assert.h>
-#include <cstring>
-
#include "vhdlstring.h"
#ifndef JAVACC_CHAR_TYPE
@@ -18,24 +16,17 @@
#define JAVACC_STRING_TYPE VhdlString
#endif
-#define finally // TODO(Sreeni): Get rid of when we fix jjtree
-
#define JAVACC_SIMPLE_STRING VhdlString
-JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
-
-
typedef JAVACC_STRING_TYPE StringBuffer;
typedef JAVACC_STRING_TYPE String;
// Abstraction on stream classes to read a block of data into a buffer.
class ReaderStream {
- public:
+public:
// Read block of data into a buffer and return the actual number read.
- virtual size_t read(JAVACC_CHAR_TYPE *, int, size_t) {
- return 0;
- }
- virtual bool endOfInput() { return true; }
+ virtual size_t read(JAVACC_CHAR_TYPE * /*bufptr*/, int /*offset*/, size_t /*len*/) { return 0; }
+ virtual bool endOfInput() { return true; }
virtual ~ReaderStream() {}
};
@@ -49,4 +40,4 @@ const JAVACC_CHAR_TYPE EMPTY[] = { 0 };
#endif
#endif
-/* JavaCC - OriginalChecksum=775c677272b259e2a33aac80851ba9f1 (do not edit this line) */
+/* JavaCC - OriginalChecksum=eb066370c81bb58bb68713327da9719f (do not edit this line) */
diff --git a/vhdlparser/Makefile.in b/vhdlparser/Makefile.in
index 2838700..ef2c774 100644
--- a/vhdlparser/Makefile.in
+++ b/vhdlparser/Makefile.in
@@ -31,8 +31,7 @@ regenerate:
VhdlParserConstants.h VhdlParserTokenManager.cc VhdlParserTokenManager.h \
JavaCC.h
javacc vhdlparser.jj
- patch <vhdlparser.patch
- $(CP) JavaCC.h.in JavaCC.h
+ $(CP) JavaCC.h.in JavaCC.h
distclean: clean
$(RM) Makefile vhdlparser.pro
diff --git a/vhdlparser/ParseException.cc b/vhdlparser/ParseException.cc
index 31ee7a3..6ef9738 100644
--- a/vhdlparser/ParseException.cc
+++ b/vhdlparser/ParseException.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ParseException.cc Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#include "ParseException.h"
@@ -141,8 +141,6 @@ namespace parser {
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i))
{
- case 0 :
- continue;
case '\b':
retval.append("\\b");
continue;
@@ -183,4 +181,4 @@ namespace parser {
}
}
-/* JavaCC - OriginalChecksum=99d488e13335cf377284c90700f070ed (do not edit this line) */
+/* JavaCC - OriginalChecksum=9f6af8fd72f5fe3e4210cf02acbd8387 (do not edit this line) */
diff --git a/vhdlparser/ParseException.h b/vhdlparser/ParseException.h
index 1f3a3dc..c36613f 100644
--- a/vhdlparser/ParseException.h
+++ b/vhdlparser/ParseException.h
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ParseException.h Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#ifndef _PARSE_EXCEPTION_H
#define _PARSE_EXCEPTION_H
@@ -96,4 +96,4 @@ class ParseException {
}
}
#endif
-/* JavaCC - OriginalChecksum=8c47c56fc2030f05b43e20cae6ca5d66 (do not edit this line) */
+/* JavaCC - OriginalChecksum=bd87c2fc11a4306bd2c2482fd1025b7c (do not edit this line) */
diff --git a/vhdlparser/Token.cc b/vhdlparser/Token.cc
index 62a8169..735091d 100644
--- a/vhdlparser/Token.cc
+++ b/vhdlparser/Token.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. Token.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. Token.cc Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,TOKEN_INCLUDES=,TOKEN_EXTENDS= */
#include "Token.h"
@@ -89,4 +89,4 @@ namespace parser {
}
}
-/* JavaCC - OriginalChecksum=9db9ca693072c4c37bb7cc933c0c5e35 (do not edit this line) */
+/* JavaCC - OriginalChecksum=dcb0f64486aa6455ae5af05d6bb539ec (do not edit this line) */
diff --git a/vhdlparser/Token.h b/vhdlparser/Token.h
index 5fce69f..040899e 100644
--- a/vhdlparser/Token.h
+++ b/vhdlparser/Token.h
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. Token.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. Token.h Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,TOKEN_INCLUDES=,TOKEN_EXTENDS= */
#ifndef TOKEN_H
#define TOKEN_H
@@ -86,12 +86,13 @@ class Token
*/
Token(int kind, JAVACC_STRING_TYPE image);
+ virtual ~Token();
+
/**
* Returns the image.
*/
JAVACC_STRING_TYPE toString();
- public: virtual ~Token();
/**
* Returns a new Token void *, by default. However, if you want, you
@@ -113,4 +114,4 @@ class Token
}
}
#endif
-/* JavaCC - OriginalChecksum=2f5eb1c937adc983dfa2008c4fe383a7 (do not edit this line) */
+/* JavaCC - OriginalChecksum=4748c3d6443aa3445d3c95ab54f14c2a (do not edit this line) */
diff --git a/vhdlparser/TokenManager.h b/vhdlparser/TokenManager.h
index efffce6..39353ba 100644
--- a/vhdlparser/TokenManager.h
+++ b/vhdlparser/TokenManager.h
@@ -1,10 +1,11 @@
-/* Generated By:JavaCC: Do not edit this line. TokenManager.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenManager.h Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#ifndef TOKENMANAGER_H
#define TOKENMANAGER_H
#include "JavaCC.h"
#include "Token.h"
+using namespace std;
namespace vhdl {
namespace parser {
@@ -19,10 +20,9 @@ public:
/** This gets the next token from the input stream.
* A token of kind 0 (<EOF>) should be returned on EOF.
*/
- public: virtual Token *getNextToken() = 0;
- public: virtual ~TokenManager() { }
- public: virtual void lexicalError() {
- fprintf(stderr, "Lexical error encountered\n");
+ virtual ~TokenManager() { }
+ virtual Token *getNextToken() = 0;
+ virtual void lexicalError() {
}
};
@@ -30,4 +30,4 @@ public:
}
}
#endif
-/* JavaCC - OriginalChecksum=d4725ee75465725057819b3b07fadaa7 (do not edit this line) */
+/* JavaCC - OriginalChecksum=918e2eba53e028d6c4142283ce3f498f (do not edit this line) */
diff --git a/vhdlparser/TokenMgrError.cc b/vhdlparser/TokenMgrError.cc
index 9093e6e..6231196 100644
--- a/vhdlparser/TokenMgrError.cc
+++ b/vhdlparser/TokenMgrError.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.cc Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#include "TokenMgrError.h"
@@ -79,9 +79,6 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str) {
JAVACC_CHAR_TYPE ch = str[i];
switch (ch)
{
- case 0 :
- retval += EMPTY[0];
- continue;
case '\b':
retval.append("\\b");
continue;
@@ -118,4 +115,4 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str) {
}
}
-/* JavaCC - OriginalChecksum=2bf63f131c8e60fd30c70d0b4f660016 (do not edit this line) */
+/* JavaCC - OriginalChecksum=2fe11435e6701b2fca885354b08bfdf6 (do not edit this line) */
diff --git a/vhdlparser/TokenMgrError.h b/vhdlparser/TokenMgrError.h
index 2702b29..abb305d 100644
--- a/vhdlparser/TokenMgrError.h
+++ b/vhdlparser/TokenMgrError.h
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.h Version 6.2 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#ifndef _TOKENMGRERROR_H
#define _TOKENMGRERROR_H
@@ -8,7 +8,7 @@
namespace vhdl {
namespace parser {
- enum LexerErrors {
+enum LexerErrors {
/**
* Lexical error occurred.
*/
@@ -28,11 +28,10 @@ namespace parser {
* Detected (and bailed out of) an infinite loop in the token manager.
*/
LOOP_DETECTED = 3,
- };
+};
-class TokenMgrError
-{
- public:
+class TokenMgrError {
+public:
/*
* Ordinals for various reasons why an Error of this type can be thrown.
*/
@@ -57,7 +56,8 @@ class TokenMgrError
*/
JAVACC_STRING_TYPE LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar);
- private: JAVACC_STRING_TYPE message;
+private:
+ JAVACC_STRING_TYPE message;
/**
* You can also modify the body of this method to customize your error messages.
@@ -68,6 +68,7 @@ class TokenMgrError
*
* from this method for such cases in the release version of your parser.
*/
+public:
JAVACC_STRING_TYPE getMessage() ;
/*
@@ -75,16 +76,16 @@ class TokenMgrError
*/
/** No arg constructor. */
- public: TokenMgrError() ;
+ TokenMgrError() ;
/** Constructor with message and reason. */
- public: TokenMgrError(JAVACC_STRING_TYPE message, int reason) ;
+ TokenMgrError(JAVACC_STRING_TYPE message, int reason) ;
/** Full Constructor. */
- public: TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, int reason) ;
+ TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, int reason) ;
};
}
}
#endif
-/* JavaCC - OriginalChecksum=c7d825cb4d037b031ae43569d383f738 (do not edit this line) */
+/* JavaCC - OriginalChecksum=c22a1b25630ec91deb47dcba22b6b39d (do not edit this line) */
diff --git a/vhdlparser/VhdlParser.cc b/vhdlparser/VhdlParser.cc
index f158ffb..5c8b004 100644
--- a/vhdlparser/VhdlParser.cc
+++ b/vhdlparser/VhdlParser.cc
@@ -1,5 +1,6 @@
/* VhdlParser.cc */
-#include "./VhdlParser.h"
+#include "VhdlParser.h"
+#include "TokenMgrError.h"
namespace vhdl {
namespace parser {
unsigned int jj_la1_0[] = {
@@ -64,7 +65,7 @@ assert(false);
}
-QCString VhdlParser::access_type_definition() {Token *tok;QCString str,str1;if (!hasError) {
+QCString VhdlParser::access_type_definition() {Token *tok=0;QCString str,str1;if (!hasError) {
tok = jj_consume_token(ACCESS_T);
}
@@ -78,7 +79,7 @@ assert(false);
}
-QCString VhdlParser::actual_designator() {QCString str;Token *t;
+QCString VhdlParser::actual_designator() {QCString str;Token *t=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case OPEN_T:{if (!hasError) {
@@ -722,7 +723,7 @@ QCString VhdlParser::assertion_statement() {QCString s,s1,s2;Token *t=0;if (!has
}
if(t) s+=":";
- return s+s1+";";
+ return s+s1+";";
assert(false);
}
@@ -816,7 +817,7 @@ assert(false);
}
-QCString VhdlParser::attribute_designator() {QCString s;Token *tok;
+QCString VhdlParser::attribute_designator() {QCString s;Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
case EXTENDED_CHARACTER:{if (!hasError) {
@@ -935,7 +936,7 @@ assert(false);
}
-QCString VhdlParser::base() {Token *tok;if (!hasError) {
+QCString VhdlParser::base() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(INTEGER);
}
@@ -945,7 +946,7 @@ assert(false);
}
-QCString VhdlParser::base_specifier() {Token *tok;if (!hasError) {
+QCString VhdlParser::base_specifier() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
@@ -965,7 +966,7 @@ assert(false);
}
-QCString VhdlParser::based_integer() {Token *tok;if (!hasError) {
+QCString VhdlParser::based_integer() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
@@ -975,7 +976,7 @@ assert(false);
}
-QCString VhdlParser::based_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::based_literal() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(BASED_LITERAL);
}
@@ -985,7 +986,7 @@ assert(false);
}
-QCString VhdlParser::basic_identifier() {Token *tok;if (!hasError) {
+QCString VhdlParser::basic_identifier() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
@@ -1048,7 +1049,7 @@ void VhdlParser::binding_indication() {if (!hasError) {
}
-QCString VhdlParser::bit_string_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::bit_string_literal() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(BIT_STRING_LITERAL);
}
@@ -1058,7 +1059,7 @@ assert(false);
}
-QCString VhdlParser::bit_value() {Token *tok;if (!hasError) {
+QCString VhdlParser::bit_value() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
@@ -1668,7 +1669,7 @@ FlowChart::moveToPrevLevel();
}
-QCString VhdlParser::character_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::character_literal() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(CHARACTER_LITERAL);
}
@@ -2550,11 +2551,11 @@ QCString VhdlParser::constant_declaration() {QCString s,s1,s2;Token *t=0;if (!ha
}
if(t)
- s2.prepend(":=");
- QCString it=s1+s2;
+ s2.prepend(":=");
+ QCString it=s1+s2;
addVhdlType(s.data(),getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public);
it.prepend("constant ");
- return it;
+ return it;
assert(false);
}
@@ -2656,7 +2657,7 @@ void VhdlParser::context_item() {
}
-QCString VhdlParser::decimal_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::decimal_literal() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(DECIMAL_LITERAL);
}
@@ -2824,7 +2825,7 @@ assert(false);
}
-QCString VhdlParser::direction() {Token *tok;
+QCString VhdlParser::direction() {Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case TO_T:{if (!hasError) {
@@ -2973,7 +2974,7 @@ assert(false);
}
-QCString VhdlParser::entity_aspect() {Token *tok;QCString s,s1;
+QCString VhdlParser::entity_aspect() {Token *tok=0;QCString s,s1;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ENTITY_T:{if (!hasError) {
@@ -4336,7 +4337,7 @@ assert(false);
}
-QCString VhdlParser::formal_designator() {QCString s;Token *tok;
+QCString VhdlParser::formal_designator() {QCString s;Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
@@ -4448,7 +4449,7 @@ error_skipto(SEMI_T);
}
addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
- return "type "+s+" is "+s2+";";
+ return "type "+s+" is "+s2+";";
assert(false);
}
@@ -4798,7 +4799,7 @@ void VhdlParser::guarded_signal_specification() {if (!hasError) {
}
-QCString VhdlParser::identifier() {Token *tok;
+QCString VhdlParser::identifier() {Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case EXTENDED_CHARACTER:{if (!hasError) {
@@ -5135,7 +5136,7 @@ assert(false);
}
-QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok;
+QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMPONENT_T:
case BASIC_IDENTIFIER:
@@ -5235,7 +5236,7 @@ assert(false);
}
-QCString VhdlParser::instantiation_list() {QCString s;Token *tok;
+QCString VhdlParser::instantiation_list() {QCString s;Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
case EXTENDED_CHARACTER:{if (!hasError) {
@@ -5576,15 +5577,15 @@ QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=
}
if(tok)
- s5=tok->image.c_str();
+ s5=tok->image.c_str();
- if(tok1)
- s3=tok1->image.data();
+ if(tok1)
+ s3=tok1->image.data();
- if(tok2)
- s3+=":=";
+ if(tok2)
+ s3+=":=";
- QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
+ QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
if (currP!=VhdlDocGen::COMPONENT)
{
if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
@@ -5601,7 +5602,7 @@ if(tok)
}
// fprintf(stderr,"\n\n <<port %s >>\n",$$.data());
} // if component
- return it;
+ return it;
assert(false);
}
@@ -5639,7 +5640,7 @@ s.prepend("while ");
QCString q=lab+" for "+s;
FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
lab="";
- return q;
+ return q;
}
break;
@@ -5681,10 +5682,10 @@ QCString VhdlParser::library_clause() {QCString s;if (!hasError) {
if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
{
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
+ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
}
QCString s1="library "+s;
- return s1;
+ return s1;
assert(false);
}
@@ -5845,7 +5846,7 @@ s+=":";
if (!hasError) {
if(s1.isEmpty())
- FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
+ FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
}
if (!hasError) {
@@ -5888,7 +5889,7 @@ QCString q = s+" loop "+s2+" end loop" +s3;
QCString endLoop="end loop" + s3;
FlowChart::moveToPrevLevel();
FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0);
- return q;
+ return q;
assert(false);
}
@@ -5937,7 +5938,7 @@ assert(false);
}
-QCString VhdlParser::mode() {Token *tok;
+QCString VhdlParser::mode() {Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IN_T:{if (!hasError) {
@@ -6003,7 +6004,7 @@ assert(false);
}
-QCString VhdlParser::multiplying_operation() {Token *tok;
+QCString VhdlParser::multiplying_operation() {Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case MULT_T:{if (!hasError) {
@@ -6579,7 +6580,7 @@ assert(false);
}
-QCString VhdlParser::operator_symbol() {Token *tok;if (!hasError) {
+QCString VhdlParser::operator_symbol() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(STRINGLITERAL);
}
@@ -6843,11 +6844,11 @@ lastCompound=current;
clone->section=Entry::NAMESPACE_SEC;
clone->spec=VhdlDocGen::PACKAGE;
clone->name=s;
- clone->startLine=getLine();
- clone->bodyLine=getLine();
+ clone->startLine=getLine(PACKAGE_T);
+ clone->bodyLine=getLine(PACKAGE_T);
clone->protection=Package;
current_root->addSubEntry(clone);
- addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
+ addVhdlType(s,getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
}
if (!hasError) {
@@ -7229,9 +7230,9 @@ s2+=s1;s2+="#";
}
current->args=s2;
- current->args.prepend("units");
+ current->args.prepend("units");
current->spec=VhdlDocGen::UNITS;
- return s2;
+ return s2;
assert(false);
}
@@ -8255,9 +8256,9 @@ QCString VhdlParser::report_statement() {Token *t=0;Token *t1=0;QCString s,s1,s2
}
if(t) s.append(":");
- s1.prepend(" report ");
- if(t1) s2.prepend(" severity ");
- return s+s1+s2+";";
+ s1.prepend(" report ");
+ if(t1) s2.prepend(" severity ");
+ return s+s1+s2+";";
assert(false);
}
@@ -9035,9 +9036,9 @@ void VhdlParser::signal_declaration() {Token* tok=0;QCString s,s1,s2,s3,s4;if (!
}
if(tok)
- s3.prepend(":=");
- s4=s1+s2+s3;
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
+ s3.prepend(":=");
+ s4=s1+s2+s3;
+ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
}
@@ -9309,7 +9310,7 @@ assert(false);
}
-QCString VhdlParser::string_literal() {Token *tok;if (!hasError) {
+QCString VhdlParser::string_literal() {Token *tok=0;if (!hasError) {
tok = jj_consume_token(STRINGLITERAL);
}
@@ -9699,8 +9700,8 @@ void VhdlParser::subprogram_specification() {QCString s;Token *tok=0;Token *t;
currP=VhdlDocGen::PROCEDURE;
createFunction(s.data(),currP,0);
tempEntry=current;
- current->startLine=getLine(PROCEDURE_T);
- current->bodyLine=getLine(PROCEDURE_T);
+ current->startLine=getLine(PROCEDURE_T);
+ current->bodyLine=getLine(PROCEDURE_T);
}
if (!hasError) {
@@ -9814,13 +9815,13 @@ newEntry();
if (!hasError) {
currP=VhdlDocGen::FUNCTION;
- if(tok)
+ if(tok)
createFunction(tok->image.c_str(),currP,s.data());
- else
- createFunction(0,currP,s.data());
- tempEntry=current;
- current->startLine=getLine(FUNCTION_T);
- current->bodyLine=getLine(FUNCTION_T);
+ else
+ createFunction(0,currP,s.data());
+ tempEntry=current;
+ current->startLine=getLine(FUNCTION_T);
+ current->bodyLine=getLine(FUNCTION_T);
}
if (!hasError) {
@@ -10365,14 +10366,14 @@ QStringList ql1=QStringList::split(",",s,FALSE);
for (uint j=0;j<ql1.count();j++)
{
QStringList ql=QStringList::split(".",ql1[j],FALSE);
- QCString it=ql[1].utf8();
+ QCString it=ql[1].utf8();
if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
{
VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
}
}
s1="use "+s;
- return s1;
+ return s1;
assert(false);
}
@@ -10501,24 +10502,24 @@ QCString VhdlParser::variable_declaration() {Token *tok=0;Token *t1=0;QCString s
}
int spec;
- if(t1)
- s2.prepend(":=");
- QCString val=" variable "+s+":"+s1+s2+";";
- QCString it=s1;
- if(tok != 0)
- {
- it.prepend(" shared ");
- val.prepend(" shared");
- spec=VhdlDocGen::SHAREDVARIABLE;
- }
- else
- spec=VhdlDocGen::SHAREDVARIABLE;
-
- if(t1){
- it+=":=";
+ if(t1)
+ s2.prepend(":=");
+ QCString val=" variable "+s+":"+s1+s2+";";
+ QCString it=s1;
+ if(tok != 0)
+ {
+ it.prepend(" shared ");
+ val.prepend(" shared");
+ spec=VhdlDocGen::SHAREDVARIABLE;
+ }
+ else
+ spec=VhdlDocGen::SHAREDVARIABLE;
+
+ if(t1){
+ it+=":=";
it+=s2;
- }
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
+ }
+ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
return val;
assert(false);
}
@@ -11249,7 +11250,7 @@ QCString VhdlParser::interface_package_declaration() {QCString s,s1;if (!hasErro
}
current->name=s;
- return "package "+s+" is new "+s1;
+ return "package "+s+" is new "+s1;
assert(false);
}
@@ -11854,7 +11855,7 @@ QCString VhdlParser::pathname_element() {QCString s,s1;if (!hasError) {
}
if(!s1.isEmpty())
- return s+"("+s1+")";
+ return s+"("+s1+")";
return s;
assert(false);
@@ -12681,17 +12682,17 @@ QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *
}
QCString q;
- if(t) q=t->image.data();
+ if(t) q=t->image.data();
if(t2) s3="<>";
- if (!s3.isEmpty())
+ if (!s3.isEmpty())
{
s3.prepend(" is ");
}
current->name=s;
- if (parse_sec==GEN_SEC)
+ if (parse_sec==GEN_SEC)
{
QCString ss=q+" function "+s1+" return "+s2+s3;
- int a=getLine(FUNCTION_T);
+ int a=getLine(FUNCTION_T);
int b=getLine(PROCEDURE_T);
if (a>b) b=a;
@@ -12746,11 +12747,11 @@ param_sec=PARAM_SEC;
}
if(tok)
- {
- s = tok->image.data();
- param_sec=0;
- }
- return s+"("+s1+")";
+ {
+ s = tok->image.data();
+ param_sec=0;
+ }
+ return s+"("+s1+")";
assert(false);
}
@@ -12787,26 +12788,16 @@ void VhdlParser::parseInline() {
VhdlParser::VhdlParser(TokenManager *tm){
head = NULL;
+ errorHandlerCreated = false;
ReInit(tm);
}
- VhdlParser::~VhdlParser()
+VhdlParser::~VhdlParser()
{
- if (token_source) delete token_source;
- if (head) {
- Token *next, *t = head;
- while (t) {
- next = t->next;
- delete t;
- t = next;
- }
- }
- if (errorHandlerCreated) {
- delete errorHandler;
- }
+ clear();
}
void VhdlParser::ReInit(TokenManager *tm){
- if (head) delete head;
+ clear();
errorHandler = new ErrorHandler();
errorHandlerCreated = true;
hasError = false;
@@ -12828,6 +12819,24 @@ void VhdlParser::ReInit(TokenManager *tm){
}
+void VhdlParser::clear(){
+ //Since token manager was generate from outside,
+ //parser should not take care of deleting
+ //if (token_source) delete token_source;
+ if (head) {
+ Token *next, *t = head;
+ while (t) {
+ next = t->next;
+ delete t;
+ t = next;
+ }
+ }
+ if (errorHandlerCreated) {
+ delete errorHandler;
+ }
+}
+
+
Token * VhdlParser::jj_consume_token(int kind) {
Token *oldToken;
if ((oldToken = token)->next != NULL) token = token->next;
@@ -12907,26 +12916,23 @@ int VhdlParser::jj_ntk_f(){
}
-void VhdlParser::jj_add_error_token(int kind, int pos) {
+ void VhdlParser::jj_add_error_token(int kind, int pos) {
}
- /** Generate ParseException. */
void VhdlParser::parseError() {
- // fprintf(stderr, "Parse error at: %d:%d, after token: %s encountered: %s\n", token->beginLine, token->beginColumn, addUnicodeEscapes(token->image).c_str(), addUnicodeEscapes(getToken(1)->image).c_str());
+ fprintf(stderr, "Parse error at: %d:%d, after token: %s encountered: %s\n", token->beginLine, token->beginColumn, addUnicodeEscapes(token->image).c_str(), addUnicodeEscapes(getToken(1)->image).c_str());
}
- void VhdlParser::enable_tracing() {
+ void VhdlParser::enable_tracing() {
}
- /** Disable tracing. */
-
- void VhdlParser::disable_tracing() {
+ void VhdlParser::disable_tracing() {
}
-void VhdlParser::jj_rescan_token(){
+ void VhdlParser::jj_rescan_token(){
jj_rescan = true;
for (int i = 0; i < 114; i++) {
JJCalls *p = &jj_2_rtns[i];
@@ -13057,7 +13063,7 @@ void VhdlParser::jj_rescan_token(){
}
-void VhdlParser::jj_save(int index, int xla){
+ void VhdlParser::jj_save(int index, int xla){
JJCalls *p = &jj_2_rtns[index];
while (p->gen > jj_gen) {
if (p->next == NULL) { p = p->next = new JJCalls(); break; }
diff --git a/vhdlparser/VhdlParser.h b/vhdlparser/VhdlParser.h
index 78450d1..12631dd 100644
--- a/vhdlparser/VhdlParser.h
+++ b/vhdlparser/VhdlParser.h
@@ -12,12 +12,12 @@
namespace vhdl {
namespace parser {
struct JJCalls {
- int gen;
- Token *first;
- int arg;
- JJCalls *next;
+ int gen;
+ int arg;
+ JJCalls* next;
+ Token* first;
~JJCalls() { if (next) delete next; }
- JJCalls() { next = NULL; arg = 0; gen = -1; first = NULL; }
+ JJCalls() { next = NULL; arg = 0; gen = -1; first = NULL; }
};
class VhdlParser {
@@ -1490,48 +1490,6 @@ void parseInline();
{ jj_save(113, xla); }
}
- inline bool jj_3R_430()
- {
- if (jj_done) return true;
- if (jj_scan_token(INOUT_T)) return true;
- return false;
- }
-
- inline bool jj_3R_429()
- {
- if (jj_done) return true;
- if (jj_scan_token(OUT_T)) return true;
- return false;
- }
-
- inline bool jj_3R_346()
- {
- if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_428()) {
- jj_scanpos = xsp;
- if (jj_3R_429()) {
- jj_scanpos = xsp;
- if (jj_3R_430()) {
- jj_scanpos = xsp;
- if (jj_3R_431()) {
- jj_scanpos = xsp;
- if (jj_3R_432()) return true;
- }
- }
- }
- }
- return false;
- }
-
- inline bool jj_3R_428()
- {
- if (jj_done) return true;
- if (jj_scan_token(IN_T)) return true;
- return false;
- }
-
inline bool jj_3R_258()
{
if (jj_done) return true;
@@ -1855,18 +1813,18 @@ void parseInline();
return false;
}
- inline bool jj_3R_621()
+ inline bool jj_3R_181()
{
if (jj_done) return true;
- if (jj_3R_70()) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_69()) return true;
return false;
}
- inline bool jj_3R_181()
+ inline bool jj_3R_621()
{
if (jj_done) return true;
- if (jj_scan_token(COMMA_T)) return true;
- if (jj_3R_69()) return true;
+ if (jj_3R_70()) return true;
return false;
}
@@ -2026,20 +1984,20 @@ void parseInline();
return false;
}
- inline bool jj_3R_620()
+ inline bool jj_3R_526()
{
if (jj_done) return true;
- if (jj_scan_token(ELSE_T)) return true;
- if (jj_3R_259()) return true;
+ if (jj_scan_token(TYPE_T)) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
return false;
}
- inline bool jj_3R_526()
+ inline bool jj_3R_620()
{
if (jj_done) return true;
- if (jj_scan_token(TYPE_T)) return true;
- if (jj_3R_70()) return true;
- if (jj_scan_token(SEMI_T)) return true;
+ if (jj_scan_token(ELSE_T)) return true;
+ if (jj_3R_259()) return true;
return false;
}
@@ -2279,13 +2237,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_171()
- {
- if (jj_done) return true;
- if (jj_3R_70()) return true;
- return false;
- }
-
inline bool jj_3R_608()
{
if (jj_done) return true;
@@ -2331,6 +2282,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_171()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
inline bool jj_3R_343()
{
if (jj_done) return true;
@@ -2651,13 +2609,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_398()
- {
- if (jj_done) return true;
- if (jj_scan_token(INTEGER)) return true;
- return false;
- }
-
inline bool jj_3_112()
{
if (jj_done) return true;
@@ -2694,6 +2645,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_398()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(INTEGER)) return true;
+ return false;
+ }
+
inline bool jj_3R_312()
{
if (jj_done) return true;
@@ -3881,24 +3839,24 @@ void parseInline();
return false;
}
- inline bool jj_3R_680()
+ inline bool jj_3R_588()
{
if (jj_done) return true;
- if (jj_3R_70()) return true;
+ if (jj_scan_token(CONFIGURATION_T)) return true;
return false;
}
- inline bool jj_3R_588()
+ inline bool jj_3R_587()
{
if (jj_done) return true;
- if (jj_scan_token(CONFIGURATION_T)) return true;
+ if (jj_scan_token(ARCHITECTURE_T)) return true;
return false;
}
- inline bool jj_3R_587()
+ inline bool jj_3R_680()
{
if (jj_done) return true;
- if (jj_scan_token(ARCHITECTURE_T)) return true;
+ if (jj_3R_70()) return true;
return false;
}
@@ -3986,13 +3944,6 @@ void parseInline();
return false;
}
- inline bool jj_3_103()
- {
- if (jj_done) return true;
- if (jj_3R_65()) return true;
- return false;
- }
-
inline bool jj_3R_564()
{
if (jj_done) return true;
@@ -4015,6 +3966,13 @@ void parseInline();
return false;
}
+ inline bool jj_3_103()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
inline bool jj_3R_679()
{
if (jj_done) return true;
@@ -4067,13 +4025,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_716()
- {
- if (jj_done) return true;
- if (jj_3R_65()) return true;
- return false;
- }
-
inline bool jj_3R_707()
{
if (jj_done) return true;
@@ -4105,6 +4056,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_716()
+ {
+ if (jj_done) return true;
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
inline bool jj_3_30()
{
if (jj_done) return true;
@@ -4179,6 +4137,20 @@ void parseInline();
return false;
}
+ inline bool jj_3R_709()
+ {
+ if (jj_done) return true;
+ if (jj_3R_519()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_163()
+ {
+ if (jj_done) return true;
+ if (jj_3R_85()) return true;
+ return false;
+ }
+
inline bool jj_3R_708()
{
if (jj_done) return true;
@@ -4231,20 +4203,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_709()
- {
- if (jj_done) return true;
- if (jj_3R_519()) return true;
- return false;
- }
-
- inline bool jj_3R_163()
- {
- if (jj_done) return true;
- if (jj_3R_85()) return true;
- return false;
- }
-
inline bool jj_3R_252()
{
if (jj_done) return true;
@@ -4466,13 +4424,6 @@ void parseInline();
return false;
}
- inline bool jj_3_28()
- {
- if (jj_done) return true;
- if (jj_3R_83()) return true;
- return false;
- }
-
inline bool jj_3R_405()
{
if (jj_done) return true;
@@ -4492,17 +4443,17 @@ void parseInline();
return false;
}
- inline bool jj_3_27()
+ inline bool jj_3_28()
{
if (jj_done) return true;
- if (jj_3R_82()) return true;
+ if (jj_3R_83()) return true;
return false;
}
- inline bool jj_3R_277()
+ inline bool jj_3_27()
{
if (jj_done) return true;
- if (jj_3R_83()) return true;
+ if (jj_3R_82()) return true;
return false;
}
@@ -4514,6 +4465,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_277()
+ {
+ if (jj_done) return true;
+ if (jj_3R_83()) return true;
+ return false;
+ }
+
inline bool jj_3R_134()
{
if (jj_done) return true;
@@ -5177,22 +5135,6 @@ void parseInline();
return false;
}
- inline bool jj_3_95()
- {
- if (jj_done) return true;
- if (jj_3R_133()) return true;
- return false;
- }
-
- inline bool jj_3R_516()
- {
- if (jj_done) return true;
- if (jj_scan_token(LPAREN_T)) return true;
- if (jj_3R_313()) return true;
- if (jj_scan_token(RPAREN_T)) return true;
- return false;
- }
-
inline bool jj_3R_557()
{
if (jj_done) return true;
@@ -5200,13 +5142,6 @@ void parseInline();
return false;
}
- inline bool jj_3_94()
- {
- if (jj_done) return true;
- if (jj_3R_132()) return true;
- return false;
- }
-
inline bool jj_3R_556()
{
if (jj_done) return true;
@@ -5277,6 +5212,29 @@ void parseInline();
return false;
}
+ inline bool jj_3_95()
+ {
+ if (jj_done) return true;
+ if (jj_3R_133()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_516()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_313()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3_94()
+ {
+ if (jj_done) return true;
+ if (jj_3R_132()) return true;
+ return false;
+ }
+
inline bool jj_3R_173()
{
if (jj_done) return true;
@@ -5859,13 +5817,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_624()
- {
- if (jj_done) return true;
- if (jj_3R_70()) return true;
- return false;
- }
-
inline bool jj_3R_336()
{
if (jj_done) return true;
@@ -5905,25 +5856,25 @@ void parseInline();
return false;
}
- inline bool jj_3R_461()
+ inline bool jj_3R_624()
{
if (jj_done) return true;
- if (jj_3R_527()) return true;
+ if (jj_3R_70()) return true;
return false;
}
- inline bool jj_3R_161()
+ inline bool jj_3R_461()
{
if (jj_done) return true;
- if (jj_3R_129()) return true;
- if (jj_3R_130()) return true;
+ if (jj_3R_527()) return true;
return false;
}
- inline bool jj_3R_648()
+ inline bool jj_3R_161()
{
if (jj_done) return true;
- if (jj_3R_70()) return true;
+ if (jj_3R_129()) return true;
+ if (jj_3R_130()) return true;
return false;
}
@@ -5970,6 +5921,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_648()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
inline bool jj_3R_623()
{
if (jj_done) return true;
@@ -6682,13 +6640,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_245()
- {
- if (jj_done) return true;
- if (jj_3R_363()) return true;
- return false;
- }
-
inline bool jj_3R_307()
{
if (jj_done) return true;
@@ -6699,6 +6650,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_245()
+ {
+ if (jj_done) return true;
+ if (jj_3R_363()) return true;
+ return false;
+ }
+
inline bool jj_3R_95()
{
if (jj_done) return true;
@@ -6715,13 +6673,6 @@ void parseInline();
return false;
}
- inline bool jj_3_85()
- {
- if (jj_done) return true;
- if (jj_3R_125()) return true;
- return false;
- }
-
inline bool jj_3_86()
{
if (jj_done) return true;
@@ -6729,17 +6680,17 @@ void parseInline();
return false;
}
- inline bool jj_3_84()
+ inline bool jj_3R_419()
{
if (jj_done) return true;
- if (jj_3R_124()) return true;
+ if (jj_3R_329()) return true;
return false;
}
- inline bool jj_3R_419()
+ inline bool jj_3_85()
{
if (jj_done) return true;
- if (jj_3R_329()) return true;
+ if (jj_3R_125()) return true;
return false;
}
@@ -6758,10 +6709,10 @@ void parseInline();
return false;
}
- inline bool jj_3_83()
+ inline bool jj_3_84()
{
if (jj_done) return true;
- if (jj_3R_123()) return true;
+ if (jj_3R_124()) return true;
return false;
}
@@ -6786,13 +6737,6 @@ void parseInline();
return false;
}
- inline bool jj_3_82()
- {
- if (jj_done) return true;
- if (jj_3R_122()) return true;
- return false;
- }
-
inline bool jj_3_79()
{
if (jj_done) return true;
@@ -6804,6 +6748,20 @@ void parseInline();
return false;
}
+ inline bool jj_3_83()
+ {
+ if (jj_done) return true;
+ if (jj_3R_123()) return true;
+ return false;
+ }
+
+ inline bool jj_3_82()
+ {
+ if (jj_done) return true;
+ if (jj_3R_122()) return true;
+ return false;
+ }
+
inline bool jj_3_81()
{
if (jj_done) return true;
@@ -6826,13 +6784,6 @@ void parseInline();
return false;
}
- inline bool jj_3_78()
- {
- if (jj_done) return true;
- if (jj_3R_118()) return true;
- return false;
- }
-
inline bool jj_3R_244()
{
if (jj_done) return true;
@@ -6851,6 +6802,13 @@ void parseInline();
return false;
}
+ inline bool jj_3_78()
+ {
+ if (jj_done) return true;
+ if (jj_3R_118()) return true;
+ return false;
+ }
+
inline bool jj_3_77()
{
if (jj_done) return true;
@@ -7277,13 +7235,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_703()
- {
- if (jj_done) return true;
- if (jj_3R_60()) return true;
- return false;
- }
-
inline bool jj_3R_700()
{
if (jj_done) return true;
@@ -7325,6 +7276,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_703()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
inline bool jj_3R_484()
{
if (jj_done) return true;
@@ -7391,13 +7349,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_702()
- {
- if (jj_done) return true;
- if (jj_3R_707()) return true;
- return false;
- }
-
inline bool jj_3R_467()
{
if (jj_done) return true;
@@ -7415,6 +7366,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_702()
+ {
+ if (jj_done) return true;
+ if (jj_3R_707()) return true;
+ return false;
+ }
+
inline bool jj_3R_693()
{
if (jj_done) return true;
@@ -7486,15 +7444,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_228()
- {
- if (jj_done) return true;
- if (jj_scan_token(LPAREN_T)) return true;
- if (jj_3R_59()) return true;
- if (jj_scan_token(RPAREN_T)) return true;
- return false;
- }
-
inline bool jj_3R_182()
{
if (jj_done) return true;
@@ -7543,6 +7492,15 @@ void parseInline();
return false;
}
+ inline bool jj_3R_228()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_59()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_530()
{
if (jj_done) return true;
@@ -7579,13 +7537,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_193()
- {
- if (jj_done) return true;
- if (jj_3R_70()) return true;
- return false;
- }
-
inline bool jj_3R_62()
{
if (jj_done) return true;
@@ -7626,6 +7577,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_193()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
inline bool jj_3R_377()
{
if (jj_done) return true;
@@ -7868,18 +7826,18 @@ void parseInline();
return false;
}
- inline bool jj_3R_513()
+ inline bool jj_3R_653()
{
if (jj_done) return true;
- if (jj_3R_383()) return true;
+ if (jj_scan_token(ACCESS_T)) return true;
+ if (jj_3R_85()) return true;
return false;
}
- inline bool jj_3R_653()
+ inline bool jj_3R_513()
{
if (jj_done) return true;
- if (jj_scan_token(ACCESS_T)) return true;
- if (jj_3R_85()) return true;
+ if (jj_3R_383()) return true;
return false;
}
@@ -8167,13 +8125,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_242()
- {
- if (jj_done) return true;
- if (jj_3R_60()) return true;
- return false;
- }
-
inline bool jj_3R_457()
{
if (jj_done) return true;
@@ -8225,6 +8176,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_242()
+ {
+ if (jj_done) return true;
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
inline bool jj_3R_453()
{
if (jj_done) return true;
@@ -8807,13 +8765,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_625()
- {
- if (jj_done) return true;
- if (jj_3R_70()) return true;
- return false;
- }
-
inline bool jj_3R_281()
{
if (jj_done) return true;
@@ -8860,6 +8811,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_625()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
inline bool jj_3R_432()
{
if (jj_done) return true;
@@ -8874,39 +8832,88 @@ void parseInline();
return false;
}
- public: TokenManager *token_source;
- public: CharStream *jj_input_stream;
+ inline bool jj_3R_430()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(INOUT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_429()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(OUT_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_346()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_428()) {
+ jj_scanpos = xsp;
+ if (jj_3R_429()) {
+ jj_scanpos = xsp;
+ if (jj_3R_430()) {
+ jj_scanpos = xsp;
+ if (jj_3R_431()) {
+ jj_scanpos = xsp;
+ if (jj_3R_432()) return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_428()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(IN_T)) return true;
+ return false;
+ }
+
+
+public:
+ TokenManager *token_source;
+ CharStream *jj_input_stream;
/** Current token. */
- public: Token *token;
+ Token *token;
/** Next token. */
- public: Token *jj_nt;
- private: int jj_ntk;
- private: JJCalls jj_2_rtns[115];
- private: bool jj_rescan;
- private: int jj_gc;
- private: Token *jj_scanpos, *jj_lastpos;
- private: int jj_la;
+ Token *jj_nt;
+private:
+ int jj_ntk;
+ JJCalls jj_2_rtns[115];
+ bool jj_rescan;
+ int jj_gc;
+ Token *jj_scanpos, *jj_lastpos;
+ int jj_la;
/** Whether we are looking ahead. */
- private: bool jj_lookingAhead;
- private: bool jj_semLA;
- private: int jj_gen;
- private: int jj_la1[295];
- private: ErrorHandler *errorHandler;
- private: bool errorHandlerCreated;
- protected: bool hasError;
- public: void setErrorHandler(ErrorHandler *eh) {
+ bool jj_lookingAhead;
+ bool jj_semLA;
+ int jj_gen;
+ int jj_la1[295];
+ ErrorHandler *errorHandler;
+ bool errorHandlerCreated;
+protected:
+ bool hasError;
+public:
+ void setErrorHandler(ErrorHandler *eh) {
if (errorHandlerCreated) delete errorHandler;
errorHandler = eh;
errorHandlerCreated = false;
}
- Token *head;
- public:
+ Token *head;
+public:
VhdlParser(TokenManager *tm);
- public: virtual ~VhdlParser();
+ virtual ~VhdlParser();
void ReInit(TokenManager *tm);
+void clear();
+
Token * jj_consume_token(int kind);
bool jj_scan_token(int kind);
@@ -8916,26 +8923,30 @@ Token * getNextToken();
Token * getToken(int index);
int jj_ntk_f();
- private: int jj_kind;
+private:
+ int jj_kind;
int **jj_expentries;
int *jj_expentry;
-void jj_add_error_token(int kind, int pos);
+ void jj_add_error_token(int kind, int pos);
+protected:
+ /** Generate ParseException. */
-protected: virtual void parseError();
- private: int trace_indent;
- private: bool trace_enabled;
- /** Enable tracing. */
+ virtual void parseError();
+private:
+ int trace_indent;
+ bool trace_enabled;
-public: void enable_tracing();
+public:
-public: void disable_tracing();
+ void enable_tracing();
-void jj_rescan_token();
+ void disable_tracing();
-void jj_save(int index, int xla);
-typedef unsigned long long uint64;
+ void jj_rescan_token();
+ void jj_save(int index, int xla);
+typedef unsigned long long uint64;
static Entry* current_root;
static Entry* tempEntry;
@@ -8976,8 +8987,12 @@ static QCString popLabel(QCString & q);
static bool addLibUseClause(const QCString &type);
static void mapLibPackage( Entry* root);
static void createFlow();
-static void error_skipto(int kind);private: bool jj_done;
+static void error_skipto(int kind);
+static void oneLineComment(QCString qcs);
+static void setMultCommentLine();
+private:
+ bool jj_done;
};
}
}
diff --git a/vhdlparser/VhdlParserIF.cpp b/vhdlparser/VhdlParserIF.cpp
index e8768ee..f9f689b 100644
--- a/vhdlparser/VhdlParserIF.cpp
+++ b/vhdlparser/VhdlParserIF.cpp
@@ -32,6 +32,7 @@ void VhdlParserIF::parseVhdlfile(const char* inputBuffer,bool inLine)
// fprintf(stderr,"\n\nparsed lines: %d\n",yyLineNr);
// fprintf(stderr,"\n\nerrors : %d\n\n",myErr->getErrorCount());
delete myParser;
+ delete myErr;
}
diff --git a/vhdlparser/VhdlParserTokenManager.cc b/vhdlparser/VhdlParserTokenManager.cc
index a35deb2..9733acd 100644
--- a/vhdlparser/VhdlParserTokenManager.cc
+++ b/vhdlparser/VhdlParserTokenManager.cc
@@ -1,5 +1,6 @@
/* VhdlParserTokenManager.cc */
-#include "./VhdlParserTokenManager.h"
+#include "VhdlParserTokenManager.h"
+#include "TokenMgrError.h"
namespace vhdl {
namespace parser {
static const unsigned long long jjbitVec0[] = {
@@ -3307,10 +3308,10 @@ bool VhdlParserTokenManager::jjCanMove_1(int hiByte, int i1, int i2, unsigned lo
Token * VhdlParserTokenManager::jjFillToken(){
Token *t;
JAVACC_STRING_TYPE curTokenImage;
- int beginLine;
- int endLine;
- int beginColumn;
- int endColumn;
+ int beginLine = -1;
+ int endLine = -1;
+ int beginColumn = -1;
+ int endColumn = -1;
JAVACC_STRING_TYPE im = jjstrLiteralImages[jjmatchedKind];
curTokenImage = (im.length() == 0) ? input_stream->GetImage() : im;
if (input_stream->getTrackLineColumn()) {
@@ -3319,7 +3320,9 @@ Token * VhdlParserTokenManager::jjFillToken(){
endLine = input_stream->getEndLine();
endColumn = input_stream->getEndColumn();
}
- t = Token::newToken(jjmatchedKind, curTokenImage);
+ t = Token::newToken(jjmatchedKind);
+ t->kind = jjmatchedKind;
+ t->image = curTokenImage;
t->specialToken = NULL;
t->next = NULL;
@@ -3405,7 +3408,14 @@ void VhdlParserTokenManager::SkipLexicalActions(Token *matchedToken){
}
case 6 : {
image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
- ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE);
+ QCString doc(image.data());
+ int count=doc.contains("--!");
+ ::vhdl::parser::VhdlParser::setMultCommentLine();
+ ::vhdl::parser::VhdlParser::lineCount(image.data());
+ if (count == 1)
+ ::vhdl::parser::VhdlParser::oneLineComment(doc);
+ else
+ ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),FALSE); ;
break;
}
case 7 : {
@@ -3415,7 +3425,7 @@ void VhdlParserTokenManager::SkipLexicalActions(Token *matchedToken){
}
case 8 : {
image.append(input_stream->GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
- ::vhdl::parser::VhdlParser::lineCount(image.data());
+ ::vhdl::parser::VhdlParser::lineCount(image.data());
break;
}
case 9 : {
@@ -3560,7 +3570,7 @@ void VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
}
/** Reinitialise parser. */
void VhdlParserTokenManager::ReInit(JAVACC_CHARSTREAM *stream, int lexState, VhdlParser *parserArg) {
- if (input_stream) delete input_stream;
+ clear();
jjmatchedPos = jjnewStateCnt = 0;
curLexState = lexState;
input_stream = stream;
@@ -3581,10 +3591,17 @@ void VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
/** Switch to specified lex state. */
void VhdlParserTokenManager::SwitchTo(int lexState) {
- if (lexState >= 1 || lexState < 0)
- assert(false);
- //throw 1;//new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
- else
+ if (lexState >= 1 || lexState < 0) {
+ JAVACC_STRING_TYPE message;
+#ifdef WIDE_CHAR
+ message += L"Error: Ignoring invalid lexical state : ";
+ message += lexState; message += L". State unchanged.";
+#else
+ message += "Error: Ignoring invalid lexical state : ";
+ message += lexState; message += ". State unchanged.";
+#endif
+ throw new TokenMgrError(message, INVALID_LEXICAL_STATE);
+ } else
curLexState = lexState;
}
@@ -3592,14 +3609,23 @@ void VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
VhdlParserTokenManager::VhdlParserTokenManager (JAVACC_CHARSTREAM *stream, int lexState, VhdlParser *parserArg)
{
input_stream = NULL;
+ errorHandlerCreated = false;
ReInit(stream, lexState, parserArg);
}
// Destructor
VhdlParserTokenManager::~VhdlParserTokenManager () {
- if (input_stream) delete input_stream;
- if (errorHandlerCreated) delete errorHandler;
+ clear();
}
+ // clear
+ void VhdlParserTokenManager::clear() {
+ //Since input_stream was generated outside of TokenManager
+ //TokenManager should not take care of deleting it
+ //if (input_stream) delete input_stream;
+ if (errorHandlerCreated) delete errorHandler;
+ }
+
+
}
}
diff --git a/vhdlparser/VhdlParserTokenManager.h b/vhdlparser/VhdlParserTokenManager.h
index 3916069..f24c8e3 100644
--- a/vhdlparser/VhdlParserTokenManager.h
+++ b/vhdlparser/VhdlParserTokenManager.h
@@ -1,5 +1,6 @@
#ifndef VHDLPARSERTOKENMANAGER_H
#define VHDLPARSERTOKENMANAGER_H
+#include "stdio.h"
#include "JavaCC.h"
#include "CharStream.h"
#include "Token.h"
@@ -116,23 +117,27 @@ void TokenLexicalActions(Token *matchedToken);
public: virtual ~VhdlParserTokenManager();
void ReInit(JAVACC_CHARSTREAM *stream, int lexState = 0, VhdlParser *parserArg = NULL);
void SwitchTo(int lexState);
+ void clear();
const JAVACC_SIMPLE_STRING jjKindsForBitVector(int i, unsigned long long vec);
const JAVACC_SIMPLE_STRING jjKindsForStateVector(int lexState, int vec[], int start, int end);
- JAVACC_CHARSTREAM *input_stream;
- int jjrounds[75];
- int jjstateSet[2 * 75];
- JAVACC_STRING_TYPE jjimage;
- JAVACC_STRING_TYPE image;
- int jjimageLen;
- int lengthOfMatch;
- JAVACC_CHAR_TYPE curChar;
- TokenManagerErrorHandler *errorHandler;
- bool errorHandlerCreated;
- public: void setErrorHandler(TokenManagerErrorHandler *eh) {
+ JAVACC_CHARSTREAM* input_stream;
+ int jjrounds[75];
+ int jjstateSet[2 * 75];
+ JAVACC_STRING_TYPE jjimage;
+ JAVACC_STRING_TYPE image;
+ int jjimageLen;
+ int lengthOfMatch;
+ JAVACC_CHAR_TYPE curChar;
+ TokenManagerErrorHandler* errorHandler;
+ bool errorHandlerCreated;
+
+public:
+ void setErrorHandler(TokenManagerErrorHandler *eh) {
if (errorHandlerCreated && errorHandler != NULL) delete errorHandler;
errorHandler = eh;
errorHandlerCreated = false;
}
+
};
}
}
diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj
index 40fbd17..0225183 100644
--- a/vhdlparser/vhdlparser.jj
+++ b/vhdlparser/vhdlparser.jj
@@ -3,8 +3,8 @@
* Copyright (C) 2014 by M. Kreis
*
* 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.
*
@@ -20,14 +20,13 @@ options {
//OUTPUT_DIRECTORY = ".";
// DEBUG_PARSER=true;
//DEBUG_LOOKAHEAD=true;
-
+
}
PARSER_BEGIN(VhdlParser)
typedef unsigned long long uint64;
-
static Entry* current_root;
static Entry* tempEntry;
static Entry* lastEntity ;
@@ -68,7 +67,8 @@ static bool addLibUseClause(const QCString &type);
static void mapLibPackage( Entry* root);
static void createFlow();
static void error_skipto(int kind);
-
+static void oneLineComment(QCString qcs);
+static void setMultCommentLine();
PARSER_END(VhdlParser)
SKIP :
@@ -82,24 +82,37 @@ SKIP :
SKIP:
{
// VHDL comment -- ......
- // VHDL doxygen line comment --! ....
- <#DOXYGEN_VHDL_COMMENT: (" "|"\t")*"--!"(~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
- | <MULT_DOXYGEN_COMMENT: (<DOXYGEN_VHDL_COMMENT>)+ > { ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),TRUE); }
+ // VHDL doxygen line comment --! ....
+ <#DOXYGEN_VHDL_COMMENT: (" "|"\t")*"--!"(~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
+ | <MULT_DOXYGEN_COMMENT: (<DOXYGEN_VHDL_COMMENT>)+ >
+ {
+ QCString doc(image.data());
+ int count=doc.contains("--!");
+ ::vhdl::parser::VhdlParser::setMultCommentLine();
+ ::vhdl::parser::VhdlParser::lineCount(image.data());
+ if (count == 1)
+ ::vhdl::parser::VhdlParser::oneLineComment(doc);
+ else
+ ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),FALSE); ;
+
+ }
|<VHDL_FLOWCHART_COMMENT: "--#" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> { ::vhdl::parser::VhdlParser::handleFlowComment(image.data());}
- |<VHDL_COMMENT: "--" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> { ::vhdl::parser::VhdlParser::lineCount(image.data());}
- }
+ |<VHDL_COMMENT: "--" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
+ {
+ ::vhdl::parser::VhdlParser::lineCount(image.data());}
+ }
// VHDL 2008 comment /* .... */
// VHDL 2008 doxygen comment /*! .... */
SKIP :
{
- <MULT_DOXYGEN_VHDL_COMMENT_2008 : "/*!" (~[])* "*/" >
+ <MULT_DOXYGEN_VHDL_COMMENT_2008 : "/*!" (~[])* "*/" >
{
QCString q(image.data());
- q.stripPrefix("/*!");
- q.resize(q.length()-2);
+ q.stripPrefix("/*!");
+ q.resize(q.length()-2);
::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
- }
+ }
| <MULT_VHDL_2008_COMMENT : "/*" (~[])* "*/" > {::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();}
}
@@ -107,7 +120,7 @@ SKIP :
TOKEN [IGNORE_CASE] :
{
- <ABS_T: "abs">
+ <ABS_T: "abs">
| <ACCESS_T: "access">
| <AFTER_T: "after">
| <ALIAS_T: "alias">
@@ -115,86 +128,86 @@ TOKEN [IGNORE_CASE] :
| <AND_T: "and">
| <ARCHITECTURE_T: "architecture"> {::vhdl::parser::VhdlParser::setLineParsed(ARCHITECTURE_T);}
| <ARRAY_T: "array"> {VhdlParser::setLineParsed(ARRAY_T);}
-| <ASSERT_T: "assert">
-| <ASSUME_T: "assume">
-| <ASSUME_GUARANTEE_T: "assume_guarentee">
+| <ASSERT_T: "assert">
+| <ASSUME_T: "assume">
+| <ASSUME_GUARANTEE_T: "assume_guarentee">
| <ATTRIBUTE_T: "attribute"> {::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);}
-| <BEGIN_T: "begin">
-| <BLOCK_T: "block">
+| <BEGIN_T: "begin">
+| <BLOCK_T: "block">
| <BODY_T: "body"> {::vhdl::parser::VhdlParser::setLineParsed(BODY_T);}
| <BUFFER_T: "buffer">
-| <BUS_T: "bus">
+| <BUS_T: "bus">
| <COMPONENT_T: "component"> {VhdlParser::setLineParsed(COMPONENT_T);}
-| <CASE_T: "case">
+| <CASE_T: "case">
| <CONFIGURATION_T: "configuration"> {VhdlParser::setLineParsed(CONFIGURATION_T);}
| <CONSTANT_T: "constant"> {VhdlParser::setLineParsed(CONSTANT_T);}
| <CONTEXT_T: "context"> {VhdlParser::setLineParsed(CONTEXT_T);}
-| <COVER_T: "cover">
-| <DEFAULT_T: "default">
-| <DISCONNECT_T: "disconnect">
-| <DOWNTO_T: "downto">
-| <ELSE_T: "else">
-| <ELSIF_T: "elsif">
+| <COVER_T: "cover">
+| <DEFAULT_T: "default">
+| <DISCONNECT_T: "disconnect">
+| <DOWNTO_T: "downto">
+| <ELSE_T: "else">
+| <ELSIF_T: "elsif">
| <END_T: "end"> {VhdlParser::setLineParsed(END_T);}
| <ENTITY_T: "entity"> {VhdlParser::setLineParsed(ENTITY_T);}
-| <EXIT_T: "exit">
-| <FAIRNESS_T: "fairness">
+| <EXIT_T: "exit">
+| <FAIRNESS_T: "fairness">
| <FILE_T: "file"> {VhdlParser::setLineParsed(FILE_T);}
-| <FOR_T: "for">
+| <FOR_T: "for">
| <FORCE_T: "force">
| <FUNCTION_T: "function"> {VhdlParser::setLineParsed(FUNCTION_T);}
-| <GENERATE_T: "generate">
-| <GENERIC_T: "generic">
+| <GENERATE_T: "generate">
+| <GENERIC_T: "generic">
| <GROUP_T: "group"> {VhdlParser::setLineParsed(GROUP_T);}
-| <GUARDED_T: "guarded">
-| <IF_T: "if">
-| <IMPURE_T: "impure">
-| <IN_T: "in">
-| <INERTIAL_T: "inertial">
-| <INOUT_T: "inout">
-| <IS_T: "is">
+| <GUARDED_T: "guarded">
+| <IF_T: "if">
+| <IMPURE_T: "impure">
+| <IN_T: "in">
+| <INERTIAL_T: "inertial">
+| <INOUT_T: "inout">
+| <IS_T: "is">
| <LABEL_T: "label">
| <LIBRARY_T: "library"> {VhdlParser::setLineParsed(LIBRARY_T);}
-| <LINKAGE_T: "linkage">
-| <LITERAL_T: "literal">
-| <LOOP_T: "loop">
-| <MAP_T: "map">
-| <MOD_T: "mod">
-| <NAND_T: "nand">
-| <NEW_T: "new">
-| <NEXT_T: "next">
+| <LINKAGE_T: "linkage">
+| <LITERAL_T: "literal">
+| <LOOP_T: "loop">
+| <MAP_T: "map">
+| <MOD_T: "mod">
+| <NAND_T: "nand">
+| <NEW_T: "new">
+| <NEXT_T: "next">
| <NOR_T: "nor">
| <NOT_T: "not">
-| <NULL_T: "null">
+| <NULL_T: "null">
| <OF_T: "of">
-| <ON_T: "on">
-| <OPEN_T: "open">
-| <OR_T: "or">
-| <OTHER_T: "others">
-| <OUT_T: "out">
+| <ON_T: "on">
+| <OPEN_T: "open">
+| <OR_T: "or">
+| <OTHER_T: "others">
+| <OUT_T: "out">
| <PACKAGE_T: "package"> {::vhdl::parser::VhdlParser::setLineParsed(PACKAGE_T);}
-| <PARAMETER_T: "parameter">
+| <PARAMETER_T: "parameter">
| <PORT_T: "port"> {::vhdl::parser::VhdlParser::setLineParsed(PORT_T);}
-| <POSTPONED_T: "postponed">
+| <POSTPONED_T: "postponed">
| <PROCEDURE_T: "procedure"> {::vhdl::parser::VhdlParser::setLineParsed(PROCEDURE_T);}
| <PROCESS_T: "process"> {::vhdl::parser::VhdlParser::setLineParsed(PROCESS_T);}
-| <PROPERTY_T: "property">
-| <PROTECTED_T: "protected">
-| <PURE_T: "pure">
-| <RANGE_T: "range">
+| <PROPERTY_T: "property">
+| <PROTECTED_T: "protected">
+| <PURE_T: "pure">
+| <RANGE_T: "range">
| <RECORD_T: "record"> {::vhdl::parser::VhdlParser::setLineParsed(RECORD_T);}
-| <REGISTER_T: "register">
-| <REJECT_T: "reject">
-| <RELEASE_T: "release">
-| <RESTRICT_T: "restrict">
-| <RESTRICT_GUARANTEE_T: "restrict_guarantee">
-| <REM_T: "rem">
-| <REPORT_T: "report">
-| <ROL_T: "rol">
-| <ROR_T: "ror">
-| <RETURN_T: "return">
-| <SELECT_T: "select">
-| <SEQUENCE_T: "sequence">
+| <REGISTER_T: "register">
+| <REJECT_T: "reject">
+| <RELEASE_T: "release">
+| <RESTRICT_T: "restrict">
+| <RESTRICT_GUARANTEE_T: "restrict_guarantee">
+| <REM_T: "rem">
+| <REPORT_T: "report">
+| <ROL_T: "rol">
+| <ROR_T: "ror">
+| <RETURN_T: "return">
+| <SELECT_T: "select">
+| <SEQUENCE_T: "sequence">
| <SEVERITY_T: "severity">
| <SIGNAL_T: "signal"> {::vhdl::parser::VhdlParser::setLineParsed(SIGNAL_T);}
| <SHARED_T: "shared">
@@ -213,11 +226,11 @@ TOKEN [IGNORE_CASE] :
| <UNTIL_T: "until">
| <USE_T: "use">
| <VARIABLE_T: "variable">
-| <VMODE_T: "vmode">
-| <VPROP_T: "vprop">
+| <VMODE_T: "vmode">
+| <VPROP_T: "vprop">
| <VUNIT_T: "vunit">
| <WAIT_T: "wait">
-| <WHEN_T: "when">
+| <WHEN_T: "when">
| <WHILE_T: "while">
| <WITH_T: "with">
| <XOR_T: "xor">
@@ -270,16 +283,16 @@ TOKEN :
}
-TOKEN:
+TOKEN:
{
- <INTEGER: <DIGIT> ((["_"])? (<DIGIT>))* >
+ <INTEGER: <DIGIT> ((["_"])? (<DIGIT>))* >
| <STRINGLITERAL: (( ["\""](<GRAPHIC_CHARACTER>)*) "\"")+ >
| <BASIC_IDENTIFIER: (<LETTER> ( (["_"])* <LETTER_OR_DIGIT> )*) >
| <EXTENDED_CHARACTER: ( ["\\"](<GRAPHIC_CHARACTER>)*["\\"] ) >
- | <CHARACTER_LITERAL: (["'"]<GRAPHIC_CHARACTER>["'"]) >
+ | <CHARACTER_LITERAL: (["'"]<GRAPHIC_CHARACTER>["'"]) >
| <DECIMAL_LITERAL: (<INTEGER> (["."]<INTEGER>)? (<EXPONENT>)? ) >
| <BASED_INTEGER: <LETTER_OR_DIGIT>( <LETTER_OR_DIGIT>)* >
- | <BASED_LITERAL: <INTEGER>["#"]<BASED_INTEGER>(["."] <BASED_INTEGER>)? ["#"] (<EXPONENT>)? >
+ | <BASED_LITERAL: <INTEGER>["#"]<BASED_INTEGER>(["."] <BASED_INTEGER>)? ["#"] (<EXPONENT>)? >
| <#EXPONENT: (["e","E"] (["+","-"])? (<INTEGER>)+) >
| < #BASIC_GRAPHIC_CHARACTER: (<UPPER_CASE_LETTER>|<DIGIT>|<SPECIAL_CHARACTER>|<SPACE_CHARACTER>) >
| < #GRAPHIC_CHARACTER: ( <BASIC_GRAPHIC_CHARACTER>|<LOWER_CASE_LETTER>|<OTHER_SPECIAL_CHARACTER> ) >
@@ -294,54 +307,54 @@ TOKEN:
| < #SPACE_CHARACTER: [" ","\t"] >
| < #LOWER_CASE_LETTER: ["a"-"z"] >
| <VHDL2008TOOLDIR : ["`"](<GRAPHIC_CHARACTER>|<STRINGLITERAL>)+ >
-
+
}
-QCString abstract_literal() :
+QCString abstract_literal() :
{Token *tok;}
{
- tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
- | tok=<INTEGER> { return tok->image.c_str(); }
- | tok=<BASED_LITERAL> { return tok->image.c_str(); }
+ tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
+ | tok=<INTEGER> { return tok->image.c_str(); }
+ | tok=<BASED_LITERAL> { return tok->image.c_str(); }
}
QCString access_type_definition() :
-{Token *tok;QCString str,str1;}
+{Token *tok=0;QCString str,str1;}
{
-tok=<ACCESS_T> str1=subtype_indication() {str=tok->image.c_str(); return str+str1;}
+ tok=<ACCESS_T> str1=subtype_indication() { str=tok->image.c_str(); return str+str1; }
}
-QCString actual_designator() :
-{QCString str;Token *t;}
+QCString actual_designator() :
+{QCString str;Token *t=0;}
{
t=<OPEN_T> { return t->image.c_str(); }
|
LOOKAHEAD(expression())
str=expression() { return str; }
|
- LOOKAHEAD(name())
+ LOOKAHEAD(name())
str=name() { return str; }
}
-QCString actual_parameter_part() :
+QCString actual_parameter_part() :
{QCString s;}
{
s=association_list() { return s;}
}
-QCString actual_part() :
+QCString actual_part() :
{QCString s,s1;}
{
LOOKAHEAD(actual_designator())
s=actual_designator() { return s;}
|
<BOX_T> { return "<>";}
- |
+ |
s=name() <LPAREN_T> s1=actual_designator() <RPAREN_T> {s+="(";s+=s1+")";return s;}
-
+
}
-QCString adding_operator () :
+QCString adding_operator () :
{}
{
<PLUS_T> { return "+";}
@@ -357,12 +370,12 @@ QCString aggregate() : {QCString s,s1,s2;}
QCString alias_declaration() : {QCString s,s1,s2;}
{
<ALIAS_T> s2=alias_designator()
- [ <COLON_T>{ s+=":"; } s1=subtype_indication() { s+=s1; }]
- <IS_T> { s+=" is "; } s1=name() {s+=s1;} [s1=signature() {s+=s1;}]
+ [ <COLON_T>{ s+=":"; } s1=subtype_indication() { s+=s1; }]
+ <IS_T> { s+=" is "; } s1=name() {s+=s1;} [s1=signature() {s+=s1;}]
<SEMI_T>
-{
+{
addVhdlType(s2.data(),getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data(),Public);
-
+
return s2+" "+s+";";
}
}
@@ -376,25 +389,25 @@ QCString alias_designator() : {Token *tok=0;QCString s;}
void allocator() :{}
{
- LOOKAHEAD(3)
+ LOOKAHEAD(3)
<NEW_T> qualified_expression()
| <NEW_T> subtype_indication()
}
void architecture_body() : {QCString s,s1;}
{
-
- <ARCHITECTURE_T> s=identifier() <OF_T> s1=name() <IS_T>
- {
+
+ <ARCHITECTURE_T> s=identifier() <OF_T> s1=name() <IS_T>
+ {
QCString t=s1+"::"+s;
genLabels.resize(0);
pushLabel(genLabels,s1);
lastCompound=current;
addVhdlType(t,getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
- }
+ }
try{
- architecture_declarative_part()
- }catch(...){error_skipto(BEGIN_T);}
+ architecture_declarative_part()
+ }catch(...){error_skipto(BEGIN_T);}
<BEGIN_T>
architecture_statement_part()
<END_T> [<ARCHITECTURE_T>] [name()] <SEMI_T>
@@ -417,10 +430,10 @@ QCString array_type_definition (): { QCString s;}
{
LOOKAHEAD(unconstraint_array_definition())
-
+
s=unconstraint_array_definition() {return s;}
| s=constraint_array_definition() {return s;}
-
+
}
QCString assertion() : {QCString s,s1,s2;Token *t=0;Token *t1=0;}
@@ -439,7 +452,7 @@ QCString assertion_statement() : {QCString s,s1,s2;Token *t=0;}
[ s=label() t=<COLON_T> ] s1=assertion() <SEMI_T>
{
if(t) s+=":";
- return s+s1+";";
+ return s+s1+";";
}
}
QCString association_element() : {QCString s,s1;}
@@ -455,14 +468,14 @@ s=association_element() (<COMMA_T> s1=association_element() { s+=","+s1; })* { r
QCString attribute_declaration() : {QCString s,s1;}
{
- <ATTRIBUTE_T> s=identifier() <COLON_T> s1=type_mark() <SEMI_T>
- {
- addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public);
+ <ATTRIBUTE_T> s=identifier() <COLON_T> s1=type_mark() <SEMI_T>
+ {
+ addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public);
return " attribute "+s+":"+s1+";";
- }
+ }
}
-QCString attribute_designator (): {QCString s;Token *tok;}
+QCString attribute_designator (): {QCString s;Token *tok=0;}
{
s=identifier() { return s;}
| tok=<RANGE_T> { return tok->image.c_str(); }
@@ -477,40 +490,40 @@ QCString attribute_name (): {QCString s,s1;}
QCString attribute_specification(): {QCString s,s1,s2;}
{
<ATTRIBUTE_T> s=attribute_designator() <OF_T> s1=entity_specification() <IS_T> s2=expression() <SEMI_T>
- {
- QCString t= s1+" is "+s2;
+ {
+ QCString t= s1+" is "+s2;
addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public);
- return " attribute "+s+" of "+s1+ " is "+s2+";";
+ return " attribute "+s+" of "+s1+ " is "+s2+";";
}
}
-QCString base() : {Token *tok;}
+QCString base() : {Token *tok=0;}
{
tok=<INTEGER> { return tok->image.c_str();}
}
-QCString base_specifier (): {Token *tok;}
+QCString base_specifier (): {Token *tok=0;}
{
tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
}
-QCString base_unit_declaration() :
+QCString base_unit_declaration() :
{QCString s;}
{
s=identifier() { return s; }
}
-QCString based_integer() : {Token *tok;}
+QCString based_integer() : {Token *tok=0;}
{
tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
}
-QCString based_literal(): {Token *tok;}
+QCString based_literal(): {Token *tok=0;}
{
tok=<BASED_LITERAL> { return tok->image.c_str();}
}
-QCString basic_identifier() : {Token *tok;}
+QCString basic_identifier() : {Token *tok=0;}
{
tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
}
@@ -522,13 +535,13 @@ void binding_indication() : {}
[ port_map_aspect() ]
}
-QCString bit_string_literal (): {Token *tok;}
+QCString bit_string_literal (): {Token *tok=0;}
{
tok=<BIT_STRING_LITERAL> { return tok->image.c_str();}
}
-QCString bit_value() : {Token *tok;}
+QCString bit_value() : {Token *tok=0;}
{
tok=<BASIC_IDENTIFIER> { return tok->image.c_str();}
}
@@ -537,7 +550,7 @@ void block_configuration() : {}
{
<FOR_T> block_specification()
( use_clause() )*
- ( configuration_item())*
+ ( configuration_item())*
<END_T> <FOR_T> <SEMI_T>
}
@@ -577,7 +590,7 @@ void block_header() : {}
[LOOKAHEAD(generic_clause()) generic_clause()[ generic_map_aspect() <SEMI_T> ] ]
[ port_clause() [ port_map_aspect() <SEMI_T> ] ]
}
-
+
void block_specification() : {}
{
name()[LOOKAHEAD(1) <LPAREN_T> index_specification() <RPAREN_T>]
@@ -590,9 +603,9 @@ void block_statement() : {QCString s;}
block_header()
block_declarative_part()
<BEGIN_T>
- block_statement_part()
- <END_T> <BLOCK_T> [ identifier() ] <SEMI_T>
- {
+ block_statement_part()
+ <END_T> <BLOCK_T> [ identifier() ] <SEMI_T>
+ {
genLabels=popLabel(genLabels);
}
}
@@ -605,33 +618,33 @@ void block_statement_part() : {}
void case_statement() : {QCString s;}
{
[ identifier() <COLON_T> ]
- <CASE_T> s=expression()
+ <CASE_T> s=expression()
{
QCString ca="case "+s;
FlowChart::addFlowChart(FlowChart::CASE_NO,0,ca);
- }
+ }
<IS_T>
case_statement_alternative()
( case_statement_alternative ())*
- <END_T> <CASE_T> [ identifier() ] <SEMI_T>
- {
+ <END_T> <CASE_T> [ identifier() ] <SEMI_T>
+ {
FlowChart::moveToPrevLevel();
FlowChart::addFlowChart(FlowChart::END_CASE,"end case",0);
- }
+ }
}
void case_statement_alternative() : {QCString s;}
{
- <WHEN_T> s=choices() <ARROW_T>
- {
+ <WHEN_T> s=choices() <ARROW_T>
+ {
QCString t="when ";
t+=s+"=> ";
FlowChart::addFlowChart(FlowChart::WHEN_NO,s.data(),t);
- }
+ }
sequence_of_statement(){FlowChart::moveToPrevLevel(); }
}
-QCString character_literal() : {Token *tok;}
+QCString character_literal() : {Token *tok=0;}
{
tok=<CHARACTER_LITERAL>{ return tok->image.c_str();}
}
@@ -640,7 +653,7 @@ QCString choice() : {QCString s;}
{
LOOKAHEAD(simple_expression())
s=simple_expression(){ return s; }
- |
+ |
LOOKAHEAD(discrete_range())
s=discrete_range(){ return s; }
|
@@ -648,10 +661,10 @@ QCString choice() : {QCString s;}
s=identifier(){ return s; }
| <OTHER_T> { return " others "; }
}
-
+
QCString choices() : {QCString s,s1;}
{
- s=choice() (<BAR_T> s1=choice(){s+="|";s+=s1;})* { return s; }
+ s=choice() (<BAR_T> s1=choice(){s+="|";s+=s1;})* { return s; }
}
void component_configuration () :{}
@@ -664,7 +677,7 @@ void component_configuration () :{}
void component_declaration() : {QCString s;}
{
<COMPONENT_T> s=identifier() [ <IS_T> ]
- { currP=VhdlDocGen::COMPONENT; }
+ { currP=VhdlDocGen::COMPONENT; }
[ generic_clause() ]
[ port_clause() ]
{
@@ -678,10 +691,10 @@ void component_declaration() : {QCString s;}
void component_instantiation_statement() : {QCString s,s1;}
{
-s=identifier() <COLON_T>
+s=identifier() <COLON_T>
s1=instantiation_unit()
{
- addCompInst(s.lower().data(),s1.lower().data(),0,getLine());
+ addCompInst(s.lower().data(),s1.lower().data(),0,getLine());
}
[ LOOKAHEAD(generic_map_aspect()) generic_map_aspect() ]
[ port_map_aspect() ] <SEMI_T>
@@ -710,7 +723,7 @@ void concurrent_procedure_call_statement() : {}
void concurrent_signal_assignment_statement() : {}
{
-[ LOOKAHEAD(2) identifier() <COLON_T> ] [<POSTPONED_T> ]
+[ LOOKAHEAD(2) identifier() <COLON_T> ] [<POSTPONED_T> ]
(
LOOKAHEAD(conditional_signal_assignment() )
conditional_signal_assignment()
@@ -725,21 +738,21 @@ void concurrent_statement() : {}
// try {
LOOKAHEAD([identifier() ":"] <BLOCK_T>)
block_statement()
-|
+|
LOOKAHEAD([identifier() ":"] [<POSTPONED_T>] <PROCESS_T>)
process_statement()
-|
+|
LOOKAHEAD(generate_statement())
generate_statement()
-|
+|
case_scheme()
|
LOOKAHEAD([identifier() ":"] [<POSTPONED_T>] <ASSERT_T>)
concurrent_assertion_statement()
-|
+|
LOOKAHEAD(concurrent_signal_assignment_statement())
concurrent_signal_assignment_statement()
-|
+|
LOOKAHEAD(component_instantiation_statement() )
component_instantiation_statement()
|
@@ -762,14 +775,14 @@ QCString condition() : {QCString s;}
QCString condition_clause() : {QCString s;}
{
<UNTIL_T> s=condition()
- {
+ {
return " until "+s;
}
}
void conditional_signal_assignment() : {}
{
- // LOOKAHEAD( target() "<=" options_() conditional_waveforms() ";")
+ // LOOKAHEAD( target() "<=" options_() conditional_waveforms() ";")
target() <LESSTHAN_T> options() conditional_waveforms() <SEMI_T>
}
@@ -782,7 +795,7 @@ waveform()
}
// ( waveform() < WHEN_T> condition() <ELSE_T> )*
-// waveform() [ <WHEN_T> condition() ]
+// waveform() [ <WHEN_T> condition() ]
//waveform()
// ( LOOKAHEAD( <WHEN> condition() <ELSE>)
@@ -793,12 +806,12 @@ void configuration_declaration() : {QCString s,s1;}
{
<CONFIGURATION_T> s=identifier() <OF_T> s1=name() <IS_T>
{
-
+
confName=s+"::"+s1;
addVhdlType(s.data(),getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public);
- }
+ }
configuration_declarative_part()
- block_configuration()
+ block_configuration()
<END_T> [ <CONFIGURATION_T> ] [ name() ] <SEMI_T>
{ genLabels.resize(0); confName="";}
}
@@ -812,7 +825,7 @@ void configuration_declarative_item() : {}
void configuration_declarative_part() : {}
{
- (configuration_declarative_item())*
+ (configuration_declarative_item())*
}
void configuration_item (): {}
@@ -820,25 +833,25 @@ void configuration_item (): {}
LOOKAHEAD(component_configuration())
component_configuration()
| block_configuration()
-
+
}
void configuration_specification() : {}
{
-<FOR_T> component_specification() binding_indication() <SEMI_T>
+<FOR_T> component_specification() binding_indication() <SEMI_T>
}
QCString constant_declaration() : {QCString s,s1,s2;Token *t=0;}
{
- <CONSTANT_T> s=identifier_list() <COLON_T> s1= subtype_indication() [ t=<VARASSIGN_T> s2=expression() ] <SEMI_T>
+ <CONSTANT_T> s=identifier_list() <COLON_T> s1= subtype_indication() [ t=<VARASSIGN_T> s2=expression() ] <SEMI_T>
{
if(t)
- s2.prepend(":=");
- QCString it=s1+s2;
+ s2.prepend(":=");
+ QCString it=s1+s2;
addVhdlType(s.data(),getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public);
it.prepend("constant ");
- return it;
- }
+ return it;
+ }
}
QCString constraint_array_definition (): {QCString s,s1;}
@@ -852,12 +865,12 @@ void context_clause (): {}
}
QCString constraint () :{QCString s;}
- {
- LOOKAHEAD(range_constraint())
- s=range_constraint(){ return s;}
+ {
+ LOOKAHEAD(range_constraint())
+ s=range_constraint(){ return s;}
|
- LOOKAHEAD(index_constraint())
- s=index_constraint(){ return s;}
+ LOOKAHEAD(index_constraint())
+ s=index_constraint(){ return s;}
}
void context_item() : {}
@@ -866,7 +879,7 @@ void context_item() : {}
| use_clause()
}
-QCString decimal_literal() : {Token *tok;}
+QCString decimal_literal() : {Token *tok=0;}
{
tok=<DECIMAL_LITERAL> { return tok->image.c_str(); }
}
@@ -887,7 +900,7 @@ void design_file() : {}
void design_unit() : {}
{
context_clause()library_unit()
-
+
}
QCString designator() : {QCString s;}
@@ -896,7 +909,7 @@ QCString designator() : {QCString s;}
| s=operator_symbol(){return s;}
}
-QCString direction (): {Token *tok;}
+QCString direction (): {Token *tok=0;}
{
tok=<TO_T> { return tok->image.c_str();}
| tok=<DOWNTO_T> { return tok->image.c_str();}
@@ -916,18 +929,18 @@ QCString discrete_range() : {QCString s;}
{
LOOKAHEAD(range())
s=range() { return s;}
- |
+ |
LOOKAHEAD(subtype_indication())
s=subtype_indication() { return s;}
}
QCString element_association() : {QCString s,s1;}
{
-[LOOKAHEAD(choices() <ARROW_T>) s=choices() <ARROW_T> ] s1=expression()
- {
-if(!s.isEmpty())
+[LOOKAHEAD(choices() <ARROW_T>) s=choices() <ARROW_T> ] s1=expression()
+ {
+if(!s.isEmpty())
return s+"=>"+s1;
-return s1;
+return s1;
}
}
@@ -937,7 +950,7 @@ s=identifier_list() <COLON_T> s1=subtype_indication() <SEMI_T> {return s+":"+s1;
}
-QCString entity_aspect() : {Token *tok;QCString s,s1;}
+QCString entity_aspect() : {Token *tok=0;QCString s,s1;}
{
tok=<ENTITY_T> s=name() [ LOOKAHEAD(1)<LPAREN_T> s1=identifier() <RPAREN_T> {s+="("+s1+")";} ] { return s;}
| tok=<CONFIGURATION_T> s=name() { return tok->image.c_str()+s;}
@@ -967,7 +980,7 @@ QCString entity_class() : {}
QCString entity_class_entry() : {QCString s;}
{
- s=entity_class() [ <BOX_T> {s+="<>";} ] { return s;}
+ s=entity_class() [ <BOX_T> {s+="<>";} ] { return s;}
}
QCString entity_class_entry_list() : {QCString s,s1,s2;}
@@ -978,19 +991,19 @@ QCString entity_class_entry_list() : {QCString s,s1,s2;}
void entity_declaration() : {QCString s;}
{
// try{
- <ENTITY_T> s=identifier() <IS_T>
- {
+ <ENTITY_T> s=identifier() <IS_T>
+ {
lastEntity=current;
lastCompound=0;
addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
}
entity_header()
entity_declarative_part ()
- [ <BEGIN_T> entity_statement_part() ]
+ [ <BEGIN_T> entity_statement_part() ]
<END_T> [ <ENTITY_T> ] [ name() ]
- // }catch(...){error_skipto(SEMI_T);}
- <SEMI_T>
- { lastEntity=0;lastCompound=0; genLabels.resize(0); }
+ // }catch(...){error_skipto(SEMI_T);}
+ <SEMI_T>
+ { lastEntity=0;lastCompound=0; genLabels.resize(0); }
}
void entity_declarative_item() : {}
@@ -1004,13 +1017,13 @@ subprogram_declaration()
| variable_declaration()
| file_declaration()
| alias_declaration()
-|
+|
LOOKAHEAD(attribute_declaration())
attribute_declaration()
| attribute_specification()
| disconnection_specification()
| use_clause()
-|
+|
LOOKAHEAD(3)
group_template_declaration()
| group_declaration()
@@ -1034,7 +1047,7 @@ s=entity_tag() [ s1=signature() ] { return s+s1;}
void entity_header() : {}
{
[ { currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC; } generic_clause()]
- [ { currP=VhdlDocGen::PORT; } port_clause()]
+ [ { currP=VhdlDocGen::PORT; } port_clause()]
}
QCString entity_name_list() : {QCString s,s1;}
@@ -1062,7 +1075,7 @@ LOOKAHEAD(process_statement())
void entity_statement_part() : {}
{
- (entity_statement())*
+ (entity_statement())*
}
@@ -1086,14 +1099,14 @@ QCString enumeration_type_definition() : {QCString s,s1;}
QCString exit_statement() : {QCString s,s1,s2;Token *t=0;Token *t1=0;}
{
-[ s=identifier() t=<COLON_T> ] <EXIT_T> [ s1=identifier() ]
+[ s=identifier() t=<COLON_T> ] <EXIT_T> [ s1=identifier() ]
[ t1=<WHEN_T> s2=condition() ] <SEMI_T>
{
- lab.resize(0);
+ lab.resize(0);
if(t) s+=":";
if(t1) s2.prepend(" when ");
- FlowChart::addFlowChart(FlowChart::EXIT_NO,"exit",s2.data(),s1.data());
-
+ FlowChart::addFlowChart(FlowChart::EXIT_NO,"exit",s2.data(),s1.data());
+
return s+s1+s2+";";
}
}
@@ -1128,10 +1141,10 @@ s=primary() [LOOKAHEAD(1) <DOUBLEMULT_T> s1=primary(){ s+="**";s+=s1;} ] { retur
QCString file_declaration() : {QCString s,s1,s2,s3;}
{
- <FILE_T> s=identifier_list() <COLON_T> s2=subtype_indication() [ s3=file_open_information() ] <SEMI_T>
+ <FILE_T> s=identifier_list() <COLON_T> s2=subtype_indication() [ s3=file_open_information() ] <SEMI_T>
{
QCString t1=s2+" "+s3;
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public);
+ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public);
return " file "+s+":"+s2+" "+s3+";";
}
}
@@ -1156,10 +1169,10 @@ QCString floating_type_definition() : {QCString s;}
s=range_constraint(){ return s;}
}
-QCString formal_designator() : {QCString s;Token *tok;}
+QCString formal_designator() : {QCString s;Token *tok=0;}
{
s=name() { return s; }
- |tok=<INTEGER> { return tok->image.c_str();}
+ |tok=<INTEGER> { return tok->image.c_str();}
}
@@ -1177,13 +1190,13 @@ QCString full_type_declaration() : {QCString s,s1,s2;}
{
<TYPE_T> s=identifier() <IS_T>
try{
- s2=type_definition()
- }catch(...){error_skipto(SEMI_T);}
- <SEMI_T>
- {
- addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
- return "type "+s+" is "+s2+";";
- }
+ s2=type_definition()
+ }catch(...){error_skipto(SEMI_T);}
+ <SEMI_T>
+ {
+ addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
+ return "type "+s+" is "+s2+";";
+ }
}
QCString function_call() : {QCString s,s1;}
@@ -1195,12 +1208,12 @@ void generate_statement() : {QCString s;}
{
s=identifier() <COLON_T>
try{
- generate_scheme() <GENERATE_T>
+ generate_scheme() <GENERATE_T>
{ pushLabel(genLabels,s); }
generate_statement_body1()
- <END_T>
- }catch(...){error_skipto(GENERATE_T);}
- <GENERATE_T> [ identifier() ] <SEMI_T> {genLabels=popLabel(genLabels); }
+ <END_T>
+ }catch(...){error_skipto(GENERATE_T);}
+ <GENERATE_T> [ identifier() ] <SEMI_T> {genLabels=popLabel(genLabels); }
}
void generate_scheme() : {}
@@ -1226,18 +1239,18 @@ void generic_map_aspect() : {}
QCString group_constituent() : {QCString s;}
{
- s=name() { return s; }
+ s=name() { return s; }
| s=character_literal() { return s;}
}
QCString group_constituent_list() : {QCString s,s1,s2;}
{
- (s1=group_constituent())(<COMMA_T> s=group_constituent(){s2+=",";s2+=s1;})* { return s+s2;}
+ (s1=group_constituent())(<COMMA_T> s=group_constituent(){s2+=",";s2+=s1;})* { return s+s2;}
}
QCString group_declaration() : {QCString s,s1,s2;}
{
- <GROUP_T> s=identifier() <COLON_T> s1=identifier() <LPAREN_T> s2=group_constituent_list() <RPAREN_T> <SEMI_T>
+ <GROUP_T> s=identifier() <COLON_T> s1=identifier() <LPAREN_T> s2=group_constituent_list() <RPAREN_T> <SEMI_T>
{
return "group "+s+":"+s1+"("+s2+");";
}
@@ -1245,7 +1258,7 @@ QCString group_declaration() : {QCString s,s1,s2;}
QCString group_template_declaration() : {QCString s,s1;}
{
- <GROUP_T> s=identifier() <IS_T> <LPAREN_T> s1=entity_class_entry_list() <RPAREN_T> <SEMI_T>
+ <GROUP_T> s=identifier() <IS_T> <LPAREN_T> s1=entity_class_entry_list() <RPAREN_T> <SEMI_T>
{
return "group "+s+ "is ("+s1+");";
}
@@ -1256,7 +1269,7 @@ void guarded_signal_specification() : {}
signal_list() <COLON_T> type_mark()
}
-QCString identifier() : {Token *tok;}
+QCString identifier() : {Token *tok=0;}
{
tok=<EXTENDED_CHARACTER>{ return tok->image.c_str(); }
|tok=<BASIC_IDENTIFIER> { return tok->image.c_str(); }
@@ -1271,33 +1284,33 @@ void if_statement() : {QCString s,s1;}
{
[LOOKAHEAD(1) identifier() <COLON_T> ]
<IF_T> s=condition() <THEN_T>
- {
+ {
s.prepend("if ");
FlowChart::addFlowChart(FlowChart::IF_NO,0,s);
- }
- sequence_of_statement()
- (
- <ELSIF_T> s1=condition() <THEN_T>
- {
+ }
+ sequence_of_statement()
+ (
+ <ELSIF_T> s1=condition() <THEN_T>
+ {
s1.prepend("elsif ");
FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data());
}
- sequence_of_statement()
- )*
- [LOOKAHEAD(1) <ELSE_T>
- {
+ sequence_of_statement()
+ )*
+ [LOOKAHEAD(1) <ELSE_T>
+ {
FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
- }
- sequence_of_statement() ] <END_T> <IF_T> [ identifier() ] <SEMI_T>
- {
+ }
+ sequence_of_statement() ] <END_T> <IF_T> [ identifier() ] <SEMI_T>
+ {
FlowChart::moveToPrevLevel();
FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0);
- }
+ }
}
QCString incomplete_type_declaration() : {QCString s;}
{
- <TYPE_T> s=identifier() <SEMI_T>
+ <TYPE_T> s=identifier() <SEMI_T>
{
return "type "+s+";";
}
@@ -1319,17 +1332,17 @@ QCString index_specification() : {QCString s;}
QCString index_subtype_definition() : {QCString s;}
{
- s=type_mark() <RANGE_T> <BOX_T> { return s+" range <> ";}
+ s=type_mark() <RANGE_T> <BOX_T> { return s+" range <> ";}
}
-QCString instantiation_unit() : {QCString s,s1,s2;Token *tok;}
+QCString instantiation_unit() : {QCString s,s1,s2;Token *tok=0;}
{
[ tok=<COMPONENT_T> ] s=identifier() {s1="component"; return s; }
| tok=<ENTITY_T> s2=name() {s=tok->image.c_str()+s2;} [ <LPAREN_T> s1=identifier() <RPAREN_T> {s+="(";s+=s1;s+=")" ;}] { return s;}
| <CONFIGURATION_T> s=name() {s1="configuration ";return s;}
}
-QCString instantiation_list() : {QCString s;Token *tok;}
+QCString instantiation_list() : {QCString s;Token *tok=0;}
{
s=identifier_list() { return s;}
| tok=<OTHER_T> {return tok->image.c_str();}
@@ -1353,13 +1366,13 @@ LOOKAHEAD(5)
s=interface_subprogram_declaration() { return s;}
|interface_package_declaration() { return s;}
-|
+|
LOOKAHEAD(5)
s=interface_variable_declaration() { return s;}
-|
+|
LOOKAHEAD(5)
interface_file_declaration() { return s;}
-|
+|
LOOKAHEAD(subprogram_declaration())
subprogram_declaration() { return s;}
|
@@ -1367,8 +1380,8 @@ subprogram_declaration() { return s;}
{
if (parse_sec==GEN_SEC)
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public);
- return s;
- }
+ return s;
+ }
}
QCString interface_element() : {QCString s;}
@@ -1379,7 +1392,7 @@ s=interface_declaration(){ return s;}
QCString interface_file_declaration() : {QCString s,s1;}
{
<FILE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
-{
+{
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
return " file "+s+":"+s1;
}
@@ -1394,20 +1407,20 @@ s=interface_element() (LOOKAHEAD(1) <SEMI_T> s1=interface_element(){s2+=";";s2+=
QCString interface_variable_declaration() : {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;}
{
-[( tok=<VARIABLE_T> | tok=<SIGNAL_T> | tok=<CONSTANT_T>|tok=<SHARED_T>) ]
- s=identifier_list() <COLON_T> [ s1=mode() ]
- s2=subtype_indication() [ tok1=<BUS_T> ] [ tok2=<VARASSIGN_T> s4=expression() ]
+[( tok=<VARIABLE_T> | tok=<SIGNAL_T> | tok=<CONSTANT_T>|tok=<SHARED_T>) ]
+ s=identifier_list() <COLON_T> [ s1=mode() ]
+ s2=subtype_indication() [ tok1=<BUS_T> ] [ tok2=<VARASSIGN_T> s4=expression() ]
{
if(tok)
- s5=tok->image.c_str();
-
- if(tok1)
- s3=tok1->image.data();
-
- if(tok2)
- s3+=":=";
-
- QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
+ s5=tok->image.c_str();
+
+ if(tok1)
+ s3=tok1->image.data();
+
+ if(tok2)
+ s3+=":=";
+
+ QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
if (currP!=VhdlDocGen::COMPONENT)
{
if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
@@ -1424,8 +1437,8 @@ QCString interface_variable_declaration() : {Token *tok=0;Token *tok1=0;Token *
}
// fprintf(stderr,"\n\n <<port %s >>\n",$$.data());
} // if component
- return it;
- }
+ return it;
+ }
}
QCString iteration_scheme() : {QCString s;}
@@ -1434,15 +1447,15 @@ QCString iteration_scheme() : {QCString s;}
{
s.prepend("while ");
FlowChart::addFlowChart(FlowChart::WHILE_NO,0,s.data(),lab.data());
- lab="";
- return s;
+ lab="";
+ return s;
}
| <FOR_T> s=parameter_specification()
{
QCString q=lab+" for "+s;
FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
lab="";
- return q;
+ return q;
}
}
@@ -1454,14 +1467,14 @@ QCString label() : {QCString s;}
QCString library_clause() : {QCString s;}
{
(<LIBRARY_T> s=identifier_list() <SEMI_T>
- )
+ )
{
if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
{
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
+ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
}
QCString s1="library "+s;
- return s1;
+ return s1;
}
}
@@ -1471,19 +1484,19 @@ LOOKAHEAD(2)
primary_unit() { return s; }
| secondary_unit() { return s; }
| context_declaration()
-
+
}
QCString literal() : {QCString s;}
{
-
+
LOOKAHEAD(bit_string_literal())
s=bit_string_literal() { return s;}
|
LOOKAHEAD(numeric_literal())
s=numeric_literal() { return s;}
-|
-
+|
+
LOOKAHEAD(enumeration_literal())
s=enumeration_literal() { return s;}
| s=string_literal() { return s;}
@@ -1499,21 +1512,21 @@ QCString loop_statement() : {QCString s,s1,s2,s3;}
{
[ s=identifier() <COLON_T> {s+=":";} ]
[ s1=iteration_scheme() ]
- {
- if(s1.isEmpty())
- FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
- }
- <LOOP_T>
- s2=sequence_of_statement()
- <END_T> <LOOP_T> [ s3=identifier() ] <SEMI_T>
- {
- QCString q = s+" loop "+s2+" end loop" +s3;
+ {
+ if(s1.isEmpty())
+ FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
+ }
+ <LOOP_T>
+ s2=sequence_of_statement()
+ <END_T> <LOOP_T> [ s3=identifier() ] <SEMI_T>
+ {
+ QCString q = s+" loop "+s2+" end loop" +s3;
QCString endLoop="end loop" + s3;
FlowChart::moveToPrevLevel();
FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0);
- return q;
- }
-
+ return q;
+ }
+
}
@@ -1524,7 +1537,7 @@ QCString miscellaneous_operator():{Token *t=0;}
| <NOT_T> {return "not";}
}
-QCString mode() : {Token *tok;}
+QCString mode() : {Token *tok=0;}
{
tok=<IN_T> { return "in"; }
| tok=<OUT_T> { return "out"; }
@@ -1533,7 +1546,7 @@ tok=<IN_T> { return "in"; }
| tok=<LINKAGE_T> { return "linkage"; }
}
-QCString multiplying_operation() : {Token *tok;}
+QCString multiplying_operation() : {Token *tok=0;}
{
tok=<MULT_T> { return tok->image.c_str(); }
| tok=<SLASH_T> { return tok->image.c_str(); }
@@ -1558,46 +1571,46 @@ QCString name_ext1() : {QCString s,s1,s2;}
QCString name_ext() : {QCString s,s1,s2;}
{
-
+
(
- LOOKAHEAD(<DOT_T> suffix())
+ LOOKAHEAD(<DOT_T> suffix())
<DOT_T> s1=suffix(){s+=".";s+=s1;}
-|
+|
LOOKAHEAD(test_att_name())
s1=test_att_name() { s+=s1;}
- |
+ |
LOOKAHEAD( <LPAREN_T> discrete_range() <RPAREN_T>)
<LPAREN_T> s1=discrete_range() <RPAREN_T> {s+="(";s+=s1;s+=")";}
- |
+ |
LOOKAHEAD( "(" expression() ("," expression() )* ")" )
- <LPAREN_T> s1=expression() {s+="(";s+=s1;} (LOOKAHEAD(1) <COMMA_T> s1=expression(){s+=",";s+=s1;})* <RPAREN_T> { s+=")";}
+ <LPAREN_T> s1=expression() {s+="(";s+=s1;} (LOOKAHEAD(1) <COMMA_T> s1=expression(){s+=",";s+=s1;})* <RPAREN_T> { s+=")";}
)
{return s;}
}
-
+
QCString test_att_name() : {QCString s,s1;}
{
- [ LOOKAHEAD(<LBRACKET_T>) s1=signature() {s=s1;}]
- <APOSTROPHE_T> s1=attribute_designator() {s+="'";s+=s1;}
- [LOOKAHEAD(1) <LPAREN_T> s1=expression() <RPAREN_T> {s+="(";s+=s1;s+=")";}]
+ [ LOOKAHEAD(<LBRACKET_T>) s1=signature() {s=s1;}]
+ <APOSTROPHE_T> s1=attribute_designator() {s+="'";s+=s1;}
+ [LOOKAHEAD(1) <LPAREN_T> s1=expression() <RPAREN_T> {s+="(";s+=s1;s+=")";}]
{ return s;}
}
-
+
QCString indexed_name() : {QCString s,s1,s2;}
- {
+ {
s2=identifier() <LPAREN_T> s1=expression(){s=s2+"("+s1;} (<COMMA_T> s1=expression(){s+=",";s+=s1;})* <RPAREN_T> {return s+")";}
- }
+ }
QCString next_statement() : {QCString s,s1,s2;Token *t=0;Token *t1=0;}
{
-[LOOKAHEAD(1) s=identifier() t=<COLON_T> ] <NEXT_T> [ s1=identifier() ]
+[LOOKAHEAD(1) s=identifier() t=<COLON_T> ] <NEXT_T> [ s1=identifier() ]
[LOOKAHEAD(1) t1=<WHEN_T> s2=condition() ] <SEMI_T>
{
if(t) s+=":";
- FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data());
+ FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data());
lab.resize(0);
- if(t1) s2.prepend("when ");
+ if(t1) s2.prepend("when ");
return s+s1+s2+";";
}
}
@@ -1609,7 +1622,7 @@ QCString null_statement() : {QCString s;}
QCString numeric_literal() : {QCString s;}
{
-
+
LOOKAHEAD(physical_literal())
s=physical_literal(){ return s;}
| s=abstract_literal() { return s;}
@@ -1625,14 +1638,14 @@ QCString object_class() : {}
|<TYPE_T> { return "type"; }
}
-QCString operator_symbol() : {Token *tok;}
+QCString operator_symbol() : {Token *tok=0;}
{
tok=<STRINGLITERAL> {return tok->image.c_str();}
}
void options() : {}
{
- [ <GUARDED_T> ] [ delay_mechanism() ]
+ [ <GUARDED_T> ] [ delay_mechanism() ]
}
void package_body() : {QCString s;}
@@ -1643,7 +1656,7 @@ void package_body() : {QCString s;}
s.prepend("_");
addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
}
- package_body_declarative_part()
+ package_body_declarative_part()
<END_T> [<PACKAGE_T> <BODY_T> ] [ name() ] <SEMI_T> { lastCompound=0; genLabels.resize(0); }
}
@@ -1659,7 +1672,7 @@ subprogram_declaration()
| file_declaration()
| alias_declaration()
| use_clause()
-|
+|
LOOKAHEAD(3)
group_template_declaration()
| group_declaration()
@@ -1672,7 +1685,7 @@ void package_body_declarative_part() : {}
void package_declaration(): {QCString s;}
{
-
+
<PACKAGE_T> s=identifier() <IS_T>
{
lastCompound=current;
@@ -1680,14 +1693,14 @@ void package_declaration(): {QCString s;}
clone->section=Entry::NAMESPACE_SEC;
clone->spec=VhdlDocGen::PACKAGE;
clone->name=s;
- clone->startLine=getLine();
- clone->bodyLine=getLine();
+ clone->startLine=getLine(PACKAGE_T);
+ clone->bodyLine=getLine(PACKAGE_T);
clone->protection=Package;
current_root->addSubEntry(clone);
- addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
- }
- package_declarative_part()
-<END_T> [ <PACKAGE_T>] [ name() ] <SEMI_T>
+ addVhdlType(s,getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
+ }
+ package_declarative_part()
+<END_T> [ <PACKAGE_T>] [ name() ] <SEMI_T>
{ lastEntity=0;lastCompound=0; genLabels.resize(0); }
}
@@ -1746,13 +1759,13 @@ QCString physical_type_definition() : {QCString s,s1,s2;}
<UNITS_T>
s=identifier()<SEMI_T>
(s1=secondary_unit_declaration(){s2+=s1;s2+="#";})*
- <END_T> <UNITS_T> [name()]
- {
- current->args=s2;
- current->args.prepend("units");
+ <END_T> <UNITS_T> [name()]
+ {
+ current->args=s2;
+ current->args.prepend("units");
current->spec=VhdlDocGen::UNITS;
- return s2;
- }
+ return s2;
+ }
}
void port_clause() : {}
@@ -1777,21 +1790,21 @@ s=function_call() { return s;}
|
LOOKAHEAD(<LPAREN_T> expression() <RPAREN_T>)
<LPAREN_T> s1=expression() <RPAREN_T>{ s="("+s1+")"; return s;}
-|
+|
LOOKAHEAD(qualified_expression())
s=qualified_expression() { return s;}
-|
+|
LOOKAHEAD(type_conversion())
s=type_conversion() { return s;}
-|
+|
LOOKAHEAD(literal())
s=literal() { s.prepend(" ");return s;}
-|
+|
LOOKAHEAD(name())
s=name() { return s;}
-|
+|
allocator() { return "";}
-|
+|
s=aggregate() { return s; }
}
@@ -1800,7 +1813,7 @@ void primary_unit() : {}
{
entity_declaration()
| configuration_declaration()
-|
+|
LOOKAHEAD(package_instantiation_declaration())
package_instantiation_declaration()
|
@@ -1812,13 +1825,13 @@ LOOKAHEAD(4)
QCString procedure_call() : {QCString s,s1;}
{
- s=name() [ <LPAREN_T> s1=actual_parameter_part() <RPAREN_T>{ s1.prepend("("); s1.append(")");}]
+ s=name() [ <LPAREN_T> s1=actual_parameter_part() <RPAREN_T>{ s1.prepend("("); s1.append(")");}]
{ return s+s1;}
}
QCString procedure_call_statement() : {QCString s,s1;}
{
-[LOOKAHEAD(2) s=identifier() <COLON_T> { s+=":"; }] s1=procedure_call() <SEMI_T>
+[LOOKAHEAD(2) s=identifier() <COLON_T> { s+=":"; }] s1=procedure_call() <SEMI_T>
{
return s+s1+";";
}
@@ -1834,12 +1847,12 @@ subprogram_declaration() { return "";}
| s=variable_declaration() { return s;}
| s=file_declaration() { return s;}
| s=alias_declaration() { return s;}
-|
+|
LOOKAHEAD(3)
s=attribute_declaration() { return s;}
| s=attribute_specification() { return s;}
| s=use_clause() { return s;}
-|
+|
LOOKAHEAD(3)
s=group_template_declaration() { return s;}
| s=group_declaration() { return s;}
@@ -1853,38 +1866,38 @@ QCString process_declarative_part() :{QCString s,s1;}
void process_statement() : {QCString s,s1,s2;Token *tok=0;}
{
[ s=identifier() <COLON_T> ]
-[ <POSTPONED_T> ]
- {
- currP=VhdlDocGen::PROCESS;
+[ <POSTPONED_T> ]
+ {
+ currP=VhdlDocGen::PROCESS;
current->startLine=getLine();
current->bodyLine=getLine();
}
<PROCESS_T>
//try{
[ <LPAREN_T> (tok=<ALL_T> | s1=sensitivity_list()) <RPAREN_T> ] [ <IS_T> ]
- s2=process_declarative_part()
- {
+ s2=process_declarative_part()
+ {
if (s2.data())
FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s2.data(),0);
FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
}
- <BEGIN_T>
+ <BEGIN_T>
process_statement_part()
- <END_T> [ <POSTPONED_T> ]
- // }catch(...){error_skipto(PROCESS_T);}
- <PROCESS_T> [ identifier() ] <SEMI_T>
- {
+ <END_T> [ <POSTPONED_T> ]
+ // }catch(...){error_skipto(PROCESS_T);}
+ <PROCESS_T> [ identifier() ] <SEMI_T>
+ {
if(s.isEmpty())
currName=VhdlDocGen::getProcessNumber();
else
currName=s;
-
+
current->name=currName;
tempEntry=current;
current->endBodyLine=getLine();
currP=0;
if(tok)
- s1=tok->image.data();
+ s1=tok->image.data();
createFunction(currName,VhdlDocGen::PROCESS,s1.data());
createFlow();
currName="";
@@ -1894,16 +1907,16 @@ void process_statement() : {QCString s,s1,s2;Token *tok=0;}
void process_statement_part() : {}
{
- (sequential_statement())*
+ (sequential_statement())*
}
QCString qualified_expression() : {QCString s,s1;}
{
- s1=identifier() <APOSTROPHE_T> {s=s1+"'";}
- (
+ s1=identifier() <APOSTROPHE_T> {s=s1+"'";}
+ (
LOOKAHEAD(aggregate())
- s1=aggregate(){s+=s1;}
- | <LPAREN_T> s1=expression() <RPAREN_T>{s+="(";s+=s1;s+=")";}
+ s1=aggregate(){s+=s1;}
+ | <LPAREN_T> s1=expression() <RPAREN_T>{s+="(";s+=s1;s+=")";}
)
{return s;}
}
@@ -1912,7 +1925,7 @@ QCString range() : {QCString s,s1,s2;}
{
LOOKAHEAD( simple_expression() direction() simple_expression())
s=simple_expression() s1=direction() s2=simple_expression(){return s+" "+s1+" "+s2;}
- |
+ |
LOOKAHEAD(attribute_name())
s=attribute_name(){ return s;}
}
@@ -1921,15 +1934,15 @@ QCString range_constraint() : {QCString s,s1;}
{
<RANGE_T> s=range(){return " range "+s;}
}
-
+
void record_type_definition() : {}
{
<RECORD_T>
// try{
- (element_declaration())+
- // }catch(...){error_skipto(END_T);}
- <END_T>
- <RECORD_T> [ name()]
+ (element_declaration())+
+ // }catch(...){error_skipto(END_T);}
+ <END_T>
+ <RECORD_T> [ name()]
}
QCString relation() : {QCString s,s1,s2;}
@@ -1945,25 +1958,25 @@ QCString relation_operator() : {}
|<GREATERTHAN_T> {return ">=";}
|<LESSTHAN_T> {return "<=";}
|<NOTEQU_T> {return "/=";}
-
+
}
QCString report_statement() : {Token *t=0;Token *t1=0;QCString s,s1,s2;}
{
[ s=identifier() t=<COLON_T> ]
<REPORT_T> s1=expression()
- [ t1=<SEVERITY_T> s2=expression() ] <SEMI_T>
- {
- if(t) s.append(":");
- s1.prepend(" report ");
- if(t1) s2.prepend(" severity ");
- return s+s1+s2+";";
- }
+ [ t1=<SEVERITY_T> s2=expression() ] <SEMI_T>
+ {
+ if(t) s.append(":");
+ s1.prepend(" report ");
+ if(t1) s2.prepend(" severity ");
+ return s+s1+s2+";";
+ }
}
QCString return_statement() : {QCString s,s1;}
{
-[ s=identifier() <COLON_T> { s+=":";}] <RETURN_T> [ s1=expression() ] <SEMI_T>
+[ s=identifier() <COLON_T> { s+=":";}] <RETURN_T> [ s1=expression() ] <SEMI_T>
{ return s+" return "+s1+";";}
}
@@ -1982,7 +1995,7 @@ architecture_body()
QCString secondary_unit_declaration() : {QCString s,s1;}
{
-s=identifier() <EQU_T> s1=physical_literal() <SEMI_T> { return s+"="+s1; }
+s=identifier() <EQU_T> s1=physical_literal() <SEMI_T> { return s+"="+s1; }
}
QCString selected_name() : {QCString s,s1;}
@@ -2024,47 +2037,47 @@ QCString sequence_of_statement() : {QCString s,s1;}
QCString sequential_statement() :{QCString s;}
{
LOOKAHEAD( [ identifier() ":" ] target() "<=")
- s=signal_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
- |
- LOOKAHEAD(3)
- s=assertion_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
- |
- LOOKAHEAD(3)
- s=report_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
- |
- LOOKAHEAD(3)
- s=wait_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
- |
+ s=signal_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
+ LOOKAHEAD(3)
+ s=assertion_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
+ LOOKAHEAD(3)
+ s=report_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
+ LOOKAHEAD(3)
+ s=wait_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
LOOKAHEAD( [ identifier() ":" ] target() ":=" )
- s=variable_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
- |
+ s=variable_assignment_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ |
LOOKAHEAD(3)
- s=procedure_call_statement(){ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; }
- |
- LOOKAHEAD(3)
- if_statement(){return s;}
- |
- LOOKAHEAD(3)
- case_statement(){return s;}
- |
- LOOKAHEAD(3)
- loop_statement(){return s;}
- |
- LOOKAHEAD(3)
- s=next_statement() {return s;}
- |
- LOOKAHEAD(3)
- s=exit_statement(){return s;}
- |
+ s=procedure_call_statement(){ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; }
+ |
+ LOOKAHEAD(3)
+ if_statement(){return s;}
+ |
+ LOOKAHEAD(3)
+ case_statement(){return s;}
+ |
+ LOOKAHEAD(3)
+ loop_statement(){return s;}
+ |
+ LOOKAHEAD(3)
+ s=next_statement() {return s;}
+ |
LOOKAHEAD(3)
- s=return_statement(){FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);return s;}
- |
- s=null_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
+ s=exit_statement(){return s;}
+ |
+ LOOKAHEAD(3)
+ s=return_statement(){FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);return s;}
+ |
+ s=null_statement(){FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;}
}
QCString shift_expression() : {QCString s,s1,s2;}
{
- s=simple_expression() [ s1=shift_operator() s2=simple_expression() ] { return s+s1+s2;}
+ s=simple_expression() [ s1=shift_operator() s2=simple_expression() ] { return s+s1+s2;}
}
QCString shift_operator() : {}
{
@@ -2087,14 +2100,14 @@ QCString signal_assignment_statement() : {QCString s,s1,s2,s3;}
LOOKAHEAD(conditional_signal_assignment_wave())
conditional_signal_assignment_wave(){ return ""; }
-|
+|
LOOKAHEAD(selected_signal_assignment_wave())
selected_signal_assignment_wave() { return ""; }
|
- [LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";} ]
-s1=target() <LESSTHAN_T>
-[ s2=delay_mechanism() ]
-s3=waveform() <SEMI_T>
+ [LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";} ]
+s1=target() <LESSTHAN_T>
+[ s2=delay_mechanism() ]
+s3=waveform() <SEMI_T>
{
return s+s1+"<="+s2+s3+";";
}
@@ -2103,38 +2116,38 @@ s3=waveform() <SEMI_T>
void semi() : {}
{
-<SEMI_T>
+<SEMI_T>
}
void signal_declaration() : { Token* tok=0;QCString s,s1,s2,s3,s4;}
{
-<SIGNAL_T> s=identifier_list() <COLON_T> s1=subtype_indication() [ s2=signal_kind() ] [ tok=<VARASSIGN_T> s3=expression() ] <SEMI_T>
+<SIGNAL_T> s=identifier_list() <COLON_T> s1=subtype_indication() [ s2=signal_kind() ] [ tok=<VARASSIGN_T> s3=expression() ] <SEMI_T>
{
- if(tok)
- s3.prepend(":=");
- s4=s1+s2+s3;
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
+ if(tok)
+ s3.prepend(":=");
+ s4=s1+s2+s3;
+ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
}
}
QCString signal_kind() : {}
{
- <REGISTER_T> { return "register";}
+ <REGISTER_T> { return "register";}
| <BUS_T> { return "bus";}
}
QCString signal_list() : {QCString s,s1;}
{
- s=name() (<COMMA_T> s1=name() { s+=",";s+=s1;})*
+ s=name() (<COMMA_T> s1=name() { s+=",";s+=s1;})*
| <OTHER_T> { return "other";}
| <ALL_T> { return "all";}
}
QCString signature() : {QCString s,s1,s2;}
{
-<LBRACKET_T>
- [ s=name() (<COMMA_T> s1=name() {s+=",";s+=s1; })* ]
+<LBRACKET_T>
+ [ s=name() (<COMMA_T> s1=name() {s+=",";s+=s1; })* ]
[ <RETURN_T> s1=name() {s+="return ";s+=s1;}]
- <RBRACKET_T>
+ <RBRACKET_T>
{ s1="["+s+"]";return s1;}
}
@@ -2153,14 +2166,14 @@ QCString slice_name() : {QCString s,s1;}
s=identifier() <LPAREN_T> s1=discrete_range() <RPAREN_T> {return s+"("+s1+")";}
}
-QCString string_literal() : {Token *tok;}
+QCString string_literal() : {Token *tok=0;}
{
tok=<STRINGLITERAL> {return tok->image.c_str();}
}
void subprogram_body() : {QCString s;}
{
-//subprogram_specification()
+//subprogram_specification()
<IS_T>
//try{
s=subprogram_declarative_part()
@@ -2170,14 +2183,14 @@ tok=<STRINGLITERAL> {return tok->image.c_str();}
FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s,0);
}
FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
- }
- // }catch(...){error_skipto(BEGIN_T);}
+ }
+ // }catch(...){error_skipto(BEGIN_T);}
<BEGIN_T>
subprogram_statement_part()
-<END_T> [ subprogram_kind() ] [ designator() ] <SEMI_T>
+<END_T> [ subprogram_kind() ] [ designator() ] <SEMI_T>
{
tempEntry->endBodyLine=getLine(END_T);
- createFlow();
+ createFlow();
currP=0;
}
}
@@ -2192,7 +2205,7 @@ subprogram_specification()subprogram_1(){currP=0;}
void subprogram_1() : {}
{
-
+
subprogram_body()
| <SEMI_T>
}
@@ -2207,12 +2220,12 @@ subprogram_declaration(){ return "";}
| s=variable_declaration(){ return s;}
| s=file_declaration(){ return s;}
| s=alias_declaration(){ return s;}
-|
+|
LOOKAHEAD(attribute_declaration())
s=attribute_declaration(){ return s;}
| s=attribute_specification(){ return s;}
| s=use_clause(){ return s;}
-|
+|
LOOKAHEAD(3)
s=group_template_declaration(){ return s;}
| s=group_declaration() { return s;}
@@ -2231,33 +2244,33 @@ void subprogram_kind() : {}
void subprogram_specification() : {QCString s;Token *tok=0;Token *t;}
{
- <PROCEDURE_T> s=designator()
+ <PROCEDURE_T> s=designator()
{
- currP=VhdlDocGen::PROCEDURE;
- createFunction(s.data(),currP,0);
+ currP=VhdlDocGen::PROCEDURE;
+ createFunction(s.data(),currP,0);
tempEntry=current;
- current->startLine=getLine(PROCEDURE_T);
- current->bodyLine=getLine(PROCEDURE_T);
-
- } [LOOKAHEAD(1) <LPAREN_T> { param_sec=PARAM_SEC; } interface_list() { param_sec=0; }<RPAREN_T> ]
- [LOOKAHEAD(2) gen_interface_list()]
- [ LOOKAHEAD(2) gen_assoc_list()]
- param()
- { newEntry(); }
+ current->startLine=getLine(PROCEDURE_T);
+ current->bodyLine=getLine(PROCEDURE_T);
+
+ } [LOOKAHEAD(1) <LPAREN_T> { param_sec=PARAM_SEC; } interface_list() { param_sec=0; }<RPAREN_T> ]
+ [LOOKAHEAD(2) gen_interface_list()]
+ [ LOOKAHEAD(2) gen_assoc_list()]
+ param()
+ { newEntry(); }
|
- [ (tok=<PURE_T> | tok=<IMPURE_T>) ] t=<FUNCTION_T> s=designator()
+ [ (tok=<PURE_T> | tok=<IMPURE_T>) ] t=<FUNCTION_T> s=designator()
{
currP=VhdlDocGen::FUNCTION;
- if(tok)
- createFunction(tok->image.c_str(),currP,s.data());
- else
- createFunction(0,currP,s.data());
- tempEntry=current;
- current->startLine=getLine(FUNCTION_T);
- current->bodyLine=getLine(FUNCTION_T);
+ if(tok)
+ createFunction(tok->image.c_str(),currP,s.data());
+ else
+ createFunction(0,currP,s.data());
+ tempEntry=current;
+ current->startLine=getLine(FUNCTION_T);
+ current->bodyLine=getLine(FUNCTION_T);
}
[{ param_sec=PARAM_SEC; } <LPAREN_T> formal_parameter_list() <RPAREN_T> { param_sec=0; }]
- <RETURN_T> s=type_mark()
+ <RETURN_T> s=type_mark()
{
tempEntry=current;
current->type=s;
@@ -2303,7 +2316,7 @@ QCString target() : {QCString s;}
QCString term() : {QCString s,s1,s2;}
{
- s=factor() ( LOOKAHEAD(2) s1=multiplying_operation() s2=factor(){s+=s1;s+=s2;} )* { return s;}
+ s=factor() ( LOOKAHEAD(2) s1=multiplying_operation() s2=factor(){s+=s1;s+=s2;} )* { return s;}
}
QCString timeout_clause() : {QCString s;}
@@ -2334,7 +2347,7 @@ s=scalar_type_definition(){ return s;}
| s=access_type_definition(){ return s;}
| s=file_type_definition(){ return s;}
|
- LOOKAHEAD(2)
+ LOOKAHEAD(2)
protected_type_body() { return ""; }
| protected_type_declaration() { return ""; }
//}catch(...){error_skipto(SEMI_T); return "";}
@@ -2358,15 +2371,15 @@ QCString unconstraint_array_definition() : {QCString s,s1,s2,s3;}
QStringList ql1=QStringList::split(",",s,FALSE);
for (uint j=0;j<ql1.count();j++)
{
- QStringList ql=QStringList::split(".",ql1[j],FALSE);
- QCString it=ql[1].utf8();
+ QStringList ql=QStringList::split(".",ql1[j],FALSE);
+ QCString it=ql[1].utf8();
if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") )
{
VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
}
}
s1="use "+s;
- return s1;
+ return s1;
}
}
@@ -2375,35 +2388,35 @@ QCString variable_assignment_statement() : {QCString s,s1,s2;}
[LOOKAHEAD(2) s=identifier() <COLON_T> {s+=":";}]
s1=target() <VARASSIGN_T> s2=expression() <SEMI_T>
{return s+s1+":="+s2+";";}
- |
- selected_variable_assignment() { return ""; }
+ |
+ selected_variable_assignment() { return ""; }
}
QCString variable_declaration() : {Token *tok=0;Token *t1=0;QCString s,s1,s2;}
{
-[ tok=<SHARED_T> ] <VARIABLE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
-[ t1=<VARASSIGN_T> s2=expression() ] <SEMI_T>
+[ tok=<SHARED_T> ] <VARIABLE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
+[ t1=<VARASSIGN_T> s2=expression() ] <SEMI_T>
{
int spec;
- if(t1)
- s2.prepend(":=");
- QCString val=" variable "+s+":"+s1+s2+";";
- QCString it=s1;
- if(tok != 0)
- {
- it.prepend(" shared ");
- val.prepend(" shared");
- spec=VhdlDocGen::SHAREDVARIABLE;
- }
- else
- spec=VhdlDocGen::SHAREDVARIABLE;
-
- if(t1){
- it+=":=";
+ if(t1)
+ s2.prepend(":=");
+ QCString val=" variable "+s+":"+s1+s2+";";
+ QCString it=s1;
+ if(tok != 0)
+ {
+ it.prepend(" shared ");
+ val.prepend(" shared");
+ spec=VhdlDocGen::SHAREDVARIABLE;
+ }
+ else
+ spec=VhdlDocGen::SHAREDVARIABLE;
+
+ if(t1){
+ it+=":=";
it+=s2;
- }
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
+ }
+ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
return val;
}
@@ -2411,7 +2424,7 @@ QCString variable_declaration() : {Token *tok=0;Token *t1=0;QCString s,s1,s2;}
QCString wait_statement() : {QCString s,s1,s2,s3;Token *t=0;}
{
-[ s=identifier() t=<COLON_T> ] <WAIT_T> [ s1=sensitivity_clause() ] [ s2=condition_clause() ] [ s3=timeout_clause() ] <SEMI_T>
+[ s=identifier() t=<COLON_T> ] <WAIT_T> [ s1=sensitivity_clause() ] [ s2=condition_clause() ] [ s3=timeout_clause() ] <SEMI_T>
{
if(t) s.append(":");
return s+" wait "+s1+s2+s3+";";
@@ -2421,16 +2434,16 @@ QCString wait_statement() : {QCString s,s1,s2,s3;Token *t=0;}
QCString waveform() : {QCString s,s1;}
{
s=waveform_element() (LOOKAHEAD(1) <COMMA_T> s1=waveform_element(){s+=","; s+=s1;})* { return s;}
-|
+|
<UNAFFECTED_T> { return " unaffected ";}
}
QCString waveform_element() : {QCString s,s1;}
{
- s=expression() [ <AFTER_T> s1=expression(){ s1.prepend(" after ");} ]
+ s=expression() [ <AFTER_T> s1=expression(){ s1.prepend(" after ");} ]
{ return s+s1;}
-//<NULL_T> [ <AFTER_T> expression() ]
+//<NULL_T> [ <AFTER_T> expression() ]
}
// -----------------------------------------------------------------
@@ -2440,60 +2453,60 @@ QCString waveform_element() : {QCString s,s1;}
QCString protected_type_body() :{ }
{
// try{
- <PROTECTED_T> <BODY_T>
- protected_type_body_declarative_part()
-
- //}catch(...){error_skipto(END_T);}
- <END_T><PROTECTED_T> <BODY_T> [identifier()] {return "";}
+ <PROTECTED_T> <BODY_T>
+ protected_type_body_declarative_part()
+
+ //}catch(...){error_skipto(END_T);}
+ <END_T><PROTECTED_T> <BODY_T> [identifier()] {return "";}
}
void protected_type_body_declarative_item() : { }
- {
- subprogram_declaration()
- | subprogram_body()
- | type_declaration()
+ {
+ subprogram_declaration()
+ | subprogram_body()
+ | type_declaration()
| subtype_declaration()
| constant_declaration()
| variable_declaration()
| file_declaration()
| alias_declaration()
- |
- LOOKAHEAD( attribute_declaration())
- attribute_declaration()
+ |
+ LOOKAHEAD( attribute_declaration())
+ attribute_declaration()
| attribute_specification()
| use_clause()
| LOOKAHEAD(3)
- group_template_declaration()
+ group_template_declaration()
| group_declaration()
-
+
}
void protected_type_body_declarative_part() :{ }
{
- ( protected_type_body_declarative_item ())*
+ ( protected_type_body_declarative_item ())*
}
QCString protected_type_declaration() : { }
- {
- <PROTECTED_T>
- try{
- protected_type_declarative_part()
- }catch(...){error_skipto(END_T);}
+ {
+ <PROTECTED_T>
+ try{
+ protected_type_declarative_part()
+ }catch(...){error_skipto(END_T);}
<END_T><PROTECTED_T> [ identifier() ] { return "";}
}
void protected_type_declarative_item(): { }
{
- subprogram_specification()
- | attribute_specification()
- | use_clause()
+ subprogram_specification()
+ | attribute_specification()
+ | use_clause()
}
void protected_type_declarative_part() : {}
{
- (protected_type_declarative_item ()<SEMI_T>)*
+ (protected_type_declarative_item ()<SEMI_T>)*
}
// -----------------------------------------------------------------
@@ -2501,10 +2514,10 @@ void protected_type_declarative_part() : {}
// -----------------------------------------------------------------
QCString context_ref() : {QCString s;}
-{
- <CONTEXT_T> s=identifier_list() <SEMI_T>
- {
- return "context "+s ;
+{
+ <CONTEXT_T> s=identifier_list() <SEMI_T>
+ {
+ return "context "+s ;
}
}
@@ -2518,7 +2531,7 @@ void context_declaration(): {QCString s,s1;}
}
QCString libustcont_stats(): {QCString s;}
-{
+{
s=use_clause() { return s;}
| s=library_clause() { return s;}
| s=context_ref() { return s;}
@@ -2528,20 +2541,20 @@ QCString libustcont_stats(): {QCString s;}
{
<PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() s2=signature() [gen_assoc_list()] <SEMI_T>
{
- QCString q=" is new "+s1+s2;
+ QCString q=" is new "+s1+s2;
addVhdlType(s.data(),getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public);
}
}
-
+
QCString interface_package_declaration(): {QCString s,s1;}
{
- <PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() [gen_assoc_list()]
+ <PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() [gen_assoc_list()]
{
current->name=s;
- return "package "+s+" is new "+s1;
+ return "package "+s+" is new "+s1;
}
-}
-
+}
+
QCString subprogram_instantiation_declaration():{QCString s,s1,s2;}
{
<FUNCTION_T> s=identifier() <IS_T> <NEW_T> s1=name() s2=signature() [gen_assoc_list()] <SEMI_T>
@@ -2549,10 +2562,10 @@ QCString subprogram_instantiation_declaration():{QCString s,s1,s2;}
QCString q= " is new "+s1+s2;
addVhdlType(s.data(),getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public);
return q;
- }
+ }
}
-
-
+
+
void gen_assoc_list():{}
{
<GENERIC_T> <MAP_T> <LPAREN_T> association_list()<RPAREN_T>
@@ -2570,8 +2583,8 @@ void gen_interface_list() : {}
// QCString vo=$3;
parse_sec=0;
}
- <RPAREN_T>
-}
+ <RPAREN_T>
+}
void case_scheme (): {}
{
@@ -2589,14 +2602,14 @@ void when_stats() : {}
void ttend(): {}
{
<END_T> [identifier()] <SEMI_T>
- }
+ }
+
-
void generate_statement_body() : {}
{
<BEGIN_T> generate_statement_body()
}
-
+
void generate_statement_body1() : {}
{
LOOKAHEAD(block_declarative_item()<BEGIN_T> )
@@ -2610,7 +2623,7 @@ QCString external_name(): {QCString s,s1,s2;}
{
QCString t="<<"+s;
QCString t1=s1+":"+s2+">>";
- return s+s1;
+ return s+s1;
}
}
@@ -2619,7 +2632,7 @@ QCString sig_stat(): {Token *t;}
t=<CONSTANT_T> { return t->image.data(); }
| t=<SIGNAL_T> { return t->image.data(); }
| t=<VARIABLE_T> { return t->image.data(); }
-
+
}
QCString external_pathname(): {QCString s;}
@@ -2632,7 +2645,7 @@ QCString external_pathname(): {QCString s;}
QCString absolute_pathname(): {QCString s,s1;}
{
LOOKAHEAD(<DOT_T> pathname_element_list())
- <DOT_T> s=pathname_element_list() s1=identifier() { return "."+s+s1;}
+ <DOT_T> s=pathname_element_list() s1=identifier() { return "."+s+s1;}
| <DOT_T> s=identifier (){ return "."+s;}
}
@@ -2643,24 +2656,24 @@ QCString relative_pathname():{QCString s,s1,s2;}
QCString neg_list(): {QCString s;}
{
- (<NEG_T> <DOT_T>{s+="^.";})+ {return s; }
+ (<NEG_T> <DOT_T>{s+="^.";})+ {return s; }
}
QCString pathname_element ():{QCString s,s1;}
{
- s=identifier() [<LPAREN_T> s1=expression() <RPAREN_T>]
+ s=identifier() [<LPAREN_T> s1=expression() <RPAREN_T>]
{
if(!s1.isEmpty())
- return s+"("+s1+")";
-
- return s;
+ return s+"("+s1+")";
+
+ return s;
}
}
QCString pathname_element_list():{QCString s,s1,s2;}
{
- ( s=pathname_element() <DOT_T> ) {s+=".";} (LOOKAHEAD(pathname_element() <DOT_T>) s1=pathname_element() <DOT_T> {s2+=s1;s2+="."; })*
- { return s+s2; }
+ ( s=pathname_element() <DOT_T> ) {s+=".";} (LOOKAHEAD(pathname_element() <DOT_T>) s1=pathname_element() <DOT_T> {s2+=s1;s2+="."; })*
+ { return s+s2; }
}
QCString package_path_name():{QCString s;}
@@ -2669,10 +2682,10 @@ QCString package_path_name():{QCString s;}
}
void conditional_signal_assignment_wave(): {}
-{
+{
LOOKAHEAD(conditional_force_assignment())
- conditional_force_assignment()
- |conditional_waveform_assignment()
+ conditional_force_assignment()
+ |conditional_waveform_assignment()
}
void conditional_waveform_assignment():{}
@@ -2680,7 +2693,7 @@ void conditional_waveform_assignment():{}
target() <LESSTHAN_T> [LOOKAHEAD(1) delay_mechanism() ] waveform_element() <WHEN_T> expression() [else_wave_list()] <SEMI_T>
}
-void else_wave_list(): {}
+void else_wave_list(): {}
{
<ELSE_T> expression() [ <WHEN_T> expression()]
}
@@ -2690,15 +2703,15 @@ void conditional_force_assignment(): {}
target() <LESSTHAN_T> <FORCE_T> [inout_stat()] expression() <WHEN_T> [expression() else_stat()] <SEMI_T>
}
-void selected_signal_assignment_wave() : {}
+void selected_signal_assignment_wave() : {}
{
LOOKAHEAD(selected_force_assignment() )
- selected_force_assignment()
+ selected_force_assignment()
| selected_waveform_assignment()
}
void selected_variable_assignment():{}
-{
+{
<WITH_T> expression() <SELECT_T> [<Q_T>] select_name() <VARASSIGN_T> sel_var_list() // { $$=""; }
}
@@ -2707,7 +2720,7 @@ void select_name(): {}
LOOKAHEAD(aggregate())
aggregate()
| name()
-
+
}
void selected_waveform_assignment():{}
@@ -2717,7 +2730,7 @@ void selected_waveform_assignment():{}
}
void selected_force_assignment():{}
-{
+{
<WITH_T> expression() <SELECT_T> [<Q_T>] target() <LESSTHAN_T> <FORCE_T>
[inout_stat()] sel_var_list()
}
@@ -2730,23 +2743,23 @@ void sel_var_list(): {}
void sel_wave_list() : {}
-{
+{
waveform_element() <WHEN_T> choices() (LOOKAHEAD(1) <COMMA_T> sel_wave_list())* <SEMI_T>
// | sel_wave_list_1()
}
void inout_stat(): {}
-{
- <IN_T>
- | <OUT_T>
+{
+ <IN_T>
+ | <OUT_T>
}
void else_stat(): {}
-{
+{
(<ELSE_T> expression() [LOOKAHEAD(1) <WHEN_T> expression()])+
}
-
+
QCString interface_subprogram_declaration(): {QCString s;}
{
@@ -2754,32 +2767,32 @@ QCString interface_subprogram_declaration(): {QCString s;}
| s=ifunc() { return s; }
}
-QCString iproc(): {QCString s,s1;}
+QCString iproc(): {QCString s,s1;}
{
- <PROCEDURE_T> s=identifier() s1=param()
- {
- current->name=s;
- return "procedure "+s+s1;
+ <PROCEDURE_T> s=identifier() s1=param()
+ {
+ current->name=s;
+ return "procedure "+s+s1;
}
}
QCString ifunc():{QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;}
{
-
+
[t=<PURE_T> | t=<IMPURE_T> ] <FUNCTION_T> s=name() s1=param() <RETURN_T> s2=name() [t1=<IS_T> (s3=identifier() | t2=<BOX_T>)]
- {
- QCString q;
- if(t) q=t->image.data();
+ {
+ QCString q;
+ if(t) q=t->image.data();
if(t2) s3="<>";
- if (!s3.isEmpty())
+ if (!s3.isEmpty())
{
s3.prepend(" is ");
}
current->name=s;
- if (parse_sec==GEN_SEC)
+ if (parse_sec==GEN_SEC)
{
- QCString ss=q+" function "+s1+" return "+s2+s3;
- int a=getLine(FUNCTION_T);
+ QCString ss=q+" function "+s1+" return "+s2+s3;
+ int a=getLine(FUNCTION_T);
int b=getLine(PROCEDURE_T);
if (a>b) b=a;
@@ -2787,25 +2800,25 @@ QCString ifunc():{QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;}
}
currP=0;return "";
}
-
+
}
-
-
-QCString param(): {QCString s,s1;Token *tok=0;}
-{
+
+
+QCString param(): {QCString s,s1;Token *tok=0;}
+{
[ tok=<PARAMETER_T> ] { param_sec=PARAM_SEC; }
[ <LPAREN_T> s1=interface_list() <RPAREN_T>]
- {
- if(tok)
- {
- s = tok->image.data();
- param_sec=0;
- }
- return s+"("+s1+")";
- }
-
+ {
+ if(tok)
+ {
+ s = tok->image.data();
+ param_sec=0;
+ }
+ return s+"("+s1+")";
+ }
+
}
-
+
// -----------------------------------------------------------------
// needed for inline (function/process/procedure) parsing
diff --git a/vhdlparser/vhdlparser.patch b/vhdlparser/vhdlparser.patch
deleted file mode 100644
index 37cca10..0000000
--- a/vhdlparser/vhdlparser.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- VhdlParser.h 2014-07-27 14:26:18.000000000 +0200
-+++ VhdlParser.h.new 2014-07-27 14:23:22.000000000 +0200
-@@ -6,6 +6,7 @@
- #include "TokenManager.h"
- #include "VhdlParserTokenManager.h"
- #include "VhdlParser.h"
-+#include "vhdljjparser.h"
-
- #include "VhdlParserConstants.h"
- #include "ErrorHandler.h"
diff --git a/vhdlparser/vhdlstring.h b/vhdlparser/vhdlstring.h
index 1980cf5..f15ef6c 100644
--- a/vhdlparser/vhdlstring.h
+++ b/vhdlparser/vhdlstring.h
@@ -90,7 +90,8 @@ class VhdlString
char & operator[](int i) { return m_str[i]; }
const char &operator[](int i) const { return m_str[i]; }
void clear() { free(m_str); init(); }
- VhdlString operator+=(char c) { char s[2]; s[0]=c; s[1]=0; return append(s); }
+ VhdlString &operator+=(char c) { char s[2]; s[0]=c; s[1]=0; return append(s); }
+ VhdlString &operator+=(const char *s) { return append(s); }
private:
void init() { m_str=(char*)calloc(1,1); m_len=0; }
diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj
index 882e514..03764f2 100644
--- a/winbuild/Doxygen.vcproj
+++ b/winbuild/Doxygen.vcproj
@@ -35,6 +35,9 @@
RelativePath=".\Gen_head.rules"
/>
<ToolFile
+ RelativePath=".\GenResources.rules"
+ />
+ <ToolFile
RelativePath=".\Languages.rules"
/>
</ToolFiles>
@@ -75,6 +78,9 @@
Name="Gen_head"
/>
<Tool
+ Name="GenResources"
+ />
+ <Tool
Name="Languages"
/>
<Tool
@@ -196,6 +202,9 @@
Name="Gen_head"
/>
<Tool
+ Name="GenResources"
+ />
+ <Tool
Name="Languages"
/>
<Tool
@@ -317,6 +326,9 @@
Name="Gen_head"
/>
<Tool
+ Name="GenResources"
+ />
+ <Tool
Name="Languages"
/>
<Tool
@@ -439,6 +451,9 @@
Name="Gen_head"
/>
<Tool
+ Name="GenResources"
+ />
+ <Tool
Name="Languages"
/>
<Tool
@@ -879,6 +894,10 @@
>
</File>
<File
+ RelativePath="..\src\resourcemgr.cpp"
+ >
+ </File>
+ <File
RelativePath="..\src\rtfdocvisitor.cpp"
>
</File>
@@ -1391,521 +1410,2861 @@
</File>
</Filter>
<Filter
+ Name="Generating Resource Files"
+ >
+ <File
+ RelativePath="..\templates\html\arrowdown.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\arrowright.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\bc_s.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\bdwn.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\bib2xhtml.pl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\close.png"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\closed.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\doc.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\doxygen.bst"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\doxygen.css"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\doxygen.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\dynsections.js"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\extsearch.js"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\folderclosed.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\folderopen.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\footer.html"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\header.html"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlallmembers.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlannotated.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlbase.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlclass.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlclasses.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlclmembers.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlclmembersindex.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmldeclcomp.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmldir.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmldirtree.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmldyncontents.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmldynheader.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlfile.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlfiles.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlflmembers.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlinclude.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlindexpages.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmljsnavindex.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmljsnavtree.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmllayout.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmemberindex.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmembersindex.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmembertabs.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmemdecl.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmemdecls.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmemdef.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmeminherit.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmemlist.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmemsummary.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmodule.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlmodules.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlnamespace.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlnamespaces.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlnavpath.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlnavtree.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlnsmembers.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlnsmembersindex.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlobjlink.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlpage.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlpages.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmlsource.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmltabs.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\htmltypeconstraints.tpl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\jquery.js"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\mag.png"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\mag_sel.png"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\nav_f.lum"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\nav_g.png"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\nav_h.lum"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\navtree.css"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\navtree.js"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\open.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\resize.js"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\search.css"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\search.js"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\search_functions.php"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\search_l.png"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\search_m.png"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\search_opensearch.php"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\search_r.png"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\splitbar.lum"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\svgpan.js"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\sync_off.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\sync_on.luma"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\tab_a.lum"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\tab_b.lum"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\tab_h.lum"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\tab_s.lum"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\html\tabs.css"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\latex\doxygen.sty"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\xml\compound.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\templates\xml\index.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="GenResources"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
Name="Generating header Files"
>
<File
- RelativePath="..\src\bib2xhtml.pl"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\compound.xsd"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\doxygen.bst"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\doxygen.css"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\doxygen.sty"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\dynsections.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\extsearch.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\footer.html"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\header.html"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\index.xsd"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\jquery_fx.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\jquery_p1.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\jquery_p2.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\jquery_p3.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\jquery_pt.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\jquery_ui.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath="..\src\layout_default.xml"
>
<FileConfiguration
@@ -1937,262 +4296,6 @@
/>
</FileConfiguration>
</File>
- <File
- RelativePath="..\src\navtree.css"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\navtree.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\resize.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\search.css"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\search.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\search_functions.php"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\search_opensearch.php"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\svgpan.js"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="Gen_head"
- />
- </FileConfiguration>
- </File>
</Filter>
<Filter
Name="Header Files"
@@ -2203,10 +4306,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\bib2xhtml.pl.h"
- >
- </File>
- <File
RelativePath="..\src\bufstr.h"
>
</File>
@@ -2251,10 +4350,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\compound_xsd.h"
- >
- </File>
- <File
RelativePath="..\src\condparser.h"
>
</File>
@@ -2347,22 +4442,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\doxygen_bst.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\doxygen_css.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\doxygen_sty.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\dynsections_js.h"
- >
- </File>
- <File
RelativePath="..\src\eclipsehelp.h"
>
</File>
@@ -2379,10 +4458,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\extsearch_js.h"
- >
- </File>
- <File
RelativePath="..\src\filedef.h"
>
</File>
@@ -2395,10 +4470,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\footer_html.h"
- >
- </File>
- <File
RelativePath="..\src\formula.h"
>
</File>
@@ -2423,10 +4494,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\header_html.h"
- >
- </File>
- <File
RelativePath="..\src\htags.h"
>
</File>
@@ -2463,10 +4530,6 @@
>
</File>
<File
- RelativePath="$(INtDir)\index_xsd.h"
- >
- </File>
- <File
RelativePath="..\src\instdox.h"
>
</File>
@@ -2475,30 +4538,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\jquery_fx_js.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\jquery_p1_js.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\jquery_p2_js.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\jquery_p3_js.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\jquery_pt_js.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\jquery_ui_js.h"
- >
- </File>
- <File
RelativePath="$(IntDir)\lang_cfg.h"
>
</File>
@@ -2587,10 +4626,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\navtree_js.h"
- >
- </File>
- <File
RelativePath="..\src\objcache.h"
>
</File>
@@ -2659,7 +4694,11 @@
>
</File>
<File
- RelativePath="$(IntDir)\resize_js.h"
+ RelativePath="$(IntDir)\resources.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\resourcemgr.h"
>
</File>
<File
@@ -2679,22 +4718,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\search_css.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\search_js.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\search_functionsjs.h"
- >
- </File>
- <File
- RelativePath="$(IntDir)\search_opensearch_js.h"
- >
- </File>
- <File
RelativePath="..\src\searchindex.h"
>
</File>
@@ -2711,10 +4734,6 @@
>
</File>
<File
- RelativePath="$(IntDir)\svgpan_js.h"
- >
- </File>
- <File
RelativePath="..\src\store.h"
>
</File>
diff --git a/winbuild/GenResources.rules b/winbuild/GenResources.rules
new file mode 100644
index 0000000..a496ea5
--- /dev/null
+++ b/winbuild/GenResources.rules
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+ Name="GenResources"
+ Version="8.00"
+ >
+ <Rules>
+ <CustomBuildRule
+ Name="GenResources"
+ DisplayName="GenResources"
+ CommandLine="python &quot;$(ProjectDir)..\src\res2cc_cmd.py&quot; &quot;$(ProjectDir)..\templates&quot; $(IntDir)\resources.cpp"
+ Outputs="$(IntDir)\resources.cpp"
+ FileExtensions=".*"
+ AdditionalDependencies="$(ProjectDir)..\src\res2cc_cmd.py"
+ ExecutionDescription="Executing res2cc_cmd on $(ProjectDir)..\templates ..."
+ ShowOnlyRuleProperties="false"
+ >
+ </CustomBuildRule>
+ </Rules>
+</VisualStudioToolFile>
diff --git a/winbuild/qtools.vcproj b/winbuild/qtools.vcproj
index adc1ba9..6e94d3f 100644
--- a/winbuild/qtools.vcproj
+++ b/winbuild/qtools.vcproj
@@ -1328,7 +1328,7 @@
</FileConfiguration>
</File>
<File
- RelativePath="..\qtools\scstring.cpp"
+ RelativePath="..\qtools\qcstring.cpp"
>
<FileConfiguration
Name="Release|Win32"
@@ -1576,10 +1576,6 @@
RelativePath="..\qtools\qxml.h"
>
</File>
- <File
- RelativePath="..\qtools\scstring.h"
- >
- </File>
</Filter>
</Files>
<Globals>