diff options
325 files changed, 15361 insertions, 8393 deletions
@@ -70,3 +70,6 @@ /man /docbook /perlmod +!/templates/html +!/templates/latex + diff --git a/Makefile.in b/Makefile.in index a83f08b..af7a76f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -35,6 +35,7 @@ distclean: clean -cd src ; $(MAKE) distclean -cd libmd5 ; $(MAKE) distclean -cd vhdlparser ; $(MAKE) distclean + -cd qtools ; $(MAKE) distclean -cd addon/doxywizard ; $(MAKE) distclean -cd addon/doxysearch ; $(MAKE) distclean -cd addon/doxyapp ; $(MAKE) distclean @@ -101,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) @@ -111,7 +112,7 @@ DISTDIR = doxygen-`echo $(VERSION) | tr - _` dist: clean rm -rf $(DISTDIR) mkdir $(DISTDIR) - cp -a $(DISTFILES) README $(DISTDIR) + cp -a $(DISTFILES) $(DISTDIR) find $(DISTDIR) \( -name ".svn" \) -print0 | xargs -0 rm -rf tar zcvf $(DISTDIR).src.tar.gz $(DISTDIR) rm -rf $(DISTDIR) @@ -31,10 +31,14 @@ Developers --------- * Build Status: <a href="https://travis-ci.org/doxygen/doxygen"><img src="https://secure.travis-ci.org/doxygen/doxygen.png?branch=master"/></a> +* Coverity Scan Build Status: <a href="https://scan.coverity.com/projects/2860"> <img alt="Coverity Scan Build Status" src="https://scan.coverity.com/projects/2860/badge.svg"/> </a> + * Install * 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 11af8e3..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, @@ -401,7 +401,7 @@ int main(int argc,char **argv) Xapian::Document doc = i.get_document(); highlighter(doc.get_value(FIELD_DOC),words,hl); std::cout << " {\"type\": \"" << doc.get_value(FIELD_TYPE) << "\"," << std::endl - << " \"name\": \"" << doc.get_value(FIELD_NAME) << doc.get_value(FIELD_ARGS) << "\"," << std::endl + << " \"name\": \"" << doc.get_value(FIELD_NAME) << escapeString(doc.get_value(FIELD_ARGS)) << "\"," << std::endl << " \"tag\": \"" << doc.get_value(FIELD_TAG) << "\"," << std::endl << " \"url\": \"" << doc.get_value(FIELD_URL) << "\"," << std::endl; std::cout << " \"fragments\":[" << std::endl; 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\\$")); @@ -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# <code> tag in an <example> 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'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' 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'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 'else if' 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> - &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 "doxygen.css" 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 "\~" failed to detect language id which contains '-' [<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 & 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<T extends V> resulted in class<V> 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 'README' 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 "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/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 <unknown> 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 73eb842..12fe9a6 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -2147,7 +2147,8 @@ Commands for displaying examples \addindex \\snippet Where the \ref cmdinclude "\\include" command can be used to include a complete file as source code, this command can be used to quote only - a fragment of a source file. + a fragment of a source file. In case `this` is used as <file-name> the + current file is taken as file to take the snippet from. For example, the putting the following command in the documentation, references a snippet in file \c example.cpp residing in a subdirectory @@ -2450,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: @@ -2484,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. @@ -2533,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 @@ -2543,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. @@ -2574,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. @@ -2603,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. @@ -2622,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. @@ -2642,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> @@ -2841,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 @@ -2858,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/Makefile.in b/qtools/Makefile.in index ca66cc1..411ee5d 100644 --- a/qtools/Makefile.in +++ b/qtools/Makefile.in @@ -26,5 +26,6 @@ clean: Makefile.qtools $(MAKE) -f Makefile.qtools clean distclean: clean + $(RM) Makefile.qtools FORCE: 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/qgstring.cpp b/qtools/qgstring.cpp index 85dd879..8b15675 100644 --- a/qtools/qgstring.cpp +++ b/qtools/qgstring.cpp @@ -209,7 +209,7 @@ QGString &QGString::operator+=( const QGString &s ) assert(memSize>=len1+len2+1); char *newData = memSize!=m_memSize ? (char*)realloc( m_data, memSize ) : m_data; m_memSize = memSize; - if (m_data) + if (newData) { m_data = newData; memcpy( m_data + len1, s, len2 + 1 ); diff --git a/qtools/qstring.cpp b/qtools/qstring.cpp index fa8f1d3..3673c20 100644 --- a/qtools/qstring.cpp +++ b/qtools/qstring.cpp @@ -11499,9 +11499,9 @@ static inline bool format(QChar::Decomposition tag, QString & str, unsigned int l = index + len; unsigned int r = index; - bool left = FALSE, right = FALSE; + bool right = FALSE; - left = ((l < str.length()) && + bool left = ((l < str.length()) && ((str[(int)l].joining() == QChar::Dual) || (str[(int)l].joining() == QChar::Right))); if (r > 0) { diff --git a/qtools/qthread.cpp b/qtools/qthread.cpp index db2a0de..02c99f2 100644 --- a/qtools/qthread.cpp +++ b/qtools/qthread.cpp @@ -52,6 +52,7 @@ QThread::~QThread() QMutexLocker locker(&d->mutex); if (d->running && !d->finished) qWarning("QThread: Destroyed while thread is still running"); + delete d; } bool QThread::isFinished() const 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 a33f12f..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_"); @@ -62,9 +53,14 @@ void CiteDict::writeLatexBibliography(FTextStream &t) unit = "chapter"; t << "% Bibliography\n" "\\newpage\n" - "\\phantomsection\n" - "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n" - "\\bibliographystyle{" << style << "}\n" + "\\phantomsection\n"; + bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + if (!pdfHyperlinks) + { + t << "\\clearemptydoublepage\n"; + t << "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n"; + } + t << "\\bibliographystyle{" << style << "}\n" "\\bibliography{"; QStrList &citeDataList = Config_getList("CITE_BIB_FILES"); QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/"; @@ -87,8 +83,12 @@ void CiteDict::writeLatexBibliography(FTextStream &t) } bibdata = citeDataList.next(); } - t << "}\n" - "\n"; + t << "}\n"; + if (pdfHyperlinks) + { + t << "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n"; + } + t << "\n"; } void CiteDict::insert(const char *label) @@ -144,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 @@ -202,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); @@ -294,7 +287,6 @@ void CiteDict::generatePage() const thisDir.remove(citeListFile); thisDir.remove(doxygenBstFile); thisDir.remove(bib2xhtmlFile); - bibdata = citeDataList.first(); // we might try to remove too many files as empty files didn't get a coresponding new file // but the remove function does not emit an error for it and we don't catch the error return // so no problem. diff --git a/src/classdef.cpp b/src/classdef.cpp index c36a83f..5c42f57 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -854,13 +854,14 @@ void ClassDef::setIncludeFile(FileDef *fd, static void searchTemplateSpecs(/*in*/ Definition *d, /*out*/ QList<ArgumentList> &result, - /*out*/ QCString &name) + /*out*/ QCString &name, + /*in*/ SrcLangExt lang) { if (d->definitionType()==Definition::TypeClass) { if (d->getOuterScope()) { - searchTemplateSpecs(d->getOuterScope(),result,name); + searchTemplateSpecs(d->getOuterScope(),result,name,lang); } ClassDef *cd=(ClassDef *)d; if (!name.isEmpty()) name+="::"; @@ -876,7 +877,7 @@ static void searchTemplateSpecs(/*in*/ Definition *d, result.append(cd->templateArguments()); if (!isSpecialization) { - name+=tempArgListToString(cd->templateArguments()); + name+=tempArgListToString(cd->templateArguments(),lang); } } } @@ -887,11 +888,11 @@ static void searchTemplateSpecs(/*in*/ Definition *d, } static void writeTemplateSpec(OutputList &ol,Definition *d, - const QCString &type) + const QCString &type,SrcLangExt lang) { QList<ArgumentList> specs; QCString name; - searchTemplateSpecs(d,specs,name); + searchTemplateSpecs(d,specs,name,lang); if (specs.count()>0) // class has template scope specifiers { ol.startSubsubsection(); @@ -962,7 +963,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol) if (getLanguage()==SrcLangExt_Cpp) { - writeTemplateSpec(ol,this,compoundTypeString()); + writeTemplateSpec(ol,this,compoundTypeString(),getLanguage()); } // repeat brief description @@ -1179,7 +1180,7 @@ int ClassDef::countInheritanceNodes() void ClassDef::writeInheritanceGraph(OutputList &ol) { // count direct inheritance relations - int count=countInheritanceNodes(); + const int count=countInheritanceNodes(); bool renderDiagram = FALSE; if (Config_getBool("HAVE_DOT") && @@ -1216,7 +1217,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol) ol.disableAllBut(OutputGenerator::Man); } - if (m_impl->inherits && (count=m_impl->inherits->count())>0) + if (m_impl->inherits && m_impl->inherits->count()>0) { ol.startParagraph(); //parseText(ol,theTranslator->trInherits()+" "); @@ -1242,24 +1243,6 @@ void ClassDef::writeInheritanceGraph(OutputList &ol) if (cd->isLinkable()) { - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <base"; - if (bcd->prot==Protected) - { - Doxygen::tagFile << " protection=\"protected\""; - } - else if (bcd->prot==Private) - { - Doxygen::tagFile << " protection=\"private\""; - } - if (bcd->virt==Virtual) - { - Doxygen::tagFile << " virtualness=\"virtual\""; - } - Doxygen::tagFile << ">" << convertToXML(cd->name()) - << "</base>" << endl; - } ol.writeObjectLink(cd->getReference(), cd->getOutputFileBase(), cd->anchor(), @@ -1281,7 +1264,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol) } // write subclasses - if (m_impl->inheritedBy && (count=m_impl->inheritedBy->count())>0) + if (m_impl->inheritedBy && m_impl->inheritedBy->count()>0) { ol.startParagraph(); QCString inheritLine = theTranslator->trInheritedByList(m_impl->inheritedBy->count()); @@ -1573,36 +1556,118 @@ void ClassDef::writeSummaryLinks(OutputList &ol) ol.popGeneratorState(); } -void ClassDef::writeTagFileMarker() +void ClassDef::writeTagFile(FTextStream &tagFile) { - // write section to the tag file - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + if (!isLinkableInProject()) return; + tagFile << " <compound kind=\"" << compoundTypeString(); + tagFile << "\""; + if (isObjectiveC()) { tagFile << " objc=\"yes\""; } + tagFile << ">" << endl; + tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; + tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; + if (!anchor().isEmpty()) { - Doxygen::tagFile << " <compound kind=\"" << compoundTypeString(); - Doxygen::tagFile << "\""; - if (isObjectiveC()) { Doxygen::tagFile << " objc=\"yes\""; } - Doxygen::tagFile << ">" << endl; - Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; - Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; - if (!anchor().isEmpty()) - { - Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl; - } - QCString idStr = id(); - if (!idStr.isEmpty()) + tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl; + } + QCString idStr = id(); + if (!idStr.isEmpty()) + { + tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl; + } + if (m_impl->tempArgs) + { + ArgumentListIterator ali(*m_impl->tempArgs); + Argument *a; + for (;(a=ali.current());++ali) { - Doxygen::tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl; + tagFile << " <templarg>" << convertToXML(a->name) << "</templarg>" << endl; } - if (m_impl->tempArgs) + } + if (m_impl->inherits) + { + BaseClassListIterator it(*m_impl->inherits); + BaseClassDef *ibcd; + for (it.toFirst();(ibcd=it.current());++it) { - ArgumentListIterator ali(*m_impl->tempArgs); - Argument *a; - for (;(a=ali.current());++ali) + ClassDef *cd=ibcd->classDef; + if (cd && cd->isLinkable()) { - Doxygen::tagFile << " <templarg>" << convertToXML(a->name) << "</templarg>" << endl; + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + { + tagFile << " <base"; + if (ibcd->prot==Protected) + { + tagFile << " protection=\"protected\""; + } + else if (ibcd->prot==Private) + { + tagFile << " protection=\"private\""; + } + if (ibcd->virt==Virtual) + { + tagFile << " virtualness=\"virtual\""; + } + tagFile << ">" << convertToXML(cd->name()) << "</base>" << endl; + } } } } + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Class)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::ClassNestedClasses: + { + if (m_impl->innerClasses) + { + ClassSDict::Iterator cli(*m_impl->innerClasses); + ClassDef *innerCd; + for (cli.toFirst();(innerCd=cli.current());++cli) + { + if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0 && + protectionLevelVisible(innerCd->protection()) && + !innerCd->isEmbeddedInOuterScope() + ) + { + tagFile << " <class kind=\"" << innerCd->compoundTypeString() << + "\">" << convertToXML(innerCd->name()) << "</class>" << endl; + } + } + } + } + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml) + { + ml->writeTagFile(tagFile); + } + } + break; + case LayoutDocEntry::MemberGroups: + { + if (m_impl->memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } + } + break; + default: + break; + } + } + writeDocAnchorsToTagFile(tagFile); + tagFile << " </compound>" << endl; } /** Write class documentation inside another container (i.e. a group) */ @@ -1721,9 +1786,6 @@ void ClassDef::writeInlineDocumentation(OutputList &ol) ol.endIndent(); } ol.popGeneratorState(); - - // part 4: write tag file information - writeTagFileMarker(); } void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor) @@ -1809,12 +1871,6 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade ol.startMemberList(); found=TRUE; } - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && - !isReference()) // skip classes found in tag files - { - Doxygen::tagFile << " <class kind=\"" << compoundTypeString() - << "\">" << convertToXML(name()) << "</class>" << endl; - } ol.startMemberDeclaration(); ol.startMemberItem(anchor(),FALSE); QCString ctype = compoundTypeString(); @@ -1902,8 +1958,6 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page pageType += compoundTypeString(); toupper(pageType.at(1)); - writeTagFileMarker(); - Doxygen::indexList->addIndexItem(this,0); if (Doxygen::searchIndex) @@ -2016,11 +2070,6 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page } } - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </compound>" << endl; - } ol.endContents(); } @@ -2053,9 +2102,16 @@ QCString ClassDef::title() const } else { - pageTitle = theTranslator->trCompoundReference(displayName(), - m_impl->compType == Interface && getLanguage()==SrcLangExt_ObjC ? Class : m_impl->compType, - m_impl->tempArgs != 0); + if (Config_getBool("HIDE_COMPOUND_REFERENCE")) + { + pageTitle = displayName(); + } + else + { + pageTitle = theTranslator->trCompoundReference(displayName(), + m_impl->compType == Interface && getLanguage()==SrcLangExt_ObjC ? Class : m_impl->compType, + m_impl->tempArgs != 0); + } } return pageTitle; } @@ -2617,7 +2673,7 @@ bool ClassDef::isLinkable() const } else { - return isLinkableInProject() || isReference(); + return isReference() || isLinkableInProject(); } } @@ -3767,7 +3823,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters( //{ // clName = clName.left(clName.length()-2); //} - //printf("m_impl->lang=%d clName=%s\n",m_impl->lang,clName.data()); + //printf("m_impl->lang=%d clName=%s isSpecialization=%d\n",getLanguage(),clName.data(),isSpecialization); scName+=clName; ArgumentList *al=0; if (templateArguments()) @@ -3777,7 +3833,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters( al = actualParams->at(*actualParamIndex); if (!isSpecialization) { - scName+=tempArgListToString(al); + scName+=tempArgListToString(al,lang); } (*actualParamIndex)++; } @@ -3785,7 +3841,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters( { if (!isSpecialization) { - scName+=tempArgListToString(templateArguments()); + scName+=tempArgListToString(templateArguments(),lang); } } } @@ -3823,7 +3879,8 @@ void ClassDef::addListReferences() : theTranslator->trClass(TRUE,TRUE), getOutputFileBase(), displayName(), - 0 + 0, + this ); } if (m_impl->memberGroupSDict) @@ -4178,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); @@ -4191,14 +4254,14 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC if (ml) { //printf(" writeDeclaration type=%d count=%d\n",lt,ml->numDecMembers()); - ml->writeDeclarations(ol,this,0,0,0,tt,st,definitionType(),FALSE,showInline,inheritedFrom,lt); + ml->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt); tt.resize(0); st.resize(0); } if (ml2) { //printf(" writeDeclaration type=%d count=%d\n",lt2,ml2->numDecMembers()); - ml2->writeDeclarations(ol,this,0,0,0,tt,st,definitionType(),FALSE,showInline,inheritedFrom,lt); + ml2->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt); } static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB"); if (!inlineInheritedMembers) // show inherited members as separate lists @@ -4253,7 +4316,7 @@ void ClassDef::writePlainMemberDeclaration(OutputList &ol, if (ml) { ml->setInGroup(inGroup); - ml->writePlainDeclarations(ol,this,0,0,0,definitionType(),inheritedFrom,inheritId); + ml->writePlainDeclarations(ol,this,0,0,0,inheritedFrom,inheritId); } } diff --git a/src/classdef.h b/src/classdef.h index 9f0ae5f..0729d20 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -46,6 +46,7 @@ class StringDict; struct IncludeInfo; class ClassDefImpl; class ArgumentList; +class FTextStream; /** A class representing of a compound symbol. * @@ -391,6 +392,7 @@ class ClassDef : public Definition ClassDef *inheritedFrom,const QCString &inheritId); int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional); int countInheritanceNodes(); + void writeTagFile(FTextStream &); bool visited; @@ -400,7 +402,6 @@ class ClassDef : public Definition void showUsedFiles(OutputList &ol); private: - void writeTagFileMarker(); void writeDocumentationContents(OutputList &ol,const QCString &pageTitle); void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList); void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief); 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 168907f..702a616 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -917,7 +917,7 @@ ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]* CITESCHAR [a-z_A-Z\x80-\xFF] CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]* -CITEID {CITESCHAR}*{CITEECHAR}+("."{CITESCHAR}*{CITEECHAR}+)* +CITEID {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)* SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?) SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID}) TMPLSPEC "<"{BN}*[^>]+{BN}*">" @@ -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 f83ee55..994190d 100644 --- a/src/config.xml +++ b/src/config.xml @@ -250,7 +250,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='string' id='PROJECT_LOGO' format='image' defval=''> <docs> <![CDATA[ - With the \c PROJECT_LOGO tag one can specify an logo or icon that is + With the \c PROJECT_LOGO tag one can specify a logo or an icon that is included in the documentation. The maximum height of the logo should not exceed 55 pixels and the maximum width should not exceed 200 pixels. Doxygen will copy the logo to the output directory. @@ -270,7 +270,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='CREATE_SUBDIRS' defval='0'> <docs> <![CDATA[ - If the \c CREATE_SUBDIRS tag is set to \c YES, then doxygen will create + If the \c CREATE_SUBDIRS tag is set to \c YES then doxygen will create 4096 sub-directories (in 2 levels) under the output directory of each output format and will distribute the generated files over these directories. Enabling this option can be useful when feeding doxygen a huge amount of source @@ -344,7 +344,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='BRIEF_MEMBER_DESC' defval='1'> <docs> <![CDATA[ - If the \c BRIEF_MEMBER_DESC tag is set to \c YES doxygen will + If the \c BRIEF_MEMBER_DESC tag is set to \c YES, doxygen will include brief member descriptions after the members that are listed in the file and class documentation (similar to \c Javadoc). Set to \c NO to disable this. @@ -354,7 +354,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='REPEAT_BRIEF' defval='1'> <docs> <![CDATA[ - If the \c REPEAT_BRIEF tag is set to \c YES doxygen will + If the \c REPEAT_BRIEF tag is set to \c YES, doxygen will prepend the brief description of a member or function before the detailed description <br>Note: @@ -411,7 +411,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='FULL_PATH_NAMES' defval='1'> <docs> <![CDATA[ - If the \c FULL_PATH_NAMES tag is set to \c YES doxygen will prepend the full + If the \c FULL_PATH_NAMES tag is set to \c YES, doxygen will prepend the full path before files name in the file list and in the header files. If set to \c NO the shortest path that makes the file name unique will be used ]]> @@ -501,7 +501,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='SEPARATE_MEMBER_PAGES' defval='0'> <docs> <![CDATA[ - If the \c SEPARATE_MEMBER_PAGES tag is set to \c YES, then doxygen will produce + If the \c SEPARATE_MEMBER_PAGES tag is set to \c YES then doxygen will produce a new page for each member. If set to \c NO, the documentation of a member will be part of the file/class/namespace that contains it. ]]> @@ -597,7 +597,7 @@ Go to the <a href="commands.html">next</a> section or return to the <code>.inc</code> files as Fortran files (default is PHP), and <code>.f</code> files as C (default is Fortran), use: `inc=Fortran f=C`. - <br>Note For files without extension you can use `no_extension` as a placeholder. + <br>Note: For files without extension you can use `no_extension` as a placeholder. <br>Note that for custom extensions you also need to set \ref cfg_file_patterns "FILE_PATTERNS" otherwise the files are not read by doxygen. ]]> @@ -620,7 +620,7 @@ Go to the <a href="commands.html">next</a> section or return to the <![CDATA[ When enabled doxygen tries to link words that correspond to documented classes, or namespaces to their corresponding documentation. Such a link can be - prevented in individual cases by by putting a \c % sign in front of the word or + prevented in individual cases by putting a \c % sign in front of the word or globally by setting \c AUTOLINK_SUPPORT to \c NO. ]]> </docs> @@ -671,7 +671,7 @@ Go to the <a href="commands.html">next</a> section or return to the <docs> <![CDATA[ If member grouping is used in the documentation and the \c DISTRIBUTE_GROUP_DOC - tag is set to \c YES, then doxygen will reuse the documentation of the first + tag is set to \c YES then doxygen will reuse the documentation of the first member in the group (if any) for the other members of the group. By default all members of a group must be documented explicitly. ]]> @@ -747,7 +747,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='EXTRACT_ALL' defval='0'> <docs> <![CDATA[ - If the \c EXTRACT_ALL tag is set to \c YES doxygen will assume all + If the \c EXTRACT_ALL tag is set to \c YES, doxygen will assume all entities in documentation are documented, even if no documentation was available. Private class members and static file members will be hidden unless the \ref cfg_extract_private "EXTRACT_PRIVATE" respectively @@ -762,7 +762,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='EXTRACT_PRIVATE' defval='0'> <docs> <![CDATA[ - If the \c EXTRACT_PRIVATE tag is set to \c YES all private members of a + If the \c EXTRACT_PRIVATE tag is set to \c YES, all private members of a class will be included in the documentation. ]]> </docs> @@ -770,7 +770,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='EXTRACT_PACKAGE' defval='0'> <docs> <![CDATA[ - If the \c EXTRACT_PACKAGE tag is set to \c YES all members with package + If the \c EXTRACT_PACKAGE tag is set to \c YES, all members with package or internal scope will be included in the documentation. ]]> </docs> @@ -778,7 +778,7 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='EXTRACT_STATIC' defval='0'> <docs> <![CDATA[ - If the \c EXTRACT_STATIC tag is set to \c YES all static members of a file + If the \c EXTRACT_STATIC tag is set to \c YES, all static members of a file will be included in the documentation. ]]> </docs> @@ -786,9 +786,9 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='EXTRACT_LOCAL_CLASSES' defval='1'> <docs> <![CDATA[ - If the \c EXTRACT_LOCAL_CLASSES tag is set to \c YES classes (and structs) + If the \c EXTRACT_LOCAL_CLASSES tag is set to \c YES, classes (and structs) defined locally in source files will be included in the documentation. - If set to \c NO only classes defined in header files are included. Does not + If set to \c NO, only classes defined in header files are included. Does not have any effect for Java sources. ]]> </docs> @@ -796,10 +796,10 @@ Go to the <a href="commands.html">next</a> section or return to the <option type='bool' id='EXTRACT_LOCAL_METHODS' defval='0'> <docs> <![CDATA[ - This flag is only useful for Objective-C code. When set to \c YES local + This flag is only useful for Objective-C code. If set to \c YES, local methods, which are defined in the implementation section but not in the interface are included in the documentation. - If set to \c NO only methods in the interface are included. + If set to \c NO, only methods in the interface are included. ]]> </docs> </option> @@ -829,7 +829,7 @@ Go to the <a href="commands.html">next</a> section or return to the <![CDATA[ If the \c HIDE_UNDOC_CLASSES tag is set to \c YES, doxygen will hide all undocumented classes that are normally visible in the class hierarchy. - If set to \c NO these classes will be included in the + If set to \c NO, these classes will be included in the various overviews. This option has no effect if \ref cfg_extract_all "EXTRACT_ALL" is enabled. ]]> @@ -840,7 +840,7 @@ Go to the <a href="commands.html">next</a> section or return to the <![CDATA[ If the \c HIDE_FRIEND_COMPOUNDS tag is set to \c YES, doxygen will hide all friend (class|struct|union) declarations. - If set to \c NO these declarations will be included in the + If set to \c NO, these declarations will be included in the documentation. ]]> </docs> @@ -850,7 +850,7 @@ Go to the <a href="commands.html">next</a> section or return to the <![CDATA[ If the \c HIDE_IN_BODY_DOCS tag is set to \c YES, doxygen will hide any documentation blocks found inside the body of a function. - If set to \c NO these blocks will be appended to the + If set to \c NO, these blocks will be appended to the function's detailed documentation block. ]]> </docs> @@ -870,7 +870,7 @@ Go to the <a href="commands.html">next</a> section or return to the <![CDATA[ If the \c CASE_SENSE_NAMES tag is set to \c NO then doxygen will only generate file names in lower-case letters. If set to - \c YES upper-case letters are also allowed. This is useful if you have + \c YES, upper-case letters are also allowed. This is useful if you have classes or files whose names only differ in case and if your file system supports case sensitive file names. Windows and Mac users are advised to set this option to \c NO. @@ -882,7 +882,16 @@ Go to the <a href="commands.html">next</a> section or return to the <![CDATA[ If the \c HIDE_SCOPE_NAMES tag is set to \c NO then doxygen will show members with their full class and namespace scopes in the - documentation. If set to \c YES the scope will be hidden. + documentation. If set to \c YES, the scope will be hidden. +]]> + </docs> + </option> + <option type='bool' id='HIDE_COMPOUND_REFERENCE' defval='0'> + <docs> +<![CDATA[ + If the \c HIDE_COMPOUND_REFERENCE tag is set to \c NO (default) then + doxygen will append additional text to a page's title, such as Class Reference. + If set to \c YES the compound reference will be hidden. ]]> </docs> </option> @@ -926,7 +935,7 @@ Go to the <a href="commands.html">next</a> section or return to the <![CDATA[ If the \c SORT_MEMBER_DOCS tag is set to \c YES then doxygen will sort the (detailed) documentation of file and class members - alphabetically by member name. If set to \c NO the members will appear in + alphabetically by member name. If set to \c NO, the members will appear in declaration order. ]]> </docs> @@ -936,7 +945,7 @@ Go to the <a href="commands.html">next</a> section or return to the <![CDATA[ If the \c SORT_BRIEF_DOCS tag is set to \c YES then doxygen will sort the brief descriptions of file, namespace and class members alphabetically - by member name. If set to \c NO the members will appear in + by member name. If set to \c NO, the members will appear in declaration order. Note that this will also influence the order of the classes in the class list. ]]> @@ -1055,7 +1064,7 @@ Go to the <a href="commands.html">next</a> section or return to the <docs> <![CDATA[ Set the \c SHOW_USED_FILES tag to \c NO to disable the list of files generated - at the bottom of the documentation of classes and structs. If set to \c YES the + at the bottom of the documentation of classes and structs. If set to \c YES, the list will mention the files that were used to generate the documentation. ]]> </docs> @@ -1174,7 +1183,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" <option type='bool' id='WARN_IF_UNDOCUMENTED' defval='1'> <docs> <![CDATA[ - If the \c WARN_IF_UNDOCUMENTED tag is set to \c YES, then doxygen will generate warnings + If the \c WARN_IF_UNDOCUMENTED tag is set to \c YES then doxygen will generate warnings for undocumented members. If \ref cfg_extract_all "EXTRACT_ALL" is set to \c YES then this flag will automatically be disabled. ]]> @@ -1195,7 +1204,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" <![CDATA[ This \c WARN_NO_PARAMDOC option can be enabled to get warnings for functions that are documented, but have no documentation for their parameters - or return value. If set to \c NO doxygen will only warn about + or return value. If set to \c NO, doxygen will only warn about wrong or incomplete parameter documentation, but not about the absence of documentation. ]]> @@ -1430,7 +1439,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" <docs> <![CDATA[ If the \c FILTER_SOURCE_FILES tag is set to \c YES, the input filter (if set using - \ref cfg_input_filter "INPUT_FILTER" ) will also be used to filter the input + \ref cfg_input_filter "INPUT_FILTER") will also be used to filter the input files that are used for producing the source files to browse (i.e. when \ref cfg_source_browser "SOURCE_BROWSER" is set to \c YES). ]]> @@ -1508,7 +1517,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" <docs> <![CDATA[ If the \c REFERENCES_LINK_SOURCE tag is set to \c YES - and \ref cfg_source_browser "SOURCE_BROWSER" tag is set to \c YES, then the hyperlinks from + and \ref cfg_source_browser "SOURCE_BROWSER" tag is set to \c YES then the hyperlinks from functions in \ref cfg_references_relation "REFERENCES_RELATION" and \ref cfg_referenced_by_relation "REFERENCED_BY_RELATION" lists will link to the source code. Otherwise they will link to the documentation. @@ -1563,7 +1572,7 @@ to disable this feature. <option type='bool' id='CLANG_ASSISTED_PARSING' setting='USE_LIBCLANG' defval='0'> <docs> <![CDATA[ - If the \c CLANG_ASSISTED_PARSING tag is set to \c YES, then doxygen will use the + If the \c CLANG_ASSISTED_PARSING tag is set to \c YES then doxygen will use the <a href="http://clang.llvm.org/">clang parser</a> for more accurate parsing at the cost of reduced performance. This can be particularly helpful with template rich C++ code for which doxygen's built-in parser lacks the @@ -1618,7 +1627,7 @@ to disable this feature. <option type='bool' id='GENERATE_HTML' defval='1'> <docs> <![CDATA[ - If the \c GENERATE_HTML tag is set to \c YES doxygen will + If the \c GENERATE_HTML tag is set to \c YES, doxygen will generate HTML output ]]> </docs> @@ -1785,16 +1794,16 @@ doxygen -w html new_header.html new_footer.html new_stylesheet.css YourConfigFil user-defined cascading style sheets that are included after the standard style sheets created by doxygen. Using this option one can overrule certain style aspects. This is preferred over using \ref cfg_html_stylesheet "HTML_STYLESHEET" - since it does not replace the standard style sheet and is therefor more + 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; @@ -1849,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, @@ -2001,7 +2010,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. <![CDATA[ The \c HHC_LOCATION tag can be used to specify the location (absolute path including file name) of - the HTML help compiler (\c hhc.exe). If non-empty doxygen will try to run + the HTML help compiler (\c hhc.exe). If non-empty, doxygen will try to run the HTML help compiler on the generated \c index.hhp. ]]> </docs> @@ -2164,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 @@ -2199,7 +2208,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. <option type='bool' id='EXT_LINKS_IN_WINDOW' defval='0' depends='GENERATE_HTML'> <docs> <![CDATA[ - When the \c EXT_LINKS_IN_WINDOW option is set to \c YES doxygen will open + If the \c EXT_LINKS_IN_WINDOW option is set to \c YES, doxygen will open links to external symbols imported via tag files in a separate window. ]]> </docs> @@ -2231,7 +2240,7 @@ The \c DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. <![CDATA[ Enable the \c USE_MATHJAX option to render \f$\mbox{\LaTeX}\f$ formulas using MathJax (see http://www.mathjax.org) which uses client side Javascript for the - rendering instead of using prerendered bitmaps. Use this if you do not + rendering instead of using pre-rendered bitmaps. Use this if you do not have \f$\mbox{\LaTeX}\f$ installed or if you want to formulas look prettier in the HTML output. When enabled you may also need to install MathJax separately and configure the path to it using the \ref cfg_mathjax_relpath "MATHJAX_RELPATH" @@ -2423,7 +2432,7 @@ EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... <option type='bool' id='GENERATE_LATEX' defval='1'> <docs> <![CDATA[ - If the \c GENERATE_LATEX tag is set to \c YES doxygen will + If the \c GENERATE_LATEX tag is set to \c YES, doxygen will generate \f$\mbox{\LaTeX}\f$ output. ]]> </docs> @@ -2459,7 +2468,7 @@ EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... <option type='bool' id='COMPACT_LATEX' defval='0' depends='GENERATE_LATEX'> <docs> <![CDATA[ - If the \c COMPACT_LATEX tag is set to \c YES doxygen generates more compact + If the \c COMPACT_LATEX tag is set to \c YES, doxygen generates more compact \f$\mbox{\LaTeX}\f$ documents. This may be useful for small projects and may help to save some trees in general. ]]> @@ -2508,8 +2517,8 @@ EXTRA_PACKAGES=times <code>\$doxygenversion</code>, <code>\$projectname</code>, <code>\$projectnumber</code>, <code>\$projectbrief</code>, <code>\$projectlogo</code>. - Doxygen will replace <code>\$title</code> with the empy string, for the replacement values of the - other commands the user is refered to \ref cfg_html_header "HTML_HEADER". + Doxygen will replace <code>\$title</code> with the empty string, for the replacement values of the + other commands the user is referred to \ref cfg_html_header "HTML_HEADER". ]]> </docs> </option> @@ -2528,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[ @@ -2555,7 +2577,7 @@ EXTRA_PACKAGES=times <![CDATA[ If the \c USE_PDFLATEX tag is set to \c YES, doxygen will use \c pdflatex to generate the PDF file directly from the \f$\mbox{\LaTeX}\f$ - files. Set this option to \c YES to get a higher quality PDF documentation. + files. Set this option to \c YES, to get a higher quality PDF documentation. ]]> </docs> </option> @@ -2604,7 +2626,7 @@ EXTRA_PACKAGES=times <option type='bool' id='GENERATE_RTF' defval='0'> <docs> <![CDATA[ - If the \c GENERATE_RTF tag is set to \c YES doxygen will generate RTF output. + If the \c GENERATE_RTF tag is set to \c YES, doxygen will generate RTF output. The RTF output is optimized for Word 97 and may not look too pretty with other RTF readers/editors. ]]> @@ -2622,7 +2644,7 @@ EXTRA_PACKAGES=times <option type='bool' id='COMPACT_RTF' defval='0' depends='GENERATE_RTF'> <docs> <![CDATA[ - If the \c COMPACT_RTF tag is set to \c YES doxygen generates more compact + If the \c COMPACT_RTF tag is set to \c YES, doxygen generates more compact RTF documents. This may be useful for small projects and may help to save some trees in general. ]]> @@ -2664,12 +2686,22 @@ 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'> <docs> <![CDATA[ - If the \c GENERATE_MAN tag is set to \c YES doxygen will + If the \c GENERATE_MAN tag is set to \c YES, doxygen will generate man pages for classes and files. ]]> </docs> @@ -2719,7 +2751,7 @@ EXTRA_PACKAGES=times <option type='bool' id='GENERATE_XML' defval='0'> <docs> <![CDATA[ - If the \c GENERATE_XML tag is set to \c YES doxygen will + If the \c GENERATE_XML tag is set to \c YES, doxygen will generate an XML file that captures the structure of the code including all documentation. ]]> @@ -2737,7 +2769,7 @@ EXTRA_PACKAGES=times <option type='bool' id='XML_PROGRAMLISTING' defval='1' depends='GENERATE_XML'> <docs> <![CDATA[ - If the \c XML_PROGRAMLISTING tag is set to \c YES doxygen will + If the \c XML_PROGRAMLISTING tag is set to \c YES, doxygen will dump the program listings (including syntax highlighting and cross-referencing information) to the XML output. Note that enabling this will significantly increase the size of the XML output. @@ -2749,7 +2781,7 @@ EXTRA_PACKAGES=times <option type='bool' id='GENERATE_DOCBOOK' defval='0'> <docs> <![CDATA[ -If the \c GENERATE_DOCBOOK tag is set to \c YES doxygen will generate Docbook files +If the \c GENERATE_DOCBOOK tag is set to \c YES, doxygen will generate Docbook files that can be used to generate PDF. ]]> </docs> @@ -2766,7 +2798,7 @@ front of it. <option type='bool' id='DOCBOOK_PROGRAMLISTING' defval='0' depends='GENERATE_DOCBOOK'> <docs> <![CDATA[ - If the \c DOCBOOK_PROGRAMLISTING tag is set to \c YES doxygen will + If the \c DOCBOOK_PROGRAMLISTING tag is set to \c YES, doxygen will include the program listings (including syntax highlighting and cross-referencing information) to the DOCBOOK output. Note that enabling this will significantly increase the size of the DOCBOOK output. @@ -2778,7 +2810,7 @@ front of it. <option type='bool' id='GENERATE_AUTOGEN_DEF' defval='0'> <docs> <![CDATA[ - If the \c GENERATE_AUTOGEN_DEF tag is set to \c YES doxygen will + If the \c GENERATE_AUTOGEN_DEF tag is set to \c YES, doxygen will generate an AutoGen Definitions (see http://autogen.sf.net) file that captures the structure of the code including all documentation. Note that this feature is still experimental @@ -2813,7 +2845,7 @@ put in front of it. <option type='bool' id='GENERATE_PERLMOD' defval='0'> <docs> <![CDATA[ - If the \c GENERATE_PERLMOD tag is set to \c YES doxygen will + If the \c GENERATE_PERLMOD tag is set to \c YES, doxygen will generate a Perl module file that captures the structure of the code including all documentation. <br>Note that this @@ -2825,7 +2857,7 @@ put in front of it. <option type='bool' id='PERLMOD_LATEX' defval='0' depends='GENERATE_PERLMOD'> <docs> <![CDATA[ - If the \c PERLMOD_LATEX tag is set to \c YES doxygen will generate + If the \c PERLMOD_LATEX tag is set to \c YES, doxygen will generate the necessary \c Makefile rules, \c Perl scripts and \f$\mbox{\LaTeX}\f$ code to be able to generate PDF and DVI output from the Perl module output. ]]> @@ -2834,10 +2866,10 @@ put in front of it. <option type='bool' id='PERLMOD_PRETTY' defval='1' depends='GENERATE_PERLMOD'> <docs> <![CDATA[ - If the \c PERLMOD_PRETTY tag is set to \c YES the Perl module output will be + If the \c PERLMOD_PRETTY tag is set to \c YES, the Perl module output will be nicely formatted so it can be parsed by a human reader. This is useful if you want to understand what is going on. On the other hand, if this - tag is set to \c NO the size of the Perl module output will be much smaller + tag is set to \c NO, the size of the Perl module output will be much smaller and Perl will parse it just the same. ]]> </docs> @@ -2857,7 +2889,7 @@ put in front of it. <option type='bool' id='ENABLE_PREPROCESSING' defval='1'> <docs> <![CDATA[ - If the \c ENABLE_PREPROCESSING tag is set to \c YES doxygen will + If the \c ENABLE_PREPROCESSING tag is set to \c YES, doxygen will evaluate all C-preprocessor directives found in the sources and include files. ]]> @@ -2866,8 +2898,8 @@ put in front of it. <option type='bool' id='MACRO_EXPANSION' defval='0' depends='ENABLE_PREPROCESSING'> <docs> <![CDATA[ - If the \c MACRO_EXPANSION tag is set to \c YES doxygen will expand all macro - names in the source code. If set to \c NO only conditional + If the \c MACRO_EXPANSION tag is set to \c YES, doxygen will expand all macro + names in the source code. If set to \c NO, only conditional compilation will be performed. Macro expansion can be done in a controlled way by setting \ref cfg_expand_only_predef "EXPAND_ONLY_PREDEF" to \c YES. ]]> @@ -2885,7 +2917,7 @@ put in front of it. <option type='bool' id='SEARCH_INCLUDES' defval='1' depends='ENABLE_PREPROCESSING'> <docs> <![CDATA[ - If the \c SEARCH_INCLUDES tag is set to \c YES the includes files + If the \c SEARCH_INCLUDES tag is set to \c YES, the include files in the \ref cfg_include_path "INCLUDE_PATH" will be searched if a \c \#include is found. ]]> </docs> @@ -2986,8 +3018,8 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs. <option type='bool' id='ALLEXTERNALS' defval='0'> <docs> <![CDATA[ - If the \c ALLEXTERNALS tag is set to \c YES all external class will be listed - in the class index. If set to \c NO only the inherited external classes + If the \c ALLEXTERNALS tag is set to \c YES, all external class will be listed + in the class index. If set to \c NO, only the inherited external classes will be listed. ]]> </docs> @@ -2995,7 +3027,7 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs. <option type='bool' id='EXTERNAL_GROUPS' defval='1'> <docs> <![CDATA[ - If the \c EXTERNAL_GROUPS tag is set to \c YES all external groups will be listed + If the \c EXTERNAL_GROUPS tag is set to \c YES, all external groups will be listed in the modules index. If set to \c NO, only the current project's groups will be listed. ]]> @@ -3004,7 +3036,7 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs. <option type='bool' id='EXTERNAL_PAGES' defval='1'> <docs> <![CDATA[ - If the \c EXTERNAL_PAGES tag is set to \c YES all external pages will be listed + If the \c EXTERNAL_PAGES tag is set to \c YES, all external pages will be listed in the related pages index. If set to \c NO, only the current project's pages will be listed. ]]> @@ -3023,7 +3055,7 @@ where `loc1` and `loc2` can be relative or absolute paths or URLs. <option type='bool' id='CLASS_DIAGRAMS' defval='1'> <docs> <![CDATA[ - If the \c CLASS_DIAGRAMS tag is set to \c YES doxygen will + If the \c CLASS_DIAGRAMS tag is set to \c YES, doxygen will generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or super classes. Setting the tag to \c NO turns the diagrams off. Note that this option also works with \ref cfg_have_dot "HAVE_DOT" disabled, but it is recommended to @@ -3055,7 +3087,7 @@ to be found in the default search path. <option type='bool' id='HIDE_UNDOC_RELATIONS' defval='1'> <docs> <![CDATA[ - If set to \c YES, the inheritance and collaboration graphs will hide + If set to \c YES the inheritance and collaboration graphs will hide inheritance and usage relations if the target is undocumented or is not a class. ]]> @@ -3143,7 +3175,7 @@ to be found in the default search path. <option type='bool' id='UML_LOOK' defval='0' depends='HAVE_DOT'> <docs> <![CDATA[ - If the \c UML_LOOK tag is set to \c YES doxygen will generate inheritance and + If the \c UML_LOOK tag is set to \c YES, doxygen will generate inheritance and collaboration diagrams in a style similar to the OMG's Unified Modeling Language. ]]> @@ -3291,11 +3323,11 @@ to be found in the default search path. <![CDATA[ The \c DIAFILE_DIRS tag can be used to specify one or more directories that contain dia files that are included in the documentation (see the - \ref cmdmscfile "\\diafile" command). + \ref cmddiafile "\\diafile" command). ]]> </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 @@ -3305,6 +3337,14 @@ to be found in the default search path. ]]> </docs> </option> + <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 + statement in a plantuml block. +]]> + </docs> + </option> <option type='int' id='DOT_GRAPH_MAX_NODES' minval='0' maxval='10000' defval='50' depends='HAVE_DOT'> <docs> <![CDATA[ @@ -3347,7 +3387,7 @@ to be found in the default search path. <option type='bool' id='DOT_MULTI_TARGETS' defval='0' depends='HAVE_DOT'> <docs> <![CDATA[ - Set the \c DOT_MULTI_TARGETS tag to \c YES allow dot to generate multiple output + Set the \c DOT_MULTI_TARGETS tag to \c YES to allow dot to generate multiple output files in one run (i.e. multiple -o and -T options on the command line). This makes \c dot run faster, but since only newer versions of \c dot (>1.8.10) support this, this feature is disabled by default. @@ -3366,7 +3406,7 @@ to be found in the default search path. <option type='bool' id='DOT_CLEANUP' defval='1' depends='HAVE_DOT'> <docs> <![CDATA[ -If the \c DOT_CLEANUP tag is set to \c YES doxygen will +If the \c DOT_CLEANUP tag is set to \c YES, doxygen will remove the intermediate dot files that are used to generate the various graphs. ]]> </docs> diff --git a/src/configgen.py b/src/configgen.py index 04ffc8c..7115dba 100755 --- a/src/configgen.py +++ b/src/configgen.py @@ -26,6 +26,7 @@ def transformDocs(doc): doc = doc.replace("\r", " ") doc = doc.replace("\t", " ") doc = doc.replace("\\&", "&") + doc = doc.replace("(\\c ", "(") doc = doc.replace("\\c ", " ") doc = doc.replace("\\b ", " ") doc = doc.replace("\\e ", " ") diff --git a/src/context.cpp b/src/context.cpp index b35fffa..ae5d5bc 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 (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/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp index e841428..aa3cc47 100644 --- a/src/dbusxmlscanner.cpp +++ b/src/dbusxmlscanner.cpp @@ -432,7 +432,7 @@ public: m_currentEnum = 0; } - if (EXTENSION("value")) + if (EXTENSION("value") && m_currentEnum) { CONDITION(!m_currentEntry, "end of value without start"); m_currentEntry->endBodyLine = lineNumber(); diff --git a/src/define.cpp b/src/define.cpp index 75459c9..2f4e43a 100644 --- a/src/define.cpp +++ b/src/define.cpp @@ -35,7 +35,7 @@ Define::Define(const Define &d) { //name=d.name; definition=d.definition; fileName=d.fileName; lineNr=d.lineNr; - lineNr=d.columnNr; + columnNr=d.columnNr; nargs=d.nargs; undef=d.undef; varArgs=d.varArgs; diff --git a/src/definition.cpp b/src/definition.cpp index 4a6a728..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) { } @@ -371,7 +371,7 @@ Definition::Definition(const Definition &d) : DefinitionIntf() } if (d.m_impl->inbodyDocs) { - m_impl->details = new DocInfo(*d.m_impl->inbodyDocs); + m_impl->inbodyDocs = new DocInfo(*d.m_impl->inbodyDocs); } m_isSymbol = d.m_isSymbol; @@ -511,9 +511,9 @@ void Definition::addSectionsToIndex() } } -void Definition::writeDocAnchorsToTagFile() +void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile) { - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict) + if (m_impl->sectionDict) { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionDict->count()); SDict<SectionInfo>::Iterator sdi(*m_impl->sectionDict); @@ -523,15 +523,13 @@ void Definition::writeDocAnchorsToTagFile() if (!si->generated) { //printf("write an entry!\n"); - if (definitionType()==TypeMember) Doxygen::tagFile << " "; - Doxygen::tagFile << " <docanchor file=\"" - << si->fileName << "\""; + if (definitionType()==TypeMember) tagFile << " "; + tagFile << " <docanchor file=\"" << si->fileName << "\""; if (!si->title.isEmpty()) { - Doxygen::tagFile << " title=\"" << convertToXML(si->title) << "\""; + tagFile << " title=\"" << convertToXML(si->title) << "\""; } - Doxygen::tagFile << ">" << si->label - << "</docanchor>" << endl; + tagFile << ">" << si->label << "</docanchor>" << endl; } } } @@ -757,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)) { @@ -765,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') @@ -818,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==':') { @@ -892,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; @@ -911,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(); @@ -930,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); @@ -944,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(); @@ -953,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); @@ -967,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(); @@ -980,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(); @@ -994,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(); @@ -1003,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); @@ -1018,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(); @@ -1107,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(); @@ -1159,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(); @@ -1178,6 +1212,10 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, { ol.disable(OutputGenerator::Latex); } + if (!rtfSourceCode) + { + ol.disable(OutputGenerator::RTF); + } ol.docify(name); ol.popGeneratorState(); } @@ -1186,12 +1224,15 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, // for HTML write a real link ol.pushGeneratorState(); //ol.disableAllBut(OutputGenerator::Html); - ol.disable(OutputGenerator::RTF); ol.disable(OutputGenerator::Man); if (!latexSourceCode) { ol.disable(OutputGenerator::Latex); } + if (!rtfSourceCode) + { + ol.disable(OutputGenerator::RTF); + } ol.writeObjectLink(md->getReference(), md->getOutputFileBase(), @@ -1205,6 +1246,10 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, { ol.disable(OutputGenerator::Latex); } + if (rtfSourceCode) + { + ol.disable(OutputGenerator::RTF); + } ol.docify(name); ol.popGeneratorState(); } @@ -1288,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(); @@ -1526,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) { @@ -1542,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; @@ -1620,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/definition.h b/src/definition.h index 05ea621..b1f118d 100644 --- a/src/definition.h +++ b/src/definition.h @@ -34,6 +34,7 @@ struct ListItemInfo; struct SectionInfo; class Definition; class DefinitionImpl; +class FTextStream; /** Data associated with a detailed description. */ struct DocInfo @@ -334,7 +335,7 @@ class Definition : public DefinitionIntf /*! Writes the documentation anchors of the definition to * the Doxygen::tagFile stream. */ - void writeDocAnchorsToTagFile(); + void writeDocAnchorsToTagFile(FTextStream &); void setLocalName(const QCString name); void addSectionsToIndex(); 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 284d1ee..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) @@ -235,10 +235,6 @@ void DirDef::writeSubDirList(OutputList &ol) ol.insertMemberAlign(); ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); ol.endMemberItem(); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl; - } if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { ol.startMemberDescription(dd->getOutputFileBase()); @@ -297,10 +293,6 @@ void DirDef::writeFileList(OutputList &ol) ol.endTextLink(); ol.popGeneratorState(); } - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl; - } ol.endMemberItem(); if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { @@ -341,6 +333,53 @@ bool DirDef::hasDetailedDescription() const return (!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty(); } +void DirDef::writeTagFile(FTextStream &tagFile) +{ + tagFile << " <compound kind=\"dir\">" << endl; + tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl; + tagFile << " <path>" << convertToXML(name()) << "</path>" << endl; + tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Directory)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::DirSubDirs: + { + if (m_subdirs.count()>0) + { + DirDef *dd; + QListIterator<DirDef> it(m_subdirs); + for (;(dd=it.current());++it) + { + tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl; + } + } + } + break; + case LayoutDocEntry::DirFiles: + { + if (m_fileList->count()>0) + { + QListIterator<FileDef> it(*m_fileList); + FileDef *fd; + for (;(fd=it.current());++it) + { + tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl; + } + } + } + break; + default: + break; + } + } + writeDocAnchorsToTagFile(tagFile); + tagFile << " </compound>" << endl; +} + void DirDef::writeDocumentation(OutputList &ol) { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); @@ -367,14 +406,6 @@ void DirDef::writeDocumentation(OutputList &ol) endTitle(ol,getOutputFileBase(),title); ol.startContents(); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <compound kind=\"dir\">" << endl; - Doxygen::tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl; - Doxygen::tagFile << " <path>" << convertToXML(name()) << "</path>" << endl; - Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; - } - //---------------------------------------- start flexible part ------------------------------- SrcLangExt lang = getLanguage(); @@ -450,12 +481,6 @@ void DirDef::writeDocumentation(OutputList &ol) //---------------------------------------- end flexible part ------------------------------- - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </compound>" << endl; - } - ol.endContents(); endFileWithNavPath(this,ol); diff --git a/src/dirdef.h b/src/dirdef.h index 8f4fbc2..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); @@ -72,6 +72,7 @@ class DirDef : public Definition // generate output void writeDocumentation(OutputList &ol); void writeDepGraph(FTextStream &t); + void writeTagFile(FTextStream &t); static DirDef *mergeDirectoryInTree(const QCString &path); bool visited; 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 9f2dbe3..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, @@ -1329,50 +1303,21 @@ void DocbookDocVisitor::startDiaFile(const QCString &fileName, { baseName=baseName.left(i); } - baseName.prepend("msc_"); + baseName.prepend("dia_"); 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 8be11c6..9a120dc 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -76,7 +76,8 @@ static const char *sectionLevelToName[] = "section", "subsection", "subsubsection", - "paragraph" + "paragraph", + "subparagraph" }; //--------------------------------------------------------------------------- @@ -231,6 +232,27 @@ static void docParserPopContext(bool keepParamInfo=FALSE) //--------------------------------------------------------------------------- +// replaces { with < and } with > and also +// replaces > with < and > 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,"<","<"); + s=substitute(s,">",">"); +} + +//--------------------------------------------------------------------------- + /*! search for an image in the imageNameDict and if found * copies the image to the output directory (which depends on the \a type * parameter). @@ -818,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) { @@ -1026,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; @@ -1112,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"))) @@ -1219,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. @@ -1409,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; } @@ -2088,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; + } } //--------------------------------------------------------------------------- @@ -2365,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 { @@ -2465,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; @@ -2476,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; @@ -2503,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 { @@ -2618,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); @@ -2688,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) : @@ -2702,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); @@ -2772,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); } //--------------------------------------------------------------------------- @@ -2788,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); @@ -2858,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); } //--------------------------------------------------------------------------- @@ -2885,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: @@ -2924,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); } @@ -3307,7 +3221,6 @@ int DocIndexEntry::parse() break; } } - if (tok!=0) retval=tok; doctokenizerYYsetStatePara(); m_entry = m_entry.stripWhiteSpace(); endindexentry: @@ -4670,12 +4583,15 @@ int DocParamList::parse(const QCString &cmdName) DBG(("DocParamList::parse() start\n")); g_nodeStack.push(this); DocPara *par=0; + QCString saveCmdName = cmdName; int tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) { warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command", qPrint(cmdName)); + retval=0; + goto endparamlist; } doctokenizerYYsetStateParam(); tok=doctokenizerYYlex(); @@ -4715,7 +4631,13 @@ int DocParamList::parse(const QCString &cmdName) retval=0; goto endparamlist; } - ASSERT(tok==TK_WHITESPACE); + if (tok!=TK_WHITESPACE) /* premature end of comment block */ + { + warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token in comment block while parsing the " + "argument of command %s",qPrint(saveCmdName)); + retval=0; + goto endparamlist; + } par = new DocPara(this); m_paragraphs.append(par); @@ -5039,7 +4961,7 @@ void DocPara::handleImage(const QCString &cmdName) "%s is not valid", qPrint(imgType),qPrint(cmdName)); return; - } + } doctokenizerYYsetStateFile(); tok=doctokenizerYYlex(); doctokenizerYYsetStatePara(); @@ -5055,7 +4977,8 @@ void DocPara::handleImage(const QCString &cmdName) img->parse(); } -void DocPara::handleDotFile(const QCString &cmdName) +template<class T> +void DocPara::handleFile(const QCString &cmdName) { int tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) @@ -5074,55 +4997,7 @@ void DocPara::handleDotFile(const QCString &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) -{ - 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; - DocDiaFile *df = new DocDiaFile(this,name,g_context); + T *df = new T(this,name,g_context); m_children.append(df); df->parse(); } @@ -5217,6 +5092,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) QCString blockId; if (t==DocInclude::Snippet) { + if (fileName == "this") fileName=g_fileName; doctokenizerYYsetStateSnippet(); tok=doctokenizerYYlex(); doctokenizerYYsetStatePara(); @@ -5287,6 +5163,10 @@ int DocPara::handleStartCode() { lang="."+lang; } + if (g_xmlComment) + { + g_token->verb = substitute(substitute(g_token->verb,"<","<"),">",">"); + } // 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')) @@ -5552,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(); } @@ -5571,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(); @@ -5697,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); @@ -5952,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: @@ -5961,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)) { @@ -5974,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",¶mName)) { @@ -6017,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 @@ -6044,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; @@ -6064,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 @@ -6095,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); @@ -6152,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)); @@ -6775,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 { @@ -7036,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) @@ -7087,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)); @@ -7101,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 ea4a1a4..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() %} @@ -335,7 +336,7 @@ LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]* PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+ CITESCHAR [a-z_A-Z\x80-\xFF] CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]* -CITEID {CITESCHAR}*{CITEECHAR}+("."{CITESCHAR}*{CITEECHAR}+)* +CITEID {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)* MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}* LISTITEM {BLANK}*[-]("#")?{WS} @@ -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 c64729a..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); +} //-------------------------------------------------------------------- @@ -1093,7 +1093,11 @@ bool DotFilePatcher::run() Map *map = m_maps.at(mapId); //printf("patching FIG %d in file %s with contents of %s\n", // mapId,m_patchFile.data(),map->mapFile.data()); - writeVecGfxFigure(t,map->label,map->mapFile); + if (!writeVecGfxFigure(t,map->label,map->mapFile)) + { + err("problem writing FIG %d figure!\n",mapId); + return FALSE; + } } else // error invalid map id! { @@ -1904,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); @@ -2257,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); @@ -2280,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; @@ -4667,9 +4676,10 @@ void DotGroupCollaboration::Edge::write( FTextStream &t ) const } switch( eType ) { - case thierarchy : + case thierarchy: arrowStyle = "dir=\"back\", style=\"solid\""; - default : + break; + default: t << ", color=\"" << linkTypeColor[(int)eType] << "\""; break; } @@ -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 533e6ef..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()); \ @@ -142,7 +145,6 @@ QDict<void> Doxygen::expandAsDefinedDict(257); // all macros that should be QIntDict<MemberGroupInfo> Doxygen::memGrpInfoDict(1009); // dictionary of the member groups heading PageDef *Doxygen::mainPage = 0; bool Doxygen::insideMainPage = FALSE; // are we generating docs for the main page? -FTextStream Doxygen::tagFile; NamespaceDef *Doxygen::globalScope = 0; QDict<RefList> *Doxygen::xrefLists = new QDict<RefList>; // dictionary of cross-referenced item lists bool Doxygen::parseSourcesNeeded = FALSE; @@ -1008,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+="::"; @@ -1037,9 +1040,16 @@ static Definition *buildScopeFromQualifiedName(const QCString name, else // scope is a namespace { } - // make the parent/child scope relation - prevScope->addInnerCompound(innerScope); - innerScope->setOuterScope(prevScope); + if (innerScope) + { + // make the parent/child scope relation + prevScope->addInnerCompound(innerScope); + innerScope->setOuterScope(prevScope); + } + else // current scope is a class, so return only the namespace part... + { + return prevScope; + } // proceed to the next scope fragment p=idx+l+2; prevScope=innerScope; @@ -1303,19 +1313,32 @@ static void addClassToContext(EntryNav *rootNav) QCString tagName; QCString refFileName; TagInfo *tagInfo = rootNav->tagInfo(); + int i; if (tagInfo) { tagName = tagInfo->tagName; refFileName = tagInfo->fileName; - int i; - if ((i=fullName.find("::"))!=-1) + if (fullName.find("::")!=-1) // symbols imported via tag files may come without the parent scope, // so we artificially create it here { buildScopeFromQualifiedName(fullName,fullName.contains("::"),root->lang,tagInfo); } } - cd=new ClassDef(root->fileName,root->startLine,root->startColumn, + ArgumentList *tArgList = 0; + if ((root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java) && (i=fullName.find('<'))!=-1) + { + // a Java/C# generic class looks like a C++ specialization, so we need to split the + // name and template arguments here + tArgList = new ArgumentList; + stringToArgumentList(fullName.mid(i),tArgList); + fullName=fullName.left(i); + } + else + { + tArgList = getTemplateArgumentsFromName(fullName,root->tArgLists); + } + 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); @@ -1329,8 +1352,6 @@ static void addClassToContext(EntryNav *rootNav) cd->setTypeConstraints(root->typeConstr); //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data()); - ArgumentList *tArgList = - getTemplateArgumentsFromName(fullName,root->tArgLists); //printf("class %s template args=%s\n",fullName.data(), // tArgList ? tempArgListToString(tArgList).data() : "<none>"); cd->setTemplateArguments(tArgList); @@ -1652,26 +1673,6 @@ static void processTagLessClasses(ClassDef *rootCd, } } -static void writeMainPageTagFileData() -{ - if (Doxygen::mainPage && !Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <compound kind=\"page\">" << endl - << " <name>" - << convertToXML(Doxygen::mainPage->name()) - << "</name>" << endl - << " <title>" - << convertToXML(Doxygen::mainPage->title()) - << "</title>" << endl - << " <filename>" - << convertToXML(Doxygen::mainPage->getOutputFileBase()) - << "</filename>" << endl; - - Doxygen::mainPage->writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </compound>" << endl; - } -} - static void findTagLessClasses(ClassDef *cd) { if (cd->getClassSDict()) @@ -1764,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 @@ -2070,18 +2071,15 @@ static void findUsingDeclarations(EntryNav *rootNav) usingCd->name().data(),nd?nd->name().data():fd->name().data()); } - if (usingCd) // add the class to the correct scope + if (nd) { - if (nd) - { - //printf("Inside namespace %s\n",nd->name().data()); - nd->addUsingDeclaration(usingCd); - } - else if (fd) - { - //printf("Inside file %s\n",fd->name().data()); - fd->addUsingDeclaration(usingCd); - } + //printf("Inside namespace %s\n",nd->name().data()); + nd->addUsingDeclaration(usingCd); + } + else if (fd) + { + //printf("Inside file %s\n",fd->name().data()); + fd->addUsingDeclaration(usingCd); } } @@ -2137,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(), @@ -2326,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); @@ -2561,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); @@ -2833,14 +2849,14 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) else if (root->type.find(')',i)!=-1) // function ptr, not variable like "int (*bla)[10]" { root->type=root->type.left(root->type.length()-1); - root->args.prepend(")"); + root->args.prepend(") "); //printf("root->type=%s root->args=%s\n",root->type.data(),root->args.data()); } } else if (root->type.find("typedef ")!=-1 && root->type.right(2)=="()") // typedef void (func)(int) { root->type=root->type.left(root->type.length()-1); - root->args.prepend(")"); + root->args.prepend(") "); } } @@ -3073,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()); @@ -3245,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, @@ -4100,8 +4127,12 @@ static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,co */ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,const QCString &name) { - FileDef *fd=cd->getFileDef(); ClassDef *result=0; + if (cd==0) + { + return result; + } + FileDef *fd=cd->getFileDef(); if (context && cd!=context) { result = getResolvedClass(context,0,name,0,0,TRUE,TRUE); @@ -4114,7 +4145,7 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co { result = getClass(name); } - if (result==0 && cd && + if (result==0 && (cd->getLanguage()==SrcLangExt_CSharp || cd->getLanguage()==SrcLangExt_Java) && name.find('<')!=-1) { @@ -4236,13 +4267,10 @@ static void findUsedClassesForClass(EntryNav *rootNav, usedCd->setLanguage(masterCd->getLanguage()); Doxygen::hiddenClasses->append(usedName,usedCd); } - if (usedCd) - { - if (isArtificial) usedCd->setArtificial(TRUE); - Debug::print(Debug::Classes,0," Adding used class `%s' (1)\n", usedCd->name().data()); - instanceCd->addUsedClass(usedCd,md->name(),md->protection()); - usedCd->addUsedByClass(instanceCd,md->name(),md->protection()); - } + if (isArtificial) usedCd->setArtificial(TRUE); + Debug::print(Debug::Classes,0," Adding used class `%s' (1)\n", usedCd->name().data()); + instanceCd->addUsedClass(usedCd,md->name(),md->protection()); + usedCd->addUsedByClass(instanceCd,md->name(),md->protection()); } } } @@ -4389,7 +4417,7 @@ static bool findTemplateInstanceRelation(Entry *root, //printf("\n"); bool existingClass = (templSpec == - tempArgListToString(templateClass->templateArguments()) + tempArgListToString(templateClass->templateArguments(),root->lang) ); if (existingClass) return TRUE; @@ -4643,7 +4671,8 @@ static bool findClassRelation( if (si==-1) si=0; if (baseClass==0 && (root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java)) { - baseClass = Doxygen::genericsDict->find(baseClassName); + // for Java/C# strip the template part before looking for matching + baseClass = Doxygen::genericsDict->find(baseClassName.left(i)); //printf("looking for '%s' result=%p\n",baseClassName.data(),baseClass); } if (baseClass==0 && i!=-1) @@ -4705,7 +4734,7 @@ static bool findClassRelation( if (found) templSpec = tmpTemplSpec; } //printf("2. found=%d\n",found); - + //printf("root->name=%s biName=%s baseClassName=%s\n", // root->name.data(),biName.data(),baseClassName.data()); //if (cd->isCSharp() && i!=-1) // C# generic -> add internal -g postfix @@ -4933,6 +4962,22 @@ static void findClassEntries(EntryNav *rootNav) RECURSE_ENTRYTREE(findClassEntries,rootNav); } +static QCString extractClassName(EntryNav *rootNav) +{ + // strip any anonymous scopes first + QCString bName=stripAnonymousNamespaceScope(rootNav->name()); + bName=stripTemplateSpecifiersFromScope(bName); + int i; + if ((rootNav->lang()==SrcLangExt_CSharp || rootNav->lang()==SrcLangExt_Java) && + (i=bName.find('<'))!=-1) + { + // a Java/C# generic class looks like a C++ specialization, so we need to strip the + // template part before looking for matches + bName=bName.left(i); + } + return bName; +} + /*! Using the dictionary build by findClassEntries(), this * function will look for additional template specialization that * exists as inheritance relations only. These instances will be @@ -4947,9 +4992,7 @@ static void findInheritedTemplateInstances() for (;(rootNav=edi.current());++edi) { ClassDef *cd; - // strip any anonymous scopes first - QCString bName=stripAnonymousNamespaceScope(rootNav->name()); - bName=stripTemplateSpecifiersFromScope(bName); + QCString bName = extractClassName(rootNav); Debug::print(Debug::Classes,0," Inheritance: Class %s : \n",bName.data()); if ((cd=getClass(bName))) { @@ -4970,9 +5013,7 @@ static void findUsedTemplateInstances() for (;(rootNav=edi.current());++edi) { ClassDef *cd; - // strip any anonymous scopes first - QCString bName=stripAnonymousNamespaceScope(rootNav->name()); - bName=stripTemplateSpecifiersFromScope(bName); + QCString bName = extractClassName(rootNav); Debug::print(Debug::Classes,0," Usage: Class %s : \n",bName.data()); if ((cd=getClass(bName))) { @@ -4995,10 +5036,7 @@ static void computeClassRelations() rootNav->loadEntry(g_storage); Entry *root = rootNav->entry(); - - // strip any anonymous scopes first - QCString bName=stripAnonymousNamespaceScope(rootNav->name()); - bName=stripTemplateSpecifiersFromScope(bName); + QCString bName = extractClassName(rootNav); Debug::print(Debug::Classes,0," Relations: Class %s : \n",bName.data()); if ((cd=getClass(bName))) { @@ -5213,7 +5251,7 @@ static void addListReferences() addRefItem(xrefItems, name, theTranslator->trPage(TRUE,TRUE), - name,pd->title(),0); + name,pd->title(),0,0); } } @@ -5230,7 +5268,7 @@ static void addListReferences() addRefItem(xrefItems, name, theTranslator->trDir(TRUE,TRUE), - name,dd->displayName(),0); + name,dd->displayName(),0,0); } } @@ -6306,7 +6344,7 @@ static void findMember(EntryNav *rootNav, for (;(al=alli.current());++alli) { warnMsg+=" template "; - warnMsg+=tempArgListToString(al); + warnMsg+=tempArgListToString(al,root->lang); warnMsg+='\n'; } } @@ -6329,7 +6367,7 @@ static void findMember(EntryNav *rootNav, if (templAl!=0) { warnMsg+=" 'template "; - warnMsg+=tempArgListToString(templAl); + warnMsg+=tempArgListToString(templAl,root->lang); warnMsg+='\n'; } warnMsg+=" "; @@ -6578,7 +6616,7 @@ static void findMember(EntryNav *rootNav, funcType,funcName,funcArgs,exceptions, root->protection,root->virt, root->stat && !isMemberOf, - isMemberOf ? Foreign : isRelated ? Related : Member, + isMemberOf ? Foreign : Related, mtype, (root->tArgLists ? root->tArgLists->getLast() : 0), funcArgs.isEmpty() ? 0 : root->argList); @@ -7029,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; @@ -7062,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; @@ -7246,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); @@ -8055,13 +8102,14 @@ static void generateClassList(ClassSDict &classSDict) ClassDef *cd=cli.current(); //printf("cd=%s getOuterScope=%p global=%p\n",cd->name().data(),cd->getOuterScope(),Doxygen::globalScope); - if ((cd->getOuterScope()==0 || // <-- should not happen, but can if we read an old tag file + if (cd && + (cd->getOuterScope()==0 || // <-- should not happen, but can if we read an old tag file cd->getOuterScope()==Doxygen::globalScope // only look at global classes ) && !cd->isHidden() && !cd->isEmbeddedInOuterScope() - ) + ) { - // skip external references, anonymous compounds and - // template instances + // skip external references, anonymous compounds and + // template instances if ( cd->isLinkableInProject() && cd->templateMaster()==0) { msg("Generating docs for compound %s...\n",cd->name().data()); @@ -8395,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()); @@ -8620,7 +8668,7 @@ static void buildPageList(EntryNav *rootNav) "page", name, title, - 0 + 0,0 ); rootNav->releaseEntry(); @@ -8996,9 +9044,9 @@ static void generateNamespaceDocs() // for each class in the namespace... ClassSDict::Iterator cli(*nd->getClassSDict()); - for ( ; cli.current() ; ++cli ) + ClassDef *cd; + for ( ; (cd=cli.current()) ; ++cli ) { - ClassDef *cd=cli.current(); if ( ( cd->isLinkableInProject() && cd->templateMaster()==0 ) // skip external references, anonymous compounds and @@ -9153,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"); @@ -9181,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(); @@ -9241,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); } @@ -9291,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); @@ -9908,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,""); @@ -10527,6 +10612,87 @@ static void stopDoxygen(int) } #endif +static void writeTagFile() +{ + QCString &generateTagFile = Config_getString("GENERATE_TAGFILE"); + if (generateTagFile.isEmpty()) return; + + QFile tag(generateTagFile); + if (!tag.open(IO_WriteOnly)) + { + err("cannot open tag file %s for writing\n", + generateTagFile.data() + ); + return; + } + FTextStream tagFile(&tag); + tagFile << "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>" << endl; + tagFile << "<tagfile>" << endl; + + // for each file + FileNameListIterator fnli(*Doxygen::inputNameList); + FileName *fn; + for (fnli.toFirst();(fn=fnli.current());++fnli) + { + FileNameIterator fni(*fn); + FileDef *fd; + for (fni.toFirst();(fd=fni.current());++fni) + { + fd->writeTagFile(tagFile); + } + } + // for each class + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd; + for ( ; (cd=cli.current()) ; ++cli ) + { + cd->writeTagFile(tagFile); + } + // for each namespace + NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); + NamespaceDef *nd; + for ( ; (nd=nli.current()) ; ++nli ) + { + nd->writeTagFile(tagFile); + } + // for each group + GroupSDict::Iterator gli(*Doxygen::groupSDict); + GroupDef *gd; + for (gli.toFirst();(gd=gli.current());++gli) + { + gd->writeTagFile(tagFile); + } + // for each page + PageSDict::Iterator pdi(*Doxygen::pageSDict); + PageDef *pd=0; + for (pdi.toFirst();(pd=pdi.current());++pdi) + { + pd->writeTagFile(tagFile); + } + if (Doxygen::mainPage) Doxygen::mainPage->writeTagFile(tagFile); + + /* + if (Doxygen::mainPage && !Config_getString("GENERATE_TAGFILE").isEmpty()) + { + tagFile << " <compound kind=\"page\">" << endl + << " <name>" + << convertToXML(Doxygen::mainPage->name()) + << "</name>" << endl + << " <title>" + << convertToXML(Doxygen::mainPage->title()) + << "</title>" << endl + << " <filename>" + << convertToXML(Doxygen::mainPage->getOutputFileBase()) + << "</filename>" << endl; + + mainPage->writeDocAnchorsToTagFile(); + tagFile << " </compound>" << endl; + } + */ + + tagFile << "</tagfile>" << endl; +} + static void exitDoxygen() { if (!g_successfulRun) // premature exit @@ -10690,7 +10856,6 @@ void searchInputFiles() g_s.begin("Searching for files to process...\n"); QDict<void> *killDict = new QDict<void>(10007); - int inputSize=0; QStrList &inputList=Config_getList("INPUT"); g_inputFiles.setAutoDelete(TRUE); s=inputList.first(); @@ -10702,8 +10867,8 @@ void searchInputFiles() { // strip trailing slashes if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1); - - inputSize+=readFileOrDirectory( + + readFileOrDirectory( path, Doxygen::inputNameList, Doxygen::inputNameDict, @@ -10797,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; @@ -11274,6 +11439,7 @@ void generateOutput() g_outputList->add(new LatexGenerator); LatexGenerator::init(); + copyLatexStyleSheet(); // copy static stuff copyExtraFiles("LATEX_EXTRA_FILES","LATEX_OUTPUT"); } @@ -11301,24 +11467,6 @@ void generateOutput() * Generate documentation * **************************************************************************/ - QFile *tag=0; - QCString &generateTagFile = Config_getString("GENERATE_TAGFILE"); - if (!generateTagFile.isEmpty()) - { - tag=new QFile(generateTagFile); - if (!tag->open(IO_WriteOnly)) - { - err("cannot open tag file %s for writing\n", - generateTagFile.data() - ); - cleanUpDoxygen(); - exit(1); - } - Doxygen::tagFile.setDevice(tag); - Doxygen::tagFile << "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>" << endl; - Doxygen::tagFile << "<tagfile>" << endl; - } - if (generateHtml) writeDoxFont(Config_getString("HTML_OUTPUT")); if (generateLatex) writeDoxFont(Config_getString("LATEX_OUTPUT")); if (generateRtf) writeDoxFont(Config_getString("RTF_OUTPUT")); @@ -11414,8 +11562,6 @@ void generateOutput() } } - writeMainPageTagFileData(); - if (g_outputList->count()>0) { writeIndexHierarchy(*g_outputList); @@ -11425,11 +11571,9 @@ void generateOutput() Doxygen::indexList->finalize(); g_s.end(); - if (!generateTagFile.isEmpty()) - { - Doxygen::tagFile << "</tagfile>" << endl; - delete tag; - } + g_s.begin("writing tag file...\n"); + writeTagFile(); + g_s.end(); if (Config_getBool("DOT_CLEANUP")) { diff --git a/src/doxygen.h b/src/doxygen.h index 6f766c0..aa9b745 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -114,7 +114,6 @@ class Doxygen static QStrList tagfileList; static MemberNameSDict *memberNameSDict; static MemberNameSDict *functionNameSDict; - static FTextStream tagFile; static SectionDict *sectionDict; static StringDict namespaceAliasDict; static GroupSDict *groupSDict; diff --git a/src/entry.cpp b/src/entry.cpp index ee3d0ae..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(); @@ -301,21 +301,7 @@ void Entry::createSubtreeIndex(EntryNav *nav,FileStorage *storage,FileDef *fd) void Entry::createNavigationIndex(EntryNav *rootNav,FileStorage *storage,FileDef *fd) { - //printf("createNavigationIndex(%p) sublist=%p\n",this,m_sublist); - if (m_sublist) - { - //printf("saveEntries: %d children\n",root->sublist->count()); - // store all child entries of root, but keep the navigation info (=index) - QListIterator<Entry> eli(*m_sublist); - Entry *e; - for (eli.toFirst();(e=eli.current());++eli) - { - createSubtreeIndex(rootNav,storage,fd); - } - // remove all entries from root - //m_sublist->setAutoDelete(FALSE); - m_sublist->clear(); - } + createSubtreeIndex(rootNav,storage,fd); } void Entry::addSpecialListItem(const char *listName,int itemId) diff --git a/src/entry.h b/src/entry.h index 2cc2827..c92038f 100644 --- a/src/entry.h +++ b/src/entry.h @@ -133,7 +133,7 @@ class Entry static const uint64 Enum = (1ULL<<12); // for Java-style enums static const uint64 Service = (1ULL<<13); // UNO IDL static const uint64 Singleton = (1ULL<<14); // UNO IDL - static const uint64 ForwardDecl = (1ULL<<14); // forward declarad template classes + static const uint64 ForwardDecl = (1ULL<<15); // forward declarad template classes // member specifiers (add new items to the beginning) static const uint64 PrivateGettable = (1ULL<<20); // C# private getter diff --git a/src/filedef.cpp b/src/filedef.cpp index 9e8a61c..dd97c1c 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -180,6 +180,112 @@ bool FileDef::hasDetailedDescription() const ); } +void FileDef::writeTagFile(FTextStream &tagFile) +{ + tagFile << " <compound kind=\"file\">" << endl; + tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; + tagFile << " <path>" << convertToXML(getPath()) << "</path>" << endl; + tagFile << " <filename>" << convertToXML(getOutputFileBase()) << "</filename>" << endl; + if (m_includeList && m_includeList->count()>0) + { + QListIterator<IncludeInfo> ili(*m_includeList); + IncludeInfo *ii; + for (;(ii=ili.current());++ili) + { + if (!ii->indirect) + { + FileDef *fd=ii->fileDef; + if (fd && fd->isLinkable() && !fd->isReference()) + { + bool isIDLorJava = FALSE; + SrcLangExt lang = fd->getLanguage(); + isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java; + const char *locStr = (ii->local || isIDLorJava) ? "yes" : "no"; + const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no"; + tagFile << " <includes id=\"" + << convertToXML(fd->getOutputFileBase()) << "\" " + << "name=\"" << convertToXML(fd->name()) << "\" " + << "local=\"" << locStr << "\" " + << "imported=\"" << impStr << "\">" + << convertToXML(ii->includeName) + << "</includes>" + << endl; + } + } + } + } + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::File)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::FileClasses: + { + if (m_classSDict) + { + SDict<ClassDef>::Iterator ci(*m_classSDict); + ClassDef *cd; + for (ci.toFirst();(cd=ci.current());++ci) + { + if (cd->isLinkableInProject()) + { + tagFile << " <class kind=\"" << cd->compoundTypeString() << + "\">" << convertToXML(cd->name()) << "</class>" << endl; + } + } + } + } + break; + case LayoutDocEntry::FileNamespaces: + { + if (m_namespaceSDict) + { + SDict<NamespaceDef>::Iterator ni(*m_namespaceSDict); + NamespaceDef *nd; + for (ni.toFirst();(nd=ni.current());++ni) + { + if (nd->isLinkableInProject()) + { + tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl; + } + } + } + } + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml) + { + ml->writeTagFile(tagFile); + } + } + break; + case LayoutDocEntry::MemberGroups: + { + if (m_memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*m_memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } + } + break; + default: + break; + } + } + + writeDocAnchorsToTagFile(tagFile); + tagFile << " </compound>" << endl; +} + void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) { if (hasDetailedDescription()) @@ -221,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"); @@ -233,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(); } @@ -319,19 +438,6 @@ void FileDef::writeIncludeFiles(OutputList &ol) ol.writeObjectLink(fd->getReference(), fd->generateSourceFile() ? fd->includeName() : fd->getOutputFileBase(), 0,ii->includeName); - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !fd->isReference()) - { - const char *locStr = (ii->local || isIDLorJava) ? "yes" : "no"; - const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no"; - Doxygen::tagFile << " <includes id=\"" - << convertToXML(fd->getOutputFileBase()) << "\" " - << "name=\"" << convertToXML(fd->name()) << "\" " - << "local=\"" << locStr << "\" " - << "imported=\"" << impStr << "\">" - << convertToXML(ii->includeName) - << "</includes>" - << endl; - } } else { @@ -616,15 +722,6 @@ void FileDef::writeDocumentation(OutputList &ol) Doxygen::searchIndex->addWord(localName(),TRUE); } - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <compound kind=\"file\">" << endl; - Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; - Doxygen::tagFile << " <path>" << convertToXML(getPath()) << "</path>" << endl; - Doxygen::tagFile << " <filename>" - << convertToXML(getOutputFileBase()) - << "</filename>" << endl; - } //---------------------------------------- start flexible part ------------------------------- @@ -738,12 +835,6 @@ void FileDef::writeDocumentation(OutputList &ol) //---------------------------------------- end flexible part ------------------------------- - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </compound>" << endl; - } - ol.endContents(); endFileWithNavPath(this,ol); @@ -823,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()) @@ -831,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(); @@ -864,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; @@ -1322,6 +1416,7 @@ void FileDef::addListReferences() getOutputFileBase(), theTranslator->trFile(TRUE,TRUE), getOutputFileBase(),name(), + 0, 0 ); } @@ -1657,16 +1752,19 @@ void FileDef::acquireFileVersion() } const int bufSize=1024; char buf[bufSize]; - int numRead = (int)fread(buf,1,bufSize,f); + int numRead = (int)fread(buf,1,bufSize-1,f); portable_pclose(f); - if (numRead>0 && !(m_fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty()) + if (numRead>0 && numRead<bufSize) { - msg("%s\n",m_fileVersion.data()); - } - else - { - msg("no version available\n"); + buf[numRead]='\0'; + m_fileVersion=QCString(buf,numRead).stripWhiteSpace(); + if (!m_fileVersion.isEmpty()) + { + msg("%s\n",m_fileVersion.data()); + return; + } } + msg("no version available\n"); } } @@ -1766,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 a95cd77..33eae35 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -39,6 +39,7 @@ class NamespaceSDict; class MemberGroupSDict; class PackageDef; class DirDef; +class FTextStream; /** Class representing the data associated with a \#include statement. */ struct IncludeInfo @@ -95,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; } @@ -146,6 +147,7 @@ class FileDef : public Definition void writeMemberPages(OutputList &ol); void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const; void writeSummaryLinks(OutputList &ol); + void writeTagFile(FTextStream &t); void startParsing(); void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu); 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 64a49ca..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,11 +260,12 @@ 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 (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{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. */ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} +EXTERNAL_STMT (EXTERNAL) CONTAINS CONTAINS PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|IMPURE|PURE|ELEMENTAL)? @@ -469,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 @@ -481,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(); @@ -608,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) && @@ -648,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. */ @@ -663,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; @@ -678,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); @@ -692,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) { @@ -726,6 +737,18 @@ private { } } */ +{EXTERNAL_STMT}/({BS}"::"|{BS_}{ID}) { + /* external can be a "type" or an attribute */ + if(YY_START == Start) + { + addModule(NULL); + yy_push_state(ModuleBody); //anon program + } + QCString tmp = yytext; + currentModifiers |= tmp.stripWhiteSpace(); + argType = QCString(yytext).simplifyWhiteSpace().lower(); + yy_push_state(AttributeList); + } {ATTR_STMT}/{BS_}{ID} | {ATTR_STMT}/{BS}"::" { /* attribute statement starts */ @@ -744,7 +767,7 @@ private { <AttributeList>{ {COMMA} {} {BS} {} -{ATTR_SPEC}. { /* update current modifierswhen it is an ATTR_SPEC and not a variable name */ +{ATTR_SPEC}. { /* update current modifiers when it is an ATTR_SPEC and not a variable name */ /* bug_625519 */ QChar chr = yytext[(int)yyleng-1]; if (chr.isLetter() || chr.isDigit() || (chr == '_')) @@ -791,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()) @@ -870,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); @@ -971,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 */ } @@ -1478,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; @@ -1559,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; } @@ -1637,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; @@ -1723,8 +1762,11 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs) } if (mdfs.external) { - if (!typeName.isEmpty()) typeName += ", "; - typeName += "external"; + if (!typeName.contains("external")) + { + if (!typeName.isEmpty()) typeName += ", "; + typeName += "external"; + } } if (mdfs.intrinsic) { @@ -1788,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; } @@ -1991,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; @@ -2010,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); @@ -2026,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); @@ -2075,6 +2128,7 @@ static void addInterface(QCString name, InterfaceType type) current->fileName = yyFileName; current->bodyLine = yyLineNr; + current->startLine = yyLineNr; addCurrentEntry(1); } @@ -2155,79 +2209,117 @@ static void handleCommentBlock(const QCString &doc,bool brief) } //---------------------------------------------------------------------------- - +/// Handle parameter description as defined after the declaration of the parameter static void subrHandleCommentBlock(const QCString &doc,bool brief) { QCString loc_doc; + loc_doc = doc.stripWhiteSpace(); + Entry *tmp_entry = current; current = subrCurrent.getFirst(); // temporarily switch to the entry of the subroutine / function // Still in the specification section so no inbodyDocs yet, but parameter documentation current->inbodyDocs = ""; - if (docBlock.stripWhiteSpace().find("\\param") == 0) + // strip \\param or @param, so we can do some extra checking. We will add it later on again. + if (loc_doc.find("\\param") == 0) { - handleCommentBlock("\n\n"+doc,brief); + loc_doc = loc_doc.right(loc_doc.length()-strlen("\\param")).stripWhiteSpace(); } - else if (docBlock.stripWhiteSpace().find("@param") == 0) + else if (loc_doc.find("@param") == 0) { - handleCommentBlock("\n\n"+doc,brief); + loc_doc = loc_doc.right(loc_doc.length()-strlen("@param")).stripWhiteSpace(); } - else + + // direction as defined with the declaration of the parameter + int dir1 = modifiers[current_root][argName.lower()].direction; + // in description [in] is specified + if (loc_doc.lower().find(directionParam[SymbolModifiers::IN]) == 0) { - int dir1 = modifiers[current_root][argName.lower()].direction; - loc_doc = doc.stripWhiteSpace(); - if (loc_doc.lower().find(directionParam[SymbolModifiers::IN]) == 0) + // check if with the declaration intent(in) or nothing has been specified + if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || + (directionParam[dir1] == directionParam[SymbolModifiers::IN])) { - if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || - (directionParam[dir1] == directionParam[SymbolModifiers::IN])) - { - handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::IN] + " " + - argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::IN])),brief); - } - else + // strip direction + loc_doc = loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::IN])); + // in case of emty documentation or (now) just name, consider it as no documemntation + if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower())) { - warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName); - handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + - argName + " " + doc,brief); + // reset current back to the part inside the routine + current=tmp_entry; + return; } + handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::IN] + " " + + argName + " " + loc_doc,brief); } - else if (loc_doc.lower().find(directionParam[SymbolModifiers::OUT]) == 0) + else { - if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || - (directionParam[dir1] == directionParam[SymbolModifiers::OUT])) - { - handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::OUT] + " " + - argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::OUT])),brief); - } - else - { - warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName); - handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + - argName + " " + doc,brief); - } + // something different specified, give warning and leave error. + warn(yyFileName,yyLineNr, "Routine: " + current->name + current->args + + " inconsistency between intent attribute and documentation for parameter: " + argName); + handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + + argName + " " + loc_doc,brief); } - else if (loc_doc.lower().find(directionParam[SymbolModifiers::INOUT]) == 0) + } + // analogous to the [in] case, here [out] direction specified + else if (loc_doc.lower().find(directionParam[SymbolModifiers::OUT]) == 0) + { + if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || + (directionParam[dir1] == directionParam[SymbolModifiers::OUT])) { - if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || - (directionParam[dir1] == directionParam[SymbolModifiers::INOUT])) + loc_doc = loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::OUT])); + if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower())) { - handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::INOUT] + " " + - argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::INOUT])),brief); + current=tmp_entry; + return; } - else + handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::OUT] + " " + + argName + " " + loc_doc,brief); + } + else + { + warn(yyFileName,yyLineNr, "Routine: " + current->name + current->args + + " inconsistency between intent attribute and documentation for parameter: " + argName); + handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + + argName + " " + loc_doc,brief); + } + } + // analogous to the [in] case, here [in,out] direction specified + else if (loc_doc.lower().find(directionParam[SymbolModifiers::INOUT]) == 0) + { + if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || + (directionParam[dir1] == directionParam[SymbolModifiers::INOUT])) + { + loc_doc = loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::INOUT])); + if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower())) { - warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documentation for variable: "+argName); - handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + - argName + " " + doc,brief); + current=tmp_entry; + return; } + handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::INOUT] + " " + + argName + " " + loc_doc,brief); } else { + warn(yyFileName,yyLineNr, "Routine: " + current->name + current->args + + " inconsistency between intent attribute and documentation for parameter: " + argName); handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + - argName + " " + doc,brief); + argName + " " + loc_doc,brief); } } + // analogous to the [in] case; here no direction specified + else + { + if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower())) + { + current=tmp_entry; + return; + } + handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + + argName + " " + loc_doc,brief); + } + + // reset current back to the part inside the routine current=tmp_entry; } 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[] = -{ - { " ", "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 f1d1877..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) @@ -546,6 +570,149 @@ void GroupDef::computeAnchors() setAnchors(allMemberList); } +void GroupDef::writeTagFile(FTextStream &tagFile) +{ + tagFile << " <compound kind=\"group\">" << endl; + tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; + tagFile << " <title>" << convertToXML(title) << "</title>" << endl; + tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Group)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::GroupClasses: + { + if (classSDict) + { + SDict<ClassDef>::Iterator ci(*classSDict); + ClassDef *cd; + for (ci.toFirst();(cd=ci.current());++ci) + { + if (cd->isLinkableInProject()) + { + tagFile << " <class kind=\"" << cd->compoundTypeString() + << "\">" << convertToXML(cd->name()) << "</class>" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupNamespaces: + { + if (namespaceSDict) + { + SDict<NamespaceDef>::Iterator ni(*namespaceSDict); + NamespaceDef *nd; + for (ni.toFirst();(nd=ni.current());++ni) + { + if (nd->isLinkableInProject()) + { + tagFile << " <namespace>" << convertToXML(nd->name()) + << "</namespace>" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupFiles: + { + if (fileList) + { + QListIterator<FileDef> it(*fileList); + FileDef *fd; + for (;(fd=it.current());++it) + { + if (fd->isLinkableInProject()) + { + tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupPageDocs: + { + if (pageDict) + { + PageSDict::Iterator pdi(*pageDict); + PageDef *pd=0; + for (pdi.toFirst();(pd=pdi.current());++pdi) + { + QCString pageName = pd->getOutputFileBase(); + if (pd->isLinkableInProject()) + { + tagFile << " <page>" << convertToXML(pageName) << "</page>" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupDirs: + { + if (dirList) + { + QListIterator<DirDef> it(*dirList); + DirDef *dd; + for (;(dd=it.current());++it) + { + if (dd->isLinkableInProject()) + { + tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupNestedGroups: + { + if (groupList) + { + QListIterator<GroupDef> it(*groupList); + GroupDef *gd; + for (;(gd=it.current());++it) + { + if (gd->isVisible()) + { + tagFile << " <subgroup>" << convertToXML(gd->name()) << "</subgroup>" << endl; + } + } + } + } + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml) + { + ml->writeTagFile(tagFile); + } + } + break; + case LayoutDocEntry::MemberGroups: + { + if (memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } + } + break; + default: + break; + } + } + writeDocAnchorsToTagFile(tagFile); + tagFile << " </compound>" << endl; +} + void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) { if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) @@ -670,10 +837,6 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title) ol.docify(theTranslator->trFile(FALSE,TRUE)+" "); ol.insertMemberAlign(); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name()); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl; - } ol.endMemberItem(); if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { @@ -728,10 +891,6 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title) //ol.docify(" "); ol.insertMemberAlign(); ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle()); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <subgroup>" << convertToXML(gd->name()) << "</subgroup>" << endl; - } ol.endMemberItem(); if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { @@ -765,10 +924,6 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title) ol.insertMemberAlign(); ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); ol.endMemberItem(); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl; - } if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { ol.startMemberDescription(dd->getOutputFileBase()); @@ -801,13 +956,6 @@ void GroupDef::writePageDocumentation(OutputList &ol) { if (!pd->isReference()) { - QCString pageName = pd->getOutputFileBase(); - - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <page>" << convertToXML(pageName) << "</page>" << endl; - } - SectionInfo *si=0; if (!pd->title().isEmpty() && !pd->name().isEmpty() && (si=Doxygen::sectionDict->find(pd->name()))!=0) @@ -941,7 +1089,15 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.parseText(title); ol.popGeneratorState(); addGroupListToTitle(ol,this); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Man); ol.endTitleHead(getOutputFileBase(),title); + ol.popGeneratorState(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.endTitleHead(getOutputFileBase(),name()); + ol.parseText(title); + ol.popGeneratorState(); ol.endHeaderSection(); ol.startContents(); @@ -959,15 +1115,6 @@ void GroupDef::writeDocumentation(OutputList &ol) Doxygen::indexList->addIndexItem(this,0,0,title); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <compound kind=\"group\">" << endl; - Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; - Doxygen::tagFile << " <title>" << convertToXML(title) << "</title>" << endl; - Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; - } - - //---------------------------------------- start flexible part ------------------------------- SrcLangExt lang=getLanguage(); @@ -1092,12 +1239,6 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.popGeneratorState(); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </compound>" << endl; - } - if (Config_getBool("SEPARATE_MEMBER_PAGES")) { allMemberList->sort(); @@ -1229,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); + } } } } @@ -1386,6 +1534,7 @@ void GroupDef::addListReferences() getOutputFileBase(), theTranslator->trGroup(TRUE,TRUE), getOutputFileBase(),name(), + 0, 0 ); } @@ -1472,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); } } @@ -1519,3 +1668,4 @@ bool GroupDef::hasDetailedDescription() const return ((!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty()); } + diff --git a/src/groupdef.h b/src/groupdef.h index bc956da..a21311b 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -39,6 +39,7 @@ class DirList; class FTVHelp; class Entry; class MemberDef; +class FTextStream; /** A model of a group of symbols. */ class GroupDef : public Definition @@ -67,6 +68,7 @@ class GroupDef : public Definition void writeDocumentation(OutputList &ol); void writeMemberPages(OutputList &ol); void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const; + void writeTagFile(FTextStream &); int countMembers() const; bool isLinkableInProject() const; bool isLinkable() const; 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/>", "ϒ", "{$\\Upsilon$}", NULL, "\\u978?", { NULL, DocSymbol::Perl_unknown }}, { SYM(piv), "\xcf\x96", "ϖ", "<piv/>", "ϖ", "{$\\varpi$}", NULL, "\\u982?", { NULL, DocSymbol::Perl_unknown }}, { SYM(bull), "\xe2\x80\xa2", "•", "<bull/>", "•", "\\textbullet{}", NULL, "\\'95", { NULL, DocSymbol::Perl_unknown }}, - { SYM(hellip), "\xe2\x80\xa6", "…", "<hellip/>", "…", "{$\\cdots$}", NULL, "\\'85", { NULL, DocSymbol::Perl_unknown }}, + { SYM(hellip), "\xe2\x80\xa6", "…", "<hellip/>", "…", "{$\\dots$}", NULL, "\\'85", { NULL, DocSymbol::Perl_unknown }}, { SYM(prime), "\xe2\x80\xb2", "′", "<prime/>", "′", "'", NULL, "\\u8242?", { "\\\'", DocSymbol::Perl_string }}, { SYM(Prime), "\xe2\x80\xb3", "″", "<Prime/>", "″", "''", NULL, "\\u8243?", { "\"", DocSymbol::Perl_char }}, { SYM(oline), "\xe2\x80\xbe", "‾", "<oline/>", "‾", "{$\\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", "™", "<trademark/>", "™", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }}, - { SYM(apos), "'", "'", "'", "'", "'", "'", "'", { "\\\'", DocSymbol::Perl_string }}, + { SYM(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/htmlhelp.cpp b/src/htmlhelp.cpp index c1e535d..2629ab3 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -281,6 +281,7 @@ HtmlHelp::HtmlHelp() : indexFileDict(1009) HtmlHelp::~HtmlHelp() { if (m_fromUtf8!=(void *)(-1)) portable_iconv_close(m_fromUtf8); + delete index; } #if 0 /*! return a reference to the one and only instance of this class. diff --git a/src/index.cpp b/src/index.cpp index 430f5af..bc0b48e 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -800,9 +800,9 @@ static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex) static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FTVHelp* ftv,bool addToIndex) { ClassSDict::Iterator cli(*cl); - for (;cli.current(); ++cli) + ClassDef *cd; + for (;(cd=cli.current());++cli) { - ClassDef *cd=cli.current(); //printf("class %s hasVisibleRoot=%d isVisibleInHierarchy=%d\n", // cd->name().data(), // hasVisibleRoot(cd->baseClasses()), @@ -923,9 +923,9 @@ static int countClassesInTreeList(const ClassSDict &cl) { int count=0; ClassSDict::Iterator cli(cl); - for (;cli.current(); ++cli) + ClassDef *cd; + for (;(cd=cli.current());++cli) { - ClassDef *cd=cli.current(); if (!hasVisibleRoot(cd->baseClasses())) // filter on root classes { if (cd->isVisibleInHierarchy()) // should it be visible @@ -1640,7 +1640,7 @@ static void writeAnnotatedClassList(OutputList &ol) static QCString letterToLabel(uint startLetter) { - char s[10]; + char s[11]; // max 0x12345678 + '\0' if (startLetter>0x20 && startLetter<=0x7f) // printable ASCII character { s[0]=(char)startLetter; @@ -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(); @@ -3079,6 +3083,17 @@ static void countRelatedPages(int &docPages,int &indexPages) //---------------------------------------------------------------------------- +static bool mainPageHasOwnTitle() +{ + static QCString projectName = Config_getString("PROJECT_NAME"); + QCString title; + if (Doxygen::mainPage) + { + title = filterTitle(Doxygen::mainPage->title()); + } + return !projectName.isEmpty() && mainPageHasTitle() && qstricmp(title,projectName)!=0; +} + static void writePages(PageDef *pd,FTVHelp *ftv) { //printf("writePages()=%s pd=%p mainpage=%p\n",pd->name().data(),pd,Doxygen::mainPage); @@ -3115,8 +3130,8 @@ static void writePages(PageDef *pd,FTVHelp *ftv) } } if (hasSubPages && ftv) ftv->incContentsDepth(); - bool doIndent = (hasSections || hasSubPages) && - (pd!=Doxygen::mainPage || mainPageHasTitle()); + bool doIndent = (hasSections || hasSubPages) && + (pd!=Doxygen::mainPage || mainPageHasOwnTitle()); if (doIndent) { Doxygen::indexList->incContentsDepth(); 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 086e012..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) @@ -543,8 +541,10 @@ static void writeDefaultFooter(FTextStream &t) else unit = "chapter"; t << "% Index\n" + "\\backmatter\n" "\\newpage\n" "\\phantomsection\n" + "\\clearemptydoublepage\n" "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trRTFGeneralIndex() << "}\n" "\\printindex\n" "\n" @@ -1087,7 +1087,7 @@ void LatexGenerator::endIndexItem(const char *ref,const char *fn) { if (!ref && fn) { - t << "}{\\pageref{" << fn << "}}{}" << endl; + t << "}{\\pageref{" << stripPath(fn) << "}}{}" << endl; } } @@ -1260,7 +1260,7 @@ void LatexGenerator::startTitleHead(const char *fileName) static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); if (usePDFLatex && pdfHyperlinks && fileName) { - t << "\\hypertarget{" << stripPath(fileName) << "}{"; + t << "\\hypertarget{" << stripPath(fileName) << "}{}"; } if (Config_getBool("COMPACT_LATEX")) { @@ -1274,8 +1274,6 @@ void LatexGenerator::startTitleHead(const char *fileName) void LatexGenerator::endTitleHead(const char *fileName,const char *name) { - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); t << "}" << endl; if (name) { @@ -1285,10 +1283,6 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name) escapeMakeIndexChars(name); t << "}}" << endl; } - if (usePDFLatex && pdfHyperlinks && fileName) - { - t << "}" << endl; - } } void LatexGenerator::startTitle() @@ -1428,18 +1422,12 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *, t << "\\hypertarget{"; if (fName) t << stripPath(fName); if (anchor) t << "_" << anchor; - t << "}{"; + t << "}{}"; } } void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor) { - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); - if (usePDFLatex && pdfHyperlinks) - { - t << "}"; - } t << "\\label{"; if (fName) t << stripPath(fName); if (anchor) t << "_" << anchor; @@ -1964,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 b237d5a..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! */ @@ -3535,20 +3535,11 @@ static void filterScanline(unsigned char* out, const unsigned char* scanline, co switch(filterType) { case 0: - if(prevline) for(i = 0; i < length; i++) out[i] = scanline[i]; - else for(i = 0; i < length; i++) out[i] = scanline[i]; + for(i = 0; i < length; i++) out[i] = scanline[i]; break; case 1: - if(prevline) - { - for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; - for(i = bytewidth; i < length ; i++) out[i] = scanline[i] - scanline[i - bytewidth]; - } - else - { - for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; - for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth]; - } + for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; + for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth]; break; case 2: if(prevline) for(i = 0; i < length; i++) out[i] = scanline[i] - prevline[i]; @@ -3772,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); @@ -3800,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)*/ @@ -4134,9 +4125,12 @@ unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* file rewind(file); /*read contents of the file into the vector*/ - *outsize = 0; - *out = (unsigned char*)malloc((size_t)size); - if(size && (*out)) (*outsize) = fread(*out, 1, (size_t)size, file); + if (size>0) + { + *outsize = 0; + *out = (unsigned char*)malloc((size_t)size); + if(size && (*out)) (*outsize) = fread(*out, 1, (size_t)size, file); + } fclose(file); if(!(*out) && size) return 80; /*the above malloc failed*/ diff --git a/src/mangen.cpp b/src/mangen.cpp index 352ef15..dc02ccf 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -194,6 +194,7 @@ void ManGenerator::endTitleHead(const char *,const char *name) t << ".SH NAME" << endl; t << name << " \\- "; firstCol=FALSE; + paragraph=TRUE; inHeader=TRUE; } @@ -340,7 +341,7 @@ void ManGenerator::codify(const char *str) break; case '\n': t << "\n"; firstCol=TRUE; col=0; break; case '\\': t << "\\"; col++; break; - case '\"': c = '\''; // no break! + case '\"': // no break! default: p=writeUtf8Char(t,p-1); firstCol=FALSE; col++; break; } } @@ -828,10 +829,4 @@ void ManGenerator::endLabels() void ManGenerator::endHeaderSection() { - if (!firstCol) - { - t<< endl; firstCol=TRUE; - } } - - diff --git a/src/markdown.cpp b/src/markdown.cpp index cc86af4..fdf1b0f 100644 --- a/src/markdown.cpp +++ b/src/markdown.cpp @@ -1540,7 +1540,7 @@ static bool isTableBlock(const char *data,int size) i+=ret; // goto next line int cc2; - ret = findTableColumns(data+i,size-i,start,end,cc2); + findTableColumns(data+i,size-i,start,end,cc2); //printf("isTableBlock: %d\n",cc1==cc2); return cc1==cc2; @@ -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 a25528a..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()); + 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) @@ -270,8 +269,11 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, //{ // ol.docify(" "); //} - ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Latex); + ol.disable(OutputGenerator::Html); + ol.docify(" "); /* man page */ + if (htmlOn) ol.enable(OutputGenerator::Html); + ol.disable(OutputGenerator::Man); ol.startEmphasis(); ol.enable(OutputGenerator::Man); if (latexOn) ol.enable(OutputGenerator::Latex); @@ -289,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(); } @@ -358,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 @@ -573,8 +575,6 @@ class MemberDefImpl // FALSE => block is put before declaration. ClassDef *category; MemberDef *categoryRelation; - - unsigned tagDataWritten; }; MemberDefImpl::MemberDefImpl() : @@ -704,7 +704,6 @@ void MemberDefImpl::init(Definition *def, hasDocumentedReturnType = FALSE; docProvider = 0; isDMember = def->getDefFileName().right(2).lower()==".d"; - tagDataWritten = 0; // save separate written status for file, group, class, etc. } @@ -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; @@ -1410,8 +1409,7 @@ QCString MemberDef::getDeclType() const void MemberDef::writeDeclaration(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup, const DefType compoundType, - ClassDef *inheritedFrom,const char *inheritId) + bool inGroup, ClassDef *inheritedFrom,const char *inheritId) { //printf("%s MemberDef::writeDeclaration() inGroup=%d\n",qualifiedName().data(),inGroup); @@ -1423,7 +1421,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; - _writeTagData(compoundType); + //_writeTagData(compoundType); _addToSearchIndex(); QCString cname = d->name(); @@ -1531,9 +1529,9 @@ void MemberDef::writeDeclaration(OutputList &ol, getBodyDef(), // fileScope this, // self ltype.left(i), // text - TRUE // autoBreak + FALSE // autoBreak ); - getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd,compoundType); + getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd); //ol+=*getAnonymousEnumType()->enumDecl(); linkifyText(TextGeneratorOLImpl(ol),d,m_impl->fileDef,this,ltype.right(ltype.length()-i-l),TRUE); } @@ -1545,7 +1543,7 @@ void MemberDef::writeDeclaration(OutputList &ol, getBodyDef(), // fileScope this, // self ltype, // text - TRUE // autoBreak + FALSE // autoBreak ); } } @@ -1566,7 +1564,7 @@ void MemberDef::writeDeclaration(OutputList &ol, getBodyDef(), // fileScope this, // self ltype, // text - TRUE // autoBreak + FALSE // autoBreak ); } bool htmlOn = ol.isEnabled(OutputGenerator::Html); @@ -1666,12 +1664,16 @@ void MemberDef::writeDeclaration(OutputList &ol, // *** write arguments if (argsString() && !isObjCMethod()) { - if (!isDefine()) ol.writeString(" "); + if (!isDefine() && !isTypedef()) ol.writeString(" "); linkifyText(TextGeneratorOLImpl(ol), // out d, // scope getBodyDef(), // fileScope this, // self - argsString(), // text + isDefine() ? + (const char*)substitute(argsString(),",",", ") : + isTypedef() ? + (const char*)substitute(argsString(),")(",") (") : + argsString(), // text m_impl->annMemb, // autoBreak TRUE, // external FALSE, // keepSpaces @@ -2611,7 +2613,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline); linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.left(i)); - vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef(),definitionType()); + vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef()); linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.right(ldef.length()-i-l)); found=TRUE; @@ -2646,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; @@ -2756,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 @@ -3207,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 && @@ -3504,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); } } @@ -3547,89 +3552,83 @@ Specifier MemberDef::virtualness(int count) const return v; } -void MemberDef::_writeTagData(const DefType compoundType) +void MemberDef::writeTagFile(FTextStream &tagFile) { - unsigned typeMask = 1 << compoundType; - if ((m_impl->tagDataWritten) & typeMask) return; // member already written for this type - if (m_impl->mtype==MemberType_EnumValue && m_impl->enumScope && - m_impl->enumScope->isStrong()) return; // enum value is part of enum - static bool generateTagFile = !Config_getString("GENERATE_TAGFILE").isEmpty(); - // write tag file information of this member - if (generateTagFile && isLinkableInProject()) + if (!isLinkableInProject()) return; + tagFile << " <member kind=\""; + switch (m_impl->mtype) { - Doxygen::tagFile << " <member kind=\""; - switch (m_impl->mtype) - { - case MemberType_Define: Doxygen::tagFile << "define"; break; - case MemberType_EnumValue: Doxygen::tagFile << "enumvalue"; break; - case MemberType_Property: Doxygen::tagFile << "property"; break; - case MemberType_Event: Doxygen::tagFile << "event"; break; - case MemberType_Variable: Doxygen::tagFile << "variable"; break; - case MemberType_Typedef: Doxygen::tagFile << "typedef"; break; - case MemberType_Enumeration: Doxygen::tagFile << "enumeration"; break; - case MemberType_Function: Doxygen::tagFile << "function"; break; - case MemberType_Signal: Doxygen::tagFile << "signal"; break; - case MemberType_Friend: Doxygen::tagFile << "friend"; break; - case MemberType_DCOP: Doxygen::tagFile << "dcop"; break; - case MemberType_Slot: Doxygen::tagFile << "slot"; break; - case MemberType_Interface: Doxygen::tagFile << "interface"; break; - case MemberType_Service: Doxygen::tagFile << "service"; break; - } - if (m_impl->prot!=Public) - { - Doxygen::tagFile << "\" protection=\""; - if (m_impl->prot==Protected) Doxygen::tagFile << "protected"; - else if (m_impl->prot==Package) Doxygen::tagFile << "package"; - else /* Private */ Doxygen::tagFile << "private"; - } - if (m_impl->virt!=Normal) - { - Doxygen::tagFile << "\" virtualness=\""; - if (m_impl->virt==Virtual) Doxygen::tagFile << "virtual"; - else /* Pure */ Doxygen::tagFile << "pure"; - } - if (isStatic()) - { - Doxygen::tagFile << "\" static=\"yes"; - } - Doxygen::tagFile << "\">" << endl; - Doxygen::tagFile << " <type>" << convertToXML(typeString()) << "</type>" << endl; - Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; - Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl; - Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl; - QCString idStr = id(); - if (!idStr.isEmpty()) - { - Doxygen::tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl; - } - Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl; - if (isStrong()) + case MemberType_Define: tagFile << "define"; break; + case MemberType_EnumValue: tagFile << "enumvalue"; break; + case MemberType_Property: tagFile << "property"; break; + case MemberType_Event: tagFile << "event"; break; + case MemberType_Variable: tagFile << "variable"; break; + case MemberType_Typedef: tagFile << "typedef"; break; + case MemberType_Enumeration: tagFile << "enumeration"; break; + case MemberType_Function: tagFile << "function"; break; + case MemberType_Signal: tagFile << "signal"; break; + case MemberType_Friend: tagFile << "friend"; break; + case MemberType_DCOP: tagFile << "dcop"; break; + case MemberType_Slot: tagFile << "slot"; break; + case MemberType_Interface: tagFile << "interface"; break; + case MemberType_Service: tagFile << "service"; break; + } + if (m_impl->prot!=Public) + { + tagFile << "\" protection=\""; + if (m_impl->prot==Protected) tagFile << "protected"; + else if (m_impl->prot==Package) tagFile << "package"; + else /* Private */ tagFile << "private"; + } + if (m_impl->virt!=Normal) + { + tagFile << "\" virtualness=\""; + if (m_impl->virt==Virtual) tagFile << "virtual"; + else /* Pure */ tagFile << "pure"; + } + if (isStatic()) + { + tagFile << "\" static=\"yes"; + } + tagFile << "\">" << endl; + if (typeString()!=QCString("@")) + { + tagFile << " <type>" << convertToXML(typeString()) << "</type>" << endl; + } + tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; + tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl; + tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl; + QCString idStr = id(); + if (!idStr.isEmpty()) + { + tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl; + } + tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl; + if (isStrong()) + { + MemberList *fmdl=m_impl->enumFields; + if (fmdl) { - MemberList *fmdl=m_impl->enumFields; - if (fmdl) + MemberListIterator mli(*fmdl); + MemberDef *fmd; + for (mli.toFirst();(fmd=mli.current());++mli) { - MemberListIterator mli(*fmdl); - MemberDef *fmd; - for (mli.toFirst();(fmd=mli.current());++mli) + if (!fmd->isReference()) { - if (!fmd->isReference()) + tagFile << " <enumvalue file=\"" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension); + tagFile << "\" anchor=\"" << convertToXML(fmd->anchor()); + QCString idStr = fmd->id(); + if (!idStr.isEmpty()) { - Doxygen::tagFile << " <enumvalue file=\"" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension); - Doxygen::tagFile << "\" anchor=\"" << convertToXML(fmd->anchor()); - QCString idStr = fmd->id(); - if (!idStr.isEmpty()) - { - Doxygen::tagFile << "\" clangid=\"" << convertToXML(idStr); - } - Doxygen::tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>" << endl; + tagFile << "\" clangid=\"" << convertToXML(idStr); } + tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>" << endl; } } } - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </member>" << endl; } - m_impl->tagDataWritten |= typeMask; + writeDocAnchorsToTagFile(tagFile); + tagFile << " </member>" << endl; } void MemberDef::_computeIsConstructor() @@ -3728,8 +3727,7 @@ bool MemberDef::isDestructor() const } void MemberDef::writeEnumDeclaration(OutputList &typeDecl, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const DefType compoundType) + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd) { int enumMemCount=0; @@ -3756,7 +3754,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl, { if (isLinkableInProject() || hasDocumentedEnumValues()) { - _writeTagData(compoundType); + //_writeTagData(compoundType); _addToSearchIndex(); writeLink(typeDecl,cd,nd,fd,gd); } @@ -3784,7 +3782,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl, { MemberListIterator mli(*fmdl); MemberDef *fmd=mli.current(); - bool fmdVisible = fmd->isBriefSectionVisible(); + bool fmdVisible = fmd ? fmd->isBriefSectionVisible() : TRUE; while (fmd) { if (fmdVisible) @@ -3805,7 +3803,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl, if (fmd->hasDocumentation()) // enum value has docs { - fmd->_writeTagData(compoundType); + //fmd->_writeTagData(compoundType); fmd->_addToSearchIndex(); fmd->writeLink(typeDecl,cd,nd,fd,gd); } @@ -5096,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 4f6028a..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; //----------------------------------------------------------------------------------- @@ -376,16 +377,15 @@ class MemberDef : public Definition // output generation void writeDeclaration(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup, const DefType compoundType, - ClassDef *inheritFrom=0,const char *inheritId=0); + bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0); void writeDocumentation(MemberList *ml,OutputList &ol, const char *scopeName,Definition *container, bool inGroup,bool showEnumValues=FALSE,bool showInline=FALSE); void writeMemberDocSimple(OutputList &ol,Definition *container); void writeEnumDeclaration(OutputList &typeDecl, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const DefType compoundType); + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); + void writeTagFile(FTextStream &); void warnIfUndocumented(); MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs, diff --git a/src/membergroup.cpp b/src/membergroup.cpp index 84567e2..aa0a36e 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -112,7 +112,7 @@ void MemberGroup::writeDeclarations(OutputList &ol, //printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data()); QCString ldoc = doc; if (!ldoc.isEmpty()) ldoc.prepend("<a name=\""+anchor()+"\" id=\""+anchor()+"\"></a>"); - memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc,DefinitionIntf::TypeGroup,FALSE,showInline); + memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc,FALSE,showInline); } void MemberGroup::writePlainDeclarations(OutputList &ol, @@ -121,7 +121,7 @@ void MemberGroup::writePlainDeclarations(OutputList &ol, ) { //printf("MemberGroup::writePlainDeclarations() memberList->count()=%d\n",memberList->count()); - memberList->writePlainDeclarations(ol,cd,nd,fd,gd,DefinitionIntf::TypeGroup,inheritedFrom,inheritId); + memberList->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId); } void MemberGroup::writeDocumentation(OutputList &ol,const char *scopeName, @@ -150,7 +150,7 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, { MemberList ml(lt); ml.append(md); - ml.writePlainDeclarations(ol,cd,0,0,0,DefinitionIntf::TypeGroup,inheritedFrom,inheritId); + ml.writePlainDeclarations(ol,cd,0,0,0,inheritedFrom,inheritId); } } } @@ -326,7 +326,7 @@ void MemberGroup::addListReferences(Definition *def) name, theTranslator->trGroup(TRUE,TRUE), name, - grpHeader,0); + grpHeader,0,def); } } @@ -388,6 +388,12 @@ void MemberGroup::setRefItems(const QList<ListItemInfo> *sli) } } } + +void MemberGroup::writeTagFile(FTextStream &tagFile) +{ + memberList->writeTagFile(tagFile); +} + //-------------------------------------------------------------------------- void MemberGroupInfo::setRefItems(const QList<ListItemInfo> *sli) diff --git a/src/membergroup.h b/src/membergroup.h index 42e60c5..daf8ccb 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -33,6 +33,7 @@ class GroupDef; class OutputList; class Definition; class StorageIntf; +class FTextStream; struct ListItemInfo; /** A class representing a group of members. */ @@ -57,11 +58,12 @@ class MemberGroup Definition *container,bool showEnumValues,bool showInline); void writeDocumentationPage(OutputList &ol,const char *scopeName, Definition *container); + void writeTagFile(FTextStream &); void addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, 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 28ed37e..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; @@ -301,8 +320,7 @@ bool MemberList::declVisible() const void MemberList::writePlainDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd, - GroupDef *gd, const DefinitionIntf::DefType compoundType, - ClassDef *inheritedFrom,const char *inheritId + GroupDef *gd,ClassDef *inheritedFrom,const char *inheritId ) { //printf("----- writePlainDeclaration() ----\n"); @@ -344,7 +362,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, case MemberType_Event: { if (first) ol.startMemberList(),first=FALSE; - md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); break; } case MemberType_Enumeration: @@ -386,7 +404,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, } ol.writeString("enum "); ol.insertMemberAlign(); - md->writeEnumDeclaration(ol,cd,nd,fd,gd,compoundType); + md->writeEnumDeclaration(ol,cd,nd,fd,gd); if (!detailsLinkable) { ol.endDoxyAnchor(md->getOutputFileBase(),md->anchor()); @@ -431,7 +449,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ol.startMemberList(); first=FALSE; } - md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); break; } case MemberType_EnumValue: @@ -440,7 +458,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, { //printf("EnumValue!\n"); if (first) ol.startMemberList(),first=FALSE; - md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); } } break; @@ -466,7 +484,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ol.startMemberList(); first=FALSE; } - md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup); } md->setFromAnonymousScope(TRUE); } @@ -490,7 +508,6 @@ void MemberList::writePlainDeclarations(OutputList &ol, * @param gd non-null if this list is part of group documentation. * @param title Title to use for the member list. * @param subtitle Sub title to use for the member list. - * @param compoundType Container type for this member list. * @param showEnumValues Obsolete, always set to FALSE. * @param showInline if set to TRUE if title is rendered differently * @param inheritedFrom if not 0, the list is shown inside the @@ -500,8 +517,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, */ void MemberList::writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const char *title,const char *subtitle, - const DefinitionIntf::DefType compoundType,bool showEnumValues, + const char *title,const char *subtitle, bool showEnumValues, bool showInline,ClassDef *inheritedFrom,MemberListType lt) { (void)showEnumValues; // unused @@ -587,7 +603,7 @@ void MemberList::writeDeclarations(OutputList &ol, } else { - writePlainDeclarations(ol,cd,nd,fd,gd,compoundType,inheritedFrom,inheritId); + writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId); } //printf("memberGroupList=%p\n",memberGroupList); @@ -943,6 +959,31 @@ QCString MemberList::listTypeAsString(MemberListType type) return ""; } +void MemberList::writeTagFile(FTextStream &tagFile) +{ + MemberListIterator mli(*this); + MemberDef *md; + for ( ; (md=mli.current()) ; ++mli) + { + if (md->getLanguage()!=SrcLangExt_VHDL) + { + md->writeTagFile(tagFile); + } + else + { + VhdlDocGen::writeTagFile(md,tagFile); + } + } + if (memberGroupList) + { + MemberGroupListIterator mgli(*memberGroupList); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } +} //-------------------------------------------------------------------------- diff --git a/src/memberlist.h b/src/memberlist.h index 607eb01..4cccadc 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -55,12 +55,11 @@ class MemberList : public QList<MemberDef> void countDocMembers(bool countEnumValues=FALSE); int countInheritableMembers(ClassDef *inheritedFrom) const; void writePlainDeclarations(OutputList &ol, - ClassDef *cd,NamespaceDef *nd,FileDef *fd, - GroupDef *gd,const DefinitionIntf::DefType compoundType, + ClassDef *cd,NamespaceDef *nd,FileDef *fd, GroupDef *gd, ClassDef *inheritedFrom,const char *inheritId); void writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const char *title,const char *subtitle,const DefinitionIntf::DefType compoundType, + const char *title,const char *subtitle, bool showEnumValues=FALSE,bool showInline=FALSE, ClassDef *inheritedFrom=0,MemberListType lt=MemberListType_pubMethods); void writeDocumentation(OutputList &ol,const char *scopeName, @@ -68,6 +67,7 @@ class MemberList : public QList<MemberDef> void writeSimpleDocumentation(OutputList &ol,Definition *container); void writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container); + void writeTagFile(FTextStream &); bool declVisible() const; void addMemberGroup(MemberGroup *mg); void setInGroup(bool inGroup) { m_inGroup=inGroup; } 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/msc.cpp b/src/msc.cpp index ebbba0f..f9e919c 100644 --- a/src/msc.cpp +++ b/src/msc.cpp @@ -74,6 +74,7 @@ static bool convertMapFile(FTextStream &t,const char *mapName,const QCString rel t << externalRef(relPath,df->ref(),TRUE); if (!df->file().isEmpty()) t << df->file() << Doxygen::htmlFileExtension; if (!df->anchor().isEmpty()) t << "#" << df->anchor(); + delete df; } else { diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 2aa5728..f7c8123 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -259,6 +259,85 @@ bool NamespaceDef::hasDetailedDescription() const !documentation().isEmpty()); } +void NamespaceDef::writeTagFile(FTextStream &tagFile) +{ + tagFile << " <compound kind=\"namespace\">" << endl; + tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; + tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; + QCString idStr = id(); + if (!idStr.isEmpty()) + { + tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl; + } + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::NamespaceNestedNamespaces: + { + if (namespaceSDict) + { + SDict<NamespaceDef>::Iterator ni(*namespaceSDict); + NamespaceDef *nd; + for (ni.toFirst();(nd=ni.current());++ni) + { + if (nd->isLinkableInProject()) + { + tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl; + } + } + } + } + break; + case LayoutDocEntry::NamespaceClasses: + { + if (classSDict) + { + SDict<ClassDef>::Iterator ci(*classSDict); + ClassDef *cd; + for (ci.toFirst();(cd=ci.current());++ci) + { + if (cd->isLinkableInProject()) + { + tagFile << " <class kind=\"" << cd->compoundTypeString() + << "\">" << convertToXML(cd->name()) << "</class>" << endl; + } + } + } + } + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml) + { + ml->writeTagFile(tagFile); + } + } + break; + case LayoutDocEntry::MemberGroups: + { + if (memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } + } + break; + default: + break; + } + } + writeDocAnchorsToTagFile(tagFile); + tagFile << " </compound>" << endl; +} void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title) { @@ -496,19 +575,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol) Doxygen::searchIndex->addWord(localName(),TRUE); } - bool generateTagFile = !Config_getString("GENERATE_TAGFILE").isEmpty(); - if (generateTagFile) - { - Doxygen::tagFile << " <compound kind=\"namespace\">" << endl; - Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; - Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; - QCString idStr = id(); - if (!idStr.isEmpty()) - { - Doxygen::tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl; - } - } - Doxygen::indexList->addIndexItem(this,0); //---------------------------------------- start flexible part ------------------------------- @@ -619,12 +685,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol) endFileWithNavPath(this,ol); - if (generateTagFile) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </compound>" << endl; - } - if (Config_getBool("SEPARATE_MEMBER_PAGES")) { MemberList *allMemberList = getMemberList(MemberListType_allMembersList); @@ -772,7 +832,8 @@ void NamespaceDef::addListReferences() theTranslator->trModule(TRUE,TRUE) : theTranslator->trNamespace(TRUE,TRUE), getOutputFileBase(),displayName(), - 0 + 0, + this ); } MemberGroupSDict::Iterator mgli(*memberGroupSDict); @@ -939,10 +1000,6 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, name = nd->displayName(); } ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name); - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && nd->isLinkableInProject()) - { - Doxygen::tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl; - } ol.endMemberItem(); if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { @@ -1031,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/namespacedef.h b/src/namespacedef.h index ceb3bd7..800f639 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -33,6 +33,7 @@ class MemberDef; class NamespaceList; class MemberGroupSDict; class NamespaceSDict; +class FTextStream; /** A model of a namespace symbol. */ class NamespaceDef : public Definition @@ -51,6 +52,7 @@ class NamespaceDef : public Definition void writeDocumentation(OutputList &ol); void writeMemberPages(OutputList &ol); void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const; + void writeTagFile(FTextStream &); void insertClass(ClassDef *cd); void insertNamespace(NamespaceDef *nd); diff --git a/src/pagedef.cpp b/src/pagedef.cpp index e75327c..919a2d7 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -99,6 +99,30 @@ bool PageDef::hasParentPage() const getOuterScope()->definitionType()==Definition::TypePage; } +void PageDef::writeTagFile(FTextStream &tagFile) +{ + bool found = name()=="citelist"; + QDictIterator<RefList> rli(*Doxygen::xrefLists); + RefList *rl; + for (rli.toFirst();(rl=rli.current()) && !found;++rli) + { + if (rl->listName()==name()) + { + found=TRUE; + break; + } + } + if (!found) // not one of the generated related pages + { + tagFile << " <compound kind=\"page\">" << endl; + tagFile << " <name>" << name() << "</name>" << endl; + tagFile << " <title>" << convertToXML(title()) << "</title>" << endl; + tagFile << " <filename>" << convertToXML(getOutputFileBase()) << "</filename>" << endl; + writeDocAnchorsToTagFile(tagFile); + tagFile << " </compound>" << endl; + } +} + void PageDef::writeDocumentation(OutputList &ol) { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); @@ -200,30 +224,6 @@ void PageDef::writeDocumentation(OutputList &ol) ol.popGeneratorState(); //1.} - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - bool found = name()=="citelist"; - QDictIterator<RefList> rli(*Doxygen::xrefLists); - RefList *rl; - for (rli.toFirst();(rl=rli.current()) && !found;++rli) - { - if (rl->listName()==name()) - { - found=TRUE; - break; - } - } - if (!found) // not one of the generated related pages - { - Doxygen::tagFile << " <compound kind=\"page\">" << endl; - Doxygen::tagFile << " <name>" << name() << "</name>" << endl; - Doxygen::tagFile << " <title>" << convertToXML(title()) << "</title>" << endl; - Doxygen::tagFile << " <filename>" << getOutputFileBase() << "</filename>" << endl; - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </compound>" << endl; - } - } - Doxygen::indexList->addIndexItem(this,0,0,filterTitle(title())); } diff --git a/src/pagedef.h b/src/pagedef.h index 890829e..694d081 100644 --- a/src/pagedef.h +++ b/src/pagedef.h @@ -23,6 +23,7 @@ class PageSDict; class OutputList; +class FTextStream; /** @brief A model of a page symbol. */ class PageDef : public Definition @@ -64,6 +65,7 @@ class PageDef : public Definition QCString displayName(bool=TRUE) const { return !m_title.isEmpty() ? m_title : Definition::name(); } void writeDocumentation(OutputList &ol); + void writeTagFile(FTextStream &); private: void setNestingLevel(int l); 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 18f028b..87e70e1 100644 --- a/src/plantuml.cpp +++ b/src/plantuml.cpp @@ -20,7 +20,7 @@ #include <qdir.h> -//static const int maxCmdLine = 40960; +static const int maxCmdLine = 40960; QCString writePlantUMLSource(const QCString &outDir,const QCString &fileName,const QCString &content) { @@ -56,7 +56,24 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp static QCString plantumlJarPath = Config_getString("PLANTUML_JAR_PATH"); QCString pumlExe = "java"; - QCString pumlArgs = "-Djava.awt.headless=true -jar \""+plantumlJarPath+"plantuml.jar\" "; + QCString pumlArgs = ""; + + QStrList &pumlIncludePathList = Config_getList("PLANTUML_INCLUDE_PATH"); + char *s=pumlIncludePathList.first(); + if (s) + { + pumlArgs += "-Dplantuml.include.path=\""; + pumlArgs += s; + s = pumlIncludePathList.next(); + } + while (s) + { + pumlArgs += portable_pathListSeparator(); + pumlArgs += s; + s = pumlIncludePathList.next(); + } + if (pumlIncludePathList.first()) pumlArgs += "\" "; + pumlArgs += "-Djava.awt.headless=true -jar \""+plantumlJarPath+"plantuml.jar\" "; pumlArgs+="-o \""; pumlArgs+=outDir; pumlArgs+="\" "; @@ -79,19 +96,31 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp pumlArgs+=" \""; pumlArgs+=baseName; pumlArgs+=".pu\" "; + pumlArgs+="-charset " + Config_getString("INPUT_ENCODING") + " "; int exitCode; //printf("*** running: %s %s outDir:%s %s\n",pumlExe.data(),pumlArgs.data(),outDir,outFile); msg("Running PlantUML on generated file %s.pu\n",baseName); portable_sysTimerStart(); if ((exitCode=portable_system(pumlExe,pumlArgs,FALSE))!=0) { - err("Problems running PlantUML. Verify that the command 'java -jar \"%splantuml.jar\" -h' works from the command line\n", - plantumlJarPath.data()); + err("Problems running PlantUML. Verify that the command 'java -jar \"%splantuml.jar\" -h' works from the command line. Exit code: %d\n", + plantumlJarPath.data(),exitCode); } else if (Config_getBool("DOT_CLEANUP")) { QFile(QCString(baseName)+".pu").remove(); } portable_sysTimerStop(); + if ( (format==PUML_EPS) && (Config_getBool("USE_PDFLATEX")) ) + { + QCString epstopdfArgs(maxCmdLine); + epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",baseName,baseName); + portable_sysTimerStart(); + if ((exitCode=portable_system("epstopdf",epstopdfArgs))!=0) + { + err("Problems running epstopdf. Check your TeX installation! Exit code: %d\n",exitCode); + } + portable_sysTimerStop(); + } } diff --git a/src/portable.cpp b/src/portable.cpp index 258c50f..7f6be6e 100644 --- a/src/portable.cpp +++ b/src/portable.cpp @@ -169,10 +169,16 @@ int portable_system(const char *command,const char *args,bool commandHasConsole) else if (sInfo.hProcess) /* executable was launched, wait for it to finish */ { WaitForSingleObject(sInfo.hProcess,INFINITE); + /* get process exit code */ + DWORD exitCode; + if (!GetExitCodeProcess(sInfo.hProcess,&exitCode)) + { + exitCode = -1; + } CloseHandle(sInfo.hProcess); + return exitCode; } } - return 0; #endif } @@ -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; @@ -207,6 +207,7 @@ class DefineManager if (dpf==0) { dpf = new DefinesPerFile; + m_fileMap.insert(fileName,dpf); } dpf->addDefine(def); } @@ -223,6 +224,7 @@ class DefineManager if (dpf==0) { dpf = new DefinesPerFile; + m_fileMap.insert(fromFileName,dpf); } dpf->addInclude(toFileName); } @@ -2283,6 +2285,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } <DefName>{ID}/("\\\n")*"(" { // define with argument //printf("Define() `%s'\n",yytext); + delete g_argDict; g_argDict = new QDict<int>(31); g_argDict->setAutoDelete(TRUE); g_defArgs = 0; @@ -2296,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; @@ -2325,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); @@ -2354,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/qhp.cpp b/src/qhp.cpp index 9e6cc5d..757f547 100644 --- a/src/qhp.cpp +++ b/src/qhp.cpp @@ -53,7 +53,7 @@ static QCString makeRef(const char * withoutExtension, const char * anchor) return result+"#"+anchor; } -Qhp::Qhp() : m_prevSectionLevel(0), m_sectionLevel(0) +Qhp::Qhp() : m_prevSectionLevel(0), m_sectionLevel(0), m_skipMainPageSection(FALSE) { m_doc.setIndentLevel(0); m_toc.setIndentLevel(2); @@ -177,14 +177,13 @@ void Qhp::finalize() void Qhp::incContentsDepth() { m_sectionLevel++; - //printf("Qhp::incContentsDepth() %d->%d\n",m_sectionLevel-1,m_sectionLevel); } void Qhp::decContentsDepth() { - //printf("Qhp::decContentsDepth() %d->%d\n",m_sectionLevel,m_sectionLevel-1); - if (m_sectionLevel <= 0) + if (m_sectionLevel<=0 || (m_sectionLevel==1 && m_skipMainPageSection)) { + m_skipMainPageSection=FALSE; return; } m_sectionLevel--; @@ -208,6 +207,7 @@ void Qhp::addContentsItem(bool /*isDir*/, const char * name, setPrevSection(name, f, anchor, m_sectionLevel); // Close sections as needed + //printf("Qhp::addContentsItem() closing %d sections\n",diff); for (; diff > 0; diff--) { m_toc.close("section"); @@ -331,6 +331,10 @@ void Qhp::handlePrevSection() m_toc.openClose("section", attributes); } } + else + { + m_skipMainPageSection=TRUE; + } clearPrevSection(); } @@ -64,8 +64,7 @@ class Qhp : public IndexIntf int m_prevSectionLevel; int m_sectionLevel; - //QCString m_prevIdName; - //QCString m_prevIdRef; + bool m_skipMainPageSection; }; #endif // DOXYGEN_QHP_H 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/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 5e27137..a11e42f 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -299,11 +299,12 @@ void RTFDocVisitor::visit(DocVerbatim *s) static int mscindex = 1; QCString baseName(4096); - baseName.sprintf("%s%d", + baseName.sprintf("%s%d%s", (Config_getString("RTF_OUTPUT")+"/inline_mscgraph_").data(), - mscindex++ + mscindex++, + ".msc" ); - QFile file(baseName+".msc"); + QFile file(baseName); if (!file.open(IO_WriteOnly)) { err("Could not open file %s for writing\n",baseName.data()); @@ -1685,7 +1686,7 @@ void RTFDocVisitor::writeMscFile(const QCString &fileName) baseName=baseName.right(baseName.length()-i-1); } QCString outDir = Config_getString("RTF_OUTPUT"); - writeMscGraphFromFile(fileName+".msc",outDir,baseName,MSC_BITMAP); + writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP); if (!m_lastIsPara) m_t << "\\par" << endl; m_t << "{" << endl; m_t << rtf_Style_Reset; @@ -1705,7 +1706,7 @@ void RTFDocVisitor::writeDiaFile(const QCString &fileName) baseName=baseName.right(baseName.length()-i-1); } QCString outDir = Config_getString("RTF_OUTPUT"); - writeDiaGraphFromFile(fileName+".dia",outDir,baseName,DIA_BITMAP); + writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP); if (!m_lastIsPara) m_t << "\\par" << endl; m_t << "{" << endl; m_t << rtf_Style_Reset; 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 8370f13..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 @@ -2245,7 +2245,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) <FindMembers>"Q_OBJECT" { // Qt object macro } <FindMembers>"Q_PROPERTY" { // Qt property declaration - //current->protection = protection = Public ; // see bug734245 + current->protection = Public ; // see bug734245 & bug735462 current->mtype = mtype = Property; current->type.resize(0); BEGIN(QtPropType); @@ -2444,7 +2444,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } <StaticAssert>"(" { lastSkipRoundContext = FindMembers; - roundCount=1; + roundCount=0; BEGIN(SkipRound); } <StaticAssert>{BN}+ { lineCount(); } diff --git a/src/searchindex.cpp b/src/searchindex.cpp index a550eb1..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 @@ -444,7 +445,7 @@ SearchIndexExternal::~SearchIndexExternal() static QCString definitionToName(Definition *ctx) { - if (ctx->definitionType()==Definition::TypeMember) + if (ctx && ctx->definitionType()==Definition::TypeMember) { MemberDef *md = (MemberDef*)ctx; if (md->isFunction()) @@ -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\"> </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 23b8f13..be0472a 100644 --- a/src/tagreader.cpp +++ b/src/tagreader.cpp @@ -95,7 +95,7 @@ class TagMemberInfo class TagClassInfo { public: - enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category }; + enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category, Enum, Service, Singleton }; TagClassInfo() { bases=0, templateArguments=0; members.setAutoDelete(TRUE); isObjC=FALSE; } ~TagClassInfo() { delete bases; delete templateArguments; } QCString name; @@ -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; @@ -301,6 +313,12 @@ class TagFileParser : public QXmlDefaultHandler m_curClass->kind = TagClassInfo::Interface; m_state = InClass; } + else if (kind=="enum") + { + m_curClass = new TagClassInfo; + m_curClass->kind = TagClassInfo::Enum; + m_state = InClass; + } else if (kind=="exception") { m_curClass = new TagClassInfo; @@ -319,6 +337,18 @@ class TagFileParser : public QXmlDefaultHandler m_curClass->kind = TagClassInfo::Category; m_state = InClass; } + else if (kind=="service") + { + m_curClass = new TagClassInfo; + m_curClass->kind = TagClassInfo::Service; + m_state = InClass; + } + else if (kind=="singleton") + { + m_curClass = new TagClassInfo; + m_curClass->kind = TagClassInfo::Singleton; + m_state = InClass; + } else if (kind=="file") { m_curFile = new TagFileInfo; @@ -1286,9 +1316,12 @@ void TagFileParser::buildLists(Entry *root) case TagClassInfo::Struct: ce->spec = Entry::Struct; break; case TagClassInfo::Union: ce->spec = Entry::Union; break; case TagClassInfo::Interface: ce->spec = Entry::Interface; break; + case TagClassInfo::Enum: ce->spec = Entry::Enum; break; case TagClassInfo::Exception: ce->spec = Entry::Exception; break; case TagClassInfo::Protocol: ce->spec = Entry::Protocol; break; case TagClassInfo::Category: ce->spec = Entry::Category; break; + case TagClassInfo::Service: ce->spec = Entry::Service; break; + case TagClassInfo::Singleton: ce->spec = Entry::Singleton; break; } ce->name = tci->name; if (tci->kind==TagClassInfo::Protocol) 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 ec8554b..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) { @@ -1165,7 +1157,7 @@ class FilterAlphaIndex } static QCString keyToLabel(uint startLetter) { - char s[10]; + char s[11]; // 0x12345678 + '\0' if (startLetter>0x20 && startLetter<=0x7f) // printable ASCII character { s[0]=tolower((char)startLetter); @@ -1319,7 +1311,15 @@ class FilterDivisibleBy } if (v.type()==TemplateVariant::Integer && n.type()==TemplateVariant::Integer) { - return TemplateVariant((v.toInt()%n.toInt())==0); + int ni = n.toInt(); + if (ni>0) + { + return TemplateVariant((v.toInt()%ni)==0); + } + else + { + return TemplateVariant(FALSE); + } } else { @@ -1427,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; } @@ -1478,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); @@ -1569,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) @@ -1974,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() @@ -2052,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) { @@ -2230,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++; } @@ -2289,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; } @@ -2395,7 +2413,7 @@ TemplateVariant TemplateContextImpl::get(const QCString &name) const warn(m_templateName,m_line,"using . on an object '%s' is not an struct or list",objName.data()); return TemplateVariant(); } - } while (i!=-1); + } return v; } } @@ -2595,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); @@ -2633,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) { @@ -2687,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; }; @@ -2752,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; @@ -2816,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) @@ -2852,7 +2905,7 @@ class TemplateNodeRange : public TemplateNodeCreator<TemplateNodeRange> { public: TemplateNodeRange(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data) - : TemplateNodeCreator<TemplateNodeRange>(parser,parent,line) + : TemplateNodeCreator<TemplateNodeRange>(parser,parent,line), m_down(FALSE) { TRACE(("{TemplateNodeRange(%s)\n",data.data())); QCString start,end; @@ -2928,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()); @@ -3022,7 +3076,7 @@ class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor> { public: TemplateNodeFor(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data) - : TemplateNodeCreator<TemplateNodeFor>(parser,parent,line) + : TemplateNodeCreator<TemplateNodeFor>(parser,parent,line), m_reversed(FALSE) { TRACE(("{TemplateNodeFor(%s)\n",data.data())); QCString exprStr; @@ -3089,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()); @@ -3184,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 @@ -3231,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) @@ -3311,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; @@ -3329,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 @@ -3390,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) { @@ -3430,7 +3488,7 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate> { public: TemplateNodeCreate(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data) - : TemplateNodeCreator<TemplateNodeCreate>(parser,parent,line) + : TemplateNodeCreator<TemplateNodeCreate>(parser,parent,line), m_templateExpr(0), m_fileExpr(0) { TRACE(("TemplateNodeCreate(%s)\n",data.data())); ExpressionParser ep(parser,line); @@ -3466,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) { @@ -3510,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) @@ -3521,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)) { @@ -3593,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(); @@ -3613,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) { @@ -3635,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(); @@ -3706,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; @@ -3749,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); } @@ -3784,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); } @@ -3847,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); @@ -3958,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) { @@ -3988,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); @@ -4005,7 +4062,7 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers> { public: TemplateNodeMarkers(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data) - : TemplateNodeCreator<TemplateNodeMarkers>(parser,parent,line) + : TemplateNodeCreator<TemplateNodeMarkers>(parser,parent,line), m_listExpr(0), m_patternExpr(0) { TRACE(("{TemplateNodeMarkers(%s)\n",data.data())); int i = data.find(" in "); @@ -4030,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) { @@ -4098,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 { @@ -4144,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"); //---------------------------------------------------------- @@ -4245,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, @@ -4257,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) @@ -4464,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)); } @@ -4599,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); @@ -4614,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; @@ -4673,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)) { @@ -4689,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_br.h b/src/translator_br.h index b381495..b7bd604 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (C) 1997-2014 by Dimitri van Heesch. + * Copyright (C) 1997-2013 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 @@ -15,26 +15,30 @@ * Thanks to Jorge Ramos, Fernando Carijo and others for their contributions. * * History: - * 20110628: - * - Updated to 1.7.5; - * 20100531: - * - Updated to 1.6.3; - * 20091218: - * - Updated to 1.6.1; - * - Copyright year updated; - * - Translation updates suggested by Fernando Carijó added; - * 20080709: + * 20131129: + * - Updated to 1.8.5; + * - Translation in the method trFileMembers() fixed; + * - Translation in the method trEnumerationValues() fixed; + * 20110628: + * - Updated to 1.7.5; + * 20100531: + * - Updated to 1.6.3; + * 20091218: + * - Updated to 1.6.1; + * - Copyright year updated; + * - Translation updates suggested by Fernando Carijó added; + * 20080709: * - References to MAX_DOT_GRAPH_HEIGHT removed from trLegendDocs(). - * 20080206: - * - Method trTypeContraints() renamed to trTypeConstraints(). - * 20071216: + * 20080206: + * - Method trTypeContraints() renamed to trTypeConstraints(). + * 20071216: * - New methods since 1.5.4 updated. - * Previous history removed from this version. + * Previous history removed from this version. */ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -class TranslatorBrazilian : public TranslatorAdapter_1_8_0 +class TranslatorBrazilian : public Translator { public: @@ -194,7 +198,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0 } else { - return "Arquivos Membros"; + return "Membros dos Arquivos"; } } @@ -432,7 +436,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0 * list of (global) variables */ virtual QCString trEnumerationValues() - { return "Valores enumerados"; } + { return "Valores de enumerações"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines @@ -1834,5 +1838,185 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0 /*! Header for the graph showing the directory dependencies */ virtual QCString trDirDepGraph(const char *name) { return QCString("Grafo de dependências do diretório ")+name+":"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.8.0 +////////////////////////////////////////////////////////////////////////// + + /*! Detail level selector shown for hierarchical indices */ + virtual QCString trDetailLevel() + { return "nível de detalhes"; } + + /*! Section header for list of template parameters */ + virtual QCString trTemplateParameters() + { return "Parâmetros de template"; } + + /*! Used in dot graph when UML_LOOK is enabled and there are many fields */ + virtual QCString trAndMore(const QCString &number) + { return "e "+number+" mais..."; } + + /*! Used file list for a Java enum */ + virtual QCString trEnumGeneratedFromFiles(bool single) + { QCString result = "A documentação para esta enumeração foi gerada a partir"; + if (single) { + result += "do seguinte arquivo:"; + } else { + result += "dos seguintes arquivos:"; + } + return result; + } + + /*! Header of a Java enum page (Java enums are represented as classes). */ + virtual QCString trEnumReference(const char *name) + { + QCString result = "Referência da enumeração "; + return result + name; + } + + /*! Used for a section containing inherited members */ + virtual QCString trInheritedFrom(const char *members,const char *what) + { return QCString(members)+" herdados de "+what; } + + /*! Header of the sections with inherited members specific for the + * base class(es) + */ + virtual QCString trAdditionalInheritedMembers() + { return "Outros membros herdados"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.8.2 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a tooltip for the toggle button that appears in the + * navigation tree in the HTML output when GENERATE_TREEVIEW is + * enabled. This tooltip explains the meaning of the button. + */ + virtual QCString trPanelSynchronisationTooltip(bool enable) + { + QCString opt = enable ? "ativar" : "desativar"; + return "clique para "+opt+" a sincronização do painel"; + } + + /*! Used in a method of an Objective-C class that is declared in a + * a category. Note that the @1 marker is required and is replaced + * by a link. + */ + virtual QCString trProvidedByCategory() + { + return "Provido pela categoria @1."; + } + + /*! Used in a method of an Objective-C category that extends a class. + * Note that the @1 marker is required and is replaced by a link to + * the class method. + */ + virtual QCString trExtendsClass() + { + return "estende a classe @1."; + } + + /*! Used as the header of a list of class methods in Objective-C. + * These are similar to static public member functions in C++. + */ + virtual QCString trClassMethods() + { + return "Métodos de classe"; + } + + /*! Used as the header of a list of instance methods in Objective-C. + * These are similar to public member functions in C++. + */ + virtual QCString trInstanceMethods() + { + return "Métodos de instância"; + } + + /*! Used as the header of the member functions of an Objective-C class. + */ + virtual QCString trMethodDocumentation() + { + return "Documentação do método"; + } + + /*! Used as the title of the design overview picture created for the + * VHDL output. + */ + virtual QCString trDesignOverview() + { + // I'm not sure how to accurately translate it + return "Visão geral do design"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.8.4 +////////////////////////////////////////////////////////////////////////// + + /** old style UNO IDL services: implemented interfaces */ + virtual QCString trInterfaces() + { return "Interfaces Exportadas"; } + + /** old style UNO IDL services: inherited services */ + virtual QCString trServices() + { return "Serviços Incluídos"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroups() + { return "Grupos de Constantes"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroupReference(const char *namespaceName) + { + QCString result = "Referência do grupo de constantes "; + result += namespaceName; + return result; + } + + /** UNO IDL service page title */ + virtual QCString trServiceReference(const char *sName) + { + QCString result = "Referência do serviço "; + result += sName; + return result; + } + + /** UNO IDL singleton page title */ + virtual QCString trSingletonReference(const char *sName) + { + QCString result = "Referência do Singleton "; + result += sName; + return result; + } + + /** UNO IDL service page */ + virtual QCString trServiceGeneratedFromFiles(bool single) + { + // single is true implies a single file + QCString result=(QCString)"A documentação para este serviço " + "foi gerada a partir "; + if (single) { + result+="do seguinte arquivo:"; + } else { + result+="dos: seguintes arquivos:"; + } + return result; + } + + /** UNO IDL singleton page */ + virtual QCString trSingletonGeneratedFromFiles(bool single) + { + // single is true implies a single file + QCString result=(QCString)"A documentação para este singleton " + "foi gerada a partir "; + if (single) { + result+="do seguinte arquivo:"; + } else { + result+="dos: seguintes arquivos:"; + } + + return result; + } + +////////////////////////////////////////////////////////////////////////// }; #endif + 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/translator_kr.h b/src/translator_kr.h index 6919763..18337a5 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -677,10 +677,10 @@ class TranslatorKorean : public Translator if (i!=numEntries-1) // not the last entry, so we need a separator { - if (i<numEntries-2) // not the fore last entry - result+=", "; - else // the fore last entry + //if (i<numEntries-2) // not the fore last entry result+=", "; + //else // the fore last entry + // result+=", "; // TODO: does the 'and' need to be translated here? } } return result; @@ -1203,9 +1203,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trClass(bool first_capital, bool singular) + virtual QCString trClass(bool, bool singular) { - QCString result((first_capital ? "클래스" : "클래스")); + QCString result("클래스"); if (!singular) result+="들"; return result; } @@ -1214,9 +1214,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trFile(bool first_capital, bool singular) + virtual QCString trFile(bool, bool singular) { - QCString result((first_capital ? "파일" : "파일")); + QCString result("파일"); if (!singular) result+="들"; return result; } @@ -1225,9 +1225,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trNamespace(bool first_capital, bool singular) + virtual QCString trNamespace(bool, bool singular) { - QCString result((first_capital ? "네임스페이스" : "네임스페이스")); + QCString result("네임스페이스"); if (!singular) result+="들"; return result; } @@ -1236,9 +1236,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trGroup(bool first_capital, bool singular) + virtual QCString trGroup(bool, bool singular) { - QCString result((first_capital ? "그룹" : "그룹")); + QCString result("그룹"); if (!singular) result+="들"; return result; } @@ -1247,9 +1247,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trPage(bool first_capital, bool singular) + virtual QCString trPage(bool, bool singular) { - QCString result((first_capital ? "페이지" : "페이지")); + QCString result("페이지"); if (!singular) result+="들"; return result; } @@ -1258,9 +1258,9 @@ class TranslatorKorean : public Translator * 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 ? "멤버" : "멤버")); + QCString result("멤버"); if (!singular) result+="들"; return result; } @@ -1269,9 +1269,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trGlobal(bool first_capital, bool singular) + virtual QCString trGlobal(bool, bool singular) { - QCString result((first_capital ? "전역" : "전역")); + QCString result("전역"); if (!singular) result+=""; return result; } @@ -1282,9 +1282,9 @@ class TranslatorKorean : public Translator /*! This text is generated when the \\author command is used and * for the author section in man pages. */ - virtual QCString trAuthor(bool first_capital, bool singular) + virtual QCString trAuthor(bool, bool singular) { - QCString result((first_capital ? "작성자" : "작성자")); + QCString result("작성자"); if (!singular) result+="들"; return result; } @@ -1509,9 +1509,9 @@ class TranslatorKorean : public Translator /*! This returns the word directory with or without starting capital * (\a first_capital) and in sigular or plural form (\a singular). */ - virtual QCString trDir(bool first_capital, bool singular) + virtual QCString trDir(bool, bool singular) { - QCString result((first_capital ? "디렉토리" : "디렉토리")); + QCString result("디렉토리"); if (singular) result+=""; else result+="들"; return result; } @@ -1690,9 +1690,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trModule(bool first_capital, bool singular) + virtual QCString trModule(bool, bool singular) { - QCString result((first_capital ? "모듈" : "모듈")); + QCString result("모듈"); if (!singular) result+="들"; return result; } @@ -1725,9 +1725,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trType(bool first_capital, bool singular) + virtual QCString trType(bool, bool singular) { - QCString result((first_capital ? "타입" : "타입")); + QCString result("타입"); if (!singular) result+="들"; return result; } @@ -1735,9 +1735,9 @@ class TranslatorKorean : public Translator * be followed by a single name or by a list of names * of the category. */ - virtual QCString trSubprogram(bool first_capital, bool singular) + virtual QCString trSubprogram(bool, bool singular) { - QCString result((first_capital ? "서브프로그램" : "서브프로그램")); + QCString result("서브프로그램"); if (!singular) result+="들"; return result; } diff --git a/src/translator_lt.h b/src/translator_lt.h index 000dc6e..174170e 100644 --- a/src/translator_lt.h +++ b/src/translator_lt.h @@ -197,7 +197,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 } else { - return "Globalūs Nariai"; + return "Failų Nariai"; } } diff --git a/src/translator_pt.h b/src/translator_pt.h index 95a62b0..13422f6 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (C) 1997-2014 by Dimitri van Heesch. + * Copyright (C) 1997-2013 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 @@ -24,6 +24,9 @@ * VERSION HISTORY * --------------- * History: + * 20131129: + * - Updated to 1.8.5; + * - Translation in the method trFileMembers() fixed; * 20110628: * - Updated to 1.7.5; * - All obsolete methods have been removed; @@ -52,7 +55,7 @@ #define TRANSLATOR_PT_H -class TranslatorPortuguese : public TranslatorAdapter_1_8_0 +class TranslatorPortuguese : public Translator { public: @@ -216,7 +219,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0 } else { - return "Ficheiros membro"; + return "Membros dos Ficheiros"; } } @@ -442,7 +445,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0 * list of (global) variables */ QCString trEnumerationValues() - { return "Valores da enumeração"; } + { return "Valores de enumerações"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines @@ -1835,6 +1838,185 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0 /*! Header for the graph showing the directory dependencies */ virtual QCString trDirDepGraph(const char *name) { return QCString("Grafo de dependências do directório ")+name+":"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.8.0 +////////////////////////////////////////////////////////////////////////// + + /*! Detail level selector shown for hierarchical indices */ + virtual QCString trDetailLevel() + { return "nível de detalhes"; } + + /*! Section header for list of template parameters */ + virtual QCString trTemplateParameters() + { return "Parâmetros de template"; } + + /*! Used in dot graph when UML_LOOK is enabled and there are many fields */ + virtual QCString trAndMore(const QCString &number) + { return "e "+number+" mais..."; } + + /*! Used file list for a Java enum */ + virtual QCString trEnumGeneratedFromFiles(bool single) + { QCString result = "A documentação para esta enumeração foi gerada a partir"; + if (single) { + result += "do seguinte ficheiro:"; + } else { + result += "dos seguintes ficheiros:"; + } + return result; + } + + /*! Header of a Java enum page (Java enums are represented as classes). */ + virtual QCString trEnumReference(const char *name) + { + QCString result = "Referência da enumeração "; + return result + name; + } + + /*! Used for a section containing inherited members */ + virtual QCString trInheritedFrom(const char *members,const char *what) + { return QCString(members)+" herdados de "+what; } + + /*! Header of the sections with inherited members specific for the + * base class(es) + */ + virtual QCString trAdditionalInheritedMembers() + { return "Outros membros herdados"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.8.2 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a tooltip for the toggle button that appears in the + * navigation tree in the HTML output when GENERATE_TREEVIEW is + * enabled. This tooltip explains the meaning of the button. + */ + virtual QCString trPanelSynchronisationTooltip(bool enable) + { + QCString opt = enable ? "ativar" : "desativar"; + return "clique para "+opt+" a sincronização do painel"; + } + + /*! Used in a method of an Objective-C class that is declared in a + * a category. Note that the @1 marker is required and is replaced + * by a link. + */ + virtual QCString trProvidedByCategory() + { + return "Provido pela categoria @1."; + } + + /*! Used in a method of an Objective-C category that extends a class. + * Note that the @1 marker is required and is replaced by a link to + * the class method. + */ + virtual QCString trExtendsClass() + { + return "estende a classe @1."; + } + + /*! Used as the header of a list of class methods in Objective-C. + * These are similar to static public member functions in C++. + */ + virtual QCString trClassMethods() + { + return "Métodos de classe"; + } + + /*! Used as the header of a list of instance methods in Objective-C. + * These are similar to public member functions in C++. + */ + virtual QCString trInstanceMethods() + { + return "Métodos de instância"; + } + + /*! Used as the header of the member functions of an Objective-C class. + */ + virtual QCString trMethodDocumentation() + { + return "Documentação do método"; + } + + /*! Used as the title of the design overview picture created for the + * VHDL output. + */ + virtual QCString trDesignOverview() + { + // I'm not sure how to accurately translate it + return "Visão geral do design"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.8.4 +////////////////////////////////////////////////////////////////////////// + + /** old style UNO IDL services: implemented interfaces */ + virtual QCString trInterfaces() + { return "Interfaces Exportadas"; } + + /** old style UNO IDL services: inherited services */ + virtual QCString trServices() + { return "Serviços Incluídos"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroups() + { return "Grupos de Constantes"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroupReference(const char *namespaceName) + { + QCString result = "Referência do grupo de constantes "; + result += namespaceName; + return result; + } + + /** UNO IDL service page title */ + virtual QCString trServiceReference(const char *sName) + { + QCString result = "Referência do serviço "; + result += sName; + return result; + } + + /** UNO IDL singleton page title */ + virtual QCString trSingletonReference(const char *sName) + { + QCString result = "Referência do Singleton "; + result += sName; + return result; + } + + /** UNO IDL service page */ + virtual QCString trServiceGeneratedFromFiles(bool single) + { + // single is true implies a single file + QCString result=(QCString)"A documentação para este serviço " + "foi gerada a partir "; + if (single) { + result+="do seguinte ficheiro:"; + } else { + result+="dos: seguintes ficheiros:"; + } + return result; + } + + /** UNO IDL singleton page */ + virtual QCString trSingletonGeneratedFromFiles(bool single) + { + // single is true implies a single file + QCString result=(QCString)"A documentação para este singleton " + "foi gerada a partir "; + if (single) { + result+="do seguinte ficheiro:"; + } else { + result+="dos: seguintes ficheiros:"; + } + + return result; + } + +////////////////////////////////////////////////////////////////////////// }; #endif diff --git a/src/translator_ru.h b/src/translator_ru.h index 54174d7..c06d911 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -1605,7 +1605,7 @@ class TranslatorRussian : public Translator } else { - if (isTemplate) result+=" Шаблон "; + result+=" Шаблон "; switch(compType) { case ClassDef::Class: result+="модуля"; break; diff --git a/src/translator_sr.h b/src/translator_sr.h index f58ac13..09b6534 100644 --- a/src/translator_sr.h +++ b/src/translator_sr.h @@ -188,14 +188,14 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) - { - return "Članovi datoteke"; - } - else - { - return "Članovi datoteke"; - } + //if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + //{ + // return "Članovi datoteke"; // TODO: translate me + //} + //else + //{ + return "Članovi datoteke"; + //} } /*! This is put above each page as a link to all related pages. */ diff --git a/src/translator_tw.h b/src/translator_tw.h index 581d7fe..9da3365 100644 --- a/src/translator_tw.h +++ b/src/translator_tw.h @@ -749,8 +749,7 @@ class TranslatorChinesetraditional : public Translator /*! This is put at the bottom of a class documentation page and is * followed by a list of files that were used to generate the page. */ - virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, - bool single) + virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,bool) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file QCString result=(QCString)"此"; @@ -766,7 +765,7 @@ class TranslatorChinesetraditional : public Translator default: break; } result+=" 文件是由下列檔案中產生"; - if (single) result+=":"; else result+=":"; + result+=":"; return result; } @@ -1948,21 +1947,21 @@ class TranslatorChinesetraditional : public Translator return result; } /** UNO IDL service page */ - virtual QCString trServiceGeneratedFromFiles(bool single) + virtual QCString trServiceGeneratedFromFiles(bool) { // single is true implies a single file QCString result=(QCString)"本服務的文件由以下的檔案" "所產生"; - if (single) result+=":"; else result+=":"; + result+=":"; return result; } /** UNO IDL singleton page */ - virtual QCString trSingletonGeneratedFromFiles(bool single) + virtual QCString trSingletonGeneratedFromFiles(bool) { // single is true implies a single file QCString result=(QCString)"本singleton的文件由下面的檔案" "所產生"; - if (single) result+=":"; else result+=":"; + result+=":"; return result; } diff --git a/src/translator_ua.h b/src/translator_ua.h index b7ca86a..45efd6e 100644 --- a/src/translator_ua.h +++ b/src/translator_ua.h @@ -1596,7 +1596,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 } else { - if (isTemplate) result+=" Шаблон "; + result+=" Шаблон "; switch(compType) { case ClassDef::Class: result+="модуля"; break; diff --git a/src/translator_vi.h b/src/translator_vi.h index 54c68b8..dd0a8f1 100644 --- a/src/translator_vi.h +++ b/src/translator_vi.h @@ -749,8 +749,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 /*! This is put at the bottom of a class documentation page and is * followed by a list of files that were used to generate the page. */ - virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, - bool single) + virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,bool) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file QCString result=(QCString)"Thông tin cho "; @@ -766,7 +765,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 default: break; } result+=" được biên soạn từ các file sau đây"; - if (single) result+=":"; else result+=":"; + result+=":"; return result; } @@ -1501,10 +1500,9 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 /*! This returns the word directory with or without starting capital * (\a first_capital) and in sigular or plural form (\a singular). */ - virtual QCString trDir(bool first_capital, bool singular) + virtual QCString trDir(bool first_capital, bool) { QCString result((first_capital ? "Thư mục" : "thư mục")); - if (singular) result+=""; else result+=""; return result; } diff --git a/src/util.cpp b/src/util.cpp index a524922..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; } @@ -2190,7 +2191,7 @@ QCString argListToString(ArgumentList *al,bool useCanonicalType,bool showDefVals return removeRedundantWhiteSpace(result); } -QCString tempArgListToString(ArgumentList *al) +QCString tempArgListToString(ArgumentList *al,SrcLangExt lang) { QCString result; if (al==0) return result; @@ -2209,6 +2210,10 @@ QCString tempArgListToString(ArgumentList *al) { result+="in "; } + if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp) + { + result+=a->type+" "; + } result+=a->name; } else // extract name from type @@ -3232,7 +3237,7 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, // all arguments. 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 (!matchArgument(srcA,dstA,className,namespaceName, usingNamespaces,usingClasses)) @@ -3665,7 +3670,7 @@ bool matchArguments2(Definition *srcScope,FileDef *srcFileScope,ArgumentList *sr // all arguments. 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 (!matchArgument2(srcScope,srcFileScope,srcA, dstScope,dstFileScope,dstA) @@ -3695,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()) { @@ -4711,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; @@ -4767,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; @@ -4909,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); @@ -5026,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) { @@ -5985,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); @@ -6004,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 { @@ -6245,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 { @@ -6322,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) @@ -6347,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; @@ -6458,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!=' ') @@ -6515,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) { @@ -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); @@ -229,7 +229,7 @@ QCString removeRedundantWhiteSpace(const QCString &s); QCString argListToString(ArgumentList *al,bool useCanonicalType=FALSE,bool showDefVals=TRUE); -QCString tempArgListToString(ArgumentList *al); +QCString tempArgListToString(ArgumentList *al,SrcLangExt lang); QCString generateMarker(int id); @@ -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 0617ea6..3f7cd1d 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -479,7 +479,11 @@ static QList<MemberDef>* getPorts(ClassDef *cd) QList<MemberDef> *portList=new QList<MemberDef>; MemberList *ml=cd->getMemberList(MemberListType_variableMembers); - if (ml==0) return NULL; + if (ml==0) + { + delete portList; + return 0; + } MemberListIterator fmni(*ml); @@ -733,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) @@ -937,9 +941,8 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql, Argument *arg,*arg1; int equ=0; - for (;(arg=ali.current());++ali) + for (;(arg=ali.current()) && (arg1=ali1.current());++ali,++ali1) { - arg1=ali1.current(); ++ali1; equ+=abs(compareString(arg->type,arg1->type)); QCString s1=arg->type; @@ -1442,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"); @@ -1461,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+=" "; } @@ -1782,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); @@ -1946,6 +1934,48 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit return hasParams; } +void VhdlDocGen::writeTagFile(MemberDef *mdef,FTextStream &tagFile) +{ + tagFile << " <member kind=\""; + if (VhdlDocGen::isGeneric(mdef)) tagFile << "generic"; + if (VhdlDocGen::isPort(mdef)) tagFile << "port"; + if (VhdlDocGen::isEntity(mdef)) tagFile << "entity"; + if (VhdlDocGen::isComponent(mdef)) tagFile << "component"; + if (VhdlDocGen::isVType(mdef)) tagFile << "type"; + if (VhdlDocGen::isConstant(mdef)) tagFile << "constant"; + if (VhdlDocGen::isSubType(mdef)) tagFile << "subtype"; + if (VhdlDocGen::isVhdlFunction(mdef)) tagFile << "function"; + if (VhdlDocGen::isProcedure(mdef)) tagFile << "procedure"; + if (VhdlDocGen::isProcess(mdef)) tagFile << "process"; + if (VhdlDocGen::isSignals(mdef)) tagFile << "signal"; + if (VhdlDocGen::isAttribute(mdef)) tagFile << "attribute"; + if (VhdlDocGen::isRecord(mdef)) tagFile << "record"; + if (VhdlDocGen::isLibrary(mdef)) tagFile << "library"; + if (VhdlDocGen::isPackage(mdef)) tagFile << "package"; + if (VhdlDocGen::isVariable(mdef)) tagFile << "shared variable"; + if (VhdlDocGen::isFile(mdef)) tagFile << "file"; + if (VhdlDocGen::isGroup(mdef)) tagFile << "group"; + if (VhdlDocGen::isCompInst(mdef)) tagFile << "instantiation"; + if (VhdlDocGen::isAlias(mdef)) tagFile << "alias"; + if (VhdlDocGen::isCompInst(mdef)) tagFile << "configuration"; + + tagFile << "\">" << endl; + tagFile << " <type>" << convertToXML(mdef->typeString()) << "</type>" << endl; + tagFile << " <name>" << convertToXML(mdef->name()) << "</name>" << endl; + tagFile << " <anchorfile>" << convertToXML(mdef->getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl; + tagFile << " <anchor>" << convertToXML(mdef->anchor()) << "</anchor>" << endl; + + if (VhdlDocGen::isVhdlFunction(mdef)) + tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "</arglist>" << endl; + else if (VhdlDocGen::isProcedure(mdef)) + tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "</arglist>" << endl; + else + tagFile << " <arglist>" << convertToXML(mdef->argsString()) << "</arglist>" << endl; + + mdef->writeDocAnchorsToTagFile(tagFile); + tagFile << " </member>" << endl; +} + /* writes a vhdl type declaration */ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, @@ -1967,50 +1997,6 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, else if (gd) d=gd; else d=(Definition*)mdef; - // write tag file information of this member - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " <member kind=\""; - if (VhdlDocGen::isGeneric(mdef)) Doxygen::tagFile << "generic"; - if (VhdlDocGen::isPort(mdef)) Doxygen::tagFile << "port"; - if (VhdlDocGen::isEntity(mdef)) Doxygen::tagFile << "entity"; - if (VhdlDocGen::isComponent(mdef)) Doxygen::tagFile << "component"; - if (VhdlDocGen::isVType(mdef)) Doxygen::tagFile << "type"; - if (VhdlDocGen::isConstant(mdef)) Doxygen::tagFile << "constant"; - if (VhdlDocGen::isSubType(mdef)) Doxygen::tagFile << "subtype"; - if (VhdlDocGen::isVhdlFunction(mdef)) Doxygen::tagFile << "function"; - if (VhdlDocGen::isProcedure(mdef)) Doxygen::tagFile << "procedure"; - if (VhdlDocGen::isProcess(mdef)) Doxygen::tagFile << "process"; - if (VhdlDocGen::isSignals(mdef)) Doxygen::tagFile << "signal"; - if (VhdlDocGen::isAttribute(mdef)) Doxygen::tagFile << "attribute"; - if (VhdlDocGen::isRecord(mdef)) Doxygen::tagFile << "record"; - if (VhdlDocGen::isLibrary(mdef)) Doxygen::tagFile << "library"; - if (VhdlDocGen::isPackage(mdef)) Doxygen::tagFile << "package"; - if (VhdlDocGen::isVariable(mdef)) Doxygen::tagFile << "shared variable"; - if (VhdlDocGen::isFile(mdef)) Doxygen::tagFile << "file"; - if (VhdlDocGen::isGroup(mdef)) Doxygen::tagFile << "group"; - if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << " instantiation"; - if (VhdlDocGen::isAlias(mdef)) Doxygen::tagFile << "alias"; - if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << "configuration"; - - Doxygen::tagFile << "\">" << endl; - Doxygen::tagFile << " <type>" << convertToXML(mdef->typeString()) << "</type>" << endl; - Doxygen::tagFile << " <name>" << convertToXML(mdef->name()) << "</name>" << endl; - Doxygen::tagFile << " <anchorfile>" << convertToXML(mdef->getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl; - Doxygen::tagFile << " <anchor>" << convertToXML(mdef->anchor()) << "</anchor>" << endl; - - if (VhdlDocGen::isVhdlFunction(mdef)) - Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "</arglist>" << endl; - else if (VhdlDocGen::isProcedure(mdef)) - Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "</arglist>" << endl; - else - Doxygen::tagFile << " <arglist>" << convertToXML(mdef->argsString()) << "</arglist>" << endl; - - mdef->writeDocAnchorsToTagFile(); - Doxygen::tagFile << " </member>" << endl; - - } - // write search index info if (Doxygen::searchIndex) { @@ -2321,6 +2307,7 @@ void VhdlDocGen::writePlainVHDLDeclarations( { SDict<QCString> pack(1009); + pack.setAutoDelete(TRUE); bool first=TRUE; MemberDef *md; diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h index b9f9afb..7f87ce5 100644 --- a/src/vhdldocgen.h +++ b/src/vhdldocgen.h @@ -119,6 +119,7 @@ class VhdlDocGen static QCString getClassTitle(const ClassDef*); static void writeInlineClassLink(const ClassDef*, OutputList &ol); + static void writeTagFile(MemberDef *mdef,FTextStream &tagFile); static bool isConstraint(const MemberDef *mdef); static bool isConfig(const MemberDef *mdef); 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 Binary files differnew file mode 100644 index 0000000..9342d3d --- /dev/null +++ b/templates/html/close.png 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 %} + <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 %} | {% 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< + {% for targ in targList %} + {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %} + {% endfor %} + ><br/> + {% endfor %} + {% endspaceless %} + {{ compound.compoundType }} {{ 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 %} +  |  + {% 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">  {{ section.letter }}  </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 %} +  |  + {% 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 }} {% 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"> </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"> </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 %} | {% 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;"> </span> + {% else %} + <span style="width:{{ (node.level)*16 }}px;display:inline-block;"> </span> + <span id="arr_{{ node.id }}" class="arrow" onclick="toggleFolder('{{ node.id}}')"> + {%if node.level+1<tree.preferredDepth %}▼{% else %}►{% 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 }}')"> </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 %} | {% endif %} + <a href="#namespaces">{{ tr.namespaces }}</a> + {% set first=False %} + {% endif %} + {% if compound.constantgroups %} + {% if not first %} | {% 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< + {% for targ in targList %} + {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %} + {% endfor %} + ><br/> + {% endfor %} + {% endspaceless %} + {{ class.classType }} {{ 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  + {%else %} + {% if ii.isImport %} + #import  + {% else %} + #include  + {% endif %} + {%endif %} + {% if ii.isLocal %}"{% else %}<{% 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 %}>{% 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 %} :  + {% endif %} + {% with obj=item scope=item|get:scope text=scope.name %} + {% include 'htmlobjlink.tpl' %} + {% endwith %} + {% if not forloop.last %},  + {% 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 %}   {% endrepeat %} + enum </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/>   + {% 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 %}   {% endrepeat %} + {# write template list #} + {% if member.templateArgs and member.language=='cpp' %} + {% spaceless %} + template< + {% for targ in member.templateArgs %} + {{ targ.type }} {{ targ.name }}{% if targ.defVal %} = {{ targ.defval }}{% endif %}{% if not forloop.last %}, {% endif %} + {% endfor %} + {% endspaceless %} > + </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 %} +  <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 %}   {% endrepeat %} + } + {% else %} + {% if member.isObjCMethod %} + {% if member.isStatic %}+ {% else %}- {% endif %} + {% else %} + {{ member.declType }} + {% endif %} + {% endif %} + {% spaceless %} +   + {% if anonymousNestingLevel>0 %} +    + {% 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 %}   {% 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"> </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"> </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< + {% for targ in targList %} + {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %} + {% endfor %} + > + </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 }}) </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 %} +  </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 %} +  </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 %}   {% 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> </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="-"/>  + {% 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 %} | {% 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 %} | {% endif %} + <a href="#namespaces">{{ tr.namespaces }}</a> + {% set first=False %} + {% endif %} + {% if compound.constantgroups %} + {% if not first %} | {% 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< + {% for targ in targList %} + {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %} + {% endfor %} + ><br/> + {% endfor %} + {% endspaceless %} + {{ class.classType }} {{ 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 %} | {% endif %} + <a href="#namespaces">{{ tr.namespaces }}</a> + {% set first=False %} + {% endif %} + {% if compound.constantgroups %} + {% if not first %} | {% 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< + {% for targ in targList %} + {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %} = {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %} + {% endfor %} + ><br/> + {% endfor %} + {% endspaceless %} + {{ class.classType }} {{ 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> </td><td valign="top"><em>{{ arg.type }}</em></td> + <td> </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 Binary files differnew file mode 100644 index 0000000..492f71f --- /dev/null +++ b/templates/html/mag.png diff --git a/templates/html/mag_sel.png b/templates/html/mag_sel.png Binary files differnew file mode 100644 index 0000000..81f6040 --- /dev/null +++ b/templates/html/mag_sel.png 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 Binary files differnew file mode 100644 index 0000000..2093a23 --- /dev/null +++ b/templates/html/nav_g.png 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"> </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 Binary files differnew file mode 100644 index 0000000..c872f4d --- /dev/null +++ b/templates/html/search_l.png diff --git a/templates/html/search_m.png b/templates/html/search_m.png Binary files differnew file mode 100644 index 0000000..b429a16 --- /dev/null +++ b/templates/html/search_m.png 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&query={searchTerms}" /> +template="$link/search_opensearch.php?v=json&query={searchTerms}" /> <Url type="application/x-suggestions+xml" method="GET" -template="$link/search-opensearch.php?v=xml&query={searchTerms}" /> +template="$link/search_opensearch.php?v=xml&query={searchTerms}" /> </OpenSearchDescription> END_OPENSEARCH; } diff --git a/templates/html/search_r.png b/templates/html/search_r.png Binary files differnew file mode 100644 index 0000000..97ee8b4 --- /dev/null +++ b/templates/html/search_r.png 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 -> 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<-Sender [label="Command()", URL="\ref Command()"]; Receiver->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->Receiver [label="Command()", URL="\ref Receiver::Command()"]; Sender<-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 47ecf49..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=tok->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 7a4283f..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=tok->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 ec13907..f15ef6c 100644 --- a/vhdlparser/vhdlstring.h +++ b/vhdlparser/vhdlstring.h @@ -49,7 +49,7 @@ class VhdlString } ~VhdlString() { - delete[] m_str; + free(m_str); } VhdlString& append(const char *s,int size) { @@ -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 "$(ProjectDir)..\src\res2cc_cmd.py" "$(ProjectDir)..\templates" $(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> |