summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL4
-rw-r--r--Makefile.in2
-rw-r--r--README4
-rw-r--r--addon/doxywizard/expert.cpp9
-rw-r--r--addon/doxywizard/inputbool.cpp4
-rw-r--r--addon/doxywizard/inputint.cpp21
-rw-r--r--addon/doxywizard/inputint.h1
-rw-r--r--addon/doxywizard/inputstring.cpp21
-rw-r--r--addon/doxywizard/inputstring.h1
-rw-r--r--addon/doxywizard/inputstrlist.cpp3
-rwxr-xr-xconfigure24
-rw-r--r--doc/Doxyfile2
-rw-r--r--doc/changelog.doc1743
-rw-r--r--doc/commands.doc6
-rw-r--r--doc/config.doc53
-rw-r--r--doc/doxygen.18
-rw-r--r--doc/doxygen_manual.tex2
-rw-r--r--doc/extsearch.doc7
-rw-r--r--doc/language.doc4
-rw-r--r--doc/searching.doc3
-rw-r--r--doc/translator_report.txt30
-rw-r--r--jquery/Makefile42
-rw-r--r--jquery/README16
-rw-r--r--jquery/jquery-1.7.1.js9266
-rw-r--r--jquery/jquery.ba-1.3-hashchange.js390
-rw-r--r--jquery/jquery.scrollTo-1.4.2.js215
-rw-r--r--jquery/jquery.ui-1.8.18.core.js319
-rw-r--r--jquery/jquery.ui-1.8.18.mouse.js162
-rw-r--r--jquery/jquery.ui-1.8.18.resizable.js808
-rw-r--r--jquery/jquery.ui-1.8.18.widget.js272
-rw-r--r--jquery/split_jquery.pl25
-rw-r--r--qtools/Doxyfile9
-rw-r--r--src/cite.cpp12
-rw-r--r--src/clangparser.cpp315
-rw-r--r--src/clangparser.h44
-rw-r--r--src/classdef.cpp44
-rw-r--r--src/code.l97
-rw-r--r--src/commentscan.l81
-rw-r--r--src/condparser.cpp2
-rw-r--r--src/config.h30
-rw-r--r--src/config.l117
-rw-r--r--src/config.xml34
-rwxr-xr-xsrc/configgen.py2
-rw-r--r--src/configoptions.cpp42
-rw-r--r--src/constexp.y2
-rw-r--r--src/dbusxmlscanner.cpp4
-rw-r--r--src/dbusxmlscanner.h6
-rw-r--r--src/defgen.cpp16
-rw-r--r--src/definition.cpp204
-rw-r--r--src/definition.h23
-rw-r--r--src/diagram.cpp2
-rw-r--r--src/dirdef.cpp53
-rw-r--r--src/docbookgen.cpp18
-rw-r--r--src/docbookvisitor.cpp2
-rw-r--r--src/docparser.cpp547
-rw-r--r--src/docparser.h6
-rw-r--r--src/doctokenizer.l10
-rw-r--r--src/dot.cpp64
-rw-r--r--src/dot.h2
-rw-r--r--src/doxygen.cpp654
-rw-r--r--src/doxygen.css5
-rw-r--r--src/doxygen.h1
-rw-r--r--src/doxygen_css.h5
-rw-r--r--src/filedef.cpp424
-rw-r--r--src/filedef.h130
-rw-r--r--src/filename.cpp14
-rw-r--r--src/formula.cpp6
-rw-r--r--src/fortrancode.l3
-rw-r--r--src/fortranscanner.h6
-rw-r--r--src/fortranscanner.l14
-rw-r--r--src/groupdef.cpp83
-rw-r--r--src/htags.cpp6
-rw-r--r--src/htmldocvisitor.cpp39
-rw-r--r--src/htmlgen.cpp2
-rw-r--r--src/htmlhelp.cpp2
-rw-r--r--src/index.cpp24
-rw-r--r--src/jquery_fx.js12
-rw-r--r--src/jquery_fx_js.h12
-rw-r--r--src/jquery_p1.js21
-rw-r--r--src/jquery_p1_js.h21
-rw-r--r--src/jquery_p2.js13
-rw-r--r--src/jquery_p2_js.h13
-rw-r--r--src/jquery_p3.js5
-rw-r--r--src/jquery_p3_js.h5
-rw-r--r--src/jquery_ui.js28
-rw-r--r--src/jquery_ui_js.h26
-rw-r--r--src/language.cpp4
-rw-r--r--src/latexdocvisitor.cpp10
-rw-r--r--src/latexgen.cpp14
-rw-r--r--src/layout.cpp16
-rw-r--r--src/libdoxygen.pro.in1
-rw-r--r--src/libdoxygen.t.in3
-rw-r--r--src/markdown.cpp46
-rw-r--r--src/markdown.h6
-rw-r--r--src/memberdef.cpp707
-rw-r--r--src/memberdef.h18
-rw-r--r--src/memberlist.cpp39
-rw-r--r--src/message.cpp30
-rw-r--r--src/message.h1
-rw-r--r--src/msc.cpp4
-rw-r--r--src/namespacedef.cpp54
-rw-r--r--src/outputgen.h2
-rw-r--r--src/outputlist.cpp48
-rw-r--r--src/outputlist.h12
-rw-r--r--src/pagedef.cpp8
-rw-r--r--src/parserintf.h25
-rw-r--r--src/perlmodgen.cpp28
-rw-r--r--src/pre.l75
-rw-r--r--src/printdocvisitor.h224
-rw-r--r--src/pycode.l2
-rw-r--r--src/pyscanner.h6
-rw-r--r--src/pyscanner.l6
-rw-r--r--src/resize.js2
-rw-r--r--src/resize_js.h2
-rw-r--r--src/rtfdocvisitor.cpp2
-rw-r--r--src/rtfgen.cpp18
-rw-r--r--src/scanner.h6
-rw-r--r--src/scanner.l166
-rw-r--r--src/searchindex.cpp33
-rw-r--r--src/sqlite3gen.cpp2
-rw-r--r--src/tagreader.cpp80
-rw-r--r--src/tclscanner.h6
-rw-r--r--src/tclscanner.l10
-rw-r--r--src/textdocvisitor.cpp2
-rw-r--r--src/translator_adapter.h2
-rw-r--r--src/translator_ar.h392
-rw-r--r--src/translator_fi.h2
-rw-r--r--src/translator_kr.h119
-rw-r--r--src/types.h13
-rw-r--r--src/util.cpp98
-rw-r--r--src/util.h2
-rw-r--r--src/vhdlcode.l2
-rw-r--r--src/vhdldocgen.cpp36
-rw-r--r--src/vhdlscanner.h6
-rw-r--r--src/vhdlscanner.l6
-rw-r--r--src/xmldocvisitor.cpp2
-rw-r--r--src/xmlgen.cpp30
137 files changed, 16399 insertions, 2858 deletions
diff --git a/INSTALL b/INSTALL
index 54ef1f1..02f3338 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.8.3.1-20130402
+DOXYGEN Version 1.8.3.1-20130512
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (02 April 2013)
+Dimitri van Heesch (12 May 2013)
diff --git a/Makefile.in b/Makefile.in
index 9183aec..606804f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -82,7 +82,7 @@ pdf: docs
DISTFILES = Doxyfile libmd5 addon tmake doc examples bin lib objects \
qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \
- VERSION packages winbuild
+ VERSION packages winbuild jquery
archive: clean
tar zcvf dx`date +%y%m%d`.tgz $(DISTFILES)
diff --git a/README b/README
index e0063f7..a002402 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.8.3.1_20130402
+DOXYGEN Version 1.8.3.1_20130512
Please read INSTALL for compilation instructions.
@@ -26,4 +26,4 @@ forum.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (02 April 2013)
+Dimitri van Heesch (dimitri@stack.nl) (12 May 2013)
diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp
index cf33192..e7b7507 100644
--- a/addon/doxywizard/expert.cpp
+++ b/addon/doxywizard/expert.cpp
@@ -270,11 +270,18 @@ QWidget *Expert::createTopicWidget(QDomElement &elem)
child = elem.firstChildElement();
while (!child.isNull())
{
+ QString setting = child.attribute(SA("setting"));
QString dependsOn = child.attribute(SA("depends"));
QString id = child.attribute(SA("id"));
- if (!dependsOn.isEmpty())
+ if (!dependsOn.isEmpty() &&
+ (setting.isEmpty() || IS_SUPPORTED(setting.toAscii())))
{
Input *parentOption = m_options[dependsOn];
+ if (parentOption==0)
+ {
+ printf("%s has depends=%s that is not valid\n",
+ qPrintable(id),qPrintable(dependsOn));
+ }
Input *thisOption = m_options[id];
Q_ASSERT(parentOption);
Q_ASSERT(thisOption);
diff --git a/addon/doxywizard/inputbool.cpp b/addon/doxywizard/inputbool.cpp
index 62fcf62..9e28852 100644
--- a/addon/doxywizard/inputbool.cpp
+++ b/addon/doxywizard/inputbool.cpp
@@ -43,6 +43,8 @@ void InputBool::setEnabled(bool b)
{
m_enabled = b;
m_cb->setEnabled(b);
+ m_lab->setEnabled(b);
+ updateDefault();
updateDependencies();
}
@@ -69,7 +71,7 @@ void InputBool::setValue( bool s )
void InputBool::updateDefault()
{
- if (m_state==m_default)
+ if (m_state==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
}
diff --git a/addon/doxywizard/inputint.cpp b/addon/doxywizard/inputint.cpp
index 302c3ea..876a920 100644
--- a/addon/doxywizard/inputint.cpp
+++ b/addon/doxywizard/inputint.cpp
@@ -17,6 +17,15 @@
#include <QtGui>
+class NoWheelSpinBox : public QSpinBox
+{
+ protected:
+ void wheelEvent(QWheelEvent *e)
+ {
+ e->ignore();
+ }
+};
+
InputInt::InputInt( QGridLayout *layout,int &row,
const QString & id,
int defVal, int minVal,int maxVal,
@@ -24,7 +33,7 @@ InputInt::InputInt( QGridLayout *layout,int &row,
: m_default(defVal), m_minVal(minVal), m_maxVal(maxVal), m_docs(docs), m_id(id)
{
m_lab = new HelpLabel(id);
- m_sp = new QSpinBox;
+ m_sp = new NoWheelSpinBox;
m_sp->setMinimum(minVal);
m_sp->setMaximum(maxVal);
m_sp->setSingleStep(1);
@@ -56,7 +65,14 @@ void InputInt::setValue(int val)
m_val = val;
m_sp->setValue(val);
m_value = m_val;
- if (m_val==m_default)
+ updateDefault();
+ }
+}
+
+void InputInt::updateDefault()
+{
+ {
+ if (m_val==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
}
@@ -72,6 +88,7 @@ void InputInt::setEnabled(bool state)
{
m_lab->setEnabled(state);
m_sp->setEnabled(state);
+ updateDefault();
}
QVariant &InputInt::value()
diff --git a/addon/doxywizard/inputint.h b/addon/doxywizard/inputint.h
index a6a87ed..846b7c2 100644
--- a/addon/doxywizard/inputint.h
+++ b/addon/doxywizard/inputint.h
@@ -56,6 +56,7 @@ class InputInt : public QObject, public Input
void showHelp(Input *);
private:
+ void updateDefault();
QLabel *m_lab;
QSpinBox *m_sp;
int m_val;
diff --git a/addon/doxywizard/inputstring.cpp b/addon/doxywizard/inputstring.cpp
index 9e0a0e1..36fe319 100644
--- a/addon/doxywizard/inputstring.cpp
+++ b/addon/doxywizard/inputstring.cpp
@@ -19,6 +19,16 @@
#include <QtGui>
+class NoWheelComboBox : public QComboBox
+{
+ protected:
+ void wheelEvent(QWheelEvent *e)
+ {
+ e->ignore();
+ }
+};
+
+
InputString::InputString( QGridLayout *layout,int &row,
const QString & id, const QString &s,
StringMode m, const QString &docs,
@@ -30,7 +40,7 @@ InputString::InputString( QGridLayout *layout,int &row,
if (m==StringFixed)
{
layout->addWidget( m_lab, row, 0 );
- m_com = new QComboBox;
+ m_com = new NoWheelComboBox;
layout->addWidget( m_com, row, 1, 1, 3, Qt::AlignLeft );
m_le=0;
m_br=0;
@@ -95,7 +105,13 @@ void InputString::setValue(const QString &s)
{
m_str = s;
m_value = m_str;
- if (m_str==m_default)
+ updateDefault();
+ }
+}
+void InputString::updateDefault()
+{
+ {
+ if (m_str==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
}
@@ -114,6 +130,7 @@ void InputString::setEnabled(bool state)
if (m_le) m_le->setEnabled(state);
if (m_br) m_br->setEnabled(state);
if (m_com) m_com->setEnabled(state);
+ updateDefault();
}
void InputString::browse()
diff --git a/addon/doxywizard/inputstring.h b/addon/doxywizard/inputstring.h
index 741f55d..ab2c8e2 100644
--- a/addon/doxywizard/inputstring.h
+++ b/addon/doxywizard/inputstring.h
@@ -72,6 +72,7 @@ class InputString : public QObject, public Input
void help();
private:
+ void updateDefault();
QLabel *m_lab;
QLineEdit *m_le;
QToolBar *m_br;
diff --git a/addon/doxywizard/inputstrlist.cpp b/addon/doxywizard/inputstrlist.cpp
index 2e6e624..23c20ff 100644
--- a/addon/doxywizard/inputstrlist.cpp
+++ b/addon/doxywizard/inputstrlist.cpp
@@ -141,6 +141,7 @@ void InputStrList::setEnabled(bool state)
m_lb->setEnabled(state);
if (m_brFile) m_brFile->setEnabled(state);
if (m_brDir) m_brDir->setEnabled(state);
+ updateDefault();
}
void InputStrList::browseFiles()
@@ -222,7 +223,7 @@ void InputStrList::update()
void InputStrList::updateDefault()
{
- if (m_strList==m_default)
+ if (m_strList==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
}
diff --git a/configure b/configure
index 623ffe1..db6ccdc 100755
--- a/configure
+++ b/configure
@@ -20,7 +20,7 @@ doxygen_version_minor=8
doxygen_version_revision=3.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=20130402
+doxygen_version_mmn=20130512
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
@@ -42,6 +42,7 @@ f_search=NO
f_langs=nl,sv,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,mk,br,dk,sk,ua,gr,tw,sr,ca,lt,za,ar,fa,sc,vi,tr,eo,am
f_sqlite3=NO
f_libclang=NO
+f_libclangstatic=NO
while test -n "$1"; do
case $1 in
@@ -105,6 +106,10 @@ while test -n "$1"; do
--with-libclang | -with-libclang)
f_libclang=YES
;;
+ --with-libclang-static | -with-libclang-static)
+ f_libclang=YES
+ f_libclangstatic=YES
+ ;;
-h | -help | --help)
f_help=y
;;
@@ -122,7 +127,8 @@ if test "$f_help" = y; then
Usage: $0 [--help] [--shared] [--static] [--release] [--debug]
[--perl name] [--flex name] [--bison name] [--make name]
[--dot name] [--platform target] [--prefix dir] [--docdir dir]
- [--install name] [--english-only] [--enable-langs list] [--with-sqlite3]
+ [--install name] [--english-only] [--enable-langs list]
+ [--with-sqlite3] [--with-libclang]
[--with-doxywizard] [--with-doxysearch] [--with-doxyapp]
Options:
@@ -156,7 +162,7 @@ Options:
--enable-langs list Include support for output languages listed in list.
[default: $f_langs]
--with-sqlite3 Add support for sqlite3 output [experimental]
- --with-libclang Add support for libclang parsing [experimental]
+ --with-libclang Add support for libclang parsing
--with-doxywizard Build the GUI frontend for doxygen. This
requires Qt version 4.
--with-doxysearch Build external search tools (doxysearch and doxyindexer)
@@ -450,7 +456,11 @@ 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"
- libclang_lib_name="libclang.so libclang.dylib libclang.a"
+ if test "$f_libclangstatic" = NO; then
+ libclang_lib_name="libclang.so libclang.dylib libclang.a"
+ else
+ libclang_lib_name="libclang.a"
+ fi
libclang_hdr=NO
libclang_lib=NO
libclang_link=
@@ -465,7 +475,11 @@ if test "$f_libclang" = YES; then
for j in $libclang_lib_name; do
if test -f "$i/$j"; then
libclang_lib="$i/$j"
- libclang_link="-L $i -lclang"
+ if test "$f_libclangstatic" = NO; then
+ libclang_link="-L $i -lclang"
+ else
+ libclang_link="$i/libLLVMBitReader.a $i/libLLVMMC.a $i/libLLVMMCParser.a $i/libLLVMSupport.a $i/libclang.a $i/libclangAST.a $i/libclangAnalysis.a $i/libclangBasic.a $i/libclangDriver.a $i/libclangEdit.a $i/libclangFrontend.a $i/libclangLex.a $i/libclangParse.a $i/libclangRewriteCore.a $i/libclangSema.a $i/libclangSerialization.a $i/libclangStaticAnalyzerCore.a"
+ fi
break
fi
done
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 7d5470b..7269989 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -39,7 +39,7 @@ INPUT = index.doc install.doc starting.doc docblocks.doc markdown.do
external.doc faq.doc trouble.doc features.doc \
doxygen_usage.doc doxywizard_usage.doc \
config.doc commands.doc htmlcmds.doc xmlcmds.doc language.doc \
- perlmod.doc perlmod_tree.doc arch.doc
+ perlmod.doc perlmod_tree.doc arch.doc changelog.doc
FILE_PATTERNS = *.cpp *.h *.doc
EXAMPLE_PATH = ../examples
RECURSIVE = NO
diff --git a/doc/changelog.doc b/doc/changelog.doc
new file mode 100644
index 0000000..f43bdff
--- /dev/null
+++ b/doc/changelog.doc
@@ -0,0 +1,1743 @@
+/** \page changelog Changelog
+\tableofcontents
+\section log_1_8 Release 1.8
+\subsection log_1_8_3_1 Release 1.8.3.1
+\htmlonly
+<b>(release date 20-01-2013)</b>
+<a name="1.8.3.1"></a>
+<h3>Changes</h3>
+<ul>
+<li> Changed to way the search results for multiple projects can be linked
+ together. A project is now no longer identified by the tag files name but
+ via new option EXTERNAL_SEARCH_ID giving a bit more flexibility.
+<li> Disabled the disk cache for member data. Allows removing quite some complexity
+ in doxygen and is not really needed now that 64bit systems with &gt;4GB RAM
+ are becoming more common. Let me know if you think you benefit from this caching.
+<li> id 691607: Using $relpath$ in a custom footer could lead to ambiguities
+ when followed by a name that could also be a marker, like 'search'.
+ Now $relpath^ should be used instead. $relpath$ is still supported for
+ backward compatibility.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> You can now use EXTENSION_MAPPING on files without any extension using
+ no_extension as placeholder (thanks to Jason Majors for the patch).
+<li> To make navindex section inside a layout file that links to
+ a specific URL you can use usergroup with the url attribute.
+<li> To make navindex section without any link inside a layout file you
+ can use usergroup with special title [none].
+</ul>
+<h3>Bug fixes (ids refer to the <a href="http://bugzilla.gnome.org/buglist.cgi?product=doxygen&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=NEEDINFO&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&newqueryname=&form_name=query&order=bugs.bug_id">bugzilla</a> database)</h3>
+<ul>
+<li> id 644350: Fortran: Included patch to improve parsing line continuation
+ characters.
+<li> id 645423: Fortran: added support for protected attribute
+<li> id 682550,691315: When using @copydoc, paragraphs breaks did not appear
+ in the copied documentation.
+<li> id 686581: Fortran: handle single quotes in normal Fortran comment.
+<li> id 686689, 691335: Scope of forwardly declared template class was lost
+ in the output.
+<li> id 689713: Tcl: Inline source code was not rendered correctly.
+<li> id 690787: Fixed case were a cyclic inheritance relation could crash
+ doxygen.
+<li> id 690831: Using @subpage in a -# style list was not handled properly.
+<li> id 691000: For a mainpage without title the project name is now shown as
+ the title in the XML output.
+<li> id 691277: The generated list of citations is now no longer included in
+ the tag file.
+<li> id 691073: Documenting strongly typed enum values outside of the enum
+ did not work.
+<li> id 691310: Python: = was missing in the output for variable assignment.
+<li> id 691323: Doxygen could crash when creating inline msc graphs.
+<li> id 691340: Members didn't have a More.. link to jump to detailed docs.
+<li> id 691602: Doxygen did not probably distinguish between two template
+<li> id 691798: regression: C++ style comments that started with a line of
+ slashes did not get processed correctly anymore.
+<li> id 692031: Fixed parse error when left shift operator occurred as a
+ default parameter.
+ members or functions that only differ in the return type.
+<li> Setting SEARCH_INCLUDES to NO resulted in no include graphs and no
+ include files being listed in the output.
+<li> Improved support for MinGW (thanks to a patch by Brecht Sanders).
+<li> Removed the Graphviz/dot dependency when building the doxygen
+ documentation.
+<li> Anchors to sub pages were wrong in the XML output.
+<li> Included VHDL patch by Martin Kreis that improves the flow chart
+ generation.
+<li> corrected several code pages and fontsets for proper RTF output for
+ a number of languages such as Greek.
+</ul>
+\endhtmlonly
+\subsection log_1_8_3 Release 1.8.3
+\htmlonly
+<a name="1.8.3"></a>
+<b>(release date 26-12-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li> Expanding the tree in an index page of the HTML output, will now
+ expand only one level instead of the whole sub-tree (thanks to
+ Pez Cuckow for the patch).
+<li> A blockquote in Markdown does no longer require a whitespace
+ after the last '&gt;' if the '&gt;' is followed by a newline.
+<li> id 682718: Included patch to add version info to all generated
+ template files (headers, footers, stylesheets, layout files, etc).
+</ul>
+<h3>New features</h3>
+<ul>
+<li> Added support for using external tools to index and search through
+ the HTML documentation. An example index tool is provided (doxyindexer)
+ and an example search engine (doxysearch.cgi).
+ To configure the external search engine the following new options
+ are added to the configuration file: EXTERNAL_SEARCH (to enable the
+ feature), SEARCHENGINE_URL (to specify the URL of the search engine),
+ SEARCHDATA_FILE (to specify the name of the raw search data to index),
+ EXTRA_SEARCH_MAPPINGS (for search through multiple projects).
+ See the <a href="extsearch.html">manual</a> for details.
+<li> Added USE_MDFILE_AS_MAINPAGE config option to select a markdown page to
+ be used as the main page.
+<li> id 630645: This patch (contributed by Albert) adds support for
+ simple logic expressions for \cond, \if, and friends, i.e. you can do
+ \if (SOME_SECTION_NAME &amp;&amp; (!THIS_ALTERNATIVE || THAT_ALTERNATIVE))
+<li> id 684152: Patch (contributed by Albert) adds a new configuration
+ option MATHJAX_FORMAT to select the MathJax output format. Options are
+ HTML-CSS, NativeMML, or SVG.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 670853: Fixed compile issues with 0 to QCString cast for
+ old compilers.
+<li> id 678139: A class A deriving from another class B inside a namespace
+ not known to doxygen, caused class B to appear in the global scope.
+<li> id 681209: Fixed problem processing .bib files when they were located
+ in a path containing spaces.
+<li> id 681830: Using \addindex in a page will now produce a link to the
+ word, instead of the start of the page.
+<li> id 681831: The TREEVIEW_WIDTH option did not have any effect.
+<li> id 681898: Jumping from a level 3 section to a level 1 section did
+ not appear correctly in the page TOC.
+<li> id 681976: C++11: Improved handling of noexcept expressions, e.g.:
+ <code>Test() noexcept ( noexcept(T::T()) ) = default;</code>
+<li> id 682048: Improved SIGINT handling when running multiple dot instances.
+<li> id 682602: Fixed problem processing .bib files when using a non default
+ output directory.
+<li> id 682713: Comment for IDL_PROPERTY_SUPPORT in the config file template
+ did not have line wrapping.
+<li> id 682728: Setting SHOW_FILES to NO prevented call graphs from being
+ generated.
+<li> id 682740: Fortran: In initialization statement the "=" was missing
+<li> id 683284: Fortran: ALIASes where not replaced in !! and !&lt; comments.
+<li> id 683976: Added meta tag "generator" to HTML output (thanks to
+ Albert for the patch).
+<li> id 684781: Sections of the main page did not appear in the
+ navigation tree until the main page had sub pages.
+ Also fixed bug in treeview that caused mainpage with title and
+ sections to appear at the same level as the sections.
+<li> id 685125: Doxygen could select the wrong overloaded method when
+ the only difference in parameter types was the template type of
+ a typedef.
+<li> id 685181: Inheriting member documentation did not work in combination
+ with Java interfaces.
+<li> id 685623: Enum values did not appear in the detailed documentation
+ when using C++11 style enums.
+<li> id 685879: Even though HIDE_UNDOC_MEMBERS was enabled, the navigation
+ still showed undocumented members.
+<li> id 685940: Fixed back button behaviour when using the navigation tree.
+<li> id 686284: Added anchors to refs in the index.qhp TOC.
+<li> id 686826: Added XML declaration to index.qhp TOC.
+<li> id 686956: When a class and its base class has the same nested class,
+ the collaboration diagram could point to the wrong class.
+<li> id 686983: Comments inside a function macro parameter appeared before
+ the expanded macro, instead of being treated as part of the parameter.
+<li> id 687301: Allow minus in the name of a HTML attribute.
+<li> id 687572: Code fragments were wrapped too early in the latex output.
+<li> id 688226: Fixed Qt version number in ./configure --help text.
+<li> id 688463: Included patch to prevent processing identifiers starting
+ with _ or __ as markdown.
+<li> id 688531: Horizontal ruler inside paragraph caused missing &lt;/p&gt;
+<li> id 688542: Using "usergroup" in the layout.xml caused missing &lt;div&gt;
+<li> id 688739: Fixed problem with user defined entries in the eclipse help
+ index (thanks to Rene Papenhoven for the fix).
+<li> id 688647: Fixed problem parsing initializer list with C++11 style
+ uniform types.
+<li> id 689341: \if around list item preceded by whitespace caused wrong
+ list in the output.
+<li> id 689461: Correct link in documentation of SIP_SUPPORT option.
+<li> id 689720: Fixed bug that could prevent refman.tex from being generated.
+<li> id 689833: Fixed missing space in Chinese translation.
+<li> id 690093: Files added via HTML_EXTRA_STYLESHEET did not correct refer
+ to files that where placed in a subdirectory.
+<li> id 690190: Searching for multibyte characters did not work with the
+ server based search engine.
+<li> id 690250: Fixed case where line numbers got out of sync with the code.
+<li> id 690341: First member of an anonymous C++11 style enum was not shown
+ properly.
+<li> id 690385: Fixed case where _'s where falsely converted to Markdown
+ emphasis.
+<li> id 690403: Title not used when \ref'ing to a \section imported via
+ a tag file.
+<li> id 690418: Behavior of @cond was accidentally reversed by new expression
+ parser.
+<li> id 690602: Fixed problems handling @cond inside /// comments.
+<li> id 690629: Fixed case where doxygen would during preprocessing.
+<li> id 690685: A file specified using HTML_EXTRA_STYLEHSHEET did not end
+ up in the Qt Help index.
+<li> Improved the way enum's are rendered in the HTML output.
+<li> When inlining structs (INLINE_SIMPLE_STRUCTS=YES) a &lt;p&gt; was missing
+ for members with a detailed description, causing invalid XHTML.
+<li> Fixed problem loading the navigation tree when using .xhtml as the
+ file extension.
+<li> The navigation tree was not always correctly positioned upon initial
+ load when using Chrome.
+<li> HTML Navigation tree showed static members even when EXTRACT_STATIC was
+ set to NO.
+<li> Same word could appear multiple times in the match list for an entry
+ in the search results when using server based search.
+</ul>
+\endhtmlonly
+\subsection log_1_8_2 Release 1.8.2
+\htmlonly
+<a name="1.8.2"></a>
+<b>(release date 11-08-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li> Using a fenched block (~~~~) in Markdown without explicit extension will
+ now be interpreted as a @code..@endcode block instead
+ of @verbatim..@endverbatim.
+<li> Classes inheriting from an class that is outside the scope of doxygen
+ are still shown in diagrams. This does not hold for usage relations.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> Added support for C++11:
+ <ul>
+ <li> strongly typed enums, e.g.:
+ <pre>enum class E</pre>
+ <li> enums with explicit type, e.g.:
+ <pre>enum E : unsigned int { ... }</pre>
+ <li> id 678097: added support for final keyword on classes and methods.
+ <li> support for override keyword for methods.
+ <li> <code>nullptr</code> is new a type keyword in code fragments.
+ <li> support for variables with initializer lists,
+ e.g.: <pre>const int var {10};</pre>
+ <li> support for trailing return types,
+ e.g.: <pre>auto foo() -&gt; Bar;</pre>
+ <li> id 672372: added support for template aliases,
+ e.g.: <pre>template&lt;typename T&gt; using A = B&lt;T&gt;;</pre>
+ <li> support for C++11 variadic templates,
+ e.g.: <pre>template&lt;typename... Values&gt; class C;</pre>
+ <li> support for documenting template class declarations.
+ <li> id 680098: <code>static_assert(...);</code> inside a class is now ignored.
+ <li> id 679740: Add support parameters with default lambda functions,
+ e.g.: <pre>int foo(int i, std::function&lt;int(int)&gt; f = [](int x) -&gt; int { return x / 2; })</pre>
+ <li> default initializers for non-static data members,
+ e.g.: <pre>class C { public: int x = 4; int y {6}; int z = y*func(); };</pre>
+ <li> support for decltype as a way selecting a type for a variable,
+ e.g.: <pre>int x; decltype(x) y;</pre>
+ <li> support for new string literals,
+ e.g. <pre>u8"utf8", u"utf-16", U"utf-32", L"wchar"</pre>
+ <li> support for raw string literals (with and without user defined
+ delimiter),
+ e.g. <pre>R"(some"thing)", u8R"raw(some)"thing)raw"</pre>
+ <li> support for explictly deleted and defaulted special members
+ (<code>=default</code> and <code>=delete</code>).
+ </ul>
+<li> Made several improvements to the way Objective-C categories and protocols
+ are handled:
+ <ul>
+ <li> Class extensions are now treated as part of the class, whereas
+ categories are listed separately.
+ <li> Fixed parse problem where category had a { } section.
+ <li> Fixed parse problem for categories that implemented protocols.
+ <li> Fixed render bug for protocols in class diagrams.
+ <li> Attributes with the same name as a method are now no longer matched.
+ <li> Internal properties are now also marked with [implementation]
+ <li> Members of categories are shown in the class they extend as well, and
+ cross reference links are made between these members.
+ <li> Class extension implementing protocols are now shown as protocols
+ inherited by the class itself, including the "Implemented by" relation.
+ </ul>
+<li> Added option HTML_EXTRA_STYLESHEET which allows adding an additional
+ stylesheet without completely replacing doxygen.css.
+<li> Added option AUTOLINK_SUPPORT which can be used to enable/disable
+ autolinking globally.
+<li> Included language updates for Czech, Spanish, Greek, Slovak, and
+ Esparanto.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> Fixed render glitch where template member of a base class was not
+ properly hidden in the derived class.
+<li> Privately nested classes no longer appear in the declaration section
+ of their parent if EXTRACT_PRIVATE is disabled.
+<li> In the declaration section the separator line was in between the
+ member and its brief description.
+<li> Fixed a couple of compiler warning with the new XCode 4.4 compiler.
+<li> Added compilation support for Mountain Lion (Mac OS X 10.8).
+<li> id 679631: Nested namespaces did not appear in the namespace list if the
+ parent namespace was undocumented.
+<li> id 680227: Fixed some spelling errors in the code comments.
+<li> id 680398: Fortran: comma at begin of argument list description in
+ case of implicit type
+<li> id 680405: Fortran: Entities on line with USE, ONLY were not hyperlinked
+ in code.
+<li> id 680408: Fortran: handle carriage return in non terminated strings.
+<li> id 680492: Using Markdown formatting in @todo/@bug/.. like descriptions
+ did not work.
+<li> id 680575: Fixed potential crash when &lt;code&gt; appeared inside &lt;summary&gt;
+ for C# code.
+<li> id 680697: \xrefitems of the same type are not grouped together under
+ the same heading (just like \todo and friends).
+<li> Fixed case where full directory path was shown even though
+ FULL_PATH_NAMES was set to NO.
+<li> id 680709: HTML output of template-derived classes contained unescaped
+ characters.
+<li> id 679963: "Class Index" appeared twice in the PDF TOC, Index at the
+ end did not appear at all.
+<li> In a declaration no link was created when referring to a class inside
+ an undocumented namespace imported via a tag file.
+<li> id 681281: Make default for TAB_SIZE 4 and added remark in Markdown
+ section of the manual about the effect of TAB_SIZE on code block
+ processing when using tabs in the comment block.
+<li> id 681023: Project logo was not included in the Qt help output.
+<li> id 680992: Fixed a couple of typos in the comments.
+<li> id 681350: Fixed a problem with Markdown processing of a @code block
+ inside an indented /// style comment.
+<li> id 679928: Disabled section level correction for Markdown pages as
+ is was confusing.
+</ul>
+\endhtmlonly
+\subsection log_1_8_1_2 Release 1.8.1.2
+\htmlonly
+<a name="1.8.1.2"></a>
+<b>(release date 12-07-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li> doxygen now strips the leading indentation shared by the lines in a
+ @code..@endcode block.
+<li> id 678218: Changed title of the SVG graphs from 'G' to the root node
+ of the graph.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> Added button in the navigation tree to allow enabling/disabling
+ syncing the navigation tree with the content.
+<li> Extended the number of HTML entities with Greek letters and other
+ symbols (thanks to Charles Karney for the patch).
+<li> id 663645: Added support for C++11 strongly typed enums
+ (enum class E { ... }).
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 590518: Added missing class member initialization to a
+ class in doxmlparser and made the library compile again.
+<li> id 667678: Added support for Obj-C property attribute "unsafe_retained".
+<li> id 674842,676984: Unmatched quote in a comment prevented alias expansion.
+<li> id 676019: Fixed another case where local include path did not appear
+ correctly in the class documentation.
+<li> id 676966: Fortran: Some keyword were not colored in the source view.
+<li> id 676981: Fortran: Argument type was wrong type of in case of out of
+ place !&gt; comment
+<li> id 677935: Included patch to fix problem compiling for x86 release on
+ Windows.
+<li> id 677992: Section without title could result in an invalid Qt Help
+ index.
+<li> id 678022: Anonymous enum could result in an invalid Qt Help index.
+<li> id 678102: Superfluous trailing comma in javascript
+ prevented navigation tree to load in IE7.
+<li> id 678177: a + at the start of a line inside a &lt;pre&gt; block,
+ triggered the start of a list. Also -- and --- where not kept untouched
+ inside a &lt;pre&gt; block.
+<li> id 678180: ndash (--) appearing in a brief description could lead
+ to invalid SVG images.
+<li> id 678288: -- and --- inside a Markdown code block were not handled
+ properly.
+<li> id 679331,675766: In body documentation with a different indentation then the
+ main documentation was not rendered correctly (MARKDOWN=YES).
+<li> id 679436: Using an escaped pipe symbol in a Markdown table did not get
+ unescaped in the output.
+<li> id 679533: Code fragments did not appear properly in the doxygen manual.
+<li> id 679615: Added missing delete call in a piece of debugging code.
+<li> id 679626: Fixed some navigation issues in the manual
+<li> Not all inherited members appeared in the "Additional inherited members"
+ list.
+<li> Link to call after "Inherited members" was not correct when
+ CREATE_SUBDIRS was enabled.
+<li> New VHDL diagram was not generated if the path contained spaces.
+<li> Fixed a couple of problems handling Objective-C categories.
+</ul>
+\endhtmlonly
+\subsection log_1_8_1_1 Release 1.8.1.1
+\htmlonly
+<a name="1.8.1.1"></a>
+<b>(release date 10-06-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li> Integrated the root navigation tree in navtree.js for faster loading.
+<li> When the navigation tree is enabled, clicking jump to a line in
+ the source code view will now highlight the line.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> VHDL code now has a new Design Overview page (thanks for Martin Kreis
+ for the patch). Requires HAVE_DOT=YES, and DOT_IMAGE_FORMAT=svg.
+<li> id 677678: Added support for strong and weak attributes in Objective-C
+ properties.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 618462: Fortran: Appearance of comments in the HTML output
+ are now customizable via CSS again.
+<li> id 673660: &lt;code&gt; inside a &lt;summary&gt; or &lt;remarks&gt; section is now treated
+ as @code (was already the code for C#).
+<li> id 673921: When a comment started at indent &gt;= 4 after a /** and
+ continued at the same indent without leading * after a blank line,
+ the continued part appeared at as a code block when Markdown was enabled.
+<li> id 675036: If a file was not indexed, the navigation tree became empty.
+<li> id 676019: Include path using quotes did not work as documented.
+<li> id 676877: @warning did not end at blank line when followed by
+ a numbered list.
+<li> id 676902: An anonymous namespace could introduce an invalid entry in
+ the navigation list.
+<li> id 676948: Breadcrumb navigation path had wrong links when
+ CREATE_SUBDIRS was enabled.
+<li> id 677315: Fixed case where function was incorrectly detected as a
+ variable.
+<li> id 677589: Fixed typo in the documentation of the LAYOUT_FILE option.
+<li> id 677771: Fixed visual misalignment for first argument.
+<li> The "arrow out" button in interactive SVG did not work when
+ served from a web server, due to the use of an absolute path.
+<li> If a declation was too wide for a page, the content in HTML spilled
+ over the boundary of its box, which looked ugly.
+<li> Empty lines in a code fragment were collapsed.
+<li> Navigation tree entries of the hierarchy appeared under class index as
+ well.
+<li> Grouped globals and enum values were not added to the navigation index.
+<li> Inlined class were not properly shows in the navigation index.
+<li> Documented class in undocumented namespace did not show up in
+ class list and navigation tree.
+<li> ALLEXTERNALS=YES did not show all external classes in the class list.
+<li> External reference via URL did not work for new
+ "Additional Inherited Members" section + inherited from class link.
+<li> Objective-C protocols and C# generics were not index and listed
+ properly in the navigation tree and indices.
+<li> Undocumented files could produce a broken link in the navigation tree.
+<li> Additional Inherited Members could turn up empty of all members of
+ the inherited class were grouped and SUBGROUPING was set to NO.
+</ul>
+<\endhtmlonly
+\subsection log_1_8_1 Release 1.8.1
+\htmlonly
+<a name="1.8.1"></a>
+<b>(release date 19-05-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li> Changed the way indexes (Class,File,Namespace,Groups) are rendered:
+ <p>
+ There are now shown in a uniform way in the HTML output as a tree.
+ Trees can be expanded and collapsed interactively
+ (this makes USE_INLINE_TREES obsolete).
+ <p>
+ The class list now also shows namespaces and nested classes.
+ The file list now also shows directories (this makes SHOW_DIRECTORIES
+ obsolete).
+ <p>
+ Member sections are now each rendered in a separate table.
+ This makes the HTML_ALIGN_MEMBERS option obsolete.
+ <p>
+<b>Note:</b> If you use a custom header for the HTML output (HTML_HEADER)
+make sure you add the following:
+ <pre>
+&lt;script type="text/javascript" src="$relpath$jquery.js"&gt;&lt;/script&gt;
+&lt;script type="text/javascript" src="$relpath$dynsections.js"&gt;&lt;/script&gt;</pre>
+ Otherwise the interactivity of the trees does not work.
+ <p>
+
+<li> Included a couple of performance improvements (thanks to Dirk Reiners)
+<li> Changed the way member attributes (like protected, virtual, and static)
+ are rendered in the HTML output.
+<li> Changed the look of the source code output.
+<li> Included language updates for Chinese, Czech, German, Esperanto,
+ Italian, Slovak, Spanish, Hungarian, and Polish.
+<li> Syntax highlighing in source code fragments is no longer dependent
+ on LATEX_SOURCE_CODE being set to YES.
+<li> Added natural scrolling for tablet devices (like the iPad)
+ when using the treeview.
+<li> For interactive SVGs the print button has been replaced by a
+ "arrow out" button that opens the original non-interactive SVG in a
+ new window for easy printing or saving.
+<li> id 661499: Long names are now wrapped in the dot nodes to avoid
+ very wide graphs.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> id 666527: Added support for &lt;inheritdoc/&gt; C# XML command
+ (thanks to John Werner for the patch).
+<li> id 670965, Added support for resolving environment variables of the
+ form $(PROGRAMFILES(X86)) inside the config file
+<li> Doxygen now shows Objective-C properties in collaboration diagrams
+ (thanks to Sven Weidauer for the patch).
+<li> Added ability to search for group or page titles.
+<li> Inherited class members are now shown as expandable sections in the
+ member overview (default is collapsed). Each section is rendered as
+ a table.
+<li> id 674349: Included build support for NetBSD.
+<li> A -- will now be rendered as an 'en dash', similarly, --- will produce an
+ mdash.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 523156: Fortran: Prefix of routines got stripped.
+<li> id 666088: Include VHDL patch (thanks to Martin Kreis).
+<li> id 670235: Fixed include guard detection problem when using
+ #pragma once
+<li> id 670805: A numbered list (1. 2. 3.) where each list item ended with
+ an empty line is no longer treated as a set of separate lists (all
+ starting with 1.).
+<li> id 670889: Java: last enum value did not appear in the output unless it was
+ followed by a comma.
+<li> id 671023, 671312: Regression: Autolist items starting on a new paragraph
+ at indent level larger than 0 were not processed correctly.
+<li> id 671076: Sections could be missing from the navigation tree in
+ some situations.
+<li> id 671158: @tableofcontents did not work for the main page (@mainpage)
+<li> id 671159: Sections in a separate markdown page did not appear in the
+ table of contents.
+<li> id 671166: Fortran: Fixed problem causing call/caller graphs not to be
+ generated.
+<li> id 671171: RPM spec file was updated to make it work with RHEL 6.2
+ (thanks to Peter Klotz for the patch)
+<li> id 671240: Corrected line number of error message reported for
+ pages.
+<li> id 671291: C# regression: enum values where not shown in the docs.
+<li> id 671395: When #some_member appeared at the start of a line it was
+ seen as a level one header instead of a link to a member when
+ Markdown processing was enable. Now at least one space is required
+ after the # to make it a header.
+<li> id 671426: Fixed case where doxygen could crash when a section and
+ subsection had the same label.
+<li> id 671591: docset creating could fail due to invalid Nodes.xml
+<li> id 671702: Using \internal in a group or member did not hide it
+ from the navigation tree if there was no documentation.
+<li> id 671709: Backticks in C# comments did not appear as inline
+ fragments, like was the case for other languages.
+<li> id 672119: PHP: defines are now shown as constants rather than enums.
+<li> id 672662: File with .md or .markdown extension were not included
+ with the default setting of FILE_PATTERNS.
+<li> id 672366: mailto style URLs did not work correctly in combination with
+ CREATE_SUBDIRS = YES.
+<li> id 672472: Removed bogus &lt;/b&gt; when using @par.
+<li> id 672475: Added "warning:" prefix to "missing \endcode" message.
+<li> id 672479: Doxygen comments after a macro definition were not
+ removed in the source browser view.
+<li> id 672526: Removed black line in front of custom paragraphs.
+<li> id 672536: PHP: use keyword was not handled correctly when importing
+ classes from another namespace.
+<li> id 672620: Switched to using "Macro" in the output instead of "Define".
+<li> id 672656: Using ![caption](filename.png) did not work correctly for
+ local images pointed to with IMAGE_PATH.
+<li> id 673045: A block of ///'s inside a verbatim block inside a .md
+ file was replaced by /** .. */
+<li> id 673066: Doxygen now skips scanning files in directories starting with
+ a dot (e.g. .svn).
+<li> id 673219: Included patch by Ryan Schmidt to make the Mac versions
+ in qglobal.h match that of Apple header files.
+<li> id 673870: Added C++11 classes when BUILTIN_STL_SUPPORT is enabled.
+<li> id 673983: Using a backslash in a section cause 026E30F to appear in the
+ latex TOC.
+<li> id 674563: Fortran: case sensitiveness for routines and functions
+ did not work
+<li> id 674583: Fortran: continuation by ampersand not placed in code output.
+<li> id 675757: Fixed indenting issue after the end of a markdown code block
+ inside a list.
+<li> id 676116: Use new index style for page index.
+<li> id 676294: Fixed LaTeX error when backslash appeared in a hyperlinked
+ code fragment.
+<li> Tag files had wrong character encoding set in the header.
+<li> C# in/out did not appear in generics using covariance or contravariance.
+<li> When marker of an alias appeared at the end of the alias text it was
+ not expanded.
+<li> Aliases did not work in Markdown files.
+<li> Fixed some problems with the navigation tree for IE9 and Opera.
+<li> Included patch by Jake Colman to make the configgen.py work with older
+ Python version such as 2.4.3.
+<li> Fixed problem parsing \code{.py}...\endcode
+<li> UML_LIMIT_NUM_FIELDS did not work correctly in all cases.
+<li> Setting SORT_GROUP_NAMES to YES, had no effect on child groups within
+ a group.
+</ul>
+\endhtmlonly
+\subsection log_1_8_0 Release 1.8.0
+\htmlonly
+<a name="1.8.0"></a>
+<b>(release date 25-02-2012)</b>
+<h3>Changes</h3>
+<ul>
+<li> Auto list items can now consist of multiple paragraphs.
+ The indentation of the (first line) of a new paragraph detemines
+ to which list item the paragraph belongs or if it marks the end of the
+ list.
+<li> When UML_LOOK is enabled, relations shown on the edge of a graph
+ are not shown as attributes (conform to the UML notation)
+<li> Updated the manual and improved the look.
+<li> Made the contents in the navigation tree more consistent for
+ groups, pages with subpages, and grouped subpages.
+<li> id 669079: Latex: made the margins of latex page layout smaller using
+ the geometry package.
+<li> The tool doxytag has been declared obsolete and is removed
+ (it wasn't working properly anyway). Same goes for the installdox
+ script.
+<li> Updated the copyright in source code and doxywizard "about" to 2012.
+<li> id 668008: HTML version of the manual now has the treeview enabled
+ for easier navigation.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> Added support for
+ <a href="http://daringfireball.net/projects/markdown/">Markdown</a>
+ formatting.
+ This is enabled by default, but can be disabled by
+ setting MARKDOWN_SUPPORT to NO. When enabled the following is
+ processed differently:
+ <ul>
+ <li> tabs are converted to spaces according to TAB_SIZE.
+ <li> blockquotes are created for lines that start with one or more &gt;'s
+ (amount of &gt;'s detemine the indentation level).
+ <li> emphasis using *emphasize this* or _emphasis this_ or
+ strong emphasis using **emphasis this**. Unlike classic
+ Markdown 'some_great_indentifier' is not touched.
+ <li> code spans can be created using back-ticks, i.e. `here's an example`
+ <li> Using three or more -'s or *'s alone on a line with only spaces
+ will produce a horizontal ruler.
+ <li> A header can be created by putting a ===== (for h1) or ----- (for h2)
+ on the next line or by using 1 to 6 #'s at the start of a line
+ for h1-h6.
+ <li> auto lists item can also start with + or * instead of only -
+ <li> ordered lists can be made using 1. 2. ... labels.
+ <li> verbatim blocks can be produced by indenting 4 additional spaces.
+ Note that doxygen uses a relative indent of 4 spaces, not an
+ absolute indent like Markdown does.
+ <li> Markdown style hyperlinks and hyperlink references.
+ <li> Simple tables can be created using the <a href="http://michelf.com/projects/php-markdown/extra/#table">Markdown Extra format</a>.
+ <li> <a href="http://freewisdom.org/projects/python-markdown/Fenced_Code_Blocks">Fenced code blocks</a> are also supported, include language selection.
+ <li> files with extension .md or .markdown are converted to related pages.
+ </ul>
+ See the section about Markdown support in the manual for details.
+<li> It is now possible to add user defined tabs or groups of tabs to
+ the navigation menu using the layout file (see the section of the manual
+ about customizing the output for details).
+<li> Added new command \tableofcontents (or [TOC] if you prefer Markdown)
+ which can be used in a related page with sections to produce a
+ table of contents at the top of the HTML page (for other formats the
+ command has no effect).
+<li> When using SVG images and INTERACTIVE_SVG is enabled, a print icon
+ will be visible along with the navigation controls to facilitate
+ printing of the part of the graph that is visible on screen.
+<li> Added obfuscation of email addresses for the HTML output to make
+ email harvesting more difficult.
+<li> Added build targets for 64 bit Windows (thanks to Vladimir Simonov).
+ The installer script is also updated to install a 64 bit version of
+ doxygen on 64 bit systems and the 32 bit version on 32 bit systems.
+<li> Added support for using the HTML tag &lt;blockquote&gt; in comments.
+<li> Included patch by Gauthier Haderer that fixes some issues with the
+ dbus XML parser.
+<li> Added support for Markdown style fenced code blocks.
+<li> Added option to @code command to force parsing and syntax highlighting
+ according to a particular language.
+<li> Section of pages are now added to the navigation index.
+<li> Added support for cell alignment and table header shading in
+ LaTeX and RTF output.
+<li> Added -d filteroutput option to show the output of an input filter
+ (thanks to Albert for the patch).
+<li> id 668010: Latex: for Windows doxygen new generates a makepdf.bat
+ file in the latex output dir to create the latex documentation.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 498703: Fixed encoding issue in CHM index file for group titles.
+<li> id 510975: FORTRAN: Keywords like .GT. recognized as symbols for
+ cross ref.
+<li> id 511906, 581303, 622749: \copydoc did copy the brief description
+ into the detailed section, causing a difference between the original
+ and the copy.
+<li> id 555327: Using @ref for an example file, caused it to appear as
+ file::ext.
+<li> id 567494: Fortran: Included patch for blockdata sub-programs.
+<li> id 628417: Fortran: doxygen filter, preparsing fixed form of null
+<li> id 662286: TCL: Inlcuded patch to fixed UTF-8 support.
+<li> id 662289: TCL: Included patch to prevent ##### from appearing in the
+ output.
+<li> id 646319: Using a file name with path for HTML_STYLESHEET caused the
+ path to appear in the HTML output.
+<li> id 664826: Fixed one more problem with include guard detection.
+<li> id 665629: Fixed parse problem when a #define appeared inside an enum.
+<li> id 665855: Fixed problem parsing C++ template specialization of the
+ form A&lt;func(T*)&gt; such as used in boost::signal2 types.
+<li> id 666047: A &lt;/p&gt; followed by an htmlonly..endhtmlonly section
+ caused invalid XHTML output.
+<li> id 666085: Fixed include handling in case the include guard was
+ documented.
+<li> id 666124: Fixed problem loading the navigation tree in IE8 when
+ serving pages via a web server.
+<li> id 666337: Included patch to avoid hypenation hints in front of the
+ first captial in a word.
+<li> id 666568: When SHOW_FILES was NO, a grouped function did not appear
+ in the javascript based search index.
+<li> id 666909: \copybrief introduced extra spacing in the HTML output.
+<li> id 666986: Fixed case where search engine specific code appeared
+ twice in the HTML output.
+<li> id 666993: Fixed bug in the generated makefile causing index not
+ to be generated when using pdflatex.
+<li> id 667020: HTML output for example pages was not well-formed.
+<li> id 667192: Include statements in latex output where placed all on
+ one line in the LaTeX output.
+<li> id 667835: PHP: Fixed problem handling heredoc blocks
+<li> id 667844: For aliases with a single argument it is no longer required
+ to escape commas that appear inside the argument text.
+<li> id 668037: Latex: tables can now span multiple pages by using the xtab
+ package.
+<li> id 668218: Doxygen will ignore the common prefix shared by all
+ directories when computing a names for the directory's output files.
+ This will make the names of the output more stable.
+<li> id 668519: Added missing newline in man page output.
+<li> id 669071, 669072: Fixed parse problem for Q_PROPERTY when a template
+ with a namespaced type was used.
+<li> id 669078: Included patch which changes MATHJAX_RELPATH to use the
+ content delivery network by default.
+<li> id 669138: Fortran: Fixed problem handling multiple definition
+ statements on one line.
+<li> id 669406: Using -d Preprocessor now also works when QUIET is YES.
+<li> id 669434: Latex: citations where only generated properly if the
+ bib files specified via CITE_BIB_FILES did not have a path.
+<li> id 669758: Tcl: Same function in multiple Tcl namespaces not added.
+<li> id 670289: Fixed case where doxygen would not correctly detect
+ &gt;&gt; as a termination of a nested template.
+<li> id 670571: subpages generate empty pages in latex/rtf output and
+ broken links when SHORT_NAME was set to YES.
+<li> Included VHDL fixes provided by Martin Kreis.
+<li> The word "dummy" wrongly appeared before the first parameter type in
+ the LaTeX output for an Objective-C method.
+<li> Fixed several small glitches in the tree view javascript code.
+<li> Included a patch by Vladimir Simonov to make it possible to compile
+ doxygen with Visual Studio 2005.
+<li> Fixed some typos in the manual (thanks Albert).
+</ul>
+\endhtmlonly
+\section log_1_7 Release 1.7
+\htmlonly
+<a name="1.7.6.1"></a>
+<h1>Doxygen Release 1.7.6.1</h1>
+<h2>(release date 10-12-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li> Doxygen now reports its cache usage (for the symbol and the
+ lookup cache) at the end of a run (if QUIET=NO), and recommends
+ settings for SYMBOL_CACHE_SIZE and LOOKUP_CACHE_SIZE for your
+ project if either cache is too small.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> Added new option LOOKUP_CACHE_SIZE to control the internal cache
+ doxygen uses to find symbols given their name and a context.
+<li> Python: added support for @staticmethod
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> Python: scopes are now shown with . instead of ::
+<li> id 665313: Space before @if was not preserved, causing problems
+ with inline @if .. @endif constructs.
+<li> id 665583: Fixed XHTML validity problem when using mscgen graphs.
+<li> id 665641: Fixed XHTML validity problem when GENERATE_TREEVIEW was
+ disabled.
+<li> id 665720: Included patch to fix hang issue when non-empty
+ INCLUDE_PATH was used.
+<li> id 665778: Fixed parse issue when a comma appeared as part of an
+ enum's value.
+</ul>
+<a name="1.7.6"></a>
+<h1>Doxygen Release 1.7.6</h1>
+<h2>(release date 03-12-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li> To improve the performance of loading the navigation tree,
+ the data is now split into multiple javascript files which
+ are loaded dynamically.
+<li> The selected member is now briefly highlighted in the HTML output
+ (when GENERATE_TREEVIEW is enabled).
+<li> The navigation tree (GENERATE_TREEVIEW) now shows the same information
+ as the index.
+<li> The navindex section of layout now also controls what is shown in
+ the navigation tree.
+<li> Improved HTML output support for IE9.
+<li> Included redesigned VHDL parser (thanks to Martin Kreis for the patch)
+<li> When a class/structs has many (&gt;15) members of the same type, only
+ the first 10 are shown in the UML diagram.
+<li> Made the output of the javascript based search engine more compact.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> Update of the French translation.
+<li> id 607305: Added support for PHP heredoc and nowdoc constructs.
+<li> Added support for cross-referencing in case of operator-&gt; overloading.
+ This includes support for std::auto_ptr,std::smart_ptr,std::unique_ptr
+ and std::weak_ptr when BUILTIN_STL_SUPPORT is enabled.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> Regression: some information was no longer available for a class,
+ due to accidental deletion of a code block.
+<li> Regression: fixed matching problem in the code parser.
+<li> Included fixes for TCL to support commands with \ and command
+ definitions preceded by whitespace (thanks to Rene Zaumseil)
+<li> When using "static int a,b" variable "b" incorrectly appeared in the
+ output even though EXTRACT_STATIC was set to NO.
+<li> id 521717: .spec file was only updated after running ./configure
+<li> id 656642: Fixed potential crash when using doxygen for large projects.
+<li> id 656878: Fixed problem running bibtex with \cite command on Windows.
+<li> id 657152: Fixed constant expression evaluation error in the
+ preprocessor.
+<li> id 652277: Removed bogus ' from the man page output.
+<li> id 659244: Quotes in the brief description could appear unescaped in
+ the tooltip.
+<li> id 641336: #includes with ../ were not always processed correctly.
+<li> Fixed potential crash when INLINE_GROUPED_CLASSES and INLINE_SIMPLE_STRUCTS
+ are set to YES.
+<li> id 658896: Fixed preprocessor problem handling #defines whose value was
+ a constant string containing ///.
+<li> id 660332: Using a \ at the end of a comment line could cause
+ parsing problems for C# as the \ was treated as a line continuation.
+<li> id 658033: Fixed parser problem when using multiple member groups
+ inside a macro definition.
+<li> id 503239: Fixed several issues related to \cite handling.
+<li> id 658587: Improved the way macro definitions are collected.
+<li> id 660501: Fixed LaTeX error when using \name with a description.
+<li> id 661292: The documentation for \mainpage incorrectly mentioned that
+ one has to use \ref main in case GENERATE_TREEVIEW was set to YES, which
+ is no longer the case.
+<li> id 659096: Nested aliases definitions where not always expanded properly
+ (regression w.r.t version 1.7.4)
+<li> id 658038: Fixed preprocessor problem where the @ character inside a
+ macro definition could appear as @@.
+<li> id 658646: Fixed problem running mscgen for LaTeX and RTF output.
+<li> id 661723: Using ClassName%'s did not work anymore, and also
+ ClassName's wasn't autolinked.
+<li> id 662044: Fixed potential printing of null pointer when using
+ a version filter that returned blanks.
+<li> id 625518: Fortran: first problem where subroutine using results
+ variable appeared as a function.
+<li> id 654153: If an URL appeared at the end of a sentence, the period
+ was included in the URL.
+<li> id 656560: Fortran: Added support for the Double Complex type.
+<li> id 663640: Included workaround for Solaris CC issue in index.cpp
+<li> id 662190: Included patch to fix some TCL issues and add the TCL_SUBST
+ configuration option.
+<li> id 661672: Fortran: Added support for ALIAS expansion in comment blocks.
+<li> id 663101: Fixed case where a macro was not corrected found in the header
+ file when it could only be found via INCLUDE_PATH.
+<li> id 664718: using multiple &lt;para&gt;'s inside a &lt;summary&gt; block caused
+ text to be joined without spacing.
+<li> id 656556: Java enums are now parsed as classes.
+<li> id 664826: Fixed problem in the preprocessor regarding the handling
+ of include guards.
+<li> id 664893: Fixed typo in the docs for EXCLUDE_SYMLINKS.
+<li> id 665466: Using a relative URL with &lt;a href&gt; did not work when
+ CREATE_SUBDIRS was enabled.
+<li> id 665464: Using an absolute URL with &lt;img&gt; did not work when
+ CREATE_SUBDIRS was enabled.
+</ul>
+<a name="1.7.5.1"></a>
+<h1>Doxygen Release 1.7.5.1</h1>
+<h2>(release date 21-08-2011)</h2>
+<h3>New features</h3>
+<ul>
+<li>Update of the French translation.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li>id 521717: .spec file was only updated after running ./configure
+<li>id 656642: Fixed potential crash when using doxygen for large projects.
+<li>id 656878: Fixed problem running bibtex with \cite command on Windows.
+<li>Regression: some information was no longer available for a class,
+ due to accidental deletion of a code block.
+<li>Regression: fixed matching problem in the code parser.
+</ul>
+<a name="1.7.5"></a>
+<h1>Doxygen Release 1.7.5</h1>
+<h2>(release date 14-08-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li> id 641904: Function in the call graphs are now shown based on first
+ appearance rather then alphabetical order.
+<li> id 616213: When customizing the HTML header $title now only generates
+ the title excluding the project name (which can still be added using
+ $projectname)
+<li> Improved the look of the class index: all items now have equal spacing.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> New option INTERACTIVE_SVG which when set to YES in combination
+ with DOT_IMAGE_FORMAT=svg will make doxygen
+ generate interactive SVG diagrams that support zooming and
+ panning via the mouse (only for large graphs).
+<li> Added support for the Tcl programming language
+ (thanks to Rene Zaumseil and Samuel Bentley for the patch).
+<li> Added @copyright command.
+<li> added option MATHJAX_EXTENSIONS to provide additional extensions for
+ MathJax (thanks to David Munger for the patch).
+<li> added option INLINE_SIMPLE_STRUCTS which when enabled shows the fields
+ of simple classes and structs (with only public data fields) as a table
+ and inline in context (file/group/namespace/class) provided this context
+ is documented.
+<li> When using the server based search engine (SEARCHENGINE=YES and
+ SERVER_BASED_SEARCH=YES) doxygen now advertises a opensearch provider
+ for your project, that allows integrating the search directly in
+ the search field of the browser (thanks to Phil Lello for the patch).
+<li> id 503239: Added new option CITE_BIB_FILES and LATEX_BIB_STYLE and a new
+ command \cite, allowing you to make references to literature (as defined
+ in one or more .bib files). This also works for output formats other
+ than LaTeX. The tool bibtex is required for this to work though. Thanks
+ to David Munger for the initial patch upon which this feature is based.
+<li> PHP namespaces are now shown as A\B in the output.
+<li> Added new \snippet command that can be used to include marked
+ sections from a source file. See
+ http://www.doxygen.org/commands.html#cmdsnippet for more info.
+<li> Added translation support for Armenian, thank to Armen Tangamyan.
+ and included translation updates for a number of languages.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> Fixed a couple of potential race conditions found by Helgrind while
+ running dot from multiple threads.
+<li> Graphs did not appear when enabling both INTERACTIVE_SVG and
+ HTML_DYNAMIC_SECTIONS.
+<li> PDFs generated by newer versions of dot (i.e. 2.28) did not appear
+ in the output, because doxygen failed to extract the bounding box.
+<li> Improved call graph and cross-reference support for Python.
+<li> INTERACTIVE_SVG now also works with IE9 if the html file extension is
+ set to xhtml.
+<li> Fixed several cases where the LaTeX output could produce too long
+ lines.
+<li> id 318061: Putting two functions in the same group that only
+ different in the number of template arguments did not work.
+<li> id 437346,564614: Fixed proper encoding of multibyte output in RTF
+ depending on the code page (thanks to Hirao for the patch).
+<li> id 521717: The .spec file in the source distribution did not get
+ updated to the latest version.
+<li> id 521861: Fortran: Continuation character was not recognised in
+ fixed format code.
+<li> id 522496: Fortran: @param checking was not case insensitive.
+<li> id 560105: Fixed problem combining @cond with preprocessor directives.
+<li> id 577359: Using "struct A : C, D {};" showed a private inheritance
+ relation for D.
+<li> id 584194: Some links to typedef where pointing to the typedef'ed
+ class instead.
+<li> id 619560: Anonymous enums caused an invalid entry in the LaTeX TOC.
+<li> id 622935: Deriving from an unknown template class could cause the
+ class to appear with a -g postfix in C#
+<li> id 625731: Fortran: Fixed issue handling private subroutines.
+<li> id 632946: LaTeX now starts a new page when starting a new module.
+<li> id 634837: Fortran: Prefix of function was overwritten and the word
+ 'function' not specified.
+<li> id 637099: Fortran: Included fix for using collaboration diagrams.
+<li> id 642468: Added PHP support for namespace with curly braces.
+<li> id 643219: Fortran: Improved handling of semicolons.
+<li> id 643617: Fortran: Added support for "type is".
+<li> id 643944: A macro added to a group appeared twice in the group
+ documentation if was also made related to a class using \relates.
+<li> id 646321: Fixed problem were the search box was missing when using
+ a custom HTML header.
+<li> id 646447: Fixed unterminated img tab in the XHTML output.
+<li> id 646463: Fixed problem handling MSCFILE_DIRS option with multiple
+ paths.
+<li> id 646533: Included patch to sort overloaded members by appearance in
+ the code.
+<li> id 646747,646879: Putting an autolist inside a @todo, @bug or similar
+ section did not work anymore.
+<li> id 646922: Referring to a logo with a relative path, caused
+ a broken image target when using a custom HTML header.
+<li> id 647499: Fixed HTML rendering problem on older browsers when
+ GENERATE_TREEVIEW was enabled.
+<li> id 647768: Linking to a section on the main page could result in a
+ broken link when GENERATE_TREEVIEW was enabled.
+<li> id 647889: Fixed invalid warning when using @deparated method with
+ default values for parameters.
+<li> id 648302: A function made related using @relates could end up in
+ the wrong class if there was already a method with a matching
+ argument list in that other class.
+<li> id 649103: Return types containing multiple *'s ended up in the
+ output with only one * in some cases.
+<li> id 650397: Fixed problem with alias substitution if the alias had
+ more then 9 parameters.
+<li> id 650430: For nested anonymous structs @xx markers could appear in
+ the output.
+<li> id 650463: Added compilation support for MacOSX 10.7 (aka Lion).
+<li> id 650958: Fixed issue printing HTML pages when the
+ GENERATE_TREEVIEW option is set to YES.
+<li> id 651611: Fixed broken link to an undocumented namespace.
+<li> id 652138: Fixed potential crash while parsing Fortran code.
+<li> id 652188: Fixed problem parsing comment which included
+ an unterminated alias within quotes (i.e. "\word{")
+<li> id 652277: Lines starting with . did not appear in the man page output.
+<li> id 652389: Fortran: Fixed text is detailed function section.
+<li> id 652396: When enabling INTERACTIVE_SVG wide graphs are now also
+ fit to the screen width.
+<li> id 652695: Added missing space between parameter type and name in
+ the RTF output.
+<li> id 652741: Use background-color instead of background in doxygen.css.
+<li> id 653344: Fixed potential segfault while creating man pages.
+<li> id 653666: Fortran: add a space to "type" in argument list.
+<li> id 653801: Fixed problem handling include guard when multiple
+ blocks guarded by the same guard were used in a header file.
+<li> id 653963: Fortran: Unified handling of @params at various places.
+<li> id 654108: make clean failed on a system without qmake.
+<li> id 654244: Fixed compile issue for HP Itanium.
+<li> id 654779: Fortran: Interface was seen as a class with constructor /
+ destructor.
+<li> id 654869: Using the word "property" as a type in C caused wrong
+ results.
+<li> id 654866: Fortran: fixed issue parsing function type that looked like
+ C function pointers.
+<li> id 655178: Fortran: Fixed parse issue when using variable name
+ starting with the word interface.
+<li> id 655591: Improved error handling for empty html style list.
+<li> id 655935: Fixed case where %s could end up in a warning messge.
+<li> id 656005: Methods of Objective-C categories defined in an .m file are
+ now marked as private.
+</ul>
+<a name="1.7.4"></a>
+<h1>Doxygen Release 1.7.4</h1>
+<h2>(release date 28-03-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li> doxygen -w html now reads the default Doxyfile even if not specified
+ explicitly
+<li> doxygen -w html now produces a template header and footer that can
+ be used independent of the configuration options used.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> New option INLINE_GROUPED_CLASSES that when enabled shows grouped
+ classes inside the group documentation, instead of on a separate page.
+<li> Included updates for the Italian and Russian translation.
+<li> id 640875: Added option HTML_EXTRA_FILES which makes it easier to copy
+ additional files to the HTML output and also add them to the index files.
+<li> id 642579: Included patch that adds new LATEX_FOOTER option to
+ customize the end of refman.tex in the LaTeX output.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 140259: Jumping to a @section did not work in the RTF output.
+<li> id 521854: Fortran: included patch for supporting multiple argument
+ declarations on one line.
+<li> id 521861: Fixed problem with line continuation in Fortran.
+<li> id 566921: %A::B now prevents a link for A::B, instead of only for A
+ and generating a warning that ::B cannot be linked.
+<li> id 598481: Fortran: Added support for extends keyword.
+<li> id 618374: Added support for inlining code in the VHDL output.
+<li> id 625519: Fortran: argument name starting with a reserved word was
+ not handled properly.
+<li> id 634415: Fixed problem parsing an array of character literals.
+<li> id 635537: Links to file members were not made when found in tag files.
+<li> id 638637: The Doxyfile documentation contained some very long lines.
+<li> id 638655: Double quote in page or group title broke treeview.
+<li> id 638733: Improved documentation for DOT_IMAGE_FORMAT option.
+<li> id 638829: Added documentation to warn for consequences of using
+ HTML_HEADER.
+<li> id 638856: Fixed problem autolinking to struct field using #S::a
+<li> id 639272: using @dot...@endot produced an image referenced with
+ absolute path.
+<li> id 639521: \mscfile did not work properly for LaTeX output.
+<li> id 639716: Fixed problem where #include's could cause phantom __pad__
+ members to appear in the output (appeared on Windows only).
+<li> id 640259: Options PROJECT_LOGO and PROJECT_BRIEF were missing
+ from the manual.
+<li> id 640463: Fixed problem parsing PHP "use" statement when the argument
+ did not have a namespace scope.
+<li> id 640588: Included fix for proper splitting of multiple arguments
+ given to the QHP_CUST_FILTER_ATTRS option.
+<li> id 640646: Long error messages could cause memory corruption.
+<li> id 640742: XML: switched indent option to no in the combine.xslt script.
+<li> id 640754: Comment with XML style list of type table was not rendered
+ properly.
+<li> id 640822: Added support for overloading of C# indexer operators.
+<li> id 640828: Internal section marked with @internal was not shown as
+ such anymore in the XML output.
+<li> id 640847: PHP: Fixed parse problem referring to class in global
+ namespace.
+<li> id 640924: Included patch by Haffmans to make the custom header and
+ footer independent of the chosen config options.
+<li> id 640927: Included fix to prevent a warning in the server side PHP
+ search script.
+<li> id 641026: Included patch to fix broken hyperlink to page entry
+ in xreflists.
+<li> id 641188: Header of \page was wrong in Man page output.
+<li> id 641336: #include's to other directories were not always linked.
+<li> id 641673: Using "use Foo\Foo;" in PHP could cause doxygen to hang.
+<li> id 641814: In some cases the HTML output could contain an extra &lt;/p&gt;.
+<li> id 642030: Tooltips with HTML entities could be wrongly truncated.
+<li> id 642475: Include graphs could be incomplete.
+<li> id 643056: Fixed problem with macro expansion.
+<li> id 643279: Fixed potential crash when generating a warning for
+ void f(int %x) style parameter, which is valid in C++/CLI.
+<li> id 643280: Included patch to enabled LargeAddressAware for Windows
+ builds.
+<li> id 643276: Fixed cases where FILE_VERSION_FILTER was called for
+ dummy files with name "generated".
+<li> id 643655: Fixed argument matching issue when one of match candidates
+ was a typedef of a method pointer.
+<li> id 645754: mscfile tag was closed with dotfile in the XML output.
+<li> doxygen -w html now ignores the values for HTML_HEADER and HTML_FOOTER
+ found in the config file.
+<li> Importing a group via a tag file could overrule a local group with
+ the same name even when EXTERNAL_GROUPS was disabled.
+</ul>
+<a name="1.7.3"></a>
+<h1>Doxygen Release 1.7.3</h1>
+<h2>(release date 03-01-2011)</h2>
+<h3>Changes</h3>
+<ul>
+<li> Added a header for each HTML page above the navigation menu,
+ showing the project name and logo and a short descriptin (all optional).
+ Disabling the index (with DISABLE_INDEX) still shows the new header
+ (you can still customize this using HTML_HEADER). This now works
+ nicely in combination with GENERATE_TREEVIEW = YES and/or
+ SEARCH_ENGINE = YES.
+<li> Redesigned the treeview feature. Instead of using frames, the
+ navigation tree is now loaded on each page dynamically. This allows
+ bookmarking a page and always keeps the top menu visible. Also the
+ current item is automatically highlighted in the tree.
+ Also updated the icons in the treeview to match the overall look'n'feel.
+ Note: if you now use a custom HTML header, please update it using
+ doxygen with the -w and the edit the default header.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> id 499544: Added SVG support to doxygen's dot output
+ (setting DOT_IMAGE_FORMAT to svg now works as expected)
+<li> Added control to the wizard to configure the color of the output
+ visually.
+<li> Added options to specify project synopsis and select a
+ project logo to the wizard.
+<li> Added option PROJECT_LOGO which can be used to specify an image
+ which will be shown in the header of each HTML page along with
+ the project name (PROJECT_NAME option).
+<li> Added option PROJECT_BRIEF which can be used to specify a brief
+ description which will be shown in the header of each HTML page
+ just below the project name.
+<li> Added new option FILTER_SOURCE_PATTERNS which can be used
+ in combination with FILTER_SOURCE_FILES to filter files used for
+ the source browser based on file extension, which can overwrite
+ the filter set by FILTER_PATTERNS and/or INPUT_FILTER.
+<li> Added new option STRICT_PROTO_MATCHING which is disabled by default,
+ and makes the parameter matching to be less strict, resulting in
+ fewer "No matching class member found" warnings.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 306076: code blocks with using directives did not get hyperlinked.
+<li> id 313527: enum values with bitfields did not get parsed correctly.
+<li> id 565715,630582: Included a patch that fixes a couple of Fortran issues
+ (thanks to Albert).
+<li> id 615507: Fixed problem handling @cond..@endcond in Fortran code.
+<li> id 619040: Scope was missing in Tokens.xml when using docsets.
+<li> id 625517,523156: Applied patch tp avoid stripping prefixes for Fortran
+ subroutines.
+<li> id 626476: allow label before end statement in Fortran
+<li> id 630901: &lt;/see&gt; was not handled properly in comment block.
+<li> id 632311: Fixed potential crash for empty verbatim section.
+<li> id 632426: closing brace of a function with one parameter has wrong
+ color in HTML.
+<li> id 632543: Added support for Fortan TYPEs with languge bindings.
+ (thanks to a patch by Daniel Franke)
+<li> id 632879: An explicit link request such as #blah did not longer produce
+ a warning if no symbol named blah was found.
+<li> id 633891: warnings in "inbody" documentation were shown with "unknown"
+ file name.
+<li> id 634116: Titles customized via the layout file did not appear in
+ the title page and navigation tree, only in the top menu.
+<li> id 634600: Fixed problem resolving typedef.
+<li> id 634775: Fixed a problem were // inside a code block got removed.
+<li> id 634857: Added support for escaping :: by using \:: (or @::)
+<li> id 634962: #include with relative path to parent dir did not get
+ hyperlinked.
+<li> id 634986: Removed double definition of docParamName in compound.xsd.
+<li> id 635198: C++/CLI Finalizer methods were not parsed properly.
+<li> id 636475: Objective-C method names can now be used as the
+ the first argument of \ref.
+<li> id 636588: Fixed a couple of problems in the compound.xsd schema used
+ for XML output.
+<li> id 636598: DISTRIBUTE_GROUP_DOC now works again for enum values.
+<li> id 636947: Improved matching of typedef'ed array parameter and non
+ typedef'ed array parameter.
+<li> id 637610: Added a number of fixed for Fortran interfaces.
+<li> id 637712: Handle files with the .for extension as Fortran.
+<li> id 637987: Fixed error in the grouping documentation.
+<li> Fixed line number sync problem when using Objective-C #import
+ statements.
+<li> Fixed problem handling /** @cond */ in the preprocessor.
+<li> Member groups could get reordered in the output.
+</ul>
+<a name="1.7.2"></a>
+<h1>Doxygen Release 1.7.2</h1>
+<h2>(release date 09-10-2010)</h2>
+
+<h3>Changes</h3>
+<ul>
+<li> Changed the default font of the LaTeX output to helvetica.
+<li> Changed the way parameters and return values are represented in the
+ LaTeX and RTF output. They are now listed using tables.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> added support for Apple's block object extension for C/Obj-C/C++.
+<li> added support for detecting Python constructors and destructors.
+<li> id 624575: Added \endinternal command that can be used to force
+ the end of a section started with \internal.
+<li> id 552605: Added parsing support for PHP 5.3+ style namespaces.
+<li> id 582532: added \mscfile command which can be used to insert a
+ message sequence chart given a .msc file.
+ Also added a new config option MSCFILE_DIRS to provide directories
+ were msc files are searched (Thanks to Adrien for the patch).
+<li> Added support for type specifiers for documenting PHP parameters,
+ format: "@param type $paramname docs"
+<li> Added support for rendering formulas in the HTML output
+ using MathJax instead of using prerendered bitmaps.
+ For this purpose the options USE_MATHJAX and MATHJAX_RELPATH were
+ added.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 306076: Fixed case where using of a namespace did not work inside
+ an example.
+<li> id 336053,487871: /// were not stripped from formulas and \dot..\enddot
+<li> id 563698: dropped support for a4wide paper format for LaTeX, since
+ it is on the LaTeX taboo list.
+<li> id 571014: Behaviour of CLASS_DIAGRAM=NO in combination with
+ HAVE_DOT=YES, was not propely documented.
+<li> id 576291: Python comments for next class or method could end up in
+ code of a method/class when enabling INLINE_SOURCES.
+<li> id 611174: Fixed problem handling nestes classes in Python.
+<li> id 621733: removed unexpected warnings about undocumented return types
+<li> id 622737: Undefined function macros could cause constant expression
+ errors.
+<li> id 622780: updated copyright statement in PDF docs.
+<li> id 622935: C# generics appeared with -g extension in the output in
+ some situations.
+<li> id 623023: Fixed parsing problem for "int &amp;foo1(),&amp;foo2();"
+<li> id 623052: Link to destructor was wrong in the member index.
+<li> id 623424: Fixed problem where struct description gets added to variable
+ of struct type.
+<li> id 623673: Anchors were missing in the Qhp index for members.
+<li> id 623733: Fixed potential crash due to uninitialized line number.
+<li> id 623765: closed.png was wrongly linked when GENERATE_SUBDIRS and
+ HTML_DYNAMIC_SECTIONS were enabled.
+<li> id 624014: Function macro was not handled properly when there was
+ a line continuation directly after the name.
+<li> id 624095: Linking to a class via a tag file did not work if the class
+ was in an undocumented namespace.
+<li> id 624104: Fixed a couple of typos in lodepng.h
+<li> id 624323: Graph legend image was missing form the index files.
+<li> Fixed a number of typos in the config file documentation
+ (thanks to Jens Schweikhardt)
+<li> id 624514: Some enums were not cross-referenced.
+<li> id 624829: Missing \endcond could cause preprocessor issues in
+ next file(s) to be parsed.
+<li> id 625070: a function definition in a namespace, documented in the
+ header did not always get cross-referenced.
+<li> id 625296: Removed superfluous &lt;td&gt;&lt;/td&gt; from parameter list in
+ HTML output.
+<li> id 625317: Unterminated comment could crash doxygen.
+<li> id 625531: Inherited documentation was only included for the
+ last derived class in case of multiple inheritance.
+<li> id 625578: In the HTML output &lt;/div&gt; was missing for built-in
+ class diagrams.
+<li> id 625555: References in example files with underscores were wrong.
+<li> id 625982: When using japanese characters mixed with ascii characters
+ doxygen incorrected ended the brief description with a dot.
+<li> id 625952: setting MULTILINE_CPP_IS_BRIEF to YES, cause /// to appear
+ in the output.
+<li> id 626033,567774: EXTENSION_MAPPING did not work if a the mapped
+ language was handled by the same parser as used for the original
+ extension.
+<li> id 626175: Fixed bracket bug in LaTeX fancy headers.
+<li> id 626508: Allow hyphen in key argument of \xrefitem.
+<li> id 626647: \copydoc did not work for array type arguments (e.g. int[]).
+<li> Use \dotfile did not produce the correct map file, so URLs in dot
+ files did not work.
+<li> id 627371: #define's in files only found via INCLUDE_PATH were not
+ correctly handled.
+<li> id 628065: auto brief description ending with .) cause the ) to
+ end up in the detailed part.
+<li> id 628242: Fixed encoding issue for the Spanish translation.
+<li> id 628678: Fixed segmentation fault in case of very long errors.
+<li> id 629040: Fixed type in search page of the documentation.
+<li> id 629182: Fixed problem detecting include guard.
+<li> id 629270: Made file extension to parser mapping case insensitive.
+<li> id 629485: Latex makefile clean target used rm command also for Windows.
+<li> id 629942: the EXCLUDE_SYMBOLS option was missing form the online docs.
+<li> id 631094: \htmlinclude and \verbinclude ended the brief description.
+<li> id 631380: Inconsistent behaviour when a brief description was given
+ following by a detailed comment block with JAVADOC_AUTOBRIEF enabled.
+<li> Fixed a number of typos in the documentation
+ (thanks to Albert van der Meer)
+<li> Fixed potential hangup when scanning directories defined as
+ symlinks to absolute paths.
+<li> HTML attributes other than src were not copied for the &lt;img&gt; tag.
+</ul>
+<a name="1.7.1"></a>
+<h1>Doxygen Release 1.7.1</h1>
+<h2>(release date 25-06-2010)</h2>
+<h3>Changes</h3>
+<ul>
+<li> id 621695: Made warning and error messages appear with lower case
+ "warning:" and "error:" prefix to make it easier to use the messages
+ from Visual Studio.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> id 621908: Added new config option FORMULA_TRANSPARENT which allows
+ selecting between transparent (YES) or non-transparent (NO) PNGs for
+ formulas in the HTML output.
+<li> Update for Turkish translation.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 533821: Inheritance relation for a C# class deriving from
+ a generic class was not handled correctly.
+<li> id 554638: Changing DOT_IMAGE_FORMAT did not cause the graphs to be
+ regenerated.
+<li> id 576533: A field of the form "enum E *p" was ignore.
+<li> id 597016: Hide scope name was not working properly for todo items
+ inside class members, where the class was inside a namespace.
+<li> id 617761: In dot graphs now also @ref worked (previously only \ref was
+ supported).
+<li> id 621653: Fixed error when compiling doxygen for Solaris 8.
+<li> id 621733: Removed bogus warning about undocument return type for
+ define when WARN_NO_PARAMDOC was enabled.
+<li> id 621780: Fixed parsing support for a function that returns a
+ struct definition.
+<li> id 621785: Doxygen could hang when using \copydoc in a function with
+ \param.
+<li> id 621805: Using //!&lt; after a #define no longer worked.
+<li> id 621854,622219,622593: html help compiler (and also the Qt
+ help compiler) was called before all dot images were generated.
+<li> id 621984: Using a auto-list in combination with \subpage cause the
+ items to be inlined.
+<li> id 622018: Fixed problem parsing a @param command where the
+ text part started with a formula.
+<li> id 622019: Added some instructions how to document Fortran code.
+<li> id 622041: Using \var multiple times in a comment block did not
+ work properly.
+<li> id 622413: Tooltips could get wrongly truncated when multi-byte
+ UTF-8 characters were used.
+<li> id 622471: Argument matching failed for typedef in another namespace.
+<li> Fixed crash situation while handling commands inside a @ref section.
+<li> Treeview icons were missing in the HTML output when setting
+ GENERATE_TREEVIEW to NO and USE_INLINE_TREES to YES.
+</ul>
+
+<a name="1.7.0"></a>
+<h1>Doxygen Release 1.7.0</h1>
+<h2>(release date 15-06-2010)</h2>
+<h3>Changes</h3>
+<ul>
+<li> Changed the look of the HTML output.
+<li> Made several internal changes that should have a positive effect on the
+ overall performance.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> The color of the HTML output can now easily be adjusted using three new
+ options: HTML_COLORSTYLE_HUE, HTML_COLORSTYLE_SAT,
+ and HTML_COLORSTYLE_GAMMA, which control respectively the hue,
+ saturation, and gamma of all elements in the HTML output.
+<li> Moved dot invocations to the end of a doxygen run. Doxygen will now
+ run multiple instances of dot in parallel (for better CPU utilisation
+ on multi-core systems). The new config option DOT_NUM_THREADS
+ determines the number of threads used (were 0 is auto-detect).
+<li> Added option EXT_LINKS_IN_WINDOW which controls whether or not
+ links to symbols imported via tag files will be opened in a new window.
+<li> Included various language updates (thanks to Petr for coordinating).
+<li> Included patch by Stefan Oberhumer that allows customizing the
+ way parameter lists are shown in the LaTeX output.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 306076: source browser could miss links for used namespaces.
+<li> id 361476,620924: \if and \endif did not work properly inside auto lists.
+<li> id 557164: No warning for missing return type documentation even though
+ WARN_NO_PARAMDOC was set to YES.
+<li> id 577005: Handling of nesting \defgroup's was not always working
+ properly.
+<li> id 578739: &oslash; was not translated correctly in the LaTeX output.
+<li> id 583526: Use relative paths for mscgen diagrams to avoid errors in the
+ LaTeX output.
+<li> id 592991: The "Use current settings at startup" feature of Doxywizard
+ was broken.
+<li> id 593679: Links in the search results were broken if they pointed to
+ symbols imported via tag files using an absolute path or URL.
+<li> id 593760,615682: Fixed man page output problem when using @par.
+<li> id 594021: A C comment before a #endif caused the preprocessor
+ statement to be ignored.
+<li> id 597013: When HIDE_SCOPE_NAMES was enabled also the scope for
+ nested classes was stripped. Now only the namespace scope will be
+ stripped as before.
+<li> id 600829: Autolinks to namespace members did not work if
+ an explicit # or :: was used.
+<li> id 602732: Slashes inside strings in java annotations were not handled
+ properly.
+<li> id 606335: Fixed the "show html output" button in doxywizard
+ for Windows when IE was set as the default browser.
+<li> id 608292: Formatting was lost for section copied with \copydoc.
+<li> id 608359: Fixed C++ parse issue for "class : public base {} var;"
+ construct.
+<li> id 611056: Generated HTML footer file did not have UTF-8 encoding and
+ the relative path marker needed when using CREATE_SUBDIRS = YES.
+<li> id 611193: Fixed parsing problem with try-functions having multiple
+ catch handlers.
+<li> id 611642: Specialized private template member function appeared as
+ public.
+<li> id 611888: Include dependency graphs were sometimes wrong.
+<li> id 612170: Some lines in the generated Doxyfile where too long.
+<li> id 612275: Fixed auto-link problem for certain URLs.
+<li> id 612292: Improved handling of ellipsis inside brief description when
+ JAVADOC_AUTOBRIEF is enabled.
+<li> id 612364: Accessibility of macros was not handled properly in all cases.
+<li> id 612310: Enabling REFERENCED_BY_RELATION without SOURCE_BROWSER could
+ result in broken links.
+<li> id 612458: Fixed problem handling @copydoc for function operators.
+<li> id 612609: A raw C# string constant could end up in the next string.
+<li> id 612969: subpages were not part of the XML output.
+<li> id 613024: First list item in the paragraph after a @todo
+ item was not parsed properly.
+<li> id 614204: Generated man page links were having a heading underscore.
+<li> id 614443: Made include guard detect a bit more strict to avoid false
+ positives.
+<li> id 614447: The labels of CVS tags were missing a colon.
+<li> id 614438: Fixed problem parsing Q_PROPERTY with template type and
+ spaces.
+<li> id 615165: Made the date string in the HTML footer translatable,
+ along with some other sentences on the directory pages.
+<li> id 612858: Inline attribute was shown also for non-inline template
+ members.
+<li> id 615583: Fixed problem handling @copy for operators with
+ const qualifier.
+<li> id 615755: Fixed problem handling '"' inside comments.
+<li> id 615957: Made the LaTeX output a bit less spatious using \input.
+<li> id 615695: Fixed preprocessor issue where a macro that was redefined
+ was not resolved.
+<li> Fixed character encoding issue on the search results page.
+<li> id 615670: C# namespaces are now extracted also without comment block
+ (the language spec does not allow XML documentation).
+<li> id 616209: included patch that fixes some typos in the code.
+<li> id 616344,610604: Pages with an underscore in the label generated a
+ file name containing two underscores.
+<li> id 616387: text of the form something.symbol got autolinked when
+ symbol had a global scope.
+<li> id 616761: Call graph could be wrong when local variable has the same
+ name as a global function.
+<li> id 616947: Added documentation patch on how to create URL links with
+ custom text.
+<li> id 616988: Doxywizard now removes non-existant files from the
+ recent list and has an option to clear the list completely.
+<li> id 617051: A macro defined via PREDEFINED did not always overrule a
+ macro definition in the code.
+<li> id 617278: Enabling call graphs produced invalid XHTML output.
+<li> id 617871: Non ascii characters in file or directory names
+ caused problems on Windows.
+<li> id 618079: An ALIAS with parameters spanning multiple lines
+ caused problems with /// style comments.
+<li> id 618632: Included patch to prevent image overflowing the page in
+ the LaTeX output.
+<li> id 619728: Fixed problem using EXTENSION_MAPPING for C# (thanks to
+ Vsevolod Kukol for the patch).
+<li> id 619978: Links to external files could be wrong when CREATE_SUBDIR
+ was enabled.
+<li> id 620229: /* characters in a print broke parsing within an conditional
+ section.
+<li> id 620926: \if and \endif did not work properly inside HTML tables.
+<li> Using @include in combination with LATEX_SOURCE_CODE caused wrong
+ output.
+<li> Included a patch by Guido Tack which adds two new options
+ for docsets (DOCSET_PUBLISHER_ID and DOCSET_PUBLISHER_NAME) and
+ fixes an issue with linking to docset members.
+<li> Included patch by Stefan Oberhumer to support escaped {}'s in alias
+ definition and parameters.
+
+</ul>
+\endhtmlonly
+\section log_1_6 Release 1.6
+\htmlonly
+<a name="1.6.3"></a>
+<h1>Doxygen Release 1.6.3</h1>
+<h2>(release date 21-02-2010)</h2>
+<h3>New features</h3>
+<ul>
+<li> id 608480: Using \dir without argument will create directory
+ documentation for the directory in which the \dir command
+ was found.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 590161: perlmod output was wrong when using paragraph commands.
+<li> id 600525: Included patch for VHDL.
+<li> id 605698: Replaced size attribute of hr tag by class attribute in the
+ HTML output.
+<li> id 606030,606192,607563:
+ Using \dot produced "Error opening map file" or
+ could even crash doxygen.
+<li> id 606084: Loading a new config file in doxywizard did not reset all
+ values of a previously loaded config file.
+<li> id 606104: Grouped members with todo-like items were shown with
+ "GlobalScope" prefix.
+<li> id 606156: Fixed RTF rendering problem with group index.
+<li> id 606206,610133: Added missing line break in LaTeX output.
+<li> id 606330, 608056: The title of pages whose label had an underscore
+ was not shown
+<li> id 606717: Include guard not starting with #ifndef SOME_GUARD_H were not
+ recognised as such.
+<li> id 606718: Setting SEARCHENGINE to YES and GENERATE_HTML to NO caused
+ error that search results directory could not be created.
+<li> id 606772,608493: typedef'ed enums or struct with the same as the
+ typedef did no longer show up.
+<li> id 607088,607946: Related pages (manual and automatic like the todo page)
+ caused broken links when SHORT_NAMES was enabled.
+<li> id 607432,608002: Automatically generated related pages (like the
+ todo page) caused broken links when CREATE_SUBDIR was enabled.
+<li> id 607736: comments after #if could cause next function call not to be
+ cross-referenced.
+<li> id 607743: \internal inside a conditional section caused warning.
+<li> id 608016: Using \internal inside a \section did not end at the
+ next \section as documented.
+<li> id 608018: \internal command produced message with .: in
+ the LaTeX output.
+<li> id 608072: HTML Tables with custom attributes were not rendered
+ properly.
+<li> id 608227: Man pages with underscore got double underscore in the name.
+<li> id 608590: Buffer overflow when using non-ascii characters as class
+ name.
+<li> id 608921: Macro definition had effect even if the definition was not
+ actually included.
+<li> id 609504: config.h and config.l where missing from the SVN repository.
+<li> id 609624: Todo items were merged for overloaded functions.
+<li> id 609709: C# enum values with @todo items were missing from the todo
+ list.
+<li> id 610437: Removed bogus warning when using &lt;br/&gt; tag.
+<li> Fixed parsing problem for function pointer type starting with
+ "typedef enum".
+<li> Preprocessor did not take EXCLUDE_PATTERNS into account, which
+ could cause parse issues when importing a .tlb file.
+</ul>
+
+
+<a name="1.6.2"></a>
+<h1>Doxygen Release 1.6.2</h1>
+<h2>(release date 30-12-2009)</h2>
+<h3>Changes</h3>
+<ul>
+<li> id 594787: Autolinking to all-lower case words has been disabled,
+ in accordance with the documentation.
+<li> id 604543: Doxygen now allows any extension supported by dot via the
+ DOT_IMAGE_FORMAT option.
+<li> Switched back to using PNGs for built-in diagrams and formulas using
+ the Lode Vandevenne's PNG encoder.
+</ul>
+<h3>New features</h3>
+<ul>
+<li> Added new option SERVER_BASED_SEARCH to re-enable searching via a
+ PHP enabled web browser instead of only using javascript locally.
+ This method better scales to larger projects and allows full text
+ search.
+<li> Added new options GENERATE_ECLIPSEHELP and ECLIPSE_DOC_ID
+ to generate an index file that can be used to embed doxygen's HTML
+ output into Eclipse as a help plugin
+ (thanks to a patch by Ondrej Starek).
+<li> Wrote new <a href="http://www.doxygen.org/searching.html">documentation</a>
+ regarding the methods of searching in the HTML output.
+<li> Included patch by Ed Rosten to render formulas with
+ proper anti-aliasing on non-white backgrounds using transparency.
+<li> Add new option FORCE_LOCAL_INCLUDES to make the default #include
+ appearance in class documentation with "" i.s.o sharp brackets.
+<li> id 558457: Make \addindex put keywords into the .qhp file.
+<li> id 595214: #cmakedefine is now treated the same was as #define
+ (for users of the CMake build system).
+<li> Added compilation support for OSX 10.6 (aka Snow Leopard)
+<li> Included language update for Brazilian.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> Doxywizard did not warn when it failed to save its config file.
+<li> id 557035: Empty class definitions were not included in Tokens file
+ for docsets.
+<li> id 563233: GENERATE_QHP details was considered even though it is
+ not defined.
+<li> id 567346: Comment parser could get stuck in certain cases.
+<li> id 570369: GENERATE_QHP should generate keywords for classes in
+ generated *.qhc.
+<li> id 571964: Fixed two issues in the compound.xsd schema definition.
+<li> id 592991: Fixed wrong default destination directory.
+<li> id 593040: Fixed problem with distributing member group documentation
+ for anonymous member groups.
+<li> id 593273: GENERATE_TODOLIST=NO and friends not longer worked.
+<li> id 593928: Added support for UCS-2 encoded input files.
+<li> id 594391: Fixed problem parsing fully-qualified java annotations.
+<li> id 594592,596815: Fixed problem handling quotes.
+<li> id 595191: Not all configuration options appeared in the index of
+ the documentation and some were not sorted correctly.
+<li> id 595253: formulas had the .png extension while they were gifs.
+<li> id 595833: Fixed recursive lockup while resolving template relations.
+<li> id 595935: Doxygen's preprocessor got confused when /**/ appeared as
+ part of a macro definition.
+<li> id 596085: Removed obsolete option USE_WINDOWS_ENCODING from the docs.
+<li> id 596233: RTF output was missing a new paragraph for brief
+ member descriptions.
+<li> id 596807,596819: Code reformatting done for the LaTeX output could
+ break multibyte UTF-8 characters causing invalid output.
+<li> id 596809: Using multibyte characters in a page label caused invalid
+ output.
+<li> id 596816: Documented the interaction between LATEX_CMD_NAME and
+ USE_PDFLATEX.
+<li> id 597015: Todo items for two inner classes with the same name where
+ collapsed together in the todo list when HIDE_SCOPE_NAMES
+ was enabled.
+<li> id 597016: Scope was not hidden for members in the todo list even
+ though HIDE_SCOPE_NAMES was set to YES.
+<li> id 598497: Struct variable with explicit struct keyword got labelled
+ with [read] attribute.
+<li> id 596902: PHP was not parsed properly when it appeared in a
+ &lt;script language="php"&gt; section.
+<li> id 597415: Fixed problem matching base class member against the
+ member in the derived class.
+<li> id 597518: Makefile for Docsets now honors DESTDIR.
+<li> id 598298: Made browsing for HHC_LOCATION via the wizard
+ yield an absolute path.
+<li> id 599128: Changed default for CHM_INDEX_ENCODING to CP1250 to avoid
+ issues in a Solaris environment.
+<li> id 595931: Removed unnecessary paragraphs from HTML table cells.
+<li> id 597541: referring to page labels of the form a-1 did not work.
+<li> id 599224: Code generators could produce extra &lt;/span&gt; tags.
+<li> id 599974: Included the PHP search engine again (with new config
+ option SERVER_BASED_SEARCH to enable it)
+<li> id 600544: Doxygen produced invalid Latex output for RCS tags.
+<li> id 600563: Fixed issue with include dependency tracking that could
+ cause macro expansion not to work properly.
+<li> id 600940: Fixed issue with VHDL call graph (thank to Martin Kreis
+ for the fix).
+<li> id 601138: Fixed problem parsing C++ function-try-blocks.
+<li> id 601222: #include inside a class could cause line numbers to be off.
+<li> id 601223: Fixed parsing problem skipping over /**/ comment.
+<li> id 601694: Fixed problem handling Javadoc style {@code ... } blocks.
+<li> id 601771: Special commands did not work in the title of
+ the @mainpage.
+<li> id 602818: Fixed problem parsing files that start with UTF-8 BOM.
+<li> id 603001: Fixed problem parsing friend function with explicit scope.
+<li> id 603238: Fixed perlmod generation issue.
+<li> id 604948: Project number was not centered anymore in the HTML output.
+<li> id 604503: Using %word in a page title incorrectly did show the %.
+</ul>
+
+<a name="1.6.1"></a>
+<h1>Doxygen Release 1.6.1</h1>
+<h2>(release date 25-08-2009)</h2>
+<h3>Bug fixes</h3>
+<ul>
+<li> Fixed file handle leak when parsing include files. Also fixed
+ the logic that determines whether or not an include file need to be
+ parsed.
+<li> Search result pages were not using UTF-8 character encoding.
+<li> Search results pointing to external references were not linked correctly.
+<li> id 133418: Multiline second argument of \ref caused unexpected " warning.
+<li> id 592454: Feeding invalid XML could crash doxygen's DBus XML parser.
+<li> id 592485: Include patch to fix problem with building rpms.
+<li> id 592511,592625: Doxywizard problem with GENERATE_TREEVIEW.
+<li> id 592650: SHOW_USED_FILES now works again.
+<li> id 592808: xrefitems (like @todo) did not appear in the list when
+ found in comments marked with @enum or @name.
+</ul>
+<h1>Doxygen Release 1.6.0</h1>
+<h2>(release date 20-08-2009)</h2>
+<h3>Changes</h3>
+<ul>
+<li> id 580924, 541234: Replaced the PHP based search engine by a
+ Javascript/DHTML based one.
+ As a result the search feature no longer requires a HTTP server
+ with PHP enabled to be usable. Searching is limited to symbols
+ though, but it is now possible to filter on symbol type.
+<li> id 519886: Make the HTML output XHTML 1.0 compliant.
+<li> id 579950: Objective-C categories are now merged with their base
+ class, unless there is no base class.
+<li> Member groups with the same header within the same scope are now
+ merged. This also works for Objective-C categories.
+<li> Changed the LaTeX style sheet such that more of the markup is
+ configurable. Please update your style sheet if you use a custom one.
+<li> id 584844: Treat \details inside a brief description as a new paragraph
+ command.
+<li> Split GENERATE_TREEVIEW into two separate options:
+ GENERATE_TREEVIEW and USE_INLINE_TREES.
+<li> Removed the dependencies on libpng and libz, doxygen now generates
+ gifs again for internal class diagrams (like it did 7 years ago ;-)
+</ul>
+<h3>New features</h3>
+<ul>
+<li> Added option SORT_MEMBERS_CTORS_1ST, which when enabled places the
+ constructors and destructors first in an otherwise sorted list.
+<li> id 581518: Applied patch by Tobias Hunger that adds support for
+ documenting DBus XML interface descriptions.
+<li> Included QtHelp patch by Karsten Heimrich which adds missing
+ reference and keyword for methods.
+<li> Included updates for the Korean and Polish translation.
+</ul>
+<h3>Bug fixes</h3>
+<ul>
+<li> id 131989: Fixed preprocessor handling for C# code.
+<li> id 133418: -- was not rendered correctly for LaTeX output
+<li> id 157485: Missing link in todo page.
+<li> id 318061: Two template functions that only differed in the number
+ of template arguments were seen as the same function.
+<li> id 443939: HIDE_UNDOC_CLASSES did not work properly.
+<li> id 509348: Fixed problem with syncing the information of
+ declaration and definition in the presence of an extra forward
+ declaration in the source code.
+<li> id 522193: For C# enum values were merged together if the same enum
+ name was used in different scopes.
+<li> id 523167: Included patch to handle PROGRAM statement in Fortran as
+ subroutines/functions.
+<li> id 554636: Remove spacing around brackets for Obj-C protocols.
+<li> id 557026: Included patch for fixing wrongly labeled items in docsets.
+<li> id 560512: Improved parser to better disambiguate
+ nested templates ending with &gt;&gt; from the bitshift right operator.
+<li> id 570238: Fixed matching problem for method in nested class, where
+ the outer class is a template.
+<li> id 581746: Segfault/realloc error when a very long path was used.
+<li> id 582469: documented #define with guard caused wrong documentation.
+<li> id 582276: Doxywizard could crash on exit in some cases.
+<li> id 582676: Regression: a struct ivar in ObjC class screws up method
+ identification.
+<li> id 583213: Included patch that avoids trailing spaces in the
+ generated Doxyfile template.
+<li> id 584192: Included VHDL patch by Martin Klein
+<li> id 585543: Fixed case where matching declaration and definition did
+ not work correctly.
+<li> id 585260: The "more..." link for files was broken, since the anchor
+ was not generated.
+<li> id 586925: Fixed parsing problem when an unpaired apostrophe
+ appeared in a Python comment.
+<li> id 588291: Included fix for doxywizard makefile.
+<li> id 588587: Added missing virtual destructor to CompAccept base class.
+<li> id 588968: Fixed segmentation fault for specific case in PHP code.
+<li> Fixed some issues building for Windows.
+<li> id 589514: Fixed problem handling strings like a"\b" within a comment.
+<li> id 589616: Fixed problem matching explicitly scoped parameter in a
+ template class.
+<li> id 590712: A namespaced with name "internal" (C++/CLI keyword)
+ could confuse doxygen's C++ parser.
+<li> id 591749: @optional/@required attributes for Objective-C were missing
+ from the XML output.
+</ul>
+<h1><a href="http://www.doxygen.org/changelog_1.5.html">Doxygen Release 1.5 and earlier</a></h1>
+<p>
+<hr>
+<p>
+Go <a href="index.html">back</a> to the main page.
+
+\endhtmlonly
+*/
diff --git a/doc/commands.doc b/doc/commands.doc
index cb59feb..03c789f 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -2577,8 +2577,10 @@ class Receiver
HTML-only block.
\sa section \ref cmdmanonly "\\manonly", section
- \ref cmdlatexonly "\\latexonly", and section
- \ref cmdrtfonly "\\rtfonly".
+ \ref cmdlatexonly "\\latexonly", section
+ \ref cmdrtfonly "\\rtfonly", section
+ \ref cmdxmlonly "\\xmlonly", and
+ \ref cmddocbookonly "\\docbookonly".
<hr>
\section cmdimage \\image <format> <file> ["caption"] [<sizeindication>=<size>]
diff --git a/doc/config.doc b/doc/config.doc
index c5aca26..a32f225 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -128,6 +128,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_extract_anon_nspaces EXTRACT_ANON_NSPACES
\refitem cfg_extract_local_classes EXTRACT_LOCAL_CLASSES
\refitem cfg_extract_local_methods EXTRACT_LOCAL_METHODS
+\refitem cfg_extract_package EXTRACT_PACKAGE
\refitem cfg_extract_private EXTRACT_PRIVATE
\refitem cfg_extract_static EXTRACT_STATIC
\refitem cfg_file_patterns FILE_PATTERNS
@@ -142,7 +143,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_generate_autogen_def GENERATE_AUTOGEN_DEF
\refitem cfg_generate_buglist GENERATE_BUGLIST
\refitem cfg_generate_chi GENERATE_CHI
-\refitem cfg_generate_deprecatedlist GENERATE_DEPRECIATEDLIST
+\refitem cfg_generate_deprecatedlist GENERATE_DEPRECATEDLIST
\refitem cfg_generate_docbook GENERATE_DOCBOOK
\refitem cfg_generate_docset GENERATE_DOCSET
\refitem cfg_generate_eclipsehelp GENERATE_ECLIPSEHELP
@@ -282,13 +283,14 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_sort_member_docs SORT_MEMBER_DOCS
\refitem cfg_sort_members_constructors_first SORT_MEMBERS_CTORS_1ST
\refitem cfg_source_browser SOURCE_BROWSER
+\refitem cfg_strict_proto_matching STRICT_PROTO_MATCHING
\refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
\refitem cfg_strip_from_inc_path STRIP_FROM_INC_PATH
\refitem cfg_strip_from_path STRIP_FROM_PATH
\refitem cfg_subgrouping SUBGROUPING
-\refitem cfg_symbol_cache_size SYMBOL_CACHE_SIZE
\refitem cfg_tab_size TAB_SIZE
\refitem cfg_tagfiles TAGFILES
+\refitem cfg_tcl_subst TCL_SUBST
\refitem cfg_template_relations TEMPLATE_RELATIONS
\refitem cfg_toc_expand TOC_EXPAND
\refitem cfg_treeview_width TREEVIEW_WIDTH
@@ -599,6 +601,14 @@ followed by the descriptions of the tags grouped by category.
will result in a user-defined paragraph with heading "Side Effects:".
You can put \\n's in the value part of an alias to insert newlines.
+\anchor cfg_tcl_subst
+<dt>\c TCL_SUBST <dd>
+ \addindex TCL_SUBST
+ This tag can be used to specify a number of word-keyword mappings (TCL only).
+ A mapping has the form "name=value". For example adding
+ "class=itcl::class" will allow you to use the command class in the
+ itcl::class meaning.
+
\anchor cfg_optimize_output_for_c
<dt>\c OPTIMIZE_OUTPUT_FOR_C <dd>
\addindex OPTIMIZE_OUTPUT_FOR_C
@@ -682,34 +692,19 @@ page (for HTML and Man pages) or section (for LaTeX and RTF).
be useful for C code in case the coding convention dictates that all compound
types are typedef'ed and only the typedef is referenced, never the tag name.
-\anchor cfg_symbol_cache_size
-<dt>\c SYMBOL_CACHE_SIZE <dd>
- \addindex SYMBOL_CACHE_SIZE
- The \c SYMBOL_CACHE_SIZE determines the size of the internal cache use to
- determine which symbols to keep in memory and which to flush to disk.
- When the cache is full, less often used symbols will be written to disk.
- For small to medium size projects (<1000 input files) the default value is
- probably good enough. For larger projects a too small cache size can cause
- doxygen to be busy swapping symbols to and from disk most of the time
- causing a significant performance penalty.
- If the system has enough physical memory increasing the cache will improve the
- performance by keeping more symbols in memory. Note that the value works on
- a logarithmic scale so increasing the size by one will roughly double the
- memory usage. The cache size is given by this formula:
- \f$2^{(16+\mbox{SYMBOL\_CACHE\_SIZE})}\f$. The valid range is 0..9, the default is 0,
- corresponding to a cache size of \f$2^{16} = 65536\f$ symbols.
-
\anchor cfg_lookup_cache_size
<dt>\c LOOKUP_CACHE_SIZE <dd>
\addindex LOOKUP_CACHE_SIZE
- Similar to the \c SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+ The size of the symbol lookup cache can be
set using \c LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
their name and scope. Since this can be an expensive process and often the
- same symbol appear multiple times in the code, doxygen keeps a cache of
+ same symbol appears multiple times in the code, doxygen keeps a cache of
pre-resolved symbols. If the cache is too small doxygen will become slower.
If the cache is too large, memory is wasted. The cache size is given by this
formula: \f$2^{(16+\mbox{LOOKUP\_CACHE\_SIZE})}\f$. The valid range is 0..9, the default is 0,
corresponding to a cache size of \f$2^{16} = 65536\f$ symbols.
+ At the end of a run doxygen will report the cache usage and suggest the
+ optimal cache size from a speed point of view.
</dl>
@@ -734,6 +729,12 @@ page (for HTML and Man pages) or section (for LaTeX and RTF).
If the \c EXTRACT_PRIVATE tag is set to \c YES all private members of a
class will be included in the documentation.
+\anchor cfg_extract_package
+<dt>\c EXTRACT_PACKAGE <dd>
+ \addindex EXTRACT_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.
+
\anchor cfg_extract_static
<dt>\c EXTRACT_STATIC <dd>
\addindex EXTRACT_STATIC
@@ -878,6 +879,16 @@ function's detailed documentation block.
@note This option applies only to the class list, not to the
alphabetical list.
+\anchor cfg_strict_proto_matching
+<dt>\c STRICT_PROTO_MATCHING <dd>
+ \addindex STRICT_PROTO_MATCHING
+ If the \c STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+ do proper type resolution of all parameters of a function it will reject a
+ match between the prototype and the implementation of a member function even
+ if there is only one candidate or it is obvious which candidate to choose
+ by doing a simple string match. By disabling \c STRICT_PROTO_MATCHING doxygen
+ will still accept a match between prototype and implementation in such cases.
+
\anchor cfg_sort_members_constructors_first
<dt>\c SORT_MEMBERS_CTORS_1ST <dd>
\addindex SORT_MEMBERS_CTORS_1ST
diff --git a/doc/doxygen.1 b/doc/doxygen.1
index 98f0df0..c227791 100644
--- a/doc/doxygen.1
+++ b/doc/doxygen.1
@@ -23,7 +23,11 @@ doxygen [configName]
.IP
If - is used for configName doxygen will read from standard input.
.TP
-4) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.
+4) Use doxygen to generate a template file controlling the layout of the generated documentation:
+.IP
+doxygen -l layoutFileName.xml
+.TP
+5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.
.TP
RTF:
doxygen \fB\-w\fR rtf styleSheetFile
@@ -33,7 +37,7 @@ doxygen \fB\-w\fR html headerFile footerFile styleSheetFile [configFile]
.TP
LaTeX: doxygen \fB\-w\fR latex headerFile footerFile styleSheetFile [configFile]
.TP
-5) Use doxygen to generate an rtf extensions file
+6) Use doxygen to generate an rtf extensions file
.TP
RTF:
doxygen \fB\-e\fR rtf extensionsFile
diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex
index 9435280..51c2e47 100644
--- a/doc/doxygen_manual.tex
+++ b/doc/doxygen_manual.tex
@@ -83,6 +83,7 @@ Written by Dimitri van Heesch\\[2ex]
\chapter{Getting Started}\label{starting}\hypertarget{starting}{}\input{starting}
\chapter{Documenting the code}\label{docblocks}\hypertarget{docblocks}{}\input{docblocks}
\chapter{Markdown}\label{markdown}\hypertarget{markdown}{}\input{markdown}
+\chapter{Lists}\label{lists}\hypertarget{lists}{}\input{lists}
\chapter{Grouping}\label{grouping}\hypertarget{grouping}{}\input{grouping}
\chapter{Including Formulas}\label{formulas}\hypertarget{formulas}{}\input{formulas}
\chapter{Graphs and diagrams}\label{diagrams}\hypertarget{diagrams}{}\input{diagrams}
@@ -90,7 +91,6 @@ Written by Dimitri van Heesch\\[2ex]
\chapter{Automatic link generation}\label{autolink}\hypertarget{autolink}{}\input{autolink}
\chapter{Output Formats}\label{output}\hypertarget{output}{}\input{output}
\chapter{Searching}\label{searching}\hypertarget{searching}{}\input{searching}
-\chapter{External Indexing and Searching}\label{extsearch}\hypertarget{extsearch}{}\input{extsearch}
\chapter{Customizing the Output}\label{customize}\hypertarget{customize}{}\input{customize}
\chapter{Custom Commands}\label{custcmd}\hypertarget{custcmd}{}\input{custcmd}
\chapter{Link to external documentation}\label{external}\hypertarget{external}{}\input{external}
diff --git a/doc/extsearch.doc b/doc/extsearch.doc
index e636b1a..bc937e4 100644
--- a/doc/extsearch.doc
+++ b/doc/extsearch.doc
@@ -303,11 +303,4 @@ The fields for such an item have the following meaning:
- "fragments": an array with 0 or more fragments of text containing words that have been search for.
These words should be wrapped in `<span class="hl">` and `</span>` tags to highlight them
in the output.
-
-
-\htmlonly
-Go to the <a href="customize.html">next</a> section or return to the
- <a href="index.html">index</a>.
-\endhtmlonly
-
*/
diff --git a/doc/language.doc b/doc/language.doc
index 70a0ace..7327e14 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -188,7 +188,7 @@ when the translator was updated.
<td>Korean</td>
<td>Kim Taedong<br/>SooYoung Jung<br/>Richard Kim</td>
<td>fly1004 at gmail dot com<br/>jung5000 at gmail dot com<br/><span style="color: brown">[unreachable]</span></td>
- <td>1.8.02</td>
+ <td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>KoreanEn</td>
@@ -377,7 +377,7 @@ when the translator was updated.
\hline
JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
\hline
- Korean & Kim Taedong & {\tt\tiny fly1004 at gmail dot com} & 1.8.02 \\
+ Korean & Kim Taedong & {\tt\tiny fly1004 at gmail dot com} & up-to-date \\
~ & SooYoung Jung & {\tt\tiny jung5000 at gmail dot com} & ~ \\
~ & Richard Kim & {\tt\tiny [unreachable] ryk at dspwiz dot com} & ~ \\
\hline
diff --git a/doc/searching.doc b/doc/searching.doc
index 5a9c39e..1306a97 100644
--- a/doc/searching.doc
+++ b/doc/searching.doc
@@ -185,9 +185,8 @@ has its own advantages and disadvantages:
Qt compressed help or CHM output, but it does require that Eclipse is
installed and running.
-
\htmlonly
-Go to the <a href="extsearch.html">next</a> section or return to the
+Go to the <a href="customize.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
diff --git a/doc/translator_report.txt b/doc/translator_report.txt
index 0bba380..cbc0ba5 100644
--- a/doc/translator_report.txt
+++ b/doc/translator_report.txt
@@ -10,7 +10,7 @@ Macedonian, Norwegian, Persian, Polish, Portuguese, Romanian, Russian,
Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish,
Ukrainian, and Vietnamese.
-Of them, 2 translators are up-to-date, 38 translators are based on
+Of them, 3 translators are up-to-date, 37 translators are based on
some adapter class, and 2 are English based.
----------------------------------------------------------------------
@@ -20,6 +20,7 @@ and they implement all 250 of the required methods. Anyway, there
still may be some details listed even for them:
TranslatorEnglish
+ TranslatorKorean -- Change the base class to Translator.
TranslatorLatvian -- Reimplementation using UTF-8 suggested.
----------------------------------------------------------------------
@@ -53,9 +54,6 @@ must be implemented to become up-to-date:
Note: Change the base class to TranslatorAdapter_1_8_4.
TranslatorPolish 1.8.2 14 methods to implement (5 %)
- TranslatorKorean 1.8.02 15 methods to implement (6 %)
- Note: Change the base class to TranslatorAdapter_1_8_2.
-
TranslatorItalian 1.8.2 15 methods to implement (6 %)
TranslatorCroatian 1.8.2 15 methods to implement (6 %)
TranslatorChinese 1.8.2 15 methods to implement (6 %)
@@ -112,8 +110,6 @@ must be implemented to become up-to-date:
Note: Reimplementation using UTF-8 suggested.
TranslatorArabic 1.4.6 56 methods to implement (22 %)
- Note: Reimplementation using UTF-8 suggested.
-
----------------------------------------------------------------------
The following translator classes derive directly from the
@@ -816,28 +812,10 @@ TranslatorJapaneseEn (TranslatorEnglish) 245 methods to implement (98 %)
virtual QCString latexLanguageSupportCommand()
-TranslatorKorean (TranslatorAdapter_1_7_5) 15 methods to implement (6 %)
+TranslatorKorean (TranslatorAdapter_1_7_5)
----------------
- Implements 235 of the required methods (94 %).
-
- Missing methods (should be implemented):
-
- virtual QCString trServices()
- virtual QCString trClassMethods()
- virtual QCString trProvidedByCategory()
- virtual QCString trSingletonGeneratedFromFiles(bool single)
- virtual QCString trServiceReference(const char * sName)
- virtual QCString trDesignOverview()
- virtual QCString trConstantGroups()
- virtual QCString trMethodDocumentation()
- virtual QCString trInterfaces()
- virtual QCString trServiceGeneratedFromFiles(bool single)
- virtual QCString trConstantGroupReference(const char * namespaceName)
- virtual QCString trPanelSynchronisationTooltip(bool enable)
- virtual QCString trExtendsClass()
- virtual QCString trSingletonReference(const char * sName)
- virtual QCString trInstanceMethods()
+ Implements 250 of the required methods (100 %).
TranslatorKoreanEn (TranslatorEnglish) 245 methods to implement (98 %)
diff --git a/jquery/Makefile b/jquery/Makefile
new file mode 100644
index 0000000..83a302b
--- /dev/null
+++ b/jquery/Makefile
@@ -0,0 +1,42 @@
+JQUERY_VERSION = 1.7.1
+JQUERY_UI_VERSION = 1.8.18
+HASHCHANGE_VERSION = 1.3
+SCROLL_VERSION = 1.4.2
+MINIFIER = /usr/local/bin/yuicompressor-2.4.7
+SCRIPTS = jquery-$(JQUERY_VERSION).js \
+ jquery.ui-$(JQUERY_UI_VERSION).core.js \
+ jquery.ui-$(JQUERY_UI_VERSION).widget.js \
+ jquery.ui-$(JQUERY_UI_VERSION).mouse.js \
+ jquery.ui-$(JQUERY_UI_VERSION).resizable.js \
+ jquery.ba-$(HASHCHANGE_VERSION)-hashchange.js \
+ jquery.scrollTo-$(SCROLL_VERSION).js
+RESULTS = jquery_p1.js jquery_p2.js jquery_p3.js jquery_ui.js jquery_fx.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_fx.js: scripts
+ cat jquery.scrollTo-$(SCROLL_VERSION)-min.js > jquery_fx.js
+
+jquery_p1.js jquery_p2.js jquery_p3.js: scripts
+ perl split_jquery.pl jquery-$(JQUERY_VERSION)-min.js $@
+
+scripts: $(SCRIPTS_MIN)
+
+clean:
+ rm -f $(SCRIPTS_MIN) $(RESULTS)
+
+%-min.js: %.js
+ java -jar $(MINIFIER).jar --line-break 13000 $^ > $@
+
diff --git a/jquery/README b/jquery/README
new file mode 100644
index 0000000..314c838
--- /dev/null
+++ b/jquery/README
@@ -0,0 +1,16 @@
+Doxygen's jquery.js script is composed of minified versions of the following
+packages:
+- jquery 1.7.1: http://jquery.com/download/
+- jquery.ui 1.8.18: https://code.google.com/p/jquery-ui/downloads/list
+ modules required:
+ - jquery.ui.core
+ - jquery.ui.widget
+ - jquery.ui.mouse
+ - jquery.ui.resizable
+- jquery.hashchange: 1.3: http://benalman.com/projects/jquery-hashchange-plugin/
+- jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo
+
+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.
+
diff --git a/jquery/jquery-1.7.1.js b/jquery/jquery-1.7.1.js
new file mode 100644
index 0000000..8ccd0ea
--- /dev/null
+++ b/jquery/jquery-1.7.1.js
@@ -0,0 +1,9266 @@
+/*!
+ * 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( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+ navigator = window.navigator,
+ location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context, rootjQuery );
+ },
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // A simple way to check for HTML strings or ID strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+ // Check if a string has a non-whitespace character in it
+ rnotwhite = /\S/,
+
+ // Used for trimming whitespace
+ trimLeft = /^\s+/,
+ trimRight = /\s+$/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+ // Useragent RegExp
+ rwebkit = /(webkit)[ \/]([\w.]+)/,
+ ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+ rmsie = /(msie) ([\w.]+)/,
+ rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+ // Matches dashed string for camelizing
+ rdashAlpha = /-([a-z]|[0-9])/ig,
+ rmsPrefix = /^-ms-/,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return ( letter + "" ).toUpperCase();
+ },
+
+ // Keep a UserAgent string for use with jQuery.browser
+ userAgent = navigator.userAgent,
+
+ // For matching the engine and version of the browser
+ browserMatch,
+
+ // The deferred used on DOM ready
+ readyList,
+
+ // The ready event handler
+ DOMContentLoaded,
+
+ // Save a reference to some core methods
+ toString = Object.prototype.toString,
+ hasOwn = Object.prototype.hasOwnProperty,
+ push = Array.prototype.push,
+ slice = Array.prototype.slice,
+ trim = String.prototype.trim,
+ indexOf = Array.prototype.indexOf,
+
+ // [[Class]] -> type pairs
+ class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), or $(undefined)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // The body element only exists once, optimize finding it
+ if ( selector === "body" && !context && document.body ) {
+ this.context = document;
+ this[0] = document.body;
+ this.selector = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ // Are we dealing with HTML string or an ID?
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = quickExpr.exec( selector );
+ }
+
+ // Verify a match, and that no context was specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
+ doc = ( context ? context.ownerDocument || context : document );
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ ret = rsingleTag.exec( selector );
+
+ if ( ret ) {
+ if ( jQuery.isPlainObject( context ) ) {
+ selector = [ document.createElement( ret[1] ) ];
+ jQuery.fn.attr.call( selector, context, true );
+
+ } else {
+ selector = [ doc.createElement( ret[1] ) ];
+ }
+
+ } else {
+ ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+ selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
+ }
+
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $("#id")
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if ( selector.selector !== undefined ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.7.1",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ toArray: function() {
+ return slice.call( this, 0 );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+ // Build a new jQuery matched element set
+ var ret = this.constructor();
+
+ if ( jQuery.isArray( elems ) ) {
+ push.apply( ret, elems );
+
+ } else {
+ jQuery.merge( ret, elems );
+ }
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" ) {
+ ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+ } else if ( name ) {
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Attach the listeners
+ jQuery.bindReady();
+
+ // Add the callback
+ readyList.add( fn );
+
+ return this;
+ },
+
+ eq: function( i ) {
+ i = +i;
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, i + 1 );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ),
+ "slice", slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+ // Either a released hold or an DOMready/load event and not yet ready
+ if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.fireWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger( "ready" ).off( "ready" );
+ }
+ }
+ },
+
+ bindReady: function() {
+ if ( readyList ) {
+ return;
+ }
+
+ readyList = jQuery.Callbacks( "once memory" );
+
+ // Catch cases where $(document).ready() is called after the
+ // browser event has already occurred.
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Mozilla, Opera and webkit nightlies currently support this event
+ if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else if ( document.attachEvent ) {
+ // ensure firing before onload,
+ // maybe late but safe also for iframes
+ document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var toplevel = false;
+
+ try {
+ toplevel = window.frameElement == null;
+ } catch(e) {}
+
+ if ( document.documentElement.doScroll && toplevel ) {
+ doScrollCheck();
+ }
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ // A crude way of determining if an object is a window
+ isWindow: function( obj ) {
+ return obj && typeof obj === "object" && "setInterval" in obj;
+ },
+
+ isNumeric: function( obj ) {
+ return !isNaN( parseFloat(obj) ) && isFinite( obj );
+ },
+
+ type: function( obj ) {
+ return obj == null ?
+ String( obj ) :
+ class2type[ toString.call(obj) ] || "object";
+ },
+
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !hasOwn.call(obj, "constructor") &&
+ !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+ } catch ( e ) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || hasOwn.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ for ( var name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ parseJSON: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
+
+ return ( new Function( "return " + data ) )();
+
+ }
+ jQuery.error( "Invalid JSON: " + data );
+ },
+
+ // Cross-browser xml parsing
+ parseXML: function( data ) {
+ var xml, tmp;
+ try {
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
+ } catch( e ) {
+ xml = undefined;
+ }
+ if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+ },
+
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function( data ) {
+ if ( data && rnotwhite.test( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ var name, i = 0,
+ length = object.length,
+ isObj = length === undefined || jQuery.isFunction( object );
+
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.apply( object[ name ], args ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( object[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return object;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: trim ?
+ function( text ) {
+ return text == null ?
+ "" :
+ trim.call( text );
+ } :
+
+ // Otherwise use our own trimming functionality
+ function( text ) {
+ return text == null ?
+ "" :
+ text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( array, results ) {
+ var ret = results || [];
+
+ if ( array != null ) {
+ // The window, strings (and functions) also have 'length'
+ // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+ var type = jQuery.type( array );
+
+ if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+ push.call( ret, array );
+ } else {
+ jQuery.merge( ret, array );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, array, i ) {
+ var len;
+
+ if ( array ) {
+ if ( indexOf ) {
+ return indexOf.call( array, elem, i );
+ }
+
+ len = array.length;
+ i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+ for ( ; i < len; i++ ) {
+ // Skip accessing in sparse arrays
+ if ( i in array && array[ i ] === elem ) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var i = first.length,
+ j = 0;
+
+ if ( typeof second.length === "number" ) {
+ for ( var l = second.length; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var ret = [], retVal;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value, key, ret = [],
+ i = 0,
+ length = elems.length,
+ // jquery objects are treated as arrays
+ isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+ // Go through the array, translating each of the items to their
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( key in elems ) {
+ value = callback( elems[ key ], key, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return ret.concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ if ( typeof context === "string" ) {
+ var tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ var args = slice.call( arguments, 2 ),
+ proxy = function() {
+ return fn.apply( context, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ // Mutifunctional method to get and set values to a collection
+ // The value/s can optionally be executed if it's a function
+ access: function( elems, key, value, exec, fn, pass ) {
+ var length = elems.length;
+
+ // Setting many attributes
+ if ( typeof key === "object" ) {
+ for ( var k in key ) {
+ jQuery.access( elems, k, key[k], exec, fn, value );
+ }
+ return elems;
+ }
+
+ // Setting one attribute
+ if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = !pass && exec && jQuery.isFunction(value);
+
+ for ( var i = 0; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+
+ return elems;
+ }
+
+ // Getting an attribute
+ return length ? fn( elems[0], key ) : undefined;
+ },
+
+ now: function() {
+ return ( new Date() ).getTime();
+ },
+
+ // Use of jQuery.browser is frowned upon.
+ // More details: http://docs.jquery.com/Utilities/jQuery.browser
+ uaMatch: function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = rwebkit.exec( ua ) ||
+ ropera.exec( ua ) ||
+ rmsie.exec( ua ) ||
+ ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+ [];
+
+ return { browser: match[1] || "", version: match[2] || "0" };
+ },
+
+ sub: function() {
+ function jQuerySub( selector, context ) {
+ return new jQuerySub.fn.init( selector, context );
+ }
+ jQuery.extend( true, jQuerySub, this );
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init( selector, context ) {
+ if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+ context = jQuerySub( context );
+ }
+
+ return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ return jQuerySub;
+ },
+
+ browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+ jQuery.browser[ browserMatch.browser ] = true;
+ jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+ jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+ trimLeft = /^[\s\xA0]+/;
+ trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+ DOMContentLoaded = function() {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ };
+
+} else if ( document.attachEvent ) {
+ DOMContentLoaded = function() {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( document.readyState === "complete" ) {
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
+ }
+ };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+ if ( jQuery.isReady ) {
+ return;
+ }
+
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch(e) {
+ setTimeout( doScrollCheck, 1 );
+ return;
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+}
+
+return jQuery;
+
+})();
+
+
+// String to Object flags format cache
+var flagsCache = {};
+
+// Convert String-formatted flags into Object-formatted ones and store in cache
+function createFlags( flags ) {
+ var object = flagsCache[ flags ] = {},
+ i, length;
+ flags = flags.split( /\s+/ );
+ for ( i = 0, length = flags.length; i < length; i++ ) {
+ object[ flags[i] ] = true;
+ }
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * flags: an optional list of space-separated flags that will change how
+ * the callback list behaves
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible flags:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( flags ) {
+
+ // Convert flags from String-formatted to Object-formatted
+ // (we check in cache first)
+ flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+
+ var // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = [],
+ // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Add one or several callbacks to the list
+ add = function( args ) {
+ var i,
+ length,
+ elem,
+ type,
+ actual;
+ for ( i = 0, length = args.length; i < length; i++ ) {
+ elem = args[ i ];
+ type = jQuery.type( elem );
+ if ( type === "array" ) {
+ // Inspect recursively
+ add( elem );
+ } else if ( type === "function" ) {
+ // Add if not in unique mode and callback is not in
+ if ( !flags.unique || !self.has( elem ) ) {
+ list.push( elem );
+ }
+ }
+ }
+ },
+ // Fire callbacks
+ fire = function( context, args ) {
+ args = args || [];
+ memory = !flags.memory || [ context, args ];
+ firing = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
+ memory = true; // Mark as halted
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( !flags.once ) {
+ if ( stack && stack.length ) {
+ memory = stack.shift();
+ self.fireWith( memory[ 0 ], memory[ 1 ] );
+ }
+ } else if ( memory === true ) {
+ self.disable();
+ } else {
+ list = [];
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ var length = list.length;
+ add( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away, unless previous
+ // firing was halted (stopOnFalse)
+ } else if ( memory && memory !== true ) {
+ firingStart = length;
+ fire( memory[ 0 ], memory[ 1 ] );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ var args = arguments,
+ argIndex = 0,
+ argLength = args.length;
+ for ( ; argIndex < argLength ; argIndex++ ) {
+ for ( var i = 0; i < list.length; i++ ) {
+ if ( args[ argIndex ] === list[ i ] ) {
+ // Handle firingIndex and firingLength
+ if ( firing ) {
+ if ( i <= firingLength ) {
+ firingLength--;
+ if ( i <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ // Remove the element
+ list.splice( i--, 1 );
+ // If we have some unicity property then
+ // we only need to do this once
+ if ( flags.unique ) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ return this;
+ },
+ // Control if a given callback is in the list
+ has: function( fn ) {
+ if ( list ) {
+ var i = 0,
+ length = list.length;
+ for ( ; i < length; i++ ) {
+ if ( fn === list[ i ] ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory || memory === true ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( stack ) {
+ if ( firing ) {
+ if ( !flags.once ) {
+ stack.push( [ context, args ] );
+ }
+ } else if ( !( flags.once && memory ) ) {
+ fire( context, args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!memory;
+ }
+ };
+
+ return self;
+};
+
+
+
+
+var // Static reference to slice
+ sliceDeferred = [].slice;
+
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var doneList = jQuery.Callbacks( "once memory" ),
+ failList = jQuery.Callbacks( "once memory" ),
+ progressList = jQuery.Callbacks( "memory" ),
+ state = "pending",
+ lists = {
+ resolve: doneList,
+ reject: failList,
+ notify: progressList
+ },
+ promise = {
+ done: doneList.add,
+ fail: failList.add,
+ progress: progressList.add,
+
+ state: function() {
+ return state;
+ },
+
+ // Deprecated
+ isResolved: doneList.fired,
+ isRejected: failList.fired,
+
+ then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
+ deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
+ return this;
+ },
+ always: function() {
+ deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+ return this;
+ },
+ pipe: function( fnDone, fnFail, fnProgress ) {
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( {
+ done: [ fnDone, "resolve" ],
+ fail: [ fnFail, "reject" ],
+ progress: [ fnProgress, "notify" ]
+ }, function( handler, data ) {
+ var fn = data[ 0 ],
+ action = data[ 1 ],
+ returned;
+ if ( jQuery.isFunction( fn ) ) {
+ deferred[ handler ](function() {
+ returned = fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+ } else {
+ newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+ }
+ });
+ } else {
+ deferred[ handler ]( newDefer[ action ] );
+ }
+ });
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ if ( obj == null ) {
+ obj = promise;
+ } else {
+ for ( var key in promise ) {
+ obj[ key ] = promise[ key ];
+ }
+ }
+ return obj;
+ }
+ },
+ deferred = promise.promise({}),
+ key;
+
+ for ( key in lists ) {
+ deferred[ key ] = lists[ key ].fire;
+ deferred[ key + "With" ] = lists[ key ].fireWith;
+ }
+
+ // Handle state
+ deferred.done( function() {
+ state = "resolved";
+ }, failList.disable, progressList.lock ).fail( function() {
+ state = "rejected";
+ }, doneList.disable, progressList.lock );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( firstParam ) {
+ var args = sliceDeferred.call( arguments, 0 ),
+ i = 0,
+ length = args.length,
+ pValues = new Array( length ),
+ count = length,
+ pCount = length,
+ deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+ firstParam :
+ jQuery.Deferred(),
+ promise = deferred.promise();
+ function resolveFunc( i ) {
+ return function( value ) {
+ args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+ if ( !( --count ) ) {
+ deferred.resolveWith( deferred, args );
+ }
+ };
+ }
+ function progressFunc( i ) {
+ return function( value ) {
+ pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+ deferred.notifyWith( promise, pValues );
+ };
+ }
+ if ( length > 1 ) {
+ for ( ; i < length; i++ ) {
+ if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
+ args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+ } else {
+ --count;
+ }
+ }
+ if ( !count ) {
+ deferred.resolveWith( deferred, args );
+ }
+ } else if ( deferred !== firstParam ) {
+ deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+ }
+ return promise;
+ }
+});
+
+
+
+
+jQuery.support = (function() {
+
+ var support,
+ all,
+ a,
+ select,
+ opt,
+ input,
+ marginDiv,
+ fragment,
+ tds,
+ events,
+ eventName,
+ i,
+ isSupported,
+ div = document.createElement( "div" ),
+ documentElement = document.documentElement;
+
+ // Preliminary tests
+ div.setAttribute("className", "t");
+ div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+ all = div.getElementsByTagName( "*" );
+ a = div.getElementsByTagName( "a" )[ 0 ];
+
+ // Can't get basic test support
+ if ( !all || !all.length || !a ) {
+ return {};
+ }
+
+ // First batch of supports tests
+ select = document.createElement( "select" );
+ opt = select.appendChild( document.createElement("option") );
+ input = div.getElementsByTagName( "input" )[ 0 ];
+
+ support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName("tbody").length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName("link").length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ style: /top/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.55/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: ( input.value === "on" ),
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ optSelected: opt.selected,
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ getSetAttribute: div.className !== "t",
+
+ // Tests for enctype support on a form(#6743)
+ enctype: !!document.createElement("form").enctype,
+
+ // Makes sure cloning an html5 element does not cause problems
+ // Where outerHTML is undefined, this still works
+ html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+ // Will be defined later
+ submitBubbles: true,
+ changeBubbles: true,
+ focusinBubbles: false,
+ deleteExpando: true,
+ noCloneEvent: true,
+ inlineBlockNeedsLayout: false,
+ shrinkWrapBlocks: false,
+ reliableMarginRight: true
+ };
+
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Test to see if it's possible to delete an expando from an element
+ // Fails in Internet Explorer
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+
+ if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+ div.attachEvent( "onclick", function() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ support.noCloneEvent = false;
+ });
+ div.cloneNode( true ).fireEvent( "onclick" );
+ }
+
+ // Check if a radio maintains its value
+ // after being appended to the DOM
+ input = document.createElement("input");
+ input.value = "t";
+ input.setAttribute("type", "radio");
+ support.radioValue = input.value === "t";
+
+ input.setAttribute("checked", "checked");
+ div.appendChild( input );
+ fragment = document.createDocumentFragment();
+ fragment.appendChild( div.lastChild );
+
+ // WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ fragment.removeChild( input );
+ fragment.appendChild( div );
+
+ div.innerHTML = "";
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. For more
+ // info see bug #3333
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ if ( window.getComputedStyle ) {
+ marginDiv = document.createElement( "div" );
+ marginDiv.style.width = "0";
+ marginDiv.style.marginRight = "0";
+ div.style.width = "2px";
+ div.appendChild( marginDiv );
+ support.reliableMarginRight =
+ ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+ }
+
+ // Technique from Juriy Zaytsev
+ // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+ // We only care about the case where non-standard event systems
+ // are used, namely in IE. Short-circuiting here helps us to
+ // avoid an eval call (in setAttribute) which can cause CSP
+ // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+ if ( div.attachEvent ) {
+ for( i in {
+ submit: 1,
+ change: 1,
+ focusin: 1
+ }) {
+ eventName = "on" + i;
+ isSupported = ( eventName in div );
+ if ( !isSupported ) {
+ div.setAttribute( eventName, "return;" );
+ isSupported = ( typeof div[ eventName ] === "function" );
+ }
+ support[ i + "Bubbles" ] = isSupported;
+ }
+ }
+
+ fragment.removeChild( div );
+
+ // Null elements to avoid leaks in IE
+ fragment = select = opt = marginDiv = div = input = null;
+
+ // Run tests that need a body at doc ready
+ jQuery(function() {
+ var container, outer, inner, table, td, offsetSupport,
+ conMarginTop, ptlm, vb, style, html,
+ body = document.getElementsByTagName("body")[0];
+
+ if ( !body ) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ conMarginTop = 1;
+ ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";
+ vb = "visibility:hidden;border:0;";
+ style = "style='" + ptlm + "border:5px solid #000;padding:0;'";
+ html = "<div " + style + "><div></div></div>" +
+ "<table " + style + " cellpadding='0' cellspacing='0'>" +
+ "<tr><td></td></tr></table>";
+
+ container = document.createElement("div");
+ container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
+ body.insertBefore( container, body.firstChild );
+
+ // Construct the test element
+ div = document.createElement("div");
+ container.appendChild( div );
+
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ // (only IE 8 fails this test)
+ div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+ tds = div.getElementsByTagName( "td" );
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+ tds[ 0 ].style.display = "";
+ tds[ 1 ].style.display = "none";
+
+ // Check if empty table cells still have offsetWidth/Height
+ // (IE <= 8 fail this test)
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+ // Figure out if the W3C box model works as expected
+ div.innerHTML = "";
+ div.style.width = div.style.paddingLeft = "1px";
+ jQuery.boxModel = support.boxModel = div.offsetWidth === 2;
+
+ if ( typeof div.style.zoom !== "undefined" ) {
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ // (IE < 8 does this)
+ div.style.display = "inline";
+ div.style.zoom = 1;
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+ // Check if elements with layout shrink-wrap their children
+ // (IE 6 does this)
+ div.style.display = "";
+ div.innerHTML = "<div style='width:4px;'></div>";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+ }
+
+ div.style.cssText = ptlm + vb;
+ div.innerHTML = html;
+
+ outer = div.firstChild;
+ inner = outer.firstChild;
+ td = outer.nextSibling.firstChild.firstChild;
+
+ offsetSupport = {
+ doesNotAddBorder: ( inner.offsetTop !== 5 ),
+ doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
+ };
+
+ inner.style.position = "fixed";
+ inner.style.top = "20px";
+
+ // safari subtracts parent border width here which is 5px
+ offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
+ inner.style.position = inner.style.top = "";
+
+ outer.style.overflow = "hidden";
+ outer.style.position = "relative";
+
+ offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
+ offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
+
+ body.removeChild( container );
+ div = container = null;
+
+ jQuery.extend( support, offsetSupport );
+ });
+
+ return support;
+})();
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+ cache: {},
+
+ // Please use with caution
+ uuid: 0,
+
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+ "applet": true
+ },
+
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var privateCache, thisCache, ret,
+ internalKey = jQuery.expando,
+ getByName = typeof name === "string",
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
+ isEvents = name === "events";
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
+ return;
+ }
+
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if ( isNode ) {
+ elem[ internalKey ] = id = ++jQuery.uuid;
+ } else {
+ id = internalKey;
+ }
+ }
+
+ if ( !cache[ id ] ) {
+ cache[ id ] = {};
+
+ // Avoids exposing jQuery metadata on plain JS objects when the object
+ // is serialized using JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ] = jQuery.extend( cache[ id ], name );
+ } else {
+ cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+ }
+ }
+
+ privateCache = thisCache = cache[ id ];
+
+ // jQuery data() is stored in a separate object inside the object's internal data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data.
+ if ( !pvt ) {
+ if ( !thisCache.data ) {
+ thisCache.data = {};
+ }
+
+ thisCache = thisCache.data;
+ }
+
+ if ( data !== undefined ) {
+ thisCache[ jQuery.camelCase( name ) ] = data;
+ }
+
+ // Users should not attempt to inspect the internal events object using jQuery.data,
+ // it is undocumented and subject to change. But does anyone listen? No.
+ if ( isEvents && !thisCache[ name ] ) {
+ return privateCache.events;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if ( getByName ) {
+
+ // First Try to find as-is property data
+ ret = thisCache[ name ];
+
+ // Test for null|undefined property data
+ if ( ret == null ) {
+
+ // Try to find the camelCased property
+ ret = thisCache[ jQuery.camelCase( name ) ];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+ },
+
+ removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, i, l,
+
+ // Reference to internal data cache key
+ internalKey = jQuery.expando,
+
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+
+ // See jQuery.data for more information
+ id = isNode ? elem[ internalKey ] : internalKey;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
+
+ if ( name ) {
+
+ thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+ if ( thisCache ) {
+
+ // Support array or space separated string names for data keys
+ if ( !jQuery.isArray( name ) ) {
+
+ // try the string as a key before any manipulation
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+
+ // split the camel cased version by spaces unless a key with the spaces exists
+ name = jQuery.camelCase( name );
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+ name = name.split( " " );
+ }
+ }
+ }
+
+ for ( i = 0, l = name.length; i < l; i++ ) {
+ delete thisCache[ name[i] ];
+ }
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if ( !pvt ) {
+ delete cache[ id ].data;
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject(cache[ id ]) ) {
+ return;
+ }
+ }
+
+ // Browsers that fail expando deletion also refuse to delete expandos on
+ // the window, but it will allow it on all other JS objects; other browsers
+ // don't care
+ // Ensure that `cache` is not a window object #10080
+ if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+ delete cache[ id ];
+ } else {
+ cache[ id ] = null;
+ }
+
+ // We destroyed the cache and need to eliminate the expando on the node to avoid
+ // false lookups in the cache for entries that no longer exist
+ if ( isNode ) {
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if ( jQuery.support.deleteExpando ) {
+ delete elem[ internalKey ];
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( internalKey );
+ } else {
+ elem[ internalKey ] = null;
+ }
+ }
+ },
+
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return jQuery.data( elem, name, data, true );
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function( elem ) {
+ if ( elem.nodeName ) {
+ var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+ if ( match ) {
+ return !(match === true || elem.getAttribute("classid") !== match);
+ }
+ }
+
+ return true;
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var parts, attr, name,
+ data = null;
+
+ if ( typeof key === "undefined" ) {
+ if ( this.length ) {
+ data = jQuery.data( this[0] );
+
+ if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
+ attr = this[0].attributes;
+ for ( var i = 0, l = attr.length; i < l; i++ ) {
+ name = attr[i].name;
+
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.substring(5) );
+
+ dataAttr( this[0], name, data[ name ] );
+ }
+ }
+ jQuery._data( this[0], "parsedAttrs", true );
+ }
+ }
+
+ return data;
+
+ } else if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value === undefined ) {
+ data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+ // Try to fetch any internally stored data first
+ if ( data === undefined && this.length ) {
+ data = jQuery.data( this[0], key );
+ data = dataAttr( this[0], key, data );
+ }
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+
+ } else {
+ return this.each(function() {
+ var self = jQuery( this ),
+ args = [ parts[0], value ];
+
+ self.triggerHandler( "setData" + parts[1] + "!", args );
+ jQuery.data( this, key, value );
+ self.triggerHandler( "changeData" + parts[1] + "!", args );
+ });
+ }
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+function dataAttr( elem, key, data ) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+
+ var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ jQuery.isNumeric( data ) ? parseFloat( data ) :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data( elem, key, data );
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+ for ( var name in obj ) {
+
+ // if the public data object is empty, the private is still empty
+ if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+ continue;
+ }
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+ var deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ defer = jQuery._data( elem, deferDataKey );
+ if ( defer &&
+ ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
+ ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
+ // Give room for hard-coded callbacks to fire first
+ // and eventually mark/queue something else on the element
+ setTimeout( function() {
+ if ( !jQuery._data( elem, queueDataKey ) &&
+ !jQuery._data( elem, markDataKey ) ) {
+ jQuery.removeData( elem, deferDataKey, true );
+ defer.fire();
+ }
+ }, 0 );
+ }
+}
+
+jQuery.extend({
+
+ _mark: function( elem, type ) {
+ if ( elem ) {
+ type = ( type || "fx" ) + "mark";
+ jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
+ }
+ },
+
+ _unmark: function( force, elem, type ) {
+ if ( force !== true ) {
+ type = elem;
+ elem = force;
+ force = false;
+ }
+ if ( elem ) {
+ type = type || "fx";
+ var key = type + "mark",
+ count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
+ if ( count ) {
+ jQuery._data( elem, key, count );
+ } else {
+ jQuery.removeData( elem, key, true );
+ handleQueueMarkDefer( elem, type, "mark" );
+ }
+ }
+ },
+
+ queue: function( elem, type, data ) {
+ var q;
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ q = jQuery._data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !q || jQuery.isArray(data) ) {
+ q = jQuery._data( elem, type, jQuery.makeArray(data) );
+ } else {
+ q.push( data );
+ }
+ }
+ return q || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ fn = queue.shift(),
+ hooks = {};
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ }
+
+ if ( fn ) {
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ jQuery._data( elem, type + ".run", hooks );
+ fn.call( elem, function() {
+ jQuery.dequeue( elem, type );
+ }, hooks );
+ }
+
+ if ( !queue.length ) {
+ jQuery.removeData( elem, type + "queue " + type + ".run", true );
+ handleQueueMarkDefer( elem, type, "queue" );
+ }
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ }
+
+ if ( data === undefined ) {
+ return jQuery.queue( this[0], type );
+ }
+ return this.each(function() {
+ var queue = jQuery.queue( this, type, data );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = setTimeout( next, time );
+ hooks.stop = function() {
+ clearTimeout( timeout );
+ };
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, object ) {
+ if ( typeof type !== "string" ) {
+ object = type;
+ type = undefined;
+ }
+ type = type || "fx";
+ var defer = jQuery.Deferred(),
+ elements = this,
+ i = elements.length,
+ count = 1,
+ deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ tmp;
+ function resolve() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ }
+ while( i-- ) {
+ if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+ ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+ jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+ jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+ count++;
+ tmp.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise();
+ }
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+ rspace = /\s+/,
+ rreturn = /\r/g,
+ rtype = /^(?:button|input)$/i,
+ rfocusable = /^(?:button|input|object|select|textarea)$/i,
+ rclickable = /^a(?:rea)?$/i,
+ rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ getSetAttribute = jQuery.support.getSetAttribute,
+ nodeHook, boolHook, fixSpecified;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, name, value, true, jQuery.attr );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, name, value, true, jQuery.prop );
+ },
+
+ removeProp: function( name ) {
+ name = jQuery.propFix[ name ] || name;
+ return this.each(function() {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[ name ] = undefined;
+ delete this[ name ];
+ } catch( e ) {}
+ });
+ },
+
+ addClass: function( value ) {
+ var classNames, i, l, elem,
+ setClass, c, cl;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).addClass( value.call(this, j, this.className) );
+ });
+ }
+
+ if ( value && typeof value === "string" ) {
+ classNames = value.split( rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className && classNames.length === 1 ) {
+ elem.className = value;
+
+ } else {
+ setClass = " " + elem.className + " ";
+
+ for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+ setClass += classNames[ c ] + " ";
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classNames, i, l, elem, className, c, cl;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).removeClass( value.call(this, j, this.className) );
+ });
+ }
+
+ if ( (value && typeof value === "string") || value === undefined ) {
+ classNames = ( value || "" ).split( rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.nodeType === 1 && elem.className ) {
+ if ( value ) {
+ className = (" " + elem.className + " ").replace( rclass, " " );
+ for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+ className = className.replace(" " + classNames[ c ] + " ", " ");
+ }
+ elem.className = jQuery.trim( className );
+
+ } else {
+ elem.className = "";
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ state = stateVal,
+ classNames = value.split( rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space seperated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery._data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for ( ; i < l; i++ ) {
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ var hooks, ret, isFunction,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var self = jQuery(this), val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, self.val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, i, max, option,
+ index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
+
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
+
+ // Loop through all the selected options
+ i = one ? index : 0;
+ max = one ? index + 1 : options.length;
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // Don't return options that are disabled or in a disabled optgroup
+ if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+ (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+ if ( one && !values.length && options.length ) {
+ return jQuery( options[ index ] ).val();
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var values = jQuery.makeArray( value );
+
+ jQuery(elem).find("option").each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ attrFn: {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true
+ },
+
+ attr: function( elem, name, value, pass ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ if ( pass && name in jQuery.attrFn ) {
+ return jQuery( elem )[ name ]( value );
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === "undefined" ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if ( notxml ) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+ }
+
+ if ( value !== undefined ) {
+
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return;
+
+ } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, "" + value );
+ return value;
+ }
+
+ } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+
+ ret = elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret === null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var propName, attrNames, name, l,
+ i = 0;
+
+ if ( value && elem.nodeType === 1 ) {
+ attrNames = value.toLowerCase().split( rspace );
+ l = attrNames.length;
+
+ for ( ; i < l; i++ ) {
+ name = attrNames[ i ];
+
+ if ( name ) {
+ propName = jQuery.propFix[ name ] || name;
+
+ // See #9699 for explanation of this approach (setting first, then removal)
+ jQuery.attr( elem, name, "" );
+ elem.removeAttribute( getSetAttribute ? name : propName );
+
+ // Set corresponding property to false for boolean attributes
+ if ( rboolean.test( name ) && propName in elem ) {
+ elem[ propName ] = false;
+ }
+ }
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to it's default in case type is set after value
+ // This is for element creation
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ },
+ // Use the value property for back compat
+ // Use the nodeHook for button elements in IE6/7 (#1954)
+ value: {
+ get: function( elem, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.get( elem, name );
+ }
+ return name in elem ?
+ elem.value :
+ null;
+ },
+ set: function( elem, value, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.set( elem, value, name );
+ }
+ // Does not return so that setAttribute is also used
+ elem.value = value;
+ }
+ }
+ },
+
+ propFix: {
+ tabindex: "tabIndex",
+ readonly: "readOnly",
+ "for": "htmlFor",
+ "class": "className",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ cellpadding: "cellPadding",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ usemap: "useMap",
+ frameborder: "frameBorder",
+ contenteditable: "contentEditable"
+ },
+
+ prop: function( elem, name, value ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ if ( notxml ) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ return ( elem[ name ] = value );
+ }
+
+ } else {
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+ return elem[ name ];
+ }
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ var attributeNode = elem.getAttributeNode("tabindex");
+
+ return attributeNode && attributeNode.specified ?
+ parseInt( attributeNode.value, 10 ) :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
+ }
+ }
+ }
+});
+
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
+jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+boolHook = {
+ get: function( elem, name ) {
+ // Align boolean attributes with corresponding properties
+ // Fall back to attribute presence where some booleans are not supported
+ var attrNode,
+ property = jQuery.prop( elem, name );
+ return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+ name.toLowerCase() :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ var propName;
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ // value is true since we know at this point it's type boolean and not false
+ // Set boolean attributes to the same name and set the DOM property
+ propName = jQuery.propFix[ name ] || name;
+ if ( propName in elem ) {
+ // Only set the IDL specifically if it already exists on the element
+ elem[ propName ] = true;
+ }
+
+ elem.setAttribute( name, name.toLowerCase() );
+ }
+ return name;
+ }
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+ fixSpecified = {
+ name: true,
+ id: true
+ };
+
+ // Use this for any attribute in IE6/7
+ // This fixes almost every IE6/7 issue
+ nodeHook = jQuery.valHooks.button = {
+ get: function( elem, name ) {
+ var ret;
+ ret = elem.getAttributeNode( name );
+ return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
+ ret.nodeValue :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ // Set the existing or create a new attribute node
+ var ret = elem.getAttributeNode( name );
+ if ( !ret ) {
+ ret = document.createAttribute( name );
+ elem.setAttributeNode( ret );
+ }
+ return ( ret.nodeValue = value + "" );
+ }
+ };
+
+ // Apply the nodeHook to tabindex
+ jQuery.attrHooks.tabindex.set = nodeHook.set;
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each([ "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ set: function( elem, value ) {
+ if ( value === "" ) {
+ elem.setAttribute( name, "auto" );
+ return value;
+ }
+ }
+ });
+ });
+
+ // Set contenteditable to false on removals(#10429)
+ // Setting to empty string throws an error as an invalid value
+ jQuery.attrHooks.contenteditable = {
+ get: nodeHook.get,
+ set: function( elem, value, name ) {
+ if ( value === "" ) {
+ value = "false";
+ }
+ nodeHook.set( elem, value, name );
+ }
+ };
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+ jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ get: function( elem ) {
+ var ret = elem.getAttribute( name, 2 );
+ return ret === null ? undefined : ret;
+ }
+ });
+ });
+}
+
+if ( !jQuery.support.style ) {
+ jQuery.attrHooks.style = {
+ get: function( elem ) {
+ // Return undefined in the case of empty string
+ // Normalize to lowercase since IE uppercases css property names
+ return elem.style.cssText.toLowerCase() || undefined;
+ },
+ set: function( elem, value ) {
+ return ( elem.style.cssText = "" + value );
+ }
+ };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ return null;
+ }
+ });
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+ jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+ jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ get: function( elem ) {
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+ };
+ });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+ }
+ }
+ });
+});
+
+
+
+
+var rformElems = /^(?:textarea|input|select)$/i,
+ rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
+ rhoverHack = /\bhover(\.\S+)?\b/,
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
+ quickParse = function( selector ) {
+ var quick = rquickIs.exec( selector );
+ if ( quick ) {
+ // 0 1 2 3
+ // [ _, tag, id, class ]
+ quick[1] = ( quick[1] || "" ).toLowerCase();
+ quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
+ }
+ return quick;
+ },
+ quickIs = function( elem, m ) {
+ var attrs = elem.attributes || {};
+ return (
+ (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
+ (!m[2] || (attrs.id || {}).value === m[2]) &&
+ (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
+ );
+ },
+ hoverHack = function( events ) {
+ return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+ };
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var elemData, eventHandle, events,
+ t, tns, type, namespaces, handleObj,
+ handleObjIn, quick, handlers, special;
+
+ // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+ if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ events = elemData.events;
+ if ( !events ) {
+ elemData.events = events = {};
+ }
+ eventHandle = elemData.handle;
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = jQuery.trim( hoverHack(types) ).split( " " );
+ for ( t = 0; t < types.length; t++ ) {
+
+ tns = rtypenamespace.exec( types[t] ) || [];
+ type = tns[1];
+ namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: tns[1],
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ quick: quickParse( selector ),
+ namespace: namespaces.join(".")
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ handlers = events[ type ];
+ if ( !handlers ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener/attachEvent if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+ t, tns, type, origType, namespaces, origCount,
+ j, events, special, handle, eventType, handleObj;
+
+ if ( !elemData || !(events = elemData.events) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+ for ( t = 0; t < types.length; t++ ) {
+ tns = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tns[1];
+ namespaces = tns[2];
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector? special.delegateType : special.bindType ) || type;
+ eventType = events[ type ] || [];
+ origCount = eventType.length;
+ namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+
+ // Remove matching events
+ for ( j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+ eventType.splice( j--, 1 );
+
+ if ( handleObj.selector ) {
+ eventType.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( eventType.length === 0 && origCount !== eventType.length ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ handle = elemData.handle;
+ if ( handle ) {
+ handle.elem = null;
+ }
+
+ // removeData also checks for emptiness and clears the expando if empty
+ // so use it instead of delete
+ jQuery.removeData( elem, [ "events", "handle" ], true );
+ }
+ },
+
+ // Events that are safe to short-circuit if no handlers are attached.
+ // Native DOM events should not be added, they may have inline handlers.
+ customEvent: {
+ "getData": true,
+ "setData": true,
+ "changeData": true
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+ // Don't do events on text and comment nodes
+ if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+ return;
+ }
+
+ // Event object or event type
+ var type = event.type || event,
+ namespaces = [],
+ cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf( "!" ) >= 0 ) {
+ // Exclusive events trigger only for the exact event (no namespaces)
+ type = type.slice(0, -1);
+ exclusive = true;
+ }
+
+ if ( type.indexOf( "." ) >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+
+ if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+ // No jQuery handlers for this event type, and it can't have inline handlers
+ return;
+ }
+
+ // Caller can pass in an Event, Object, or just an event type string
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[ jQuery.expando ] ? event :
+ // Object literal
+ new jQuery.Event( type, event ) :
+ // Just the event type (string)
+ new jQuery.Event( type );
+
+ event.type = type;
+ event.isTrigger = true;
+ event.exclusive = exclusive;
+ event.namespace = namespaces.join( "." );
+ event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+ ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+ // Handle a global trigger
+ if ( !elem ) {
+
+ // TODO: Stop taunting the data cache; remove global events and always attach to document
+ cache = jQuery.cache;
+ for ( i in cache ) {
+ if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+ jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+ }
+ }
+ return;
+ }
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data != null ? jQuery.makeArray( data ) : [];
+ data.unshift( event );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ eventPath = [[ elem, special.bindType || type ]];
+ if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+ old = null;
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push([ cur, bubbleType ]);
+ old = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( old && old === elem.ownerDocument ) {
+ eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+ }
+ }
+
+ // Fire handlers on the event path
+ for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+ cur = eventPath[i][0];
+ event.type = eventPath[i][1];
+
+ handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+ // Note that this is a bare JS function and not a jQuery handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
+ event.preventDefault();
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+ !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction() check here because IE6/7 fails that test.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ // IE<9 dies on focus/blur to hidden element (#1486)
+ if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ old = elem[ ontype ];
+
+ if ( old ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ elem[ type ]();
+ jQuery.event.triggered = undefined;
+
+ if ( old ) {
+ elem[ ontype ] = old;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function( event ) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( event || window.event );
+
+ var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+ delegateCount = handlers.delegateCount,
+ args = [].slice.call( arguments, 0 ),
+ run_all = !event.exclusive && !event.namespace,
+ handlerQueue = [],
+ i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Determine handlers that should run if there are delegated events
+ // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
+ if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
+
+ // Pregenerate a single jQuery object for reuse with .is()
+ jqcur = jQuery(this);
+ jqcur.context = this.ownerDocument || this;
+
+ for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+ selMatch = {};
+ matches = [];
+ jqcur[0] = cur;
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+ sel = handleObj.selector;
+
+ if ( selMatch[ sel ] === undefined ) {
+ selMatch[ sel ] = (
+ handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
+ );
+ }
+ if ( selMatch[ sel ] ) {
+ matches.push( handleObj );
+ }
+ }
+ if ( matches.length ) {
+ handlerQueue.push({ elem: cur, matches: matches });
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if ( handlers.length > delegateCount ) {
+ handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+ }
+
+ // Run delegates first; they may want to stop propagation beneath us
+ for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+ matched = handlerQueue[ i ];
+ event.currentTarget = matched.elem;
+
+ for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+ handleObj = matched.matches[ j ];
+
+ // Triggered event must either 1) be non-exclusive and have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+ .apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+ props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function( event, original ) {
+
+ // Add which for key events
+ if ( event.which == null ) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var eventDoc, doc, body,
+ button = original.button,
+ fromElement = original.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && original.clientX != null ) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && fromElement ) {
+ event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && button !== undefined ) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop,
+ originalEvent = event,
+ fixHook = jQuery.event.fixHooks[ event.type ] || {},
+ copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+ event = jQuery.Event( originalEvent );
+
+ for ( i = copy.length; i; ) {
+ prop = copy[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+ if ( !event.target ) {
+ event.target = originalEvent.srcElement || document;
+ }
+
+ // Target should not be a text node (#504, Safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
+ if ( event.metaKey === undefined ) {
+ event.metaKey = event.ctrlKey;
+ }
+
+ return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+ },
+
+ special: {
+ ready: {
+ // Make sure the ready event is setup
+ setup: jQuery.bindReady
+ },
+
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+
+ focus: {
+ delegateType: "focusin"
+ },
+ blur: {
+ delegateType: "focusout"
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( jQuery.isWindow( this ) ) {
+ this.onbeforeunload = eventHandle;
+ }
+ },
+
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
+ }
+ },
+
+ simulate: function( type, elem, event, bubble ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ { type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if ( bubble ) {
+ jQuery.event.trigger( e, null, elem );
+ } else {
+ jQuery.event.dispatch.call( elem, e );
+ }
+ if ( e.isDefaultPrevented() ) {
+ event.preventDefault();
+ }
+ }
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+ } :
+ function( elem, type, handle ) {
+ if ( elem.detachEvent ) {
+ elem.detachEvent( "on" + type, handle );
+ }
+ };
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !(this instanceof jQuery.Event) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+
+ // otherwise set the returnValue property of the original event to false (IE)
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj,
+ selector = handleObj.selector,
+ ret;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Lazy-add a submit handler when a descendant form may potentially be submitted
+ jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+ // Node name check avoids a VML-related crash in IE (#9807)
+ var elem = e.target,
+ form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+ if ( form && !form._submit_attached ) {
+ jQuery.event.add( form, "submit._submit", function( event ) {
+ // If form was submitted by the user, bubble the event up the tree
+ if ( this.parentNode && !event.isTrigger ) {
+ jQuery.event.simulate( "submit", this.parentNode, event, true );
+ }
+ });
+ form._submit_attached = true;
+ }
+ });
+ // return undefined since we don't need an event listener
+ },
+
+ teardown: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+ jQuery.event.remove( this, "._submit" );
+ }
+ };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+ jQuery.event.special.change = {
+
+ setup: function() {
+
+ if ( rformElems.test( this.nodeName ) ) {
+ // IE doesn't fire change on a check/radio until blur; trigger it on click
+ // after a propertychange. Eat the blur-change in special.change.handle.
+ // This still fires onchange a second time for check/radio after blur.
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ jQuery.event.add( this, "propertychange._change", function( event ) {
+ if ( event.originalEvent.propertyName === "checked" ) {
+ this._just_changed = true;
+ }
+ });
+ jQuery.event.add( this, "click._change", function( event ) {
+ if ( this._just_changed && !event.isTrigger ) {
+ this._just_changed = false;
+ jQuery.event.simulate( "change", this, event, true );
+ }
+ });
+ }
+ return false;
+ }
+ // Delegated event; lazy-add a change handler on descendant inputs
+ jQuery.event.add( this, "beforeactivate._change", function( e ) {
+ var elem = e.target;
+
+ if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+ jQuery.event.add( elem, "change._change", function( event ) {
+ if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+ jQuery.event.simulate( "change", this.parentNode, event, true );
+ }
+ });
+ elem._change_attached = true;
+ }
+ });
+ },
+
+ handle: function( event ) {
+ var elem = event.target;
+
+ // Swallow native change events from checkbox/radio, we already triggered them above
+ if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+ return event.handleObj.handler.apply( this, arguments );
+ }
+ },
+
+ teardown: function() {
+ jQuery.event.remove( this, "._change" );
+
+ return rformElems.test( this.nodeName );
+ }
+ };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0,
+ handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( attaches++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+ // ( types-Object, data )
+ data = selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ this.on( type, selector, data, types[ type ], one );
+ }
+ return this;
+ }
+
+ if ( data == null && fn == null ) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return this;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ });
+ },
+ one: function( types, selector, data, fn ) {
+ return this.on.call( this, types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ if ( types && types.preventDefault && types.handleObj ) {
+ // ( event ) dispatched jQuery.Event
+ var handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+ // ( types-object [, selector] )
+ for ( var type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each(function() {
+ jQuery.event.remove( this, types, fn, selector );
+ });
+ },
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ live: function( types, data, fn ) {
+ jQuery( this.context ).on( types, this.selector, data, fn );
+ return this;
+ },
+ die: function( types, fn ) {
+ jQuery( this.context ).off( types, this.selector || "**", fn );
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ return jQuery.event.trigger( type, data, this[0], true );
+ }
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments,
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ };
+
+ // link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
+ while ( i < args.length ) {
+ args[ i++ ].guid = guid;
+ }
+
+ return this.click( toggler );
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ if ( fn == null ) {
+ fn = data;
+ data = null;
+ }
+
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+
+ if ( jQuery.attrFn ) {
+ jQuery.attrFn[ name ] = true;
+ }
+
+ if ( rkeyEvent.test( name ) ) {
+ jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+ }
+
+ if ( rmouseEvent.test( name ) ) {
+ jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+ }
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ expando = "sizcache" + (Math.random() + '').replace('.', ''),
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true,
+ rBackslash = /\\/g,
+ rReturn = /\r\n/g,
+ rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+// Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+ baseHasDuplicate = false;
+ return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+ results = results || [];
+ context = context || document;
+
+ var origContext = context;
+
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ var m, set, checkSet, extra, ret, cur, pop, i,
+ prune = true,
+ contextXML = Sizzle.isXML( context ),
+ parts = [],
+ soFar = selector;
+
+ // Reset the position of the chunker regexp (start from head)
+ do {
+ chunker.exec( "" );
+ m = chunker.exec( soFar );
+
+ if ( m ) {
+ soFar = m[3];
+
+ parts.push( m[1] );
+
+ if ( m[2] ) {
+ extra = m[3];
+ break;
+ }
+ }
+ } while ( m );
+
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+ set = posProcess( parts[0] + parts[1], context, seed );
+
+ } else {
+ set = Expr.relative[ parts[0] ] ?
+ [ context ] :
+ Sizzle( parts.shift(), context );
+
+ while ( parts.length ) {
+ selector = parts.shift();
+
+ if ( Expr.relative[ selector ] ) {
+ selector += parts.shift();
+ }
+
+ set = posProcess( selector, set, seed );
+ }
+ }
+
+ } else {
+ // Take a shortcut and set the context if the root selector is an ID
+ // (but not if it'll be faster if the inner selector is an ID)
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+ ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set )[0] :
+ ret.set[0];
+ }
+
+ if ( context ) {
+ ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+ set = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set ) :
+ ret.set;
+
+ if ( parts.length > 0 ) {
+ checkSet = makeArray( set );
+
+ } else {
+ prune = false;
+ }
+
+ while ( parts.length ) {
+ cur = parts.pop();
+ pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
+
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+
+ } else {
+ checkSet = parts = [];
+ }
+ }
+
+ if ( !checkSet ) {
+ checkSet = set;
+ }
+
+ if ( !checkSet ) {
+ Sizzle.error( cur || selector );
+ }
+
+ if ( toString.call(checkSet) === "[object Array]" ) {
+ if ( !prune ) {
+ results.push.apply( results, checkSet );
+
+ } else if ( context && context.nodeType === 1 ) {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+ results.push( set[i] );
+ }
+ }
+
+ } else {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+ results.push( set[i] );
+ }
+ }
+ }
+
+ } else {
+ makeArray( checkSet, results );
+ }
+
+ if ( extra ) {
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[ i - 1 ] ) {
+ results.splice( i--, 1 );
+ }
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+ return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+ return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+ var set, i, len, match, type, left;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+ type = Expr.order[i];
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ left = match[1];
+ match.splice( 1, 1 );
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace( rBackslash, "" );
+ set = Expr.find[ type ]( match, context, isXML );
+
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = typeof context.getElementsByTagName !== "undefined" ?
+ context.getElementsByTagName( "*" ) :
+ [];
+ }
+
+ return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+ var match, anyFound,
+ type, found, item, filter, left,
+ i, pass,
+ old = expr,
+ result = [],
+ curLoop = set,
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+ while ( expr && set.length ) {
+ for ( type in Expr.filter ) {
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ filter = Expr.filter[ type ];
+ left = match[1];
+
+ anyFound = false;
+
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) === "\\" ) {
+ continue;
+ }
+
+ if ( curLoop === result ) {
+ result = [];
+ }
+
+ if ( Expr.preFilter[ type ] ) {
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+ if ( !match ) {
+ anyFound = found = true;
+
+ } else if ( match === true ) {
+ continue;
+ }
+ }
+
+ if ( match ) {
+ for ( i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ pass = not ^ found;
+
+ if ( inplace && found != null ) {
+ if ( pass ) {
+ anyFound = true;
+
+ } else {
+ curLoop[i] = false;
+ }
+
+ } else if ( pass ) {
+ result.push( item );
+ anyFound = true;
+ }
+ }
+ }
+ }
+
+ if ( found !== undefined ) {
+ if ( !inplace ) {
+ curLoop = result;
+ }
+
+ expr = expr.replace( Expr.match[ type ], "" );
+
+ if ( !anyFound ) {
+ return [];
+ }
+
+ break;
+ }
+ }
+ }
+
+ // Improper expression
+ if ( expr === old ) {
+ if ( anyFound == null ) {
+ Sizzle.error( expr );
+
+ } else {
+ break;
+ }
+ }
+
+ old = expr;
+ }
+
+ return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Utility function for retreiving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+var getText = Sizzle.getText = function( elem ) {
+ var i, node,
+ nodeType = elem.nodeType,
+ ret = "";
+
+ if ( nodeType ) {
+ if ( nodeType === 1 || nodeType === 9 ) {
+ // Use textContent || innerText for elements
+ if ( typeof elem.textContent === 'string' ) {
+ return elem.textContent;
+ } else if ( typeof elem.innerText === 'string' ) {
+ // Replace IE's carriage returns
+ return elem.innerText.replace( rReturn, '' );
+ } else {
+ // Traverse it's children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ } else {
+
+ // If no nodeType, this is expected to be an array
+ for ( i = 0; (node = elem[i]); i++ ) {
+ // Do not traverse comment nodes
+ if ( node.nodeType !== 8 ) {
+ ret += getText( node );
+ }
+ }
+ }
+ return ret;
+};
+
+var Expr = Sizzle.selectors = {
+ order: [ "ID", "NAME", "TAG" ],
+
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+
+ leftMatch: {},
+
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+
+ attrHandle: {
+ href: function( elem ) {
+ return elem.getAttribute( "href" );
+ },
+ type: function( elem ) {
+ return elem.getAttribute( "type" );
+ }
+ },
+
+ relative: {
+ "+": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !rNonWord.test( part ),
+ isPartStrNotTag = isPartStr && !isTag;
+
+ if ( isTag ) {
+ part = part.toLowerCase();
+ }
+
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+ if ( (elem = checkSet[i]) ) {
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+ elem || false :
+ elem === part;
+ }
+ }
+
+ if ( isPartStrNotTag ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ },
+
+ ">": function( checkSet, part ) {
+ var elem,
+ isPartStr = typeof part === "string",
+ i = 0,
+ l = checkSet.length;
+
+ if ( isPartStr && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+
+ if ( elem ) {
+ var parent = elem.parentNode;
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+ }
+ }
+
+ } else {
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+
+ if ( elem ) {
+ checkSet[i] = isPartStr ?
+ elem.parentNode :
+ elem.parentNode === part;
+ }
+ }
+
+ if ( isPartStr ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ }
+ },
+
+ "": function(checkSet, part, isXML){
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+ },
+
+ "~": function( checkSet, part, isXML ) {
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+ }
+ },
+
+ find: {
+ ID: function( match, context, isXML ) {
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ },
+
+ NAME: function( match, context ) {
+ if ( typeof context.getElementsByName !== "undefined" ) {
+ var ret = [],
+ results = context.getElementsByName( match[1] );
+
+ for ( var i = 0, l = results.length; i < l; i++ ) {
+ if ( results[i].getAttribute("name") === match[1] ) {
+ ret.push( results[i] );
+ }
+ }
+
+ return ret.length === 0 ? null : ret;
+ }
+ },
+
+ TAG: function( match, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( match[1] );
+ }
+ }
+ },
+ preFilter: {
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+ match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+ if ( isXML ) {
+ return match;
+ }
+
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+ if ( elem ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
+ result.push( elem );
+ }
+
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ ID: function( match ) {
+ return match[1].replace( rBackslash, "" );
+ },
+
+ TAG: function( match, curLoop ) {
+ return match[1].replace( rBackslash, "" ).toLowerCase();
+ },
+
+ CHILD: function( match ) {
+ if ( match[1] === "nth" ) {
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ match[2] = match[2].replace(/^\+|\s*/g, '');
+
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+ // calculate the numbers (first)n+(last) including if they are negative
+ match[2] = (test[1] + (test[2] || 1)) - 0;
+ match[3] = test[3] - 0;
+ }
+ else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // TODO: Move to normal caching system
+ match[0] = done++;
+
+ return match;
+ },
+
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+ var name = match[1] = match[1].replace( rBackslash, "" );
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ // Handle if an un-quoted value was used
+ match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+ if ( match[2] === "~=" ) {
+ match[4] = " " + match[4] + " ";
+ }
+
+ return match;
+ },
+
+ PSEUDO: function( match, curLoop, inplace, result, not ) {
+ if ( match[1] === "not" ) {
+ // If we're dealing with a complex expression, or a simple one
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+ match[3] = Sizzle(match[3], null, null, curLoop);
+
+ } else {
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+ if ( !inplace ) {
+ result.push.apply( result, ret );
+ }
+
+ return false;
+ }
+
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+ return true;
+ }
+
+ return match;
+ },
+
+ POS: function( match ) {
+ match.unshift( true );
+
+ return match;
+ }
+ },
+
+ filters: {
+ enabled: function( elem ) {
+ return elem.disabled === false && elem.type !== "hidden";
+ },
+
+ disabled: function( elem ) {
+ return elem.disabled === true;
+ },
+
+ checked: function( elem ) {
+ return elem.checked === true;
+ },
+
+ selected: function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ parent: function( elem ) {
+ return !!elem.firstChild;
+ },
+
+ empty: function( elem ) {
+ return !elem.firstChild;
+ },
+
+ has: function( elem, i, match ) {
+ return !!Sizzle( match[3], elem ).length;
+ },
+
+ header: function( elem ) {
+ return (/h\d/i).test( elem.nodeName );
+ },
+
+ text: function( elem ) {
+ var attr = elem.getAttribute( "type" ), type = elem.type;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+ },
+
+ radio: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+ },
+
+ checkbox: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+ },
+
+ file: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+ },
+
+ password: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+ },
+
+ submit: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "submit" === elem.type;
+ },
+
+ image: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+ },
+
+ reset: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "reset" === elem.type;
+ },
+
+ button: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && "button" === elem.type || name === "button";
+ },
+
+ input: function( elem ) {
+ return (/input|select|textarea|button/i).test( elem.nodeName );
+ },
+
+ focus: function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
+ }
+ },
+ setFilters: {
+ first: function( elem, i ) {
+ return i === 0;
+ },
+
+ last: function( elem, i, match, array ) {
+ return i === array.length - 1;
+ },
+
+ even: function( elem, i ) {
+ return i % 2 === 0;
+ },
+
+ odd: function( elem, i ) {
+ return i % 2 === 1;
+ },
+
+ lt: function( elem, i, match ) {
+ return i < match[3] - 0;
+ },
+
+ gt: function( elem, i, match ) {
+ return i > match[3] - 0;
+ },
+
+ nth: function( elem, i, match ) {
+ return match[3] - 0 === i;
+ },
+
+ eq: function( elem, i, match ) {
+ return match[3] - 0 === i;
+ }
+ },
+ filter: {
+ PSEUDO: function( elem, match, i, array ) {
+ var name = match[1],
+ filter = Expr.filters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+
+ } else if ( name === "contains" ) {
+ return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+ } else if ( name === "not" ) {
+ var not = match[3];
+
+ for ( var j = 0, l = not.length; j < l; j++ ) {
+ if ( not[j] === elem ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ } else {
+ Sizzle.error( name );
+ }
+ },
+
+ CHILD: function( elem, match ) {
+ var first, last,
+ doneName, parent, cache,
+ count, diff,
+ type = match[1],
+ node = elem;
+
+ switch ( type ) {
+ case "only":
+ case "first":
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ if ( type === "first" ) {
+ return true;
+ }
+
+ node = elem;
+
+ case "last":
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ case "nth":
+ first = match[2];
+ last = match[3];
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ doneName = match[0];
+ parent = elem.parentNode;
+
+ if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+ count = 0;
+
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+
+ parent[ expando ] = doneName;
+ }
+
+ diff = elem.nodeIndex - last;
+
+ if ( first === 0 ) {
+ return diff === 0;
+
+ } else {
+ return ( diff % first === 0 && diff / first >= 0 );
+ }
+ }
+ },
+
+ ID: function( elem, match ) {
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
+ },
+
+ TAG: function( elem, match ) {
+ return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
+ },
+
+ CLASS: function( elem, match ) {
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
+ .indexOf( match ) > -1;
+ },
+
+ ATTR: function( elem, match ) {
+ var name = match[1],
+ result = Sizzle.attr ?
+ Sizzle.attr( elem, name ) :
+ Expr.attrHandle[ name ] ?
+ Expr.attrHandle[ name ]( elem ) :
+ elem[ name ] != null ?
+ elem[ name ] :
+ elem.getAttribute( name ),
+ value = result + "",
+ type = match[2],
+ check = match[4];
+
+ return result == null ?
+ type === "!=" :
+ !type && Sizzle.attr ?
+ result != null :
+ type === "=" ?
+ value === check :
+ type === "*=" ?
+ value.indexOf(check) >= 0 :
+ type === "~=" ?
+ (" " + value + " ").indexOf(check) >= 0 :
+ !check ?
+ value && result !== false :
+ type === "!=" ?
+ value !== check :
+ type === "^=" ?
+ value.indexOf(check) === 0 :
+ type === "$=" ?
+ value.substr(value.length - check.length) === check :
+ type === "|=" ?
+ value === check || value.substr(0, check.length + 1) === check + "-" :
+ false;
+ },
+
+ POS: function( elem, match, i, array ) {
+ var name = match[2],
+ filter = Expr.setFilters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ }
+ }
+ }
+};
+
+var origPOS = Expr.match.POS,
+ fescape = function(all, num){
+ return "\\" + (num - 0 + 1);
+ };
+
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+ array = Array.prototype.slice.call( array, 0 );
+
+ if ( results ) {
+ results.push.apply( results, array );
+ return results;
+ }
+
+ return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+ makeArray = function( array, results ) {
+ var i = 0,
+ ret = results || [];
+
+ if ( toString.call(array) === "[object Array]" ) {
+ Array.prototype.push.apply( ret, array );
+
+ } else {
+ if ( typeof array.length === "number" ) {
+ for ( var l = array.length; i < l; i++ ) {
+ ret.push( array[i] );
+ }
+
+ } else {
+ for ( ; array[i]; i++ ) {
+ ret.push( array[i] );
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ return a.compareDocumentPosition ? -1 : 1;
+ }
+
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+ };
+
+} else {
+ sortOrder = function( a, b ) {
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
+ } else if ( a.sourceIndex && b.sourceIndex ) {
+ return a.sourceIndex - b.sourceIndex;
+ }
+
+ var al, bl,
+ ap = [],
+ bp = [],
+ aup = a.parentNode,
+ bup = b.parentNode,
+ cur = aup;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ if ( aup === bup ) {
+ return siblingCheck( a, b );
+
+ // If no parents were found then the nodes are disconnected
+ } else if ( !aup ) {
+ return -1;
+
+ } else if ( !bup ) {
+ return 1;
+ }
+
+ // Otherwise they're somewhere else in the tree so we need
+ // to build up a full list of the parentNodes for comparison
+ while ( cur ) {
+ ap.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ cur = bup;
+
+ while ( cur ) {
+ bp.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ al = ap.length;
+ bl = bp.length;
+
+ // Start walking down the tree looking for a discrepancy
+ for ( var i = 0; i < al && i < bl; i++ ) {
+ if ( ap[i] !== bp[i] ) {
+ return siblingCheck( ap[i], bp[i] );
+ }
+ }
+
+ // We ended someplace up the tree so do a sibling check
+ return i === al ?
+ siblingCheck( a, bp[i], -1 ) :
+ siblingCheck( ap[i], b, 1 );
+ };
+
+ siblingCheck = function( a, b, ret ) {
+ if ( a === b ) {
+ return ret;
+ }
+
+ var cur = a.nextSibling;
+
+ while ( cur ) {
+ if ( cur === b ) {
+ return -1;
+ }
+
+ cur = cur.nextSibling;
+ }
+
+ return 1;
+ };
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+ // We're going to inject a fake input element with a specified name
+ var form = document.createElement("div"),
+ id = "script" + (new Date()).getTime(),
+ root = document.documentElement;
+
+ form.innerHTML = "<a name='" + id + "'/>";
+
+ // Inject it into the root element, check its status, and remove it quickly
+ root.insertBefore( form, root.firstChild );
+
+ // The workaround has to do additional checks after a getElementById
+ // Which slows things down for other browsers (hence the branching)
+ if ( document.getElementById( id ) ) {
+ Expr.find.ID = function( match, context, isXML ) {
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+
+ return m ?
+ m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+ [m] :
+ undefined :
+ [];
+ }
+ };
+
+ Expr.filter.ID = function( elem, match ) {
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+ return elem.nodeType === 1 && node && node.nodeValue === match;
+ };
+ }
+
+ root.removeChild( form );
+
+ // release memory in IE
+ root = form = null;
+})();
+
+(function(){
+ // Check to see if the browser returns only elements
+ // when doing getElementsByTagName("*")
+
+ // Create a fake element
+ var div = document.createElement("div");
+ div.appendChild( document.createComment("") );
+
+ // Make sure no comments are found
+ if ( div.getElementsByTagName("*").length > 0 ) {
+ Expr.find.TAG = function( match, context ) {
+ var results = context.getElementsByTagName( match[1] );
+
+ // Filter out possible comments
+ if ( match[1] === "*" ) {
+ var tmp = [];
+
+ for ( var i = 0; results[i]; i++ ) {
+ if ( results[i].nodeType === 1 ) {
+ tmp.push( results[i] );
+ }
+ }
+
+ results = tmp;
+ }
+
+ return results;
+ };
+ }
+
+ // Check to see if an attribute returns normalized href attributes
+ div.innerHTML = "<a href='#'></a>";
+
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+ div.firstChild.getAttribute("href") !== "#" ) {
+
+ Expr.attrHandle.href = function( elem ) {
+ return elem.getAttribute( "href", 2 );
+ };
+ }
+
+ // release memory in IE
+ div = null;
+})();
+
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle,
+ div = document.createElement("div"),
+ id = "__sizzle__";
+
+ div.innerHTML = "<p class='TEST'></p>";
+
+ // Safari can't handle uppercase or unicode characters when
+ // in quirks mode.
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
+
+ Sizzle = function( query, context, extra, seed ) {
+ context = context || document;
+
+ // Only use querySelectorAll on non-XML documents
+ // (ID selectors don't work in non-HTML documents)
+ if ( !seed && !Sizzle.isXML(context) ) {
+ // See if we find a selector to speed up
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+ // Speed-up: Sizzle("TAG")
+ if ( match[1] ) {
+ return makeArray( context.getElementsByTagName( query ), extra );
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
+ }
+ }
+
+ if ( context.nodeType === 9 ) {
+ // Speed-up: Sizzle("body")
+ // The body element only exists once, optimize finding it
+ if ( query === "body" && context.body ) {
+ return makeArray( [ context.body ], extra );
+
+ // Speed-up: Sizzle("#ID")
+ } else if ( match && match[3] ) {
+ var elem = context.getElementById( match[3] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id === match[3] ) {
+ return makeArray( [ elem ], extra );
+ }
+
+ } else {
+ return makeArray( [], extra );
+ }
+ }
+
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(qsaError) {}
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ var oldContext = context,
+ old = context.getAttribute( "id" ),
+ nid = old || id,
+ hasParent = context.parentNode,
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+ if ( !old ) {
+ context.setAttribute( "id", nid );
+ } else {
+ nid = nid.replace( /'/g, "\\$&" );
+ }
+ if ( relativeHierarchySelector && hasParent ) {
+ context = context.parentNode;
+ }
+
+ try {
+ if ( !relativeHierarchySelector || hasParent ) {
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+ }
+
+ } catch(pseudoError) {
+ } finally {
+ if ( !old ) {
+ oldContext.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ // release memory in IE
+ div = null;
+ })();
+}
+
+(function(){
+ var html = document.documentElement,
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+ if ( matches ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9 fails this)
+ var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+ pseudoWorks = false;
+
+ try {
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( document.documentElement, "[test!='']:sizzle" );
+
+ } catch( pseudoError ) {
+ pseudoWorks = true;
+ }
+
+ Sizzle.matchesSelector = function( node, expr ) {
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+ if ( !Sizzle.isXML( node ) ) {
+ try {
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+ var ret = matches.call( node, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || !disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9, so check for that
+ node.document && node.document.nodeType !== 11 ) {
+ return ret;
+ }
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle(expr, null, null, [node]).length > 0;
+ };
+ }
+})();
+
+(function(){
+ var div = document.createElement("div");
+
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+ // Opera can't find a second classname (in 9.6)
+ // Also, make sure that getElementsByClassName actually exists
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+ return;
+ }
+
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
+ div.lastChild.className = "e";
+
+ if ( div.getElementsByClassName("e").length === 1 ) {
+ return;
+ }
+
+ Expr.order.splice(1, 0, "CLASS");
+ Expr.find.CLASS = function( match, context, isXML ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+ return context.getElementsByClassName(match[1]);
+ }
+ };
+
+ // release memory in IE
+ div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem[ expando ] === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem[ expando ] = doneName;
+ elem.sizset = i;
+ }
+
+ if ( elem.nodeName.toLowerCase() === cur ) {
+ match = elem;
+ break;
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem[ expando ] === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem[ expando ] = doneName;
+ elem.sizset = i;
+ }
+
+ if ( typeof cur !== "string" ) {
+ if ( elem === cur ) {
+ match = true;
+ break;
+ }
+
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+ match = elem;
+ break;
+ }
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+if ( document.documentElement.contains ) {
+ Sizzle.contains = function( a, b ) {
+ return a !== b && (a.contains ? a.contains(b) : true);
+ };
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+ Sizzle.contains = function( a, b ) {
+ return !!(a.compareDocumentPosition(b) & 16);
+ };
+
+} else {
+ Sizzle.contains = function() {
+ return false;
+ };
+}
+
+Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context, seed ) {
+ var match,
+ tmpSet = [],
+ later = "",
+ root = context.nodeType ? [context] : context;
+
+ // Position selectors must be done after the filter
+ // And so must :not(positional) so we move all PSEUDOs to the end
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+ later += match[0];
+ selector = selector.replace( Expr.match.PSEUDO, "" );
+ }
+
+ selector = Expr.relative[selector] ? selector + "*" : selector;
+
+ for ( var i = 0, l = root.length; i < l; i++ ) {
+ Sizzle( selector, root[i], tmpSet, seed );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+Sizzle.selectors.attrMap = {};
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+ // Note: This RegExp should be improved, or likely pulled from Sizzle
+ rmultiselector = /,/,
+ isSimple = /^.[^:#\[\.,]*$/,
+ slice = Array.prototype.slice,
+ POS = jQuery.expr.match.POS,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var self = this,
+ i, l;
+
+ if ( typeof selector !== "string" ) {
+ return jQuery( selector ).filter(function() {
+ for ( i = 0, l = self.length; i < l; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ });
+ }
+
+ var ret = this.pushStack( "", "find", selector ),
+ length, n, r;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( n = length; n < ret.length; n++ ) {
+ for ( r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ has: function( target ) {
+ var targets = jQuery( target );
+ return this.filter(function() {
+ for ( var i = 0, l = targets.length; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && (
+ typeof selector === "string" ?
+ // If this is a positional selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ POS.test( selector ) ?
+ jQuery( selector, this.context ).index( this[0] ) >= 0 :
+ jQuery.filter( selector, this ).length > 0 :
+ this.filter( selector ).length > 0 );
+ },
+
+ closest: function( selectors, context ) {
+ var ret = [], i, l, cur = this[0];
+
+ // Array (deprecated as of jQuery 1.7)
+ if ( jQuery.isArray( selectors ) ) {
+ var level = 1;
+
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ for ( i = 0; i < selectors.length; i++ ) {
+
+ if ( jQuery( cur ).is( selectors[ i ] ) ) {
+ ret.push({ selector: selectors[ i ], elem: cur, level: level });
+ }
+ }
+
+ cur = cur.parentNode;
+ level++;
+ }
+
+ return ret;
+ }
+
+ // String
+ var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ cur = this[i];
+
+ while ( cur ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+ ret.push( cur );
+ break;
+
+ } else {
+ cur = cur.parentNode;
+ if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+ break;
+ }
+ }
+ }
+ }
+
+ ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+ return this.pushStack( ret, "closest", selectors );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+ }
+
+ // index in selector
+ if ( typeof elem === "string" ) {
+ return jQuery.inArray( this[0], jQuery( elem ) );
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return jQuery.nth( elem, 2, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return jQuery.nth( elem, 2, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( elem.parentNode.firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.makeArray( elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+ if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+
+ return this.pushStack( ret, name, slice.call( arguments ).join(",") );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 ?
+ jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+ jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ nth: function( cur, result, dir, elem ) {
+ result = result || 1;
+ var num = 0;
+
+ for ( ; cur; cur = cur[dir] ) {
+ if ( cur.nodeType === 1 && ++num === result ) {
+ break;
+ }
+ }
+
+ return cur;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+ // Can't pass null or undefined to indexOf in Firefox 4
+ // Set to 0 to skip string check
+ qualifier = qualifier || 0;
+
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ var retVal = !!qualifier.call( elem, i, elem );
+ return retVal === keep;
+ });
+
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return ( elem === qualifier ) === keep;
+ });
+
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
+
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
+ }
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+ });
+}
+
+
+
+
+function createSafeFragment( document ) {
+ var list = nodeNames.split( "|" ),
+ safeFrag = document.createDocumentFragment();
+
+ if ( safeFrag.createElement ) {
+ while ( list.length ) {
+ safeFrag.createElement(
+ list.pop()
+ );
+ }
+ }
+ return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" +
+ "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+ rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ rhtml = /<|&#?\w+;/,
+ rnoInnerhtml = /<(?:script|style)/i,
+ rnocache = /<(?:script|object|embed|option|style)/i,
+ rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /\/(java|ecma)script/i,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+ wrapMap = {
+ 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, "", "" ]
+ },
+ safeFragment = createSafeFragment( document );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+ wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+ text: function( text ) {
+ if ( jQuery.isFunction(text) ) {
+ return this.each(function(i) {
+ var self = jQuery( this );
+
+ self.text( text.call(this, i, self.text()) );
+ });
+ }
+
+ if ( typeof text !== "object" && text !== undefined ) {
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+ }
+
+ return jQuery.text( this );
+ },
+
+ wrapAll: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+ if ( this[0].parentNode ) {
+ wrap.insertBefore( this[0] );
+ }
+
+ wrap.map(function() {
+ var elem = this;
+
+ while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+ elem = elem.firstChild;
+ }
+
+ return elem;
+ }).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapInner( html.call(this, i) );
+ });
+ }
+
+ return this.each(function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ });
+ },
+
+ wrap: function( html ) {
+ var isFunction = jQuery.isFunction( html );
+
+ return this.each(function(i) {
+ jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.insertBefore( elem, this.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this );
+ });
+ } else if ( arguments.length ) {
+ var set = jQuery.clean( arguments );
+ set.push.apply( set, this.toArray() );
+ return this.pushStack( set, "before", arguments );
+ }
+ },
+
+ after: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ } else if ( arguments.length ) {
+ var set = this.pushStack( this, "after", arguments );
+ set.push.apply( set, jQuery.clean(arguments) );
+ return set;
+ }
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ jQuery.cleanData( [ elem ] );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ }
+
+ // Remove any remaining nodes
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map( function () {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ });
+ },
+
+ html: function( value ) {
+ if ( value === undefined ) {
+ return this[0] && this[0].nodeType === 1 ?
+ this[0].innerHTML.replace(rinlinejQuery, "") :
+ null;
+
+ // See if we can take a shortcut and just use innerHTML
+ } else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+ !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+ value = value.replace(rxhtmlTag, "<$1></$2>");
+
+ try {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( this[i].nodeType === 1 ) {
+ jQuery.cleanData( this[i].getElementsByTagName("*") );
+ this[i].innerHTML = value;
+ }
+ }
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch(e) {
+ this.empty().append( value );
+ }
+
+ } else if ( jQuery.isFunction( value ) ) {
+ this.each(function(i){
+ var self = jQuery( this );
+
+ self.html( value.call(this, i, self.html()) );
+ });
+
+ } else {
+ this.empty().append( value );
+ }
+
+ return this;
+ },
+
+ replaceWith: function( value ) {
+ if ( this[0] && this[0].parentNode ) {
+ // Make sure that the elements are removed from the DOM before they are inserted
+ // this can help fix replacing a parent with child elements
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this), old = self.html();
+ self.replaceWith( value.call( this, i, old ) );
+ });
+ }
+
+ if ( typeof value !== "string" ) {
+ value = jQuery( value ).detach();
+ }
+
+ return this.each(function() {
+ var next = this.nextSibling,
+ parent = this.parentNode;
+
+ jQuery( this ).remove();
+
+ if ( next ) {
+ jQuery(next).before( value );
+ } else {
+ jQuery(parent).append( value );
+ }
+ });
+ } else {
+ return this.length ?
+ this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+ this;
+ }
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, table, callback ) {
+ var results, first, fragment, parent,
+ value = args[0],
+ scripts = [];
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+ return this.each(function() {
+ jQuery(this).domManip( args, table, callback, true );
+ });
+ }
+
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ args[0] = value.call(this, i, table ? self.html() : undefined);
+ self.domManip( args, table, callback );
+ });
+ }
+
+ if ( this[0] ) {
+ parent = value && value.parentNode;
+
+ // If we're in a fragment, just use that instead of building a new one
+ if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+ results = { fragment: parent };
+
+ } else {
+ results = jQuery.buildFragment( args, this, scripts );
+ }
+
+ fragment = results.fragment;
+
+ if ( fragment.childNodes.length === 1 ) {
+ first = fragment = fragment.firstChild;
+ } else {
+ first = fragment.firstChild;
+ }
+
+ if ( first ) {
+ table = table && jQuery.nodeName( first, "tr" );
+
+ for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+ callback.call(
+ table ?
+ root(this[i], first) :
+ this[i],
+ // Make sure that we do not leak memory by inadvertently discarding
+ // the original fragment (which might have attached data) instead of
+ // using it; in addition, use the original fragment object for the last
+ // item instead of first because it can end up being emptied incorrectly
+ // in certain situations (Bug #8070).
+ // Fragments from the fragment cache must always be cloned and never used
+ // in place.
+ results.cacheable || ( l > 1 && i < lastIndex ) ?
+ jQuery.clone( fragment, true, true ) :
+ fragment
+ );
+ }
+ }
+
+ if ( scripts.length ) {
+ jQuery.each( scripts, evalScript );
+ }
+ }
+
+ return this;
+ }
+});
+
+function root( elem, cur ) {
+ return jQuery.nodeName(elem, "table") ?
+ (elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+ elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+ if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+ return;
+ }
+
+ var type, i, l,
+ oldData = jQuery._data( src ),
+ curData = jQuery._data( dest, oldData ),
+ events = oldData.events;
+
+ if ( events ) {
+ delete curData.handle;
+ curData.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+ }
+ }
+ }
+
+ // make the cloned public data object a copy from the original
+ if ( curData.data ) {
+ curData.data = jQuery.extend( {}, curData.data );
+ }
+}
+
+function cloneFixAttributes( src, dest ) {
+ var nodeName;
+
+ // We do not need to do anything for non-Elements
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // clearAttributes removes the attributes, which we don't want,
+ // but also removes the attachEvent events, which we *do* want
+ if ( dest.clearAttributes ) {
+ dest.clearAttributes();
+ }
+
+ // mergeAttributes, in contrast, only merges back on the
+ // original attributes, not the events
+ if ( dest.mergeAttributes ) {
+ dest.mergeAttributes( src );
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ // IE6-8 fail to clone children inside object elements that use
+ // the proprietary classid attribute value (rather than the type
+ // attribute) to identify the type of content to display
+ if ( nodeName === "object" ) {
+ dest.outerHTML = src.outerHTML;
+
+ } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+ if ( src.checked ) {
+ dest.defaultChecked = dest.checked = src.checked;
+ }
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if ( dest.value !== src.value ) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if ( nodeName === "option" ) {
+ dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+
+ // Event data gets referenced instead of copied if the expando
+ // gets copied too
+ dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+ var fragment, cacheable, cacheresults, doc,
+ first = args[ 0 ];
+
+ // nodes may contain either an explicit document object,
+ // a jQuery collection or context object.
+ // If nodes[0] contains a valid object to assign to doc
+ if ( nodes && nodes[0] ) {
+ doc = nodes[0].ownerDocument || nodes[0];
+ }
+
+ // Ensure that an attr object doesn't incorrectly stand in as a document object
+ // Chrome and Firefox seem to allow this to occur and will throw exception
+ // Fixes #8950
+ if ( !doc.createDocumentFragment ) {
+ doc = document;
+ }
+
+ // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+ // Cloning options loses the selected state, so don't cache them
+ // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+ // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+ // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+ if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
+ first.charAt(0) === "<" && !rnocache.test( first ) &&
+ (jQuery.support.checkClone || !rchecked.test( first )) &&
+ (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
+
+ cacheable = true;
+
+ cacheresults = jQuery.fragments[ first ];
+ if ( cacheresults && cacheresults !== 1 ) {
+ fragment = cacheresults;
+ }
+ }
+
+ if ( !fragment ) {
+ fragment = doc.createDocumentFragment();
+ jQuery.clean( args, doc, fragment, scripts );
+ }
+
+ if ( cacheable ) {
+ jQuery.fragments[ first ] = cacheresults ? fragment : 1;
+ }
+
+ return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var ret = [],
+ insert = jQuery( selector ),
+ parent = this.length === 1 && this[0].parentNode;
+
+ if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+ insert[ original ]( this[0] );
+ return this;
+
+ } else {
+ for ( var i = 0, l = insert.length; i < l; i++ ) {
+ var elems = ( i > 0 ? this.clone(true) : this ).get();
+ jQuery( insert[i] )[ original ]( elems );
+ ret = ret.concat( elems );
+ }
+
+ return this.pushStack( ret, name, insert.selector );
+ }
+ };
+});
+
+function getAll( elem ) {
+ if ( typeof elem.getElementsByTagName !== "undefined" ) {
+ return elem.getElementsByTagName( "*" );
+
+ } else if ( typeof elem.querySelectorAll !== "undefined" ) {
+ return elem.querySelectorAll( "*" );
+
+ } else {
+ return [];
+ }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+ if ( elem.type === "checkbox" || elem.type === "radio" ) {
+ elem.defaultChecked = elem.checked;
+ }
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+ var nodeName = ( elem.nodeName || "" ).toLowerCase();
+ if ( nodeName === "input" ) {
+ fixDefaultChecked( elem );
+ // Skip scripts, get other children
+ } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
+ jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+ }
+}
+
+// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
+function shimCloneNode( elem ) {
+ var div = document.createElement( "div" );
+ safeFragment.appendChild( div );
+
+ div.innerHTML = elem.outerHTML;
+ return div.firstChild;
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var srcElements,
+ destElements,
+ i,
+ // IE<=8 does not properly clone detached, unknown element nodes
+ clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
+ elem.cloneNode( true ) :
+ shimCloneNode( elem );
+
+ if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+ // IE copies events bound via attachEvent when using cloneNode.
+ // Calling detachEvent on the clone will also remove the events
+ // from the original. In order to get around this, we use some
+ // proprietary methods to clear the events. Thanks to MooTools
+ // guys for this hotness.
+
+ cloneFixAttributes( elem, clone );
+
+ // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ // Weird iteration because IE will replace the length property
+ // with an element if you are cloning the body and one of the
+ // elements on the page has a name or id of "length"
+ for ( i = 0; srcElements[i]; ++i ) {
+ // Ensure that the destination node is not null; Fixes #9587
+ if ( destElements[i] ) {
+ cloneFixAttributes( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ cloneCopyEvent( elem, clone );
+
+ if ( deepDataAndEvents ) {
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ for ( i = 0; srcElements[i]; ++i ) {
+ cloneCopyEvent( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ srcElements = destElements = null;
+
+ // Return the cloned set
+ return clone;
+ },
+
+ clean: function( elems, context, fragment, scripts ) {
+ var checkScriptType;
+
+ context = context || document;
+
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if ( typeof context.createElement === "undefined" ) {
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+ }
+
+ var ret = [], j;
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( typeof elem === "number" ) {
+ elem += "";
+ }
+
+ if ( !elem ) {
+ continue;
+ }
+
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" ) {
+ if ( !rhtml.test( elem ) ) {
+ elem = context.createTextNode( elem );
+ } else {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
+ wrap = wrapMap[ tag ] || wrapMap._default,
+ depth = wrap[0],
+ div = context.createElement("div");
+
+ // Append wrapper element to unknown element safe doc fragment
+ if ( context === document ) {
+ // Use the fragment we've already created for this document
+ safeFragment.appendChild( div );
+ } else {
+ // Use a fragment created with the owner document
+ createSafeFragment( context ).appendChild( div );
+ }
+
+ // Go to html and back, then peel off extra wrappers
+ div.innerHTML = wrap[1] + elem + wrap[2];
+
+ // Move to the right depth
+ while ( depth-- ) {
+ div = div.lastChild;
+ }
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( !jQuery.support.tbody ) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ var hasBody = rtbody.test(elem),
+ tbody = tag === "table" && !hasBody ?
+ div.firstChild && div.firstChild.childNodes :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !hasBody ?
+ div.childNodes :
+ [];
+
+ for ( j = tbody.length - 1; j >= 0 ; --j ) {
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ }
+ }
+ }
+
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ }
+
+ elem = div.childNodes;
+ }
+ }
+
+ // Resets defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ var len;
+ if ( !jQuery.support.appendChecked ) {
+ if ( elem[0] && typeof (len = elem.length) === "number" ) {
+ for ( j = 0; j < len; j++ ) {
+ findInputs( elem[j] );
+ }
+ } else {
+ findInputs( elem );
+ }
+ }
+
+ if ( elem.nodeType ) {
+ ret.push( elem );
+ } else {
+ ret = jQuery.merge( ret, elem );
+ }
+ }
+
+ if ( fragment ) {
+ checkScriptType = function( elem ) {
+ return !elem.type || rscriptType.test( elem.type );
+ };
+ for ( i = 0; ret[i]; i++ ) {
+ if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+ scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+ } else {
+ if ( ret[i].nodeType === 1 ) {
+ var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+ ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+ }
+ fragment.appendChild( ret[i] );
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ cleanData: function( elems ) {
+ var data, id,
+ cache = jQuery.cache,
+ special = jQuery.event.special,
+ deleteExpando = jQuery.support.deleteExpando;
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+ continue;
+ }
+
+ id = elem[ jQuery.expando ];
+
+ if ( id ) {
+ data = cache[ id ];
+
+ if ( data && data.events ) {
+ for ( var type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+
+ // Null the DOM reference to avoid IE6/7/8 leak (#7054)
+ if ( data.handle ) {
+ data.handle.elem = null;
+ }
+ }
+
+ if ( deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ }
+
+ delete cache[ id ];
+ }
+ }
+ }
+});
+
+function evalScript( i, elem ) {
+ if ( elem.src ) {
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+ } else {
+ jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity=([^)]*)/,
+ // fixed for IE9, see #8346
+ rupper = /([A-Z]|^ms)/g,
+ rnumpx = /^-?\d+(?:px)?$/i,
+ rnum = /^-?\d/,
+ rrelNum = /^([\-+])=([\-+.\de]+)/,
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssWidth = [ "Left", "Right" ],
+ cssHeight = [ "Top", "Bottom" ],
+ curCSS,
+
+ getComputedStyle,
+ currentStyle;
+
+jQuery.fn.css = function( name, value ) {
+ // Setting 'undefined' is a no-op
+ if ( arguments.length === 2 && value === undefined ) {
+ return this;
+ }
+
+ return jQuery.access( this, name, value, true, function( elem, name, value ) {
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ });
+};
+
+jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity", "opacity" );
+ return ret === "" ? "1" : ret;
+
+ } else {
+ return elem.style.opacity;
+ }
+ }
+ }
+ },
+
+ // Exclude the following css properties to add px
+ cssNumber: {
+ "fillOpacity": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, origName = jQuery.camelCase( name ),
+ style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+ name = jQuery.cssProps[ origName ] || origName;
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+ value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that NaN and null values aren't set. See: #7116
+ if ( value == null || type === "number" && isNaN( value ) ) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+ // Fixes bug #5509
+ try {
+ style[ name ] = value;
+ } catch(e) {}
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra ) {
+ var ret, hooks;
+
+ // Make sure that we're working with the right name
+ name = jQuery.camelCase( name );
+ hooks = jQuery.cssHooks[ name ];
+ name = jQuery.cssProps[ name ] || name;
+
+ // cssFloat needs a special treatment
+ if ( name === "cssFloat" ) {
+ name = "float";
+ }
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+ return ret;
+
+ // Otherwise, if a way to get the computed value exists, use that
+ } else if ( curCSS ) {
+ return curCSS( elem, name );
+ }
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ var old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+ }
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+ jQuery.cssHooks[ name ] = {
+ get: function( elem, computed, extra ) {
+ var val;
+
+ if ( computed ) {
+ if ( elem.offsetWidth !== 0 ) {
+ return getWH( elem, name, extra );
+ } else {
+ jQuery.swap( elem, cssShow, function() {
+ val = getWH( elem, name, extra );
+ });
+ }
+
+ return val;
+ }
+ },
+
+ set: function( elem, value ) {
+ if ( rnumpx.test( value ) ) {
+ // ignore negative width and height values #1599
+ value = parseFloat( value );
+
+ if ( value >= 0 ) {
+ return value + "px";
+ }
+
+ } else {
+ return value;
+ }
+ }
+ };
+});
+
+if ( !jQuery.support.opacity ) {
+ jQuery.cssHooks.opacity = {
+ get: function( elem, computed ) {
+ // IE uses filters for opacity
+ return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+ ( parseFloat( RegExp.$1 ) / 100 ) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function( elem, value ) {
+ var style = elem.style,
+ currentStyle = elem.currentStyle,
+ opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+ filter = currentStyle && currentStyle.filter || style.filter || "";
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+ if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+ // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+ // if "filter:" is present at all, clearType is disabled, we want to avoid this
+ // style.removeAttribute is IE Only, but so apparently is this code path...
+ style.removeAttribute( "filter" );
+
+ // if there there is no filter style applied in a css rule, we are done
+ if ( currentStyle && !currentStyle.filter ) {
+ return;
+ }
+ }
+
+ // otherwise, set new filter values
+ style.filter = ralpha.test( filter ) ?
+ filter.replace( ralpha, opacity ) :
+ filter + " " + opacity;
+ }
+ };
+}
+
+jQuery(function() {
+ // This hook cannot be added until DOM ready because the support test
+ // for it is not run until after DOM ready
+ if ( !jQuery.support.reliableMarginRight ) {
+ jQuery.cssHooks.marginRight = {
+ get: function( elem, computed ) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ var ret;
+ jQuery.swap( elem, { "display": "inline-block" }, function() {
+ if ( computed ) {
+ ret = curCSS( elem, "margin-right", "marginRight" );
+ } else {
+ ret = elem.style.marginRight;
+ }
+ });
+ return ret;
+ }
+ };
+ }
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+ getComputedStyle = function( elem, name ) {
+ var ret, defaultView, computedStyle;
+
+ name = name.replace( rupper, "-$1" ).toLowerCase();
+
+ if ( (defaultView = elem.ownerDocument.defaultView) &&
+ (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+ ret = computedStyle.getPropertyValue( name );
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+ }
+
+ return ret;
+ };
+}
+
+if ( document.documentElement.currentStyle ) {
+ currentStyle = function( elem, name ) {
+ var left, rsLeft, uncomputed,
+ ret = elem.currentStyle && elem.currentStyle[ name ],
+ style = elem.style;
+
+ // Avoid setting ret to empty string here
+ // so we don't default to auto
+ if ( ret === null && style && (uncomputed = style[ name ]) ) {
+ ret = uncomputed;
+ }
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+
+ // Remember the original values
+ left = style.left;
+ rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+
+ // Put in the new values to get a computed value out
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ }
+ style.left = name === "fontSize" ? "1em" : ( ret || 0 );
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
+
+ return ret === "" ? "auto" : ret;
+ };
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+
+ // Start with offset property
+ var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ which = name === "width" ? cssWidth : cssHeight,
+ i = 0,
+ len = which.length;
+
+ if ( val > 0 ) {
+ if ( extra !== "border" ) {
+ for ( ; i < len; i++ ) {
+ if ( !extra ) {
+ val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
+ }
+ if ( extra === "margin" ) {
+ val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
+ } else {
+ val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
+ }
+ }
+ }
+
+ return val + "px";
+ }
+
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS( elem, name, name );
+ if ( val < 0 || val == null ) {
+ val = elem.style[ name ] || 0;
+ }
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat( val ) || 0;
+
+ // Add padding, border, margin
+ if ( extra ) {
+ for ( ; i < len; i++ ) {
+ val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
+ if ( extra !== "padding" ) {
+ val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
+ }
+ if ( extra === "margin" ) {
+ val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
+ }
+ }
+ }
+
+ return val + "px";
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ var width = elem.offsetWidth,
+ height = elem.offsetHeight;
+
+ return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+ };
+
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+
+
+
+
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rhash = /#.*$/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+ rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rquery = /\?/,
+ rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ rselectTextarea = /^(?:select|textarea)/i,
+ rspacesAjax = /\s+/,
+ rts = /([?&])_=[^&]*/,
+ rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Document location
+ ajaxLocation,
+
+ // Document location segments
+ ajaxLocParts,
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+ ajaxLocation = location.href;
+} catch( e ) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement( "a" );
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ if ( jQuery.isFunction( func ) ) {
+ var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+ i = 0,
+ length = dataTypes.length,
+ dataType,
+ list,
+ placeBefore;
+
+ // For each dataType in the dataTypeExpression
+ for ( ; i < length; i++ ) {
+ dataType = dataTypes[ i ];
+ // We control if we're asked to add before
+ // any existing element
+ placeBefore = /^\+/.test( dataType );
+ if ( placeBefore ) {
+ dataType = dataType.substr( 1 ) || "*";
+ }
+ list = structure[ dataType ] = structure[ dataType ] || [];
+ // then we add to the structure accordingly
+ list[ placeBefore ? "unshift" : "push" ]( func );
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+ dataType /* internal */, inspected /* internal */ ) {
+
+ dataType = dataType || options.dataTypes[ 0 ];
+ inspected = inspected || {};
+
+ inspected[ dataType ] = true;
+
+ var list = structure[ dataType ],
+ i = 0,
+ length = list ? list.length : 0,
+ executeOnly = ( structure === prefilters ),
+ selection;
+
+ for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+ selection = list[ i ]( options, originalOptions, jqXHR );
+ // If we got redirected to another dataType
+ // we try there if executing only and not done already
+ if ( typeof selection === "string" ) {
+ if ( !executeOnly || inspected[ selection ] ) {
+ selection = undefined;
+ } else {
+ options.dataTypes.unshift( selection );
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, selection, inspected );
+ }
+ }
+ }
+ // If we're only executing or nothing was selected
+ // we try the catchall dataType if not done already
+ if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, "*", inspected );
+ }
+ // unnecessary when only executing (prefilters)
+ // but it'll be ignored by the caller in that case
+ return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+ for ( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+}
+
+jQuery.fn.extend({
+ load: function( url, params, callback ) {
+ if ( typeof url !== "string" && _load ) {
+ return _load.apply( this, arguments );
+
+ // Don't do a request if no elements are being requested
+ } else if ( !this.length ) {
+ return this;
+ }
+
+ var off = url.indexOf( " " );
+ if ( off >= 0 ) {
+ var selector = url.slice( off, url.length );
+ url = url.slice( 0, off );
+ }
+
+ // Default to a GET request
+ var type = "GET";
+
+ // If the second parameter was provided
+ if ( params ) {
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( typeof params === "object" ) {
+ params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+ type = "POST";
+ }
+ }
+
+ var self = this;
+
+ // Request the remote document
+ jQuery.ajax({
+ url: url,
+ type: type,
+ dataType: "html",
+ data: params,
+ // Complete callback (responseText is used internally)
+ complete: function( jqXHR, status, responseText ) {
+ // Store the response as specified by the jqXHR object
+ responseText = jqXHR.responseText;
+ // If successful, inject the HTML into all the matched elements
+ if ( jqXHR.isResolved() ) {
+ // #4825: Get the actual response in case
+ // a dataFilter is present in ajaxSettings
+ jqXHR.done(function( r ) {
+ responseText = r;
+ });
+ // See if a selector was specified
+ self.html( selector ?
+ // Create a dummy div to hold the results
+ jQuery("<div>")
+ // inject the contents of the document in, removing the scripts
+ // to avoid any 'Permission Denied' errors in IE
+ .append(responseText.replace(rscript, ""))
+
+ // Locate the specified elements
+ .find(selector) :
+
+ // If not, just inject the full result
+ responseText );
+ }
+
+ if ( callback ) {
+ self.each( callback, [ responseText, status, jqXHR ] );
+ }
+ }
+ });
+
+ return this;
+ },
+
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+
+ serializeArray: function() {
+ return this.map(function(){
+ return this.elements ? jQuery.makeArray( this.elements ) : this;
+ })
+ .filter(function(){
+ return this.name && !this.disabled &&
+ ( this.checked || rselectTextarea.test( this.nodeName ) ||
+ rinput.test( this.type ) );
+ })
+ .map(function( i, elem ){
+ var val = jQuery( this ).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val, i ){
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }) :
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }).get();
+ }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+ jQuery.fn[ o ] = function( f ){
+ return this.on( o, f );
+ };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // shift arguments if data argument was omitted
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ type: method,
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ };
+});
+
+jQuery.extend({
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ if ( settings ) {
+ // Building a settings object
+ ajaxExtend( target, jQuery.ajaxSettings );
+ } else {
+ // Extending ajaxSettings
+ settings = target;
+ target = jQuery.ajaxSettings;
+ }
+ ajaxExtend( target, settings );
+ return target;
+ },
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+ global: true,
+ type: "GET",
+ contentType: "application/x-www-form-urlencoded",
+ processData: true,
+ async: true,
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ xml: "application/xml, text/xml",
+ html: "text/html",
+ text: "text/plain",
+ json: "application/json, text/javascript",
+ "*": allTypes
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText"
+ },
+
+ // List of data converters
+ // 1) key format is "source_type destination_type" (a single space in-between)
+ // 2) the catchall symbol "*" can be used for source_type
+ converters: {
+
+ // Convert anything to text
+ "* text": window.String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ context: true,
+ url: true
+ }
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events
+ // It's the callbackContext if one was provided in the options
+ // and if it's a DOM node or a jQuery collection
+ globalEventContext = callbackContext !== s &&
+ ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+ jQuery( callbackContext ) : jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks( "once memory" ),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // ifModified key
+ ifModifiedKey,
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // transport
+ transport,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // The jqXHR state
+ state = 0,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // Fake xhr
+ jqXHR = {
+
+ readyState: 0,
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ if ( !state ) {
+ var lname = name.toLowerCase();
+ name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( state === 2 ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+ responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match === undefined ? null : match;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( !state ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ statusText = statusText || "abort";
+ if ( transport ) {
+ transport.abort( statusText );
+ }
+ done( 0, statusText );
+ return this;
+ }
+ };
+
+ // Callback for when everything is done
+ // It is defined here because jslint complains if it is declared
+ // at the end of the function (which would be more logical and readable)
+ function done( status, nativeStatusText, responses, headers ) {
+
+ // Called once
+ if ( state === 2 ) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ var isSuccess,
+ success,
+ error,
+ statusText = nativeStatusText,
+ response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+ lastModified,
+ etag;
+
+ // If successful, handle type chaining
+ if ( status >= 200 && status < 300 || status === 304 ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+
+ if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+ jQuery.lastModified[ ifModifiedKey ] = lastModified;
+ }
+ if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+ jQuery.etag[ ifModifiedKey ] = etag;
+ }
+ }
+
+ // If not modified
+ if ( status === 304 ) {
+
+ statusText = "notmodified";
+ isSuccess = true;
+
+ // If we have data
+ } else {
+
+ try {
+ success = ajaxConvert( s, response );
+ statusText = "success";
+ isSuccess = true;
+ } catch(e) {
+ // We have a parsererror
+ statusText = "parsererror";
+ error = e;
+ }
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if ( !statusText || status ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = "" + ( nativeStatusText || statusText );
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+ }
+ }
+
+ // Attach deferreds
+ deferred.promise( jqXHR );
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+ jqXHR.complete = completeDeferred.add;
+
+ // Status-dependent callbacks
+ jqXHR.statusCode = function( map ) {
+ if ( map ) {
+ var tmp;
+ if ( state < 2 ) {
+ for ( tmp in map ) {
+ statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+ }
+ } else {
+ tmp = map[ jqXHR.status ];
+ jqXHR.then( tmp, tmp );
+ }
+ }
+ return this;
+ };
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+ // Determine if a cross-domain request is in order
+ if ( s.crossDomain == null ) {
+ parts = rurl.exec( s.url.toLowerCase() );
+ s.crossDomain = !!( parts &&
+ ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+ ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+ ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefiler, stop there
+ if ( state === 2 ) {
+ return false;
+ }
+
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // If data is available, append data to url
+ if ( s.data ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Get ifModifiedKey before adding the anti-cache parameter
+ ifModifiedKey = s.url;
+
+ // Add anti-cache in url if needed
+ if ( s.cache === false ) {
+
+ var ts = jQuery.now(),
+ // try replacing _= if it is there
+ ret = s.url.replace( rts, "$1_=" + ts );
+
+ // if nothing was replaced, add timestamp to the end
+ s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ ifModifiedKey = ifModifiedKey || s.url;
+ if ( jQuery.lastModified[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+ }
+ if ( jQuery.etag[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+ }
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+ s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+ // Abort if not done already
+ jqXHR.abort();
+ return false;
+
+ }
+
+ // Install callbacks on deferreds
+ for ( i in { success: 1, error: 1, complete: 1 } ) {
+ jqXHR[ i ]( s[ i ] );
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = setTimeout( function(){
+ jqXHR.abort( "timeout" );
+ }, s.timeout );
+ }
+
+ try {
+ state = 1;
+ transport.send( requestHeaders, done );
+ } catch (e) {
+ // Propagate exception as error if not done
+ if ( state < 2 ) {
+ done( -1, e );
+ // Simply rethrow otherwise
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ // Serialize an array of form elements or a set of
+ // key/values into a query string
+ param: function( a, traditional ) {
+ var s = [],
+ add = function( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction( value ) ? value() : value;
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( var prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" ).replace( r20, "+" );
+ }
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+ if ( jQuery.isArray( obj ) ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+ // If array item is non-scalar (array or object), encode its
+ // numeric index to resolve deserialization ambiguity issues.
+ // Note that rack (as of 1.0.0) can't currently deserialize
+ // nested arrays properly, and attempting to do so may cause
+ // a server error. Possible fixes are to modify rack's
+ // deserialization algorithm or to provide an option or flag
+ // to force array serialization to be shallow.
+ buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+ }
+ });
+
+ } else if ( !traditional && obj != null && typeof obj === "object" ) {
+ // Serialize object item.
+ for ( var name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var contents = s.contents,
+ dataTypes = s.dataTypes,
+ responseFields = s.responseFields,
+ ct,
+ type,
+ finalDataType,
+ firstDataType;
+
+ // Fill responseXXX fields
+ for ( type in responseFields ) {
+ if ( type in responses ) {
+ jqXHR[ responseFields[type] ] = responses[ type ];
+ }
+ }
+
+ // Remove auto dataType and get content-type in the process
+ while( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+ // Apply the dataFilter if provided
+ if ( s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ var dataTypes = s.dataTypes,
+ converters = {},
+ i,
+ key,
+ length = dataTypes.length,
+ tmp,
+ // Current and previous dataTypes
+ current = dataTypes[ 0 ],
+ prev,
+ // Conversion expression
+ conversion,
+ // Conversion function
+ conv,
+ // Conversion functions (transitive conversion)
+ conv1,
+ conv2;
+
+ // For each dataType in the chain
+ for ( i = 1; i < length; i++ ) {
+
+ // Create converters map
+ // with lowercased keys
+ if ( i === 1 ) {
+ for ( key in s.converters ) {
+ if ( typeof key === "string" ) {
+ converters[ key.toLowerCase() ] = s.converters[ key ];
+ }
+ }
+ }
+
+ // Get the dataTypes
+ prev = current;
+ current = dataTypes[ i ];
+
+ // If current is auto dataType, update it to prev
+ if ( current === "*" ) {
+ current = prev;
+ // If no auto and dataTypes are actually different
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Get the converter
+ conversion = prev + " " + current;
+ conv = converters[ conversion ] || converters[ "* " + current ];
+
+ // If there is no direct converter, search transitively
+ if ( !conv ) {
+ conv2 = undefined;
+ for ( conv1 in converters ) {
+ tmp = conv1.split( " " );
+ if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+ conv2 = converters[ tmp[1] + " " + current ];
+ if ( conv2 ) {
+ conv1 = converters[ conv1 ];
+ if ( conv1 === true ) {
+ conv = conv2;
+ } else if ( conv2 === true ) {
+ conv = conv1;
+ }
+ break;
+ }
+ }
+ }
+ }
+ // If we found no converter, dispatch an error
+ if ( !( conv || conv2 ) ) {
+ jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+ }
+ // If found converter is not an equivalence
+ if ( conv !== true ) {
+ // Convert with 1 or 2 converters accordingly
+ response = conv ? conv( response ) : conv2( conv1(response) );
+ }
+ }
+ }
+ return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+ jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ return jQuery.expando + "_" + ( jsc++ );
+ }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+ ( typeof s.data === "string" );
+
+ if ( s.dataTypes[ 0 ] === "jsonp" ||
+ s.jsonp !== false && ( jsre.test( s.url ) ||
+ inspectData && jsre.test( s.data ) ) ) {
+
+ var responseContainer,
+ jsonpCallback = s.jsonpCallback =
+ jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+ previous = window[ jsonpCallback ],
+ url = s.url,
+ data = s.data,
+ replace = "$1" + jsonpCallback + "$2";
+
+ if ( s.jsonp !== false ) {
+ url = url.replace( jsre, replace );
+ if ( s.url === url ) {
+ if ( inspectData ) {
+ data = data.replace( jsre, replace );
+ }
+ if ( s.data === data ) {
+ // Add callback manually
+ url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+ }
+ }
+ }
+
+ s.url = url;
+ s.data = data;
+
+ // Install callback
+ window[ jsonpCallback ] = function( response ) {
+ responseContainer = [ response ];
+ };
+
+ // Clean-up function
+ jqXHR.always(function() {
+ // Set callback back to previous value
+ window[ jsonpCallback ] = previous;
+ // Call if it was a function and we have a response
+ if ( responseContainer && jQuery.isFunction( previous ) ) {
+ window[ jsonpCallback ]( responseContainer[ 0 ] );
+ }
+ });
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( jsonpCallback + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Delegate to script
+ return "script";
+ }
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /javascript|ecmascript/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ s.global = false;
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+
+ var script,
+ head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+ return {
+
+ send: function( _, callback ) {
+
+ script = document.createElement( "script" );
+
+ script.async = "async";
+
+ if ( s.scriptCharset ) {
+ script.charset = s.scriptCharset;
+ }
+
+ script.src = s.url;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+ if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+
+ // Remove the script
+ if ( head && script.parentNode ) {
+ head.removeChild( script );
+ }
+
+ // Dereference the script
+ script = undefined;
+
+ // Callback if not abort
+ if ( !isAbort ) {
+ callback( 200, "success" );
+ }
+ }
+ };
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709 and #4378).
+ head.insertBefore( script, head.firstChild );
+ },
+
+ abort: function() {
+ if ( script ) {
+ script.onload( 0, 1 );
+ }
+ }
+ };
+ }
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+ xhrOnUnloadAbort = window.ActiveXObject ? function() {
+ // Abort all pending requests
+ for ( var key in xhrCallbacks ) {
+ xhrCallbacks[ key ]( 0, 1 );
+ }
+ } : false,
+ xhrId = 0,
+ xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch( e ) {}
+}
+
+function createActiveXHR() {
+ try {
+ return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+ } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+ /* Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+ function() {
+ return !this.isLocal && createStandardXHR() || createActiveXHR();
+ } :
+ // For all other browsers, use the standard XMLHttpRequest object
+ createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+ jQuery.extend( jQuery.support, {
+ ajax: !!xhr,
+ cors: !!xhr && ( "withCredentials" in xhr )
+ });
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+ jQuery.ajaxTransport(function( s ) {
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( !s.crossDomain || jQuery.support.cors ) {
+
+ var callback;
+
+ return {
+ send: function( headers, complete ) {
+
+ // Get a new xhr
+ var xhr = s.xhr(),
+ handle,
+ i;
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if ( s.username ) {
+ xhr.open( s.type, s.url, s.async, s.username, s.password );
+ } else {
+ xhr.open( s.type, s.url, s.async );
+ }
+
+ // Apply custom fields if provided
+ if ( s.xhrFields ) {
+ for ( i in s.xhrFields ) {
+ xhr[ i ] = s.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( s.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( s.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+ headers[ "X-Requested-With" ] = "XMLHttpRequest";
+ }
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+ } catch( _ ) {}
+
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send( ( s.hasContent && s.data ) || null );
+
+ // Listener
+ callback = function( _, isAbort ) {
+
+ var status,
+ statusText,
+ responseHeaders,
+ responses,
+ xml;
+
+ // Firefox throws exceptions when accessing properties
+ // of an xhr when a network error occured
+ // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+ try {
+
+ // Was never called and is aborted or complete
+ if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+ // Only called once
+ callback = undefined;
+
+ // Do not keep as active anymore
+ if ( handle ) {
+ xhr.onreadystatechange = jQuery.noop;
+ if ( xhrOnUnloadAbort ) {
+ delete xhrCallbacks[ handle ];
+ }
+ }
+
+ // If it's an abort
+ if ( isAbort ) {
+ // Abort it manually if needed
+ if ( xhr.readyState !== 4 ) {
+ xhr.abort();
+ }
+ } else {
+ status = xhr.status;
+ responseHeaders = xhr.getAllResponseHeaders();
+ responses = {};
+ xml = xhr.responseXML;
+
+ // Construct response list
+ if ( xml && xml.documentElement /* #4958 */ ) {
+ responses.xml = xml;
+ }
+ responses.text = xhr.responseText;
+
+ // Firefox throws an exception when accessing
+ // statusText for faulty cross-domain requests
+ try {
+ statusText = xhr.statusText;
+ } catch( e ) {
+ // We normalize with Webkit giving an empty statusText
+ statusText = "";
+ }
+
+ // Filter status for non standard behaviors
+
+ // If the request is local and we have data: assume a success
+ // (success with no data won't get notified, that's the best we
+ // can do given current implementations)
+ if ( !status && s.isLocal && !s.crossDomain ) {
+ status = responses.text ? 200 : 404;
+ // IE - #1450: sometimes returns 1223 when it should be 204
+ } else if ( status === 1223 ) {
+ status = 204;
+ }
+ }
+ }
+ } catch( firefoxAccessException ) {
+ if ( !isAbort ) {
+ complete( -1, firefoxAccessException );
+ }
+ }
+
+ // Call complete if needed
+ if ( responses ) {
+ complete( status, statusText, responses, responseHeaders );
+ }
+ };
+
+ // if we're in sync mode or it's in cache
+ // and has been retrieved directly (IE6 & IE7)
+ // we need to manually fire the callback
+ if ( !s.async || xhr.readyState === 4 ) {
+ callback();
+ } else {
+ handle = ++xhrId;
+ if ( xhrOnUnloadAbort ) {
+ // Create the active xhrs callbacks list if needed
+ // and attach the unload handler
+ if ( !xhrCallbacks ) {
+ xhrCallbacks = {};
+ jQuery( window ).unload( xhrOnUnloadAbort );
+ }
+ // Add to list of active xhrs callbacks
+ xhrCallbacks[ handle ] = callback;
+ }
+ xhr.onreadystatechange = callback;
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback(0,1);
+ }
+ }
+ };
+ }
+ });
+}
+
+
+
+
+var elemdisplay = {},
+ iframe, iframeDoc,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+ timerId,
+ fxAttrs = [
+ // height animations
+ [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+ // width animations
+ [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+ // opacity animations
+ [ "opacity" ]
+ ],
+ fxNow;
+
+jQuery.fn.extend({
+ show: function( speed, easing, callback ) {
+ var elem, display;
+
+ if ( speed || speed === 0 ) {
+ return this.animate( genFx("show", 3), speed, easing, callback );
+
+ } else {
+ for ( var i = 0, j = this.length; i < j; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.style ) {
+ display = elem.style.display;
+
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+ display = elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( display === "" && jQuery.css(elem, "display") === "none" ) {
+ jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( i = 0; i < j; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.style ) {
+ display = elem.style.display;
+
+ if ( display === "" || display === "none" ) {
+ elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
+ }
+ }
+ }
+
+ return this;
+ }
+ },
+
+ hide: function( speed, easing, callback ) {
+ if ( speed || speed === 0 ) {
+ return this.animate( genFx("hide", 3), speed, easing, callback);
+
+ } else {
+ var elem, display,
+ i = 0,
+ j = this.length;
+
+ for ( ; i < j; i++ ) {
+ elem = this[i];
+ if ( elem.style ) {
+ display = jQuery.css( elem, "display" );
+
+ if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
+ jQuery._data( elem, "olddisplay", display );
+ }
+ }
+ }
+
+ // Set the display of the elements in a second loop
+ // to avoid the constant reflow
+ for ( i = 0; i < j; i++ ) {
+ if ( this[i].style ) {
+ this[i].style.display = "none";
+ }
+ }
+
+ return this;
+ }
+ },
+
+ // Save the old toggle function
+ _toggle: jQuery.fn.toggle,
+
+ toggle: function( fn, fn2, callback ) {
+ var bool = typeof fn === "boolean";
+
+ if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+ this._toggle.apply( this, arguments );
+
+ } else if ( fn == null || bool ) {
+ this.each(function() {
+ var state = bool ? fn : jQuery(this).is(":hidden");
+ jQuery(this)[ state ? "show" : "hide" ]();
+ });
+
+ } else {
+ this.animate(genFx("toggle", 3), fn, fn2, callback);
+ }
+
+ return this;
+ },
+
+ fadeTo: function( speed, to, easing, callback ) {
+ return this.filter(":hidden").css("opacity", 0).show().end()
+ .animate({opacity: to}, speed, easing, callback);
+ },
+
+ animate: function( prop, speed, easing, callback ) {
+ var optall = jQuery.speed( speed, easing, callback );
+
+ if ( jQuery.isEmptyObject( prop ) ) {
+ return this.each( optall.complete, [ false ] );
+ }
+
+ // Do not change referenced properties as per-property easing will be lost
+ prop = jQuery.extend( {}, prop );
+
+ function doAnimation() {
+ // XXX 'this' does not always have a nodeName when running the
+ // test suite
+
+ if ( optall.queue === false ) {
+ jQuery._mark( this );
+ }
+
+ var opt = jQuery.extend( {}, optall ),
+ isElement = this.nodeType === 1,
+ hidden = isElement && jQuery(this).is(":hidden"),
+ name, val, p, e,
+ parts, start, end, unit,
+ method;
+
+ // will store per property easing and be used to determine when an animation is complete
+ opt.animatedProperties = {};
+
+ for ( p in prop ) {
+
+ // property name normalization
+ name = jQuery.camelCase( p );
+ if ( p !== name ) {
+ prop[ name ] = prop[ p ];
+ delete prop[ p ];
+ }
+
+ val = prop[ name ];
+
+ // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+ if ( jQuery.isArray( val ) ) {
+ opt.animatedProperties[ name ] = val[ 1 ];
+ val = prop[ name ] = val[ 0 ];
+ } else {
+ opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+ }
+
+ if ( val === "hide" && hidden || val === "show" && !hidden ) {
+ return opt.complete.call( this );
+ }
+
+ if ( isElement && ( name === "height" || name === "width" ) ) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE does not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height animated
+ if ( jQuery.css( this, "display" ) === "inline" &&
+ jQuery.css( this, "float" ) === "none" ) {
+
+ // inline-level elements accept inline-block;
+ // block-level elements need to be inline with layout
+ if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
+ this.style.display = "inline-block";
+
+ } else {
+ this.style.zoom = 1;
+ }
+ }
+ }
+ }
+
+ if ( opt.overflow != null ) {
+ this.style.overflow = "hidden";
+ }
+
+ for ( p in prop ) {
+ e = new jQuery.fx( this, opt, p );
+ val = prop[ p ];
+
+ if ( rfxtypes.test( val ) ) {
+
+ // Tracks whether to show or hide based on private
+ // data attached to the element
+ method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
+ if ( method ) {
+ jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
+ e[ method ]();
+ } else {
+ e[ val ]();
+ }
+
+ } else {
+ parts = rfxnum.exec( val );
+ start = e.cur();
+
+ if ( parts ) {
+ end = parseFloat( parts[2] );
+ unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+ // We need to compute starting value
+ if ( unit !== "px" ) {
+ jQuery.style( this, p, (end || 1) + unit);
+ start = ( (end || 1) / e.cur() ) * start;
+ jQuery.style( this, p, start + unit);
+ }
+
+ // If a +=/-= token was provided, we're doing a relative animation
+ if ( parts[1] ) {
+ end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+ }
+
+ e.custom( start, end, unit );
+
+ } else {
+ e.custom( start, val, "" );
+ }
+ }
+ }
+
+ // For JS strict compliance
+ return true;
+ }
+
+ return optall.queue === false ?
+ this.each( doAnimation ) :
+ this.queue( optall.queue, doAnimation );
+ },
+
+ stop: function( type, clearQueue, gotoEnd ) {
+ if ( typeof type !== "string" ) {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if ( clearQueue && type !== false ) {
+ this.queue( type || "fx", [] );
+ }
+
+ return this.each(function() {
+ var index,
+ hadTimers = false,
+ timers = jQuery.timers,
+ data = jQuery._data( this );
+
+ // clear marker counters if we know they won't be
+ if ( !gotoEnd ) {
+ jQuery._unmark( true, this );
+ }
+
+ function stopQueue( elem, data, index ) {
+ var hooks = data[ index ];
+ jQuery.removeData( elem, index, true );
+ hooks.stop( gotoEnd );
+ }
+
+ if ( type == null ) {
+ for ( index in data ) {
+ if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
+ stopQueue( this, data, index );
+ }
+ }
+ } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
+ stopQueue( this, data, index );
+ }
+
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+ if ( gotoEnd ) {
+
+ // force the next step to be the last
+ timers[ index ]( true );
+ } else {
+ timers[ index ].saveState();
+ }
+ hadTimers = true;
+ timers.splice( index, 1 );
+ }
+ }
+
+ // start the next in the queue if the last step wasn't forced
+ // timers currently will call their complete callbacks, which will dequeue
+ // but only if they were gotoEnd
+ if ( !( gotoEnd && hadTimers ) ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ }
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout( clearFxNow, 0 );
+ return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+ fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+ var obj = {};
+
+ jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
+ obj[ this ] = type;
+ });
+
+ return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+ slideDown: genFx( "show", 1 ),
+ slideUp: genFx( "hide", 1 ),
+ slideToggle: genFx( "toggle", 1 ),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+});
+
+jQuery.extend({
+ speed: function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+ // normalize opt.queue - true/undefined/null -> "fx"
+ if ( opt.queue == null || opt.queue === true ) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function( noUnmark ) {
+ if ( jQuery.isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue ) {
+ jQuery.dequeue( this, opt.queue );
+ } else if ( noUnmark !== false ) {
+ jQuery._unmark( this );
+ }
+ };
+
+ return opt;
+ },
+
+ easing: {
+ linear: function( p, n, firstNum, diff ) {
+ return firstNum + diff * p;
+ },
+ swing: function( p, n, firstNum, diff ) {
+ return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
+ }
+ },
+
+ timers: [],
+
+ fx: function( elem, options, prop ) {
+ this.options = options;
+ this.elem = elem;
+ this.prop = prop;
+
+ options.orig = options.orig || {};
+ }
+
+});
+
+jQuery.fx.prototype = {
+ // Simple function for setting a style value
+ update: function() {
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
+ },
+
+ // Get the current size
+ cur: function() {
+ if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
+ return this.elem[ this.prop ];
+ }
+
+ var parsed,
+ r = jQuery.css( this.elem, this.prop );
+ // Empty strings, null, undefined and "auto" are converted to 0,
+ // complex values such as "rotate(1rad)" are returned as is,
+ // simple values such as "10px" are parsed to Float.
+ return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+ },
+
+ // Start an animation from one number to another
+ custom: function( from, to, unit ) {
+ var self = this,
+ fx = jQuery.fx;
+
+ this.startTime = fxNow || createFxNow();
+ this.end = to;
+ this.now = this.start = from;
+ this.pos = this.state = 0;
+ this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+
+ function t( gotoEnd ) {
+ return self.step( gotoEnd );
+ }
+
+ t.queue = this.options.queue;
+ t.elem = this.elem;
+ t.saveState = function() {
+ if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
+ jQuery._data( self.elem, "fxshow" + self.prop, self.start );
+ }
+ };
+
+ if ( t() && jQuery.timers.push(t) && !timerId ) {
+ timerId = setInterval( fx.tick, fx.interval );
+ }
+ },
+
+ // Simple 'show' function
+ show: function() {
+ var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
+
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
+ this.options.show = true;
+
+ // Begin the animation
+ // Make sure that we start at a small width/height to avoid any flash of content
+ if ( dataShow !== undefined ) {
+ // This show is picking up where a previous hide or show left off
+ this.custom( this.cur(), dataShow );
+ } else {
+ this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
+ }
+
+ // Start by showing the element
+ jQuery( this.elem ).show();
+ },
+
+ // Simple 'hide' function
+ hide: function() {
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
+ this.options.hide = true;
+
+ // Begin the animation
+ this.custom( this.cur(), 0 );
+ },
+
+ // Each step of an animation
+ step: function( gotoEnd ) {
+ var p, n, complete,
+ t = fxNow || createFxNow(),
+ done = true,
+ elem = this.elem,
+ options = this.options;
+
+ if ( gotoEnd || t >= options.duration + this.startTime ) {
+ this.now = this.end;
+ this.pos = this.state = 1;
+ this.update();
+
+ options.animatedProperties[ this.prop ] = true;
+
+ for ( p in options.animatedProperties ) {
+ if ( options.animatedProperties[ p ] !== true ) {
+ done = false;
+ }
+ }
+
+ if ( done ) {
+ // Reset the overflow
+ if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+ jQuery.each( [ "", "X", "Y" ], function( index, value ) {
+ elem.style[ "overflow" + value ] = options.overflow[ index ];
+ });
+ }
+
+ // Hide the element if the "hide" operation was done
+ if ( options.hide ) {
+ jQuery( elem ).hide();
+ }
+
+ // Reset the properties, if the item has been hidden or shown
+ if ( options.hide || options.show ) {
+ for ( p in options.animatedProperties ) {
+ jQuery.style( elem, p, options.orig[ p ] );
+ jQuery.removeData( elem, "fxshow" + p, true );
+ // Toggle data is no longer needed
+ jQuery.removeData( elem, "toggle" + p, true );
+ }
+ }
+
+ // Execute the complete function
+ // in the event that the complete function throws an exception
+ // we must ensure it won't be called twice. #5684
+
+ complete = options.complete;
+ if ( complete ) {
+
+ options.complete = false;
+ complete.call( elem );
+ }
+ }
+
+ return false;
+
+ } else {
+ // classical easing cannot be used with an Infinity duration
+ if ( options.duration == Infinity ) {
+ this.now = t;
+ } else {
+ n = t - this.startTime;
+ this.state = n / options.duration;
+
+ // Perform the easing function, defaults to swing
+ this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
+ this.now = this.start + ( (this.end - this.start) * this.pos );
+ }
+ // Perform the next step of the animation
+ this.update();
+ }
+
+ return true;
+ }
+};
+
+jQuery.extend( jQuery.fx, {
+ tick: function() {
+ var timer,
+ timers = jQuery.timers,
+ i = 0;
+
+ for ( ; i < timers.length; i++ ) {
+ timer = timers[ i ];
+ // Checks the timer has not already been removed
+ if ( !timer() && timers[ i ] === timer ) {
+ timers.splice( i--, 1 );
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ },
+
+ interval: 13,
+
+ stop: function() {
+ clearInterval( timerId );
+ timerId = null;
+ },
+
+ speeds: {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+ },
+
+ step: {
+ opacity: function( fx ) {
+ jQuery.style( fx.elem, "opacity", fx.now );
+ },
+
+ _default: function( fx ) {
+ if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+ fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+ } else {
+ fx.elem[ fx.prop ] = fx.now;
+ }
+ }
+ }
+});
+
+// Adds width/height step functions
+// Do not set anything below 0
+jQuery.each([ "width", "height" ], function( i, prop ) {
+ jQuery.fx.step[ prop ] = function( fx ) {
+ jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
+ };
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+ };
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+ if ( !elemdisplay[ nodeName ] ) {
+
+ var body = document.body,
+ elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+ display = elem.css( "display" );
+ elem.remove();
+
+ // If the simple way fails,
+ // get element's real default display by attaching it to a temp iframe
+ if ( display === "none" || display === "" ) {
+ // No iframe to use yet, so create it
+ if ( !iframe ) {
+ iframe = document.createElement( "iframe" );
+ iframe.frameBorder = iframe.width = iframe.height = 0;
+ }
+
+ body.appendChild( iframe );
+
+ // Create a cacheable copy of the iframe document on first call.
+ // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+ // document to it; WebKit & Firefox won't allow reusing the iframe document.
+ if ( !iframeDoc || !iframe.createElement ) {
+ iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+ iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
+ iframeDoc.close();
+ }
+
+ elem = iframeDoc.createElement( nodeName );
+
+ iframeDoc.body.appendChild( elem );
+
+ display = jQuery.css( elem, "display" );
+ body.removeChild( iframe );
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+ rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0], box;
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ try {
+ box = elem.getBoundingClientRect();
+ } catch(e) {}
+
+ var doc = elem.ownerDocument,
+ docElem = doc.documentElement;
+
+ // Make sure we're not dealing with a disconnected DOM node
+ if ( !box || !jQuery.contains( docElem, elem ) ) {
+ return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+ }
+
+ var body = doc.body,
+ win = getWindow(doc),
+ clientTop = docElem.clientTop || body.clientTop || 0,
+ clientLeft = docElem.clientLeft || body.clientLeft || 0,
+ scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
+ scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+ top = box.top + scrollTop - clientTop,
+ left = box.left + scrollLeft - clientLeft;
+
+ return { top: top, left: left };
+ };
+
+} else {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0];
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ var computedStyle,
+ offsetParent = elem.offsetParent,
+ prevOffsetParent = elem,
+ doc = elem.ownerDocument,
+ docElem = doc.documentElement,
+ body = doc.body,
+ defaultView = doc.defaultView,
+ prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+ top = elem.offsetTop,
+ left = elem.offsetLeft;
+
+ while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+ if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+ break;
+ }
+
+ computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+ top -= elem.scrollTop;
+ left -= elem.scrollLeft;
+
+ if ( elem === offsetParent ) {
+ top += elem.offsetTop;
+ left += elem.offsetLeft;
+
+ if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
+ prevOffsetParent = offsetParent;
+ offsetParent = elem.offsetParent;
+ }
+
+ if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
+ prevComputedStyle = computedStyle;
+ }
+
+ if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+ top += body.offsetTop;
+ left += body.offsetLeft;
+ }
+
+ if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+ top += Math.max( docElem.scrollTop, body.scrollTop );
+ left += Math.max( docElem.scrollLeft, body.scrollLeft );
+ }
+
+ return { top: top, left: left };
+ };
+}
+
+jQuery.offset = {
+
+ bodyOffset: function( body ) {
+ var top = body.offsetTop,
+ left = body.offsetLeft;
+
+ if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+ top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+ left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+ }
+
+ return { top: top, left: left };
+ },
+
+ setOffset: function( elem, options, i ) {
+ var position = jQuery.css( elem, "position" );
+
+ // set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ var curElem = jQuery( elem ),
+ curOffset = curElem.offset(),
+ curCSSTop = jQuery.css( elem, "top" ),
+ curCSSLeft = jQuery.css( elem, "left" ),
+ calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+ props = {}, curPosition = {}, curTop, curLeft;
+
+ // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ if ( options.top != null ) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if ( options.left != null ) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+
+jQuery.fn.extend({
+
+ position: function() {
+ if ( !this[0] ) {
+ return null;
+ }
+
+ var elem = this[0],
+
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent(),
+
+ // Get correct offsets
+ offset = this.offset(),
+ parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+ // Subtract element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+ offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+ // Add offsetParent borders
+ parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+ parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+ // Subtract the two offsets
+ return {
+ top: offset.top - parentOffset.top,
+ left: offset.left - parentOffset.left
+ };
+ },
+
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent || document.body;
+ while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent;
+ });
+ }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+ var method = "scroll" + name;
+
+ jQuery.fn[ method ] = function( val ) {
+ var elem, win;
+
+ if ( val === undefined ) {
+ elem = this[ 0 ];
+
+ if ( !elem ) {
+ return null;
+ }
+
+ win = getWindow( elem );
+
+ // Return the scroll offset
+ return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+ jQuery.support.boxModel && win.document.documentElement[ method ] ||
+ win.document.body[ method ] :
+ elem[ method ];
+ }
+
+ // Set the scroll offset
+ return this.each(function() {
+ win = getWindow( this );
+
+ if ( win ) {
+ win.scrollTo(
+ !i ? val : jQuery( win ).scrollLeft(),
+ i ? val : jQuery( win ).scrollTop()
+ );
+
+ } else {
+ this[ method ] = val;
+ }
+ });
+ };
+});
+
+function getWindow( elem ) {
+ return jQuery.isWindow( elem ) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+}
+
+
+
+
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+ var type = name.toLowerCase();
+
+ // innerHeight and innerWidth
+ jQuery.fn[ "inner" + name ] = function() {
+ var elem = this[0];
+ return elem ?
+ elem.style ?
+ parseFloat( jQuery.css( elem, type, "padding" ) ) :
+ this[ type ]() :
+ null;
+ };
+
+ // outerHeight and outerWidth
+ jQuery.fn[ "outer" + name ] = function( margin ) {
+ var elem = this[0];
+ return elem ?
+ elem.style ?
+ parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+ this[ type ]() :
+ null;
+ };
+
+ jQuery.fn[ type ] = function( size ) {
+ // Get window width or height
+ var elem = this[0];
+ if ( !elem ) {
+ return size == null ? null : this;
+ }
+
+ if ( jQuery.isFunction( size ) ) {
+ return this.each(function( i ) {
+ var self = jQuery( this );
+ self[ type ]( size.call( this, i, self[ type ]() ) );
+ });
+ }
+
+ if ( jQuery.isWindow( elem ) ) {
+ // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+ // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+ var docElemProp = elem.document.documentElement[ "client" + name ],
+ body = elem.document.body;
+ return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+ body && body[ "client" + name ] || docElemProp;
+
+ // Get document width or height
+ } else if ( elem.nodeType === 9 ) {
+ // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+ return Math.max(
+ elem.documentElement["client" + name],
+ elem.body["scroll" + name], elem.documentElement["scroll" + name],
+ elem.body["offset" + name], elem.documentElement["offset" + name]
+ );
+
+ // Get or set width or height on the element
+ } else if ( size === undefined ) {
+ var orig = jQuery.css( elem, type ),
+ ret = parseFloat( orig );
+
+ return jQuery.isNumeric( ret ) ? ret : orig;
+
+ // Set the width or height on the element (default to pixels if value is unitless)
+ } else {
+ return this.css( type, typeof size === "string" ? size : size + "px" );
+ }
+ };
+
+});
+
+
+
+
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+ define( "jquery", [], function () { return jQuery; } );
+}
+
+
+
+})( window );
diff --git a/jquery/jquery.ba-1.3-hashchange.js b/jquery/jquery.ba-1.3-hashchange.js
new file mode 100644
index 0000000..47105f4
--- /dev/null
+++ b/jquery/jquery.ba-1.3-hashchange.js
@@ -0,0 +1,390 @@
+/*!
+ * 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/
+ */
+
+// Script: jQuery hashchange event
+//
+// *Version: 1.3, Last updated: 7/21/2010*
+//
+// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
+// GitHub - http://github.com/cowboy/jquery-hashchange/
+// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
+// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)
+//
+// About: License
+//
+// Copyright (c) 2010 "Cowboy" Ben Alman,
+// Dual licensed under the MIT and GPL licenses.
+// http://benalman.com/about/license/
+//
+// About: Examples
+//
+// These working examples, complete with fully commented code, illustrate a few
+// ways in which this plugin can be used.
+//
+// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
+// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
+//
+// About: Support and Testing
+//
+// Information about what version or versions of jQuery this plugin has been
+// tested with, what browsers it has been tested in, and where the unit tests
+// reside (so you can test it yourself).
+//
+// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2
+// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
+// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
+// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/
+//
+// About: Known issues
+//
+// While this jQuery hashchange event implementation is quite stable and
+// robust, there are a few unfortunate browser bugs surrounding expected
+// hashchange event-based behaviors, independent of any JavaScript
+// window.onhashchange abstraction. See the following examples for more
+// information:
+//
+// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
+// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
+// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
+// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
+//
+// Also note that should a browser natively support the window.onhashchange
+// event, but not report that it does, the fallback polling loop will be used.
+//
+// About: Release History
+//
+// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
+// "removable" for mobile-only development. Added IE6/7 document.title
+// support. Attempted to make Iframe as hidden as possible by using
+// techniques from http://www.paciellogroup.com/blog/?p=604. Added
+// support for the "shortcut" format $(window).hashchange( fn ) and
+// $(window).hashchange() like jQuery provides for built-in events.
+// Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and
+// lowered its default value to 50. Added <jQuery.fn.hashchange.domain>
+// and <jQuery.fn.hashchange.src> properties plus document-domain.html
+// file to address access denied issues when setting document.domain in
+// IE6/7.
+// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin
+// from a page on another domain would cause an error in Safari 4. Also,
+// IE6/7 Iframe is now inserted after the body (this actually works),
+// which prevents the page from scrolling when the event is first bound.
+// Event can also now be bound before DOM ready, but it won't be usable
+// before then in IE6/7.
+// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug
+// where browser version is incorrectly reported as 8.0, despite
+// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
+// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special
+// window.onhashchange functionality into a separate plugin for users
+// who want just the basic event & back button support, without all the
+// extra awesomeness that BBQ provides. This plugin will be included as
+// part of jQuery BBQ, but also be available separately.
+
+(function($,window,undefined){
+ '$:nomunge'; // Used by YUI compressor.
+
+ // Reused string.
+ var str_hashchange = 'hashchange',
+
+ // Method / object references.
+ doc = document,
+ fake_onhashchange,
+ special = $.event.special,
+
+ // Does the browser support window.onhashchange? Note that IE8 running in
+ // IE7 compatibility mode reports true for 'onhashchange' in window, even
+ // though the event isn't supported, so also test document.documentMode.
+ doc_mode = doc.documentMode,
+ supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );
+
+ // Get location.hash (or what you'd expect location.hash to be) sans any
+ // leading #. Thanks for making this necessary, Firefox!
+ function get_fragment( url ) {
+ url = url || location.href;
+ return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );
+ };
+
+ // Method: jQuery.fn.hashchange
+ //
+ // Bind a handler to the window.onhashchange event or trigger all bound
+ // window.onhashchange event handlers. This behavior is consistent with
+ // jQuery's built-in event handlers.
+ //
+ // Usage:
+ //
+ // > jQuery(window).hashchange( [ handler ] );
+ //
+ // Arguments:
+ //
+ // handler - (Function) Optional handler to be bound to the hashchange
+ // event. This is a "shortcut" for the more verbose form:
+ // jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
+ // all bound window.onhashchange event handlers will be triggered. This
+ // is a shortcut for the more verbose
+ // jQuery(window).trigger( 'hashchange' ). These forms are described in
+ // the <hashchange event> section.
+ //
+ // Returns:
+ //
+ // (jQuery) The initial jQuery collection of elements.
+
+ // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
+ // $(elem).hashchange() for triggering, like jQuery does for built-in events.
+ $.fn[ str_hashchange ] = function( fn ) {
+ return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );
+ };
+
+ // Property: jQuery.fn.hashchange.delay
+ //
+ // The numeric interval (in milliseconds) at which the <hashchange event>
+ // polling loop executes. Defaults to 50.
+
+ // Property: jQuery.fn.hashchange.domain
+ //
+ // If you're setting document.domain in your JavaScript, and you want hash
+ // history to work in IE6/7, not only must this property be set, but you must
+ // also set document.domain BEFORE jQuery is loaded into the page. This
+ // property is only applicable if you are supporting IE6/7 (or IE8 operating
+ // in "IE7 compatibility" mode).
+ //
+ // In addition, the <jQuery.fn.hashchange.src> property must be set to the
+ // path of the included "document-domain.html" file, which can be renamed or
+ // modified if necessary (note that the document.domain specified must be the
+ // same in both your main JavaScript as well as in this file).
+ //
+ // Usage:
+ //
+ // jQuery.fn.hashchange.domain = document.domain;
+
+ // Property: jQuery.fn.hashchange.src
+ //
+ // If, for some reason, you need to specify an Iframe src file (for example,
+ // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can
+ // do so using this property. Note that when using this property, history
+ // won't be recorded in IE6/7 until the Iframe src file loads. This property
+ // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
+ // compatibility" mode).
+ //
+ // Usage:
+ //
+ // jQuery.fn.hashchange.src = 'path/to/file.html';
+
+ $.fn[ str_hashchange ].delay = 50;
+ /*
+ $.fn[ str_hashchange ].domain = null;
+ $.fn[ str_hashchange ].src = null;
+ */
+
+ // Event: hashchange event
+ //
+ // Fired when location.hash changes. In browsers that support it, the native
+ // HTML5 window.onhashchange event is used, otherwise a polling loop is
+ // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to
+ // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
+ // compatibility" mode), a hidden Iframe is created to allow the back button
+ // and hash-based history to work.
+ //
+ // Usage as described in <jQuery.fn.hashchange>:
+ //
+ // > // Bind an event handler.
+ // > jQuery(window).hashchange( function(e) {
+ // > var hash = location.hash;
+ // > ...
+ // > });
+ // >
+ // > // Manually trigger the event handler.
+ // > jQuery(window).hashchange();
+ //
+ // A more verbose usage that allows for event namespacing:
+ //
+ // > // Bind an event handler.
+ // > jQuery(window).bind( 'hashchange', function(e) {
+ // > var hash = location.hash;
+ // > ...
+ // > });
+ // >
+ // > // Manually trigger the event handler.
+ // > jQuery(window).trigger( 'hashchange' );
+ //
+ // Additional Notes:
+ //
+ // * The polling loop and Iframe are not created until at least one handler
+ // is actually bound to the 'hashchange' event.
+ // * If you need the bound handler(s) to execute immediately, in cases where
+ // a location.hash exists on page load, via bookmark or page refresh for
+ // example, use jQuery(window).hashchange() or the more verbose
+ // jQuery(window).trigger( 'hashchange' ).
+ // * The event can be bound before DOM ready, but since it won't be usable
+ // before then in IE6/7 (due to the necessary Iframe), recommended usage is
+ // to bind it inside a DOM ready handler.
+
+ // Override existing $.event.special.hashchange methods (allowing this plugin
+ // to be defined after jQuery BBQ in BBQ's source code).
+ special[ str_hashchange ] = $.extend( special[ str_hashchange ], {
+
+ // Called only when the first 'hashchange' event is bound to window.
+ setup: function() {
+ // If window.onhashchange is supported natively, there's nothing to do..
+ if ( supports_onhashchange ) { return false; }
+
+ // Otherwise, we need to create our own. And we don't want to call this
+ // until the user binds to the event, just in case they never do, since it
+ // will create a polling loop and possibly even a hidden Iframe.
+ $( fake_onhashchange.start );
+ },
+
+ // Called only when the last 'hashchange' event is unbound from window.
+ teardown: function() {
+ // If window.onhashchange is supported natively, there's nothing to do..
+ if ( supports_onhashchange ) { return false; }
+
+ // Otherwise, we need to stop ours (if possible).
+ $( fake_onhashchange.stop );
+ }
+
+ });
+
+ // fake_onhashchange does all the work of triggering the window.onhashchange
+ // event for browsers that don't natively support it, including creating a
+ // polling loop to watch for hash changes and in IE 6/7 creating a hidden
+ // Iframe to enable back and forward.
+ fake_onhashchange = (function(){
+ var self = {},
+ timeout_id,
+
+ // Remember the initial hash so it doesn't get triggered immediately.
+ last_hash = get_fragment(),
+
+ fn_retval = function(val){ return val; },
+ history_set = fn_retval,
+ history_get = fn_retval;
+
+ // Start the polling loop.
+ self.start = function() {
+ timeout_id || poll();
+ };
+
+ // Stop the polling loop.
+ self.stop = function() {
+ timeout_id && clearTimeout( timeout_id );
+ timeout_id = undefined;
+ };
+
+ // This polling loop checks every $.fn.hashchange.delay milliseconds to see
+ // if location.hash has changed, and triggers the 'hashchange' event on
+ // window when necessary.
+ function poll() {
+ var hash = get_fragment(),
+ history_hash = history_get( last_hash );
+
+ if ( hash !== last_hash ) {
+ history_set( last_hash = hash, history_hash );
+
+ $(window).trigger( str_hashchange );
+
+ } else if ( history_hash !== last_hash ) {
+ location.href = location.href.replace( /#.*/, '' ) + history_hash;
+ }
+
+ timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );
+ };
+
+ // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+ // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
+ // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+ $.browser.msie && !supports_onhashchange && (function(){
+ // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
+ // when running in "IE7 compatibility" mode.
+
+ var iframe,
+ iframe_src;
+
+ // When the event is bound and polling starts in IE 6/7, create a hidden
+ // Iframe for history handling.
+ self.start = function(){
+ if ( !iframe ) {
+ iframe_src = $.fn[ str_hashchange ].src;
+ iframe_src = iframe_src && iframe_src + get_fragment();
+
+ // Create hidden Iframe. Attempt to make Iframe as hidden as possible
+ // by using techniques from http://www.paciellogroup.com/blog/?p=604.
+ iframe = $('<iframe tabindex="-1" title="empty"/>').hide()
+
+ // When Iframe has completely loaded, initialize the history and
+ // start polling.
+ .one( 'load', function(){
+ iframe_src || history_set( get_fragment() );
+ poll();
+ })
+
+ // Load Iframe src if specified, otherwise nothing.
+ .attr( 'src', iframe_src || 'javascript:0' )
+
+ // Append Iframe after the end of the body to prevent unnecessary
+ // initial page scrolling (yes, this works).
+ .insertAfter( 'body' )[0].contentWindow;
+
+ // Whenever `document.title` changes, update the Iframe's title to
+ // prettify the back/next history menu entries. Since IE sometimes
+ // errors with "Unspecified error" the very first time this is set
+ // (yes, very useful) wrap this with a try/catch block.
+ doc.onpropertychange = function(){
+ try {
+ if ( event.propertyName === 'title' ) {
+ iframe.document.title = doc.title;
+ }
+ } catch(e) {}
+ };
+
+ }
+ };
+
+ // Override the "stop" method since an IE6/7 Iframe was created. Even
+ // if there are no longer any bound event handlers, the polling loop
+ // is still necessary for back/next to work at all!
+ self.stop = fn_retval;
+
+ // Get history by looking at the hidden Iframe's location.hash.
+ history_get = function() {
+ return get_fragment( iframe.location.href );
+ };
+
+ // Set a new history item by opening and then closing the Iframe
+ // document, *then* setting its location.hash. If document.domain has
+ // been set, update that as well.
+ history_set = function( hash, history_hash ) {
+ var iframe_doc = iframe.document,
+ domain = $.fn[ str_hashchange ].domain;
+
+ if ( hash !== history_hash ) {
+ // Update Iframe with any initial `document.title` that might be set.
+ iframe_doc.title = doc.title;
+
+ // Opening the Iframe's document after it has been closed is what
+ // actually adds a history entry.
+ iframe_doc.open();
+
+ // Set document.domain for the Iframe document as well, if necessary.
+ domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' );
+
+ iframe_doc.close();
+
+ // Update the Iframe's hash, for great justice.
+ iframe.location.hash = hash;
+ }
+ };
+
+ })();
+ // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^
+ // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ return self;
+ })();
+
+})(jQuery,this);
diff --git a/jquery/jquery.scrollTo-1.4.2.js b/jquery/jquery.scrollTo-1.4.2.js
new file mode 100644
index 0000000..eec31e1
--- /dev/null
+++ b/jquery/jquery.scrollTo-1.4.2.js
@@ -0,0 +1,215 @@
+/**
+ * jQuery.ScrollTo
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 5/25/2009
+ *
+ * @projectDescription Easy element scrolling using jQuery.
+ * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
+ * Works with jQuery +1.2.6. Tested on FF 2/3, IE 6/7/8, Opera 9.5/6, Safari 3, Chrome 1 on WinXP.
+ *
+ * @author Ariel Flesler
+ * @version 1.4.2
+ *
+ * @id jQuery.scrollTo
+ * @id jQuery.fn.scrollTo
+ * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
+ * The different options for target are:
+ * - A number position (will be applied to all axes).
+ * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes
+ * - A jQuery/DOM element ( logically, child of the element to scroll )
+ * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
+ * - A hash { top:x, left:y }, x and y can be any kind of number/string like above.
+* - A percentage of the container's dimension/s, for example: 50% to go to the middle.
+ * - The string 'max' for go-to-end.
+ * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead.
+ * @param {Object,Function} settings Optional set of settings or the onAfter callback.
+ * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
+ * @option {Number} duration The OVERALL length of the animation.
+ * @option {String} easing The easing method for the animation.
+ * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
+ * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
+ * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
+ * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
+ * @option {Function} onAfter Function to be called after the scrolling ends.
+ * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
+ * @return {jQuery} Returns the same jQuery object, for chaining.
+ *
+ * @desc Scroll to a fixed position
+ * @example $('div').scrollTo( 340 );
+ *
+ * @desc Scroll relatively to the actual position
+ * @example $('div').scrollTo( '+=340px', { axis:'y' } );
+ *
+ * @dec Scroll using a selector (relative to the scrolled element)
+ * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
+ *
+ * @ Scroll to a DOM element (same for jQuery object)
+ * @example var second_child = document.getElementById('container').firstChild.nextSibling;
+ * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
+ * alert('scrolled!!');
+ * }});
+ *
+ * @desc Scroll on both axes, to different values
+ * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
+ */
+;(function( $ ){
+
+ var $scrollTo = $.scrollTo = function( target, duration, settings ){
+ $(window).scrollTo( target, duration, settings );
+ };
+
+ $scrollTo.defaults = {
+ axis:'xy',
+ duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1
+ };
+
+ // Returns the element that needs to be animated to scroll the window.
+ // Kept for backwards compatibility (specially for localScroll & serialScroll)
+ $scrollTo.window = function( scope ){
+ return $(window)._scrollable();
+ };
+
+ // Hack, hack, hack :)
+ // Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
+ $.fn._scrollable = function(){
+ return this.map(function(){
+ var elem = this,
+ isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
+
+ if( !isWin )
+ return elem;
+
+ var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
+
+ return $.browser.safari || doc.compatMode == 'BackCompat' ?
+ doc.body :
+ doc.documentElement;
+ });
+ };
+
+ $.fn.scrollTo = function( target, duration, settings ){
+ if( typeof duration == 'object' ){
+ settings = duration;
+ duration = 0;
+ }
+ if( typeof settings == 'function' )
+ settings = { onAfter:settings };
+
+ if( target == 'max' )
+ target = 9e9;
+
+ settings = $.extend( {}, $scrollTo.defaults, settings );
+ // Speed is still recognized for backwards compatibility
+ duration = duration || settings.speed || settings.duration;
+ // Make sure the settings are given right
+ settings.queue = settings.queue && settings.axis.length > 1;
+
+ if( settings.queue )
+ // Let's keep the overall duration
+ duration /= 2;
+ settings.offset = both( settings.offset );
+ settings.over = both( settings.over );
+
+ return this._scrollable().each(function(){
+ var elem = this,
+ $elem = $(elem),
+ targ = target, toff, attr = {},
+ win = $elem.is('html,body');
+
+ switch( typeof targ ){
+ // A number will pass the regex
+ case 'number':
+ case 'string':
+ if( /^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ) ){
+ targ = both( targ );
+ // We are done
+ break;
+ }
+ // Relative selector, no break!
+ targ = $(targ,this);
+ case 'object':
+ // DOMElement / jQuery
+ if( targ.is || targ.style )
+ // Get the real position of the target
+ toff = (targ = $(targ)).offset();
+ }
+ $.each( settings.axis.split(''), function( i, axis ){
+ var Pos = axis == 'x' ? 'Left' : 'Top',
+ pos = Pos.toLowerCase(),
+ key = 'scroll' + Pos,
+ old = elem[key],
+ max = $scrollTo.max(elem, axis);
+
+ if( toff ){// jQuery / DOMElement
+ attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
+
+ // If it's a dom element, reduce the margin
+ if( settings.margin ){
+ attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
+ attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
+ }
+
+ attr[key] += settings.offset[pos] || 0;
+
+ if( settings.over[pos] )
+ // Scroll to a fraction of its width/height
+ attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
+ }else{
+ var val = targ[pos];
+ // Handle percentage values
+ attr[key] = val.slice && val.slice(-1) == '%' ?
+ parseFloat(val) / 100 * max
+ : val;
+ }
+
+ // Number or 'number'
+ if( /^\d+$/.test(attr[key]) )
+ // Check the limits
+ attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
+
+ // Queueing axes
+ if( !i && settings.queue ){
+ // Don't waste time animating, if there's no need.
+ if( old != attr[key] )
+ // Intermediate animation
+ animate( settings.onAfterFirst );
+ // Don't animate this axis again in the next iteration.
+ delete attr[key];
+ }
+ });
+
+ animate( settings.onAfter );
+
+ function animate( callback ){
+ $elem.animate( attr, duration, settings.easing, callback && function(){
+ callback.call(this, target, settings);
+ });
+ };
+
+ }).end();
+ };
+
+ // Max scrolling position, works on quirks mode
+ // It only fails (not too badly) on IE, quirks mode.
+ $scrollTo.max = function( elem, axis ){
+ var Dim = axis == 'x' ? 'Width' : 'Height',
+ scroll = 'scroll'+Dim;
+
+ if( !$(elem).is('html,body') )
+ return elem[scroll] - $(elem)[Dim.toLowerCase()]();
+
+ var size = 'client' + Dim,
+ html = elem.ownerDocument.documentElement,
+ body = elem.ownerDocument.body;
+
+ return Math.max( html[scroll], body[scroll] )
+ - Math.min( html[size] , body[size] );
+
+ };
+
+ function both( val ){
+ return typeof val == 'object' ? val : { top:val, left:val };
+ };
+
+})( jQuery ); \ No newline at end of file
diff --git a/jquery/jquery.ui-1.8.18.core.js b/jquery/jquery.ui-1.8.18.core.js
new file mode 100644
index 0000000..98b4f9b
--- /dev/null
+++ b/jquery/jquery.ui-1.8.18.core.js
@@ -0,0 +1,319 @@
+/*!
+ * 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( $, undefined ) {
+
+// prevent duplicate loading
+// this is only a problem because we proxy existing functions
+// and we don't want to double proxy them
+$.ui = $.ui || {};
+if ( $.ui.version ) {
+ return;
+}
+
+$.extend( $.ui, {
+ version: "1.8.18",
+
+ keyCode: {
+ ALT: 18,
+ BACKSPACE: 8,
+ CAPS_LOCK: 20,
+ COMMA: 188,
+ COMMAND: 91,
+ COMMAND_LEFT: 91, // COMMAND
+ COMMAND_RIGHT: 93,
+ CONTROL: 17,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ MENU: 93, // COMMAND_RIGHT
+ 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 // COMMAND
+ }
+});
+
+// plugins
+$.fn.extend({
+ propAttr: $.fn.prop || $.fn.attr,
+
+ _focus: $.fn.focus,
+ focus: function( delay, fn ) {
+ return typeof delay === "number" ?
+ this.each(function() {
+ var elem = this;
+ setTimeout(function() {
+ $( elem ).focus();
+ if ( fn ) {
+ fn.call( elem );
+ }
+ }, delay );
+ }) :
+ this._focus.apply( this, arguments );
+ },
+
+ scrollParent: function() {
+ var scrollParent;
+ if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
+ scrollParent = this.parents().filter(function() {
+ return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+ }).eq(0);
+ } else {
+ scrollParent = this.parents().filter(function() {
+ return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+ }).eq(0);
+ }
+
+ return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
+ },
+
+ zIndex: function( zIndex ) {
+ if ( zIndex !== undefined ) {
+ return this.css( "zIndex", zIndex );
+ }
+
+ if ( this.length ) {
+ var elem = $( this[ 0 ] ), position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+ }
+
+ return 0;
+ },
+
+ disableSelection: function() {
+ return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+ ".ui-disableSelection", function( event ) {
+ event.preventDefault();
+ });
+ },
+
+ enableSelection: function() {
+ return this.unbind( ".ui-disableSelection" );
+ }
+});
+
+$.each( [ "Width", "Height" ], function( i, name ) {
+ var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce( elem, size, border, margin ) {
+ $.each( side, function() {
+ size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
+ if ( border ) {
+ size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
+ }
+ if ( margin ) {
+ size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
+ }
+ });
+ return size;
+ }
+
+ $.fn[ "inner" + name ] = function( size ) {
+ if ( size === undefined ) {
+ return orig[ "inner" + name ].call( this );
+ }
+
+ return this.each(function() {
+ $( this ).css( type, reduce( this, size ) + "px" );
+ });
+ };
+
+ $.fn[ "outer" + name] = function( size, margin ) {
+ if ( typeof size !== "number" ) {
+ return orig[ "outer" + name ].call( this, size );
+ }
+
+ return this.each(function() {
+ $( this).css( type, reduce( this, size, true, margin ) + "px" );
+ });
+ };
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+ var nodeName = element.nodeName.toLowerCase();
+ if ( "area" === nodeName ) {
+ var map = element.parentNode,
+ mapName = map.name,
+ img;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap=#" + mapName + "]" )[0];
+ return !!img && visible( img );
+ }
+ return ( /input|select|textarea|button|object/.test( nodeName )
+ ? !element.disabled
+ : "a" == nodeName
+ ? element.href || isTabIndexNotNaN
+ : isTabIndexNotNaN)
+ // the element and all of its ancestors must be visible
+ && visible( element );
+}
+
+function visible( element ) {
+ return !$( element ).parents().andSelf().filter(function() {
+ return $.curCSS( this, "visibility" ) === "hidden" ||
+ $.expr.filters.hidden( this );
+ }).length;
+}
+
+$.extend( $.expr[ ":" ], {
+ data: function( elem, i, match ) {
+ return !!$.data( elem, match[ 3 ] );
+ },
+
+ focusable: function( element ) {
+ return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+ },
+
+ tabbable: function( element ) {
+ var tabIndex = $.attr( element, "tabindex" ),
+ isTabIndexNaN = isNaN( tabIndex );
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+ }
+});
+
+// support
+$(function() {
+ var body = document.body,
+ div = body.appendChild( div = document.createElement( "div" ) );
+
+ // access offsetHeight before setting the style to prevent a layout bug
+ // in IE 9 which causes the elemnt to continue to take up space even
+ // after it is removed from the DOM (#8026)
+ div.offsetHeight;
+
+ $.extend( div.style, {
+ minHeight: "100px",
+ height: "auto",
+ padding: 0,
+ borderWidth: 0
+ });
+
+ $.support.minHeight = div.offsetHeight === 100;
+ $.support.selectstart = "onselectstart" in div;
+
+ // set display to none to avoid a layout bug in IE
+ // http://dev.jquery.com/ticket/4014
+ body.removeChild( div ).style.display = "none";
+});
+
+
+
+
+
+// deprecated
+$.extend( $.ui, {
+ // $.ui.plugin is deprecated. Use the proxy pattern instead.
+ plugin: {
+ add: function( module, option, set ) {
+ var proto = $.ui[ module ].prototype;
+ for ( var i in set ) {
+ proto.plugins[ i ] = proto.plugins[ i ] || [];
+ proto.plugins[ i ].push( [ option, set[ i ] ] );
+ }
+ },
+ call: function( instance, name, args ) {
+ var set = instance.plugins[ name ];
+ if ( !set || !instance.element[ 0 ].parentNode ) {
+ return;
+ }
+
+ for ( var i = 0; i < set.length; i++ ) {
+ if ( instance.options[ set[ i ][ 0 ] ] ) {
+ set[ i ][ 1 ].apply( instance.element, args );
+ }
+ }
+ }
+ },
+
+ // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
+ contains: function( a, b ) {
+ return document.compareDocumentPosition ?
+ a.compareDocumentPosition( b ) & 16 :
+ a !== b && a.contains( b );
+ },
+
+ // only used by resizable
+ hasScroll: function( el, a ) {
+
+ //If overflow is hidden, the element might have extra content, but the user wants to hide it
+ if ( $( el ).css( "overflow" ) === "hidden") {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if ( el[ scroll ] > 0 ) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[ scroll ] = 1;
+ has = ( el[ scroll ] > 0 );
+ el[ scroll ] = 0;
+ return has;
+ },
+
+ // these are odd functions, fix the API or move into individual plugins
+ isOverAxis: function( x, reference, size ) {
+ //Determines when x coordinate is over "b" element axis
+ return ( x > reference ) && ( x < ( reference + size ) );
+ },
+ isOver: function( y, x, top, left, height, width ) {
+ //Determines when x, y coordinates is over "b" element
+ return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
+ }
+});
+
+})( jQuery );
diff --git a/jquery/jquery.ui-1.8.18.mouse.js b/jquery/jquery.ui-1.8.18.mouse.js
new file mode 100644
index 0000000..669d563
--- /dev/null
+++ b/jquery/jquery.ui-1.8.18.mouse.js
@@ -0,0 +1,162 @@
+/*!
+ * 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( $, undefined ) {
+
+var mouseHandled = false;
+$( document ).mouseup( function( e ) {
+ mouseHandled = false;
+});
+
+$.widget("ui.mouse", {
+ options: {
+ cancel: ':input,option',
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var self = this;
+
+ this.element
+ .bind('mousedown.'+this.widgetName, function(event) {
+ return self._mouseDown(event);
+ })
+ .bind('click.'+this.widgetName, function(event) {
+ if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
+ $.removeData(event.target, self.widgetName + '.preventClickEvent');
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.unbind('.'+this.widgetName);
+ },
+
+ _mouseDown: function(event) {
+ // don't let more than one widget handle mouseStart
+ if( mouseHandled ) { return };
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var self = this,
+ btnIsLeft = (event.which == 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function() {
+ self.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
+ $.removeData(event.target, this.widgetName + '.preventClickEvent');
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function(event) {
+ return self._mouseMove(event);
+ };
+ this._mouseUpDelegate = function(event) {
+ return self._mouseUp(event);
+ };
+ $(document)
+ .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+ .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function(event) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
+ return this._mouseUp(event);
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function(event) {
+ $(document)
+ .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+ .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target == this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + '.preventClickEvent', true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ return false;
+ },
+
+ _mouseDistanceMet: function(event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function(event) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function(event) {},
+ _mouseDrag: function(event) {},
+ _mouseStop: function(event) {},
+ _mouseCapture: function(event) { return true; }
+});
+
+})(jQuery);
diff --git a/jquery/jquery.ui-1.8.18.resizable.js b/jquery/jquery.ui-1.8.18.resizable.js
new file mode 100644
index 0000000..b441435
--- /dev/null
+++ b/jquery/jquery.ui-1.8.18.resizable.js
@@ -0,0 +1,808 @@
+/*
+ * jQuery UI Resizable 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/Resizables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.resizable", $.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 self = this, o = this.options;
+ this.element.addClass("ui-resizable");
+
+ $.extend(this, {
+ _aspectRatio: !!(o.aspectRatio),
+ aspectRatio: o.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
+ });
+
+ //Wrap the element if it cannot hold child nodes
+ if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+
+ //Create a wrapper element and set the wrapper to the new current internal element
+ this.element.wrap(
+ $('<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')
+ })
+ );
+
+ //Overwrite the original this.element
+ this.element = this.element.parent().data(
+ "resizable", this.element.data('resizable')
+ );
+
+ this.elementIsWrapper = true;
+
+ //Move margins to the wrapper
+ 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});
+
+ //Prevent Safari textarea resize
+ this.originalResizeStyle = this.originalElement.css('resize');
+ this.originalElement.css('resize', 'none');
+
+ //Push the actual element to our proportionallyResize internal array
+ this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
+
+ // avoid IE jump (hard set the margin)
+ this.originalElement.css({ margin: this.originalElement.css('margin') });
+
+ // fix handlers offset
+ this._proportionallyResize();
+
+ }
+
+ this.handles = o.handles || (!$('.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 n = this.handles.split(","); this.handles = {};
+
+ for(var i = 0; i < n.length; i++) {
+
+ var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
+ var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
+
+ // increase zIndex of sw, se, ne, nw axis
+ //TODO : this modifies original option
+ if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
+
+ //TODO : What's going on here?
+ if ('se' == handle) {
+ axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
+ };
+
+ //Insert into internal handles object and append to element
+ this.handles[handle] = '.ui-resizable-'+handle;
+ this.element.append(axis);
+ }
+
+ }
+
+ this._renderAxis = function(target) {
+
+ target = target || this.element;
+
+ for(var i in this.handles) {
+
+ if(this.handles[i].constructor == String)
+ this.handles[i] = $(this.handles[i], this.element).show();
+
+ //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+ if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+
+ var axis = $(this.handles[i], this.element), padWrapper = 0;
+
+ //Checking the correct pad and border
+ padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+ //The padding type i have to apply...
+ var padPos = [ 'padding',
+ /ne|nw|n/.test(i) ? 'Top' :
+ /se|sw|s/.test(i) ? 'Bottom' :
+ /^e$/.test(i) ? 'Right' : 'Left' ].join("");
+
+ target.css(padPos, padWrapper);
+
+ this._proportionallyResize();
+
+ }
+
+ //TODO: What's that good for? There's not anything to be executed left
+ if(!$(this.handles[i]).length)
+ continue;
+
+ }
+ };
+
+ //TODO: make renderAxis a prototype function
+ this._renderAxis(this.element);
+
+ this._handles = $('.ui-resizable-handle', this.element)
+ .disableSelection();
+
+ //Matching axis name
+ this._handles.mouseover(function() {
+ if (!self.resizing) {
+ if (this.className)
+ var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+ //Axis, default = se
+ self.axis = axis && axis[1] ? axis[1] : 'se';
+ }
+ });
+
+ //If we want to auto hide the elements
+ if (o.autoHide) {
+ this._handles.hide();
+ $(this.element)
+ .addClass("ui-resizable-autohide")
+ .hover(function() {
+ if (o.disabled) return;
+ $(this).removeClass("ui-resizable-autohide");
+ self._handles.show();
+ },
+ function(){
+ if (o.disabled) return;
+ if (!self.resizing) {
+ $(this).addClass("ui-resizable-autohide");
+ self._handles.hide();
+ }
+ });
+ }
+
+ //Initialize the mouse interaction
+ this._mouseInit();
+
+ },
+
+ destroy: function() {
+
+ this._mouseDestroy();
+
+ var _destroy = function(exp) {
+ $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+ .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
+ };
+
+ //TODO: Unwrap at same DOM position
+ if (this.elementIsWrapper) {
+ _destroy(this.element);
+ var wrapper = this.element;
+ wrapper.after(
+ this.originalElement.css({
+ position: wrapper.css('position'),
+ width: wrapper.outerWidth(),
+ height: wrapper.outerHeight(),
+ top: wrapper.css('top'),
+ left: wrapper.css('left')
+ })
+ ).remove();
+ }
+
+ this.originalElement.css('resize', this.originalResizeStyle);
+ _destroy(this.originalElement);
+
+ return this;
+ },
+
+ _mouseCapture: function(event) {
+ var handle = false;
+ for (var i in this.handles) {
+ if ($(this.handles[i])[0] == event.target) {
+ handle = true;
+ }
+ }
+
+ return !this.options.disabled && handle;
+ },
+
+ _mouseStart: function(event) {
+
+ var o = this.options, iniPos = this.element.position(), el = this.element;
+
+ this.resizing = true;
+ this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
+
+ // bugfix for http://dev.jquery.com/ticket/1749
+ if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
+ el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
+ }
+
+ this._renderProxy();
+
+ var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
+
+ if (o.containment) {
+ curleft += $(o.containment).scrollLeft() || 0;
+ curtop += $(o.containment).scrollTop() || 0;
+ }
+
+ //Store needed variables
+ this.offset = this.helper.offset();
+ this.position = { left: curleft, top: curtop };
+ this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+ this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+ this.originalPosition = { left: curleft, top: curtop };
+ this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+ this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+ //Aspect Ratio
+ this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+
+ var cursor = $('.ui-resizable-' + this.axis).css('cursor');
+ $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
+
+ el.addClass("ui-resizable-resizing");
+ this._propagate("start", event);
+ return true;
+ },
+
+ _mouseDrag: function(event) {
+
+ //Increase performance, avoid regex
+ var el = this.helper, o = this.options, props = {},
+ self = this, smp = this.originalMousePosition, a = this.axis;
+
+ var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
+ var trigger = this._change[a];
+ if (!trigger) return false;
+
+ // Calculate the attrs that will be change
+ var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
+
+ // Put this in the mouseDrag handler since the user can start pressing shift while resizing
+ this._updateVirtualBoundaries(event.shiftKey);
+ if (this._aspectRatio || event.shiftKey)
+ data = this._updateRatio(data, event);
+
+ data = this._respectSize(data, event);
+
+ // plugins callbacks need to be called first
+ this._propagate("resize", event);
+
+ el.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(data);
+
+ // calling the user callback at the end
+ this._trigger('resize', event, this.ui());
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ this.resizing = false;
+ var o = this.options, self = this;
+
+ if(this._helper) {
+ var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+ soffsetw = ista ? 0 : self.sizeDiff.width;
+
+ var s = { width: (self.helper.width() - soffsetw), height: (self.helper.height() - soffseth) },
+ left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+ top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+
+ if (!o.animate)
+ this.element.css($.extend(s, { top: top, left: left }));
+
+ self.helper.height(self.size.height);
+ self.helper.width(self.size.width);
+
+ if (this._helper && !o.animate) this._proportionallyResize();
+ }
+
+ $('body').css('cursor', 'auto');
+
+ this.element.removeClass("ui-resizable-resizing");
+
+ this._propagate("stop", event);
+
+ if (this._helper) this.helper.remove();
+ return false;
+
+ },
+
+ _updateVirtualBoundaries: function(forceAspectRatio) {
+ var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
+
+ b = {
+ minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+ maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+ minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+ maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+ };
+
+ if(this._aspectRatio || forceAspectRatio) {
+ // We want to create an enclosing box whose aspect ration is the requested one
+ // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+ pMinWidth = b.minHeight * this.aspectRatio;
+ pMinHeight = b.minWidth / this.aspectRatio;
+ pMaxWidth = b.maxHeight * this.aspectRatio;
+ pMaxHeight = b.maxWidth / this.aspectRatio;
+
+ if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
+ if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
+ if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
+ if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
+ }
+ this._vBoundaries = b;
+ },
+
+ _updateCache: function(data) {
+ var o = this.options;
+ this.offset = this.helper.offset();
+ if (isNumber(data.left)) this.position.left = data.left;
+ if (isNumber(data.top)) this.position.top = data.top;
+ if (isNumber(data.height)) this.size.height = data.height;
+ if (isNumber(data.width)) this.size.width = data.width;
+ },
+
+ _updateRatio: function(data, event) {
+
+ var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
+
+ if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
+ else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
+
+ if (a == 'sw') {
+ data.left = cpos.left + (csize.width - data.width);
+ data.top = null;
+ }
+ if (a == 'nw') {
+ data.top = cpos.top + (csize.height - data.height);
+ data.left = cpos.left + (csize.width - data.width);
+ }
+
+ return data;
+ },
+
+ _respectSize: function(data, event) {
+
+ var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
+ ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+ isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
+
+ if (isminw) data.width = o.minWidth;
+ if (isminh) data.height = o.minHeight;
+ if (ismaxw) data.width = o.maxWidth;
+ if (ismaxh) data.height = o.maxHeight;
+
+ var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
+ var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+
+ if (isminw && cw) data.left = dw - o.minWidth;
+ if (ismaxw && cw) data.left = dw - o.maxWidth;
+ if (isminh && ch) data.top = dh - o.minHeight;
+ if (ismaxh && ch) data.top = dh - o.maxHeight;
+
+ // fixing jump error on top/left - bug #2330
+ var isNotwh = !data.width && !data.height;
+ if (isNotwh && !data.left && data.top) data.top = null;
+ else if (isNotwh && !data.top && data.left) data.left = null;
+
+ return data;
+ },
+
+ _proportionallyResize: function() {
+
+ var o = this.options;
+ if (!this._proportionallyResizeElements.length) return;
+ var element = this.helper || this.element;
+
+ for (var i=0; i < this._proportionallyResizeElements.length; i++) {
+
+ var prel = this._proportionallyResizeElements[i];
+
+ if (!this.borderDif) {
+ var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
+ p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
+
+ this.borderDif = $.map(b, function(v, i) {
+ var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
+ return border + padding;
+ });
+ }
+
+ if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
+ continue;
+
+ prel.css({
+ height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+ width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+ });
+
+ };
+
+ },
+
+ _renderProxy: function() {
+
+ var el = this.element, o = this.options;
+ this.elementOffset = el.offset();
+
+ if(this._helper) {
+
+ this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
+
+ // fix ie6 offset TODO: This seems broken
+ var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
+ pxyoffset = ( ie6 ? 2 : -1 );
+
+ this.helper.addClass(this._helper).css({
+ width: this.element.outerWidth() + pxyoffset,
+ height: this.element.outerHeight() + pxyoffset,
+ position: 'absolute',
+ left: this.elementOffset.left - ie6offset +'px',
+ top: this.elementOffset.top - ie6offset +'px',
+ zIndex: ++o.zIndex //TODO: Don't modify option
+ });
+
+ this.helper
+ .appendTo("body")
+ .disableSelection();
+
+ } else {
+ this.helper = this.element;
+ }
+
+ },
+
+ _change: {
+ e: function(event, dx, dy) {
+ return { width: this.originalSize.width + dx };
+ },
+ w: function(event, dx, dy) {
+ var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+ return { left: sp.left + dx, width: cs.width - dx };
+ },
+ n: function(event, dx, dy) {
+ var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+ return { top: sp.top + dy, height: cs.height - dy };
+ },
+ s: function(event, dx, dy) {
+ return { height: this.originalSize.height + dy };
+ },
+ se: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+ },
+ sw: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+ },
+ ne: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+ },
+ nw: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+ }
+ },
+
+ _propagate: function(n, event) {
+ $.ui.plugin.call(this, n, [event, this.ui()]);
+ (n != "resize" && this._trigger(n, event, 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
+ };
+ }
+
+});
+
+$.extend($.ui.resizable, {
+ version: "1.8.18"
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+ start: function (event, ui) {
+ var self = $(this).data("resizable"), o = self.options;
+
+ var _store = function (exp) {
+ $(exp).each(function() {
+ var el = $(this);
+ el.data("resizable-alsoresize", {
+ width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+ left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10)
+ });
+ });
+ };
+
+ if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
+ if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+ else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+ }else{
+ _store(o.alsoResize);
+ }
+ },
+
+ resize: function (event, ui) {
+ var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
+
+ var delta = {
+ height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
+ top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
+ },
+
+ _alsoResize = function (exp, c) {
+ $(exp).each(function() {
+ var el = $(this), start = $(this).data("resizable-alsoresize"), style = {},
+ css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
+
+ $.each(css, function (i, prop) {
+ var sum = (start[prop]||0) + (delta[prop]||0);
+ if (sum && sum >= 0)
+ style[prop] = sum || null;
+ });
+
+ el.css(style);
+ });
+ };
+
+ if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+ $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+ }else{
+ _alsoResize(o.alsoResize);
+ }
+ },
+
+ stop: function (event, ui) {
+ $(this).removeData("resizable-alsoresize");
+ }
+});
+
+$.ui.plugin.add("resizable", "animate", {
+
+ stop: function(event, ui) {
+ var self = $(this).data("resizable"), o = self.options;
+
+ var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+ soffsetw = ista ? 0 : self.sizeDiff.width;
+
+ var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
+ left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+ top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+
+ self.element.animate(
+ $.extend(style, top && left ? { top: top, left: left } : {}), {
+ duration: o.animateDuration,
+ easing: o.animateEasing,
+ step: function() {
+
+ var data = {
+ width: parseInt(self.element.css('width'), 10),
+ height: parseInt(self.element.css('height'), 10),
+ top: parseInt(self.element.css('top'), 10),
+ left: parseInt(self.element.css('left'), 10)
+ };
+
+ if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
+
+ // propagating resize, and updating values for each animation step
+ self._updateCache(data);
+ self._propagate("resize", event);
+
+ }
+ }
+ );
+ }
+
+});
+
+$.ui.plugin.add("resizable", "containment", {
+
+ start: function(event, ui) {
+ var self = $(this).data("resizable"), o = self.options, el = self.element;
+ var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+ if (!ce) return;
+
+ self.containerElement = $(ce);
+
+ if (/document/.test(oc) || oc == document) {
+ self.containerOffset = { left: 0, top: 0 };
+ self.containerPosition = { left: 0, top: 0 };
+
+ self.parentData = {
+ element: $(document), left: 0, top: 0,
+ width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+ };
+ }
+
+ // i'm a node, so compute top, left, right, bottom
+ else {
+ var element = $(ce), p = [];
+ $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+
+ self.containerOffset = element.offset();
+ self.containerPosition = element.position();
+ self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+
+ var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width,
+ width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+
+ self.parentData = {
+ element: ce, left: co.left, top: co.top, width: width, height: height
+ };
+ }
+ },
+
+ resize: function(event, ui) {
+ var self = $(this).data("resizable"), o = self.options,
+ ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
+ pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
+
+ if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
+
+ if (cp.left < (self._helper ? co.left : 0)) {
+ self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
+ if (pRatio) self.size.height = self.size.width / o.aspectRatio;
+ self.position.left = o.helper ? co.left : 0;
+ }
+
+ if (cp.top < (self._helper ? co.top : 0)) {
+ self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
+ if (pRatio) self.size.width = self.size.height * o.aspectRatio;
+ self.position.top = self._helper ? co.top : 0;
+ }
+
+ self.offset.left = self.parentData.left+self.position.left;
+ self.offset.top = self.parentData.top+self.position.top;
+
+ var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
+ hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
+
+ var isParent = self.containerElement.get(0) == self.element.parent().get(0),
+ isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
+
+ if(isParent && isOffsetRelative) woset -= self.parentData.left;
+
+ if (woset + self.size.width >= self.parentData.width) {
+ self.size.width = self.parentData.width - woset;
+ if (pRatio) self.size.height = self.size.width / self.aspectRatio;
+ }
+
+ if (hoset + self.size.height >= self.parentData.height) {
+ self.size.height = self.parentData.height - hoset;
+ if (pRatio) self.size.width = self.size.height * self.aspectRatio;
+ }
+ },
+
+ stop: function(event, ui){
+ var self = $(this).data("resizable"), o = self.options, cp = self.position,
+ co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
+
+ var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
+
+ if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
+ $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+
+ if (self._helper && !o.animate && (/static/).test(ce.css('position')))
+ $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+
+ }
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+ start: function(event, ui) {
+
+ var self = $(this).data("resizable"), o = self.options, cs = self.size;
+
+ self.ghost = self.originalElement.clone();
+ self.ghost
+ .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+ .addClass('ui-resizable-ghost')
+ .addClass(typeof o.ghost == 'string' ? o.ghost : '');
+
+ self.ghost.appendTo(self.helper);
+
+ },
+
+ resize: function(event, ui){
+ var self = $(this).data("resizable"), o = self.options;
+ if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
+ },
+
+ stop: function(event, ui){
+ var self = $(this).data("resizable"), o = self.options;
+ if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
+ }
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+ resize: function(event, ui) {
+ var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
+ o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
+ var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
+
+ if (/^(se|s|e)$/.test(a)) {
+ self.size.width = os.width + ox;
+ self.size.height = os.height + oy;
+ }
+ else if (/^(ne)$/.test(a)) {
+ self.size.width = os.width + ox;
+ self.size.height = os.height + oy;
+ self.position.top = op.top - oy;
+ }
+ else if (/^(sw)$/.test(a)) {
+ self.size.width = os.width + ox;
+ self.size.height = os.height + oy;
+ self.position.left = op.left - ox;
+ }
+ else {
+ self.size.width = os.width + ox;
+ self.size.height = os.height + oy;
+ self.position.top = op.top - oy;
+ self.position.left = op.left - ox;
+ }
+ }
+
+});
+
+var num = function(v) {
+ return parseInt(v, 10) || 0;
+};
+
+var isNumber = function(value) {
+ return !isNaN(parseInt(value, 10));
+};
+
+})(jQuery);
diff --git a/jquery/jquery.ui-1.8.18.widget.js b/jquery/jquery.ui-1.8.18.widget.js
new file mode 100644
index 0000000..0c6f53f
--- /dev/null
+++ b/jquery/jquery.ui-1.8.18.widget.js
@@ -0,0 +1,272 @@
+/*!
+ * 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( $, undefined ) {
+
+// jQuery 1.4+
+if ( $.cleanData ) {
+ var _cleanData = $.cleanData;
+ $.cleanData = function( elems ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ try {
+ $( elem ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ }
+ _cleanData( elems );
+ };
+} else {
+ var _remove = $.fn.remove;
+ $.fn.remove = function( selector, keepData ) {
+ return this.each(function() {
+ if ( !keepData ) {
+ if ( !selector || $.filter( selector, [ this ] ).length ) {
+ $( "*", this ).add( [ this ] ).each(function() {
+ try {
+ $( this ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ });
+ }
+ }
+ return _remove.call( $(this), selector, keepData );
+ });
+ };
+}
+
+$.widget = function( name, base, prototype ) {
+ var namespace = name.split( "." )[ 0 ],
+ fullName;
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName ] = function( elem ) {
+ return !!$.data( elem, name );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+
+ var basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+// $.each( basePrototype, function( key, val ) {
+// if ( $.isPlainObject(val) ) {
+// basePrototype[ key ] = $.extend( {}, val );
+// }
+// });
+ basePrototype.options = $.extend( true, {}, basePrototype.options );
+ $[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+ namespace: namespace,
+ widgetName: name,
+ widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+ widgetBaseClass: fullName
+ }, prototype );
+
+ $.widget.bridge( name, $[ namespace ][ name ] );
+};
+
+$.widget.bridge = function( name, object ) {
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = Array.prototype.slice.call( arguments, 1 ),
+ returnValue = this;
+
+ // allow multiple hashes to be passed on init
+ options = !isMethodCall && args.length ?
+ $.extend.apply( null, [ true, options ].concat(args) ) :
+ options;
+
+ // prevent calls to internal methods
+ if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+ return returnValue;
+ }
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var instance = $.data( this, name ),
+ methodValue = instance && $.isFunction( instance[options] ) ?
+ instance[ options ].apply( instance, args ) :
+ instance;
+ // TODO: add this back in 1.9 and use $.error() (see #5972)
+// if ( !instance ) {
+// throw "cannot call methods on " + name + " prior to initialization; " +
+// "attempted to call method '" + options + "'";
+// }
+// if ( !$.isFunction( instance[options] ) ) {
+// throw "no such method '" + options + "' for " + name + " widget instance";
+// }
+// var methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue;
+ return false;
+ }
+ });
+ } else {
+ this.each(function() {
+ var instance = $.data( this, name );
+ if ( instance ) {
+ instance.option( options || {} )._init();
+ } else {
+ $.data( this, name, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+};
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ options: {
+ disabled: false
+ },
+ _createWidget: function( options, element ) {
+ // $.widget.bridge stores the plugin instance, but we do it anyway
+ // so that it's stored even before the _create function runs
+ $.data( element, this.widgetName, this );
+ this.element = $( element );
+ this.options = $.extend( true, {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ var self = this;
+ this.element.bind( "remove." + this.widgetName, function() {
+ self.destroy();
+ });
+
+ this._create();
+ this._trigger( "create" );
+ this._init();
+ },
+ _getCreateOptions: function() {
+ return $.metadata && $.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( key, value ) {
+ var options = key;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.extend( {}, this.options );
+ }
+
+ if (typeof key === "string" ) {
+ if ( value === undefined ) {
+ return this.options[ key ];
+ }
+ options = {};
+ options[ key ] = value;
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var self = this;
+ $.each( options, function( key, value ) {
+ self._setOption( key, value );
+ });
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ [ value ? "addClass" : "removeClass"](
+ this.widgetBaseClass + "-disabled" + " " +
+ "ui-state-disabled" )
+ .attr( "aria-disabled", value );
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOption( "disabled", false );
+ },
+ disable: function() {
+ return this._setOption( "disabled", true );
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+
+ return !( $.isFunction(callback) &&
+ callback.call( this.element[0], event, data ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+})( jQuery );
diff --git a/jquery/split_jquery.pl b/jquery/split_jquery.pl
new file mode 100644
index 0000000..3edc763
--- /dev/null
+++ b/jquery/split_jquery.pl
@@ -0,0 +1,25 @@
+# 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 e194967..aa8de17 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -44,7 +44,6 @@ SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
-SYMBOL_CACHE_SIZE = 0
LOOKUP_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
@@ -120,7 +119,7 @@ USE_MDFILE_AS_MAINPAGE =
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
-INLINE_SOURCES = YES
+INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
@@ -187,9 +186,9 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES
-SERVER_BASED_SEARCH = NO
-EXTERNAL_SEARCH = NO
-SEARCHENGINE_URL =
+SERVER_BASED_SEARCH = YES
+EXTERNAL_SEARCH = YES
+SEARCHENGINE_URL = http://macbookpro/~dimitri/doxysearch.cgi
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
diff --git a/src/cite.cpp b/src/cite.cpp
index d4860c8..576c4bf 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -138,7 +138,7 @@ void CiteDict::generatePage() const
f.setName(citeListFile);
if (!f.open(IO_WriteOnly))
{
- err("error: could not open file %s for writing\n",citeListFile.data());
+ err("could not open file %s for writing\n",citeListFile.data());
}
FTextStream t(&f);
t << "<!-- BEGIN CITATIONS -->" << endl;
@@ -161,7 +161,7 @@ void CiteDict::generatePage() const
QCString bib2xhtml = bib2xhtml_pl;
if (!f.open(IO_WriteOnly))
{
- err("error: could not open file %s for writing\n",bib2xhtmlFile.data());
+ err("could not open file %s for writing\n",bib2xhtmlFile.data());
}
f.writeBlock(bib2xhtml, bib2xhtml.length());
f.close();
@@ -172,7 +172,7 @@ void CiteDict::generatePage() const
f.setName(doxygenBstFile);
if (!f.open(IO_WriteOnly))
{
- err("error: could not open file %s for writing\n",doxygenBstFile.data());
+ err("could not open file %s for writing\n",doxygenBstFile.data());
}
f.writeBlock(bstData, bstData.length());
f.close();
@@ -206,7 +206,7 @@ void CiteDict::generatePage() const
}
else if (!fi.exists())
{
- err("Error: bib file %s not found!\n",bibFile.data());
+ err("bib file %s not found!\n",bibFile.data());
}
bibdata = citeDataList.next();
}
@@ -226,7 +226,7 @@ void CiteDict::generatePage() const
f.setName(citeListFile);
if (!f.open(IO_ReadOnly))
{
- err("error: could not open file %s/citelist.doc for reading\n",outputDir.data());
+ err("could not open file %s/citelist.doc for reading\n",outputDir.data());
}
bool insideBib=FALSE;
@@ -293,7 +293,7 @@ void CiteDict::generatePage() const
}
else
{
- err("Error: bib file %s not found!\n",bibFile.data());
+ err("bib file %s not found!\n",bibFile.data());
}
bibdata = citeDataList.next();
}
diff --git a/src/clangparser.cpp b/src/clangparser.cpp
index 08ad05d..d35f5da 100644
--- a/src/clangparser.cpp
+++ b/src/clangparser.cpp
@@ -8,7 +8,7 @@
#include <stdlib.h>
#include "message.h"
#include "sortdict.h"
-#include "outputlist.h"
+#include "outputgen.h"
#include "filedef.h"
#include "memberdef.h"
#include "doxygen.h"
@@ -17,6 +17,13 @@
#include "growbuf.h"
#include "membername.h"
#include "filename.h"
+
+static Definition *g_currentDefinition=0;
+static MemberDef *g_currentMemberDef=0;
+static uint g_currentLine=0;
+static bool g_searchForBody=FALSE;
+static bool g_insideBody=FALSE;
+static uint g_bracketCount=0;
#endif
ClangParser *ClangParser::instance()
@@ -33,6 +40,9 @@ ClangParser *ClangParser::s_instance = 0;
class ClangParser::Private
{
public:
+ Private() : tu(0), tokens(0), numTokens(0), cursors(0),
+ ufs(0), sources(0), numFiles(0), fileMapping(257)
+ { fileMapping.setAutoDelete(TRUE); }
int getCurrentTokenLine();
CXIndex index;
CXTranslationUnit tu;
@@ -42,8 +52,10 @@ class ClangParser::Private
CXCursor *cursors;
uint curLine;
uint curToken;
- CXUnsavedFile uf;
- QCString source;
+ CXUnsavedFile *ufs;
+ QCString *sources;
+ uint numFiles;
+ QDict<uint> fileMapping;
};
static QCString detab(const QCString &s)
@@ -122,20 +134,46 @@ static QStrList getClangOptions()
return options;
}
-#if 0
+/** Callback function called for each include in a translation unit */
static void inclusionVisitor(CXFile includedFile,
- CXSourceLocation* inclusionStack,
- unsigned includeLen,
+ CXSourceLocation* /*inclusionStack*/,
+ unsigned /*includeLen*/,
CXClientData clientData)
{
- const char *fileName = (const char *)clientData;
+ QDict<void> *fileDict = (QDict<void> *)clientData;
CXString incFileName = clang_getFileName(includedFile);
- printf("--- file %s includes %s\n",fileName,clang_getCString(incFileName));
+ //printf("--- file %s includes %s\n",fileName,clang_getCString(incFileName));
+ fileDict->insert(clang_getCString(incFileName),(void*)0x8);
clang_disposeString(incFileName);
}
-#endif
-void ClangParser::start(const char *fileName)
+/** filter the \a files and only keep those that are found as include files
+ * within the current translation unit.
+ * @param[in,out] files The list of files to filter.
+ */
+void ClangParser::determineInputFilesInSameTu(QStrList &files)
+{
+ // put the files in this translation unit in a dictionary
+ QDict<void> incFound(257);
+ clang_getInclusions(p->tu,
+ inclusionVisitor,
+ (CXClientData)&incFound
+ );
+ // create a new filtered file list
+ QStrList resultIncludes;
+ QStrListIterator it2(files);
+ for (it2.toFirst();it2.current();++it2)
+ {
+ if (incFound.find(it2.current()))
+ {
+ resultIncludes.append(it2.current());
+ }
+ }
+ // replace the original list
+ files=resultIncludes;
+}
+
+void ClangParser::start(const char *fileName,QStrList &filesInTranslationUnit)
{
static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
static QStrList &includePath = Config_getList("INCLUDE_PATH");
@@ -146,7 +184,7 @@ void ClangParser::start(const char *fileName)
p->index = clang_createIndex(0, 0);
p->curLine = 1;
p->curToken = 0;
- char *argv[4+Doxygen::inputPaths.count()+includePath.count()+clangOptions.count()];
+ char **argv = (char**)malloc(sizeof(char*)*(4+Doxygen::inputPaths.count()+includePath.count()+clangOptions.count()));
QDictIterator<void> di(Doxygen::inputPaths);
int argc=0;
// add include paths for input files
@@ -171,44 +209,70 @@ void ClangParser::start(const char *fileName)
argv[argc++]=strdup("-ferror-limit=0");
argv[argc++]=strdup("-x"); // force C++
argv[argc++]=strdup("c++");
- // the file name
+
+ // provide the input and and its dependencies as unsaved files so we can
+ // pass the filtered versions
argv[argc++]=strdup(fileName);
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
- p->source = detab(fileToString(fileName,filterSourceFiles,TRUE));
//printf("source %s ----------\n%s\n-------------\n\n",
// fileName,p->source.data());
- p->uf.Filename = strdup(fileName);
- p->uf.Contents = p->source.data();
- p->uf.Length = p->source.length();
+ uint numUnsavedFiles = filesInTranslationUnit.count()+1;
+ p->numFiles = numUnsavedFiles;
+ p->sources = new QCString[numUnsavedFiles];
+ p->ufs = new CXUnsavedFile[numUnsavedFiles];
+ p->sources[0] = detab(fileToString(fileName,filterSourceFiles,TRUE));
+ p->ufs[0].Filename = strdup(fileName);
+ p->ufs[0].Contents = p->sources[0].data();
+ p->ufs[0].Length = p->sources[0].length();
+ QStrListIterator it(filesInTranslationUnit);
+ uint i=1;
+ for (it.toFirst();it.current() && i<numUnsavedFiles;++it,i++)
+ {
+ p->fileMapping.insert(it.current(),new uint(i));
+ p->sources[i] = detab(fileToString(it.current(),filterSourceFiles,TRUE));
+ p->ufs[i].Filename = strdup(it.current());
+ p->ufs[i].Contents = p->sources[i].data();
+ p->ufs[i].Length = p->sources[i].length();
+ }
+
+ // let libclang do the actual parsing
p->tu = clang_parseTranslationUnit(p->index, 0,
- argv, argc, &p->uf, 1,
+ argv, argc, p->ufs, numUnsavedFiles,
CXTranslationUnit_DetailedPreprocessingRecord);
+ // free arguments
for (int i=0;i<argc;++i)
{
free(argv[i]);
}
+ free(argv);
if (p->tu)
{
- //clang_getInclusions(p->tu,
- // inclusionVisitor,
- // (CXClientData)fileName
- // );
+ // filter out any includes not found by the clang parser
+ determineInputFilesInSameTu(filesInTranslationUnit);
+
+ // show any warnings that the compiler produced
for (uint i=0, n=clang_getNumDiagnostics(p->tu); i!=n; ++i)
{
CXDiagnostic diag = clang_getDiagnostic(p->tu, i);
CXString string = clang_formatDiagnostic(diag,
clang_defaultDiagnosticDisplayOptions());
- err("%s\n",clang_getCString(string));
+ err("%s [clang]\n",clang_getCString(string));
clang_disposeString(string);
+ clang_disposeDiagnostic(diag);
}
+
+ // create a source range for the given file
QFileInfo fi(fileName);
CXFile f = clang_getFile(p->tu, fileName);
CXSourceLocation fileBegin = clang_getLocationForOffset(p->tu, f, 0);
- CXSourceLocation fileEnd = clang_getLocationForOffset(p->tu, f, p->uf.Length);
+ CXSourceLocation fileEnd = clang_getLocationForOffset(p->tu, f, p->ufs[0].Length);
CXSourceRange fileRange = clang_getRange(fileBegin, fileEnd);
+ // produce a token stream for the file
clang_tokenize(p->tu,fileRange,&p->tokens,&p->numTokens);
+
+ // produce cursors for each token in the stream
p->cursors=new CXCursor[p->numTokens];
clang_annotateTokens(p->tu,p->tokens,p->numTokens,p->cursors);
}
@@ -217,7 +281,42 @@ void ClangParser::start(const char *fileName)
p->tokens = 0;
p->numTokens = 0;
p->cursors = 0;
- err("Failed to parse translation unit %s\n",fileName);
+ err("clang: Failed to parse translation unit %s\n",fileName);
+ }
+}
+
+void ClangParser::switchToFile(const char *fileName)
+{
+ if (p->tu)
+ {
+ delete[] p->cursors;
+ clang_disposeTokens(p->tu,p->tokens,p->numTokens);
+ p->tokens = 0;
+ p->numTokens = 0;
+ p->cursors = 0;
+
+ QFileInfo fi(fileName);
+ CXFile f = clang_getFile(p->tu, fileName);
+ uint *pIndex=p->fileMapping.find(fileName);
+ if (pIndex && *pIndex<p->numFiles)
+ {
+ uint i=*pIndex;
+ //printf("switchToFile %s: len=%ld\n",fileName,p->ufs[i].Length);
+ CXSourceLocation fileBegin = clang_getLocationForOffset(p->tu, f, 0);
+ CXSourceLocation fileEnd = clang_getLocationForOffset(p->tu, f, p->ufs[i].Length);
+ CXSourceRange fileRange = clang_getRange(fileBegin, fileEnd);
+
+ clang_tokenize(p->tu,fileRange,&p->tokens,&p->numTokens);
+ p->cursors=new CXCursor[p->numTokens];
+ clang_annotateTokens(p->tu,p->tokens,p->numTokens,p->cursors);
+
+ p->curLine = 1;
+ p->curToken = 0;
+ }
+ else
+ {
+ err("clang: Failed to find input file %s in mapping\n",fileName);
+ }
}
}
@@ -225,19 +324,28 @@ void ClangParser::finish()
{
static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
if (!clangAssistedParsing) return;
- //printf("ClangParser::finish()\n");
- delete[] p->cursors;
- clang_disposeTokens(p->tu,p->tokens,p->numTokens);
- clang_disposeTranslationUnit(p->tu);
- clang_disposeIndex(p->index);
- free((void *)p->uf.Filename);
- p->source.resize(0);
- p->uf.Contents = 0;
- p->uf.Filename = 0;
- p->uf.Contents = 0;
- p->tokens = 0;
- p->numTokens = 0;
- p->cursors = 0;
+ if (p->tu)
+ {
+ //printf("ClangParser::finish()\n");
+ delete[] p->cursors;
+ clang_disposeTokens(p->tu,p->tokens,p->numTokens);
+ clang_disposeTranslationUnit(p->tu);
+ clang_disposeIndex(p->index);
+ p->fileMapping.clear();
+ p->tokens = 0;
+ p->numTokens = 0;
+ p->cursors = 0;
+ }
+ for (uint i=0;i<p->numFiles;i++)
+ {
+ free((void *)p->ufs[i].Filename);
+ }
+ delete[] p->ufs;
+ delete[] p->sources;
+ p->ufs = 0;
+ p->sources = 0;
+ p->numFiles = 0;
+ p->tu = 0;
}
int ClangParser::Private::getCurrentTokenLine()
@@ -251,9 +359,6 @@ int ClangParser::Private::getCurrentTokenLine()
return l;
}
-/** Looks for \a symbol which should be found at \a line and returns
- * a Clang unique identifier for the symbol.
- */
QCString ClangParser::lookup(uint line,const char *symbol)
{
//printf("ClangParser::lookup(%d,%s)\n",line,symbol);
@@ -405,14 +510,23 @@ static QCString keywordToType(const char *keyword)
return "keyword";
}
-static void writeLineNumber(OutputList &ol,FileDef *fd,uint line)
+static void writeLineNumber(CodeOutputInterface &ol,FileDef *fd,uint line)
{
Definition *d = fd ? fd->getSourceDefinition(line) : 0;
if (d && d->isLinkable())
{
+ g_currentDefinition=d;
+ g_currentLine=line;
MemberDef *md = fd->getSourceMember(line);
if (md && md->isLinkable()) // link to member
{
+ if (g_currentMemberDef!=md) // new member, start search for body
+ {
+ g_searchForBody=TRUE;
+ g_insideBody=FALSE;
+ g_bracketCount=0;
+ }
+ g_currentMemberDef=md;
ol.writeLineNumber(md->getReference(),
md->getOutputFileBase(),
md->anchor(),
@@ -420,6 +534,7 @@ static void writeLineNumber(OutputList &ol,FileDef *fd,uint line)
}
else // link to compound
{
+ g_currentMemberDef=0;
ol.writeLineNumber(d->getReference(),
d->getOutputFileBase(),
d->anchor(),
@@ -430,9 +545,19 @@ static void writeLineNumber(OutputList &ol,FileDef *fd,uint line)
{
ol.writeLineNumber(0,0,0,line);
}
+
+ // set search page target
+ if (Doxygen::searchIndex)
+ {
+ QCString lineAnchor;
+ lineAnchor.sprintf("l%05d",line);
+ ol.setCurrentDoc(fd,lineAnchor,TRUE);
+ }
+
+ //printf("writeLineNumber(%d) g_searchForBody=%d\n",line,g_searchForBody);
}
-static void codifyLines(OutputList &ol,FileDef *fd,const char *text,
+static void codifyLines(CodeOutputInterface &ol,FileDef *fd,const char *text,
uint &line,uint &column,const char *fontClass=0)
{
if (fontClass) ol.startFontClass(fontClass);
@@ -468,7 +593,7 @@ static void codifyLines(OutputList &ol,FileDef *fd,const char *text,
if (fontClass) ol.endFontClass();
}
-static void writeMultiLineCodeLink(OutputList &ol,
+static void writeMultiLineCodeLink(CodeOutputInterface &ol,
FileDef *fd,uint &line,uint &column,
const char *ref,const char *file,
const char *anchor,const char *text,
@@ -500,23 +625,26 @@ static void writeMultiLineCodeLink(OutputList &ol,
}
}
-void ClangParser::linkInclude(OutputList &ol,FileDef *fd,
+void ClangParser::linkInclude(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,const char *text)
{
QCString incName = text;
incName = incName.mid(1,incName.length()-2); // strip ".." or <..>
FileDef *ifd=0;
- FileName *fn = Doxygen::inputNameDict->find(incName);
- if (fn)
+ if (!incName.isEmpty())
{
- bool found=false;
- FileNameIterator fni(*fn);
- // for each include name
- for (fni.toFirst();!found && (ifd=fni.current());++fni)
+ FileName *fn = Doxygen::inputNameDict->find(incName);
+ if (fn)
{
- // see if this source file actually includes the file
- found = fd->isIncluded(ifd->absFilePath());
- //printf(" include file %s found=%d\n",ifd->absFilePath().data(),found);
+ bool found=false;
+ FileNameIterator fni(*fn);
+ // for each include name
+ for (fni.toFirst();!found && (ifd=fni.current());++fni)
+ {
+ // see if this source file actually includes the file
+ found = fd->isIncluded(ifd->absFilePath());
+ //printf(" include file %s found=%d\n",ifd->absFilePath().data(),found);
+ }
}
}
if (ifd)
@@ -529,7 +657,7 @@ void ClangParser::linkInclude(OutputList &ol,FileDef *fd,
}
}
-void ClangParser::linkMacro(OutputList &ol,FileDef *fd,
+void ClangParser::linkMacro(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,const char *text)
{
MemberName *mn=Doxygen::functionNameSDict->find(text);
@@ -556,7 +684,8 @@ void ClangParser::linkMacro(OutputList &ol,FileDef *fd,
codifyLines(ol,fd,text,line,column);
}
-void ClangParser::linkIdentifier(OutputList &ol,FileDef *fd,
+
+void ClangParser::linkIdentifier(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,const char *text,int tokenIndex)
{
CXCursor c = p->cursors[tokenIndex];
@@ -587,6 +716,12 @@ void ClangParser::linkIdentifier(OutputList &ol,FileDef *fd,
//}
if (d && d->isLinkable())
{
+ if (g_insideBody &&
+ g_currentMemberDef && d->definitionType()==Definition::TypeMember &&
+ (g_currentMemberDef!=d || g_currentLine<line)) // avoid self-reference
+ {
+ addDocCrossReference(g_currentMemberDef,(MemberDef*)d);
+ }
writeMultiLineCodeLink(ol,
fd,line,column,
d->getReference(),
@@ -603,8 +738,46 @@ void ClangParser::linkIdentifier(OutputList &ol,FileDef *fd,
clang_disposeString(usr);
}
-void ClangParser::writeSources(OutputList &ol,FileDef *fd)
+static void detectFunctionBody(const char *s)
+{
+ //printf("punct=%s g_searchForBody=%d g_insideBody=%d g_bracketCount=%d\n",
+ // s,g_searchForBody,g_insideBody,g_bracketCount);
+
+ if (g_searchForBody && (qstrcmp(s,":")==0 || qstrcmp(s,"{")==0)) // start of 'body' (: is for constructor)
+ {
+ g_searchForBody=FALSE;
+ g_insideBody=TRUE;
+ }
+ else if (g_searchForBody && qstrcmp(s,";")==0) // declaration only
+ {
+ g_searchForBody=FALSE;
+ g_insideBody=FALSE;
+ }
+ if (g_insideBody && qstrcmp(s,"{")==0) // increase scoping level
+ {
+ g_bracketCount++;
+ }
+ if (g_insideBody && qstrcmp(s,"}")==0) // decrease scoping level
+ {
+ g_bracketCount--;
+ if (g_bracketCount<=0) // got outside of function body
+ {
+ g_insideBody=FALSE;
+ g_bracketCount=0;
+ }
+ }
+}
+
+void ClangParser::writeSources(CodeOutputInterface &ol,FileDef *fd)
{
+ // (re)set global parser state
+ g_currentDefinition=0;
+ g_currentMemberDef=0;
+ g_currentLine=0;
+ g_searchForBody=FALSE;
+ g_insideBody=FALSE;
+ g_bracketCount=0;
+
unsigned int line=1,column=1;
QCString lineNumber,lineAnchor;
ol.startCodeLine(TRUE);
@@ -659,9 +832,12 @@ void ClangParser::writeSources(OutputList &ol,FileDef *fd)
case CXToken_Comment:
codifyLines(ol,fd,s,line,column,"comment");
break;
- //case CXToken_Punctuation: return "CXToken_Punctation";
- //case CXToken_Identifier: return "CXToken_Indentifier";
- default:
+ default: // CXToken_Punctuation or CXToken_Identifier
+ if (tokenKind==CXToken_Punctuation)
+ {
+ detectFunctionBody(s);
+ //printf("punct %s: %d\n",s,cursorKind);
+ }
switch (cursorKind)
{
case CXCursor_PreprocessingDirective:
@@ -677,9 +853,20 @@ void ClangParser::writeSources(OutputList &ol,FileDef *fd)
linkMacro(ol,fd,line,column,s);
break;
default:
- if (tokenKind==CXToken_Identifier)
+ if (tokenKind==CXToken_Identifier ||
+ (tokenKind==CXToken_Punctuation && // for operators
+ (cursorKind==CXCursor_DeclRefExpr ||
+ cursorKind==CXCursor_MemberRefExpr ||
+ cursorKind==CXCursor_CallExpr ||
+ cursorKind==CXCursor_ObjCMessageExpr)
+ )
+ )
{
linkIdentifier(ol,fd,line,column,s,i);
+ if (Doxygen::searchIndex)
+ {
+ ol.addWord(s,FALSE);
+ }
}
else
{
@@ -706,7 +893,11 @@ ClangParser::~ClangParser()
//--------------------------------------------------------------------------
#else // use stubbed functionality in case libclang support is disabled.
-void ClangParser::start(const char *)
+void ClangParser::start(const char *,QStrList &)
+{
+}
+
+void ClangParser::switchToFile(const char *)
{
}
@@ -719,7 +910,7 @@ QCString ClangParser::lookup(uint,const char *)
return "";
}
-void ClangParser::writeSources(OutputList &,FileDef *)
+void ClangParser::writeSources(CodeOutputInterface &,FileDef *)
{
}
diff --git a/src/clangparser.h b/src/clangparser.h
index fc56b3a..214ea50 100644
--- a/src/clangparser.h
+++ b/src/clangparser.h
@@ -2,29 +2,61 @@
#define CLANGPARSER_H
#include <qcstring.h>
+#include <qstrlist.h>
-class OutputList;
+class CodeOutputInterface;
class FileDef;
+/** @brief Wrapper for to let libclang assisted parsing. */
class ClangParser
{
public:
+ /** Returns the one and only instance of the class */
static ClangParser *instance();
- void start(const char *fileName);
+
+ /** Start parsing a file.
+ * @param[in] fileName The name of the file to parse.
+ * @param[in,out] filesInTanslationUnit Other files that are
+ * part of the input and included by the file.
+ * The function will return a subset of the files,
+ * only including the onces that were actually found
+ * during parsing.
+ */
+ void start(const char *fileName,QStrList &filesInTranslationUnit);
+
+ /** Switches to another file within the translation unit started
+ * with start().
+ * @param[in] The name of the file to switch to.
+ */
+ void switchToFile(const char *fileName);
+
+ /** Finishes parsing a translation unit. Free any resources that
+ * were needed for parsing.
+ */
void finish();
+
+ /** Looks for \a symbol which should be found at \a line and
+ * returns a clang unique reference to the symbol.
+ */
QCString lookup(uint line,const char *symbol);
- void writeSources(OutputList &ol,FileDef *fd);
+
+ /** writes the syntax highlighted source code for a file
+ * @param[out] ol The output generator list to write to.
+ * @param[in] fd The file to write sources for.
+ */
+ void writeSources(CodeOutputInterface &ol,FileDef *fd);
private:
- void linkIdentifier(OutputList &ol,FileDef *fd,
+ void linkIdentifier(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,
const char *text,int tokenIndex);
- void linkMacro(OutputList &ol,FileDef *fd,
+ void linkMacro(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,
const char *text);
- void linkInclude(OutputList &ol,FileDef *fd,
+ void linkInclude(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,
const char *text);
+ void determineInputFilesInSameTu(QStrList &filesInTranslationUnit);
class Private;
Private *p;
ClangParser();
diff --git a/src/classdef.cpp b/src/classdef.cpp
index dd32918..1429fdd 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -921,8 +921,8 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),this,0,
+ briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
ol.pushGeneratorState();
ol.disable(OutputGenerator::RTF);
ol.writeString(" \n");
@@ -956,7 +956,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
// repeat brief description
if (!briefDescription().isEmpty() && repeatBrief)
{
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
}
if (!briefDescription().isEmpty() && repeatBrief &&
!documentation().isEmpty())
@@ -969,7 +969,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
// write documentation
if (!documentation().isEmpty())
{
- ol.parseDoc(docFile(),docLine(),this,0,documentation(),TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),this,0,documentation(),TRUE,FALSE);
}
// write type constraints
writeTypeConstraints(ol,this,m_impl->typeConstraints);
@@ -1249,7 +1249,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
}
else
{
- err("error: invalid marker %d in inherits list!\n",entryIndex);
+ err("invalid marker %d in inherits list!\n",entryIndex);
}
index=newIndex+matchLen;
}
@@ -1558,6 +1558,11 @@ void ClassDef::writeTagFileMarker()
{
Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
}
+ QCString idStr = id();
+ if (!idStr.isEmpty())
+ {
+ Doxygen::tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+ }
if (m_impl->tempArgs)
{
ArgumentListIterator ali(*m_impl->tempArgs);
@@ -1812,14 +1817,19 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
// add the brief description if available
if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startMemberDescription(anchor());
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
- if (isLinkableInProject())
+ DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
+ briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+ if (rootNode && !rootNode->isEmpty())
{
- writeMoreLink(ol,anchor());
+ ol.startMemberDescription(anchor());
+ ol.writeDoc(rootNode,this,0);
+ if (isLinkableInProject())
+ {
+ writeMoreLink(ol,anchor());
+ }
+ ol.endMemberDescription();
}
- ol.endMemberDescription();
+ delete rootNode;
}
ol.endMemberDeclaration(anchor(),0);
}
@@ -2744,11 +2754,11 @@ void ClassDef::mergeMembers()
if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE))
// member is in the same or a base class
{
- LockingPtr<ArgumentList> srcAl = srcMd->argumentList();
- LockingPtr<ArgumentList> dstAl = dstMd->argumentList();
+ ArgumentList *srcAl = srcMd->argumentList();
+ ArgumentList *dstAl = dstMd->argumentList();
found=matchArguments2(
- srcMd->getOuterScope(),srcMd->getFileDef(),srcAl.pointer(),
- dstMd->getOuterScope(),dstMd->getFileDef(),dstAl.pointer(),
+ srcMd->getOuterScope(),srcMd->getFileDef(),srcAl,
+ dstMd->getOuterScope(),dstMd->getFileDef(),dstAl,
TRUE
);
//printf(" Yes, matching (%s<->%s): %d\n",
@@ -3772,8 +3782,8 @@ void ClassDef::addListReferences()
if (!isLinkableInProject()) return;
//printf("ClassDef(%s)::addListReferences()\n",name().data());
{
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- addRefItem(xrefItems.pointer(),
+ QList<ListItemInfo> *xrefItems = xrefListItems();
+ addRefItem(xrefItems,
qualifiedName(),
lang==SrcLangExt_Fortran ? theTranslator->trType(TRUE,TRUE)
: theTranslator->trClass(TRUE,TRUE),
diff --git a/src/code.l b/src/code.l
index 2026f0c..01636fa 100644
--- a/src/code.l
+++ b/src/code.l
@@ -417,7 +417,7 @@ static void popScope()
}
else
{
- //err("Error: Too many end of scopes found!\n");
+ //err("Too many end of scopes found!\n");
}
//printf("popScope() result: `%s'\n",g_classScope.data());
}
@@ -656,7 +656,7 @@ static void addUsingDirective(const char *name)
static void setParameterList(MemberDef *md)
{
g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
- LockingPtr<ArgumentList> al = md->argumentList();
+ ArgumentList *al = md->argumentList();
if (al==0) return;
Argument *a = al->first();
while (a)
@@ -831,58 +831,6 @@ static void updateCallContextForSmartPointer()
}
}
-static QCString fileLocation()
-{
- QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
- result+=":"+QCString().setNum(g_yyLineNr);
- result+=":"+QCString().setNum(g_yyColNr);
- return result;
-}
-
-static void addDocCrossReference(MemberDef *src,MemberDef *dst)
-{
- static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
- static bool referencesRelation = Config_getBool("REFERENCES_RELATION");
- static bool callerGraph = Config_getBool("CALLER_GRAPH");
- static bool callGraph = Config_getBool("CALL_GRAPH");
-
- //printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
- if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
- if ((referencedByRelation || callerGraph || dst->hasCallerGraph()) &&
- (src->isFunction() || src->isSlot())
- )
- {
- dst->addSourceReferencedBy(src,fileLocation());
- MemberDef *mdDef = dst->memberDefinition();
- if (mdDef)
- {
- mdDef->addSourceReferencedBy(src,fileLocation());
- }
- MemberDef *mdDecl = dst->memberDeclaration();
- if (mdDecl)
- {
- mdDecl->addSourceReferencedBy(src,fileLocation());
- }
- }
- if ((referencesRelation || callGraph || src->hasCallGraph()) &&
- (src->isFunction() || src->isSlot())
- )
- {
- src->addSourceReferences(dst,fileLocation());
- MemberDef *mdDef = src->memberDefinition();
- if (mdDef)
- {
- mdDef->addSourceReferences(dst,fileLocation());
- }
- MemberDef *mdDecl = src->memberDeclaration();
- if (mdDecl)
- {
- mdDecl->addSourceReferences(dst,fileLocation());
- }
- }
-
-}
-
static bool getLinkInScope(const QCString &c, // scope
const QCString &m, // member
const char *memberText, // exact text
@@ -1805,7 +1753,7 @@ TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?{SEP}{BN}*)*)((~{BN}*)?{ID})
SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+
KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property")
-KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC})
+KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|"alignas"|"alignof"|{KEYWORD_OBJC})
FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string"|"nullptr")
CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
@@ -1834,6 +1782,8 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
%x MemberCall2
%x SkipInits
%x ClassName
+%x AlignAs
+%x AlignAsEnd
%x PackageName
%x ClassVar
%x CppCliTypeModifierFollowup
@@ -2146,9 +2096,42 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
<ClassName>{ID}("::"{ID})* {
g_curClassName=yytext;
addType();
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( ClassVar );
+ if (g_curClassName=="alignas")
+ {
+ startFontClass("keyword");
+ g_code->codify(yytext);
+ endFontClass();
+ BEGIN( AlignAs );
+ }
+ else
+ {
+ generateClassOrGlobalLink(*g_code,yytext);
+ BEGIN( ClassVar );
+ }
}
+<AlignAs>"(" {
+ g_bracketCount=1;
+ g_code->codify(yytext);
+ BEGIN( AlignAsEnd );
+ }
+<AlignAs>\n { g_yyLineNr++;
+ codifyLines(yytext);
+ }
+<AlignAs>. { g_code->codify(yytext); }
+<AlignAsEnd>"(" { g_code->codify(yytext);
+ g_bracketCount++;
+ }
+<AlignAsEnd>")" {
+ g_code->codify(yytext);
+ if (--g_bracketCount<=0)
+ {
+ BEGIN(ClassName);
+ }
+ }
+<AlignAsEnd>\n { g_yyLineNr++;
+ codifyLines(yytext);
+ }
+<AlignAsEnd>. { g_code->codify(yytext); }
<ClassName>{ID}("\\"{ID})* { // PHP namespace
g_curClassName=substitute(yytext,"\\","::");
g_scopeStack.push(CLASSBLOCK);
diff --git a/src/commentscan.l b/src/commentscan.l
index 4ac850e..1644a6d 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -220,6 +220,7 @@ static DocCmdMap docCmdMap[] =
{ "copydoc", &handleCopyDoc, TRUE },
{ "copybrief", 0, FALSE },
{ "copydetails", 0, TRUE },
+ { "copyright", 0, TRUE },
{ "date", 0, TRUE },
{ "dotfile", 0, TRUE },
{ "htmlinclude", 0, FALSE },
@@ -294,7 +295,7 @@ class DocCmdMapper
{
if (m_map.find(p->cmdName)!=0)
{
- printf("Error: DocCmdMapper: command %s already added\n",p->cmdName);
+ err("DocCmdMapper: command %s already added\n",p->cmdName);
exit(1);
}
Cmd *cmd = new Cmd;
@@ -869,7 +870,7 @@ ATTR ({B}+[^>\n]*)?
DOCNL "\n"|"\\_linebr"
LC "\\"{B}*"\n"
NW [^a-z_A-Z0-9]
-FILESCHAR [a-z_A-Z0-9\x80-\xFF\\:\\\/\-\+]
+FILESCHAR [a-z_A-Z0-9\x80-\xFF\\:\\\/\-\+@&#]
FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+]
FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"")
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
@@ -1022,7 +1023,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>{B}*{CMD}"endinternal"{B}* {
if (!inInternalDocs)
warn(yyFileName,yyLineNr,
- "warning: found \\endinternal without matching \\internal"
+ "found \\endinternal without matching \\internal"
);
inInternalDocs = FALSE;
}
@@ -1284,7 +1285,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<EnumDocArg1>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: missing argument after \\enum."
+ "missing argument after \\enum."
);
addOutput('\n');
if (*yytext=='\n') yyLineNr++;
@@ -1305,7 +1306,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<NameSpaceDocArg1>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: missing argument after "
+ "missing argument after "
"\\namespace."
);
addOutput('\n');
@@ -1327,7 +1328,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<PackageDocArg1>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: missing argument after "
+ "missing argument after "
"\\package."
);
addOutput('\n');
@@ -1358,7 +1359,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<ClassDocArg1,CategoryDocArg1>{DOCNL} {
warn(yyFileName,yyLineNr,
- "warning: missing argument after "
+ "missing argument after "
"\\%s.",YY_START==ClassDocArg1?"class":"category"
);
addOutput('\n');
@@ -1419,7 +1420,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<GroupDocArg1>{DOCNL} { // missing argument!
warn(yyFileName,yyLineNr,
- "warning: missing group name after %s",
+ "missing group name after %s",
current->groupDocCmd()
);
addOutput('\n');
@@ -1440,7 +1441,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
) // defgroup requires second argument
{
warn(yyFileName,yyLineNr,
- "warning: missing title after "
+ "missing title after "
"\\defgroup %s", current->name.data()
);
}
@@ -1460,7 +1461,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<PageDocArg1>{DOCNL} {
warn(yyFileName,yyLineNr,
- "warning: missing argument after "
+ "missing argument after "
"\\page."
);
if (*yytext=='\n') yyLineNr++;
@@ -1506,7 +1507,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<XRefItemParam1>{DOCNL} { // missing arguments
warn(yyFileName,yyLineNr,
- "warning: Missing first argument of \\xrefitem"
+ "Missing first argument of \\xrefitem"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -1526,7 +1527,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<XRefItemParam2>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: Missing second argument of \\xrefitem"
+ "Missing second argument of \\xrefitem"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -1547,7 +1548,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<XRefItemParam3>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: Missing third argument of \\xrefitem"
+ "Missing third argument of \\xrefitem"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -1574,7 +1575,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<RelatesParam1>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: Missing argument of \\relates or \\memberof command"
+ "Missing argument of \\relates or \\memberof command"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -1609,7 +1610,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<SectionLabel>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: \\section command has no label"
+ "\\section command has no label"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -1617,7 +1618,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<SectionLabel>. { // invalid character for section label
warn(yyFileName,yyLineNr,
- "warning: Invalid or missing section label"
+ "Invalid or missing section label"
);
BEGIN(Comment);
}
@@ -1663,7 +1664,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<SubpageLabel>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: \\subpage command has no label"
+ "\\subpage command has no label"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -1693,7 +1694,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<AnchorLabel>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: \\anchor command has no label"
+ "\\anchor command has no label"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -1701,7 +1702,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<AnchorLabel>. { // invalid character for anchor label
warn(yyFileName,yyLineNr,
- "warning: Invalid or missing anchor label"
+ "Invalid or missing anchor label"
);
BEGIN(Comment);
}
@@ -1733,7 +1734,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
if (g_commentCount<0 && blockName!="verbatim")
{
warn(yyFileName,yyLineNr,
- "warning: found */ without matching /* while inside a \\%s block! Perhaps a missing \\end%s?\n",blockName.data(),blockName.data());
+ "found */ without matching /* while inside a \\%s block! Perhaps a missing \\end%s?\n",blockName.data(),blockName.data());
}
}
<FormatBlock>. {
@@ -1741,7 +1742,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<FormatBlock><<EOF>> {
warn(yyFileName,yyLineNr,
- "warning: reached end of comment while inside a @%s block; check for missing @end%s tag!",
+ "reached end of comment while inside a @%s block; check for missing @end%s tag!",
blockName.data(),blockName.data()
);
yyterminate();
@@ -1771,7 +1772,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<GuardExpr>\n {
warn(yyFileName,yyLineNr,
- "warning: invalid expression '%s' for guard",g_guardExpr.data());
+ "invalid expression '%s' for guard",g_guardExpr.data());
unput(*yytext);
BEGIN(GuardParam);
}
@@ -1822,7 +1823,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
if (guards.isEmpty())
{
warn(yyFileName,yyLineNr,
- "warning: found @endif without matching start command");
+ "found @endif without matching start command");
}
else
{
@@ -1834,7 +1835,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
if (guards.isEmpty())
{
warn(yyFileName,yyLineNr,
- "warning: found @else without matching start command");
+ "found @else without matching start command");
}
else
{
@@ -1851,7 +1852,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
if (guards.isEmpty())
{
warn(yyFileName,yyLineNr,
- "warning: found @elseif without matching start command");
+ "found @elseif without matching start command");
}
else
{
@@ -1958,7 +1959,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
if (!inGroupParamFound)
{
warn(yyFileName,yyLineNr,
- "warning: Missing group name for \\ingroup command"
+ "Missing group name for \\ingroup command"
);
}
if (*yytext=='\n') yyLineNr++;
@@ -2039,7 +2040,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<InheritParam>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: \\inherit command has no argument"
+ "\\inherit command has no argument"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -2047,7 +2048,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<InheritParam>. { // invalid character for anchor label
warn(yyFileName,yyLineNr,
- "warning: Invalid or missing name for \\inherit command"
+ "Invalid or missing name for \\inherit command"
);
BEGIN(Comment);
}
@@ -2062,7 +2063,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<ExtendsParam>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: \\extends or \\implements command has no argument"
+ "\\extends or \\implements command has no argument"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -2098,7 +2099,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<CiteLabel>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
- "warning: \\cite command has no label"
+ "\\cite command has no label"
);
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
@@ -2106,7 +2107,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<CiteLabel>. { // invalid character for cite label
warn(yyFileName,yyLineNr,
- "warning: Invalid or missing cite label"
+ "Invalid or missing cite label"
);
BEGIN(Comment);
}
@@ -2425,7 +2426,7 @@ static bool handleSubpage(const QCString &s)
)
{
warn(yyFileName,yyLineNr,
- "warning: found \\subpage command in a comment block that is not marked as a page!");
+ "found \\subpage command in a comment block that is not marked as a page!");
}
if (g_spaceBeforeCmd)
{
@@ -2491,7 +2492,7 @@ static bool handleElseIf(const QCString &)
if (guards.isEmpty())
{
warn(yyFileName,yyLineNr,
- "warning: found \\else without matching start command");
+ "found \\else without matching start command");
}
else
{
@@ -2506,7 +2507,7 @@ static bool handleElse(const QCString &)
if (guards.isEmpty())
{
warn(yyFileName,yyLineNr,
- "warning: found \\else without matching start command");
+ "found \\else without matching start command");
}
else
{
@@ -2520,7 +2521,7 @@ static bool handleEndIf(const QCString &)
if (guards.isEmpty())
{
warn(yyFileName,yyLineNr,
- "warning: found \\endif without matching start command");
+ "found \\endif without matching start command");
}
else
{
@@ -2683,7 +2684,7 @@ static void checkFormula()
{
if (YY_START==ReadFormulaShort || YY_START==ReadFormulaLong)
{
- warn(yyFileName,yyLineNr,"warning: End of comment block while inside formula.");
+ warn(yyFileName,yyLineNr,"End of comment block while inside formula.");
}
}
@@ -2819,14 +2820,14 @@ void groupLeaveFile(const char *fileName,int line)
{
//if (g_memberGroupId!=DOX_NOGROUP)
//{
- // warn(fileName,line,"warning: end of file while inside a member group\n");
+ // warn(fileName,line,"end of file while inside a member group\n");
//}
g_memberGroupId=DOX_NOGROUP;
g_memberGroupRelates.resize(0);
g_memberGroupDocs.resize(0);
if (!g_autoGroupStack.isEmpty())
{
- warn(fileName,line,"warning: end of file while inside a group\n");
+ warn(fileName,line,"end of file while inside a group\n");
}
}
@@ -2834,7 +2835,7 @@ void groupEnterCompound(const char *fileName,int line,const char *name)
{
if (g_memberGroupId!=DOX_NOGROUP)
{
- warn(fileName,line,"warning: try to put compound %s inside a member group\n",name);
+ warn(fileName,line,"try to put compound %s inside a member group\n",name);
}
g_memberGroupId=DOX_NOGROUP;
g_memberGroupRelates.resize(0);
@@ -2857,7 +2858,7 @@ void groupLeaveCompound(const char *,int,const char * /*name*/)
//printf("groupLeaveCompound(%s)\n",name);
//if (g_memberGroupId!=DOX_NOGROUP)
//{
- // warn(fileName,line,"warning: end of compound %s while inside a member group\n",name);
+ // warn(fileName,line,"end of compound %s while inside a member group\n",name);
//}
g_memberGroupId=DOX_NOGROUP;
g_memberGroupRelates.resize(0);
diff --git a/src/condparser.cpp b/src/condparser.cpp
index 1964eda..c99a232 100644
--- a/src/condparser.cpp
+++ b/src/condparser.cpp
@@ -75,7 +75,7 @@ bool CondParser::parse(const char *fileName,int lineNr,const char *expr)
}
if (m_err)
{
- warn(fileName,lineNr,"Warning: problem evaluating expression '%s': %s",
+ warn(fileName,lineNr,"problem evaluating expression '%s': %s",
expr,m_err.data());
}
//printf("expr='%s' answer=%d\n",expr,answer);
diff --git a/src/config.h b/src/config.h
index 47bef4c..7d37516 100644
--- a/src/config.h
+++ b/src/config.h
@@ -42,7 +42,8 @@ class ConfigOption
O_String, //<! A single item
O_Int, //<! An integer value
O_Bool, //<! A boolean value
- O_Obsolete //<! An obsolete option
+ O_Obsolete, //<! An obsolete option
+ O_Disabled //<! Disabled compile time option
};
enum
{
@@ -355,7 +356,19 @@ class ConfigBool : public ConfigOption
class ConfigObsolete : public ConfigOption
{
public:
- ConfigObsolete(const char *name,OptionType t) : ConfigOption(t)
+ ConfigObsolete(const char *name) : ConfigOption(O_Obsolete)
+ { m_name = name; }
+ void writeTemplate(FTextStream &,bool,bool) {}
+ void substEnvVars() {}
+ void writeXML(FTextStream&);
+};
+
+/** Section marker for compile time optional options
+ */
+class ConfigDisabled : public ConfigOption
+{
+ public:
+ ConfigDisabled(const char *name) : ConfigOption(O_Disabled)
{ m_name = name; }
void writeTemplate(FTextStream &,bool,bool) {}
void substEnvVars() {}
@@ -537,11 +550,19 @@ class Config
/*! Adds an option that has become obsolete. */
ConfigOption *addObsolete(const char *name)
{
- ConfigObsolete *option = new ConfigObsolete(name,ConfigOption::O_Obsolete);
+ ConfigObsolete *option = new ConfigObsolete(name);
m_dict->insert(name,option);
m_obsolete->append(option);
return option;
}
+ /*! Adds an option that has been disabled at compile time. */
+ ConfigOption *addDisabled(const char *name)
+ {
+ ConfigDisabled *option = new ConfigDisabled(name);
+ m_dict->insert(name,option);
+ m_disabled->append(option);
+ return option;
+ }
/*! @} */
/*! Writes a template configuration to stream \a t. If \a shortIndex
@@ -614,6 +635,7 @@ class Config
{
m_options = new QList<ConfigOption>;
m_obsolete = new QList<ConfigOption>;
+ m_disabled = new QList<ConfigOption>;
m_dict = new QDict<ConfigOption>(257);
m_options->setAutoDelete(TRUE);
m_obsolete->setAutoDelete(TRUE);
@@ -624,12 +646,14 @@ class Config
{
delete m_options;
delete m_obsolete;
+ delete m_disabled;
delete m_dict;
}
private:
QList<ConfigOption> *m_options;
QList<ConfigOption> *m_obsolete;
+ QList<ConfigOption> *m_disabled;
QDict<ConfigOption> *m_dict;
static Config *m_instance;
QCString m_userComment;
diff --git a/src/config.l b/src/config.l
index 0c2bcbf..8a4188e 100644
--- a/src/config.l
+++ b/src/config.l
@@ -180,7 +180,7 @@ void ConfigInt::convertStrToVal()
int val = m_valueString.toInt(&ok);
if (!ok || val<m_minVal || val>m_maxVal)
{
- config_warn("warning: argument `%s' for option %s is not a valid number in the range [%d..%d]!\n"
+ config_warn("Warning: argument `%s' for option %s is not a valid number in the range [%d..%d]!\n"
"Using the default: %d!\n",m_valueString.data(),m_name.data(),m_minVal,m_maxVal,m_value);
}
m_value=val;
@@ -202,7 +202,7 @@ void ConfigBool::convertStrToVal()
}
else
{
- config_warn("warning: argument `%s' for option %s is not a valid boolean value\n"
+ config_warn("Warning: argument `%s' for option %s is not a valid boolean value\n"
"Using the default: %s!\n",m_valueString.data(),m_name.data(),m_value?"YES":"NO");
}
}
@@ -382,6 +382,12 @@ void ConfigObsolete::writeXML(FTextStream &t)
"id='" << convertToXML(name()) << "'/>" << endl;
}
+void ConfigDisabled::writeXML(FTextStream &t)
+{
+ t << " <option type='disabled' "
+ "id='" << convertToXML(name()) << "'/>" << endl;
+}
+
/* -----------------------------------------------------------------
*
@@ -464,7 +470,7 @@ static QCString configStringRecode(
void *cd = portable_iconv_open(outputEncoding,inputEncoding);
if (cd==(void *)(-1))
{
- fprintf(stderr,"error: unsupported character conversion: '%s'->'%s'\n",
+ fprintf(stderr,"Error: unsupported character conversion: '%s'->'%s'\n",
inputEncoding.data(),outputEncoding.data());
exit(1);
}
@@ -481,7 +487,7 @@ static QCString configStringRecode(
}
else
{
- fprintf(stderr,"error: failed to translate characters from %s to %s: %s\n",
+ fprintf(stderr,"Error: failed to translate characters from %s to %s: %s\n",
inputEncoding.data(),outputEncoding.data(),strerror(errno));
exit(1);
}
@@ -502,7 +508,7 @@ static FILE *tryPath(const char *path,const char *fileName)
if (fi.exists() && fi.isFile())
{
FILE *f=portable_fopen(absName,"r");
- if (!f) config_err("error: could not open file %s for reading\n",absName.data());
+ if (!f) config_err("Error: could not open file %s for reading\n",absName.data());
return f;
}
return 0;
@@ -513,8 +519,14 @@ static void substEnvVarsInString(QCString &s);
static FILE *findFile(const char *fileName)
{
- if(portable_isAbsolutePath(fileName))
+ if (fileName==0)
+ {
+ return 0;
+ }
+ if (portable_isAbsolutePath(fileName))
+ {
return tryPath(NULL, fileName);
+ }
substEnvVarsInStrList(includePathList);
char *s=includePathList.first();
while (s) // try each of the include paths
@@ -530,7 +542,7 @@ static FILE *findFile(const char *fileName)
static void readIncludeFile(const char *incName)
{
if (includeDepth==MAX_INCLUDE_DEPTH) {
- config_err("error: maximum include depth (%d) reached, %s is not included. Aborting...\n",
+ config_err("Error: maximum include depth (%d) reached, %s is not included. Aborting...\n",
MAX_INCLUDE_DEPTH,incName);
exit(1);
}
@@ -539,7 +551,7 @@ static void readIncludeFile(const char *incName)
substEnvVarsInString(inc);
inc = inc.stripWhiteSpace();
uint incLen = inc.length();
- if (inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes
+ if (incLen>0 && inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes
{
inc=inc.mid(1,incLen-2);
}
@@ -570,7 +582,7 @@ static void readIncludeFile(const char *incName)
}
else
{
- config_err("error: @INCLUDE = %s: not found!\n",inc.data());
+ config_err("Error: @INCLUDE = %s: not found!\n",inc.data());
exit(1);
}
}
@@ -601,7 +613,7 @@ static void readIncludeFile(const char *incName)
ConfigOption *option = config->get(cmd);
if (option==0) // oops not known
{
- config_err("warning: ignoring unsupported tag `%s' at line %d, file %s\n",
+ config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
yytext,yyLineNr,yyFileName.data());
BEGIN(SkipInvalid);
}
@@ -642,11 +654,17 @@ static void readIncludeFile(const char *incName)
BEGIN(GetString);
break;
case ConfigOption::O_Obsolete:
- config_err("warning: Tag `%s' at line %d of file %s has become obsolete.\n"
+ config_err("Warning: Tag `%s' at line %d of file %s has become obsolete.\n"
"To avoid this warning please remove this line from your configuration "
"file or upgrade it using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data());
BEGIN(SkipInvalid);
break;
+ case ConfigOption::O_Disabled:
+ config_err("Warning: Tag `%s' at line %d of file %s belongs to an option that was not enabled at compile time.\n"
+ "To avoid this warning please remove this line from your configuration "
+ "file, upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),yyLineNr,yyFileName.data());
+ BEGIN(SkipInvalid);
+ break;
}
}
}
@@ -655,7 +673,7 @@ static void readIncludeFile(const char *incName)
ConfigOption *option = config->get(cmd);
if (option==0) // oops not known
{
- config_err("warning: ignoring unsupported tag `%s' at line %d, file %s\n",
+ config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
yytext,yyLineNr,yyFileName.data());
BEGIN(SkipInvalid);
}
@@ -677,16 +695,22 @@ static void readIncludeFile(const char *incName)
case ConfigOption::O_String:
case ConfigOption::O_Int:
case ConfigOption::O_Bool:
- config_err("warning: operator += not supported for `%s'. Ignoring line at line %d, file %s\n",
+ config_err("Warning: operator += not supported for `%s'. Ignoring line at line %d, file %s\n",
yytext,yyLineNr,yyFileName.data());
BEGIN(SkipInvalid);
break;
case ConfigOption::O_Obsolete:
- config_err("warning: Tag `%s' at line %d of file %s has become obsolete.\n"
+ config_err("Warning: Tag `%s' at line %d of file %s has become obsolete.\n"
"To avoid this warning please update your configuration "
"file using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data());
BEGIN(SkipInvalid);
break;
+ case ConfigOption::O_Disabled:
+ config_err("Warning: Tag `%s' at line %d of file %s belongs to an option that was not enabled at compile time.\n"
+ "To avoid this warning please remove this line from your configuration "
+ "file, upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),yyLineNr,yyFileName.data());
+ BEGIN(SkipInvalid);
+ break;
}
}
}
@@ -719,7 +743,7 @@ static void readIncludeFile(const char *incName)
}
}
-<Start>[a-z_A-Z0-9]+ { config_err("warning: ignoring unknown tag `%s' at line %d, file %s\n",yytext,yyLineNr,yyFileName.data()); }
+<Start>[a-z_A-Z0-9]+ { config_err("Warning: ignoring unknown tag `%s' at line %d, file %s\n",yytext,yyLineNr,yyFileName.data()); }
<GetString,GetBool,SkipInvalid>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
yyLineNr++;
@@ -760,7 +784,7 @@ static void readIncludeFile(const char *incName)
}
if (*yytext=='\n')
{
- config_err("warning: Missing end quote (\") on line %d, file %s\n",yyLineNr,yyFileName.data());
+ config_err("Warning: Missing end quote (\") on line %d, file %s\n",yyLineNr,yyFileName.data());
yyLineNr++;
}
BEGIN(lastState);
@@ -779,7 +803,7 @@ static void readIncludeFile(const char *incName)
else
{
*b=FALSE;
- config_warn("warning: Invalid value `%s' for "
+ config_warn("Warning: Invalid value `%s' for "
"boolean tag in line %d, file %s; use YES or NO\n",
bs.data(),yyLineNr,yyFileName.data());
}
@@ -1060,15 +1084,15 @@ void Config::check()
{
if (warnFormat.find("$file")==-1)
{
- config_err("warning: warning format does not contain a $file tag!\n");
+ config_err("Warning: warning format does not contain a $file tag!\n");
}
if (warnFormat.find("$line")==-1)
{
- config_err("warning: warning format does not contain a $line tag!\n");
+ config_err("Warning: warning format does not contain a $line tag!\n");
}
if (warnFormat.find("$text")==-1)
{
- config_err("warning: warning format foes not contain a $text tag!\n");
+ config_err("Warning: warning format foes not contain a $text tag!\n");
}
}
@@ -1089,7 +1113,7 @@ void Config::check()
if (paperType!="a4" && paperType!="a4wide" && paperType!="letter" &&
paperType!="legal" && paperType!="executive")
{
- config_err("error: Unknown page type specified");
+ config_err("Error: Unknown page type specified");
}
QCString &outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
@@ -1129,7 +1153,7 @@ void Config::check()
QFileInfo fi(headerFile);
if (!fi.exists())
{
- config_err("error: tag HTML_HEADER: header file `%s' "
+ config_err("Error: tag HTML_HEADER: header file `%s' "
"does not exist\n",headerFile.data());
exit(1);
}
@@ -1141,7 +1165,7 @@ void Config::check()
QFileInfo fi(footerFile);
if (!fi.exists())
{
- config_err("error: tag HTML_FOOTER: footer file `%s' "
+ config_err("Error: tag HTML_FOOTER: footer file `%s' "
"does not exist\n",footerFile.data());
exit(1);
}
@@ -1155,7 +1179,7 @@ void Config::check()
QFileInfo fi(MathJaxCodefile);
if (!fi.exists())
{
- config_err("error: tag MATHJAX_CODEFILE file `%s' "
+ config_err("Error: tag MATHJAX_CODEFILE file `%s' "
"does not exist\n",MathJaxCodefile.data());
exit(1);
}
@@ -1168,7 +1192,7 @@ void Config::check()
QFileInfo fi(latexHeaderFile);
if (!fi.exists())
{
- config_err("error: tag LATEX_HEADER: header file `%s' "
+ config_err("Error: tag LATEX_HEADER: header file `%s' "
"does not exist\n",latexHeaderFile.data());
exit(1);
}
@@ -1179,7 +1203,7 @@ void Config::check()
while (s)
{
QFileInfo fi(s);
- if (!fi.exists()) config_err("warning: tag INCLUDE_PATH: include path `%s' "
+ if (!fi.exists()) config_err("Warning: tag INCLUDE_PATH: include path `%s' "
"does not exist\n",s);
s=includePath.next();
}
@@ -1195,7 +1219,7 @@ void Config::check()
alias=alias.stripWhiteSpace();
if (alias.find(re1)!=0 && alias.find(re2)!=0)
{
- config_err("Illegal alias format `%s'. Use \"name=value\" or \"name(n)=value\", where n is the number of arguments\n",
+ config_err("Error: Illegal alias format `%s'. Use \"name=value\" or \"name(n)=value\", where n is the number of arguments\n",
alias.data());
}
s=aliasList.next();
@@ -1204,19 +1228,19 @@ void Config::check()
// check if GENERATE_TREEVIEW and GENERATE_HTMLHELP are both enabled
if (Config_getBool("GENERATE_TREEVIEW") && Config_getBool("GENERATE_HTMLHELP"))
{
- config_err("When enabling GENERATE_HTMLHELP the tree view (GENERATE_TREEVIEW) should be disabled. I'll do it for you.\n");
+ config_err("Error: When enabling GENERATE_HTMLHELP the tree view (GENERATE_TREEVIEW) should be disabled. I'll do it for you.\n");
Config_getBool("GENERATE_TREEVIEW")=FALSE;
}
if (Config_getBool("SEARCHENGINE") && Config_getBool("GENERATE_HTMLHELP"))
{
- config_err("When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.\n");
+ config_err("Error: When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.\n");
Config_getBool("SEARCHENGINE")=FALSE;
}
// check if SEPARATE_MEMBER_PAGES and INLINE_GROUPED_CLASSES are both enabled
if (Config_getBool("SEPARATE_MEMBER_PAGES") && Config_getBool("INLINE_GROUPED_CLASSES"))
{
- config_err("When enabling INLINE_GROUPED_CLASSES the SEPARATE_MEMBER_PAGES option should be disabled. I'll do it for you.\n");
+ config_err("Error: When enabling INLINE_GROUPED_CLASSES the SEPARATE_MEMBER_PAGES option should be disabled. I'll do it for you.\n");
Config_getBool("SEPARATE_MEMBER_PAGES")=FALSE;
}
@@ -1232,6 +1256,13 @@ void Config::check()
// config_err("Invalid value for DOT_IMAGE_FORMAT: `%s'. Using the default.\n",dotImageFormat.data());
// dotImageFormat = "png";
//}
+
+ QCString &dotFontName=Config_getString("DOT_FONTNAME");
+ if (dotFontName=="FreeSans" || dotFontName=="FreeSans.ttf")
+ {
+ config_err("Warning: doxygen no longer ships with the FreeSans font.\n"
+ "You may want to clear DOT_FONTPATH or risk wrong fonts being used for dot generated graphs.\n");
+ }
// check dot path
@@ -1248,7 +1279,7 @@ void Config::check()
QFileInfo dp(dotPath+"/dot"+portable_commandExtension());
if (!dp.exists() || !dp.isFile())
{
- config_err("warning: the dot tool could not be found at %s\n",dotPath.data());
+ config_err("Warning: the dot tool could not be found at %s\n",dotPath.data());
dotPath="";
}
else
@@ -1273,7 +1304,7 @@ void Config::check()
QFileInfo dp(mscgenPath+"/mscgen"+portable_commandExtension());
if (!dp.exists() || !dp.isFile())
{
- config_err("warning: the mscgen tool could not be found at %s\n",mscgenPath.data());
+ config_err("Warning: the mscgen tool could not be found at %s\n",mscgenPath.data());
mscgenPath="";
}
else
@@ -1306,7 +1337,7 @@ void Config::check()
QFileInfo fi(s);
if (!fi.exists())
{
- config_err("warning: tag INPUT: input source `%s' does not exist\n",s);
+ config_err("Warning: tag INPUT: input source `%s' does not exist\n",s);
}
s=inputSources.next();
}
@@ -1321,7 +1352,7 @@ void Config::check()
filePatternList.append("*.cxx");
filePatternList.append("*.cpp");
filePatternList.append("*.c++");
- filePatternList.append("*.d");
+ //filePatternList.append("*.d");
filePatternList.append("*.java");
filePatternList.append("*.ii");
filePatternList.append("*.ixx");
@@ -1397,14 +1428,14 @@ void Config::check()
Config_getString("GENERATE_TAGFILE").isEmpty()
)
{
- config_err("warning: No output formats selected! Set at least one of the main GENERATE_* options to YES.\n");
+ config_err("Warning: No output formats selected! Set at least one of the main GENERATE_* options to YES.\n");
}
// check HTMLHELP creation requirements
if (!Config_getBool("GENERATE_HTML") &&
Config_getBool("GENERATE_HTMLHELP"))
{
- config_err("warning: GENERATE_HTMLHELP=YES requires GENERATE_HTML=YES.\n");
+ config_err("Warning: GENERATE_HTMLHELP=YES requires GENERATE_HTML=YES.\n");
}
// check QHP creation requirements
@@ -1412,13 +1443,13 @@ void Config::check()
{
if (Config_getString("QHP_NAMESPACE").isEmpty())
{
- config_err("error: GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n");
+ config_err("Error: GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n");
Config_getString("QHP_NAMESPACE")="org.doxygen.doc";
}
if (Config_getString("QHP_VIRTUAL_FOLDER").isEmpty())
{
- config_err("error: GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n");
+ config_err("Error: GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n");
Config_getString("QHP_VIRTUAL_FOLDER")="doc";
}
}
@@ -1469,7 +1500,7 @@ void Config::check()
if (!mathJaxFormat.isEmpty() && mathJaxFormat!="HTML-CSS" &&
mathJaxFormat!="NativeMML" && mathJaxFormat!="SVG")
{
- config_err("error: Unsupported value for MATHJAX_FORMAT: Should be one of HTML-CSS, NativeMML, or SVG\n");
+ config_err("Error: Unsupported value for MATHJAX_FORMAT: Should be one of HTML-CSS, NativeMML, or SVG\n");
Config_getEnum("MATHJAX_FORMAT")="HTML-CSS";
}
@@ -1515,7 +1546,7 @@ void Config::check()
if (!b6) s6=" EXTRACT_PACKAGE = YES (was NO)\n"; else s6="";
- config_err("warning: enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n"
+ config_err("Warning: enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n"
"%s%s%s%s%s%s",s1,s2,s3,s4,s5,s6
);
@@ -1548,7 +1579,7 @@ void Config::init()
ConfigOption * opt = Config::instance()->get(depName);
if (opt==0)
{
- config_err("Config option '%s' has invalid depends relation on unknown option '%s'\n",
+ config_err("Warning: Config option '%s' has invalid depends relation on unknown option '%s'\n",
option->name().data(),depName.data());
exit(1);
}
@@ -1596,7 +1627,7 @@ static QCString configFileToString(const char *name)
QFileInfo fi(name);
if (!fi.exists() || !fi.isFile())
{
- config_err("error: file `%s' not found\n",name);
+ config_err("Error: file `%s' not found\n",name);
return "";
}
f.setName(name);
@@ -1617,7 +1648,7 @@ static QCString configFileToString(const char *name)
}
if (!fileOpened)
{
- config_err("error: cannot open file `%s' for reading\n",name);
+ config_err("Error: cannot open file `%s' for reading\n",name);
}
return "";
}
diff --git a/src/config.xml b/src/config.xml
index db51172..5bbc6e6 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -328,30 +328,15 @@ namespace, or class. And the struct will be named TypeS. This can typically
be useful for C code in case the coding convention dictates that all compound
types are typedef&apos;ed and only the typedef is referenced, never the tag name.
' defval='0'/>
- <option type='int' id='SYMBOL_CACHE_SIZE' docs='
-The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-determine which symbols to keep in memory and which to flush to disk.
-When the cache is full, less often used symbols will be written to disk.
-For small to medium size projects (&lt;1000 input files) the default value is
-probably good enough. For larger projects a too small cache size can cause
-doxygen to be busy swapping symbols to and from disk most of the time
-causing a significant performance penalty.
-If the system has enough physical memory increasing the cache will improve the
-performance by keeping more symbols in memory. Note that the value works on
-a logarithmic scale so increasing the size by one will roughly double the
-memory usage. The cache size is given by this formula:
-2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-corresponding to a cache size of 2^16 = 65536 symbols.
-' minval='0' maxval='9' defval='0'/>
<option type='int' id='LOOKUP_CACHE_SIZE' docs='
-Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-their name and scope. Since this can be an expensive process and often the
-same symbol appear multiple times in the code, doxygen keeps a cache of
-pre-resolved symbols. If the cache is too small doxygen will become slower.
-If the cache is too large, memory is wasted. The cache size is given by this
-formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-corresponding to a cache size of 2^16 = 65536 symbols.
+The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+cache is used to resolve symbols given their name and scope. Since this can
+be an expensive process and often the same symbol appear multiple times in
+the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too
+small doxygen will become slower. If the cache is too large, memory is wasted.
+The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid
+range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536
+symbols.
' minval='0' maxval='9' defval='0'/>
</group>
<group name='Build' docs='Build related configuration options'>
@@ -1391,7 +1376,7 @@ and cross-referencing information) to the XML output. Note that
enabling this will significantly increase the size of the XML output.
' defval='1' depends='GENERATE_XML'/>
</group>
- <group name='DOCBOOK' docs='configuration options related to the DOCBOOK output'>
+ <group name='Docbook' docs='configuration options related to the DOCBOOK output'>
<option type='bool' id='GENERATE_DOCBOOK' docs='
If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files
that can be used to generate PDF.
@@ -1760,5 +1745,6 @@ the various graphs.
<option type='obsolete' id='USE_INLINE_TREES'/>
<option type='obsolete' id='SHOW_DIRECTORIES'/>
<option type='obsolete' id='HTML_ALIGN_MEMBERS'/>
+ <option type='obsolete' id='SYMBOL_CACHE_SIZE'/>
</group>
</doxygenconfig>
diff --git a/src/configgen.py b/src/configgen.py
index 47c8eb6..495f290 100755
--- a/src/configgen.py
+++ b/src/configgen.py
@@ -98,6 +98,8 @@ def parseOption(node):
elif type=='obsolete':
print " cfg->addObsolete(\"%s\");" % (name)
if len(setting)>0:
+ print "#else"
+ print " cfg->addDisabled(\"%s\");" % (name)
print "#endif"
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index 327c883..1cb144d 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -463,33 +463,15 @@ void addConfigOptions(Config *cfg)
);
//----
ci = cfg->addInt(
- "SYMBOL_CACHE_SIZE",
- "The SYMBOL_CACHE_SIZE determines the size of the internal cache use to\n"
- "determine which symbols to keep in memory and which to flush to disk.\n"
- "When the cache is full, less often used symbols will be written to disk.\n"
- "For small to medium size projects (<1000 input files) the default value is\n"
- "probably good enough. For larger projects a too small cache size can cause\n"
- "doxygen to be busy swapping symbols to and from disk most of the time\n"
- "causing a significant performance penalty.\n"
- "If the system has enough physical memory increasing the cache will improve the\n"
- "performance by keeping more symbols in memory. Note that the value works on\n"
- "a logarithmic scale so increasing the size by one will roughly double the\n"
- "memory usage. The cache size is given by this formula:\n"
- "2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,\n"
- "corresponding to a cache size of 2^16 = 65536 symbols.",
- 0,9,0
- );
- //----
- ci = cfg->addInt(
"LOOKUP_CACHE_SIZE",
- "Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be\n"
- "set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given\n"
- "their name and scope. Since this can be an expensive process and often the\n"
- "same symbol appear multiple times in the code, doxygen keeps a cache of\n"
- "pre-resolved symbols. If the cache is too small doxygen will become slower.\n"
- "If the cache is too large, memory is wasted. The cache size is given by this\n"
- "formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,\n"
- "corresponding to a cache size of 2^16 = 65536 symbols.",
+ "The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n"
+ "cache is used to resolve symbols given their name and scope. Since this can\n"
+ "be an expensive process and often the same symbol appear multiple times in\n"
+ "the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too\n"
+ "small doxygen will become slower. If the cache is too large, memory is wasted.\n"
+ "The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid\n"
+ "range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536\n"
+ "symbols.",
0,9,0
);
//---------------------------------------------------------------------------
@@ -1161,6 +1143,8 @@ void addConfigOptions(Config *cfg)
"parser lacks the necessairy type information.",
FALSE
);
+#else
+ cfg->addDisabled("CLANG_ASSISTED_PARSING");
#endif
#if USE_LIBCLANG
//----
@@ -1172,6 +1156,8 @@ void addConfigOptions(Config *cfg)
"specified at INPUT and INCLUDE_PATH."
);
cs->addDependency("CLANG_ASSISTED_PARSING");
+#else
+ cfg->addDisabled("CLANG_OPTIONS");
#endif
//---------------------------------------------------------------------------
cfg->addInfo("Index","configuration options related to the alphabetical class index");
@@ -2085,7 +2071,7 @@ void addConfigOptions(Config *cfg)
);
cb->addDependency("GENERATE_XML");
//---------------------------------------------------------------------------
- cfg->addInfo("DOCBOOK","configuration options related to the DOCBOOK output");
+ cfg->addInfo("Docbook","configuration options related to the DOCBOOK output");
//---------------------------------------------------------------------------
//----
@@ -2658,4 +2644,6 @@ void addConfigOptions(Config *cfg)
cfg->addObsolete("SHOW_DIRECTORIES");
//----
cfg->addObsolete("HTML_ALIGN_MEMBERS");
+ //----
+ cfg->addObsolete("SYMBOL_CACHE_SIZE");
}
diff --git a/src/constexp.y b/src/constexp.y
index aed8be9..f47e7c0 100644
--- a/src/constexp.y
+++ b/src/constexp.y
@@ -34,7 +34,7 @@
int cppExpYYerror(const char *s)
{
warn(g_constExpFileName,g_constExpLineNr,
- "warning: preprocessing issue while doing constant expression evaluation: %s",s);
+ "preprocessing issue while doing constant expression evaluation: %s",s);
return 0;
}
diff --git a/src/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp
index 246bbe9..bfb5cd0 100644
--- a/src/dbusxmlscanner.cpp
+++ b/src/dbusxmlscanner.cpp
@@ -830,7 +830,9 @@ DBusXMLScanner::~DBusXMLScanner()
void DBusXMLScanner::parseInput(const char * fileName,
const char * /* fileBuf */,
- Entry * root)
+ Entry *root,
+ bool /*sameTranslationUnit*/,
+ QStrList & /*filesInSameTranslationUnit*/)
{
QFile inputFile(fileName);
diff --git a/src/dbusxmlscanner.h b/src/dbusxmlscanner.h
index e3eff03..a0ead5a 100644
--- a/src/dbusxmlscanner.h
+++ b/src/dbusxmlscanner.h
@@ -29,9 +29,13 @@ class DBusXMLScanner : public ParserInterface
public:
DBusXMLScanner();
virtual ~DBusXMLScanner();
+ void startTranslationUnit(const char *) {}
+ void finishTranslationUnit() {}
void parseInput(const char *fileName,
const char *fileBuf,
- Entry *root);
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList &filesInSameTranslationUnit);
bool needsPreprocessing(const QCString &extension);
diff --git a/src/defgen.cpp b/src/defgen.cpp
index 62a22e2..4e0e5b8 100644
--- a/src/defgen.cpp
+++ b/src/defgen.cpp
@@ -142,7 +142,7 @@ void generateDEFForMember(MemberDef *md,
if (isFunc) //function
{
ArgumentList *declAl = new ArgumentList;
- LockingPtr<ArgumentList> defAl = md->argumentList();
+ ArgumentList *defAl = md->argumentList();
stringToArgumentList(md->argsString(),declAl);
QCString fcnPrefix = " " + memPrefix + "param-";
@@ -218,7 +218,7 @@ void generateDEFForMember(MemberDef *md,
// TODO: exceptions, const volatile
if (md->memberType()==MemberType_Enumeration) // enum
{
- LockingPtr<MemberList> enumList = md->enumFieldList();
+ MemberList *enumList = md->enumFieldList();
if (enumList!=0)
{
MemberListIterator emli(*enumList);
@@ -246,8 +246,8 @@ void generateDEFForMember(MemberDef *md,
//printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
- LockingPtr<MemberSDict> mdict = md->getReferencesMembers();
- if (!mdict.isNull())
+ MemberSDict *mdict = md->getReferencesMembers();
+ if (mdict)
{
MemberSDict::Iterator mdi(*mdict);
MemberDef *rmd;
@@ -280,7 +280,7 @@ void generateDEFForMember(MemberDef *md,
} /* for (mdi.toFirst...) */
}
mdict = md->getReferencedByMembers();
- if (!mdict.isNull())
+ if (mdict)
{
MemberSDict::Iterator mdi(*mdict);
MemberDef *rmd;
@@ -570,13 +570,13 @@ void generateDEF()
dir.setPath(QDir::currentDirPath());
if (!dir.mkdir(outputDirectory))
{
- err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+ err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
"exist and cannot be created\n",outputDirectory.data());
exit(1);
}
- else if (!Config_getBool("QUIET"))
+ else
{
- err("notice: Output directory `%s' does not exist. "
+ msg("Notice: Output directory `%s' does not exist. "
"I have created it for you.\n", outputDirectory.data());
}
dir.cd(outputDirectory);
diff --git a/src/definition.cpp b/src/definition.cpp
index 83d4566..fe1afb7 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -84,6 +84,8 @@ class DefinitionImpl
QCString defFileExt;
SrcLangExt lang;
+
+ QCString id; // clang unique id
};
DefinitionImpl::DefinitionImpl()
@@ -296,7 +298,7 @@ Definition::Definition(const char *df,int dl,int dc,
}
}
-Definition::Definition(const Definition &d) : DefinitionIntf(), LockableObj()
+Definition::Definition(const Definition &d) : DefinitionIntf()
{
m_name = d.m_name;
m_defLine = d.m_defLine;
@@ -397,6 +399,7 @@ void Definition::setName(const char *name)
void Definition::setId(const char *id)
{
if (id==0) return;
+ m_impl->id = id;
if (Doxygen::clangUsrMap)
{
//printf("Definition::setId '%s'->'%s'\n",id,m_name.data());
@@ -404,10 +407,14 @@ void Definition::setId(const char *id)
}
}
+QCString Definition::id() const
+{
+ return m_impl->id;
+}
+
void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
{
if (!anchorList) return;
- makeResident();
//printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
SectionInfo *si=anchorList->first();
while (si)
@@ -436,7 +443,6 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
bool Definition::hasSections() const
{
- makeResident();
//printf("Definition::hasSections(%s) #sections=%d\n",name().data(),
// m_impl->sectionDict ? m_impl->sectionDict->count() : 0);
if (m_impl->sectionDict==0) return FALSE;
@@ -457,7 +463,6 @@ bool Definition::hasSections() const
void Definition::addSectionsToIndex()
{
- makeResident();
if (m_impl->sectionDict==0) return;
//printf("Definition::addSectionsToIndex()\n");
SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
@@ -507,7 +512,6 @@ void Definition::addSectionsToIndex()
void Definition::writeDocAnchorsToTagFile()
{
- makeResident();
if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict)
{
//printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count());
@@ -601,7 +605,6 @@ void Definition::_setDocumentation(const char *d,const char *docFile,int docLine
void Definition::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
{
if (d==0) return;
- makeResident();
_setDocumentation(d,docFile,docLine,stripWhiteSpace,FALSE);
}
@@ -670,7 +673,6 @@ void Definition::_setBriefDescription(const char *b,const char *briefFile,int br
void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
if (b==0) return;
- makeResident();
_setBriefDescription(b,briefFile,briefLine);
}
@@ -695,7 +697,6 @@ void Definition::_setInbodyDocumentation(const char *doc,const char *inbodyFile,
void Definition::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
{
if (d==0) return;
- makeResident();
_setInbodyDocumentation(d,inbodyFile,inbodyLine);
}
@@ -871,7 +872,6 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
- makeResident();
ol.pushGeneratorState();
//printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
if (sourceBrowser &&
@@ -995,7 +995,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
}
else
{
- err("error: translation error: invalid markers in trDefinedInSourceFile()\n");
+ err("translation error: invalid markers in trDefinedInSourceFile()\n");
}
}
ol.popGeneratorState();
@@ -1004,7 +1004,6 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
void Definition::setBodySegment(int bls,int ble)
{
//printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
- makeResident();
if (m_impl->body==0) m_impl->body = new BodyInfo;
m_impl->body->startLine=bls;
m_impl->body->endLine=ble;
@@ -1012,7 +1011,6 @@ void Definition::setBodySegment(int bls,int ble)
void Definition::setBodyDef(FileDef *fd)
{
- makeResident();
if (m_impl->body==0) m_impl->body = new BodyInfo;
m_impl->body->fileDef=fd;
}
@@ -1021,7 +1019,6 @@ void Definition::setBodyDef(FileDef *fd)
void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
{
static bool inlineSources = Config_getBool("INLINE_SOURCES");
- makeResident();
ol.pushGeneratorState();
//printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(),
// m_startBodyLine,m_endBodyLine,m_bodyDef);
@@ -1068,9 +1065,6 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool /*funcOnly*/)
{
- LockingPtr<Definition> lock(this,this); // since this can be a memberDef
- // accessing other memberDefs prevent
- // it from being flushed to disk
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE");
@@ -1189,7 +1183,6 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
{
- makeResident();
if (Config_getBool("REFERENCED_BY_RELATION"))
{
_writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE);
@@ -1198,7 +1191,6 @@ void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
{
- makeResident();
if (Config_getBool("REFERENCES_RELATION"))
{
_writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE);
@@ -1209,7 +1201,6 @@ bool Definition::hasDocumentation() const
{
static bool extractAll = Config_getBool("EXTRACT_ALL");
//static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
- makeResident();
bool hasDocs =
(m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs
(m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description
@@ -1223,7 +1214,6 @@ bool Definition::hasDocumentation() const
bool Definition::hasUserDocumentation() const
{
- makeResident();
bool hasDocs =
(m_impl->details && !m_impl->details->doc.isEmpty()) ||
(m_impl->brief && !m_impl->brief->doc.isEmpty()) ||
@@ -1232,25 +1222,17 @@ bool Definition::hasUserDocumentation() const
}
-
-void Definition::addSourceReferencedBy(MemberDef *md, const char *floc/*=NULL*/)
+void Definition::addSourceReferencedBy(MemberDef *md)
{
- QCString name ;
- QCString scope = md->getScopeString();
-
- if (floc)
- name = floc;
- else
- {
- name = md->name();
- if (!scope.isEmpty())
- {
- name.prepend(scope+"::");
- }
- }
if (md)
{
- makeResident();
+ QCString name = md->name();
+ QCString scope = md->getScopeString();
+
+ if (!scope.isEmpty())
+ {
+ name.prepend(scope+"::");
+ }
if (m_impl->sourceRefByDict==0)
{
@@ -1263,32 +1245,21 @@ void Definition::addSourceReferencedBy(MemberDef *md, const char *floc/*=NULL*/)
}
}
-void Definition::addSourceReferences(MemberDef *md, const char *floc)
+void Definition::addSourceReferences(MemberDef *md)
{
QCString name = md->name();
QCString scope = md->getScopeString();
- if (floc)
- name = floc;
-#if 0
- else
- {
- name = md->name();
- if (!scope.isEmpty())
- {
- name.prepend(scope+"::");
- }
- }
-#endif
if (md)
{
- makeResident();
-#if 0
+ QCString name = md->name();
+ QCString scope = md->getScopeString();
+
if (!scope.isEmpty())
{
name.prepend(scope+"::");
}
-#endif
+
if (m_impl->sourceRefsDict==0)
{
m_impl->sourceRefsDict = new MemberSDict;
@@ -1307,14 +1278,13 @@ Definition *Definition::findInnerCompound(const char *)
void Definition::addInnerCompound(Definition *)
{
- err("error: Definition::addInnerCompound() called\n");
+ err("Definition::addInnerCompound() called\n");
}
QCString Definition::qualifiedName() const
{
//static int count=0;
//count++;
- makeResident();
if (!m_impl->qualifiedName.isEmpty())
{
//count--;
@@ -1353,7 +1323,6 @@ QCString Definition::qualifiedName() const
void Definition::setOuterScope(Definition *d)
{
- makeResident();
//printf("%s::setOuterScope(%s)\n",name().data(),d?d->name().data():"<none>");
if (m_impl->outerScope!=d)
{
@@ -1365,13 +1334,11 @@ void Definition::setOuterScope(Definition *d)
QCString Definition::localName() const
{
- makeResident();
return m_impl->localName;
}
void Definition::makePartOfGroup(GroupDef *gd)
{
- makeResident();
if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList;
m_impl->partOfGroups->append(gd);
}
@@ -1381,7 +1348,6 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
//printf("%s::setRefItems()\n",name().data());
if (sli)
{
- makeResident();
// deep copy the list
if (m_impl->xrefListItems==0)
{
@@ -1400,10 +1366,9 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
void Definition::mergeRefItems(Definition *d)
{
//printf("%s::mergeRefItems()\n",name().data());
- LockingPtr< QList<ListItemInfo> > xrefList = d->xrefListItems();
+ QList<ListItemInfo> *xrefList = d->xrefListItems();
if (xrefList!=0)
{
- makeResident();
// deep copy the list
if (m_impl->xrefListItems==0)
{
@@ -1424,7 +1389,6 @@ void Definition::mergeRefItems(Definition *d)
int Definition::_getXRefListId(const char *listName) const
{
- makeResident();
if (m_impl->xrefListItems)
{
QListIterator<ListItemInfo> slii(*m_impl->xrefListItems);
@@ -1440,16 +1404,14 @@ int Definition::_getXRefListId(const char *listName) const
return -1;
}
-LockingPtr< QList<ListItemInfo> > Definition::xrefListItems() const
+QList<ListItemInfo> *Definition::xrefListItems() const
{
- makeResident();
- return LockingPtr< QList<ListItemInfo> >(this,m_impl->xrefListItems);
+ return m_impl->xrefListItems;
}
QCString Definition::convertNameToFile(const char *name,bool allowDots) const
{
- makeResident();
if (!m_impl->ref.isEmpty())
{
return name;
@@ -1462,7 +1424,6 @@ QCString Definition::convertNameToFile(const char *name,bool allowDots) const
QCString Definition::pathFragment() const
{
- makeResident();
QCString result;
if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope)
{
@@ -1499,7 +1460,6 @@ QCString Definition::pathFragment() const
*/
QCString Definition::navigationPathAsString() const
{
- makeResident();
QCString result;
Definition *outerScope = getOuterScope();
QCString locName = localName();
@@ -1569,7 +1529,6 @@ void Definition::writeNavigationPath(OutputList &ol) const
// TODO: move to htmlgen
void Definition::writeToc(OutputList &ol)
{
- makeResident();
SectionDict *sectionDict = m_impl->sectionDict;
if (sectionDict==0) return;
ol.pushGeneratorState();
@@ -1643,19 +1602,16 @@ QCString Definition::symbolName() const
QCString Definition::documentation() const
{
- makeResident();
return m_impl->details ? m_impl->details->doc : QCString("");
}
int Definition::docLine() const
{
- makeResident();
return m_impl->details ? m_impl->details->line : 1;
}
QCString Definition::docFile() const
{
- makeResident();
return m_impl->details ? m_impl->details->file : QCString("<"+m_name+">");
}
@@ -1712,7 +1668,6 @@ QCString abbreviate(const char *s,const char *name)
QCString Definition::briefDescription(bool abbr) const
{
- makeResident();
return m_impl->brief ?
(abbr ? abbreviate(m_impl->brief->doc,displayName()) : m_impl->brief->doc) :
QCString("");
@@ -1720,10 +1675,6 @@ QCString Definition::briefDescription(bool abbr) const
QCString Definition::briefDescriptionAsTooltip() const
{
- makeResident();
- LockingPtr<Definition> lock(this,this); // since this can be a memberDef
- // accessing other memberDefs prevent
- // it from being flushed to disk
if (m_impl->brief)
{
if (m_impl->brief->tooltip.isEmpty() && !m_impl->brief->doc.isEmpty())
@@ -1749,13 +1700,11 @@ QCString Definition::briefDescriptionAsTooltip() const
int Definition::briefLine() const
{
- makeResident();
return m_impl->brief ? m_impl->brief->line : 1;
}
QCString Definition::briefFile() const
{
- makeResident();
return m_impl->brief ? m_impl->brief->file : QCString("<"+m_name+">");
}
@@ -1763,19 +1712,16 @@ QCString Definition::briefFile() const
QCString Definition::inbodyDocumentation() const
{
- makeResident();
return m_impl->inbodyDocs ? m_impl->inbodyDocs->doc : QCString("");
}
int Definition::inbodyLine() const
{
- makeResident();
return m_impl->inbodyDocs ? m_impl->inbodyDocs->line : 1;
}
QCString Definition::inbodyFile() const
{
- makeResident();
return m_impl->inbodyDocs ? m_impl->inbodyDocs->file : QCString("<"+m_name+">");
}
@@ -1784,19 +1730,16 @@ QCString Definition::inbodyFile() const
QCString Definition::getDefFileName() const
{
- makeResident();
return m_impl->defFileName;
}
QCString Definition::getDefFileExtension() const
{
- makeResident();
return m_impl->defFileExt;
}
bool Definition::isHidden() const
{
- makeResident();
return m_impl->hidden;
}
@@ -1817,91 +1760,76 @@ bool Definition::isArtificial() const
QCString Definition::getReference() const
{
- makeResident();
return m_impl->ref;
}
bool Definition::isReference() const
{
- makeResident();
return !m_impl->ref.isEmpty();
}
int Definition::getStartBodyLine() const
{
- makeResident();
return m_impl->body ? m_impl->body->startLine : -1;
}
int Definition::getEndBodyLine() const
{
- makeResident();
return m_impl->body ? m_impl->body->endLine : -1;
}
FileDef *Definition::getBodyDef()
{
- makeResident();
return m_impl->body ? m_impl->body->fileDef : 0;
}
-LockingPtr<GroupList> Definition::partOfGroups() const
+GroupList *Definition::partOfGroups() const
{
- makeResident();
- return LockingPtr<GroupList>(this,m_impl->partOfGroups);
+ return m_impl->partOfGroups;
}
Definition *Definition::getOuterScope() const
{
- makeResident();
return m_impl->outerScope;
}
-LockingPtr<MemberSDict> Definition::getReferencesMembers() const
+MemberSDict *Definition::getReferencesMembers() const
{
- makeResident();
- return LockingPtr<MemberSDict>(this,m_impl->sourceRefsDict);
+ return m_impl->sourceRefsDict;
}
-LockingPtr<MemberSDict> Definition::getReferencedByMembers() const
+MemberSDict *Definition::getReferencedByMembers() const
{
- makeResident();
- return LockingPtr<MemberSDict>(this,m_impl->sourceRefByDict);
+ return m_impl->sourceRefByDict;
}
void Definition::setReference(const char *r)
{
- makeResident();
m_impl->ref=r;
}
SrcLangExt Definition::getLanguage() const
{
- makeResident();
return m_impl->lang;
}
void Definition::setHidden(bool b)
{
- makeResident();
m_impl->hidden = m_impl->hidden || b;
}
void Definition::setArtificial(bool b)
{
- makeResident();
m_impl->isArtificial = b;
}
void Definition::setLocalName(const QCString name)
{
- makeResident();
m_impl->localName=name;
}
void Definition::setLanguage(SrcLangExt lang)
{
- makeResident();
m_impl->lang=lang;
}
@@ -1911,70 +1839,4 @@ void Definition::_setSymbolName(const QCString &name)
m_symbolName=name;
}
-//---------------
-
-void Definition::makeResident() const
-{
-}
-
-void Definition::flushToDisk() const
-{
- //printf("%p: Definition::flushToDisk()\n",this);
- Definition *that = (Definition *)this;
- //printf("Definition::flushToDisk(): pos=%d\n",(int)m_storagePos);
- marshalUInt(Doxygen::symbolStorage,START_MARKER);
- marshalSectionDict (Doxygen::symbolStorage,m_impl->sectionDict);
- marshalMemberSDict (Doxygen::symbolStorage,m_impl->sourceRefByDict);
- marshalMemberSDict (Doxygen::symbolStorage,m_impl->sourceRefsDict);
- marshalItemInfoList (Doxygen::symbolStorage,m_impl->xrefListItems);
- marshalGroupList (Doxygen::symbolStorage,m_impl->partOfGroups);
- marshalDocInfo (Doxygen::symbolStorage,m_impl->details);
- marshalDocInfo (Doxygen::symbolStorage,m_impl->inbodyDocs);
- marshalBriefInfo (Doxygen::symbolStorage,m_impl->brief);
- marshalBodyInfo (Doxygen::symbolStorage,m_impl->body);
- marshalQCString (Doxygen::symbolStorage,m_impl->docSignatures);
- marshalQCString (Doxygen::symbolStorage,m_impl->localName);
- marshalQCString (Doxygen::symbolStorage,m_impl->qualifiedName);
- marshalQCString (Doxygen::symbolStorage,m_impl->ref);
- marshalBool (Doxygen::symbolStorage,m_impl->hidden);
- marshalBool (Doxygen::symbolStorage,m_impl->isArtificial);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->outerScope);
- marshalQCString (Doxygen::symbolStorage,m_impl->defFileName);
- marshalQCString (Doxygen::symbolStorage,m_impl->defFileExt);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->lang);
- marshalUInt(Doxygen::symbolStorage,END_MARKER);
- delete that->m_impl;
- that->m_impl = 0;
-}
-
-void Definition::loadFromDisk() const
-{
- //printf("%p: Definition::loadFromDisk()\n",this);
- Definition *that = (Definition *)this;
- assert(m_impl==0);
- that->m_impl = new DefinitionImpl;
- uint marker = unmarshalUInt(Doxygen::symbolStorage);
- assert(marker==START_MARKER);
- m_impl->sectionDict = unmarshalSectionDict (Doxygen::symbolStorage);
- m_impl->sourceRefByDict = unmarshalMemberSDict (Doxygen::symbolStorage);
- m_impl->sourceRefsDict = unmarshalMemberSDict (Doxygen::symbolStorage);
- m_impl->xrefListItems = unmarshalItemInfoList (Doxygen::symbolStorage);
- m_impl->partOfGroups = unmarshalGroupList (Doxygen::symbolStorage);
- m_impl->details = unmarshalDocInfo (Doxygen::symbolStorage);
- m_impl->inbodyDocs = unmarshalDocInfo (Doxygen::symbolStorage);
- m_impl->brief = unmarshalBriefInfo (Doxygen::symbolStorage);
- m_impl->body = unmarshalBodyInfo (Doxygen::symbolStorage);
- m_impl->docSignatures = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->localName = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->qualifiedName = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->ref = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->hidden = unmarshalBool (Doxygen::symbolStorage);
- m_impl->isArtificial = unmarshalBool (Doxygen::symbolStorage);
- m_impl->outerScope = (Definition *)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->defFileName = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->defFileExt = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->lang = (SrcLangExt)unmarshalInt(Doxygen::symbolStorage);
- marker = unmarshalUInt(Doxygen::symbolStorage);
- assert(marker==END_MARKER);
-}
diff --git a/src/definition.h b/src/definition.h
index 32c733a..74a801f 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -22,7 +22,6 @@
#include <qdict.h>
#include "types.h"
-#include "lockingptr.h"
class FileDef;
class OutputList;
@@ -89,7 +88,7 @@ class DefinitionIntf
* This can be a class or a member function, or a file, or a namespace, etc.
* Use definitionType() to find which type of definition this is.
*/
-class Definition : public DefinitionIntf, public LockableObj
+class Definition : public DefinitionIntf
{
public:
@@ -246,18 +245,20 @@ class Definition : public DefinitionIntf, public LockableObj
/** Returns the programming language this definition was written in. */
SrcLangExt getLanguage() const;
- LockingPtr<GroupList> partOfGroups() const;
+ GroupList *partOfGroups() const;
- LockingPtr< QList<ListItemInfo> > xrefListItems() const;
+ QList<ListItemInfo> *xrefListItems() const;
virtual Definition *findInnerCompound(const char *name);
virtual Definition *getOuterScope() const;
- LockingPtr<MemberSDict> getReferencesMembers() const;
- LockingPtr<MemberSDict> getReferencedByMembers() const;
+ MemberSDict *getReferencesMembers() const;
+ MemberSDict *getReferencedByMembers() const;
bool hasSections() const;
+ QCString id() const;
+
//-----------------------------------------------------------------------------------
// ---- setters -----
//-----------------------------------------------------------------------------------
@@ -293,8 +294,8 @@ class Definition : public DefinitionIntf, public LockableObj
// source references
void setBodySegment(int bls,int ble);
void setBodyDef(FileDef *fd);
- void addSourceReferencedBy(MemberDef *d, const char *floc=NULL);
- void addSourceReferences(MemberDef *d, const char *floc);
+ void addSourceReferencedBy(MemberDef *d);
+ void addSourceReferences(MemberDef *d);
void setRefItems(const QList<ListItemInfo> *sli);
void mergeRefItems(Definition *d);
@@ -334,12 +335,6 @@ class Definition : public DefinitionIntf, public LockableObj
protected:
- virtual void flushToDisk() const;
- virtual void loadFromDisk() const;
- virtual void makeResident() const;
- void lock() const {}
- void unlock() const {}
-
Definition(const Definition &d);
private:
diff --git a/src/diagram.cpp b/src/diagram.cpp
index 10b49b9..80d0646 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -1363,7 +1363,7 @@ void ClassDiagram::writeFigure(FTextStream &output,const char *path,
portable_sysTimerStart();
if (portable_system("epstopdf",epstopdfArgs)!=0)
{
- err("error: Problems running epstopdf. Check your TeX installation!\n");
+ err("Problems running epstopdf. Check your TeX installation!\n");
portable_sysTimerStop();
return;
}
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index a63de25..fe6e47d 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -11,6 +11,7 @@
#include "layout.h"
#include "ftextstream.h"
#include "config.h"
+#include "docparser.h"
//----------------------------------------------------------------------
// method implementation
@@ -137,7 +138,7 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
// repeat brief description
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
}
// separator between brief and details
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
@@ -156,7 +157,7 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
// write documentation
if (!documentation().isEmpty())
{
- ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
}
}
}
@@ -165,29 +166,31 @@ void DirDef::writeBriefDescription(OutputList &ol)
{
if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty()
- )
+ DocRoot *rootNode = validatingParseDoc(
+ briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
+ if (rootNode && !rootNode->isEmpty())
{
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- }
- ol.popGeneratorState();
+ ol.startParagraph();
+ ol.writeDoc(rootNode,this,0);
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
- //ol.pushGeneratorState();
- //ol.disable(OutputGenerator::RTF);
- //ol.newParagraph();
- //ol.popGeneratorState();
- ol.endParagraph();
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty()
+ )
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ }
+ ol.popGeneratorState();
+
+ ol.endParagraph();
+ }
+ delete rootNode;
}
ol.writeSynopsis();
}
@@ -237,7 +240,7 @@ void DirDef::writeSubDirList(OutputList &ol)
if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription(dd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
+ ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
FALSE, // indexWords
FALSE, // isExample
0, // exampleName
@@ -300,7 +303,7 @@ void DirDef::writeFileList(OutputList &ol)
if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription(fd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
+ ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
FALSE, // indexWords
FALSE, // isExample
0, // exampleName
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index 8cd1063..5726b3e 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -354,7 +354,7 @@ static void writeDocbookDocBlock(FTextStream &t,
QCString stext = text.stripWhiteSpace();
if (stext.isEmpty()) return;
// convert the documentation string into an abstract syntax tree
- DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text+"\n",FALSE,FALSE);
+ DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text,FALSE,FALSE);
// create a code generator
DocbookCodeGenerator *docbookCodeGen = new DocbookCodeGenerator(t);
// create a parse tree visitor for Docbook
@@ -468,7 +468,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
bool closePara=TRUE;
if (md->memberType()==MemberType_Enumeration)
{
- LockingPtr<MemberList> enumFields = md->enumFieldList();
+ MemberList *enumFields = md->enumFieldList();
t << " <para>" << memType << " <link linkend=\"";
if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup)
{
@@ -588,9 +588,9 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
}
t << "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</link>";
t << " (" << endl;
- LockingPtr<ArgumentList> declAl = md->declArgumentList();
- LockingPtr<ArgumentList> defAl = md->argumentList();
- if (declAl!=0 && declAl->count()>0)
+ ArgumentList *declAl = md->declArgumentList();
+ ArgumentList *defAl = md->argumentList();
+ if (declAl && declAl->count()>0)
{
ArgumentListIterator declAli(*declAl);
ArgumentListIterator defAli(*defAl);
@@ -629,7 +629,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
{
if (md->memberType()==MemberType_Enumeration)
{
- LockingPtr<MemberList> enumFields = md->enumFieldList();
+ MemberList *enumFields = md->enumFieldList();
t << " <section xml:id=\"";
if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup)
{
@@ -1676,13 +1676,13 @@ void generateDocbook()
dir.setPath(QDir::currentDirPath());
if (!dir.mkdir(outputDirectory))
{
- err("error: tag DOCBOOK_OUTPUT: Output directory `%s' does not "
+ err("tag DOCBOOK_OUTPUT: Output directory `%s' does not "
"exist and cannot be created\n",outputDirectory.data());
exit(1);
}
- else if (!Config_getBool("QUIET"))
+ else
{
- err("notice: Output directory `%s' does not exist. "
+ msg("Notice: Output directory `%s' does not exist. "
"I have created it for you.\n", outputDirectory.data());
}
dir.cd(outputDirectory);
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index 8dedbff..aa750db 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -174,7 +174,7 @@ void DocbookDocVisitor::visit(DocSymbol *s)
case DocSymbol::LeftFloor: m_t << "&#8970;"; break;
case DocSymbol::RightFloor: m_t << "&#8971;"; break;
default:
- err("error: unknown symbol found\n");
+ err("unknown symbol found\n");
}
}
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 418a83b..aa9153a 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -283,14 +283,14 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
else
{
warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: could not write output image %s",qPrint(outputFile));
+ "could not write output image %s",qPrint(outputFile));
}
}
}
else
{
warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: could not open image %s",qPrint(fileName));
+ "could not open image %s",qPrint(fileName));
}
if (type==DocImage::Latex && Config_getBool("USE_PDFLATEX") &&
@@ -306,7 +306,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
portable_sysTimerStart();
if (portable_system("epstopdf",epstopdfArgs)!=0)
{
- err("error: Problems running epstopdf. Check your TeX installation!\n");
+ err("Problems running epstopdf. Check your TeX installation!\n");
}
portable_sysTimerStop();
return baseName;
@@ -315,7 +315,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
else if (ambig)
{
QCString text;
- text.sprintf("warning: image file name %s is ambiguous.\n",qPrint(fileName));
+ text.sprintf("image file name %s is ambiguous.\n",qPrint(fileName));
text+="Possible candidates:\n";
text+=showFileDefMatches(Doxygen::imageNameDict,fileName);
warn_doc_error(g_fileName,doctokenizerYYlineno,text);
@@ -326,7 +326,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
if (result.left(5)!="http:" && result.left(6)!="https:")
{
warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: image file %s is not found in IMAGE_PATH: "
+ "image file %s is not found in IMAGE_PATH: "
"assuming external image.",qPrint(fileName)
);
}
@@ -344,7 +344,7 @@ static void checkArgumentName(const QCString &name,bool isParam)
{
if (!Config_getBool("WARN_IF_DOC_ERROR")) return;
if (g_memberDef==0) return; // not a member
- LockingPtr<ArgumentList> al=g_memberDef->isDocsForDefinition() ?
+ ArgumentList *al=g_memberDef->isDocsForDefinition() ?
g_memberDef->argumentList() :
g_memberDef->declArgumentList();
SrcLangExt lang = g_memberDef->getLanguage();
@@ -393,9 +393,9 @@ static void checkArgumentName(const QCString &name,bool isParam)
docLine = g_memberDef->getDefLine();
}
- QCString alStr = argListToString(al.pointer());
+ QCString alStr = argListToString(al);
warn_doc_error(docFile,docLine,
- "warning: argument '%s' of command @param "
+ "argument '%s' of command @param "
"is not found in the argument list of %s%s%s%s",
qPrint(aName), qPrint(scope), qPrint(g_memberDef->name()),
qPrint(alStr), qPrint(inheritedFrom));
@@ -413,7 +413,7 @@ static void checkUndocumentedParams()
{
if (g_memberDef && g_hasParamCommand && Config_getBool("WARN_IF_DOC_ERROR"))
{
- LockingPtr<ArgumentList> al=g_memberDef->isDocsForDefinition() ?
+ ArgumentList *al=g_memberDef->isDocsForDefinition() ?
g_memberDef->argumentList() :
g_memberDef->declArgumentList();
SrcLangExt lang = g_memberDef->getLanguage();
@@ -442,9 +442,9 @@ static void checkUndocumentedParams()
{
bool first=TRUE;
QCString errMsg=
- "warning: The following parameters of "+
+ "The following parameters of "+
QCString(g_memberDef->qualifiedName()) +
- QCString(argListToString(al.pointer())) +
+ QCString(argListToString(al)) +
" are not documented:\n";
for (ali.toFirst();(a=ali.current());++ali)
{
@@ -494,8 +494,8 @@ static void detectNoDocumentedParams()
{
if (g_memberDef && Config_getBool("WARN_NO_PARAMDOC"))
{
- LockingPtr<ArgumentList> al = g_memberDef->argumentList();
- LockingPtr<ArgumentList> declAl = g_memberDef->declArgumentList();
+ ArgumentList *al = g_memberDef->argumentList();
+ ArgumentList *declAl = g_memberDef->declArgumentList();
QCString returnType = g_memberDef->typeString();
bool isPython = g_memberDef->getLanguage()==SrcLangExt_Python;
@@ -808,7 +808,7 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return tok;
}
@@ -831,11 +831,11 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command \\%s as the argument of a \\%s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command \\%s as the argument of a \\%s command",
qPrint(g_token->name),qPrint(cmdName));
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found while handling command %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found while handling command %s",
qPrint(g_token->name),qPrint(cmdName));
break;
case TK_HTMLTAG:
@@ -846,7 +846,7 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
return tok;
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s while handling command %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s while handling command %s",
tokToString(tok),qPrint(cmdName));
break;
}
@@ -884,17 +884,17 @@ static void handleStyleLeave(DocNode *parent,QList<DocNode> &children,
{
if (g_styleStack.isEmpty())
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> tag without matching <%s>",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found </%s> tag without matching <%s>",
qPrint(tagName),qPrint(tagName));
}
else if (g_styleStack.top()->style()!=s)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> tag while expecting </%s>",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found </%s> tag while expecting </%s>",
qPrint(tagName),qPrint(g_styleStack.top()->styleString()));
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> at different nesting level (%d) than expected (%d)",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found </%s> at different nesting level (%d) than expected (%d)",
qPrint(tagName),g_nodeStack.count(),g_styleStack.top()->position());
}
}
@@ -952,7 +952,7 @@ static int handleAHref(DocNode *parent,QList<DocNode> &children,const HtmlAttrib
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <a> tag with name option but without value!");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found <a> tag with name option but without value!");
}
}
else if (opt->name=="href") // <a href=url>..</a> tag
@@ -1002,7 +1002,7 @@ static void handleUnclosedStyleCommands()
g_initialStyleStack.pop();
handleUnclosedStyleCommands();
warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: end of comment block while expecting "
+ "end of comment block while expecting "
"command </%s>",qPrint(sc->styleString()));
}
}
@@ -1124,7 +1124,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
{
if (g_token->name.left(1)=="#" || g_token->name.left(2)=="::")
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: explicit link request to '%s' could not be resolved",qPrint(name));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"explicit link request to '%s' could not be resolved",qPrint(name));
children.append(new DocWord(parent,g_token->name));
}
else
@@ -1157,7 +1157,7 @@ static DocInternalRef *handleInternalRef(DocNode *parent)
QCString tokenName = g_token->name;
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(tokenName));
return 0;
}
@@ -1165,7 +1165,7 @@ static DocInternalRef *handleInternalRef(DocNode *parent)
tok=doctokenizerYYlex(); // get the reference id
if (tok!=TK_WORD && tok!=TK_LNKWORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(tokenName));
return 0;
}
@@ -1177,7 +1177,7 @@ static DocAnchor *handleAnchor(DocNode *parent)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(g_token->name));
return 0;
}
@@ -1185,13 +1185,13 @@ static DocAnchor *handleAnchor(DocNode *parent)
tok=doctokenizerYYlex();
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
"argument of command %s",qPrint(g_token->name));
return 0;
}
else if (tok!=TK_WORD && tok!=TK_LNKWORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(g_token->name));
return 0;
}
@@ -1306,7 +1306,7 @@ reparsetoken:
doctokenizerYYsetStateHtmlOnly();
tok = doctokenizerYYlex();
children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: htmlonly section ended without end marker");
+ if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"htmlonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -1315,7 +1315,7 @@ reparsetoken:
doctokenizerYYsetStateManOnly();
tok = doctokenizerYYlex();
children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::ManOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: manonly section ended without end marker");
+ if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"manonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -1324,7 +1324,7 @@ reparsetoken:
doctokenizerYYsetStateRtfOnly();
tok = doctokenizerYYlex();
children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::RtfOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: rtfonly section ended without end marker");
+ if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"rtfonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -1333,7 +1333,7 @@ reparsetoken:
doctokenizerYYsetStateLatexOnly();
tok = doctokenizerYYlex();
children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: latexonly section ended without end marker",doctokenizerYYlineno);
+ if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"latexonly section ended without end marker",doctokenizerYYlineno);
doctokenizerYYsetStatePara();
}
break;
@@ -1342,7 +1342,7 @@ reparsetoken:
doctokenizerYYsetStateXmlOnly();
tok = doctokenizerYYlex();
children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::XmlOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: xmlonly section ended without end marker",doctokenizerYYlineno);
+ if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"xmlonly section ended without end marker",doctokenizerYYlineno);
doctokenizerYYsetStatePara();
}
break;
@@ -1351,7 +1351,7 @@ reparsetoken:
doctokenizerYYsetStateDbOnly();
tok = doctokenizerYYlex();
children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::DocbookOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: xmlonly section ended without end marker",doctokenizerYYlineno);
+ if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"xmlonly section ended without end marker",doctokenizerYYlineno);
doctokenizerYYsetStatePara();
}
break;
@@ -1390,10 +1390,10 @@ reparsetoken:
switch (Mappers::htmlTagMapper->map(tokenName))
{
case HTML_DIV:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <div> tag in heading\n");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found <div> tag in heading\n");
break;
case HTML_PRE:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <pre> tag in heading\n");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found <pre> tag in heading\n");
break;
case HTML_BOLD:
if (!g_token->endTag)
@@ -1534,20 +1534,20 @@ static int handleDocCopy(DocNode *parent,QList<DocNode> &children)
int cmdId = Mappers::cmdMapper->map(g_token->name);
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(g_token->name));
return 0;
}
tok=doctokenizerYYlex();
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
"argument of command %s\n", qPrint(g_token->name));
return 0;
}
else if (tok!=TK_WORD && tok!=TK_LNKWORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(g_token->name));
return 0;
}
@@ -1559,6 +1559,34 @@ static int handleDocCopy(DocNode *parent,QList<DocNode> &children)
return TK_NEWPARA;
}
+//---------------------------------------------------------------------------
+
+static void handleImg(DocNode *parent,QList<DocNode> &children,const HtmlAttribList &tagHtmlAttribs)
+{
+ HtmlAttribListIterator li(tagHtmlAttribs);
+ HtmlAttrib *opt;
+ bool found=FALSE;
+ int index=0;
+ for (li.toFirst();(opt=li.current());++li,++index)
+ {
+ //printf("option name=%s value=%s\n",opt->name.data(),opt->value.data());
+ if (opt->name=="src" && !opt->value.isEmpty())
+ {
+ // copy attributes
+ HtmlAttribList attrList = tagHtmlAttribs;
+ // and remove the src attribute
+ bool result = attrList.remove(index);
+ ASSERT(result);
+ DocImage *img = new DocImage(parent,attrList,opt->value,DocImage::Html,opt->value);
+ children.append(img);
+ found = TRUE;
+ }
+ }
+ if (!found)
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"IMG tag does not have a SRC attribute!\n");
+ }
+}
//---------------------------------------------------------------------------
@@ -1769,14 +1797,14 @@ static void readTextFileByName(const QCString &file,QCString &text)
}
else if (ambig)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included file name %s is ambiguous"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"included file name %s is ambiguous"
"Possible candidates:\n%s",qPrint(file),
qPrint(showFileDefMatches(Doxygen::exampleNameDict,file))
);
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included file %s is not found. "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"included file %s is not found. "
"Check your EXAMPLE_PATH",qPrint(file));
}
}
@@ -1786,7 +1814,7 @@ static void readTextFileByName(const QCString &file,QCString &text)
DocWord::DocWord(DocNode *parent,const QCString &word) :
m_word(word)
{
- m_parent = parent;
+ m_parent = parent;
//printf("new word %s url=%s\n",word.data(),g_searchUrl.data());
if (Doxygen::searchIndex && !g_searchUrl.isEmpty())
{
@@ -1819,7 +1847,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
m_parent = parent;
if (id.isEmpty())
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Empty anchor label");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Empty anchor label");
}
if (newAnchor) // found <a name="label">
{
@@ -1835,7 +1863,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid cite anchor id `%s'",qPrint(id));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid cite anchor id `%s'",qPrint(id));
m_anchor = "invalid";
m_file = "invalid";
}
@@ -1856,7 +1884,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid anchor id `%s'",qPrint(id));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid anchor id `%s'",qPrint(id));
m_anchor = "invalid";
m_file = "invalid";
}
@@ -1906,7 +1934,7 @@ void DocInclude::parse()
int count;
if (!m_blockId.isEmpty() && (count=m_text.contains(m_blockId.data()))!=2)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: block marked with %s for \\snippet should appear twice in file %s, found it %d times\n",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"block marked with %s for \\snippet should appear twice in file %s, found it %d times\n",
m_blockId.data(),m_file.data(),count);
}
break;
@@ -2116,13 +2144,13 @@ void DocCopy::parse(QList<DocNode> &children)
}
else // oops, recursion
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: recursive call chain of \\copydoc commands detected at %d\n",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"recursive call chain of \\copydoc commands detected at %d\n",
doctokenizerYYlineno);
}
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: target %s of \\copydoc command not found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"target %s of \\copydoc command not found",
qPrint(m_link));
}
}
@@ -2239,15 +2267,15 @@ void DocSecRefItem::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\refitem",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\refitem",
qPrint(g_token->name));
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -2271,13 +2299,13 @@ void DocSecRefItem::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: reference to unknown section %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"reference to unknown section %s",
qPrint(m_target));
}
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: reference to empty target");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"reference to empty target");
}
DBG(("DocSecRefItem::parse() end\n"));
@@ -2307,13 +2335,13 @@ void DocSecRefList::parse()
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after \\refitem command");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after \\refitem command");
break;
}
tok=doctokenizerYYlex();
if (tok!=TK_WORD && tok!=TK_LNKWORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of \\refitem",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of \\refitem",
tokToString(tok));
break;
}
@@ -2326,7 +2354,7 @@ void DocSecRefList::parse()
case CMD_ENDSECREFLIST:
goto endsecreflist;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\secreflist",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\secreflist",
qPrint(g_token->name));
goto endsecreflist;
}
@@ -2337,7 +2365,7 @@ void DocSecRefList::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s inside section reference list",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s inside section reference list",
tokToString(tok));
goto endsecreflist;
}
@@ -2381,15 +2409,15 @@ void DocInternalRef::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\ref",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\ref",
qPrint(g_token->name));
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -2476,7 +2504,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
}
}
m_text = target;
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve reference to `%s' for \\ref command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\ref command",
qPrint(target));
}
@@ -2522,17 +2550,17 @@ void DocRef::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\ref",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\ref",
qPrint(g_token->name));
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
case TK_HTMLTAG:
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -2578,7 +2606,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
return;
}
m_text = linkToText(SrcLangExt_Unknown,target,FALSE);
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve reference to `%s' for \\cite command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\cite command",
qPrint(target));
}
@@ -2616,7 +2644,7 @@ DocLink::DocLink(DocNode *parent,const QCString &target)
}
// bogus link target
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve link to `%s' for \\link command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve link to `%s' for \\link command",
qPrint(target));
}
@@ -2640,23 +2668,23 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
case CMD_ENDLINK:
if (isJavaLink)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: {@link.. ended with @endlink command");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"{@link.. ended with @endlink command");
}
goto endlink;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\link",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\link",
qPrint(g_token->name));
break;
}
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
case TK_HTMLTAG:
if (g_token->name!="see" || !isXmlLink)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected xml/html command %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected xml/html command %s found",
qPrint(g_token->name));
}
goto endlink;
@@ -2684,7 +2712,7 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
m_children.append(new DocWord(this,g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -2692,7 +2720,7 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
}
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
" link command\n");
}
endlink:
@@ -2732,15 +2760,15 @@ void DocDotFile::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\dotfile",
+ 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,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -2759,7 +2787,7 @@ void DocDotFile::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
qPrint(g_token->name));
}
tok=doctokenizerYYlex();
@@ -2780,14 +2808,14 @@ void DocDotFile::parse()
}
else if (ambig)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included dot file name %s is ambiguous.\n"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"included dot file name %s is ambiguous.\n"
"Possible candidates:\n%s",qPrint(m_name),
qPrint(showFileDefMatches(Doxygen::exampleNameDict,m_name))
);
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included dot file %s is not found "
+ 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));
}
@@ -2816,15 +2844,15 @@ void DocMscFile::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\mscfile",
+ 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,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -2843,7 +2871,7 @@ void DocMscFile::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
qPrint(g_token->name));
}
tok=doctokenizerYYlex();
@@ -2864,14 +2892,14 @@ void DocMscFile::parse()
}
else if (ambig)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included msc file name %s is ambiguous.\n"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"included msc file name %s is ambiguous.\n"
"Possible candidates:\n%s",qPrint(m_name),
qPrint(showFileDefMatches(Doxygen::exampleNameDict,m_name))
);
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included msc file %s is not found "
+ 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));
}
@@ -2901,15 +2929,15 @@ void DocVhdlFlow::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\mscfile",
+ 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,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -2962,15 +2990,15 @@ void DocImage::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\image",
+ 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,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -2990,7 +3018,7 @@ void DocImage::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option %s after image title",
qPrint(g_token->name));
}
tok=doctokenizerYYlex();
@@ -3020,7 +3048,7 @@ int DocHtmlHeader::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <h%d> tag",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a <h%d> tag",
qPrint(g_token->name),m_level);
break;
case TK_HTMLTAG:
@@ -3030,7 +3058,7 @@ int DocHtmlHeader::parse()
{
if (m_level!=1)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h1>",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h1>",
m_level);
}
goto endheader;
@@ -3039,7 +3067,7 @@ int DocHtmlHeader::parse()
{
if (m_level!=2)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h2>",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h2>",
m_level);
}
goto endheader;
@@ -3048,7 +3076,7 @@ int DocHtmlHeader::parse()
{
if (m_level!=3)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h3>",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h3>",
m_level);
}
goto endheader;
@@ -3057,7 +3085,7 @@ int DocHtmlHeader::parse()
{
if (m_level!=4)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h4>",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h4>",
m_level);
}
goto endheader;
@@ -3066,7 +3094,7 @@ int DocHtmlHeader::parse()
{
if (m_level!=5)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h5>",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h5>",
m_level);
}
goto endheader;
@@ -3075,7 +3103,7 @@ int DocHtmlHeader::parse()
{
if (m_level!=6)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h6>",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"<h%d> ended with </h6>",
m_level);
}
goto endheader;
@@ -3094,18 +3122,18 @@ int DocHtmlHeader::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <h%d> context",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <h%d> context",
g_token->endTag?"/":"",qPrint(g_token->name),m_level);
}
}
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -3113,7 +3141,7 @@ int DocHtmlHeader::parse()
}
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
" <h%d> tag\n",m_level);
}
endheader:
@@ -3140,14 +3168,15 @@ int DocHRef::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <a>..</a> block",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a <a>..</a> block",
qPrint(g_token->name));
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
case TK_HTMLTAG:
+
{
int tagId=Mappers::htmlTagMapper->map(g_token->name);
if (tagId==HTML_A && g_token->endTag) // found </a> tag
@@ -3156,13 +3185,13 @@ int DocHRef::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <a href=...> context",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <a href=...> context",
g_token->endTag?"/":"",qPrint(g_token->name),doctokenizerYYlineno);
}
}
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok),doctokenizerYYlineno);
break;
}
@@ -3170,7 +3199,7 @@ int DocHRef::parse()
}
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
" <a href=...> tag",doctokenizerYYlineno);
}
endhref:
@@ -3208,7 +3237,7 @@ int DocInternal::parse(int level)
}
if (retval==TK_LISTITEM)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found",doctokenizerYYlineno);
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid list item found",doctokenizerYYlineno);
}
else if (retval==RetVal_CopyDoc)
{
@@ -3237,7 +3266,7 @@ int DocInternal::parse(int level)
if (retval==RetVal_Internal)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: \\internal command found inside internal section");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"\\internal command found inside internal section");
}
DBG(("DocInternal::parse() end\n"));
@@ -3256,7 +3285,7 @@ int DocIndexEntry::parse()
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after \\addindex command");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after \\addindex command");
goto endindexentry;
}
doctokenizerYYsetStateTitle();
@@ -3295,7 +3324,7 @@ int DocIndexEntry::parse()
case DocSymbol::Ndash: m_entry+="--"; break;
case DocSymbol::Mdash: m_entry+="---"; break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected symbol found as argument of \\addindex");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected symbol found as argument of \\addindex");
break;
}
}
@@ -3314,13 +3343,13 @@ int DocIndexEntry::parse()
case CMD_PERCENT: m_entry+='%'; break;
case CMD_QUOTE: m_entry+='"'; break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected command %s found as argument of \\addindex",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command %s found as argument of \\addindex",
qPrint(g_token->name));
break;
}
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -3350,11 +3379,11 @@ int DocHtmlCaption::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <caption> tag",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a <caption> tag",
qPrint(g_token->name));
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
case TK_HTMLTAG:
@@ -3367,13 +3396,13 @@ int DocHtmlCaption::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <caption> context",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <caption> context",
g_token->endTag?"/":"",qPrint(g_token->name));
}
}
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -3381,7 +3410,7 @@ int DocHtmlCaption::parse()
}
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
" <caption> tag",doctokenizerYYlineno);
}
endcaption:
@@ -3548,7 +3577,7 @@ int DocHtmlRow::parse()
}
else // found some other tag
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <td> or <th> tag but "
"found <%s> instead!",qPrint(g_token->name));
doctokenizerYYpushBackHtmlTag(g_token->name);
goto endrow;
@@ -3556,13 +3585,13 @@ int DocHtmlRow::parse()
}
else if (tok==0) // premature end of comment
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
" for a html description title");
goto endrow;
}
else // token other than html token
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but found %s token instead!",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <td> or <th> tag but found %s token instead!",
tokToString(tok));
goto endrow;
}
@@ -3612,7 +3641,7 @@ int DocHtmlRow::parseXml(bool isHeading)
}
else // found some other tag
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <term> or <description> tag but "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <term> or <description> tag but "
"found <%s> instead!",qPrint(g_token->name));
doctokenizerYYpushBackHtmlTag(g_token->name);
goto endrow;
@@ -3620,13 +3649,13 @@ int DocHtmlRow::parseXml(bool isHeading)
}
else if (tok==0) // premature end of comment
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
" for a html description title");
goto endrow;
}
else // token other than html token
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but found %s token instead!",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <td> or <th> tag but found %s token instead!",
tokToString(tok));
goto endrow;
}
@@ -3675,7 +3704,7 @@ getrow:
{
if (m_caption)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: table already has a caption, found another one");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"table already has a caption, found another one");
}
else
{
@@ -3690,18 +3719,18 @@ getrow:
}
else // found wrong token
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <tr> or <caption> tag but "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <tr> or <caption> tag but "
"found <%s%s> instead!", g_token->endTag ? "/" : "", qPrint(g_token->name));
}
}
else if (tok==0) // premature end of comment
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
" for a <tr> or <caption> tag");
}
else // token other than html token
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <tr> tag but found %s token instead!",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <tr> tag but found %s token instead!",
tokToString(tok));
}
@@ -3876,7 +3905,7 @@ int DocHtmlDescTitle::parse()
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(g_token->name));
}
else
@@ -3885,7 +3914,7 @@ int DocHtmlDescTitle::parse()
tok=doctokenizerYYlex(); // get the reference id
if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
}
else
@@ -3906,7 +3935,7 @@ int DocHtmlDescTitle::parse()
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
}
else
@@ -3915,7 +3944,7 @@ int DocHtmlDescTitle::parse()
tok=doctokenizerYYlex();
if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
}
else
@@ -3934,13 +3963,13 @@ int DocHtmlDescTitle::parse()
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <dt> tag",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a <dt> tag",
qPrint(g_token->name));
}
}
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
case TK_HTMLTAG:
@@ -3975,13 +4004,13 @@ int DocHtmlDescTitle::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <dt> context",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <dt> context",
g_token->endTag?"/":"",qPrint(g_token->name));
}
}
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -3989,7 +4018,7 @@ int DocHtmlDescTitle::parse()
}
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end of comment while inside"
" <dt> tag");
}
endtitle:
@@ -4049,7 +4078,7 @@ int DocHtmlDescList::parse()
}
else // found some other tag
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <dt> tag but "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <dt> tag but "
"found <%s> instead!",qPrint(g_token->name));
doctokenizerYYpushBackHtmlTag(g_token->name);
goto enddesclist;
@@ -4057,13 +4086,13 @@ int DocHtmlDescList::parse()
}
else if (tok==0) // premature end of comment
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
" for a html description title");
goto enddesclist;
}
else // token other than html token
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <dt> tag but found %s token instead!",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <dt> tag but found %s token instead!",
tokToString(tok));
goto enddesclist;
}
@@ -4088,7 +4117,7 @@ int DocHtmlDescList::parse()
if (retval==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <dl> block");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while inside <dl> block");
}
enddesclist:
@@ -4188,7 +4217,7 @@ int DocHtmlList::parse()
{
// add dummy item to obtain valid HTML
m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: empty list!");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"empty list!");
retval = RetVal_EndList;
goto endlist;
}
@@ -4196,7 +4225,7 @@ int DocHtmlList::parse()
{
// add dummy item to obtain valid HTML
m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <li> tag but "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <li> tag but "
"found <%s%s> instead!",g_token->endTag?"/":"",qPrint(g_token->name));
doctokenizerYYpushBackHtmlTag(g_token->name);
goto endlist;
@@ -4206,7 +4235,7 @@ int DocHtmlList::parse()
{
// add dummy item to obtain valid HTML
m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
" for a html list item");
goto endlist;
}
@@ -4214,7 +4243,7 @@ int DocHtmlList::parse()
{
// add dummy item to obtain valid HTML
m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <li> tag but found %s token instead!",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <li> tag but found %s token instead!",
tokToString(tok));
goto endlist;
}
@@ -4228,7 +4257,7 @@ int DocHtmlList::parse()
if (retval==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <%cl> block",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while inside <%cl> block",
m_type==Unordered ? 'u' : 'o');
}
@@ -4261,7 +4290,7 @@ int DocHtmlList::parseXml()
}
else // found some other tag
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <item> tag but "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <item> tag but "
"found <%s> instead!",qPrint(g_token->name));
doctokenizerYYpushBackHtmlTag(g_token->name);
goto endlist;
@@ -4269,13 +4298,13 @@ int DocHtmlList::parseXml()
}
else if (tok==0) // premature end of comment
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while looking"
" for a html list item");
goto endlist;
}
else // token other than html token
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <item> tag but found %s token instead!",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected <item> tag but found %s token instead!",
tokToString(tok));
goto endlist;
}
@@ -4291,7 +4320,7 @@ int DocHtmlList::parseXml()
if (retval==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <list type=\"%s\"> block",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment while inside <list type=\"%s\"> block",
m_type==Unordered ? "bullet" : "number");
}
@@ -4464,15 +4493,15 @@ void DocTitle::parse()
switch (tok)
{
case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a title section",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a title section",
qPrint(g_token->name));
break;
case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -4667,7 +4696,7 @@ int DocParamList::parse(const QCString &cmdName)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
}
doctokenizerYYsetStateParam();
@@ -4703,7 +4732,7 @@ int DocParamList::parse(const QCString &cmdName)
doctokenizerYYsetStatePara();
if (tok==0) /* premature end of comment block */
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
"argument of command %s",qPrint(cmdName));
retval=0;
goto endparamlist;
@@ -4777,7 +4806,7 @@ int DocParamList::parseXml(const QCString &paramName)
if (retval==0) /* premature end of comment block */
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unterminated param or exception tag");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unterminated param or exception tag");
}
else
{
@@ -4892,7 +4921,7 @@ void DocPara::handleCite()
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint("cite"));
return;
}
@@ -4900,13 +4929,13 @@ void DocPara::handleCite()
tok=doctokenizerYYlex();
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
"argument of command %s\n", qPrint("cite"));
return;
}
else if (tok!=TK_WORD && tok!=TK_LNKWORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint("cite"));
return;
}
@@ -4946,7 +4975,7 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
@@ -4955,13 +4984,13 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type
doctokenizerYYsetStatePara();
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
"argument of command %s", qPrint(cmdName));
return;
}
else if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
return;
}
@@ -4996,21 +5025,21 @@ void DocPara::handleImage(const QCString &cmdName)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
tok=doctokenizerYYlex();
if (tok!=TK_WORD && tok!=TK_LNKWORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
return;
}
tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
@@ -5021,7 +5050,7 @@ void DocPara::handleImage(const QCString &cmdName)
else if (imgType=="rtf") t=DocImage::Rtf;
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: image type %s specified as the first argument of "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"image type %s specified as the first argument of "
"%s is not valid",
qPrint(imgType),qPrint(cmdName));
return;
@@ -5031,7 +5060,7 @@ void DocPara::handleImage(const QCString &cmdName)
doctokenizerYYsetStatePara();
if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
return;
}
@@ -5046,7 +5075,7 @@ void DocPara::handleDotFile(const QCString &cmdName)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
@@ -5055,7 +5084,7 @@ void DocPara::handleDotFile(const QCString &cmdName)
doctokenizerYYsetStatePara();
if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
return;
}
@@ -5070,7 +5099,7 @@ void DocPara::handleMscFile(const QCString &cmdName)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
@@ -5079,7 +5108,7 @@ void DocPara::handleMscFile(const QCString &cmdName)
doctokenizerYYsetStatePara();
if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
return;
}
@@ -5101,7 +5130,7 @@ void DocPara::handleLink(const QCString &cmdName,bool isJavaLink)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
@@ -5109,7 +5138,7 @@ void DocPara::handleLink(const QCString &cmdName,bool isJavaLink)
tok=doctokenizerYYlex();
if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"%s as the argument of %s",
tokToString(tok),qPrint(cmdName));
return;
}
@@ -5129,7 +5158,7 @@ void DocPara::handleRef(const QCString &cmdName)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
@@ -5138,7 +5167,7 @@ void DocPara::handleRef(const QCString &cmdName)
DocRef *ref=0;
if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
goto endref;
}
@@ -5156,7 +5185,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
@@ -5165,13 +5194,13 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
doctokenizerYYsetStatePara();
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
"argument of command %s",qPrint(cmdName));
return;
}
else if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
return;
}
@@ -5184,7 +5213,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
doctokenizerYYsetStatePara();
if (tok!=TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected block identifier, but found token %s instead while parsing the %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected block identifier, but found token %s instead while parsing the %s command",
tokToString(tok),qPrint(cmdName));
return;
}
@@ -5201,20 +5230,20 @@ void DocPara::handleSection(const QCString &cmdName)
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
qPrint(cmdName));
return;
}
tok=doctokenizerYYlex();
if (tok==0)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
"argument of command %s\n", qPrint(cmdName));
return;
}
else if (tok!=TK_WORD && tok!=TK_LNKWORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
tokToString(tok),qPrint(cmdName));
return;
}
@@ -5257,7 +5286,7 @@ int DocPara::handleStartCode()
i++;
}
m_children.append(new DocVerbatim(this,g_context,stripIndentation(g_token->verb.mid(li)),DocVerbatim::Code,g_isExample,g_exampleName,lang));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: code section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"code section ended without end marker");
doctokenizerYYsetStatePara();
return retval;
}
@@ -5299,7 +5328,7 @@ int DocPara::handleCommand(const QCString &cmdName)
switch (cmdId)
{
case CMD_UNKNOWN:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Found unknown command `\\%s'",qPrint(cmdName));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Found unknown command `\\%s'",qPrint(cmdName));
break;
case CMD_EMPHASIS:
m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Italic,TRUE));
@@ -5445,7 +5474,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateHtmlOnly();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: htmlonly section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"htmlonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -5454,7 +5483,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateManOnly();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::ManOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: manonly section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"manonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -5463,7 +5492,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateRtfOnly();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::RtfOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: rtfonly section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"rtfonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -5472,7 +5501,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateLatexOnly();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: latexonly section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"latexonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -5481,7 +5510,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateXmlOnly();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::XmlOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: xmlonly section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"xmlonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -5490,7 +5519,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateVerbatim();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Verbatim,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: verbatim section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"verbatim section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -5499,7 +5528,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateDot();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Dot,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: dot section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"dot section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -5508,7 +5537,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateMsc();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Msc,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: msc section ended without end marker");
+ if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"msc section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
@@ -5522,10 +5551,8 @@ int DocPara::handleCommand(const QCString &cmdName)
case CMD_ENDLINK:
case CMD_ENDVERBATIM:
case CMD_ENDDOT:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
- break;
case CMD_ENDMSC:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
break;
case CMD_PARAM:
retval = handleParamSection(cmdName,DocParamSect::Param,FALSE,g_token->paramDir);
@@ -5637,10 +5664,10 @@ int DocPara::handleCommand(const QCString &cmdName)
}
break;
case CMD_SECREFITEM:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
break;
case CMD_ENDSECREFLIST:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
break;
case CMD_FORMULA:
{
@@ -5652,7 +5679,7 @@ int DocPara::handleCommand(const QCString &cmdName)
// retval = handleLanguageSwitch();
// break;
case CMD_INTERNALREF:
- //warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
+ //warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected command %s",qPrint(g_token->name));
{
DocInternalRef *ref = handleInternalRef(this);
if (ref)
@@ -5706,7 +5733,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
if (g_token->emptyTag && !(tagId&XML_CmdMask) &&
tagId!=HTML_UNKNOWN && tagId!=HTML_IMG && tagId!=HTML_BR)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: HTML tags may not use the 'empty tag' XHTML syntax.");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"HTML tags may not use the 'empty tag' XHTML syntax.");
}
switch (tagId)
{
@@ -5727,7 +5754,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
case HTML_LI:
if (!insideUL(this) && !insideOL(this))
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: lonely <li> tag found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"lonely <li> tag found");
}
else
{
@@ -5790,7 +5817,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
retval = RetVal_DescTitle;
break;
case HTML_DD:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag <dd> found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag <dd> found");
break;
case HTML_TABLE:
{
@@ -5809,7 +5836,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
retval = RetVal_TableHCell;
break;
case HTML_CAPTION:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag <caption> found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag <caption> found");
break;
case HTML_BR:
{
@@ -5846,29 +5873,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
break;
case HTML_IMG:
{
- HtmlAttribListIterator li(tagHtmlAttribs);
- HtmlAttrib *opt;
- bool found=FALSE;
- int index=0;
- for (li.toFirst();(opt=li.current());++li,++index)
- {
- //printf("option name=%s value=%s\n",opt->name.data(),opt->value.data());
- if (opt->name=="src" && !opt->value.isEmpty())
- {
- // copy attributes
- HtmlAttribList attrList = tagHtmlAttribs;
- // and remove the src attribute
- bool result = attrList.remove(index);
- ASSERT(result);
- DocImage *img = new DocImage(this,attrList,opt->value,DocImage::Html,opt->value);
- m_children.append(img);
- found = TRUE;
- }
- }
- if (!found)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: IMG tag does not have a SRC attribute!\n");
- }
+ handleImg(this,m_children,tagHtmlAttribs);
}
break;
case HTML_BLOCKQUOTE:
@@ -5910,7 +5915,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
{
if (Config_getBool("WARN_NO_PARAMDOC"))
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: empty 'name' attribute for <param> tag.");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"empty 'name' attribute for <param> tag.");
}
}
else
@@ -5922,7 +5927,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <param> tag.");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'name' attribute from <param> tag.");
}
}
break;
@@ -5940,7 +5945,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <param%sref> tag.",tagId==XML_PARAMREF?"":"type");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'name' attribute from <param%sref> tag.",tagId==XML_PARAMREF?"":"type");
}
}
break;
@@ -5953,7 +5958,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <exception> tag.");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'name' attribute from <exception> tag.");
}
}
break;
@@ -5969,7 +5974,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: lonely <item> tag found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"lonely <item> tag found");
}
break;
case XML_RETURNS:
@@ -6018,7 +6023,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'cref' attribute from <see> tag.");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'cref' attribute from <see> tag.");
}
}
break;
@@ -6050,7 +6055,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'cref' attribute from <seealso> tag.");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Missing 'cref' attribute from <seealso> tag.");
}
}
break;
@@ -6083,7 +6088,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
// These tags are defined in .Net but are currently unsupported
break;
case HTML_UNKNOWN:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported xml/html tag <%s> found", qPrint(tagName));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported xml/html tag <%s> found", qPrint(tagName));
m_children.append(new DocWord(this, "<"+tagName+tagHtmlAttribs.toString()+">"));
break;
case XML_INHERITDOC:
@@ -6108,7 +6113,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
case HTML_UL:
if (!insideUL(this))
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </ul> tag without matching <ul>");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found </ul> tag without matching <ul>");
}
else
{
@@ -6118,7 +6123,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
case HTML_OL:
if (!insideOL(this))
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </ol> tag without matching <ol>");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found </ol> tag without matching <ol>");
}
else
{
@@ -6128,7 +6133,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
case HTML_LI:
if (!insideLI(this))
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </li> tag without matching <li>");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found </li> tag without matching <li>");
}
else
{
@@ -6141,7 +6146,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
//case HTML_PRE:
// if (!insidePRE(this))
// {
- // warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </pre> tag without matching <pre>");
+ // warn_doc_error(g_fileName,doctokenizerYYlineno,"found </pre> tag without matching <pre>");
// }
// else
// {
@@ -6205,28 +6210,37 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
// ignore </th> tag
break;
case HTML_CAPTION:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </caption> found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </caption> found");
break;
case HTML_BR:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal </br> tag found\n");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal </br> tag found\n");
break;
case HTML_H1:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h1> found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h1> found");
break;
case HTML_H2:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h2> found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h2> found");
break;
case HTML_H3:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h3> found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h3> found");
+ break;
+ case HTML_H4:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h4> found");
+ break;
+ case HTML_H5:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h5> found");
+ break;
+ case HTML_H6:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </h6> found");
break;
case HTML_IMG:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </img> found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </img> found");
break;
case HTML_HR:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </hr> found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </hr> found");
break;
case HTML_A:
- //warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </a> found");
+ //warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag </a> found");
// ignore </a> tag (can be part of <a name=...></a>
break;
@@ -6261,7 +6275,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
// These tags are defined in .Net but are currently unsupported
break;
case HTML_UNKNOWN:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported xml/html tag </%s> found", qPrint(tagName));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported xml/html tag </%s> found", qPrint(tagName));
m_children.append(new DocWord(this,"</"+tagName+">"));
break;
default:
@@ -6419,13 +6433,13 @@ reparsetoken:
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: End of list marker found "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"End of list marker found "
"has invalid indent level");
}
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: End of list marker found without any preceding "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"End of list marker found without any preceding "
"list items");
}
break;
@@ -6537,7 +6551,7 @@ reparsetoken:
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
}
break;
@@ -6573,7 +6587,7 @@ reparsetoken:
break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: Found unexpected token (id=%x)\n",tok);
+ "Found unexpected token (id=%x)\n",tok);
break;
}
}
@@ -6634,7 +6648,7 @@ int DocSection::parse()
}
if (retval==TK_LISTITEM)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid list item found");
}
else if (retval==RetVal_CopyDoc)
{
@@ -6696,7 +6710,7 @@ int DocSection::parse()
if (retval==RetVal_Subsection) level=2;
else if (retval==RetVal_Subsubsection) level=3;
else level=4;
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected %s "
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected %s "
"command found inside %s!",
sectionLevelToName[level],sectionLevelToName[m_level]);
retval=0; // stop parsing
@@ -6755,7 +6769,7 @@ void DocText::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
}
}
@@ -6794,13 +6808,13 @@ void DocText::parse()
m_children.append(new DocSymbol(this,DocSymbol::Quot));
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected command `%s' found",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command `%s' found",
qPrint(g_token->name));
break;
}
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
break;
}
@@ -6842,19 +6856,19 @@ void DocRoot::parse()
}
if (retval==TK_LISTITEM)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid list item found");
}
else if (retval==RetVal_Subsection)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found subsection command outside of section context!");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found subsection command outside of section context!");
}
else if (retval==RetVal_Subsubsection)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found subsubsection command outside of subsection context!");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found subsubsection command outside of subsection context!");
}
else if (retval==RetVal_Paragraph)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found paragraph command outside of subsubsection context!");
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"found paragraph command outside of subsubsection context!");
}
else if (retval==RetVal_CopyDoc)
{
@@ -6877,7 +6891,7 @@ void DocRoot::parse()
}
else
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid section id `%s'; ignoring section",qPrint(g_token->sectionId));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid section id `%s'; ignoring section",qPrint(g_token->sectionId));
retval = 0;
}
}
@@ -6899,7 +6913,7 @@ void DocRoot::parse()
//--------------------------------------------------------------------------
-DocNode *validatingParseDoc(const char *fileName,int startLine,
+DocRoot *validatingParseDoc(const char *fileName,int startLine,
Definition *ctx,MemberDef *md,
const char *input,bool indexWords,
bool isExample, const char *exampleName,
@@ -7062,8 +7076,13 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
//printf("Starting comment block at %s:%d\n",g_fileName.data(),startLine);
doctokenizerYYlineno=startLine;
- doctokenizerYYinit(input,g_fileName);
-
+ QCString inpStr=input;
+ uint inpLen = inpStr.length();
+ if (inpLen>0 && inpStr.at(inpLen-1)!='\n')
+ {
+ inpStr+='\n';
+ }
+ doctokenizerYYinit(inpStr,g_fileName);
// build abstract syntax tree
DocRoot *root = new DocRoot(md!=0,singleLine);
@@ -7095,7 +7114,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
return root;
}
-DocNode *validatingParseText(const char *input)
+DocText *validatingParseText(const char *input)
{
// store parser state so we can re-enter this function if needed
docParserPushContext();
diff --git a/src/docparser.h b/src/docparser.h
index 227974a..b80e5e1 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -56,7 +56,7 @@ class SectionDict;
* @returns Root node of the abstract syntax tree. Ownership of the
* pointer is handed over to the caller.
*/
-DocNode *validatingParseDoc(const char *fileName,int startLine,
+DocRoot *validatingParseDoc(const char *fileName,int startLine,
Definition *context, MemberDef *md,
const char *input,bool indexWords,
bool isExample,const char *exampleName=0,
@@ -65,7 +65,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
/*! Main entry point for parsing simple text fragments. These
* fragments are limited to words, whitespace and symbols.
*/
-DocNode *validatingParseText(const char *input);
+DocText *validatingParseText(const char *input);
/*! Searches for section and anchor commands in the input */
void docFindSections(const char *input,
@@ -1265,6 +1265,7 @@ class DocText : public CompAccept<DocText>, public DocNode
Kind kind() const { return Kind_Text; }
void accept(DocVisitor *v) { CompAccept<DocText>::accept(this,v); }
void parse();
+ bool isEmpty() const { return m_children.isEmpty(); }
};
/** Root node of documentation tree */
@@ -1277,6 +1278,7 @@ class DocRoot : public CompAccept<DocRoot>, public DocNode
void parse();
bool indent() const { return m_indent; }
bool singleLine() const { return m_singleLine; }
+ bool isEmpty() const { return m_children.isEmpty(); }
private:
bool m_indent;
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index a84b073..c884976 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -337,7 +337,7 @@ ATTRNAME [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
ATTRIB {ATTRNAME}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=]
URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)+
-FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+]
+FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+@&#]
FILEECHAR [a-z_A-Z0-9\-\+]
HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)*
FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK}
@@ -1136,7 +1136,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
BEGIN(St_Sections);
}
<St_SecTitle,St_SecLabel1,St_SecLabel2>. {
- warn(g_fileName,yylineno,"warning: Unexpected character `%s' while looking for section label or title",yytext);
+ warn(g_fileName,yylineno,"Unexpected character `%s' while looking for section label or title",yytext);
}
<St_Snippet>[^\n]+ |
@@ -1148,15 +1148,15 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
/* Generic rules that work for all states */
<*>\n {
- warn(g_fileName,yylineno,"warning: Unexpected new line character");
+ warn(g_fileName,yylineno,"Unexpected new line character");
}
<*>[\\@<>&$#%~"=] { /* unescaped special character */
- //warn(g_fileName,yylineno,"warning: Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext);
+ //warn(g_fileName,yylineno,"Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext);
g_token->name = yytext;
return TK_COMMAND;
}
<*>. {
- warn(g_fileName,yylineno,"warning: Unexpected character `%s'",yytext);
+ warn(g_fileName,yylineno,"Unexpected character `%s'",yytext);
}
%%
diff --git a/src/dot.cpp b/src/dot.cpp
index 95c52fe..ffe1028 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -69,9 +69,11 @@ static const char svgZoomHeader[] =
"]]></style>\n"
"<script type=\"text/javascript\"><![CDATA[\n"
"var edges = document.getElementsByTagName('g');\n"
-"for (var i=0;i<edges.length;i++) {\n"
-" if (edges[i].id.substr(0,4)=='edge') {\n"
-" edges[i].setAttribute('class','edge');\n"
+"if (edges && edges.length) {\n"
+" for (var i=0;i<edges.length;i++) {\n"
+" if (edges[i].id.substr(0,4)=='edge') {\n"
+" edges[i].setAttribute('class','edge');\n"
+" }\n"
" }\n"
"}\n"
"]]></script>\n"
@@ -377,7 +379,7 @@ static bool convertMapFile(FTextStream &t,const char *mapName,
QFile f(mapName);
if (!f.open(IO_ReadOnly))
{
- err("error: problems opening map file %s for inclusion in the docs!\n"
+ err("problems opening map file %s for inclusion in the docs!\n"
"If you installed Graphviz/dot after a previous failing run, \n"
"try deleting the output directory and rerun doxygen.\n",mapName);
return FALSE;
@@ -671,7 +673,7 @@ static void checkDotResult(const QCString &imgName)
{
if (!(data[1]=='P' && data[2]=='N' && data[3]=='G'))
{
- err("error: Image `%s' produced by dot is not a valid PNG!\n"
+ err("Image `%s' produced by dot is not a valid PNG!\n"
"You should either select a different format "
"(DOT_IMAGE_FORMAT in the config file) or install a more "
"recent version of graphviz (1.7+)\n",imgName.data()
@@ -680,13 +682,13 @@ static void checkDotResult(const QCString &imgName)
}
else
{
- err("error: Could not read image `%s' generated by dot!\n",imgName.data());
+ err("Could not read image `%s' generated by dot!\n",imgName.data());
}
fclose(f);
}
else
{
- err("error: Could not open image `%s' generated by dot!\n",imgName.data());
+ err("Could not open image `%s' generated by dot!\n",imgName.data());
}
}
}
@@ -852,7 +854,7 @@ bool DotRunner::run()
}
if (!postCmd.isEmpty() && portable_system(postCmd,postArgs)!=0)
{
- err("error: Problems running '%s' as a post-processing step for dot output\n",m_postCmd.data());
+ err("Problems running '%s' as a post-processing step for dot output\n",m_postCmd.data());
return FALSE;
}
if (checkResult) checkDotResult(imageName);
@@ -969,13 +971,13 @@ bool DotFilePatcher::run()
QFile fo(m_patchFile);
if (!fi.open(IO_ReadOnly))
{
- err("error: problem opening file %s for patching!\n",tmpName.data());
+ err("problem opening file %s for patching!\n",tmpName.data());
QDir::current().rename(tmpName,m_patchFile);
return FALSE;
}
if (!fo.open(IO_WriteOnly))
{
- err("error: problem opening file %s for patching!\n",m_patchFile.data());
+ err("problem opening file %s for patching!\n",m_patchFile.data());
QDir::current().rename(tmpName,m_patchFile);
return FALSE;
}
@@ -1120,12 +1122,12 @@ bool DotFilePatcher::run()
QFile fo(orgName);
if (!fi.open(IO_ReadOnly))
{
- err("error: problem opening file %s for reading!\n",tmpName.data());
+ err("problem opening file %s for reading!\n",tmpName.data());
return FALSE;
}
if (!fo.open(IO_WriteOnly))
{
- err("error: problem opening file %s for writing!\n",orgName.data());
+ err("problem opening file %s for writing!\n",orgName.data());
return FALSE;
}
FTextStream t(&fo);
@@ -2270,7 +2272,7 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
// store the original directory
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",path); exit(1);
+ err("Output dir %s does not exist!\n",path); exit(1);
}
// put each connected subgraph of the hierarchy in a row of the HTML output
@@ -2699,7 +2701,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode,
{
DotNode *n = childQueue.take(0);
int distance = n->distance();
- if (!n->isVisible() && distance<maxDistance) // not yet processed
+ if (!n->isVisible() && distance<=maxDistance) // not yet processed
{
if (distance>0)
{
@@ -2728,7 +2730,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode,
if (includeParents && parentQueue.count()>0)
{
DotNode *n = parentQueue.take(0);
- if ((!n->isVisible() || firstNode) && n->distance()<maxDistance) // not yet processed
+ if ((!n->isVisible() || firstNode) && n->distance()<=maxDistance) // not yet processed
{
firstNode=FALSE;
int distance = n->distance();
@@ -3084,7 +3086,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
// store the original directory
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",path); exit(1);
+ err("Output dir %s does not exist!\n",path); exit(1);
}
static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
@@ -3325,7 +3327,7 @@ void DotInclDepGraph::determineVisibleNodes(QList<DotNode> &queue, int &maxNodes
{
static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH");
DotNode *n = queue.take(0);
- if (!n->isVisible() && n->distance()<maxDistance) // not yet processed
+ if (!n->isVisible() && n->distance()<=maxDistance) // not yet processed
{
n->markAsVisible();
maxNodes--;
@@ -3371,7 +3373,6 @@ void DotInclDepGraph::determineTruncatedNodes(QList<DotNode> &queue)
DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse)
{
- m_maxDistance = 0;
m_inverse = inverse;
ASSERT(fd!=0);
m_diskName = fd->getFileBase().copy();
@@ -3428,7 +3429,7 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
// store the original directory
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",path); exit(1);
+ err("Output dir %s does not exist!\n",path); exit(1);
}
static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
@@ -3572,14 +3573,14 @@ int DotCallGraph::m_curNodeNumber = 0;
void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance)
{
- LockingPtr<MemberSDict> refs = m_inverse ? md->getReferencedByMembers() : md->getReferencesMembers();
- if (!refs.isNull())
+ MemberSDict *refs = m_inverse ? md->getReferencedByMembers() : md->getReferencesMembers();
+ if (refs)
{
MemberSDict::Iterator mri(*refs);
MemberDef *rmd;
for (;(rmd=mri.current());++mri)
{
- if (rmd->isFunction() || rmd->isSlot() || rmd->isSignal())
+ if (rmd->showInCallGraph())
{
QCString uniqueId;
uniqueId=rmd->getReference()+"$"+
@@ -3629,7 +3630,7 @@ void DotCallGraph::determineVisibleNodes(QList<DotNode> &queue, int &maxNodes)
{
static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH");
DotNode *n = queue.take(0);
- if (!n->isVisible() && n->distance()<maxDistance) // not yet processed
+ if (!n->isVisible() && n->distance()<=maxDistance) // not yet processed
{
n->markAsVisible();
maxNodes--;
@@ -3676,7 +3677,6 @@ void DotCallGraph::determineTruncatedNodes(QList<DotNode> &queue)
DotCallGraph::DotCallGraph(MemberDef *md,bool inverse)
{
- m_maxDistance = 0;
m_inverse = inverse;
m_diskName = md->getOutputFileBase()+"_"+md->anchor();
m_scope = md->getOuterScope();
@@ -3732,7 +3732,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
// store the original directory
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",path); exit(1);
+ err("Output dir %s does not exist!\n",path); exit(1);
}
static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
@@ -3870,7 +3870,7 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
// store the original directory
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",path); exit(1);
+ err("Output dir %s does not exist!\n",path); exit(1);
}
static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
@@ -3995,7 +3995,7 @@ void generateGraphLegend(const char *path)
// store the original directory
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",path); exit(1);
+ err("Output dir %s does not exist!\n",path); exit(1);
}
QGString theGraph;
@@ -4070,7 +4070,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
QDir d(outDir);
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",outDir); exit(1);
+ err("Output dir %s does not exist!\n",outDir); exit(1);
}
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
@@ -4124,7 +4124,7 @@ void writeDotImageMapFromFile(FTextStream &t,
QDir d(outDir);
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",outDir.data()); exit(1);
+ err("Output dir %s does not exist!\n",outDir.data()); exit(1);
}
QCString mapName = baseName+".map";
@@ -4192,8 +4192,8 @@ void DotGroupCollaboration::buildGraph(GroupDef* gd)
// hierarchy.
// Write parents
- LockingPtr<GroupList> groups = gd->partOfGroups();
- if ( groups!=0 )
+ GroupList *groups = gd->partOfGroups();
+ if ( groups )
{
GroupListIterator gli(*groups);
GroupDef *d;
@@ -4386,7 +4386,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat fo
// store the original directory
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",path); exit(1);
+ err("Output dir %s does not exist!\n",path); exit(1);
}
static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
diff --git a/src/dot.h b/src/dot.h
index d746024..a02b32d 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -213,7 +213,6 @@ class DotInclDepGraph
QDict<DotNode> *m_usedNodes;
static int m_curNodeNumber;
QCString m_diskName;
- int m_maxDistance;
bool m_inverse;
};
@@ -237,7 +236,6 @@ class DotCallGraph
DotNode *m_startNode;
static int m_curNodeNumber;
QDict<DotNode> *m_usedNodes;
- int m_maxDistance;
int m_recDepth;
bool m_inverse;
QCString m_diskName;
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 4dd39e3..d97c0f6 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -155,7 +155,6 @@ SDict<DirRelation> Doxygen::dirRelations(257);
ParserManager *Doxygen::parserManager = 0;
QCString Doxygen::htmlFileExtension;
bool Doxygen::suppressDocWarnings = FALSE;
-ObjCache *Doxygen::symbolCache = 0;
Store *Doxygen::symbolStorage;
QCString Doxygen::objDBFileName;
QCString Doxygen::entryDBFileName;
@@ -208,7 +207,7 @@ void clearAll()
class Statistics
{
public:
- Statistics() {}
+ Statistics() { stats.setAutoDelete(TRUE); }
void begin(const char *name)
{
msg(name);
@@ -778,7 +777,7 @@ static void buildFileList(EntryNav *rootNav)
{
warn(
root->fileName,root->startLine,
- "warning: file %s already documented. "
+ "file %s already documented. "
"Skipping documentation.",
root->name.data()
);
@@ -812,7 +811,7 @@ static void buildFileList(EntryNav *rootNav)
{
const char *fn = root->fileName.data();
QCString text(4096);
- text.sprintf("warning: the name `%s' supplied as "
+ text.sprintf("the name `%s' supplied as "
"the second argument in the \\file statement ",
qPrint(root->name));
if (ambig) // name is ambiguous
@@ -867,7 +866,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
)
{ // explicit request
QCString text;
- text.sprintf("warning: the name `%s' supplied as "
+ text.sprintf("the name `%s' supplied as "
"the argument of the \\class, \\struct, \\union, or \\include command ",
qPrint(includeFile)
);
@@ -1442,7 +1441,7 @@ static void resolveClassNestingRelations()
d->addInnerCompound(cd);
cd->setOuterScope(d);
warn(cd->getDefFileName(),cd->getDefLine(),
- "warning: Internal inconsistency: scope for class %s not "
+ "Internal inconsistency: scope for class %s not "
"found!",name.data()
);
}
@@ -1515,7 +1514,7 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC
cd->setFileDef(fd);
fd->insertClass(cd);
}
- LockingPtr<GroupList> groups = rootCd->partOfGroups();
+ GroupList *groups = rootCd->partOfGroups();
if ( groups!=0 )
{
GroupListIterator gli(*groups);
@@ -2112,14 +2111,14 @@ static void findUsingDeclImports(EntryNav *rootNav)
//printf("found member %s\n",mni->memberName());
MemberDef *newMd = 0;
{
- LockingPtr<ArgumentList> templAl = md->templateArguments();
- LockingPtr<ArgumentList> al = md->templateArguments();
+ ArgumentList *templAl = md->templateArguments();
+ ArgumentList *al = md->templateArguments();
newMd = new MemberDef(
root->fileName,root->startLine,root->startColumn,
md->typeString(),memName,md->argsString(),
md->excpString(),root->protection,root->virt,
md->isStatic(),Member,md->memberType(),
- templAl.pointer(),al.pointer()
+ templAl,al
);
}
newMd->setMemberClass(cd);
@@ -3094,8 +3093,9 @@ static void addInterfaceOrServiceToServiceOrSingleton(
// add member to the class cd
cd->insertMember(md);
// also add the member as a "base" (to get nicer diagrams)
- // hmm... should "optional" interface/service be handled differently?
- BaseInfo base(rname,Public,Normal);
+ // "optional" interface/service get Protected which turns into dashed line
+ BaseInfo base(rname,
+ (root->spec & (Entry::Optional)) ? Protected : Public,Normal);
findClassRelation(rootNav,cd,cd,&base,0,DocumentedOnly,true)
|| findClassRelation(rootNav,cd,cd,&base,0,Undocumented,true);
// add file to list of used files
@@ -3154,7 +3154,7 @@ static void buildInterfaceAndServiceList(EntryNav *const rootNav)
else if (rname.isEmpty())
{
warn(root->fileName,root->startLine,
- "warning: Illegal member name found.");
+ "Illegal member name found.");
}
rootNav->releaseEntry();
@@ -3486,8 +3486,8 @@ static void buildFunctionList(EntryNav *rootNav)
if (rnd) rnsName = rnd->name().copy();
//printf("matching arguments for %s%s %s%s\n",
// md->name().data(),md->argsString(),rname.data(),argListToString(root->argList).data());
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- LockingPtr<ArgumentList> mdTempl = md->templateArguments();
+ ArgumentList *mdAl = md->argumentList();
+ ArgumentList *mdTempl = md->templateArguments();
// in case of template functions, we need to check if the
// functions have the same number of template parameters
@@ -3509,7 +3509,7 @@ static void buildFunctionList(EntryNav *rootNav)
root->stat && md->isStatic() && root->fileName!=md->getDefFileName();
if (
- matchArguments2(md->getOuterScope(),mfd,mdAl.pointer(),
+ matchArguments2(md->getOuterScope(),mfd,mdAl,
rnd ? rnd : Doxygen::globalScope,rfd,root->argList,
FALSE) &&
sameNumTemplateArgs &&
@@ -3543,7 +3543,7 @@ static void buildFunctionList(EntryNav *rootNav)
if (found)
{
// merge argument lists
- mergeArguments(mdAl.pointer(),root->argList,!root->doc.isEmpty());
+ mergeArguments(mdAl,root->argList,!root->doc.isEmpty());
// merge documentation
if (md->documentation().isEmpty() && !root->doc.isEmpty())
{
@@ -3762,7 +3762,7 @@ static void buildFunctionList(EntryNav *rootNav)
else if (rname.isEmpty())
{
warn(root->fileName,root->startLine,
- "warning: Illegal member name found."
+ "Illegal member name found."
);
}
@@ -3796,18 +3796,18 @@ static void findFriends()
//printf("Checking for matching arguments
// mmd->isRelated()=%d mmd->isFriend()=%d mmd->isFunction()=%d\n",
// mmd->isRelated(),mmd->isFriend(),mmd->isFunction());
- LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
- LockingPtr<ArgumentList> fmdAl = fmd->argumentList();
+ ArgumentList *mmdAl = mmd->argumentList();
+ ArgumentList *fmdAl = fmd->argumentList();
if ((mmd->isFriend() || (mmd->isRelated() && mmd->isFunction())) &&
- matchArguments2(mmd->getOuterScope(), mmd->getFileDef(), mmdAl.pointer(),
- fmd->getOuterScope(), fmd->getFileDef(), fmdAl.pointer(),
+ matchArguments2(mmd->getOuterScope(), mmd->getFileDef(), mmdAl,
+ fmd->getOuterScope(), fmd->getFileDef(), fmdAl,
TRUE
)
) // if the member is related and the arguments match then the
// function is actually a friend.
{
- mergeArguments(mmdAl.pointer(),fmdAl.pointer());
+ mergeArguments(mmdAl,fmdAl);
if (!fmd->documentation().isEmpty())
{
mmd->setDocumentation(fmd->documentation(),fmd->docFile(),fmd->docLine());
@@ -3914,17 +3914,17 @@ static void transferFunctionReferences()
}
if (mdef && mdec)
{
- LockingPtr<ArgumentList> mdefAl = mdef->argumentList();
- LockingPtr<ArgumentList> mdecAl = mdec->argumentList();
+ ArgumentList *mdefAl = mdef->argumentList();
+ ArgumentList *mdecAl = mdec->argumentList();
if (
- matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl.pointer(),
- mdec->getOuterScope(),mdec->getFileDef(),mdecAl.pointer(),
+ matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl,
+ mdec->getOuterScope(),mdec->getFileDef(),mdecAl,
TRUE
)
) /* match found */
{
- LockingPtr<MemberSDict> defDict = mdef->getReferencesMembers();
- LockingPtr<MemberSDict> decDict = mdec->getReferencesMembers();
+ MemberSDict *defDict = mdef->getReferencesMembers();
+ MemberSDict *decDict = mdec->getReferencesMembers();
if (defDict!=0)
{
MemberSDict::IteratorDict msdi(*defDict);
@@ -3933,8 +3933,7 @@ static void transferFunctionReferences()
{
if (decDict==0 || decDict->find(rmd->name())==0)
{
- printf("CURRENT_KEY:%s\n",msdi.currentKey().data());
- mdec->addSourceReferences(rmd,msdi.currentKey());
+ mdec->addSourceReferences(rmd);
}
}
}
@@ -3946,8 +3945,7 @@ static void transferFunctionReferences()
{
if (defDict==0 || defDict->find(rmd->name())==0)
{
- printf("CURRENT_KEY:%s\n",msdi.currentKey().data());
- mdef->addSourceReferences(rmd,msdi.currentKey());
+ mdef->addSourceReferences(rmd);
}
}
}
@@ -3962,7 +3960,7 @@ static void transferFunctionReferences()
{
if (decDict==0 || decDict->find(rmd->name())==0)
{
- mdec->addSourceReferencedBy(rmd,msdi.currentKey());
+ mdec->addSourceReferencedBy(rmd);
}
}
}
@@ -3974,7 +3972,7 @@ static void transferFunctionReferences()
{
if (defDict==0 || defDict->find(rmd->name())==0)
{
- mdef->addSourceReferencedBy(rmd,msdi.currentKey());
+ mdef->addSourceReferencedBy(rmd);
}
}
}
@@ -4007,12 +4005,12 @@ static void transferRelatedFunctionDocumentation()
MemberNameIterator rmni(*rmn);
for (rmni.toFirst();(rmd=rmni.current());++rmni) // for each member with the same name
{
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
+ ArgumentList *mdAl = md->argumentList();
+ ArgumentList *rmdAl = rmd->argumentList();
//printf(" Member found: related=`%d'\n",rmd->isRelated());
if ((rmd->isRelated() || rmd->isForeign()) && // related function
- matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
- rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
+ matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl,
+ rmd->getOuterScope(),rmd->getFileDef(),rmdAl,
TRUE
)
)
@@ -4592,7 +4590,13 @@ static bool findClassRelation(
// ) // Check for base class with the same name.
// // If found then look in the outer scope for a match
// // and prevent recursion.
- if (!isRecursiveBaseClass(rootNav->name(),baseClassName) || explicitGlobalScope)
+ if (!isRecursiveBaseClass(rootNav->name(),baseClassName)
+ || explicitGlobalScope
+ // sadly isRecursiveBaseClass always true for UNO IDL ifc/svc members
+ // (i.e. this is needed for addInterfaceOrServiceToServiceOrSingleton)
+ || (rootNav->lang()==SrcLangExt_IDL &&
+ (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC ||
+ rootNav->section()==Entry::INCLUDED_SERVICE_SEC)))
{
Debug::print(
Debug::Classes,0," class relation %s inherited/used by %s found (%s and %s) templSpec='%s'\n",
@@ -4983,7 +4987,7 @@ static void computeClassRelations()
)
warn_undoc(
root->fileName,root->startLine,
- "warning: Compound %s is not documented.",
+ "Compound %s is not documented.",
root->name.data()
);
}
@@ -5172,8 +5176,8 @@ static void addListReferences()
name = pd->getGroupDef()->getOutputFileBase();
}
{
- LockingPtr< QList<ListItemInfo> > xrefItems = pd->xrefListItems();
- addRefItem(xrefItems.pointer(),
+ QList<ListItemInfo> *xrefItems = pd->xrefListItems();
+ addRefItem(xrefItems,
name,
theTranslator->trPage(TRUE,TRUE),
name,pd->title(),0);
@@ -5188,8 +5192,8 @@ static void addListReferences()
//{
// name = dd->getGroupDef()->getOutputFileBase();
//}
- LockingPtr< QList<ListItemInfo> > xrefItems = dd->xrefListItems();
- addRefItem(xrefItems.pointer(),
+ QList<ListItemInfo> *xrefItems = dd->xrefListItems();
+ addRefItem(xrefItems,
name,
theTranslator->trDir(TRUE,TRUE),
name,dd->displayName(),0);
@@ -5244,23 +5248,23 @@ static void addMemberDocs(EntryNav *rootNav,
// TODO determine scope based on root not md
Definition *rscope = md->getOuterScope();
- LockingPtr<ArgumentList> mdAl = md->argumentList();
+ ArgumentList *mdAl = md->argumentList();
if (al)
{
//printf("merging arguments (1) docs=%d\n",root->doc.isEmpty());
- mergeArguments(mdAl.pointer(),al,!root->doc.isEmpty());
+ mergeArguments(mdAl,al,!root->doc.isEmpty());
}
else
{
if (
- matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
+ matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl,
rscope,rfd,root->argList,
TRUE
)
)
{
//printf("merging arguments (2)\n");
- mergeArguments(mdAl.pointer(),root->argList,!root->doc.isEmpty());
+ mergeArguments(mdAl,root->argList,!root->doc.isEmpty());
}
}
if (over_load) // the \overload keyword was used
@@ -5335,7 +5339,7 @@ static void addMemberDocs(EntryNav *rootNav,
{
warn(
root->fileName,root->startLine,
- "warning: member %s belongs to two different groups. The second "
+ "member %s belongs to two different groups. The second "
"one found here will be ignored.",
md->name().data()
);
@@ -5422,11 +5426,11 @@ static bool findGlobalMember(EntryNav *rootNav,
NamespaceDef *rnd = 0;
if (!namespaceName.isEmpty()) rnd = Doxygen::namespaceSDict->find(namespaceName);
- LockingPtr<ArgumentList> mdAl = md->argumentList();
+ ArgumentList *mdAl = md->argumentList();
bool matching=
(mdAl==0 && root->argList->count()==0) ||
md->isVariable() || md->isTypedef() || /* in case of function pointers */
- matchArguments2(md->getOuterScope(),md->getFileDef(),mdAl.pointer(),
+ matchArguments2(md->getOuterScope(),md->getFileDef(),mdAl,
rnd ? rnd : Doxygen::globalScope,fd,root->argList,
FALSE);
@@ -5435,8 +5439,8 @@ static bool findGlobalMember(EntryNav *rootNav,
// different functions.
if (matching && root->tArgLists)
{
- LockingPtr<ArgumentList> mdTempl = md->templateArguments();
- if (mdTempl!=0)
+ ArgumentList *mdTempl = md->templateArguments();
+ if (mdTempl)
{
if (root->tArgLists->getLast()->count()!=mdTempl->count())
{
@@ -5486,7 +5490,7 @@ static bool findGlobalMember(EntryNav *rootNav,
QCString fullFuncDecl=decl;
if (root->argList) fullFuncDecl+=argListToString(root->argList,TRUE);
QCString warnMsg =
- QCString("warning: no matching file member found for \n")+substitute(fullFuncDecl,"%","%%");
+ QCString("no matching file member found for \n")+substitute(fullFuncDecl,"%","%%");
if (mn->count()>0)
{
warnMsg+="\nPossible candidates:\n";
@@ -5511,7 +5515,7 @@ static bool findGlobalMember(EntryNav *rootNav,
)
{
warn(root->fileName,root->startLine,
- "warning: documented symbol `%s' was not declared or defined.",decl
+ "documented symbol `%s' was not declared or defined.",decl
);
}
}
@@ -6040,10 +6044,10 @@ static void findMember(EntryNav *rootNav,
// get the template parameter lists found at the member declaration
QList<ArgumentList> declTemplArgs;
cd->getTemplateParameterLists(declTemplArgs);
- LockingPtr<ArgumentList> templAl = md->templateArguments();
- if (templAl!=0)
+ ArgumentList *templAl = md->templateArguments();
+ if (templAl)
{
- declTemplArgs.append(templAl.pointer());
+ declTemplArgs.append(templAl);
}
// get the template parameter lists found at the member definition
@@ -6057,10 +6061,10 @@ static void findMember(EntryNav *rootNav,
/* substitute the occurrences of class template names in the
* argument list before matching
*/
- LockingPtr<ArgumentList> mdAl = md->argumentList();
+ ArgumentList *mdAl = md->argumentList();
if (declTemplArgs.count()>0 && defTemplArgs &&
declTemplArgs.count()==defTemplArgs->count() &&
- mdAl.pointer()
+ mdAl
)
{
/* the function definition has template arguments
@@ -6070,13 +6074,13 @@ static void findMember(EntryNav *rootNav,
*/
argList = new ArgumentList;
substituteTemplatesInArgList(declTemplArgs,*defTemplArgs,
- mdAl.pointer(),argList);
+ mdAl,argList);
substDone=TRUE;
}
else /* no template arguments, compare argument lists directly */
{
- argList = mdAl.pointer();
+ argList = mdAl;
}
Debug::print(Debug::FindMembers,0,
@@ -6087,7 +6091,7 @@ static void findMember(EntryNav *rootNav,
bool matching=
md->isVariable() || md->isTypedef() || // needed for function pointers
- (mdAl.pointer()==0 && root->argList->count()==0) ||
+ (mdAl==0 && root->argList->count()==0) ||
matchArguments2(
md->getClassDef(),md->getFileDef(),argList,
cd,fd,root->argList,
@@ -6173,7 +6177,7 @@ static void findMember(EntryNav *rootNav,
//printf("ccd->name()==%s className=%s\n",ccd->name().data(),className.data());
if (ccd!=0 && rightScopeMatch(ccd->name(),className))
{
- LockingPtr<ArgumentList> templAl = md->templateArguments();
+ ArgumentList *templAl = md->templateArguments();
if (root->tArgLists && templAl!=0 &&
root->tArgLists->getLast()->count()<=templAl->count())
{
@@ -6220,7 +6224,7 @@ static void findMember(EntryNav *rootNav,
}
}
- QCString warnMsg = "warning: no ";
+ QCString warnMsg = "no ";
if (noMatchCount>1) warnMsg+="uniquely ";
warnMsg+="matching class member found for \n";
@@ -6250,11 +6254,11 @@ static void findMember(EntryNav *rootNav,
ClassDef *cd=md->getClassDef();
if (cd!=0 && rightScopeMatch(cd->name(),className))
{
- LockingPtr<ArgumentList> templAl = md->templateArguments();
+ ArgumentList *templAl = md->templateArguments();
if (templAl!=0)
{
warnMsg+=" 'template ";
- warnMsg+=tempArgListToString(templAl.pointer());
+ warnMsg+=tempArgListToString(templAl);
warnMsg+='\n';
}
warnMsg+=" ";
@@ -6404,7 +6408,7 @@ static void findMember(EntryNav *rootNav,
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
warn(root->fileName,root->startLine,
- "warning: Cannot determine class for function\n%s",
+ "Cannot determine class for function\n%s",
fullFuncDecl.data()
);
}
@@ -6448,11 +6452,11 @@ static void findMember(EntryNav *rootNav,
MemberDef *rmd=mn->first();
while (rmd && newMember) // see if we got another member with matching arguments
{
- LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
+ ArgumentList *rmdAl = rmd->argumentList();
newMember=
className!=rmd->getOuterScope()->name() ||
- !matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
+ !matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl,
cd,fd,root->argList,
TRUE);
if (newMember) rmd=mn->next();
@@ -6542,10 +6546,10 @@ static void findMember(EntryNav *rootNav,
MemberDef *rmd=rmn->first();
while (rmd && !found) // see if we got another member with matching arguments
{
- LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
+ ArgumentList *rmdAl = rmd->argumentList();
// check for matching argument lists
if (
- matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
+ matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl,
cd,fd,root->argList,
TRUE)
)
@@ -6612,7 +6616,7 @@ static void findMember(EntryNav *rootNav,
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
warn(root->fileName,root->startLine,
- "warning: Cannot determine file/namespace for relatedalso function\n%s",
+ "Cannot determine file/namespace for relatedalso function\n%s",
fullFuncDecl.data()
);
}
@@ -6621,7 +6625,7 @@ static void findMember(EntryNav *rootNav,
else
{
warn_undoc(root->fileName,root->startLine,
- "warning: class `%s' for related function `%s' is not "
+ "class `%s' for related function `%s' is not "
"documented.",
className.data(),funcName.data()
);
@@ -6686,14 +6690,14 @@ localObjCMethod:
if (className.isEmpty() && !globMem)
{
warn(root->fileName,root->startLine,
- "warning: class for member `%s' cannot "
+ "class for member `%s' cannot "
"be found.", funcName.data()
);
}
else if (!className.isEmpty() && !globMem)
{
warn(root->fileName,root->startLine,
- "warning: member `%s' of class `%s' cannot be found",
+ "member `%s' of class `%s' cannot be found",
funcName.data(),className.data());
}
}
@@ -6702,7 +6706,7 @@ localObjCMethod:
{
// this should not be called
warn(root->fileName,root->startLine,
- "warning: member with no name found.");
+ "member with no name found.");
}
return;
}
@@ -7428,7 +7432,7 @@ static void findEnumDocumentation(EntryNav *rootNav)
if (!found)
{
warn(root->fileName,root->startLine,
- "warning: Documentation for undefined enum `%s' found.",
+ "Documentation for undefined enum `%s' found.",
name.data()
);
}
@@ -7455,9 +7459,9 @@ static void findDEV(const MemberNameSDict &mnsd)
{
if (md->isEnumerate()) // member is an enum
{
- LockingPtr<MemberList> fmdl = md->enumFieldList();
+ MemberList *fmdl = md->enumFieldList();
int documentedEnumValues=0;
- if (fmdl!=0) // enum has values
+ if (fmdl) // enum has values
{
MemberListIterator fmni(*fmdl);
MemberDef *fmd;
@@ -7557,15 +7561,15 @@ static void computeMemberRelations()
mcd->isBaseClass(bmcd,TRUE))
{
//printf(" derived scope\n");
- LockingPtr<ArgumentList> bmdAl = bmd->argumentList();
- LockingPtr<ArgumentList> mdAl = md->argumentList();
+ ArgumentList *bmdAl = bmd->argumentList();
+ ArgumentList *mdAl = md->argumentList();
//printf(" Base argList=`%s'\n Super argList=`%s'\n",
// argListToString(bmdAl.pointer()).data(),
// argListToString(mdAl.pointer()).data()
// );
if (
- matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmdAl.pointer(),
- md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
+ matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmdAl,
+ md->getOuterScope(), md->getFileDef(), mdAl,
TRUE
)
)
@@ -7679,24 +7683,136 @@ static void generateFileSources()
{
if (Doxygen::inputNameList->count()>0)
{
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
+#if USE_LIBCLANG
+ static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
+ if (clangAssistedParsing)
{
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
+ QDict<void> g_processedFiles(10007);
+
+ // create a dictionary with files to process
+ QDict<void> g_filesToProcess(10007);
+ FileNameListIterator fnli(*Doxygen::inputNameList);
+ FileName *fn;
+ for (fnli.toFirst();(fn=fnli.current());++fnli)
+ {
+ FileNameIterator fni(*fn);
+ FileDef *fd;
+ for (;(fd=fni.current());++fni)
+ {
+ g_filesToProcess.insert(fd->absFilePath(),(void*)0x8);
+ }
+ }
+ // process source files (and their include dependencies)
+ for (fnli.toFirst();(fn=fnli.current());++fnli)
+ {
+ FileNameIterator fni(*fn);
+ FileDef *fd;
+ for (;(fd=fni.current());++fni)
+ {
+ if (fd->isSource() && !fd->isReference())
+ {
+ QStrList filesInSameTu;
+ fd->getAllIncludeFilesRecursively(filesInSameTu);
+ fd->startParsing();
+ if (fd->generateSourceFile()) // sources need to be shown in the output
+ {
+ msg("Generating code for file %s...\n",fd->docName().data());
+ fd->writeSource(*g_outputList,FALSE,filesInSameTu);
+
+ }
+ else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
+ // we needed to parse the sources even if we do not show them
+ {
+ msg("Parsing code for file %s...\n",fd->docName().data());
+ fd->parseSource(FALSE,filesInSameTu);
+ }
+
+ char *incFile = filesInSameTu.first();
+ while (incFile && g_filesToProcess.find(incFile))
+ {
+ if (fd->absFilePath()!=incFile && !g_processedFiles.find(incFile))
+ {
+ QStrList moreFiles;
+ bool ambig;
+ FileDef *ifd=findFileDef(Doxygen::inputNameDict,incFile,ambig);
+ if (ifd && !ifd->isReference())
+ {
+ if (ifd->generateSourceFile()) // sources need to be shown in the output
+ {
+ msg(" Generating code for file %s...\n",ifd->docName().data());
+ ifd->writeSource(*g_outputList,TRUE,moreFiles);
+
+ }
+ else if (!ifd->isReference() && Doxygen::parseSourcesNeeded)
+ // we needed to parse the sources even if we do not show them
+ {
+ msg(" Parsing code for file %s...\n",ifd->docName().data());
+ ifd->parseSource(TRUE,moreFiles);
+ }
+ g_processedFiles.insert(incFile,(void*)0x8);
+ }
+ }
+ incFile = filesInSameTu.next();
+ }
+ fd->finishParsing();
+ g_processedFiles.insert(fd->absFilePath(),(void*)0x8);
+ }
+ }
+ }
+ // process remaining files
+ for (fnli.toFirst();(fn=fnli.current());++fnli)
{
- if (fd->generateSourceFile()) // sources need to be shown in the output
+ FileNameIterator fni(*fn);
+ FileDef *fd;
+ for (;(fd=fni.current());++fni)
{
- msg("Generating code for file %s...\n",fd->docName().data());
- fd->writeSource(*g_outputList);
+ if (!g_processedFiles.find(fd->absFilePath())) // not yet processed
+ {
+ QStrList filesInSameTu;
+ fd->startParsing();
+ if (fd->generateSourceFile()) // sources need to be shown in the output
+ {
+ msg("Generating code for file %s...\n",fd->docName().data());
+ fd->writeSource(*g_outputList,FALSE,filesInSameTu);
+
+ }
+ else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
+ // we needed to parse the sources even if we do not show them
+ {
+ msg("Parsing code for file %s...\n",fd->docName().data());
+ fd->parseSource(FALSE,filesInSameTu);
+ }
+ fd->finishParsing();
+ }
}
- else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
- // we needed to parse the sources even if we do not show them
+ }
+ }
+ else
+#endif
+ {
+ FileNameListIterator fnli(*Doxygen::inputNameList);
+ FileName *fn;
+ for (;(fn=fnli.current());++fnli)
+ {
+ FileNameIterator fni(*fn);
+ FileDef *fd;
+ for (;(fd=fni.current());++fni)
{
- msg("Parsing code for file %s...\n",fd->docName().data());
- fd->parseSource();
+ QStrList filesInSameTu;
+ fd->startParsing();
+ if (fd->generateSourceFile()) // sources need to be shown in the output
+ {
+ msg("Generating code for file %s...\n",fd->docName().data());
+ fd->writeSource(*g_outputList,FALSE,filesInSameTu);
+
+ }
+ else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
+ // we needed to parse the sources even if we do not show them
+ {
+ msg("Parsing code for file %s...\n",fd->docName().data());
+ fd->parseSource(FALSE,filesInSameTu);
+ }
+ fd->finishParsing();
}
}
}
@@ -8304,7 +8420,7 @@ static void findDefineDocumentation(EntryNav *rootNav)
}
md=mn->next();
}
- //warn("warning: define %s found in the following files:\n",root->name.data());
+ //warn("define %s found in the following files:\n",root->name.data());
//warn("Cannot determine where to add the documentation found "
// "at line %d of file %s. \n",
// root->startLine,root->fileName.data());
@@ -8316,14 +8432,14 @@ static void findDefineDocumentation(EntryNav *rootNav)
if (preEnabled)
{
warn(root->fileName,root->startLine,
- "warning: documentation for unknown define %s found.\n",
+ "documentation for unknown define %s found.\n",
root->name.data()
);
}
else
{
warn(root->fileName,root->startLine,
- "warning: found documented #define but ignoring it because "
+ "found documented #define but ignoring it because "
"ENABLE_PREPROCESSING is NO.\n",
root->name.data()
);
@@ -8370,7 +8486,7 @@ static void findDirDocumentation(EntryNav *rootNav)
if (matchingDir)
{
warn(root->fileName,root->startLine,
- "warning: \\dir command matches multiple directories.\n"
+ "\\dir command matches multiple directories.\n"
" Applying the command for directory %s\n"
" Ignoring the command for directory %s\n",
matchingDir->name().data(),dir->name().data()
@@ -8392,7 +8508,7 @@ static void findDirDocumentation(EntryNav *rootNav)
}
else
{
- warn(root->fileName,root->startLine,"warning: No matching "
+ warn(root->fileName,root->startLine,"No matching "
"directory found for command \\dir %s\n",normalizedName.data());
}
rootNav->releaseEntry();
@@ -8474,7 +8590,7 @@ static void findMainPage(EntryNav *rootNav)
else
{
warn(root->fileName,root->startLine,
- "warning: found more than one \\mainpage comment block! Skipping this "
+ "found more than one \\mainpage comment block! Skipping this "
"block."
);
}
@@ -8530,7 +8646,7 @@ static void checkPageRelations()
{
if (ppd==pd)
{
- err("warning: page defined at line %d of file %s with label %s is a subpage "
+ err("page defined at line %d of file %s with label %s is a subpage "
"of itself! Please remove this cyclic dependency.\n",
pd->docLine(),pd->docFile().data(),pd->name().data());
exit(1);
@@ -8645,7 +8761,7 @@ static void buildExampleList(EntryNav *rootNav)
if (Doxygen::exampleSDict->find(root->name))
{
warn(root->fileName,root->startLine,
- "warning: Example %s was already documented. Ignoring "
+ "Example %s was already documented. Ignoring "
"documentation found here.",
root->name.data()
);
@@ -8707,7 +8823,7 @@ static void generateExampleDocs()
g_outputList->docify(pd->name());
endTitle(*g_outputList,n,0);
g_outputList->startContents();
- g_outputList->parseDoc(pd->docFile(), // file
+ g_outputList->generateDoc(pd->docFile(), // file
pd->docLine(), // startLine
pd, // context
0, // memberDef
@@ -8878,7 +8994,7 @@ static void generateConfigFile(const char *configFile,bool shortList,
}
else
{
- err("error: Cannot open file %s for writing\n",configFile);
+ err("Cannot open file %s for writing\n",configFile);
exit(1);
}
}
@@ -8918,7 +9034,7 @@ static void readTagFile(Entry *root,const char *tl)
QFileInfo fi(fileName);
if (!fi.exists() || !fi.isFile())
{
- err("error: Tag file `%s' does not exist or is not a file. Skipping it...\n",
+ err("Tag file `%s' does not exist or is not a file. Skipping it...\n",
fileName.data());
return;
}
@@ -9012,62 +9128,174 @@ static void copyExtraFiles(const QCString& filesOption,const QCString &outputOpt
}
}
+//----------------------------------------------------------------------------
+
+static ParserInterface *getParserForFile(const char *fn)
+{
+ QCString fileName=fn;
+ QCString extension;
+ int ei = fileName.findRev('.');
+ if (ei!=-1)
+ {
+ extension=fileName.right(fileName.length()-ei);
+ }
+ else
+ {
+ extension = ".no_extension";
+ }
+
+ return Doxygen::parserManager->getParser(extension);
+}
+
+static void parseFile(ParserInterface *parser,
+ Entry *root,EntryNav *rootNav,FileDef *fd,const char *fn,
+ bool sameTu,QStrList &filesInSameTu)
+{
+#if USE_LIBCLANG
+ static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
+#else
+ static bool clangAssistedParsing = FALSE;
+#endif
+ QCString fileName=fn;
+ QCString extension;
+ int ei = fileName.findRev('.');
+ if (ei!=-1)
+ {
+ extension=fileName.right(fileName.length()-ei);
+ }
+ else
+ {
+ extension = ".no_extension";
+ }
+
+ QFileInfo fi(fileName);
+ BufStr preBuf(fi.size()+4096);
+
+ if (Config_getBool("ENABLE_PREPROCESSING") &&
+ parser->needsPreprocessing(extension))
+ {
+ BufStr inBuf(fi.size()+4096);
+ msg("Preprocessing %s...\n",fn);
+ readInputFile(fileName,inBuf);
+ preprocessFile(fileName,inBuf,preBuf);
+ }
+ else // no preprocessing
+ {
+ msg("Reading %s...\n",fn);
+ readInputFile(fileName,preBuf);
+ }
+
+ BufStr convBuf(preBuf.curPos()+1024);
+
+ // convert multi-line C++ comments to C style comments
+ convertCppComments(&preBuf,&convBuf,fileName);
+
+ convBuf.addChar('\0');
+
+ if (clangAssistedParsing && !sameTu)
+ {
+ fd->getAllIncludeFilesRecursively(filesInSameTu);
+ }
+
+ // use language parse to parse the file
+ parser->parseInput(fileName,convBuf.data(),root,sameTu,filesInSameTu);
+
+ // store the Entry tree in a file and create an index to
+ // navigate/load entries
+ //printf("root->createNavigationIndex for %s\n",fd->name().data());
+ root->createNavigationIndex(rootNav,g_storage,fd);
+}
+
//! parse the list of input files
static void parseFiles(Entry *root,EntryNav *rootNav)
{
- QCString *s=g_inputFiles.first();
- while (s)
+#if USE_LIBCLANG
+ static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
+ if (clangAssistedParsing)
{
- QCString fileName=*s;
- QCString extension;
- int ei = fileName.findRev('.');
- if (ei!=-1)
- {
- extension=fileName.right(fileName.length()-ei);
- }
- else
+ QDict<void> g_processedFiles(10007);
+
+ // create a dictionary with files to process
+ QDict<void> g_filesToProcess(10007);
+ QCString *s=g_inputFiles.first();
+ while (s)
{
- extension = ".no_extension";
+ g_filesToProcess.insert(*s,(void*)0x8);
+ s=g_inputFiles.next();
}
+ s=g_inputFiles.first();
- ParserInterface *parser = Doxygen::parserManager->getParser(extension);
-
- QFileInfo fi(fileName);
- BufStr preBuf(fi.size()+4096);
+ // process source files (and their include dependencies)
+ while (s)
+ {
+ bool ambig;
+ FileDef *fd=findFileDef(Doxygen::inputNameDict,s->data(),ambig);
+ ASSERT(fd!=0);
+ if (fd->isSource() && !fd->isReference()) // this is a source file
+ {
+ QStrList filesInSameTu;
+ ParserInterface * parser = getParserForFile(s->data());
+ parser->startTranslationUnit(s->data());
+ parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+ //printf(" got %d extra files in tu\n",filesInSameTu.count());
- if (Config_getBool("ENABLE_PREPROCESSING") &&
- parser->needsPreprocessing(extension))
+ // Now process any include files in the same translation unit
+ // first. When libclang is used this is much more efficient.
+ char *incFile = filesInSameTu.first();
+ while (incFile && g_filesToProcess.find(incFile))
+ {
+ if (qstrcmp(incFile,s->data()) && !g_processedFiles.find(incFile))
+ {
+ FileDef *ifd=findFileDef(Doxygen::inputNameDict,incFile,ambig);
+ if (ifd && !ifd->isReference())
+ {
+ QStrList moreFiles;
+ //printf(" Processing %s in same translation unit as %s\n",incFile,s->data());
+ parseFile(parser,root,rootNav,ifd,incFile,TRUE,moreFiles);
+ g_processedFiles.insert(incFile,(void*)0x8);
+ }
+ }
+ incFile = filesInSameTu.next();
+ }
+ parser->finishTranslationUnit();
+ g_processedFiles.insert(*s,(void*)0x8);
+ }
+ s=g_inputFiles.next();
+ }
+ // process remaining files
+ s=g_inputFiles.first();
+ while (s)
{
- BufStr inBuf(fi.size()+4096);
- msg("Preprocessing %s...\n",s->data());
- readInputFile(fileName,inBuf);
- preprocessFile(fileName,inBuf,preBuf);
+ if (!g_processedFiles.find(*s)) // not yet processed
+ {
+ bool ambig;
+ QStrList filesInSameTu;
+ FileDef *fd=findFileDef(Doxygen::inputNameDict,s->data(),ambig);
+ ASSERT(fd!=0);
+ ParserInterface * parser = getParserForFile(s->data());
+ parser->startTranslationUnit(s->data());
+ parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+ parser->finishTranslationUnit();
+ g_processedFiles.insert(*s,(void*)0x8);
+ }
+ s=g_inputFiles.next();
}
- else // no preprocessing
+ }
+ else // normal pocessing
+#endif
+ {
+ QCString *s=g_inputFiles.first();
+ while (s)
{
- msg("Reading %s...\n",s->data());
- readInputFile(fileName,preBuf);
+ bool ambig;
+ QStrList filesInSameTu;
+ FileDef *fd=findFileDef(Doxygen::inputNameDict,s->data(),ambig);
+ ASSERT(fd!=0);
+ ParserInterface * parser = getParserForFile(s->data());
+ parser->startTranslationUnit(s->data());
+ parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+ s=g_inputFiles.next();
}
-
- BufStr convBuf(preBuf.curPos()+1024);
-
- // convert multi-line C++ comments to C style comments
- convertCppComments(&preBuf,&convBuf,fileName);
-
- convBuf.addChar('\0');
-
- // use language parse to parse the file
- parser->parseInput(fileName,convBuf.data(),root);
-
- // store the Entry tree in a file and create an index to
- // navigate/load entries
- bool ambig;
- FileDef *fd=findFileDef(Doxygen::inputNameDict,fileName,ambig);
- ASSERT(fd!=0);
- //printf("root->createNavigationIndex for %s\n",fd->name().data());
- root->createNavigationIndex(rootNav,g_storage,fd);
-
- s=g_inputFiles.next();
}
}
@@ -9194,7 +9422,7 @@ int readDir(QFileInfo *fi,
{
if (errorIfNotExist)
{
- err("warning: source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data());
+ warn_uncond("source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data());
}
}
else if (cfi->isFile() &&
@@ -9286,7 +9514,7 @@ int readFileOrDirectory(const char *s,
{
if (errorIfNotExist)
{
- err("warning: source %s is not a readable file or directory... skipping.\n",s);
+ warn_uncond("source %s is not a readable file or directory... skipping.\n",s);
}
}
else if (!Config_getBool("EXCLUDE_SYMLINKS") || !fi.isSymLink())
@@ -9361,7 +9589,7 @@ void readFormulaRepository()
int se=line.find(':'); // find name and text separator.
if (se==-1)
{
- err("warning: formula.repository is corrupted!\n");
+ warn_uncond("formula.repository is corrupted!\n");
break;
}
else
@@ -9784,7 +10012,7 @@ void readConfiguration(int argc, char **argv)
formatName=getArg(argc,argv,optind);
if (!formatName)
{
- err("error: option -e is missing format specifier rtf.\n");
+ err("option -e is missing format specifier rtf.\n");
cleanUpDoxygen();
exit(1);
}
@@ -9792,7 +10020,7 @@ void readConfiguration(int argc, char **argv)
{
if (optind+1>=argc)
{
- err("error: option \"-e rtf\" is missing an extensions file name\n");
+ err("option \"-e rtf\" is missing an extensions file name\n");
cleanUpDoxygen();
exit(1);
}
@@ -9804,7 +10032,7 @@ void readConfiguration(int argc, char **argv)
cleanUpDoxygen();
exit(1);
}
- err("error: option \"-e\" has invalid format specifier.\n");
+ err("option \"-e\" has invalid format specifier.\n");
cleanUpDoxygen();
exit(1);
break;
@@ -9812,7 +10040,7 @@ void readConfiguration(int argc, char **argv)
formatName=getArg(argc,argv,optind);
if (!formatName)
{
- err("error: option -w is missing format specifier rtf, html or latex\n");
+ err("option -w is missing format specifier rtf, html or latex\n");
cleanUpDoxygen();
exit(1);
}
@@ -9820,7 +10048,7 @@ void readConfiguration(int argc, char **argv)
{
if (optind+1>=argc)
{
- err("error: option \"-w rtf\" is missing a style sheet file name\n");
+ err("option \"-w rtf\" is missing a style sheet file name\n");
cleanUpDoxygen();
exit(1);
}
@@ -9857,7 +10085,7 @@ void readConfiguration(int argc, char **argv)
}
if (optind+3>=argc)
{
- err("error: option \"-w html\" does not have enough arguments\n");
+ err("option \"-w html\" does not have enough arguments\n");
cleanUpDoxygen();
exit(1);
}
@@ -9865,7 +10093,7 @@ void readConfiguration(int argc, char **argv)
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
if (!setTranslator(outputLanguage))
{
- err("warning: Output language %s not supported! Using English instead.\n", outputLanguage.data());
+ warn_uncond("Output language %s not supported! Using English instead.\n", outputLanguage.data());
}
QFile f;
@@ -9906,7 +10134,7 @@ void readConfiguration(int argc, char **argv)
}
if (optind+3>=argc)
{
- err("error: option \"-w latex\" does not have enough arguments\n");
+ err("option \"-w latex\" does not have enough arguments\n");
cleanUpDoxygen();
exit(1);
}
@@ -9914,7 +10142,7 @@ void readConfiguration(int argc, char **argv)
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
if (!setTranslator(outputLanguage))
{
- err("warning: Output language %s not supported! Using English instead.\n", outputLanguage.data());
+ warn_uncond("Output language %s not supported! Using English instead.\n", outputLanguage.data());
}
QFile f;
@@ -9937,7 +10165,7 @@ void readConfiguration(int argc, char **argv)
}
else
{
- err("error: Illegal format specifier %s: should be one of rtf, html, latex, or bst\n",formatName);
+ err("Illegal format specifier %s: should be one of rtf, html, latex, or bst\n",formatName);
cleanUpDoxygen();
exit(1);
}
@@ -10030,7 +10258,7 @@ void readConfiguration(int argc, char **argv)
}
else
{
- err("error: configuration file %s not found!\n",argv[optind]);
+ err("configuration file %s not found!\n",argv[optind]);
usage(argv[0]);
}
}
@@ -10038,7 +10266,7 @@ void readConfiguration(int argc, char **argv)
if (!Config::instance()->parse(configName))
{
- err("error: could not open or read configuration file %s!\n",configName);
+ err("could not open or read configuration file %s!\n",configName);
cleanUpDoxygen();
exit(1);
}
@@ -10073,7 +10301,7 @@ void adjustConfiguration()
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
if (!setTranslator(outputLanguage))
{
- err("warning: Output language %s not supported! Using English instead.\n",
+ warn_uncond("Output language %s not supported! Using English instead.\n",
outputLanguage.data());
}
QStrList &includePath = Config_getList("INCLUDE_PATH");
@@ -10327,21 +10555,24 @@ void searchInputFiles()
{
QCString path=s;
uint l = path.length();
- // strip trailing slashes
- if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1);
-
- inputSize+=readFileOrDirectory(
- path,
- Doxygen::inputNameList,
- Doxygen::inputNameDict,
- &excludeNameDict,
- &Config_getList("FILE_PATTERNS"),
- &exclPatterns,
- &g_inputFiles,0,
- alwaysRecursive,
- TRUE,
- killDict,
- &Doxygen::inputPaths);
+ if (l>0)
+ {
+ // strip trailing slashes
+ if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1);
+
+ inputSize+=readFileOrDirectory(
+ path,
+ Doxygen::inputNameList,
+ Doxygen::inputNameDict,
+ &excludeNameDict,
+ &Config_getList("FILE_PATTERNS"),
+ &exclPatterns,
+ &g_inputFiles,0,
+ alwaysRecursive,
+ TRUE,
+ killDict,
+ &Doxygen::inputPaths);
+ }
s=inputList.next();
}
delete killDict;
@@ -10370,14 +10601,14 @@ void parseInput()
dir.setPath(QDir::currentDirPath());
if (!dir.mkdir(outputDirectory))
{
- err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+ err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
"exist and cannot be created\n",outputDirectory.data());
cleanUpDoxygen();
exit(1);
}
- else if (!Config_getBool("QUIET"))
+ else
{
- err("Notice: Output directory `%s' does not exist. "
+ msg("Notice: Output directory `%s' does not exist. "
"I have created it for you.\n", outputDirectory.data());
}
dir.cd(outputDirectory);
@@ -10389,17 +10620,10 @@ void parseInput()
* Initialize global lists and dictionaries
**************************************************************************/
- int cacheSize = Config_getInt("SYMBOL_CACHE_SIZE");
- if (cacheSize<0) cacheSize=0;
- if (cacheSize>9) cacheSize=9;
- //Doxygen::symbolCache = new ObjCache(16+cacheSize); // 16 -> room for 65536 elements,
- // // ~2.0 MByte "overhead"
- //Doxygen::symbolCache = new ObjCache(1); // only to stress test cache behaviour
- Doxygen::symbolCache = 0; //disable cache
Doxygen::symbolStorage = new Store;
// also scale lookup cache with SYMBOL_CACHE_SIZE
- cacheSize = Config_getInt("LOOKUP_CACHE_SIZE");
+ int cacheSize = Config_getInt("LOOKUP_CACHE_SIZE");
if (cacheSize<0) cacheSize=0;
if (cacheSize>9) cacheSize=9;
uint lookupSize = 65536 << cacheSize;
@@ -10508,7 +10732,7 @@ void parseInput()
}
else if (!defaultLayoutUsed)
{
- err("warning: failed to open layout file '%s' for reading!\n",layoutFileName.data());
+ warn_uncond("failed to open layout file '%s' for reading!\n",layoutFileName.data());
}
/**************************************************************************
@@ -10931,9 +11155,9 @@ void generateOutput()
Htags::useHtags = TRUE;
QCString htmldir = Config_getString("HTML_OUTPUT");
if (!Htags::execute(htmldir))
- err("error: USE_HTAGS is YES but htags(1) failed. \n");
+ err("USE_HTAGS is YES but htags(1) failed. \n");
if (!Htags::loadFilemap(htmldir))
- err("error: htags(1) ended normally but failed to load the filemap. \n");
+ err("htags(1) ended normally but failed to load the filemap. \n");
}
/**************************************************************************
@@ -10947,7 +11171,7 @@ void generateOutput()
tag=new QFile(generateTagFile);
if (!tag->open(IO_WriteOnly))
{
- err("error: cannot open tag file %s for writing\n",
+ err("cannot open tag file %s for writing\n",
generateTagFile.data()
);
cleanUpDoxygen();
@@ -10980,7 +11204,7 @@ void generateOutput()
QDir searchDir(searchDirName);
if (!searchDir.exists() && !searchDir.mkdir(searchDirName))
{
- err("error: Could not create search results directory '%s' $PWD='%s'\n",
+ err("Could not create search results directory '%s' $PWD='%s'\n",
searchDirName.data(),QDir::currentDirPath().data());
exit(1);
}
@@ -10996,7 +11220,6 @@ void generateOutput()
generateExampleDocs();
g_s.end();
- msg("Generating file sources...\n");
if (!Htags::useHtags)
{
g_s.begin("Generating file sources...\n");
@@ -11037,8 +11260,9 @@ void generateOutput()
if (Doxygen::formulaList->count()>0 && generateHtml
&& !Config_getBool("USE_MATHJAX"))
{
- msg("Generating bitmaps for formulas in HTML...\n");
+ g_s.begin("Generating bitmaps for formulas in HTML...\n");
Doxygen::formulaList->generateBitmaps(Config_getString("HTML_OUTPUT"));
+ g_s.end();
}
writeMainPageTagFileData();
@@ -11139,29 +11363,32 @@ void generateOutput()
if (Config_getBool("HAVE_DOT"))
{
+ g_s.begin("Running dot...\n");
DotManager::instance()->run();
+ g_s.end();
}
if (generateHtml &&
Config_getBool("GENERATE_HTMLHELP") &&
!Config_getString("HHC_LOCATION").isEmpty())
{
- msg("Running html help compiler...\n");
+ g_s.begin("Running html help compiler...\n");
QString oldDir = QDir::currentDirPath();
QDir::setCurrent(Config_getString("HTML_OUTPUT"));
portable_sysTimerStart();
if (portable_system(Config_getString("HHC_LOCATION"), "index.hhp", FALSE))
{
- err("error: failed to run html help compiler on index.hhp\n");
+ err("failed to run html help compiler on index.hhp\n");
}
portable_sysTimerStop();
QDir::setCurrent(oldDir);
+ g_s.end();
}
if ( generateHtml &&
Config_getBool("GENERATE_QHP") &&
!Config_getString("QHG_LOCATION").isEmpty())
{
- msg("Running qhelpgenerator...\n");
+ g_s.begin("Running qhelpgenerator...\n");
QCString const qhpFileName = Qhp::getQhpFileName();
QCString const qchFileName = getQchFileName();
@@ -11171,26 +11398,14 @@ void generateOutput()
portable_sysTimerStart();
if (portable_system(Config_getString("QHG_LOCATION"), args.data(), FALSE))
{
- err("error: failed to run qhelpgenerator on index.qhp\n");
+ err("failed to run qhelpgenerator on index.qhp\n");
}
portable_sysTimerStop();
QDir::setCurrent(oldDir);
+ g_s.end();
}
int cacheParam;
- if (Doxygen::symbolCache)
- {
- msg("symbol cache used %d/%d hits=%d misses=%d\n",
- Doxygen::symbolCache->count(),
- Doxygen::symbolCache->size(),
- Doxygen::symbolCache->hits(),
- Doxygen::symbolCache->misses());
- cacheParam = computeIdealCacheParam(Doxygen::symbolCache->misses());
- if (cacheParam>Config_getInt("SYMBOL_CACHE_SIZE"))
- {
- msg("Note: based on cache misses the ideal setting for SYMBOL_CACHE_SIZE is %d at the cost of higher memory usage.\n",cacheParam);
- }
- }
msg("lookup cache used %d/%d hits=%d misses=%d\n",
Doxygen::lookupCache->count(),
Doxygen::lookupCache->size(),
@@ -11227,7 +11442,6 @@ void generateOutput()
thisDir.remove(Doxygen::objDBFileName);
Config::deleteInstance();
QTextCodec::deleteAllCodecs();
- delete Doxygen::symbolCache;
delete Doxygen::symbolMap;
delete Doxygen::clangUsrMap;
delete Doxygen::symbolStorage;
diff --git a/src/doxygen.css b/src/doxygen.css
index 715935a..c314142 100644
--- a/src/doxygen.css
+++ b/src/doxygen.css
@@ -11,6 +11,7 @@ h1.groupheader {
}
.title {
+ font: 400 14px/28px Roboto,sans-serif;
font-size: 150%;
font-weight: bold;
margin: 10px 2px;
@@ -168,8 +169,8 @@ pre.fragment {
}
div.fragment {
- padding: 4px;
- margin: 4px;
+ padding: 0px;
+ margin: 0px;
background-color: ##FC;
border: 1px solid ##CC;
}
diff --git a/src/doxygen.h b/src/doxygen.h
index 9e55f01..4edf395 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -139,7 +139,6 @@ class Doxygen
static SDict<DirRelation> dirRelations;
static ParserManager *parserManager;
static bool suppressDocWarnings;
- static ObjCache *symbolCache;
static Store *symbolStorage;
static QCString objDBFileName;
static QCString entryDBFileName;
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
index 601b28f..d5348fe 100644
--- a/src/doxygen_css.h
+++ b/src/doxygen_css.h
@@ -11,6 +11,7 @@
"}\n"
"\n"
".title {\n"
+" font: 400 14px/28px Roboto,sans-serif;\n"
" font-size: 150%;\n"
" font-weight: bold;\n"
" margin: 10px 2px;\n"
@@ -168,8 +169,8 @@
"}\n"
"\n"
"div.fragment {\n"
-" padding: 4px;\n"
-" margin: 4px;\n"
+" padding: 0px;\n"
+" margin: 0px;\n"
" background-color: ##FC;\n"
" border: 1px solid ##CC;\n"
"}\n"
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 82db047..784ebff 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -78,35 +78,32 @@ FileDef::FileDef(const char *p,const char *nm,
const char *lref,const char *dn)
: Definition((QCString)p+nm,1,1,nm)
{
- path=p;
- filepath=path+nm;
- filename=nm;
- diskname=dn;
- if (diskname.isEmpty()) diskname=nm;
+ m_path=p;
+ m_filePath=m_path+nm;
+ m_fileName=nm;
+ m_diskName=dn;
+ if (m_diskName.isEmpty()) m_diskName=nm;
setReference(lref);
- classSDict = 0;
- includeList = 0;
- includeDict = 0;
- includedByList = 0;
- includedByDict = 0;
- namespaceSDict = 0;
- srcDefDict = 0;
- srcMemberDict = 0;
- usingDirList = 0;
- usingDeclList = 0;
- package = 0;
- isSource = FALSE;
- docname = nm;
- dir = 0;
+ m_classSDict = 0;
+ m_includeList = 0;
+ m_includeDict = 0;
+ m_includedByList = 0;
+ m_includedByDict = 0;
+ m_namespaceSDict = 0;
+ m_srcDefDict = 0;
+ m_srcMemberDict = 0;
+ m_usingDirList = 0;
+ m_usingDeclList = 0;
+ m_package = 0;
+ m_isSource = guessSection(nm)==Entry::SOURCE_SEC;
+ m_docname = nm;
+ m_dir = 0;
if (Config_getBool("FULL_PATH_NAMES"))
{
- docname.prepend(stripFromPath(path.copy()));
+ m_docname.prepend(stripFromPath(m_path.copy()));
}
- SrcLangExt lang = getLanguageFromFileName(name());
- setLanguage(lang);
- //m_isJava = lang==SrcLangExt_Java;
- //m_isCSharp = lang==SrcLangExt_CSharp;
- memberGroupSDict = 0;
+ setLanguage(getLanguageFromFileName(name()));
+ m_memberGroupSDict = 0;
acquireFileVersion();
m_subGrouping=Config_getBool("SUBGROUPING");
}
@@ -114,17 +111,17 @@ FileDef::FileDef(const char *p,const char *nm,
/*! destroy the file definition */
FileDef::~FileDef()
{
- delete classSDict;
- delete includeDict;
- delete includeList;
- delete includedByDict;
- delete includedByList;
- delete namespaceSDict;
- delete srcDefDict;
- delete srcMemberDict;
- delete usingDirList;
- delete usingDeclList;
- delete memberGroupSDict;
+ delete m_classSDict;
+ delete m_includeDict;
+ delete m_includeList;
+ delete m_includedByDict;
+ delete m_includedByList;
+ delete m_namespaceSDict;
+ delete m_srcDefDict;
+ delete m_srcMemberDict;
+ delete m_usingDirList;
+ delete m_usingDeclList;
+ delete m_memberGroupSDict;
}
/*! Compute the HTML anchor names for all members in the class */
@@ -137,9 +134,9 @@ void FileDef::computeAnchors()
void FileDef::distributeMemberGroupDocumentation()
{
//printf("FileDef::distributeMemberGroupDocumentation()\n");
- if (memberGroupSDict)
+ if (m_memberGroupSDict)
{
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+ MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
@@ -151,9 +148,9 @@ void FileDef::distributeMemberGroupDocumentation()
void FileDef::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
- if (memberGroupSDict)
+ if (m_memberGroupSDict)
{
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+ MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
@@ -194,7 +191,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
ol.startTextBlock();
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
}
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
@@ -210,7 +207,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
}
if (!documentation().isEmpty())
{
- ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
}
//printf("Writing source ref for file %s\n",name().data());
if (Config_getBool("SOURCE_BROWSER"))
@@ -236,41 +233,41 @@ void FileDef::writeBriefDescription(OutputList &ol)
{
if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
+ DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
+ briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty()
- )
+ if (rootNode && !rootNode->isEmpty())
{
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- }
- ol.popGeneratorState();
- ol.endParagraph();
+ ol.startParagraph();
+ ol.writeDoc(rootNode,this,0);
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
- //ol.pushGeneratorState();
- //ol.disable(OutputGenerator::RTF);
- //ol.newParagraph();
- //ol.popGeneratorState();
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty()
+ )
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ }
+ ol.popGeneratorState();
+ ol.endParagraph();
+ }
+ delete rootNode;
}
ol.writeSynopsis();
}
void FileDef::writeIncludeFiles(OutputList &ol)
{
- if (/*Config_getBool("SHOW_INCLUDE_FILES") &&*/ includeList &&
- includeList->count()>0)
+ if (m_includeList && m_includeList->count()>0)
{
ol.startTextBlock(TRUE);
- QListIterator<IncludeInfo> ili(*includeList);
+ QListIterator<IncludeInfo> ili(*m_includeList);
IncludeInfo *ii;
for (;(ii=ili.current());++ili)
{
@@ -355,7 +352,7 @@ void FileDef::writeIncludeGraph(OutputList &ol)
DotInclDepGraph incDepGraph(this,FALSE);
if (incDepGraph.isTooBig())
{
- err("warning: Include graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
+ warn_uncond("Include graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
}
else if (!incDepGraph.isTrivial())
{
@@ -379,7 +376,7 @@ void FileDef::writeIncludedByGraph(OutputList &ol)
DotInclDepGraph incDepGraph(this,TRUE);
if (incDepGraph.isTooBig())
{
- err("warning: Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
+ warn_uncond("Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
}
if (!incDepGraph.isTrivial())
{
@@ -415,18 +412,18 @@ void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
bool const isConstantGroup)
{
// write list of namespaces
- if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
+ if (m_namespaceSDict) m_namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
}
void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title)
{
// write list of classes
- if (classSDict) classSDict->writeDeclaration(ol,0,title,FALSE);
+ if (m_classSDict) m_classSDict->writeDeclaration(ol,0,title,FALSE);
}
void FileDef::writeInlineClasses(OutputList &ol)
{
- if (classSDict) classSDict->writeDocumentation(ol,this);
+ if (m_classSDict) m_classSDict->writeDocumentation(ol,this);
}
void FileDef::startMemberDeclarations(OutputList &ol)
@@ -460,10 +457,10 @@ void FileDef::endMemberDocumentation(OutputList &ol)
void FileDef::writeMemberGroups(OutputList &ol)
{
/* write user defined member groups */
- if (memberGroupSDict)
+ if (m_memberGroupSDict)
{
- memberGroupSDict->sort();
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+ m_memberGroupSDict->sort();
+ MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
@@ -499,8 +496,10 @@ void FileDef::writeSummaryLinks(OutputList &ol)
SrcLangExt lang=getLanguage();
for (eli.toFirst();(lde=eli.current());++eli)
{
- if ((lde->kind()==LayoutDocEntry::FileClasses && classSDict && classSDict->declVisible()) ||
- (lde->kind()==LayoutDocEntry::FileNamespaces && namespaceSDict && namespaceSDict->declVisible())
+ if ((lde->kind()==LayoutDocEntry::FileClasses &&
+ m_classSDict && m_classSDict->declVisible()) ||
+ (lde->kind()==LayoutDocEntry::FileNamespaces &&
+ m_namespaceSDict && m_namespaceSDict->declVisible())
)
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
@@ -543,12 +542,12 @@ void FileDef::writeDocumentation(OutputList &ol)
//printf("WriteDocumentation diskname=%s\n",diskname.data());
QCString versionTitle;
- if (!fileVersion.isEmpty())
+ if (!m_fileVersion.isEmpty())
{
- versionTitle=("("+fileVersion+")");
+ versionTitle=("("+m_fileVersion+")");
}
- QCString title = docname+versionTitle;
- QCString pageTitle=theTranslator->trFileReference(docname);
+ QCString title = m_docname+versionTitle;
+ QCString pageTitle=theTranslator->trFileReference(m_docname);
if (getDirDef())
{
@@ -585,7 +584,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startContents();
- if (!fileVersion.isEmpty())
+ if (!m_fileVersion.isEmpty())
{
ol.disableAllBut(OutputGenerator::Html);
ol.startProjectNumber();
@@ -802,15 +801,15 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
}
/*! Write a source listing of this file to the output */
-void FileDef::writeSource(OutputList &ol)
+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");
- QCString title = docname;
- if (!fileVersion.isEmpty())
+ QCString title = m_docname;
+ if (!m_fileVersion.isEmpty())
{
- title+=(" ("+fileVersion+")");
+ title+=(" ("+m_fileVersion+")");
}
QCString pageTitle = theTranslator->trSourceFile(title);
ol.disable(OutputGenerator::Man);
@@ -853,15 +852,23 @@ void FileDef::writeSource(OutputList &ol)
if (latexSourceCode) ol.enable(OutputGenerator::Latex);
}
+ (void)sameTu;
+ (void)filesInSameTu;
#if USE_LIBCLANG
static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
if (clangAssistedParsing &&
(getLanguage()==SrcLangExt_Cpp || getLanguage()==SrcLangExt_ObjC))
{
ol.startCodeFragment();
- ClangParser::instance()->start(absFilePath());
+ if (!sameTu)
+ {
+ ClangParser::instance()->start(absFilePath(),filesInSameTu);
+ }
+ else
+ {
+ ClangParser::instance()->switchToFile(absFilePath());
+ }
ClangParser::instance()->writeSources(ol,this);
- ClangParser::instance()->finish();
ol.endCodeFragment();
}
else
@@ -881,17 +888,47 @@ void FileDef::writeSource(OutputList &ol)
ol.enableAll();
}
-void FileDef::parseSource()
+void FileDef::parseSource(bool sameTu,QStrList &filesInSameTu)
{
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
DevNullCodeDocInterface devNullIntf;
- ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
- pIntf->resetCodeParserState();
- pIntf->parseCode(
+ (void)sameTu;
+ (void)filesInSameTu;
+#if USE_LIBCLANG
+ static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
+ if (clangAssistedParsing &&
+ (getLanguage()==SrcLangExt_Cpp || getLanguage()==SrcLangExt_ObjC))
+ {
+ if (!sameTu)
+ {
+ ClangParser::instance()->start(absFilePath(),filesInSameTu);
+ }
+ else
+ {
+ ClangParser::instance()->switchToFile(absFilePath());
+ }
+ ClangParser::instance()->writeSources(devNullIntf,this);
+ }
+ else
+#endif
+ {
+ ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
+ pIntf->resetCodeParserState();
+ pIntf->parseCode(
devNullIntf,0,
fileToString(absFilePath(),filterSourceFiles,TRUE),
FALSE,0,this
);
+ }
+}
+
+void FileDef::startParsing()
+{
+}
+
+void FileDef::finishParsing()
+{
+ ClangParser::instance()->finish();
}
void FileDef::addMembersToMemberGroup()
@@ -902,14 +939,14 @@ void FileDef::addMembersToMemberGroup()
{
if (ml->listType()&MemberListType_declarationLists)
{
- ::addMembersToMemberGroup(ml,&memberGroupSDict,this);
+ ::addMembersToMemberGroup(ml,&m_memberGroupSDict,this);
}
}
// add members inside sections to their groups
- if (memberGroupSDict)
+ if (m_memberGroupSDict)
{
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+ MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
@@ -980,14 +1017,18 @@ void FileDef::insertMember(MemberDef *md)
void FileDef::insertClass(ClassDef *cd)
{
if (cd->isHidden()) return;
- if (classSDict==0)
+ if (m_classSDict==0)
{
- classSDict = new ClassSDict(17);
+ m_classSDict = new ClassSDict(17);
}
if (Config_getBool("SORT_BRIEF_DOCS"))
- classSDict->inSort(cd->name(),cd);
+ {
+ m_classSDict->inSort(cd->name(),cd);
+ }
else
- classSDict->append(cd->name(),cd);
+ {
+ m_classSDict->append(cd->name(),cd);
+ }
}
/*! Adds namespace definition \a nd to the list of all compounds of this file */
@@ -995,23 +1036,27 @@ void FileDef::insertNamespace(NamespaceDef *nd)
{
if (nd->isHidden()) return;
if (!nd->name().isEmpty() &&
- (namespaceSDict==0 || namespaceSDict->find(nd->name())==0))
+ (m_namespaceSDict==0 || m_namespaceSDict->find(nd->name())==0))
{
- if (namespaceSDict==0)
+ if (m_namespaceSDict==0)
{
- namespaceSDict = new NamespaceSDict;
+ m_namespaceSDict = new NamespaceSDict;
}
if (Config_getBool("SORT_BRIEF_DOCS"))
- namespaceSDict->inSort(nd->name(),nd);
+ {
+ m_namespaceSDict->inSort(nd->name(),nd);
+ }
else
- namespaceSDict->append(nd->name(),nd);
+ {
+ m_namespaceSDict->append(nd->name(),nd);
+ }
}
}
QCString FileDef::name() const
{
if (Config_getBool("FULL_PATH_NAMES"))
- return filename;
+ return m_fileName;
else
return Definition::name();
}
@@ -1021,45 +1066,47 @@ void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
//printf("FileDef::addSourceDef(%d,%p,%p)\n",line,d,md);
if (d)
{
- if (srcDefDict==0) srcDefDict = new QIntDict<Definition>(257);
- if (srcMemberDict==0) srcMemberDict = new QIntDict<MemberDef>(257);
- srcDefDict->insert(line,d);
- if (md) srcMemberDict->insert(line,md);
+ if (m_srcDefDict==0) m_srcDefDict = new QIntDict<Definition>(257);
+ if (m_srcMemberDict==0) m_srcMemberDict = new QIntDict<MemberDef>(257);
+ m_srcDefDict->insert(line,d);
+ if (md) m_srcMemberDict->insert(line,md);
//printf("Adding member %s with anchor %s at line %d to file %s\n",
// md?md->name().data():"<none>",md?md->anchor().data():"<none>",line,name().data());
}
}
-Definition *FileDef::getSourceDefinition(int lineNr)
+Definition *FileDef::getSourceDefinition(int lineNr) const
{
Definition *result=0;
- if (srcDefDict)
+ if (m_srcDefDict)
{
- result = srcDefDict->find(lineNr);
+ result = m_srcDefDict->find(lineNr);
}
+ //printf("%s::getSourceDefinition(%d)=%s\n",name().data(),lineNr,result?result->name().data():"none");
return result;
}
-MemberDef *FileDef::getSourceMember(int lineNr)
+MemberDef *FileDef::getSourceMember(int lineNr) const
{
MemberDef *result=0;
- if (srcMemberDict)
+ if (m_srcMemberDict)
{
- result = srcMemberDict->find(lineNr);
+ result = m_srcMemberDict->find(lineNr);
}
+ //printf("%s::getSourceMember(%d)=%s\n",name().data(),lineNr,result?result->name().data():"none");
return result;
}
void FileDef::addUsingDirective(NamespaceDef *nd)
{
- if (usingDirList==0)
+ if (m_usingDirList==0)
{
- usingDirList = new NamespaceSDict;
+ m_usingDirList = new NamespaceSDict;
}
- if (usingDirList->find(nd->qualifiedName())==0)
+ if (m_usingDirList->find(nd->qualifiedName())==0)
{
- usingDirList->append(nd->qualifiedName(),nd);
+ m_usingDirList->append(nd->qualifiedName(),nd);
}
//printf("%p: FileDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
}
@@ -1067,18 +1114,18 @@ void FileDef::addUsingDirective(NamespaceDef *nd)
NamespaceSDict *FileDef::getUsedNamespaces() const
{
//printf("%p: FileDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
- return usingDirList;
+ return m_usingDirList;
}
void FileDef::addUsingDeclaration(Definition *d)
{
- if (usingDeclList==0)
+ if (m_usingDeclList==0)
{
- usingDeclList = new SDict<Definition>(17);
+ m_usingDeclList = new SDict<Definition>(17);
}
- if (usingDeclList->find(d->qualifiedName())==0)
+ if (m_usingDeclList->find(d->qualifiedName())==0)
{
- usingDeclList->append(d->qualifiedName(),d);
+ m_usingDeclList->append(d->qualifiedName(),d);
}
}
@@ -1087,13 +1134,13 @@ void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
{
//printf("FileDef::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
QCString iName = fd ? fd->absFilePath().data() : incName;
- if (!iName.isEmpty() && (!includeDict || includeDict->find(iName)==0))
+ if (!iName.isEmpty() && (!m_includeDict || m_includeDict->find(iName)==0))
{
- if (includeDict==0)
+ if (m_includeDict==0)
{
- includeDict = new QDict<IncludeInfo>(61);
- includeList = new QList<IncludeInfo>;
- includeList->setAutoDelete(TRUE);
+ m_includeDict = new QDict<IncludeInfo>(61);
+ m_includeList = new QList<IncludeInfo>;
+ m_includeList->setAutoDelete(TRUE);
}
IncludeInfo *ii = new IncludeInfo;
ii->fileDef = fd;
@@ -1101,8 +1148,8 @@ void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
ii->local = local;
ii->imported = imported;
ii->indirect = indirect;
- includeList->append(ii);
- includeDict->insert(iName,ii);
+ m_includeList->append(ii);
+ m_includeDict->insert(iName,ii);
}
}
@@ -1113,10 +1160,10 @@ void FileDef::addIncludedUsingDirectives()
//printf("( FileDef::addIncludedUsingDirectives for file %s\n",name().data());
NamespaceList nl;
- if (includeList) // file contains #includes
+ if (m_includeList) // file contains #includes
{
{
- QListIterator<IncludeInfo> iii(*includeList);
+ QListIterator<IncludeInfo> iii(*m_includeList);
IncludeInfo *ii;
for (iii.toFirst();(ii=iii.current());++iii) // foreach #include...
{
@@ -1128,7 +1175,7 @@ void FileDef::addIncludedUsingDirectives()
}
}
{
- QListIterator<IncludeInfo> iii(*includeList);
+ QListIterator<IncludeInfo> iii(*m_includeList);
IncludeInfo *ii;
// iterate through list from last to first
for (iii.toLast();(ii=iii.current());--iii)
@@ -1136,7 +1183,7 @@ void FileDef::addIncludedUsingDirectives()
if (ii->fileDef && ii->fileDef!=this)
{
// add using directives
- NamespaceSDict *unl = ii->fileDef->usingDirList;
+ NamespaceSDict *unl = ii->fileDef->m_usingDirList;
if (unl)
{
NamespaceSDict::Iterator nli(*unl);
@@ -1144,17 +1191,17 @@ void FileDef::addIncludedUsingDirectives()
for (nli.toLast();(nd=nli.current());--nli)
{
// append each using directive found in a #include file
- if (usingDirList==0) usingDirList = new NamespaceSDict;
+ if (m_usingDirList==0) m_usingDirList = new NamespaceSDict;
//printf("Prepending used namespace %s to the list of file %s\n",
// nd->name().data(),name().data());
- if (usingDirList->find(nd->qualifiedName())==0) // not yet added
+ if (m_usingDirList->find(nd->qualifiedName())==0) // not yet added
{
- usingDirList->prepend(nd->qualifiedName(),nd);
+ m_usingDirList->prepend(nd->qualifiedName(),nd);
}
}
}
// add using declarations
- SDict<Definition> *udl = ii->fileDef->usingDeclList;
+ SDict<Definition> *udl = ii->fileDef->m_usingDeclList;
if (udl)
{
SDict<Definition>::Iterator udi(*udl);
@@ -1162,13 +1209,13 @@ void FileDef::addIncludedUsingDirectives()
for (udi.toLast();(d=udi.current());--udi)
{
//printf("Adding using declaration %s\n",d->name().data());
- if (usingDeclList==0)
+ if (m_usingDeclList==0)
{
- usingDeclList = new SDict<Definition>(17);
+ m_usingDeclList = new SDict<Definition>(17);
}
- if (usingDeclList->find(d->qualifiedName())==0)
+ if (m_usingDeclList->find(d->qualifiedName())==0)
{
- usingDeclList->prepend(d->qualifiedName(),d);
+ m_usingDeclList->prepend(d->qualifiedName(),d);
}
}
}
@@ -1185,13 +1232,13 @@ void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
{
//printf("FileDef::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
QCString iName = fd ? fd->absFilePath().data() : incName;
- if (!iName.isEmpty() && (includedByDict==0 || includedByDict->find(iName)==0))
+ if (!iName.isEmpty() && (m_includedByDict==0 || m_includedByDict->find(iName)==0))
{
- if (includedByDict==0)
+ if (m_includedByDict==0)
{
- includedByDict = new QDict<IncludeInfo>(61);
- includedByList = new QList<IncludeInfo>;
- includedByList->setAutoDelete(TRUE);
+ m_includedByDict = new QDict<IncludeInfo>(61);
+ m_includedByList = new QList<IncludeInfo>;
+ m_includedByList->setAutoDelete(TRUE);
}
IncludeInfo *ii = new IncludeInfo;
ii->fileDef = fd;
@@ -1199,15 +1246,15 @@ void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
ii->local = local;
ii->imported = imported;
ii->indirect = FALSE;
- includedByList->append(ii);
- includedByDict->insert(iName,ii);
+ m_includedByList->append(ii);
+ m_includedByDict->insert(iName,ii);
}
}
bool FileDef::isIncluded(const QCString &name) const
{
if (name.isEmpty()) return FALSE;
- return includeDict!=0 && includeDict->find(name)!=0;
+ return m_includeDict!=0 && m_includeDict->find(name)!=0;
}
bool FileDef::generateSourceFile() const
@@ -1227,17 +1274,17 @@ bool FileDef::generateSourceFile() const
void FileDef::addListReferences()
{
{
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- addRefItem(xrefItems.pointer(),
+ QList<ListItemInfo> *xrefItems = xrefListItems();
+ addRefItem(xrefItems,
getOutputFileBase(),
theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name(),
0
);
}
- if (memberGroupSDict)
+ if (m_memberGroupSDict)
{
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
+ MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
@@ -1506,9 +1553,9 @@ void FileDef::combineUsingRelations()
{
if (visited) return; // already done
visited=TRUE;
- if (usingDirList)
+ if (m_usingDirList)
{
- NamespaceSDict::Iterator nli(*usingDirList);
+ NamespaceSDict::Iterator nli(*m_usingDirList);
NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
@@ -1554,24 +1601,24 @@ bool FileDef::isDocumentationFile() const
void FileDef::acquireFileVersion()
{
QCString vercmd = Config_getString("FILE_VERSION_FILTER");
- if (!vercmd.isEmpty() && !filepath.isEmpty() && filepath!="generated")
+ if (!vercmd.isEmpty() && !m_filePath.isEmpty() && m_filePath!="generated")
{
- msg("Version of %s : ",filepath.data());
- QCString cmd = vercmd+" \""+filepath+"\"";
+ msg("Version of %s : ",m_filePath.data());
+ QCString cmd = vercmd+" \""+m_filePath+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
FILE *f=portable_popen(cmd,"r");
if (!f)
{
- err("error: could not execute %s\n",vercmd.data());
+ err("could not execute %s\n",vercmd.data());
return;
}
const int bufSize=1024;
char buf[bufSize];
int numRead = (int)fread(buf,1,bufSize,f);
portable_pclose(f);
- if (numRead>0 && !(fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty())
+ if (numRead>0 && !(m_fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty())
{
- msg("%s\n",fileVersion.data());
+ msg("%s\n",m_fileVersion.data());
}
else
{
@@ -1585,11 +1632,11 @@ QCString FileDef::getSourceFileBase() const
{
if (Htags::useHtags)
{
- return Htags::path2URL(filepath);
+ return Htags::path2URL(m_filePath);
}
else
{
- return convertNameToFile(diskname)+"_source";
+ return convertNameToFile(m_diskName)+"_source";
}
}
@@ -1598,11 +1645,11 @@ QCString FileDef::includeName() const
{
if (Htags::useHtags)
{
- return Htags::path2URL(filepath);
+ return Htags::path2URL(m_filePath);
}
else
{
- return convertNameToFile(diskname)+"_source";
+ return convertNameToFile(m_diskName)+"_source";
}
}
@@ -1701,42 +1748,29 @@ bool FileDef::isLinkableInProject() const
return hasDocumentation() && !isReference() && showFiles;
}
-#if 0
-bool FileDef::includes(FileDef *incFile,QDict<FileDef> *includedFiles) const
+static void getAllIncludeFilesRecursively(
+ QDict<void> *filesVisited,const FileDef *fd,QStrList &incFiles)
{
- //printf("%s::includes(%s)\n",name().data(),incFile->name().data());
- if (incFile==this) return TRUE;
- includedFiles->insert(absFilePath(),this);
- if (includeList)
+ if (fd->includeFileList())
{
- QListIterator<IncludeInfo> ili(*includeList);
+ QListIterator<IncludeInfo> iii(*fd->includeFileList());
IncludeInfo *ii;
- for (;(ii=ili.current());++ili)
+ for (iii.toFirst();(ii=iii.current());++iii)
{
- //printf("ii=%s\n",ii->includeName.data());
- if ((ii->fileDef &&
- includedFiles->find(ii->fileDef->absFilePath())==0 &&
- ii->fileDef->includes(incFile,includedFiles)
- ) ||
- incFile->absFilePath()==ii->includeName
- ) return TRUE;
+ if (ii->fileDef && !ii->fileDef->isReference() &&
+ !filesVisited->find(ii->fileDef->absFilePath()))
+ {
+ //printf("FileDef::addIncludeDependency(%s)\n",ii->fileDef->absFilePath().data());
+ incFiles.append(ii->fileDef->absFilePath());
+ filesVisited->insert(ii->fileDef->absFilePath(),(void*)0x8);
+ getAllIncludeFilesRecursively(filesVisited,ii->fileDef,incFiles);
+ }
}
}
- return FALSE;
}
-bool FileDef::includesByName(const QCString &fileName) const
+void FileDef::getAllIncludeFilesRecursively(QStrList &incFiles) const
{
- if (includeList)
- {
- QListIterator<IncludeInfo> ili(*includeList);
- IncludeInfo *ii;
- for (;(ii=ili.current());++ili)
- {
- //printf("ii=%s\n",ii->includeName.data());
- if (fileName==ii->includeName) return TRUE;
- }
- }
- return FALSE;
+ QDict<void> includes(257);
+ ::getAllIncludeFilesRecursively(&includes,this,incFiles);
}
-#endif
diff --git a/src/filedef.h b/src/filedef.h
index 7376861..f6e5bad 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -69,20 +69,22 @@ class FileDef : public Definition
FileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
~FileDef();
+
+ // ----------------------------------------------------------------------
+
DefType definitionType() const { return TypeFile; }
/*! Returns the unique file name (this may include part of the path). */
QCString name() const;
QCString displayName(bool=TRUE) const { return name(); }
- QCString fileName() const { return filename; }
+ QCString fileName() const { return m_fileName; }
QCString getOutputFileBase() const
- { return convertNameToFile(diskname); }
- QCString anchor() const
- { return QCString(); }
+ { return convertNameToFile(m_diskName); }
- QCString getFileBase() const
- { return diskname; }
+ QCString anchor() const { return QCString(); }
+
+ QCString getFileBase() const { return m_diskName; }
QCString getSourceFileBase() const;
@@ -90,59 +92,71 @@ class FileDef : public Definition
QCString includeName() const;
/*! Returns the absolute path including the file name. */
- QCString absFilePath() const { return filepath; }
-
+ QCString absFilePath() const { return m_filePath; }
/*! Returns the name as it is used in the documentation */
- QCString docName() const { return docname; }
-
- void addSourceRef(int line,Definition *d,MemberDef *md);
- Definition *getSourceDefinition(int lineNr);
- MemberDef *getSourceMember(int lineNr);
+ QCString docName() const { return m_docname; }
- /* Sets the name of the include file to \a n. */
- //void setIncludeName(const char *n_) { incName=n_; }
+ /*! Returns TRUE if this file is a source file. */
+ bool isSource() const { return m_isSource; }
+
+ bool isDocumentationFile() const;
+ Definition *getSourceDefinition(int lineNr) const;
+ MemberDef *getSourceMember(int lineNr) const;
+
/*! Returns the absolute path of this file. */
- QCString getPath() const { return path; }
+ QCString getPath() const { return m_path; }
/*! Returns version of this file. */
- QCString getVersion() const { return fileVersion; }
+ QCString getVersion() const { return m_fileVersion; }
bool isLinkableInProject() const;
- bool isLinkable() const
- {
- return isLinkableInProject() || isReference();
- }
+ bool isLinkable() const { return isLinkableInProject() || isReference(); }
bool isIncluded(const QCString &name) const;
- //bool isJava() const { return m_isJava; }
- //bool isCSharp() const { return m_isCSharp; }
+ PackageDef *packageDef() const { return m_package; }
+ DirDef *getDirDef() const { return m_dir; }
+ NamespaceSDict *getUsedNamespaces() const;
+ SDict<Definition> *getUsedClasses() const { return m_usingDeclList; }
+ QList<IncludeInfo> *includeFileList() const { return m_includeList; }
+ QList<IncludeInfo> *includedByFileList() const { return m_includedByList; }
+ void getAllIncludeFilesRecursively(QStrList &incFiles) const;
+
+ MemberList *getMemberList(MemberListType lt) const;
+ const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+
+ /* user defined member groups */
+ MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
+ NamespaceSDict *getNamespaceSDict() const { return m_namespaceSDict; }
+ ClassSDict *getClassSDict() const { return m_classSDict; }
+
+ //---------------------------------
+
+ void addSourceRef(int line,Definition *d,MemberDef *md);
void writeDocumentation(OutputList &ol);
void writeMemberPages(OutputList &ol);
void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
void writeSummaryLinks(OutputList &ol);
- void writeSource(OutputList &ol);
- void parseSource();
+ void startParsing();
+ void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
+ void parseSource(bool sameTu,QStrList &filesInSameTu);
+ void finishParsing();
+
friend void generatedFileNames();
void insertMember(MemberDef *md);
void insertClass(ClassDef *cd);
void insertNamespace(NamespaceDef *nd);
void computeAnchors();
- void setPackageDef(PackageDef *pd) { package=pd; }
- PackageDef *packageDef() const { return package; }
-
- void setDirDef(DirDef *dd) { dir=dd; }
- DirDef *getDirDef() const { return dir; }
+ void setPackageDef(PackageDef *pd) { m_package=pd; }
+ void setDirDef(DirDef *dd) { m_dir=dd; }
void addUsingDirective(NamespaceDef *nd);
- NamespaceSDict *getUsedNamespaces() const;
void addUsingDeclaration(Definition *def);
- SDict<Definition> *getUsedClasses() const { return usingDeclList; }
void combineUsingRelations();
bool generateSourceFile() const;
@@ -150,8 +164,6 @@ class FileDef : public Definition
void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
- QList<IncludeInfo> *includeFileList() const { return includeList; }
- QList<IncludeInfo> *includedByFileList() const { return includedByList; }
void addMembersToMemberGroup();
void distributeMemberGroupDocumentation();
@@ -159,18 +171,8 @@ class FileDef : public Definition
void addIncludedUsingDirectives();
void addListReferences();
- bool isDocumentationFile() const;
//bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
//bool includesByName(const QCString &name) const;
-
- MemberList *getMemberList(MemberListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
-
- /* user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
- NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
- ClassSDict *getClassSDict() const { return classSDict; }
-
bool visited;
protected:
@@ -201,27 +203,27 @@ class FileDef : public Definition
void writeDetailedDescription(OutputList &ol,const QCString &title);
void writeBriefDescription(OutputList &ol);
- QDict<IncludeInfo> *includeDict;
- QList<IncludeInfo> *includeList;
- QDict<IncludeInfo> *includedByDict;
- QList<IncludeInfo> *includedByList;
- NamespaceSDict *usingDirList;
- SDict<Definition> *usingDeclList;
- QCString path;
- QCString filepath;
- QCString diskname;
- QCString filename;
- QCString docname;
- QIntDict<Definition> *srcDefDict;
- QIntDict<MemberDef> *srcMemberDict;
- bool isSource;
- QCString fileVersion;
- PackageDef *package;
- DirDef *dir;
+ QDict<IncludeInfo> *m_includeDict;
+ QList<IncludeInfo> *m_includeList;
+ QDict<IncludeInfo> *m_includedByDict;
+ QList<IncludeInfo> *m_includedByList;
+ NamespaceSDict *m_usingDirList;
+ SDict<Definition> *m_usingDeclList;
+ QCString m_path;
+ QCString m_filePath;
+ QCString m_diskName;
+ QCString m_fileName;
+ QCString m_docname;
+ QIntDict<Definition> *m_srcDefDict;
+ QIntDict<MemberDef> *m_srcMemberDict;
+ bool m_isSource;
+ QCString m_fileVersion;
+ PackageDef *m_package;
+ DirDef *m_dir;
QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
- NamespaceSDict *namespaceSDict;
- ClassSDict *classSDict;
+ MemberGroupSDict *m_memberGroupSDict;
+ NamespaceSDict *m_namespaceSDict;
+ ClassSDict *m_classSDict;
bool m_subGrouping;
};
diff --git a/src/filename.cpp b/src/filename.cpp
index e5c5ca5..da0dccc 100644
--- a/src/filename.cpp
+++ b/src/filename.cpp
@@ -48,7 +48,7 @@ void FileName::generateDiskNames()
while (fd && fd->isReference()) fd=next();
// name if unique, so diskname is simply the name
//printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
- fd->diskname=name.copy();
+ fd->m_diskName=name;
}
else if (count>1) // multiple occurrences of the same file name
{
@@ -59,7 +59,7 @@ void FileName::generateDiskNames()
{
fd=first();
while (fd && fd->isReference()) fd=next();
- char c=fd->path.at(i);
+ char c=fd->m_path.at(i);
if (c=='/') j=i; // remember last position of dirname
fd=next();
while (fd && !found)
@@ -67,13 +67,13 @@ void FileName::generateDiskNames()
if (!fd->isReference())
{
//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->path.length())
+ if (i==(int)fd->m_path.length())
{
- //warning("Warning: Input file %s found multiple times!\n"
+ //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->path[i]!=c)
+ else if (fd->m_path[i]!=c)
{
found=TRUE;
}
@@ -88,10 +88,10 @@ void FileName::generateDiskNames()
//printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
if (!fd->isReference())
{
- QCString prefix = fd->path.right(fd->path.length()-j-1);
+ QCString prefix = fd->m_path.right(fd->m_path.length()-j-1);
fd->setName(prefix+name);
//printf("!!!!!!!! non unique disk name=%s for fd=%s\n",(prefix+name).data(),fd->diskname.data());
- fd->diskname=prefix+name;
+ fd->m_diskName=prefix+name;
}
fd=next();
}
diff --git a/src/formula.cpp b/src/formula.cpp
index ef2d5f2..0d3c4cd 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -53,7 +53,7 @@ void FormulaList::generateBitmaps(const char *path)
int x1,y1,x2,y2;
QDir d(path);
// store the original directory
- if (!d.exists()) { err("error: Output dir %s does not exist!\n",path); exit(1); }
+ if (!d.exists()) { err("Output dir %s does not exist!\n",path); exit(1); }
QCString oldDir = QDir::currentDirPath().utf8();
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
@@ -149,7 +149,7 @@ void FormulaList::generateBitmaps(const char *path)
}
else
{
- err("error: Couldn't extract bounding box!\n");
+ err("Couldn't extract bounding box!\n");
}
}
// next we generate a postscript file which contains the eps
@@ -207,7 +207,7 @@ void FormulaList::generateBitmaps(const char *path)
if (!t.eof())
s=t.readLine().utf8();
if (s.length()<2 || s.left(2)!="P6")
- err("error: ghostscript produced an illegal image format!");
+ err("ghostscript produced an illegal image format!");
else
{
// assume the size is after the first line that does not start with
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 206106f..203a2ed 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -368,6 +368,7 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
}
}
+#if 0
static QCString fileLocation()
{
QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
@@ -376,6 +377,7 @@ static QCString fileLocation()
return result;
}
+
/**
generates dictionay entries that are used if REFERENCED_BY_RELATION ... options are set
(e.g. the "referenced by ..." list after the function documentation)
@@ -395,6 +397,7 @@ static void addDocCrossReference(MemberDef *src, MemberDef *dst)
src->addSourceReferences(dst,fileLocation());
}
}
+#endif
//-------------------------------------------------------------------------------
/**
diff --git a/src/fortranscanner.h b/src/fortranscanner.h
index 83f7c3e..c70f948 100644
--- a/src/fortranscanner.h
+++ b/src/fortranscanner.h
@@ -28,9 +28,13 @@ class FortranLanguageScanner : public ParserInterface
{
public:
virtual ~FortranLanguageScanner() {}
+ void startTranslationUnit(const char *) {}
+ void finishTranslationUnit() {}
void parseInput(const char *fileName,
const char *fileBuf,
- Entry *root);
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList &filesInSameTranslationUnit);
bool needsPreprocessing(const QCString &extension);
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 83da1d0..eae6d6e 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -2125,7 +2125,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
}
else
{
- warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
+ warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
@@ -2140,7 +2140,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
}
else
{
- warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
+ warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
@@ -2155,7 +2155,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
}
else
{
- warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
+ warn(yyFileName,yyLineNr, "inconsistency between intent attribute and documenation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
@@ -2264,7 +2264,11 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
//----------------------------------------------------------------------------
-void FortranLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
+void FortranLanguageScanner::parseInput(const char *fileName,
+ const char *fileBuf,
+ Entry *root,
+ bool /*sameTranslationUnit*/,
+ QStrList & /*filesInSameTranslationUnit*/)
{
g_thisParser = this;
::parseMain(fileName,fileBuf,root);
@@ -2300,7 +2304,7 @@ void FortranLanguageScanner::resetCodeParserState()
void FortranLanguageScanner::parsePrototype(const char *text)
{
- (void)text;
+ current->name = QCString(text).lower();
}
static void scanner_abort()
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 4d0707b..2b41594 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -273,19 +273,19 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
bool sameScope = srcMd->getOuterScope()==md->getOuterScope() || // same class or namespace
// both inside a file => definition and declaration do not have to be in the same file
(srcMd->getOuterScope()->definitionType()==Definition::TypeFile &&
- md->getOuterScope()->definitionType()==Definition::TypeFile);
+ md->getOuterScope()->definitionType()==Definition::TypeFile);
- LockingPtr<ArgumentList> srcMdAl = srcMd->argumentList();
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- LockingPtr<ArgumentList> tSrcMdAl = srcMd->templateArguments();
- LockingPtr<ArgumentList> tMdAl = md->templateArguments();
+ ArgumentList *srcMdAl = srcMd->argumentList();
+ ArgumentList *mdAl = md->argumentList();
+ ArgumentList *tSrcMdAl = srcMd->templateArguments();
+ ArgumentList *tMdAl = md->templateArguments();
if (srcMd->isFunction() && md->isFunction() && // both are a function
- ((tSrcMdAl.pointer()==0 && tMdAl.pointer()==0) ||
- (tSrcMdAl.pointer()!=0 && tMdAl.pointer()!=0 && tSrcMdAl->count()==tMdAl->count())
+ ((tSrcMdAl==0 && tMdAl==0) ||
+ (tSrcMdAl!=0 && tMdAl!=0 && tSrcMdAl->count()==tMdAl->count())
) && // same number of template arguments
- matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMdAl.pointer(),
- md->getOuterScope(),md->getFileDef(),mdAl.pointer(),
+ matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMdAl,
+ md->getOuterScope(),md->getFileDef(),mdAl,
TRUE
) && // matching parameters
sameScope // both are found in the same scope
@@ -295,7 +295,7 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
{
md->setGroupAlias(srcMd);
}
- else
+ else if (md!=srcMd->getGroupAlias())
{
md->setGroupAlias(srcMd->getGroupAlias());
}
@@ -523,7 +523,7 @@ void GroupDef::addGroup(const GroupDef *def)
bool GroupDef::isASubGroup() const
{
- LockingPtr<GroupList> groups = partOfGroups();
+ GroupList *groups = partOfGroups();
return groups!=0 && groups->count()!=0;
}
@@ -569,7 +569,7 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
// repeat brief description
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
}
// write separator between brief and details
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
@@ -588,13 +588,13 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
// write detailed documentation
if (!documentation().isEmpty())
{
- ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
}
// write inbody documentation
if (!inbodyDocumentation().isEmpty())
{
- ol.parseDoc(inbodyFile(),inbodyLine(),this,0,inbodyDocumentation()+"\n",TRUE,FALSE);
+ ol.generateDoc(inbodyFile(),inbodyLine(),this,0,inbodyDocumentation()+"\n",TRUE,FALSE);
}
}
}
@@ -603,25 +603,30 @@ void GroupDef::writeBriefDescription(OutputList &ol)
{
if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty()
- )
+ DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
+ briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
+ if (rootNode && !rootNode->isEmpty())
{
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
+ ol.startParagraph();
+ ol.writeDoc(rootNode,this,0);
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
+
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty()
+ )
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ }
+ ol.popGeneratorState();
+ ol.endParagraph();
}
- ol.popGeneratorState();
- ol.endParagraph();
+ delete rootNode;
}
}
@@ -670,7 +675,7 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription(fd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
@@ -728,7 +733,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription(gd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
@@ -764,7 +769,7 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription(dd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
@@ -810,7 +815,7 @@ void GroupDef::writePageDocumentation(OutputList &ol)
ol.endSection(si->label,SectionInfo::Subsection);
}
ol.startTextBlock();
- ol.parseDoc(pd->docFile(),pd->docLine(),pd,0,pd->documentation()+pd->inbodyDocumentation(),TRUE,FALSE,0,TRUE,FALSE);
+ ol.generateDoc(pd->docFile(),pd->docLine(),pd,0,pd->documentation()+pd->inbodyDocumentation(),TRUE,FALSE,0,TRUE,FALSE);
ol.endTextBlock();
}
}
@@ -1257,7 +1262,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
if (fgd && gd!=fgd && g->pri==pri)
{
warn(root->fileName.data(), root->startLine,
- "warning: Member %s found in multiple %s groups! "
+ "Member %s found in multiple %s groups! "
"The member will be put in group %s, and not in group %s",
md->name().data(), Grouping::getGroupPriName( pri ),
gd->name().data(), fgd->name().data()
@@ -1302,7 +1307,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
else if (!root->doc.isEmpty() && md->getGroupHasDocs())
{
warn(md->getGroupFileName(),md->getGroupStartLine(),
- "warning: Member documentation for %s found several times in %s groups!\n"
+ "Member documentation for %s found several times in %s groups!\n"
"%s:%d: The member will remain in group %s, and won't be put into group %s",
md->name().data(), Grouping::getGroupPriName( pri ),
root->fileName.data(), root->startLine,
@@ -1374,8 +1379,8 @@ QCString GroupDef::getOutputFileBase() const
void GroupDef::addListReferences()
{
{
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- addRefItem(xrefItems.pointer(),
+ QList<ListItemInfo> *xrefItems = xrefListItems();
+ addRefItem(xrefItems,
getOutputFileBase(),
theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name(),
diff --git a/src/htags.cpp b/src/htags.cpp
index 27ad952..5f0c71a 100644
--- a/src/htags.cpp
+++ b/src/htags.cpp
@@ -52,14 +52,14 @@ bool Htags::execute(const QCString &htmldir)
{
g_inputDir.setPath(inputSource.first());
if (!g_inputDir.exists())
- err("error: Cannot find directory %s. "
+ err("Cannot find directory %s. "
"Check the value of the INPUT tag in the configuration file.\n",
inputSource.first()
);
}
else
{
- err("error: If you use USE_HTAGS then INPUT should specific a single directory. \n");
+ err("If you use USE_HTAGS then INPUT should specific a single directory. \n");
return FALSE;
}
@@ -145,7 +145,7 @@ bool Htags::loadFilemap(const QCString &htmlDir)
}
else
{
- err("error: file %s cannot be opened\n",fileMapName.data());
+ err("file %s cannot be opened\n",fileMapName.data());
}
}
return FALSE;
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index d334e8f..767fa5b 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -39,26 +39,30 @@ static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"};
static QCString convertIndexWordToAnchor(const QString &word)
{
static char hex[] = "0123456789abcdef";
- uint i;
QCString result;
- for (i=0;i<word.length();i++)
- {
- int c = word.at(i);
- if (isId(c))
+ const char *str = word.data();
+ unsigned char c;
+ while ((c = *str++))
+ {
+ if ((c >= 'a' && c <= 'z') || // ALPHA
+ (c >= 'A' && c <= 'A') || // ALPHA
+ (c >= '0' && c <= '9') || // DIGIT
+ c == '-' ||
+ c == '.' ||
+ c == '_' ||
+ c == '~'
+ )
{
- result+=c;
+ result += c;
}
- else if (isspace(c))
- {
- result+="_";
- }
- else
+ else
{
- char cs[3];
- cs[0]=hex[c>>4];
- cs[1]=hex[c&0xf];
- cs[2]=0;
- result+=cs;
+ char enc[4];
+ enc[0] = '%';
+ enc[1] = hex[(c & 0xf0) >> 4];
+ enc[2] = hex[c & 0xf];
+ enc[3] = 0;
+ result += enc;
}
}
return result;
@@ -153,6 +157,7 @@ void HtmlDocVisitor::visit(DocWord *w)
void HtmlDocVisitor::visit(DocLinkedWord *w)
{
if (m_hide) return;
+ //printf("linked word: %s\n",w->word().data());
startLink(w->ref(),w->file(),w->relPath(),w->anchor(),w->tooltip());
filter(w->word());
endLink();
@@ -277,7 +282,7 @@ void HtmlDocVisitor::visit(DocSymbol *s)
case DocSymbol::LeftFloor: m_t << "&lfloor;"; break;
case DocSymbol::RightFloor: m_t << "&rfloor;"; break;
default:
- err("error: unknown symbol found\n");
+ err("unknown symbol found\n");
}
}
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index b272177..1644f23 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -1710,7 +1710,7 @@ void HtmlGenerator::writeStyleInfo(int part)
QFileInfo cssfi(cssname);
if (!cssfi.exists() || !cssfi.isFile() || !cssfi.isReadable())
{
- err("error: style sheet %s does not exist or is not readable!", Config_getString("HTML_STYLESHEET").data());
+ err("style sheet %s does not exist or is not readable!", Config_getString("HTML_STYLESHEET").data());
}
else
{
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index f43beba..6b1f98b 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -304,7 +304,7 @@ void HtmlHelp::initialize()
m_fromUtf8 = portable_iconv_open(str,"UTF-8");
if (m_fromUtf8==(void *)(-1))
{
- err("Error: unsupported character conversion for CHM_INDEX_ENCODING: '%s'->'UTF-8'\n", str);
+ err("unsupported character conversion for CHM_INDEX_ENCODING: '%s'->'UTF-8'\n", str);
exit(1);
}
diff --git a/src/index.cpp b/src/index.cpp
index 7eed60d..944d5db 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -332,7 +332,7 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
MemberDef *md;
for (mi.toFirst();(md=mi.current());++mi)
{
- LockingPtr<MemberList> enumList = md->enumFieldList();
+ MemberList *enumList = md->enumFieldList();
bool isDir = enumList!=0 && md->isEnumerate();
bool isAnonymous = md->name().find('@')!=-1;
static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS");
@@ -602,7 +602,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv
if (level>20)
{
warn(dd->getDefFileName(),dd->getDefLine(),
- "warning: maximum nesting level exceeded for directory %s: "
+ "maximum nesting level exceeded for directory %s: "
"check for possible recursive directory relation!\n",dd->name().data()
);
return;
@@ -1265,7 +1265,7 @@ static void writeFileIndex(OutputList &ol)
if (hasBrief)
{
//ol.docify(" (");
- ol.parseDoc(
+ ol.generateDoc(
fd->briefFile(),fd->briefLine(),
fd,0,
fd->briefDescription(TRUE),
@@ -1550,7 +1550,7 @@ static void writeNamespaceIndex(OutputList &ol)
if (hasBrief)
{
//ol.docify(" (");
- ol.parseDoc(
+ ol.generateDoc(
nd->briefFile(),nd->briefLine(),
nd,0,
nd->briefDescription(TRUE),
@@ -1667,7 +1667,7 @@ static void writeAnnotatedClassList(OutputList &ol)
ol.startIndexValue(hasBrief);
if (hasBrief)
{
- ol.parseDoc(
+ ol.generateDoc(
cd->briefFile(),cd->briefLine(),
cd,0,
cd->briefDescription(TRUE),
@@ -3458,7 +3458,7 @@ void writeGraphInfo(OutputList &ol)
//printf("legendDocs=%s\n",legendDocs.data());
}
FileDef fd("","graph_legend");
- ol.parseDoc("graph_legend",1,&fd,0,legendDocs,FALSE,FALSE);
+ ol.generateDoc("graph_legend",1,&fd,0,legendDocs,FALSE,FALSE);
stripCommentsStateRef = oldStripCommentsState;
endFile(ol);
ol.popGeneratorState();
@@ -3477,7 +3477,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
if (level>20)
{
warn(gd->getDefFileName(),gd->getDefLine(),
- "warning: maximum nesting level exceeded for group %s: check for possible recursive group relation!\n",gd->name().data()
+ "maximum nesting level exceeded for group %s: check for possible recursive group relation!\n",gd->name().data()
);
return;
}
@@ -3558,7 +3558,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
MemberDef *md;
for (mi.toFirst();(md=mi.current());++mi)
{
- LockingPtr<MemberList> enumList = md->enumFieldList();
+ MemberList *enumList = md->enumFieldList();
bool isDir = enumList!=0 && md->isEnumerate();
if (md->isVisible() && md->name().find('@')==-1)
{
@@ -4010,7 +4010,7 @@ static void writeIndex(OutputList &ol)
{
ol.startHeaderSection();
ol.startTitleHead(0);
- ol.parseDoc(Doxygen::mainPage->docFile(),Doxygen::mainPage->docLine(),
+ ol.generateDoc(Doxygen::mainPage->docFile(),Doxygen::mainPage->docLine(),
Doxygen::mainPage,0,Doxygen::mainPage->title(),
TRUE,FALSE,0,TRUE,FALSE);
headerWritten = TRUE;
@@ -4047,7 +4047,7 @@ static void writeIndex(OutputList &ol)
}
ol.startTextBlock();
- ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,
+ ol.generateDoc(defFileName,defLine,Doxygen::mainPage,0,
Doxygen::mainPage->documentation(),TRUE,FALSE
/*,Doxygen::mainPage->sectionDict*/);
ol.endTextBlock();
@@ -4083,7 +4083,7 @@ static void writeIndex(OutputList &ol)
if (!Config_getString("PROJECT_NUMBER").isEmpty())
{
ol.startProjectNumber();
- ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,Config_getString("PROJECT_NUMBER"),FALSE,FALSE);
+ ol.generateDoc(defFileName,defLine,Doxygen::mainPage,0,Config_getString("PROJECT_NUMBER"),FALSE,FALSE);
ol.endProjectNumber();
}
ol.endIndexSection(isTitlePageStart);
@@ -4238,7 +4238,7 @@ static void writeIndex(OutputList &ol)
startFile(ol,Doxygen::mainPage->name(),0,Doxygen::mainPage->title());
ol.startContents();
ol.startTextBlock();
- ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,
+ ol.generateDoc(defFileName,defLine,Doxygen::mainPage,0,
Doxygen::mainPage->documentation(),FALSE,FALSE
);
ol.endTextBlock();
diff --git a/src/jquery_fx.js b/src/jquery_fx.js
index f242cb9..97e5843 100644
--- a/src/jquery_fx.js
+++ b/src/jquery_fx.js
@@ -1,11 +1 @@
-/**
- * jQuery.ScrollTo - Easy element scrolling using jQuery.
- * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
- * Dual licensed under MIT and GPL.
- * Date: 5/25/2009
- * @author Ariel Flesler
- * @version 1.4.2
- *
- * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
- */
-;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
+(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_fx_js.h b/src/jquery_fx_js.h
index f5b0da2..7fd7f2e 100644
--- a/src/jquery_fx_js.h
+++ b/src/jquery_fx_js.h
@@ -1,11 +1 @@
-"/**\n"
-" * jQuery.ScrollTo - Easy element scrolling using jQuery.\n"
-" * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com\n"
-" * Dual licensed under MIT and GPL.\n"
-" * Date: 5/25/2009\n"
-" * @author Ariel Flesler\n"
-" * @version 1.4.2\n"
-" *\n"
-" * http://flesler.blogspot.com/2007/10/jqueryscrollto.html\n"
-" */\n"
-";(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\\d+(\\.\\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);\n"
+"(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);\n"
diff --git a/src/jquery_p1.js b/src/jquery_p1.js
index 1f06e57..06eb7e6 100644
--- a/src/jquery_p1.js
+++ b/src/jquery_p1.js
@@ -1,3 +1,18 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test("آ ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function()
-{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},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(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+/*!
+ * 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_p1_js.h b/src/jquery_p1_js.h
index e48ba50..1effb45 100644
--- a/src/jquery_p1_js.h
+++ b/src/jquery_p1_js.h
@@ -1,3 +1,18 @@
-"/*! jQuery v1.7.1 jquery.com | jquery.org/license */\n"
-"(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f(\"<\"+a+\">\").appendTo(b),e=d.css(\"display\");d.remove();if(e===\"none\"||e===\"\"){cl||(cl=c.createElement(\"iframe\"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,\"display\"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h==\"string\"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k===\"*\")k=l;else if(l!==\"*\"&&l!==k){m=l+\" \"+k,n=e[m]||e[\"* \"+k];if(!n){p=b;for(o in e){j=o.split(\" \");if(j[0]===l||j[0]===\"*\"){p=e[j[1]+\" \"+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error(\"No conversion from \"+m.replace(\" \",\" to \")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]===\"*\")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader(\"content-type\"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+\" \"+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+\"[\"+(typeof e==\"object\"||f.isArray(e)?b:\"\")+\"]\",e,c,d)});else if(!c&&b!=null&&typeof b==\"object\")for(var e in b)ca(a+\"[\"+e+\"]\",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==\"string\"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g[\"*\"]&&(l=b$(a,c,d,e,\"*\",g));return l}function bZ(a){return function(b,c){typeof b!=\"string\"&&(c=b,b=\"*\");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\\+/.test(h),j&&(h=h.substr(1)||\"*\"),i=a[h]=a[h]||[],i[j?\"unshift\":\"push\"](c)}}}function bC(a,b,c){var d=b===\"width\"?a.offsetWidth:a.offsetHeight,e=b===\"width\"?bx:by,g=0,h=e.length;if(d>0){if(c!==\"border\")for(;g<h;g++)c||(d-=parseFloat(f.css(a,\"padding\"+e[g]))||0),c===\"margin\"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,\"border\"+e[g]+\"Width\"))||0;return d+\"px\"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,\"padding\"+e[g]))||0,c!==\"padding\"&&(d+=parseFloat(f.css(a,\"border\"+e[g]+\"Width\"))||0),c===\"margin\"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+\"px\"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:\"script\"}):f.globalEval((b.text||b.textContent||b.innerHTML||\"\").replace(bf,\"/*$0*/\")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement(\"div\");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||\"\").toLowerCase();b===\"input\"?bm(a):b!==\"script\"&&typeof a.getElementsByTagName!=\"undefined\"&&f.grep(a.getElementsByTagName(\"input\"),bm)}function bm(a){if(a.type===\"checkbox\"||a.type===\"radio\")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!=\"undefined\"?a.getElementsByTagName(\"*\"):typeof a.querySelectorAll!=\"undefined\"?a.querySelectorAll(\"*\"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c===\"object\")b.outerHTML=a.outerHTML;else if(c!==\"input\"||a.type!==\"checkbox\"&&a.type!==\"radio\"){if(c===\"option\")b.selected=a.defaultSelected;else if(c===\"input\"||c===\"textarea\")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?\".\":\"\")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,\"table\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function U(a){var b=V.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b==\"string\"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+\"defer\",e=b+\"queue\",g=b+\"mark\",h=f._data(a,d);h&&(c===\"queue\"||!f._data(a,e))&&(c===\"mark\"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b===\"data\"&&f.isEmptyObject(a[b]))continue;if(b!==\"toJSON\")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e=\"data-\"+c.replace(k,\"-$1\").toLowerCase();d=a.getAttribute(e);if(typeof d==\"string\"){try{d=d===\"true\"?!0:d===\"false\"?!1:d===\"null\"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,j=/\\S/,k=/^\\s+/,l=/\\s+$/,m=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,n=/^[\\],:{}\\s]*$/,o=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,q=/(?:^|:|,)(?:\\s*\\[)+/g,r=/(webkit)[ \\/]([\\w.]+)/,s=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,t=/(msie) ([\\w.]+)/,u=/(mozilla)(?:.*? rv:([\\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+\"\").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a===\"body\"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a==\"string\"){a.charAt(0)!==\"<\"||a.charAt(a.length-1)!==\">\"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b===\"find\"?d.selector=this.selector+(this.selector?\" \":\"\")+c:b&&(d.selector=this.selector+\".\"+b+\"(\"+c+\")\");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),\"slice\",F.call(arguments).join(\",\"))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==\"boolean\"&&(l=i,i=arguments[1]||{},j=2),typeof i!=\"object\"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger(\"ready\").off(\"ready\")}},bindReady:function(){if(!A){A=e.Callbacks(\"once memory\");if(c.readyState===\"complete\")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener(\"DOMContentLoaded\",B,!1),a.addEventListener(\"load\",e.ready,!1);else if(c.attachEvent){c.attachEvent(\"onreadystatechange\",B),a.attachEvent(\"onload\",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)===\"function\"},isArray:Array.isArray||function(a){return e.type(a)===\"array\"},isWindow:function(a){return a&&typeof a==\"object\"&&\"setInterval\"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||\"object\"},isPlainObject:function(a){if(!a||e.type(a)!==\"object\"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,\"constructor\")&&!D.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!=\"string\"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,\"@\").replace(p,\"]\").replace(q,\"\")))return(new Function(\"return \"+b))();e.error(\"Invalid JSON: \"+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,\"text/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName(\"parsererror\").length)&&e.error(\"Invalid XML: \"+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,\"ms-\").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?\"\":G.call(a)}:function(a){return a==null?\"\":(a+\"\").replace(k,\"\").replace(l,\"\")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d===\"string\"||d===\"function\"||d===\"regexp\"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==\"number\")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j==\"number\"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c==\"string\"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c==\"object\"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf(\"compatible\")<0&&u.exec(a)||[];return{browser:b[1]||\"\",version:b[2]||\"0\"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(a,b){I[\"[object \"+b+\"]\"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(\"آ \")&&(k=/^[\\s\\xA0]+/,l=/[\\s\\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener(\"DOMContentLoaded\",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState===\"complete\"&&(c.detachEvent(\"onreadystatechange\",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h===\"array\"?m(g):h===\"function\"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks(\"once memory\"),c=f.Callbacks(\"once memory\"),d=f.Callbacks(\"memory\"),e=\"pending\",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,\"resolve\"],fail:[b,\"reject\"],progress:[c,\"notify\"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function()\n"
-"{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+\"With\"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+\"With\"]=g[j].fireWith;i.done(function(){e=\"resolved\"},c.disable,d.lock).fail(function(){e=\"rejected\"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement(\"div\"),r=c.documentElement;q.setAttribute(\"className\",\"t\"),q.innerHTML=\" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\",d=q.getElementsByTagName(\"*\"),e=q.getElementsByTagName(\"a\")[0];if(!d||!d.length||!e)return{};g=c.createElement(\"select\"),h=g.appendChild(c.createElement(\"option\")),i=q.getElementsByTagName(\"input\")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName(\"tbody\").length,htmlSerialize:!!q.getElementsByTagName(\"link\").length,style:/top/.test(e.getAttribute(\"style\")),hrefNormalized:e.getAttribute(\"href\")===\"/a\",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value===\"on\",optSelected:h.selected,getSetAttribute:q.className!==\"t\",enctype:!!c.createElement(\"form\").enctype,html5Clone:c.createElement(\"nav\").cloneNode(!0).outerHTML!==\"<:nav></:nav>\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent(\"onclick\")),i=c.createElement(\"input\"),i.value=\"t\",i.setAttribute(\"type\",\"radio\"),b.radioValue=i.value===\"t\",i.setAttribute(\"checked\",\"checked\"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML=\"\",a.getComputedStyle&&(j=c.createElement(\"div\"),j.style.width=\"0\",j.style.marginRight=\"0\",q.style.width=\"2px\",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n=\"on\"+o,p=n in q,p||(q.setAttribute(n,\"return;\"),p=typeof q[n]==\"function\"),b[o+\"Bubbles\"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName(\"body\")[0];!r||(j=1,k=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\",m=\"visibility:hidden;border:0;\",n=\"style='\"+k+\"border:5px solid #000;padding:0;'\",o=\"<div \"+n+\"><div></div></div>\"+\"<table \"+n+\" cellpadding='0' cellspacing='0'>\"+\"<tr><td></td></tr></table>\",a=c.createElement(\"div\"),a.style.cssText=m+\"width:0;height:0;position:static;top:0;margin-top:\"+j+\"px\",r.insertBefore(a,r.firstChild),q=c.createElement(\"div\"),a.appendChild(q),q.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\",l=q.getElementsByTagName(\"td\"),p=l[0].offsetHeight===0,l[0].style.display=\"\",l[1].style.display=\"none\",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML=\"\",q.style.width=q.style.paddingLeft=\"1px\",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!=\"undefined\"&&(q.style.display=\"inline\",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display=\"\",q.innerHTML=\"<div style='width:4px;'></div>\",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position=\"fixed\",e.style.top=\"20px\",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top=\"\",d.style.overflow=\"hidden\",d.style.position=\"relative\",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\\{.*\\}|\\[.*\\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:\"jQuery\"+(f.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c==\"string\",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c===\"events\";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c==\"object\"||typeof c==\"function\")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(\" \")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute(\"classid\")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a==\"undefined\"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf(\"data-\")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],\"parsedAttrs\",!0)}}return h}if(typeof a==\"object\")return this.each(function(){f.data(this,a)});d=a.split(\".\"),d[1]=d[1]?\".\"+d[1]:\"\";if(c===b){h=this.triggerHandler(\"getData\"+d[1]+\"!\",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler(\"setData\"+d[1]+\"!\",e),f.data(this,a,c),b.triggerHandler(\"changeData\"+d[1]+\"!\",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||\"fx\")+\"mark\",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||\"fx\";var d=c+\"mark\",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,\"mark\"))}},queue:function(a,b,c){var d;if(a){b=(b||\"fx\")+\"queue\",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||\"fx\";var c=f.queue(a,b),d=c.shift(),e={};d===\"inprogress\"&&(d=c.shift()),d&&(b===\"fx\"&&c.unshift(\"inprogress\"),f._data(a,b+\".run\",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+\"queue \"+b+\".run\",!0),n(a,b,\"queue\"))}}),f.fn.extend({queue:function(a,c){typeof a!=\"string\"&&(c=a,a=\"fx\");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a===\"fx\"&&b[0]!==\"inprogress\"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||\"fx\";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!=\"string\"&&(c=a,a=b),a=a||\"fx\";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+\"defer\",j=a+\"queue\",k=a+\"mark\",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks(\"once memory\"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\\n\\t\\r]/g,p=/\\s+/,q=/\\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a==\"string\"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=\" \"+e.className+\" \";for(h=0,i=b.length;h<i;h++)~g.indexOf(\" \"+b[h]+\" \")||(g+=b[h]+\" \");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a==\"string\"||a===b){c=(a||\"\").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(\" \"+g.className+\" \").replace(o,\" \");for(i=0,j=c.length;i<j;i++)h=h.replace(\" \"+c[i]+\" \",\" \");g.className=f.trim(h)}else g.className=\"\"}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b==\"boolean\";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c===\"string\"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?\"addClass\":\"removeClass\"](e)}else if(c===\"undefined\"||c===\"boolean\")this.className&&f._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":f._data(this,\"__className__\")||\"\"})},hasClass:function(a){var b=\" \"+a+\" \",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(\" \"+this[c].className+\" \").replace(o,\" \").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h=\"\":typeof h==\"number\"?h+=\"\":f.isArray(h)&&(h=f.map(h,function(a){return a==null?\"\":a+\"\"})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!(\"set\"in c)||c.set(this,h,\"value\")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&\"get\"in c&&(d=c.get(g,\"value\"))!==b)return d;d=g.value;return typeof d==\"string\"?d.replace(q,\"\"):d==null?\"\":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type===\"select-one\";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute(\"disabled\")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,\"optgroup\"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find(\"option\").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute==\"undefined\")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&\"set\"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,\"\"+d);return d}if(h&&\"get\"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,\"\"),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error(\"type property can't be changed\");else if(!f.support.radioValue&&b===\"radio\"&&f.nodeName(a,\"input\")){var c=a.value;a.setAttribute(\"type\",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,\"button\"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,\"button\"))return w.set(a,b,c);a.value=b}}},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(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&\"set\"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&\"get\"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode(\"tabindex\");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!=\"boolean\"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!==\"\":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+\"\"}},f.attrHooks.tabindex.set=w.set,f.each([\"width\",\"height\"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===\"\"){a.setAttribute(b,\"auto\");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===\"\"&&(b=\"false\"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each([\"href\",\"src\",\"width\",\"height\"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=\"\"+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype=\"encoding\"),f.support.checkOn||f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]={get:function(a){return a.getAttribute(\"value\")===null?\"on\":a.value}}}),f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\\.]*)?(?:\\.(.+))?$/,B=/\\bhover(\\.\\S+)?\\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||\"\").toLowerCase(),b[3]=b[3]&&new RegExp(\"(?:^|\\\\s)\"+b[3]+\"(?:\\\\s|$)\"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c[\"class\"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,\"mouseenter$1 mouseleave$1\")};\n"
+"/*!\n"
+" * jQuery JavaScript Library v1.7.1\n"
+" * http://jquery.com/\n"
+" *\n"
+" * Copyright 2011, John Resig\n"
+" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
+" * http://jquery.org/license\n"
+" *\n"
+" * Includes Sizzle.js\n"
+" * http://sizzlejs.com/\n"
+" * Copyright 2011, The Dojo Foundation\n"
+" * Released under the MIT, BSD, and GPL Licenses.\n"
+" *\n"
+" * Date: Mon Nov 21 21:11:03 2011 -0500\n"
+" */\n"
+"(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))\n"
+"}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;\n"
+"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\n"
diff --git a/src/jquery_p2.js b/src/jquery_p2.js
index e1f8314..bc16cf6 100644
--- a/src/jquery_p2.js
+++ b/src/jquery_p2.js
@@ -1,3 +1,10 @@
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.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(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.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(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.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(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d
-&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={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,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),
-f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+}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_p2_js.h b/src/jquery_p2_js.h
index c31afa7..7c905ef 100644
--- a/src/jquery_p2_js.h
+++ b/src/jquery_p2_js.h
@@ -1,3 +1,10 @@
-"f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!=\"undefined\"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(\" \");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||\"\").split(\".\").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(\".\")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent(\"on\"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||\"\")).split(\" \");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp(\"(^|\\\\.)\"+l.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d===\"**\"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,[\"events\",\"handle\"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf(\"!\")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(\".\")>=0&&(i=h.split(\".\"),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c==\"object\"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join(\".\"),c.namespace_re=c.namespace?new RegExp(\"(^|\\\\.)\"+i.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null,o=h.indexOf(\":\")<0?\"on\"+h:\"\";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,\"events\")||{})[c.type]&&f._data(m,\"handle\"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!==\"click\"||!f.nodeName(e,\"a\"))&&f.acceptData(e)&&o&&e[h]&&(h!==\"focus\"&&h!==\"blur\"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,\"events\")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!==\"click\")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.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(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent(\"on\"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,\"form\"))return!1;f.event.add(this,\"click._submit keypress._submit\",function(a){var c=a.target,d=f.nodeName(c,\"input\")||f.nodeName(c,\"button\")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,\"submit._submit\",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate(\"submit\",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,\"form\"))return!1;f.event.remove(this,\"._submit\")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\")f.event.add(this,\"propertychange._change\",function(a){a.originalEvent.propertyName===\"checked\"&&(this._just_changed=!0)}),f.event.add(this,\"click._change\",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate(\"change\",this,a,!0))});return!1}f.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,\"change._change\",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate(\"change\",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!==\"radio\"&&b.type!==\"checkbox\")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,\"._change\");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a==\"object\"){typeof c!=\"string\"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c==\"string\"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+\".\"+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a==\"object\"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c==\"function\")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||\"**\",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,\"**\"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,\"lastToggle\"+a.guid)||0)%d;f._data(this,\"lastToggle\"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.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(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!=\"string\"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,d=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\\\/g,k=/\\r\\n/g,l=/\\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=\"string\")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(\"\"),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]===\"~\"||w[0]===\"+\")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q=\"\",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)===\"[object Array]\")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!==\"\\\\\"){g[1]=(g[1]||\"\").replace(j,\"\"),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],\"\");break}}}}d||(d=typeof b.getElementsByTagName!=\"undefined\"?b.getElementsByTagName(\"*\"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)===\"\\\\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],\"\");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e=\"\";if(d){if(d===1||d===9){if(typeof a.textContent==\"string\")return a.textContent;if(typeof a.innerText==\"string\")return a.innerText.replace(k,\"\");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.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(a){return a.getAttribute(\"href\")},type:function(a){return a.getAttribute(\"type\")}},relative:{\"+\":function(a,b){var c=typeof b==\"string\",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},\">\":function(a,b){var c,d=typeof b==\"string\",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d\n"
-"&&m.filter(b,a,!0)}},\"\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"parentNode\",b,f,a,d,c)},\"~\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"previousSibling\",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=\"undefined\"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=\"undefined\"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute(\"name\")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=\"undefined\")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=\" \"+a[1].replace(j,\"\")+\" \";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(\" \"+h.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,\"\")},TAG:function(a,b){return a[1].replace(j,\"\").toLowerCase()},CHILD:function(a){if(a[1]===\"nth\"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\\+|\\s*/g,\"\");var b=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(a[2]===\"even\"&&\"2n\"||a[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(a[2])&&\"0n+\"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,\"\");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||\"\").replace(j,\"\"),a[2]===\"~=\"&&(a[4]=\" \"+a[4]+\" \");return a},PSEUDO:function(b,c,d,e,f){if(b[1]===\"not\")if((a.exec(b[3])||\"\").length>1||/^\\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!==\"hidden\"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute(\"type\"),c=a.type;return a.nodeName.toLowerCase()===\"input\"&&\"text\"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"radio\"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===a.type},file:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"file\"===a.type},password:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"password\"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"submit\"===a.type},image:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"image\"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"reset\"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b===\"input\"&&\"button\"===a.type||b===\"button\"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e===\"contains\")return(a.textContent||a.innerText||n([a])||\"\").indexOf(b[3])>=0;if(e===\"not\"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case\"only\":case\"first\":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k===\"first\")return!0;l=a;case\"last\":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case\"nth\":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute(\"id\")===b},TAG:function(a,b){return b===\"*\"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(\" \"+(a.className||a.getAttribute(\"class\"))+\" \").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+\"\",f=b[2],g=b[4];return d==null?f===\"!=\":!f&&m.attr?d!=null:f===\"=\"?e===g:f===\"*=\"?e.indexOf(g)>=0:f===\"~=\"?(\" \"+e+\" \").indexOf(g)>=0:g?f===\"!=\"?e!==g:f===\"^=\"?e.indexOf(g)===0:f===\"$=\"?e.substr(e.length-g.length)===g:f===\"|=\"?e===g||e.substr(0,g.length+1)===g+\"-\":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return\"\\\\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+o.match[r].source.replace(/\\\\(\\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)===\"[object Array]\")Array.prototype.push.apply(d,a);else if(typeof a.length==\"number\")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement(\"div\"),d=\"script\"+(new Date).getTime(),e=c.documentElement;a.innerHTML=\"<a name='\"+d+\"'/>\",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!=\"undefined\"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=\"undefined\"&&e.getAttributeNode(\"id\").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=\"undefined\"&&a.getAttributeNode(\"id\");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement(\"div\");a.appendChild(c.createComment(\"\")),a.getElementsByTagName(\"*\").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]===\"*\"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=\"<a href='#'></a>\",a.firstChild&&typeof a.firstChild.getAttribute!=\"undefined\"&&a.firstChild.getAttribute(\"href\")!==\"#\"&&(o.attrHandle.href=function(a){return a.getAttribute(\"href\",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement(\"div\"),d=\"__sizzle__\";b.innerHTML=\"<p class='TEST'></p>\";if(!b.querySelectorAll||b.querySelectorAll(\".TEST\").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b===\"body\"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!==\"object\"){var k=e,l=e.getAttribute(\"id\"),n=l||d,p=e.parentNode,q=/^\\s*[+~]/.test(b);l?n=n.replace(/'/g,\"\\\\$&\"):e.setAttribute(\"id\",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll(\"[id='\"+n+\"'] \"+b),f)}catch(r){}finally{l||k.removeAttribute(\"id\")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement(\"div\"),\"div\"),e=!1;try{b.call(c.documentElement,\"[test!='']:sizzle\")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement(\"div\");a.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!!a.getElementsByClassName&&a.getElementsByClassName(\"e\").length!==0){a.lastChild.className=\"e\";if(a.getElementsByClassName(\"e\").length===1)return;o.order.splice(1,0,\"CLASS\"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=\"undefined\"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!==\"HTML\":!1};var y=function(a,b,c){var d,e=[],f=\"\",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,\"\");a=o.relative[a]?a+\"*\":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[\":\"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!=\"string\")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack(\"\",\"find\",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),\"not\",a)},filter:function(a){return this.pushStack(T(this,a,!0),\"filter\",a)},is:function(a){return!!a&&(typeof a==\"string\"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!=\"string\"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,\"closest\",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a==\"string\")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==\"string\"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return f.dir(a,\"parentNode\",c)},next:function(a){return f.nth(a,2,\"nextSibling\")},prev:function(a){return f.nth(a,2,\"previousSibling\")},nextAll:function(a){return f.dir(a,\"nextSibling\")},prevAll:function(a){return f.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return f.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return f.dir(a,\"previousSibling\",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d==\"string\"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(\",\"))}}),f.extend({filter:function(a,b,c){c&&(a=\":not(\"+a+\")\");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",W=/ jQuery\\d+=\"(?:\\d+|null)\"/g,X=/^\\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,Z=/<([\\w:]+)/,$=/<tbody/i,_=/<|&#?\\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp(\"<(?:\"+V+\")\",\"i\"),bd=/checked\\s*(?:[^=]|=\\s*.checked.)/i,be=/\\/(java|ecma)script/i,bf=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,bg={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,\"\",\"\"]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,\"div<div>\",\"</div>\"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!=\"object\"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,\"body\")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,\"before\",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,\"after\",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName(\"*\")),\n"
-"f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()\n"
+"}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}});\n"
+"/*!\n"
+" * Sizzle CSS Selector Engine\n"
+" * Copyright 2011, The Dojo Foundation\n"
+" * Released under the MIT, BSD, and GPL Licenses.\n"
+" * More information: http://sizzlejs.com/\n"
+" */\n"
+"(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\n"
+"},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);\n"
+"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;\n"
diff --git a/src/jquery_p3.js b/src/jquery_p3.js
index 3635172..c0f18ce 100644
--- a/src/jquery_p3.js
+++ b/src/jquery_p3.js
@@ -1,2 +1,3 @@
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c)
-{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.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 a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
+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_p3_js.h b/src/jquery_p3_js.h
index 9fe869c..880da7f 100644
--- a/src/jquery_p3_js.h
+++ b/src/jquery_p3_js.h
@@ -1,2 +1,3 @@
-"{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName(\"*\"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,\"\"):null;if(typeof a==\"string\"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace(Y,\"<$1></$2>\");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName(\"*\")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!=\"string\"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),\"replaceWith\",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j==\"string\"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,\"tr\");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j==\"string\"&&j.length<512&&i===c&&j.charAt(0)===\"<\"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test(\"<\"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement==\"undefined\"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k==\"number\"&&(k+=\"\");if(!k)continue;if(typeof k==\"string\")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,\"<$1></$2>\");var l=(Z.exec(k)||[\"\",\"\"])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement(\"div\");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l===\"table\"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===\"<table>\"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],\"tbody\")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)==\"number\")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],\"script\")&&(!h[j].type||h[j].type.toLowerCase()===\"text/javascript\"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName(\"script\"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\\([^)]*\\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\\d+(?:px)?$/i,bu=/^-?\\d/,bv=/^([\\-+])=([\\-+.\\de]+)/,bw={position:\"absolute\",visibility:\"hidden\",display:\"block\"},bx=[\"Left\",\"Right\"],by=[\"Top\",\"Bottom\"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,\"opacity\",\"opacity\");return c===\"\"?\"1\":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":f.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&\"get\"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h===\"string\"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h=\"number\");if(d==null||h===\"number\"&&isNaN(d))return;h===\"number\"&&!f.cssNumber[i]&&(d+=\"px\");if(!k||!(\"set\"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c===\"cssFloat\"&&(c=\"float\");if(g&&\"get\"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each([\"height\",\"width\"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+\"px\"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?parseFloat(RegExp.$1)/100+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?\"alpha(opacity=\"+b*100+\")\":\"\",g=d&&d.filter||c.filter||\"\";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,\"\"))===\"\"){c.removeAttribute(\"filter\");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+\" \"+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:\"inline-block\"},function(){b?c=bz(a,\"margin-right\",\"marginRight\"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,\"-$1\").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===\"\"&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b===\"fontSize\"?\"1em\":f||0,f=g.pixelLeft+\"px\",g.left=c,d&&(a.runtimeStyle.left=d));return f===\"\"?\"auto\":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,\"display\"))===\"none\"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\\[\\]$/,bF=/\\r?\\n/g,bG=/#.*$/,bH=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\\/\\//,bM=/\\?/,bN=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=[\"*/\"]+[\"*\"];try{bV=e.href}catch(bY){bV=c.createElement(\"a\"),bV.href=\"\",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!=\"string\"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(\" \");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h=\"GET\";c&&(f.isFunction(c)?(d=c,c=b):typeof c==\"object\"&&(c=f.param(c,f.ajaxSettings.traditional),h=\"POST\"));var i=this;f.ajax({url:a,type:h,dataType:\"html\",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f(\"<div>\").append(c.replace(bN,\"\")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,\"\\r\\n\")}}):{name:b.name,value:c.replace(bF,\"\\r\\n\")}}).get()}}),f.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each([\"get\",\"post\"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,\"script\")},getJSON:function(a,b,c){return f.get(a,b,c,\"json\")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:!0,async:!0,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":a.String,\"text html\":!0,\"text json\":f.parseJSON,\"text xml\":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||\"\",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader(\"Last-Modified\"))f.lastModified[k]=y;if(z=v.getResponseHeader(\"Etag\"))f.etag[k]=z}if(a===304)w=\"notmodified\",o=!0;else try{r=cc(d,x),w=\"success\",o=!0}catch(A){w=\"parsererror\",u=A}}else{u=w;if(!w||a)w=\"error\",a<0&&(a=0)}v.status=a,v.statusText=\"\"+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger(\"ajax\"+(o?\"Success\":\"Error\"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger(\"ajaxComplete\",[v,d]),--f.active||f.event.trigger(\"ajaxStop\"))}}typeof a==\"object\"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks(\"once memory\"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||\"abort\",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+\"\").replace(bG,\"\").replace(bL,bW[1]+\"//\"),d.dataTypes=f.trim(d.dataType||\"*\").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]===\"http:\"?80:443))==(bW[3]||(bW[1]===\"http:\"?80:443)))),d.data&&d.processData&&typeof d.data!=\"string\"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger(\"ajaxStart\");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?\"&\":\"?\")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,\"$1_=\"+x);d.url=y+(y===d.url?(bM.test(d.url)?\"&\":\"?\")+\"_=\"+x:\"\")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader(\"Content-Type\",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader(\"If-Modified-Since\",f.lastModified[k]),f.etag[k]&&v.setRequestHeader(\"If-None-Match\",f.etag[k])),v.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!==\"*\"?\", \"+bX+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,\"No Transport\");else{v.readyState=1,t&&g.trigger(\"ajaxSend\",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort(\"timeout\")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join(\"&\").replace(bD,\"+\")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\\=)\\?(&|$)|\\?\\?/i;f.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return f.expando+\"_\"+cd++}}),f.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e=b.contentType===\"application/x-www-form-urlencoded\"&&typeof b.data==\"string\";if(b.dataTypes[0]===\"jsonp\"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l=\"$1\"+h+\"$2\";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\\?/.test(j)?\"&\":\"?\")+b.jsonp+\"=\"+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters[\"script json\"]=function(){g||f.error(h+\" was not called\");return g[0]},b.dataTypes[0]=\"json\";return\"script\"}}),f.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),f.ajaxTransport(\"script\",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName(\"head\")[0]||c.documentElement;return{send:function(f,g){d=c.createElement(\"script\"),d.async=\"async\",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,\"success\")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&\"withCredentials\"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c)\n"
-"{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e[\"X-Requested-With\"]&&(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=\"\"}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,cp,cq=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu(\"show\",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,\"olddisplay\")&&e===\"none\"&&(e=d.style.display=\"\"),e===\"\"&&f.css(d,\"display\")===\"none\"&&f._data(d,\"olddisplay\",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===\"\"||e===\"none\")d.style.display=f._data(d,\"olddisplay\")||\"\"}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu(\"hide\",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,\"display\"),e!==\"none\"&&!f._data(d,\"olddisplay\")&&f._data(d,\"olddisplay\",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display=\"none\");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a==\"boolean\";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(\":hidden\");f(this)[b?\"show\":\"hide\"]()}):this.animate(cu(\"toggle\",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(\":hidden\"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||\"swing\";if(h===\"hide\"&&d||h===\"show\"&&!d)return b.complete.call(this);c&&(g===\"height\"||g===\"width\")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,\"display\")===\"inline\"&&f.css(this,\"float\")===\"none\"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)===\"inline\"?this.style.display=\"inline-block\":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow=\"hidden\");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,\"toggle\"+i)||(h===\"toggle\"?d?\"show\":\"hide\":0),o?(f._data(this,\"toggle\"+i,o===\"show\"?\"hide\":\"show\"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?\"\":\"px\"),n!==\"px\"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]===\"-=\"?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,\"\"));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!=\"string\"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||\"fx\",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(\".run\")===b.length-4&&h(this,g,b);else g[b=a+\".run\"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu(\"show\",1),slideUp:cu(\"hide\",1),slideToggle:cu(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a==\"object\"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration==\"number\"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue=\"fx\";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.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 a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b===\"auto\"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?\"\":\"px\"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,\"fxshow\"+e.prop)===b&&f._data(e.elem,\"fxshow\"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,\"fxshow\"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each([\"\",\"X\",\"Y\"],function(a,b){h.style[\"overflow\"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,\"fxshow\"+b,!0),f.removeData(h,\"toggle\"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,\"opacity\",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each([\"width\",\"height\"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;\"getBoundingClientRect\"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position===\"fixed\")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!==\"visible\"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position===\"relative\"||k.position===\"static\")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position===\"fixed\"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,\"marginTop\"))||0,c+=parseFloat(f.css(a,\"marginLeft\"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,\"position\");d===\"static\"&&(a.style.position=\"relative\");var e=f(a),g=e.offset(),h=f.css(a,\"top\"),i=f.css(a,\"left\"),j=(d===\"absolute\"||d===\"fixed\")&&f.inArray(\"auto\",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),\"using\"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,\"marginTop\"))||0,c.left-=parseFloat(f.css(a,\"marginLeft\"))||0,d.top+=parseFloat(f.css(b[0],\"borderTopWidth\"))||0,d.left+=parseFloat(f.css(b[0],\"borderLeftWidth\"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,\"position\")===\"static\")a=a.offsetParent;return a})}}),f.each([\"Left\",\"Top\"],function(a,c){var d=\"scroll\"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?\"pageXOffset\"in g?g[a?\"pageYOffset\":\"pageXOffset\"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each([\"Height\",\"Width\"],function(a,c){var d=c.toLowerCase();f.fn[\"inner\"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,\"padding\")):this[d]():null},f.fn[\"outer\"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?\"margin\":\"border\")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement[\"client\"+c],h=e.document.body;return e.document.compatMode===\"CSS1Compat\"&&g||h&&h[\"client\"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement[\"client\"+c],e.body[\"scroll\"+c],e.documentElement[\"scroll\"+c],e.body[\"offset\"+c],e.documentElement[\"offset\"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a==\"string\"?a:a+\"px\")}}),a.jQuery=a.$=f,typeof define==\"function\"&&define.amd&&define.amd.jQuery&&define(\"jquery\",[],function(){return f})})(window);\n"
+"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)\n"
+"}}}}})}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\n"
+"})}})(window);\n"
diff --git a/src/jquery_ui.js b/src/jquery_ui.js
index b705d2e..0ef321d 100644
--- a/src/jquery_ui.js
+++ b/src/jquery_ui.js
@@ -7,8 +7,7 @@
*
* http://docs.jquery.com/UI
*/
-(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(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(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=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):b=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"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);
-/*!
+(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)
@@ -17,8 +16,7 @@
*
* http://docs.jquery.com/UI/Widget
*/
-(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.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(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);
-/*!
+(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)
@@ -30,24 +28,8 @@
* Depends:
* jquery.ui.widget.js
*/
-(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);
-/*
- * jQuery UI Resizable 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/Resizables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<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=!0,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=c.handles||(a(".ui-resizable-handle",this.element).length?{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"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(":hidden")||!!a(c).parents(":hidden").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,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}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p
-&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);
-/*
+(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/
*
@@ -55,4 +37,4 @@
* 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($,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/jquery_ui_js.h b/src/jquery_ui_js.h
index f27a5ba..c860682 100644
--- a/src/jquery_ui_js.h
+++ b/src/jquery_ui_js.h
@@ -7,8 +7,7 @@
" *\n"
" * http://docs.jquery.com/UI\n"
" */\n"
-"(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,\"visibility\")===\"hidden\"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if(\"area\"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!==\"map\")return!1;h=a(\"img[usemap=#\"+g+\"]\")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:\"a\"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(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(b,c){return typeof b==\"number\"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css(\"position\"))||/absolute/.test(this.css(\"position\"))?b=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):b=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\"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css(\"zIndex\",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css(\"position\");if(e===\"absolute\"||e===\"relative\"||e===\"fixed\"){f=parseInt(d.css(\"zIndex\"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?\"selectstart\":\"mousedown\")+\".ui-disableSelection\",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(\".ui-disableSelection\")}}),a.each([\"Width\",\"Height\"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,\"padding\"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,\"border\"+this+\"Width\",!0))||0),f&&(c-=parseFloat(a.curCSS(b,\"margin\"+this,!0))||0)});return c}var e=d===\"Width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn[\"inner\"+d]=function(c){if(c===b)return g[\"inner\"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+\"px\")})},a.fn[\"outer\"+d]=function(b,c){if(typeof b!=\"number\")return g[\"outer\"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+\"px\")})}}),a.extend(a.expr[\":\"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,\"tabindex\")))},tabbable:function(b){var d=a.attr(b,\"tabindex\"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement(\"div\"));c.offsetHeight,a.extend(c.style,{minHeight:\"100px\",height:\"auto\",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart=\"onselectstart\"in c,b.removeChild(c).style.display=\"none\"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css(\"overflow\")===\"hidden\")return!1;var d=c&&c===\"left\"?\"scrollLeft\":\"scrollTop\",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);\n"
-"/*!\n"
+"(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);/*!\n"
" * jQuery UI Widget 1.8.18\n"
" *\n"
" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
@@ -17,8 +16,7 @@
" *\n"
" * http://docs.jquery.com/UI/Widget\n"
" */\n"
-"(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler(\"remove\")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a(\"*\",this).add([this]).each(function(){try{a(this).triggerHandler(\"remove\")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(\".\")[0],f;b=b.split(\".\")[1],f=e+\"-\"+b,d||(d=c,c=a.Widget),a.expr[\":\"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e==\"string\",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)===\"_\")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind(\"remove.\"+this.widgetName,function(){d.destroy()}),this._create(),this._trigger(\"create\"),this._init()},_getCreateOptions:function(){return a.metadata&&a.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(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c==\"string\"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a===\"disabled\"&&this.widget()[b?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled\"+\" \"+\"ui-state-disabled\").attr(\"aria-disabled\",b);return this},enable:function(){return this._setOption(\"disabled\",!1)},disable:function(){return this._setOption(\"disabled\",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);\n"
-"/*!\n"
+"(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);/*!\n"
" * jQuery UI Mouse 1.8.18\n"
" *\n"
" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
@@ -30,24 +28,8 @@
" * Depends:\n"
" * jquery.ui.widget.js\n"
" */\n"
-"(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget(\"ui.mouse\",{options:{cancel:\":input,option\",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind(\"mousedown.\"+this.widgetName,function(a){return b._mouseDown(a)}).bind(\"click.\"+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+\".preventClickEvent\")){a.removeData(c.target,b.widgetName+\".preventClickEvent\"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel==\"string\"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+\".preventClickEvent\")&&a.removeData(b.target,this.widgetName+\".preventClickEvent\"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+\".preventClickEvent\",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);\n"
-"/*\n"
-" * jQuery UI Resizable 1.8.18\n"
-" *\n"
-" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
-" * http://jquery.org/license\n"
-" *\n"
-" * http://docs.jquery.com/UI/Resizables\n"
-" *\n"
-" * Depends:\n"
-" * jquery.ui.core.js\n"
-" * jquery.ui.mouse.js\n"
-" * jquery.ui.widget.js\n"
-" */\n"
-"(function(a,b){a.widget(\"ui.resizable\",a.ui.mouse,{widgetEventPrefix:\"resize\",options:{alsoResize:!1,animate:!1,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:\"e,s,se\",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass(\"ui-resizable\"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||\"ui-resizable-helper\":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<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=!0,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=c.handles||(a(\".ui-resizable-handle\",this.element).length?{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\"}:\"e,s,se\");if(this.handles.constructor==String){this.handles==\"all\"&&(this.handles=\"n,e,s,w,se,sw,ne,nw\");var d=this.handles.split(\",\");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g=\"ui-resizable-\"+f,h=a('<div class=\"ui-resizable-handle '+g+'\"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),\"se\"==f&&h.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\"),this.handles[f]=\".ui-resizable-\"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=[\"padding\",/ne|nw|n/.test(c)?\"Top\":/se|sw|s/.test(c)?\"Bottom\":/^e$/.test(c)?\"Right\":\"Left\"].join(\"\");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(\".ui-resizable-handle\",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:\"se\"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass(\"ui-resizable-autohide\").hover(function(){c.disabled||(a(this).removeClass(\"ui-resizable-autohide\"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass(\"ui-resizable-autohide\"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css(\"position\"),width:c.outerWidth(),height:c.outerHeight(),top:c.css(\"top\"),left:c.css(\"left\")})).remove()}this.originalElement.css(\"resize\",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(\".ui-draggable\")||/absolute/.test(f.css(\"position\")))&&f.css({position:\"absolute\",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css(\"left\")),h=c(this.helper.css(\"top\"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio==\"number\"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(\".ui-resizable-\"+this.axis).css(\"cursor\");a(\"body\").css(\"cursor\",i==\"auto\"?this.axis+\"-resize\":i),f.addClass(\"ui-resizable-resizing\"),this._propagate(\"start\",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate(\"resize\",b),c.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger(\"resize\",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],\"left\")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css(\"left\"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css(\"top\"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a(\"body\").css(\"cursor\",\"auto\"),this.element.removeClass(\"ui-resizable-resizing\"),this._propagate(\"stop\",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g==\"sw\"&&(a.left=e.left+(f.width-a.width),a.top=null),g==\"nw\"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css(\"borderTopWidth\"),e.css(\"borderRightWidth\"),e.css(\"borderBottomWidth\"),e.css(\"borderLeftWidth\")],g=[e.css(\"paddingTop\"),e.css(\"paddingRight\"),e.css(\"paddingBottom\"),e.css(\"paddingLeft\")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(\":hidden\")||!!a(c).parents(\":hidden\").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style=\"overflow:hidden;\"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:\"absolute\",left:this.elementOffset.left-e+\"px\",top:this.elementOffset.top-e+\"px\",zIndex:++c.zIndex}),this.helper.appendTo(\"body\").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!=\"resize\"&&this._trigger(b,c,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}}}),a.extend(a.ui.resizable,{version:\"1.8.18\"}),a.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data(\"resizable-alsoresize\",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css(\"left\"),10),top:parseInt(b.css(\"top\"),10)})})};typeof e.alsoResize==\"object\"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data(\"resizable-alsoresize\"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize==\"object\"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData(\"resizable-alsoresize\")}}),a.ui.plugin.add(\"resizable\",\"animate\",{stop:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],\"left\")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css(\"left\"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css(\"top\"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css(\"width\"),10),height:parseInt(d.element.css(\"height\"),10),top:parseInt(d.element.css(\"top\"),10),left:parseInt(d.element.css(\"left\"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate(\"resize\",b)}})}}),a.ui.plugin.add(\"resizable\",\"containment\",{start:function(b,d){var e=a(this).data(\"resizable\"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(a,b){k[a]=c(j.css(\"padding\"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,\"left\")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css(\"position\"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css(\"position\"));o&&p\n"
-"&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css(\"position\"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css(\"position\"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add(\"resizable\",\"ghost\",{start:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:\"block\",position:\"relative\",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof e.ghost==\"string\"?e.ghost:\"\"),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data(\"resizable\"),e=d.options;d.ghost&&d.ghost.css({position:\"relative\",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data(\"resizable\"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add(\"resizable\",\"grid\",{resize:function(b,c){var d=a(this).data(\"resizable\"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid==\"number\"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);\n"
-"/*\n"
+"(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;\n"
+"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);/*!\n"
" * jQuery hashchange event - v1.3 - 7/21/2010\n"
" * http://benalman.com/projects/jquery-hashchange-plugin/\n"
" * \n"
diff --git a/src/language.cpp b/src/language.cpp
index ab69cf2..1037d7f 100644
--- a/src/language.cpp
+++ b/src/language.cpp
@@ -387,7 +387,7 @@ bool setTranslator(const char *langName)
#ifdef LANG_AR
else if (L_EQUAL("arabic"))
{
- theTranslator=new TranslatorDecoder(new TranslatorArabic);
+ theTranslator=new TranslatorArabic;
}
#endif
#ifdef LANG_FA
@@ -428,6 +428,6 @@ bool setTranslator(const char *langName)
}
QCString msg = theTranslator->updateNeededMessage();
- if (!msg.isEmpty()) err(msg);
+ if (!msg.isEmpty()) warn_uncond(msg);
return TRUE;
}
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index ce20e0d..0a96530 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -257,7 +257,7 @@ void LatexDocVisitor::visit(DocSymbol *s)
case DocSymbol::LeftFloor: m_t << "{$\\lfloor$}"; break;
case DocSymbol::RightFloor: m_t << "{$\\rfloor$}"; break;
default:
- err("error: unknown symbol found\n");
+ err("unknown symbol found\n");
}
}
@@ -424,10 +424,10 @@ void LatexDocVisitor::visit(DocVerbatim *s)
void LatexDocVisitor::visit(DocAnchor *anc)
{
if (m_hide) return;
- m_t << "\\label{" << anc->file() << "_" << anc->anchor() << "}%" << endl;
+ m_t << "\\label{" << stripPath(anc->file()) << "_" << anc->anchor() << "}%" << endl;
if (!anc->file().isEmpty() && Config_getBool("PDF_HYPERLINKS"))
{
- m_t << "\\hypertarget{" << anc->file() << "_" << anc->anchor()
+ m_t << "\\hypertarget{" << stripPath(anc->file()) << "_" << anc->anchor()
<< "}{}%" << endl;
}
}
@@ -798,11 +798,11 @@ void LatexDocVisitor::visitPre(DocSection *s)
if (m_hide) return;
if (Config_getBool("PDF_HYPERLINKS"))
{
- m_t << "\\hypertarget{" << s->file() << "_" << s->anchor() << "}{}";
+ m_t << "\\hypertarget{" << stripPath(s->file()) << "_" << s->anchor() << "}{}";
}
m_t << "\\" << getSectionName(s->level()) << "{";
filter(convertCharEntitiesToUTF8(s->title().data()));
- m_t << "}\\label{" << s->file() << "_" << s->anchor() << "}" << endl;
+ m_t << "}\\label{" << stripPath(s->file()) << "_" << s->anchor() << "}" << endl;
}
void LatexDocVisitor::visitPost(DocSection *)
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 8f99b30..ac73331 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -777,7 +777,7 @@ static void writeDefaultStyleSheet(FTextStream &t)
t << "% Used by parameter lists\n"
"\\newenvironment{DoxyParams}[2][]{%\n"
" \\begin{DoxyDesc}{#2}%\n"
- " \\item[] \\hspace{\\fill} \\vspace{-40pt}%\n"
+ " \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
" \\settowidth{\\labelwidth}{40pt}%\n"
" \\setlength{\\LTleft}{0pt}%\n"
" \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
@@ -801,7 +801,7 @@ static void writeDefaultStyleSheet(FTextStream &t)
t << "% Used for fields of simple structs\n"
"\\newenvironment{DoxyFields}[1]{%\n"
" \\begin{DoxyDesc}{#1}%\n"
- " \\item[] \\hspace{\\fill} \\vspace{-40pt}%\n"
+ " \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
" \\settowidth{\\labelwidth}{40pt}%\n"
" \\setlength{\\LTleft}{0pt}%\n"
" \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
@@ -840,9 +840,6 @@ static void writeDefaultStyleSheet(FTextStream &t)
" \\begin{DoxyDesc}{#1}%\n"
" \\begin{description}%\n"
" \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
- " \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
- " \\rowcolors{1}{white}{tableShade}%\n"
- " \\arrayrulecolor{gray}%\n"
" \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
" \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
" p{0.705\\textwidth}|}%\n"
@@ -858,9 +855,6 @@ static void writeDefaultStyleSheet(FTextStream &t)
" \\begin{DoxyDesc}{#1}%\n"
" \\begin{description}%\n"
" \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
- " \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
- " \\rowcolors{1}{white}{tableShade}%\n"
- " \\arrayrulecolor{gray}%\n"
" \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
" \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
" p{0.705\\textwidth}|}%\n"
@@ -1715,7 +1709,7 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name)
t << "}" << endl;
if (name)
{
- t << "\\label{" << fileName << "}\\index{";
+ t << "\\label{" << stripPath(fileName) << "}\\index{";
escapeLabelName(name);
t << "@{";
escapeMakeIndexChars(name);
@@ -1875,7 +1869,7 @@ void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
t << "}";
}
t << "\\label{";
- if (fName) t << fName;
+ if (fName) t << stripPath(fName);
if (anchor) t << "_" << anchor;
t << "}" << endl;
}
diff --git a/src/layout.cpp b/src/layout.cpp
index acddbc0..c2b1ac5 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -64,7 +64,7 @@ static bool elemIsVisible(const QXmlAttributes &attrib,bool defVal=TRUE)
}
else if (!opt)
{
- err("error: found unsupported value %s for visible attribute in layout file\n",
+ err("found unsupported value %s for visible attribute in layout file\n",
visible.data());
}
}
@@ -120,7 +120,7 @@ QCString LayoutNavEntry::url() const
}
if (!found)
{
- msg("warning: explicit link request to '%s' in layout file '%s' could not be resolved\n",qPrint(url.mid(5)),qPrint(Config_getString("LAYOUT_FILE")));
+ msg("explicit link request to '%s' in layout file '%s' could not be resolved\n",qPrint(url.mid(5)),qPrint(Config_getString("LAYOUT_FILE")));
}
}
//printf("LayoutNavEntry::url()=%s\n",url.data());
@@ -1061,11 +1061,11 @@ class LayoutParser : public QXmlDefaultHandler
{
if (type.isEmpty())
{
- err("error: an entry tag within a navindex has no type attribute! Check your layout file!\n");
+ err("an entry tag within a navindex has no type attribute! Check your layout file!\n");
}
else
{
- err("error: the type '%s' is not supported for the entry tag within a navindex! Check your layout file!\n",type.data());
+ err("the type '%s' is not supported for the entry tag within a navindex! Check your layout file!\n",type.data());
}
m_invalidEntry=TRUE;
return;
@@ -1239,7 +1239,7 @@ class LayoutParser : public QXmlDefaultHandler
}
else
{
- err("error: Unexpected start tag `%s' found in scope='%s'!\n",
+ err("Unexpected start tag `%s' found in scope='%s'!\n",
name.data(),m_scope.data());
}
return TRUE;
@@ -1289,21 +1289,21 @@ class LayoutErrorHandler : public QXmlErrorHandler
LayoutErrorHandler(const char *fn) : fileName(fn) {}
bool warning( const QXmlParseException &exception )
{
- err("warning: at line %d column %d of %s: %s\n",
+ warn_uncond("at line %d column %d of %s: %s\n",
exception.lineNumber(),exception.columnNumber(),fileName.data(),
exception.message().data());
return FALSE;
}
bool error( const QXmlParseException &exception )
{
- err("error: at line %d column %d of %s: %s\n",
+ err("at line %d column %d of %s: %s\n",
exception.lineNumber(),exception.columnNumber(),fileName.data(),
exception.message().data());
return FALSE;
}
bool fatalError( const QXmlParseException &exception )
{
- err("fatal error: at line %d column %d of %s: %s\n",
+ err("fatal: at line %d column %d of %s: %s\n",
exception.lineNumber(),exception.columnNumber(),fileName.data(),
exception.message().data());
return FALSE;
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 6b1cb7e..48bd7df 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -78,7 +78,6 @@ HEADERS = arguments.h \
latexgen.h \
layout.h \
layout_default.h \
- lockingptr.h \
logos.h \
mandocvisitor.h \
mangen.h \
diff --git a/src/libdoxygen.t.in b/src/libdoxygen.t.in
index 53628dd..6b45ce7 100644
--- a/src/libdoxygen.t.in
+++ b/src/libdoxygen.t.in
@@ -162,6 +162,9 @@ jquery_p2_js.h: jquery_p2.js
jquery_p3_js.h: jquery_p3.js
cat jquery_p3.js | $(TO_C_CMD) >jquery_p3_js.h
+jquery_p4_js.h: jquery_p4.js
+ cat jquery_p4.js | $(TO_C_CMD) >jquery_p4_js.h
+
jquery_ui_js.h: jquery_ui.js
cat jquery_ui.js | $(TO_C_CMD) >jquery_ui_js.h
diff --git a/src/markdown.cpp b/src/markdown.cpp
index 9411782..c15516e 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -1449,11 +1449,11 @@ static bool isCodeBlock(const char *data,int offset,int size,int &indent)
*/
int findTableColumns(const char *data,int size,int &start,int &end,int &columns)
{
- int i=0;
+ int i=0,n=0;
int eol;
// find start character of the table line
while (i<size && data[i]==' ') i++;
- if (i<size && data[i]=='|') i++; // leading | does not count
+ if (i<size && data[i]=='|' && data[i]!='\n') i++,n++; // leading | does not count
start = i;
// find end character of the table line
@@ -1461,15 +1461,19 @@ int findTableColumns(const char *data,int size,int &start,int &end,int &columns)
eol=i+1;
i--;
while (i>0 && data[i]==' ') i--;
- if (i>0 && data[i]=='|') i--; // trailing | does not count
+ if (i>0 && data[i]=='|') i--,n++; // trailing | does not count
end = i;
// count columns between start and end
- columns=1;
+ columns=0;
+ if (n==2) // table row has | ... |
+ {
+ columns++;
+ }
if (end>start)
{
i=start;
- while (i<=end)
+ while (i<=end) // look for more column markers
{
if (data[i]=='|' && (i==0 || data[i-1]!='\\')) columns++;
i++;
@@ -1487,7 +1491,7 @@ static bool isTableBlock(const char *data,int size)
// the first line should have at least two columns separated by '|'
int i = findTableColumns(data,size,start,end,cc0);
- if (i>=size || cc0<2)
+ if (i>=size || cc0<1)
{
//printf("isTableBlock: no |'s in the header\n");
return FALSE;
@@ -1580,9 +1584,9 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
out.addStr("<th");
switch (columnAlignment[k])
{
- case AlignLeft: out.addStr(" align=left"); break;
- case AlignRight: out.addStr(" align=right"); break;
- case AlignCenter: out.addStr(" align=center"); break;
+ case AlignLeft: out.addStr(" align=\"left\""); break;
+ case AlignRight: out.addStr(" align=\"right\""); break;
+ case AlignCenter: out.addStr(" align=\"center\""); break;
case AlignNone: break;
}
out.addStr(">");
@@ -1592,6 +1596,7 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
}
m++;
}
+ out.addStr("\n</th>\n");
// write table cells
while (i<size)
@@ -1611,9 +1616,9 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
out.addStr("<td");
switch (columnAlignment[k])
{
- case AlignLeft: out.addStr(" align=left"); break;
- case AlignRight: out.addStr(" align=right"); break;
- case AlignCenter: out.addStr(" align=center"); break;
+ case AlignLeft: out.addStr(" align=\"left\""); break;
+ case AlignRight: out.addStr(" align=\"right\""); break;
+ case AlignCenter: out.addStr(" align=\"center\""); break;
case AlignNone: break;
}
out.addStr(">");
@@ -1635,7 +1640,7 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
i+=ret;
}
- out.addStr("</table>\n");
+ out.addStr("</table> ");
delete[] columnAlignment;
return i;
@@ -2248,7 +2253,9 @@ QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input
void MarkdownFileParser::parseInput(const char *fileName,
const char *fileBuf,
- Entry *root)
+ Entry *root,
+ bool /*sameTranslationUnit*/,
+ QStrList & /*filesInSameTranslationUnit*/)
{
Entry *current = new Entry;
current->lang = SrcLangExt_Markdown;
@@ -2266,12 +2273,15 @@ void MarkdownFileParser::parseInput(const char *fileName,
QCString id;
QCString title=extractPageTitle(docs,id).stripWhiteSpace();
//g_correctSectionLevel = !title.isEmpty();
- QCString baseFn = QFileInfo(fileName).baseName().utf8();
- QCString fn = QFileInfo(fileName).fileName().utf8();
- QCString baseName = substitute(baseFn," ","_");
+ QCString baseFn = stripFromPath(QFileInfo(fileName).absFilePath().utf8());
+ int i = baseFn.findRev('.');
+ if (i!=-1) baseFn = baseFn.left(i);
+ QCString titleFn = QFileInfo(fileName).baseName().utf8();
+ QCString fn = QFileInfo(fileName).fileName().utf8();
+ QCString baseName = substitute(substitute(baseFn," ","_"),"/","_");
static QCString mdfileAsMainPage = Config_getString("USE_MDFILE_AS_MAINPAGE");
if (id.isEmpty()) id = "md_"+baseName;
- if (title.isEmpty()) title = baseName;
+ if (title.isEmpty()) title = titleFn;
if (fn==mdfileAsMainPage)
{
docs.prepend("@mainpage\n");
diff --git a/src/markdown.h b/src/markdown.h
index a9f80ee..71884d5 100644
--- a/src/markdown.h
+++ b/src/markdown.h
@@ -28,9 +28,13 @@ class MarkdownFileParser : public ParserInterface
{
public:
virtual ~MarkdownFileParser() {}
+ void startTranslationUnit(const char *) {}
+ void finishTranslationUnit() {}
void parseInput(const char *fileName,
const char *fileBuf,
- Entry *root);
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList &filesInSameTranslationUnit);
bool needsPreprocessing(const QCString &) { return FALSE; }
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index cdf5686..c5bf787 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -45,14 +45,6 @@
#include "filedef.h"
#include "config.h"
-#define START_MARKER 0x4D454D5B // MEM[
-#define END_MARKER 0x4D454D5D // MEM]
-
-// Put this macro at the start of any method of MemberDef that can directly
-// or indirectly access other MemberDefs. It prevents that the content
-// pointed to by m_impl gets flushed to disk in the middle of the method call!
-#define KEEP_RESIDENT_DURING_CALL makeResident();LockingPtr<MemberDef> lock(this,this)
-
//-----------------------------------------------------------------------------
int MemberDef::s_indentLevel = 0;
@@ -129,7 +121,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
const QCString & /*scopeName*/,MemberDef *md)
{
- LockingPtr<ArgumentList> defArgList=(md->isDocsForDefinition()) ?
+ ArgumentList *defArgList=(md->isDocsForDefinition()) ?
md->argumentList() : md->declArgumentList();
//printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition());
if (defArgList==0 || md->isProperty())
@@ -765,11 +757,8 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
) : Definition(df,dl,dc,removeRedundantWhiteSpace(na))
{
//printf("MemberDef::MemberDef(%s)\n",na);
- m_storagePos=-1;
- m_cacheHandle=-1;
m_impl = new MemberDefImpl;
m_impl->init(this,t,a,e,p,v,s,r,mt,tal,al);
- m_flushPending = FALSE;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
m_isDestructorCached = 0;
@@ -777,10 +766,7 @@ MemberDef::MemberDef(const char *df,int dl,int dc,
MemberDef::MemberDef(const MemberDef &md) : Definition(md)
{
- m_storagePos=-1;
- m_cacheHandle=-1;
m_impl = new MemberDefImpl;
- m_flushPending = FALSE;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
m_isDestructorCached = 0;
@@ -788,7 +774,6 @@ MemberDef::MemberDef(const MemberDef &md) : Definition(md)
MemberDef *MemberDef::deepCopy() const
{
- makeResident();
//MemberDef *result = new MemberDef(getDefFileName(),getDefLine(),name());
MemberDef *result = new MemberDef(*this);
// first copy everything by reference
@@ -887,23 +872,15 @@ MemberDef::~MemberDef()
delete m_impl;
//printf("%p: ~MemberDef()\n",this);
m_impl=0;
- if (m_cacheHandle!=-1)
- {
- Doxygen::symbolCache->del(m_cacheHandle);
- m_cacheHandle=-1;
- }
}
void MemberDef::setReimplements(MemberDef *md)
{
- makeResident();
-
m_impl->redefines = md;
}
void MemberDef::insertReimplementedBy(MemberDef *md)
{
- makeResident();
if (m_impl->templateMaster)
{
m_impl->templateMaster->insertReimplementedBy(md);
@@ -917,19 +894,16 @@ void MemberDef::insertReimplementedBy(MemberDef *md)
MemberDef *MemberDef::reimplements() const
{
- makeResident();
return m_impl->redefines;
}
-LockingPtr<MemberList> MemberDef::reimplementedBy() const
+MemberList *MemberDef::reimplementedBy() const
{
- makeResident();
- return LockingPtr<MemberList>(this,m_impl->redefinedBy);
+ return m_impl->redefinedBy;
}
bool MemberDef::isReimplementedBy(ClassDef *cd) const
{
- makeResident();
if (cd && m_impl->redefinedBy)
{
MemberListIterator mi(*m_impl->redefinedBy);
@@ -951,7 +925,6 @@ bool MemberDef::isReimplementedBy(ClassDef *cd) const
void MemberDef::insertEnumField(MemberDef *md)
{
- makeResident();
if (m_impl->enumFields==0) m_impl->enumFields=new MemberList(MemberListType_enumFields);
m_impl->enumFields->append(md);
}
@@ -959,7 +932,6 @@ void MemberDef::insertEnumField(MemberDef *md)
bool MemberDef::addExample(const char *anchor,const char *nameStr,
const char *file)
{
- makeResident();
//printf("%s::addExample(%s,%s,%s)\n",name().data(),anchor,nameStr,file);
if (m_impl->exampleSDict==0) m_impl->exampleSDict = new ExampleSDict;
if (m_impl->exampleSDict->find(nameStr)==0)
@@ -977,7 +949,6 @@ bool MemberDef::addExample(const char *anchor,const char *nameStr,
bool MemberDef::hasExamples()
{
- makeResident();
if (m_impl->exampleSDict==0)
return FALSE;
else
@@ -986,7 +957,6 @@ bool MemberDef::hasExamples()
QCString MemberDef::getOutputFileBase() const
{
- makeResident();
static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES");
QCString baseName;
//printf("Member: %s: templateMaster=%p group=%p classDef=%p nspace=%p fileDef=%p\n",
@@ -1020,7 +990,7 @@ QCString MemberDef::getOutputFileBase() const
if (baseName.isEmpty())
{
warn(getDefFileName(),getDefLine(),
- "warning: Internal inconsistency: member %s does not belong to any"
+ "Internal inconsistency: member %s does not belong to any"
" container!",qPrint(name())
);
return "dummy";
@@ -1041,7 +1011,6 @@ QCString MemberDef::getOutputFileBase() const
QCString MemberDef::getReference() const
{
- makeResident();
QCString ref = Definition::getReference();
if (!ref.isEmpty())
{
@@ -1072,7 +1041,6 @@ QCString MemberDef::getReference() const
QCString MemberDef::anchor() const
{
- KEEP_RESIDENT_DURING_CALL;
QCString result=m_impl->anc;
if (m_impl->groupAlias) return m_impl->groupAlias->anchor();
if (m_impl->templateMaster) return m_impl->templateMaster->anchor();
@@ -1096,7 +1064,6 @@ QCString MemberDef::anchor() const
void MemberDef::_computeLinkableInProject()
{
- KEEP_RESIDENT_DURING_CALL;
static bool extractStatic = Config_getBool("EXTRACT_STATIC");
m_isLinkableCached = 2; // linkable
//printf("MemberDef::isLinkableInProject(name=%s)\n",name().data());
@@ -1168,28 +1135,24 @@ void MemberDef::_computeLinkableInProject()
void MemberDef::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
{
- makeResident();
Definition::setDocumentation(d,docFile,docLine,stripWhiteSpace);
m_isLinkableCached = 0;
}
void MemberDef::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
- makeResident();
Definition::setBriefDescription(b,briefFile,briefLine);
m_isLinkableCached = 0;
}
void MemberDef::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
{
- makeResident();
Definition::setInbodyDocumentation(d,inbodyFile,inbodyLine);
m_isLinkableCached = 0;
}
void MemberDef::setHidden(bool b)
{
- makeResident();
Definition::setHidden(b);
m_isLinkableCached = 0;
}
@@ -1207,7 +1170,6 @@ bool MemberDef::isLinkableInProject() const
bool MemberDef::isLinkable() const
{
- makeResident();
if (m_impl->templateMaster)
{
return m_impl->templateMaster->isLinkable();
@@ -1223,7 +1185,6 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
{
if (lists)
{
- makeResident();
if (m_impl->defTmpArgLists) delete m_impl->defTmpArgLists;
m_impl->defTmpArgLists = copyArgumentLists(lists);
}
@@ -1232,7 +1193,6 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
FileDef *fd,GroupDef *gd,bool onlyText)
{
- KEEP_RESIDENT_DURING_CALL;
SrcLangExt lang = getLanguage();
static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
QCString sep = getLanguageSpecificSeparator(lang,TRUE);
@@ -1285,12 +1245,7 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
*/
ClassDef *MemberDef::getClassDefOfAnonymousType()
{
- // split KEEP_RESIDENT_DURING_CALL for performance
- makeResident();
if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType;
- LockingPtr<MemberDef> lock(this,this); // since this memberDef can access
- // other memberDefs prevent it from
- // being flushed to disk halfway
QCString cname;
if (getClassDef()!=0)
@@ -1355,8 +1310,6 @@ bool MemberDef::isBriefSectionVisible() const
// "", //getFileDef()->name().data(),
// argsString());
- KEEP_RESIDENT_DURING_CALL;
-
MemberGroupInfo *info = Doxygen::memGrpInfoDict[m_impl->grpId];
//printf("name=%s m_impl->grpId=%d info=%p\n",name().data(),m_impl->grpId,info);
//QCString *pMemGrp = Doxygen::memberDocDict[grpId];
@@ -1447,7 +1400,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
// hide enum value, since they appear already as part of the enum, unless they
// are explicitly grouped.
- KEEP_RESIDENT_DURING_CALL;
if (!inGroup && m_impl->mtype==MemberType_EnumValue) return;
// hide members whose brief section should not be visible
@@ -1817,36 +1769,42 @@ void MemberDef::writeDeclaration(OutputList &ol,
/* && !annMemb */
)
{
- ol.startMemberDescription(anchor(),inheritId);
- ol.parseDoc(briefFile(),briefLine(),
+ DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),
getOuterScope()?getOuterScope():d,this,briefDescription(),
TRUE,FALSE,0,TRUE,FALSE);
- if (detailsVisible)
+
+ if (rootNode && !rootNode->isEmpty())
{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- //ol.endEmphasis();
- ol.docify(" ");
- if (m_impl->group!=0 && gd==0) // forward link to the group
- {
- ol.startTextLink(getOutputFileBase(),anchor());
- }
- else // local link
+ ol.startMemberDescription(anchor(),inheritId);
+ ol.writeDoc(rootNode,getOuterScope()?getOuterScope():d,this);
+ if (detailsVisible)
{
- ol.startTextLink(0,anchor());
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Html);
+ //ol.endEmphasis();
+ ol.docify(" ");
+ if (m_impl->group!=0 && gd==0) // forward link to the group
+ {
+ ol.startTextLink(getOutputFileBase(),anchor());
+ }
+ else // local link
+ {
+ ol.startTextLink(0,anchor());
+ }
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ //ol.startEmphasis();
+ ol.popGeneratorState();
}
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- //ol.startEmphasis();
- ol.popGeneratorState();
- }
- // for RTF we need to add an extra empty paragraph
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::RTF);
+ // for RTF we need to add an extra empty paragraph
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::RTF);
ol.startParagraph();
ol.endParagraph();
- ol.popGeneratorState();
- ol.endMemberDescription();
+ ol.popGeneratorState();
+ ol.endMemberDescription();
+ }
+ delete rootNode;
}
ol.endMemberDeclaration(anchor(),inheritId);
@@ -1863,8 +1821,6 @@ bool MemberDef::isDetailedSectionLinkable() const
static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS");
static bool extractStatic = Config_getBool("EXTRACT_STATIC");
- KEEP_RESIDENT_DURING_CALL;
-
// the member has details documentation for any of the following reasons
bool docFilter =
// treat everything as documented
@@ -2061,7 +2017,7 @@ void MemberDef::_writeCallGraph(OutputList &ol)
DotCallGraph callGraph(this,FALSE);
if (callGraph.isTooBig())
{
- err("warning: Call graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
+ warn_uncond("Call graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
}
else if (!callGraph.isTrivial())
{
@@ -2086,7 +2042,7 @@ void MemberDef::_writeCallerGraph(OutputList &ol)
DotCallGraph callerGraph(this, TRUE);
if (callerGraph.isTooBig())
{
- err("warning: Caller graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
+ warn_uncond("Caller graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
}
else if (!callerGraph.isTrivial() && !callerGraph.isTooBig())
{
@@ -2154,7 +2110,7 @@ void MemberDef::_writeReimplements(OutputList &ol)
}
else
{
- err("error: translation error: no marker in trReimplementsFromList()\n");
+ err("translation error: no marker in trReimplementsFromList()\n");
}
ol.endParagraph();
}
@@ -2163,8 +2119,8 @@ void MemberDef::_writeReimplements(OutputList &ol)
void MemberDef::_writeReimplementedBy(OutputList &ol)
{
- LockingPtr<MemberList> bml=reimplementedBy();
- if (bml!=0)
+ MemberList *bml=reimplementedBy();
+ if (bml)
{
MemberListIterator mli(*bml);
MemberDef *bmd=0;
@@ -2318,9 +2274,9 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
if (isEnumerate())
{
bool first=TRUE;
- LockingPtr<MemberList> fmdl=enumFieldList();
+ MemberList *fmdl=enumFieldList();
//printf("** %s: enum values=%d\n",name().data(),fmdl!=0 ? fmdl->count() : 0);
- if (fmdl!=0)
+ if (fmdl)
{
MemberDef *fmd=fmdl->first();
while (fmd)
@@ -2367,7 +2323,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
if (hasBrief)
{
- ol.parseDoc(fmd->briefFile(),fmd->briefLine(),
+ ol.generateDoc(fmd->briefFile(),fmd->briefLine(),
getOuterScope()?getOuterScope():container,
fmd,fmd->briefDescription(),TRUE,FALSE);
}
@@ -2379,7 +2335,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
//}
if (hasDetails)
{
- ol.parseDoc(fmd->docFile(),fmd->docLine(),
+ ol.generateDoc(fmd->docFile(),fmd->docLine(),
getOuterScope()?getOuterScope():container,
fmd,fmd->documentation()+"\n",TRUE,FALSE);
}
@@ -2422,8 +2378,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if ( !hasDocs ) return;
if (isEnumValue() && !showEnumValues) return;
- KEEP_RESIDENT_DURING_CALL;
-
SrcLangExt lang = getLanguage();
//printf("member=%s lang=%d\n",name().data(),lang);
bool optVhdl = lang==SrcLangExt_VHDL;
@@ -2754,7 +2708,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
QCString brief = briefDescription();
QCString detailed = documentation();
- LockingPtr<ArgumentList> docArgList = LockingPtr<ArgumentList>(this,m_impl->defArgList);
+ ArgumentList *docArgList = m_impl->defArgList;
if (m_impl->templateMaster)
{
brief = m_impl->templateMaster->briefDescription();
@@ -2770,7 +2724,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
)
{
ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),
+ ol.generateDoc(briefFile(),briefLine(),
getOuterScope()?getOuterScope():container,this,
brief,FALSE,FALSE,0,TRUE,FALSE);
ol.endParagraph();
@@ -2788,12 +2742,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
else
{
- ol.parseDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE);
}
if (!inbodyDocumentation().isEmpty())
{
- ol.parseDoc(inbodyFile(),inbodyLine(),
+ ol.generateDoc(inbodyFile(),inbodyLine(),
getOuterScope()?getOuterScope():container,this,
inbodyDocumentation()+"\n",TRUE,FALSE);
}
@@ -2803,7 +2757,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
if (!inbodyDocumentation().isEmpty())
{
- ol.parseDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,inbodyDocumentation()+"\n",TRUE,FALSE);
+ ol.generateDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,inbodyDocumentation()+"\n",TRUE,FALSE);
}
}
@@ -2826,7 +2780,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
}
// feed the result to the documentation parser
- ol.parseDoc(
+ ol.generateDoc(
docFile(),docLine(),
getOuterScope()?getOuterScope():container,
this, // memberDef
@@ -2877,13 +2831,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (!hasDocumentedParams())
{
warn_doc_error(docFile(),docLine(),
- "warning: parameters of member %s are not (all) documented",
+ "parameters of member %s are not (all) documented",
qPrint(qualifiedName()));
}
if (!hasDocumentedReturnType() && isFunction() && hasDocumentation())
{
warn_doc_error(docFile(),docLine(),
- "warning: return type of member %s is not documented",
+ "return type of member %s is not documented",
qPrint(qualifiedName()));
}
}
@@ -2955,8 +2909,6 @@ static Definition *getClassFromType(Definition *scope,const QCString &type,SrcLa
void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
{
- KEEP_RESIDENT_DURING_CALL;
-
Definition *scope = getOuterScope();
QCString doxyName = name();
QCString doxyArgs = argsString();
@@ -3042,7 +2994,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
)
)
{
- ol.parseDoc(briefFile(),briefLine(),
+ ol.generateDoc(briefFile(),briefLine(),
getOuterScope()?getOuterScope():container,this,
brief,FALSE,FALSE,0,TRUE,FALSE);
}
@@ -3050,7 +3002,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
/* write detailed description */
if (!detailed.isEmpty())
{
- ol.parseDoc(docFile(),docLine(),
+ ol.generateDoc(docFile(),docLine(),
getOuterScope()?getOuterScope():container,this,
detailed+"\n",FALSE,FALSE,0,FALSE,FALSE);
@@ -3061,7 +3013,6 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
QCString MemberDef::memberTypeName() const
{
- makeResident();
switch (m_impl->mtype)
{
case MemberType_Define: return "macro definition";
@@ -3084,7 +3035,6 @@ QCString MemberDef::memberTypeName() const
void MemberDef::warnIfUndocumented()
{
- makeResident();
if (m_impl->memberGroup) return;
ClassDef *cd = getClassDef();
NamespaceDef *nd = getNamespaceDef();
@@ -3113,7 +3063,7 @@ void MemberDef::warnIfUndocumented()
!isReference()
)
{
- warn_undoc(getDefFileName(),getDefLine(),"warning: Member %s%s (%s) of %s %s is not documented.",
+ warn_undoc(getDefFileName(),getDefLine(),"Member %s%s (%s) of %s %s is not documented.",
qPrint(name()),qPrint(argsString()),qPrint(memberTypeName()),t,qPrint(d->name()));
}
}
@@ -3122,7 +3072,6 @@ void MemberDef::warnIfUndocumented()
bool MemberDef::isFriendClass() const
{
- makeResident();
return (isFriend() &&
(m_impl->type=="friend class" || m_impl->type=="friend struct" ||
m_impl->type=="friend union"));
@@ -3130,7 +3079,6 @@ bool MemberDef::isFriendClass() const
bool MemberDef::isDocumentedFriendClass() const
{
- makeResident();
ClassDef *fcd=0;
QCString baseName=name();
int i=baseName.find('<');
@@ -3141,7 +3089,6 @@ bool MemberDef::isDocumentedFriendClass() const
bool MemberDef::hasDocumentation() const
{
- makeResident();
return Definition::hasDocumentation() ||
(m_impl->mtype==MemberType_Enumeration && m_impl->docEnumValues) || // has enum values
(m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()); // has doc arguments
@@ -3158,20 +3105,17 @@ bool MemberDef::hasUserDocumentation() const
void MemberDef::setMemberGroup(MemberGroup *grp)
{
- makeResident();
m_impl->memberGroup = grp;
}
bool MemberDef::visibleMemberGroup(bool hideNoHeader)
{
- makeResident();
return m_impl->memberGroup!=0 &&
(!hideNoHeader || m_impl->memberGroup->header()!="[NOHEADER]");
}
QCString MemberDef::getScopeString() const
{
- makeResident();
QCString result;
if (getClassDef()) result=getClassDef()->displayName();
else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
@@ -3205,7 +3149,6 @@ static QCString escapeAnchor(const QCString &anchor)
void MemberDef::setAnchor()
{
- makeResident();
QCString memAnchor = name();
if (!m_impl->args.isEmpty()) memAnchor+=m_impl->args;
@@ -3238,7 +3181,6 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
bool hasDocs,MemberDef *member)
{
//printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data());
- makeResident();
m_impl->group=gd;
m_impl->grouppri=pri;
m_impl->groupFileName=fileName;
@@ -3250,7 +3192,6 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
{
- makeResident();
m_impl->enumScope=md;
m_impl->livesInsideEnum=livesInsideEnum;
if (md->getGroupDef())
@@ -3266,7 +3207,6 @@ void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
void MemberDef::setMemberClass(ClassDef *cd)
{
- makeResident();
m_impl->classDef=cd;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
@@ -3275,7 +3215,6 @@ void MemberDef::setMemberClass(ClassDef *cd)
void MemberDef::setNamespace(NamespaceDef *nd)
{
- makeResident();
m_impl->nspace=nd;
setOuterScope(nd);
}
@@ -3283,7 +3222,6 @@ void MemberDef::setNamespace(NamespaceDef *nd)
MemberDef *MemberDef::createTemplateInstanceMember(
ArgumentList *formalArgs,ArgumentList *actualArgs)
{
- KEEP_RESIDENT_DURING_CALL;
//printf(" Member %s %s %s\n",typeString(),name().data(),argsString());
ArgumentList *actualArgList = 0;
if (m_impl->defArgList)
@@ -3328,7 +3266,6 @@ MemberDef *MemberDef::createTemplateInstanceMember(
bool MemberDef::hasOneLineInitializer() const
{
- makeResident();
//printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
// name().data(),m_impl->initializer.data(),m_impl->initLines,
// m_impl->maxInitLines,m_impl->userInitLines);
@@ -3338,7 +3275,6 @@ bool MemberDef::hasOneLineInitializer() const
bool MemberDef::hasMultiLineInitializer() const
{
- makeResident();
//printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
// initLines,userInitLines,maxInitLines);
return m_impl->initLines>0 &&
@@ -3349,7 +3285,6 @@ bool MemberDef::hasMultiLineInitializer() const
void MemberDef::setInitializer(const char *initializer)
{
- makeResident();
m_impl->initializer=initializer;
int l=m_impl->initializer.length();
int p=l-1;
@@ -3361,7 +3296,6 @@ void MemberDef::setInitializer(const char *initializer)
void MemberDef::addListReference(Definition *)
{
- KEEP_RESIDENT_DURING_CALL;
static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
//static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
//static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
@@ -3410,10 +3344,10 @@ void MemberDef::addListReference(Definition *)
memArgs = argsString();
}
}
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- if (xrefItems!=0)
+ QList<ListItemInfo> *xrefItems = xrefListItems();
+ if (xrefItems)
{
- addRefItem(xrefItems.pointer(),
+ addRefItem(xrefItems,
qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
memLabel,
getOutputFileBase()+"#"+anchor(),memName,memArgs);
@@ -3422,7 +3356,6 @@ void MemberDef::addListReference(Definition *)
MemberList *MemberDef::getSectionList(Definition *d) const
{
- makeResident();
char key[20];
sprintf(key,"%p",d);
return (d!=0 && m_impl->classSectionSDict) ? m_impl->classSectionSDict->find(key) : 0;
@@ -3430,7 +3363,6 @@ MemberList *MemberDef::getSectionList(Definition *d) const
void MemberDef::setSectionList(Definition *d, MemberList *sl)
{
- makeResident();
//printf("MemberDef::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
char key[20];
sprintf(key,"%p",d);
@@ -3443,16 +3375,14 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl)
Specifier MemberDef::virtualness(int count) const
{
- KEEP_RESIDENT_DURING_CALL;
if (count>25)
{
warn(getDefFileName(),getDefLine(),
- "warning: Internal inconsistency: recursion detected in overload relation for member %s!"
+ "Internal inconsistency: recursion detected in overload relation for member %s!"
,qPrint(name())
);
return Normal;
}
- makeResident();
Specifier v = m_impl->virt;
MemberDef *rmd = reimplements();
while (rmd && v==Normal)
@@ -3511,6 +3441,11 @@ void MemberDef::_writeTagData(const DefType compoundType)
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;
writeDocAnchorsToTagFile();
Doxygen::tagFile << " </member>" << endl;
@@ -3531,6 +3466,11 @@ void MemberDef::_writeTagData(const DefType compoundType)
Doxygen::tagFile << " <name>" << convertToXML(fmd->name()) << "</name>" << endl;
Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
Doxygen::tagFile << " <anchor>" << convertToXML(fmd->anchor()) << "</anchor>" << endl;
+ QCString idStr = fmd->id();
+ if (!idStr.isEmpty())
+ {
+ Doxygen::tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
+ }
Doxygen::tagFile << " <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl;
Doxygen::tagFile << " </member>" << endl;
fmd->m_impl->tagDataWritten |= typeMask;
@@ -3544,7 +3484,6 @@ void MemberDef::_writeTagData(const DefType compoundType)
void MemberDef::_computeIsConstructor()
{
- KEEP_RESIDENT_DURING_CALL;
m_isConstructorCached=1; // FALSE
if (m_impl->classDef)
{
@@ -3600,7 +3539,6 @@ bool MemberDef::isConstructor() const
void MemberDef::_computeIsDestructor()
{
- KEEP_RESIDENT_DURING_CALL;
bool isDestructor;
if (m_impl->isDMember) // for D
{
@@ -3643,8 +3581,6 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const DefType compoundType)
{
- KEEP_RESIDENT_DURING_CALL;
-
int enumMemCount=0;
MemberList *fmdl=m_impl->enumFields;
@@ -3762,14 +3698,12 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
void MemberDef::setArgumentList(ArgumentList *al)
{
- makeResident();
if (m_impl->defArgList) delete m_impl->defArgList;
m_impl->defArgList = al;
}
void MemberDef::setDeclArgumentList(ArgumentList *al)
{
- makeResident();
if (m_impl->declArgList) delete m_impl->declArgList;
m_impl->declArgList = al;
}
@@ -3777,7 +3711,6 @@ void MemberDef::setDeclArgumentList(ArgumentList *al)
void MemberDef::setTypeConstraints(ArgumentList *al)
{
if (al==0) return;
- makeResident();
if (m_impl->typeConstraints) delete m_impl->typeConstraints;
m_impl->typeConstraints = new ArgumentList;
m_impl->typeConstraints->setAutoDelete(TRUE);
@@ -3791,33 +3724,28 @@ void MemberDef::setTypeConstraints(ArgumentList *al)
void MemberDef::setType(const char *t)
{
- makeResident();
m_impl->type = t;
}
void MemberDef::setAccessorType(ClassDef *cd,const char *t)
{
- makeResident();
m_impl->accessorClass = cd;
m_impl->accessorType = t;
}
void MemberDef::findSectionsInDocumentation()
{
- makeResident();
docFindSections(documentation(),this,0,docFile());
}
void MemberDef::enableCallGraph(bool e)
{
- makeResident();
m_impl->hasCallGraph=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
void MemberDef::enableCallerGraph(bool e)
{
- makeResident();
m_impl->hasCallerGraph=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
@@ -3825,7 +3753,6 @@ void MemberDef::enableCallerGraph(bool e)
#if 0
bool MemberDef::protectionVisible() const
{
- makeResident();
return m_impl->prot==Public ||
(m_impl->prot==Private && Config_getBool("EXTRACT_PRIVATE")) ||
(m_impl->prot==Protected && Config_getBool("EXTRACT_PROTECTED")) ||
@@ -3837,7 +3764,6 @@ bool MemberDef::protectionVisible() const
void MemberDef::setInbodyDocumentation(const char *docs,
const char *docFile,int docLine)
{
- makeResident();
m_impl->inbodyDocs = docs;
m_impl->inbodyDocs = m_impl->inbodyDocs.stripWhiteSpace();
m_impl->inbodyLine = docLine;
@@ -3847,21 +3773,18 @@ void MemberDef::setInbodyDocumentation(const char *docs,
bool MemberDef::isObjCMethod() const
{
- makeResident();
if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isFunction()) return TRUE;
return FALSE;
}
bool MemberDef::isObjCProperty() const
{
- makeResident();
if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isProperty()) return TRUE;
return FALSE;
}
QCString MemberDef::qualifiedName() const
{
- makeResident();
if (isObjCMethod())
{
QCString qm;
@@ -3882,7 +3805,6 @@ void MemberDef::setTagInfo(TagInfo *ti)
{
if (ti)
{
- makeResident();
//printf("%s: Setting tag name=%s anchor=%s\n",name().data(),ti->tagName.data(),ti->anchor.data());
m_impl->anc=ti->anchor;
setReference(ti->tagName);
@@ -3892,7 +3814,6 @@ void MemberDef::setTagInfo(TagInfo *ti)
QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
{
- makeResident();
QCString qm;
if (showStatic)
{
@@ -3910,682 +3831,578 @@ QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
const char *MemberDef::declaration() const
{
- makeResident();
return m_impl->decl;
}
const char *MemberDef::definition() const
{
- makeResident();
return m_impl->def;
}
const char *MemberDef::extraTypeChars() const
{
- makeResident();
return m_impl->extraTypeChars;
}
const char *MemberDef::typeString() const
{
- makeResident();
return m_impl->type;
}
const char *MemberDef::argsString() const
{
- makeResident();
return m_impl->args;
}
const char *MemberDef::excpString() const
{
- makeResident();
return m_impl->exception;
}
const char *MemberDef::bitfieldString() const
{
- makeResident();
return m_impl->bitfields;
}
const QCString &MemberDef::initializer() const
{
- makeResident();
return m_impl->initializer;
}
int MemberDef::initializerLines() const
{
- makeResident();
return m_impl->initLines;
}
uint64 MemberDef::getMemberSpecifiers() const
{
- makeResident();
return m_impl->memSpec;
}
ClassDef *MemberDef::getClassDef() const
{
- makeResident();
return m_impl->classDef;
}
FileDef *MemberDef::getFileDef() const
{
- makeResident();
return m_impl->fileDef;
}
NamespaceDef* MemberDef::getNamespaceDef() const
{
- makeResident();
return m_impl->nspace;
}
const char *MemberDef::getReadAccessor() const
{
- makeResident();
return m_impl->read;
}
const char *MemberDef::getWriteAccessor() const
{
- makeResident();
return m_impl->write;
}
GroupDef *MemberDef::getGroupDef() const
{
- makeResident();
return m_impl->group;
}
Grouping::GroupPri_t MemberDef::getGroupPri() const
{
- makeResident();
return m_impl->grouppri;
}
const char *MemberDef::getGroupFileName() const
{
- makeResident();
return m_impl->groupFileName;
}
int MemberDef::getGroupStartLine() const
{
- makeResident();
return m_impl->groupStartLine;
}
bool MemberDef::getGroupHasDocs() const
{
- makeResident();
return m_impl->groupHasDocs;
}
Protection MemberDef::protection() const
{
- makeResident();
return m_impl->prot;
}
MemberType MemberDef::memberType() const
{
- makeResident();
return m_impl->mtype;
}
bool MemberDef::isSignal() const
{
- makeResident();
return m_impl->mtype==MemberType_Signal;
}
bool MemberDef::isSlot() const
{
- makeResident();
return m_impl->mtype==MemberType_Slot;
}
bool MemberDef::isVariable() const
{
- makeResident();
return m_impl->mtype==MemberType_Variable;
}
bool MemberDef::isEnumerate() const
{
- makeResident();
return m_impl->mtype==MemberType_Enumeration;
}
bool MemberDef::isEnumValue() const
{
- makeResident();
return m_impl->mtype==MemberType_EnumValue;
}
bool MemberDef::isTypedef() const
{
- makeResident();
return m_impl->mtype==MemberType_Typedef;
}
bool MemberDef::isFunction() const
{
- makeResident();
return m_impl->mtype==MemberType_Function;
}
bool MemberDef::isFunctionPtr() const
{
- makeResident();
return m_impl->mtype==MemberType_Variable && QCString(argsString()).find(")(")!=-1;
}
bool MemberDef::isDefine() const
{
- makeResident();
return m_impl->mtype==MemberType_Define;
}
bool MemberDef::isFriend() const
{
- makeResident();
return m_impl->mtype==MemberType_Friend;
}
bool MemberDef::isDCOP() const
{
- makeResident();
return m_impl->mtype==MemberType_DCOP;
}
bool MemberDef::isProperty() const
{
- makeResident();
return m_impl->mtype==MemberType_Property;
}
bool MemberDef::isEvent() const
{
- makeResident();
return m_impl->mtype==MemberType_Event;
}
bool MemberDef::isRelated() const
{
- makeResident();
return m_impl->related == Related;
}
bool MemberDef::isForeign() const
{
- makeResident();
return m_impl->related == Foreign;
}
bool MemberDef::isStatic() const
{
- makeResident();
return m_impl->stat;
}
bool MemberDef::isInline() const
{
- makeResident();
return (m_impl->memSpec&Entry::Inline)!=0;
}
bool MemberDef::isExplicit() const
{
- makeResident();
return (m_impl->memSpec&Entry::Explicit)!=0;
}
bool MemberDef::isMutable() const
{
- makeResident();
return (m_impl->memSpec&Entry::Mutable)!=0;
}
bool MemberDef::isGettable() const
{
- makeResident();
return (m_impl->memSpec&Entry::Gettable)!=0;
}
bool MemberDef::isSettable() const
{
- makeResident();
return (m_impl->memSpec&Entry::Settable)!=0;
}
bool MemberDef::isAddable() const
{
- makeResident();
return (m_impl->memSpec&Entry::Addable)!=0;
}
bool MemberDef::isRemovable() const
{
- makeResident();
return (m_impl->memSpec&Entry::Removable)!=0;
}
bool MemberDef::isRaisable() const
{
- makeResident();
return (m_impl->memSpec&Entry::Raisable)!=0;
}
bool MemberDef::isReadable() const
{
- makeResident();
return (m_impl->memSpec&Entry::Readable)!=0;
}
bool MemberDef::isWritable() const
{
- makeResident();
return (m_impl->memSpec&Entry::Writable)!=0;
}
bool MemberDef::isFinal() const
{
- makeResident();
return (m_impl->memSpec&Entry::Final)!=0;
}
bool MemberDef::isNew() const
{
- makeResident();
return (m_impl->memSpec&Entry::New)!=0;
}
bool MemberDef::isSealed() const
{
- makeResident();
return (m_impl->memSpec&Entry::Sealed)!=0;
}
bool MemberDef::isOverride() const
{
- makeResident();
return (m_impl->memSpec&Entry::Override)!=0;
}
bool MemberDef::isInitonly() const
{
- makeResident();
return (m_impl->memSpec&Entry::Initonly)!=0;
}
bool MemberDef::isAbstract() const
{
- makeResident();
return (m_impl->memSpec&Entry::Abstract)!=0;
}
bool MemberDef::isOptional() const
{
- makeResident();
return (m_impl->memSpec&Entry::Optional)!=0;
}
bool MemberDef::isRequired() const
{
- makeResident();
return (m_impl->memSpec&Entry::Required)!=0;
}
bool MemberDef::isNonAtomic() const
{
- makeResident();
return (m_impl->memSpec&Entry::NonAtomic)!=0;
}
bool MemberDef::isCopy() const
{
- makeResident();
return (m_impl->memSpec&Entry::Copy)!=0;
}
bool MemberDef::isAssign() const
{
- makeResident();
return (m_impl->memSpec&Entry::Assign)!=0;
}
bool MemberDef::isRetain() const
{
- makeResident();
return (m_impl->memSpec&Entry::Retain)!=0;
}
bool MemberDef::isWeak() const
{
- makeResident();
return (m_impl->memSpec&Entry::Weak)!=0;
}
bool MemberDef::isStrong() const
{
- makeResident();
return (m_impl->memSpec&Entry::Strong)!=0;
}
bool MemberDef::isUnretained() const
{
- makeResident();
return (m_impl->memSpec&Entry::Unretained)!=0;
}
bool MemberDef::isAlias() const
{
- makeResident();
return (m_impl->memSpec&Entry::Alias)!=0;
}
bool MemberDef::isDefault() const
{
- makeResident();
return (m_impl->memSpec&Entry::Default)!=0;
}
bool MemberDef::isDelete() const
{
- makeResident();
return (m_impl->memSpec&Entry::Delete)!=0;
}
bool MemberDef::isNoExcept() const
{
- makeResident();
return (m_impl->memSpec&Entry::NoExcept)!=0;
}
bool MemberDef::isAttribute() const
{
- makeResident();
return (m_impl->memSpec&Entry::Attribute)!=0;
}
bool MemberDef::isUNOProperty() const
{
- makeResident();
return (m_impl->memSpec&Entry::Property)!=0;
}
bool MemberDef::isReadonly() const
{
- makeResident();
return (m_impl->memSpec&Entry::Readonly)!=0;
}
bool MemberDef::isBound() const
{
- makeResident();
return (m_impl->memSpec&Entry::Bound)!=0;
}
bool MemberDef::isConstrained() const
{
- makeResident();
return (m_impl->memSpec&Entry::Constrained)!=0;
}
bool MemberDef::isTransient() const
{
- makeResident();
return (m_impl->memSpec&Entry::Transient)!=0;
}
bool MemberDef::isMaybeVoid() const
{
- makeResident();
return (m_impl->memSpec&Entry::MaybeVoid)!=0;
}
bool MemberDef::isMaybeDefault() const
{
- makeResident();
return (m_impl->memSpec&Entry::MaybeDefault)!=0;
}
bool MemberDef::isMaybeAmbiguous() const
{
- makeResident();
return (m_impl->memSpec&Entry::MaybeAmbiguous)!=0;
}
bool MemberDef::isPublished() const
{
- makeResident();
return (m_impl->memSpec&Entry::Published)!=0;
}
bool MemberDef::isImplementation() const
{
- makeResident();
return m_impl->implOnly;
}
bool MemberDef::isExternal() const
{
- makeResident();
return m_impl->explExt;
}
bool MemberDef::isTemplateSpecialization() const
{
- makeResident();
return m_impl->tspec;
}
bool MemberDef::hasDocumentedParams() const
{
- makeResident();
return m_impl->hasDocumentedParams;
}
bool MemberDef::hasDocumentedReturnType() const
{
- makeResident();
return m_impl->hasDocumentedReturnType;
}
+bool MemberDef::showInCallGraph() const
+{
+ return isFunction() ||
+ isSlot() ||
+ isConstructor() ||
+ isDestructor() ||
+ isObjCMethod();
+}
+
ClassDef *MemberDef::relatedAlso() const
{
- makeResident();
return m_impl->relatedAlso;
}
bool MemberDef::hasDocumentedEnumValues() const
{
- makeResident();
return m_impl->docEnumValues;
}
MemberDef *MemberDef::getAnonymousEnumType() const
{
- makeResident();
return m_impl->annEnumType;
}
bool MemberDef::isDocsForDefinition() const
{
- makeResident();
return m_impl->docsForDefinition;
}
MemberDef *MemberDef::getEnumScope() const
{
- makeResident();
return m_impl->enumScope;
}
-LockingPtr<MemberList> MemberDef::enumFieldList() const
+MemberList *MemberDef::enumFieldList() const
{
- makeResident();
- return LockingPtr<MemberList>(this,m_impl->enumFields);
+ return m_impl->enumFields;
}
-LockingPtr<ExampleSDict> MemberDef::getExamples() const
+ExampleSDict *MemberDef::getExamples() const
{
- makeResident();
- return LockingPtr<ExampleSDict>(this,m_impl->exampleSDict);
+ return m_impl->exampleSDict;
}
bool MemberDef::isPrototype() const
{
- makeResident();
return m_impl->proto;
}
-LockingPtr<ArgumentList> MemberDef::argumentList() const
+ArgumentList *MemberDef::argumentList() const
{
- makeResident();
- return LockingPtr<ArgumentList>(this,m_impl->defArgList);
+ return m_impl->defArgList;
}
-LockingPtr<ArgumentList> MemberDef::declArgumentList() const
+ArgumentList *MemberDef::declArgumentList() const
{
- makeResident();
- return LockingPtr<ArgumentList>(this,m_impl->declArgList);
+ return m_impl->declArgList;
}
-LockingPtr<ArgumentList> MemberDef::templateArguments() const
+ArgumentList *MemberDef::templateArguments() const
{
- makeResident();
- return LockingPtr<ArgumentList>(this,m_impl->tArgList);
+ return m_impl->tArgList;
}
-LockingPtr< QList<ArgumentList> > MemberDef::definitionTemplateParameterLists() const
+QList<ArgumentList> *MemberDef::definitionTemplateParameterLists() const
{
- makeResident();
- return LockingPtr< QList<ArgumentList> >(this,m_impl->defTmpArgLists);
+ return m_impl->defTmpArgLists;
}
int MemberDef::getMemberGroupId() const
{
- makeResident();
return m_impl->grpId;
}
MemberGroup *MemberDef::getMemberGroup() const
{
- makeResident();
return m_impl->memberGroup;
}
bool MemberDef::fromAnonymousScope() const
{
- makeResident();
return m_impl->annScope;
}
bool MemberDef::anonymousDeclShown() const
{
- makeResident();
return m_impl->annUsed;
}
void MemberDef::setAnonymousUsed()
{
- makeResident();
m_impl->annUsed = TRUE;
}
bool MemberDef::hasCallGraph() const
{
- makeResident();
return m_impl->hasCallGraph;
}
bool MemberDef::hasCallerGraph() const
{
- makeResident();
return m_impl->hasCallerGraph;
}
MemberDef *MemberDef::templateMaster() const
{
- makeResident();
return m_impl->templateMaster;
}
bool MemberDef::isTypedefValCached() const
{
- makeResident();
return m_impl->isTypedefValCached;
}
ClassDef *MemberDef::getCachedTypedefVal() const
{
- makeResident();
return m_impl->cachedTypedefValue;
}
QCString MemberDef::getCachedTypedefTemplSpec() const
{
- makeResident();
return m_impl->cachedTypedefTemplSpec;
}
QCString MemberDef::getCachedResolvedTypedef() const
{
- makeResident();
//printf("MemberDef::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
return m_impl->cachedResolvedType;
}
MemberDef *MemberDef::memberDefinition() const
{
- makeResident();
return m_impl->memDef;
}
MemberDef *MemberDef::memberDeclaration() const
{
- makeResident();
return m_impl->memDec;
}
MemberDef *MemberDef::inheritsDocsFrom() const
{
- makeResident();
return m_impl->docProvider;
}
MemberDef *MemberDef::getGroupAlias() const
{
- makeResident();
return m_impl->groupAlias;
}
void MemberDef::setMemberType(MemberType t)
{
- makeResident();
m_impl->mtype=t;
m_isLinkableCached = 0;
}
void MemberDef::setDefinition(const char *d)
{
- makeResident();
m_impl->def=d;
}
void MemberDef::setFileDef(FileDef *fd)
{
- makeResident();
m_impl->fileDef=fd;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
@@ -4594,26 +4411,22 @@ void MemberDef::setFileDef(FileDef *fd)
void MemberDef::setProtection(Protection p)
{
- makeResident();
m_impl->prot=p;
m_isLinkableCached = 0;
}
void MemberDef::setMemberSpecifiers(uint64 s)
{
- makeResident();
m_impl->memSpec=s;
}
void MemberDef::mergeMemberSpecifiers(uint64 s)
{
- makeResident();
m_impl->memSpec|=s;
}
void MemberDef::setBitfields(const char *s)
{
- makeResident();
m_impl->bitfields = s;
}
@@ -4621,82 +4434,69 @@ void MemberDef::setMaxInitLines(int lines)
{
if (lines!=-1)
{
- makeResident();
m_impl->userInitLines=lines;
}
}
void MemberDef::setExplicitExternal(bool b)
{
- makeResident();
m_impl->explExt=b;
}
void MemberDef::setReadAccessor(const char *r)
{
- makeResident();
m_impl->read=r;
}
void MemberDef::setWriteAccessor(const char *w)
{
- makeResident();
m_impl->write=w;
}
void MemberDef::setTemplateSpecialization(bool b)
{
- makeResident();
m_impl->tspec=b;
}
void MemberDef::makeRelated()
{
- makeResident();
m_impl->related = Related;
m_isLinkableCached = 0;
}
void MemberDef::makeForeign()
{
- makeResident();
m_impl->related = Foreign;
m_isLinkableCached = 0;
}
void MemberDef::setHasDocumentedParams(bool b)
{
- makeResident();
m_impl->hasDocumentedParams = b;
}
void MemberDef::setHasDocumentedReturnType(bool b)
{
- makeResident();
m_impl->hasDocumentedReturnType = b;
}
void MemberDef::setInheritsDocsFrom(MemberDef *md)
{
- makeResident();
m_impl->docProvider = md;
}
void MemberDef::setArgsString(const char *as)
{
- makeResident();
m_impl->args = as;
}
void MemberDef::setRelatedAlso(ClassDef *cd)
{
- makeResident();
m_impl->relatedAlso=cd;
}
void MemberDef::setEnumClassScope(ClassDef *cd)
{
- makeResident();
m_impl->classDef = cd;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
@@ -4704,123 +4504,103 @@ void MemberDef::setEnumClassScope(ClassDef *cd)
void MemberDef::setDocumentedEnumValues(bool value)
{
- makeResident();
m_impl->docEnumValues=value;
}
void MemberDef::setAnonymousEnumType(MemberDef *md)
{
- makeResident();
m_impl->annEnumType = md;
}
void MemberDef::setPrototype(bool p)
{
- makeResident();
m_impl->proto=p;
}
void MemberDef::setMemberGroupId(int id)
{
- makeResident();
m_impl->grpId=id;
}
void MemberDef::makeImplementationDetail()
{
- makeResident();
m_impl->implOnly=TRUE;
}
void MemberDef::setFromAnonymousScope(bool b)
{
- makeResident();
m_impl->annScope=b;
}
void MemberDef::setFromAnonymousMember(MemberDef *m)
{
- makeResident();
m_impl->annMemb=m;
}
void MemberDef::setTemplateMaster(MemberDef *mt)
{
- makeResident();
m_impl->templateMaster=mt;
m_isLinkableCached = 0;
}
void MemberDef::setDocsForDefinition(bool b)
{
- makeResident();
m_impl->docsForDefinition = b;
}
void MemberDef::setGroupAlias(MemberDef *md)
{
- makeResident();
m_impl->groupAlias = md;
}
void MemberDef::invalidateTypedefValCache()
{
- makeResident();
m_impl->isTypedefValCached=FALSE;
}
void MemberDef::setMemberDefinition(MemberDef *md)
{
- makeResident();
m_impl->memDef=md;
}
void MemberDef::setMemberDeclaration(MemberDef *md)
{
- makeResident();
m_impl->memDec=md;
}
ClassDef *MemberDef::category() const
{
- makeResident();
return m_impl->category;
}
void MemberDef::setCategory(ClassDef *def)
{
- makeResident();
m_impl->category = def;
}
MemberDef *MemberDef::categoryRelation() const
{
- makeResident();
return m_impl->categoryRelation;
}
void MemberDef::setCategoryRelation(MemberDef *md)
{
- makeResident();
m_impl->categoryRelation = md;
}
void MemberDef::setEnumBaseType(const QCString &type)
{
- makeResident();
m_impl->enumBaseType = type;
}
QCString MemberDef::enumBaseType() const
{
- makeResident();
return m_impl->enumBaseType;
}
void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const QCString &resolvedType)
{
- makeResident();
m_impl->isTypedefValCached=TRUE;
m_impl->cachedTypedefValue=val;
m_impl->cachedTypedefTemplSpec=templSpec;
@@ -4830,10 +4610,9 @@ void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const
void MemberDef::copyArgumentNames(MemberDef *bmd)
{
- makeResident();
{
- LockingPtr<ArgumentList> arguments = bmd->argumentList();
- if (m_impl->defArgList && arguments!=0)
+ ArgumentList *arguments = bmd->argumentList();
+ if (m_impl->defArgList && arguments)
{
ArgumentListIterator aliDst(*m_impl->defArgList);
ArgumentListIterator aliSrc(*arguments);
@@ -4845,8 +4624,8 @@ void MemberDef::copyArgumentNames(MemberDef *bmd)
}
}
{
- LockingPtr<ArgumentList> arguments = bmd->declArgumentList();
- if (m_impl->declArgList && arguments!=0)
+ ArgumentList *arguments = bmd->declArgumentList();
+ if (m_impl->declArgList && arguments)
{
ArgumentListIterator aliDst(*m_impl->declArgList);
ArgumentListIterator aliSrc(*arguments);
@@ -4874,297 +4653,10 @@ static void invalidateCachedTypesInArgumentList(ArgumentList *al)
void MemberDef::invalidateCachedArgumentTypes()
{
- makeResident();
invalidateCachedTypesInArgumentList(m_impl->defArgList);
invalidateCachedTypesInArgumentList(m_impl->declArgList);
}
-
-//-----------------------------------------------------------------
-
-void MemberDef::flushToDisk() const
-{
- if (isLocked()) return;
- MemberDef *that = (MemberDef*)this;
- that->m_storagePos = Doxygen::symbolStorage->alloc();
- //printf("%p: MemberDef::flushToDisk() m_impl=%p\n",this,m_impl);
- // write the definition base class member variables to disk
- Definition::flushToDisk();
-
- //printf("%p: flushing specific part\n",this);
-
- // write the memberdef member variables to disk
- marshalUInt(Doxygen::symbolStorage,START_MARKER);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->classDef);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->fileDef);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->nspace);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->enumScope);
- marshalBool (Doxygen::symbolStorage,m_impl->livesInsideEnum);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->annEnumType);
- marshalMemberList (Doxygen::symbolStorage,m_impl->enumFields);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->redefines);
- marshalMemberList (Doxygen::symbolStorage,m_impl->redefinedBy);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->memDef);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->memDec);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->relatedAlso);
- marshalExampleSDict (Doxygen::symbolStorage,m_impl->exampleSDict);
- marshalQCString (Doxygen::symbolStorage,m_impl->type);
- marshalQCString (Doxygen::symbolStorage,m_impl->enumBaseType);
- marshalQCString (Doxygen::symbolStorage,m_impl->accessorType);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->accessorClass);
- marshalQCString (Doxygen::symbolStorage,m_impl->args);
- marshalQCString (Doxygen::symbolStorage,m_impl->def);
- marshalQCString (Doxygen::symbolStorage,m_impl->anc);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->virt);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->prot);
- marshalQCString (Doxygen::symbolStorage,m_impl->decl);
- marshalQCString (Doxygen::symbolStorage,m_impl->bitfields);
- marshalQCString (Doxygen::symbolStorage,m_impl->read);
- marshalQCString (Doxygen::symbolStorage,m_impl->write);
- marshalQCString (Doxygen::symbolStorage,m_impl->exception);
- marshalQCString (Doxygen::symbolStorage,m_impl->initializer);
- marshalQCString (Doxygen::symbolStorage,m_impl->extraTypeChars);
- marshalInt (Doxygen::symbolStorage,m_impl->initLines);
- marshalUInt64 (Doxygen::symbolStorage,m_impl->memSpec);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->mtype);
- marshalInt (Doxygen::symbolStorage,m_impl->maxInitLines);
- marshalInt (Doxygen::symbolStorage,m_impl->userInitLines);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->annMemb);
- marshalArgumentList (Doxygen::symbolStorage,m_impl->defArgList);
- marshalArgumentList (Doxygen::symbolStorage,m_impl->declArgList);
- marshalArgumentList (Doxygen::symbolStorage,m_impl->tArgList);
- marshalArgumentList (Doxygen::symbolStorage,m_impl->typeConstraints);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->templateMaster);
- marshalArgumentLists(Doxygen::symbolStorage,m_impl->defTmpArgLists);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->cachedAnonymousType);
- marshalMemberLists (Doxygen::symbolStorage,m_impl->classSectionSDict);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->groupAlias);
- marshalInt (Doxygen::symbolStorage,m_impl->grpId);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->memberGroup);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->group);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->grouppri);
- marshalQCString (Doxygen::symbolStorage,m_impl->groupFileName);
- marshalInt (Doxygen::symbolStorage,m_impl->groupStartLine);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->groupMember);
- marshalBool (Doxygen::symbolStorage,m_impl->isTypedefValCached);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->cachedTypedefValue);
- marshalQCString (Doxygen::symbolStorage,m_impl->cachedTypedefTemplSpec);
- marshalQCString (Doxygen::symbolStorage,m_impl->cachedResolvedType);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->docProvider);
- marshalQCString (Doxygen::symbolStorage,m_impl->explicitOutputFileBase);
- marshalBool (Doxygen::symbolStorage,m_impl->implOnly);
- marshalBool (Doxygen::symbolStorage,m_impl->hasDocumentedParams);
- marshalBool (Doxygen::symbolStorage,m_impl->hasDocumentedReturnType);
- marshalBool (Doxygen::symbolStorage,m_impl->isDMember);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->related);
- marshalBool (Doxygen::symbolStorage,m_impl->stat);
- marshalBool (Doxygen::symbolStorage,m_impl->proto);
- marshalBool (Doxygen::symbolStorage,m_impl->docEnumValues);
- marshalBool (Doxygen::symbolStorage,m_impl->annScope);
- marshalBool (Doxygen::symbolStorage,m_impl->annUsed);
- marshalBool (Doxygen::symbolStorage,m_impl->hasCallGraph);
- marshalBool (Doxygen::symbolStorage,m_impl->hasCallerGraph);
- marshalBool (Doxygen::symbolStorage,m_impl->explExt);
- marshalBool (Doxygen::symbolStorage,m_impl->tspec);
- marshalBool (Doxygen::symbolStorage,m_impl->groupHasDocs);
- marshalBool (Doxygen::symbolStorage,m_impl->docsForDefinition);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->category);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->categoryRelation);
- marshalUInt (Doxygen::symbolStorage,m_impl->tagDataWritten);
- marshalUInt(Doxygen::symbolStorage,END_MARKER);
-
- // function doesn't modify the object conceptually but compiler doesn't know this.
- delete that->m_impl;
- that->m_impl=0;
- that->m_flushPending=FALSE;
-}
-
-void MemberDef::loadFromDisk() const
-{
- MemberDef *that = (MemberDef *)this;
- if (isLocked())
- {
- //printf("%p: loadFromDisk() locked: so still in memory\n",this);
- assert(m_impl!=0);
- return;
- }
- assert(m_impl==0);
-
- Doxygen::symbolStorage->seek(m_storagePos);
- Definition::loadFromDisk();
-
- //printf("%p: loading specific part\n",this);
-
- that->m_impl = new MemberDefImpl;
- //printf("%p: MemberDef::loadFromDisk(): m_impl=%p\n",this,m_impl);
-
- uint marker = unmarshalUInt(Doxygen::symbolStorage);
- assert(marker==START_MARKER);
- m_impl->classDef = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->fileDef = (FileDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->nspace = (NamespaceDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->enumScope = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->livesInsideEnum = unmarshalBool (Doxygen::symbolStorage);
- m_impl->annEnumType = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->enumFields = unmarshalMemberList (Doxygen::symbolStorage);
- m_impl->redefines = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->redefinedBy = unmarshalMemberList (Doxygen::symbolStorage);
- m_impl->memDef = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->memDec = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->relatedAlso = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->exampleSDict = unmarshalExampleSDict (Doxygen::symbolStorage);
- m_impl->type = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->enumBaseType = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->accessorType = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->accessorClass = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->args = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->def = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->anc = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->virt = (Specifier)unmarshalInt (Doxygen::symbolStorage);
- m_impl->prot = (Protection)unmarshalInt(Doxygen::symbolStorage);
- m_impl->decl = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->bitfields = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->read = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->write = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->exception = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->initializer = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->extraTypeChars = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->initLines = unmarshalInt (Doxygen::symbolStorage);
- m_impl->memSpec = unmarshalUInt64 (Doxygen::symbolStorage);
- m_impl->mtype = (MemberType)unmarshalInt (Doxygen::symbolStorage);
- m_impl->maxInitLines = unmarshalInt (Doxygen::symbolStorage);
- m_impl->userInitLines = unmarshalInt (Doxygen::symbolStorage);
- m_impl->annMemb = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->defArgList = unmarshalArgumentList (Doxygen::symbolStorage);
- m_impl->declArgList = unmarshalArgumentList (Doxygen::symbolStorage);
- m_impl->tArgList = unmarshalArgumentList (Doxygen::symbolStorage);
- m_impl->typeConstraints = unmarshalArgumentList (Doxygen::symbolStorage);
- m_impl->templateMaster = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->defTmpArgLists = unmarshalArgumentLists(Doxygen::symbolStorage);
- m_impl->cachedAnonymousType = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->classSectionSDict = unmarshalMemberLists (Doxygen::symbolStorage);
- m_impl->groupAlias = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->grpId = unmarshalInt (Doxygen::symbolStorage);
- m_impl->memberGroup = (MemberGroup*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->group = (GroupDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->grouppri = (Grouping::GroupPri_t)unmarshalInt (Doxygen::symbolStorage);
- m_impl->groupFileName = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->groupStartLine = unmarshalInt (Doxygen::symbolStorage);
- m_impl->groupMember = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->isTypedefValCached = unmarshalBool (Doxygen::symbolStorage);
- m_impl->cachedTypedefValue = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->cachedTypedefTemplSpec = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->cachedResolvedType = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->docProvider = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->explicitOutputFileBase = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->implOnly = unmarshalBool (Doxygen::symbolStorage);
- m_impl->hasDocumentedParams = unmarshalBool (Doxygen::symbolStorage);
- m_impl->hasDocumentedReturnType = unmarshalBool (Doxygen::symbolStorage);
- m_impl->isDMember = unmarshalBool (Doxygen::symbolStorage);
- m_impl->related = (Relationship)unmarshalInt(Doxygen::symbolStorage);
- m_impl->stat = unmarshalBool (Doxygen::symbolStorage);
- m_impl->proto = unmarshalBool (Doxygen::symbolStorage);
- m_impl->docEnumValues = unmarshalBool (Doxygen::symbolStorage);
- m_impl->annScope = unmarshalBool (Doxygen::symbolStorage);
- m_impl->annUsed = unmarshalBool (Doxygen::symbolStorage);
- m_impl->hasCallGraph = unmarshalBool (Doxygen::symbolStorage);
- m_impl->hasCallerGraph = unmarshalBool (Doxygen::symbolStorage);
- m_impl->explExt = unmarshalBool (Doxygen::symbolStorage);
- m_impl->tspec = unmarshalBool (Doxygen::symbolStorage);
- m_impl->groupHasDocs = unmarshalBool (Doxygen::symbolStorage);
- m_impl->docsForDefinition = unmarshalBool (Doxygen::symbolStorage);
- m_impl->category = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->categoryRelation = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->tagDataWritten = unmarshalUInt (Doxygen::symbolStorage);
- marker = unmarshalUInt(Doxygen::symbolStorage);
- assert(marker==END_MARKER);
-
- //printf("%p: MemberDef::loadFromDisk(): sorting\n",this);
-}
-
-void MemberDef::makeResident() const
-{
- if (Doxygen::symbolCache==0) return;
- if (m_cacheHandle==-1) // not yet in cache
- {
- MemberDef *victim = 0;
- MemberDef *that = (MemberDef*)this; // fake method constness
- that->m_cacheHandle = Doxygen::symbolCache->add(that,(void **)&victim);
- //printf("adding %s to cache, handle=%d\n",m_impl->name.data(),that->m_cacheHandle);
- if (victim) // cache was full, victim was the least recently used item and has to go
- {
- //printf("%p: makeResident(): cache full %p::saveToDisk(): m_impl=%p\n",this,victim,victim->m_impl);
- victim->m_cacheHandle=-1; // invalidate cache handle
- victim->saveToDisk(); // store the item on disk
- }
- else // cache not yet full
- {
- //printf("Adding %s to cache, handle=%d\n",m_impl->name.data(),m_cacheHandle);
- }
- if (m_storagePos!=-1) // already been written to disk
- {
- if (isLocked()) // locked in memory
- {
- assert(m_impl!=0);
- that->m_flushPending=FALSE; // no need to flush anymore
- }
- else // not locked in memory
- {
- assert(m_impl==0);
- loadFromDisk();
- }
- }
- }
- else // already cached, make this object the most recently used.
- {
- assert(m_impl!=0);
- //printf("Touching symbol %s\n",m_impl->name.data());
- Doxygen::symbolCache->use(m_cacheHandle);
- }
-}
-
-void MemberDef::saveToDisk() const
-{
- assert(m_impl!=0);
- MemberDef *that = (MemberDef *)this;
- //printf("%p: saveToDisk(): m_impl=%p\n",this,m_impl);
- if (isLocked()) // cannot flush the item as it is locked
- {
- that->m_flushPending=TRUE; // flush when unlocked
- }
- else // ready to flush the item to disk
- {
- //printf("Adding %s to cache, handle=%d by replacing %s\n",
- // m_impl->name.data(),m_cacheHandle,victim->m_impl->name.data());
- if (m_storagePos!=-1)
- // if victim was stored on disk already and is not locked
- {
- // free the storage space occupied by the old store item
- Doxygen::symbolStorage->release(m_storagePos); // free up space for others
- }
- // write a the new (possibly modified) instance to disk
- flushToDisk();
- // end to write sequence (unless nothing was written due to the lock)
- Doxygen::symbolStorage->end();
- }
-}
-
-void MemberDef::lock() const
-{
-}
-
-void MemberDef::unlock() const
-{
- if (m_flushPending && !isLocked())
- {
- //printf("%p: flush after unlock\n",this);
- // write a the new (possibly modified) instance to disk
- flushToDisk();
- // end to write sequence (unless nothing was written due to the lock)
- Doxygen::symbolStorage->end();
- }
-}
-
//----------------
QCString MemberDef::displayName(bool) const
@@ -5238,10 +4730,10 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
// mdef, mdef ? mdef->name().data() : "",
// mdec, mdec ? mdec->name().data() : "");
- LockingPtr<ArgumentList> mdefAl = mdef->argumentList();
- LockingPtr<ArgumentList> mdecAl = mdec->argumentList();
- if (matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl.pointer(),
- mdec->getOuterScope(),mdec->getFileDef(),mdecAl.pointer(),
+ ArgumentList *mdefAl = mdef->argumentList();
+ ArgumentList *mdecAl = mdec->argumentList();
+ if (matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl,
+ mdec->getOuterScope(),mdec->getFileDef(),mdecAl,
TRUE
)
) /* match found */
@@ -5253,7 +4745,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
// );
// first merge argument documentation
- transferArgumentDocumentation(mdecAl.pointer(),mdefAl.pointer());
+ transferArgumentDocumentation(mdecAl,mdefAl);
/* copy documentation between function definition and declaration */
if (!mdec->briefDescription().isEmpty())
@@ -5273,7 +4765,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
{
ArgumentList *mdefAlComb = new ArgumentList;
stringToArgumentList(mdef->argsString(),mdefAlComb);
- transferArgumentDocumentation(mdefAl.pointer(),mdefAlComb);
+ transferArgumentDocumentation(mdefAl,mdefAlComb);
mdec->setArgumentList(mdefAlComb);
}
}
@@ -5286,7 +4778,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
{
ArgumentList *mdecAlComb = new ArgumentList;
stringToArgumentList(mdec->argsString(),mdecAlComb);
- transferArgumentDocumentation(mdecAl.pointer(),mdecAlComb);
+ transferArgumentDocumentation(mdecAl,mdecAlComb);
mdef->setDeclArgumentList(mdecAlComb);
}
}
@@ -5353,3 +4845,4 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
}
}
+
diff --git a/src/memberdef.h b/src/memberdef.h
index 9ed4102..8c88f7c 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -168,6 +168,7 @@ class MemberDef : public Definition
bool hasOneLineInitializer() const;
bool hasMultiLineInitializer() const;
bool protectionVisible() const;
+ bool showInCallGraph() const;
// output info
bool isLinkableInProject() const;
@@ -181,7 +182,7 @@ class MemberDef : public Definition
bool isDocumentedFriendClass() const;
MemberDef *reimplements() const;
- LockingPtr< MemberList > reimplementedBy() const;
+ MemberList *reimplementedBy() const;
bool isReimplementedBy(ClassDef *cd) const;
//int inbodyLine() const;
@@ -194,19 +195,19 @@ class MemberDef : public Definition
MemberDef *getAnonymousEnumType() const;
bool isDocsForDefinition() const;
MemberDef *getEnumScope() const;
- LockingPtr< MemberList > enumFieldList() const;
+ MemberList *enumFieldList() const;
void setEnumBaseType(const QCString &type);
QCString enumBaseType() const;
bool hasExamples();
- LockingPtr<ExampleSDict> getExamples() const;
+ ExampleSDict *getExamples() const;
bool isPrototype() const;
// argument related members
- LockingPtr<ArgumentList> argumentList() const;
- LockingPtr<ArgumentList> declArgumentList() const;
- LockingPtr<ArgumentList> templateArguments() const;
- LockingPtr< QList<ArgumentList> > definitionTemplateParameterLists() const;
+ ArgumentList *argumentList() const;
+ ArgumentList *declArgumentList() const;
+ ArgumentList *templateArguments() const;
+ QList<ArgumentList> *definitionTemplateParameterLists() const;
// member group related members
int getMemberGroupId() const;
@@ -405,9 +406,6 @@ class MemberDef : public Definition
bool onlyText=FALSE);
MemberDefImpl *m_impl;
- int m_cacheHandle;
- off_t m_storagePos; // location where the item is stored in file (if impl==0)
- bool m_flushPending;
uchar m_isLinkableCached; // 0 = not cached, 1=FALSE, 2=TRUE
uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index c44bd81..76ffff1 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -31,6 +31,7 @@
#include "filedef.h"
#include "membergroup.h"
#include "config.h"
+#include "docparser.h"
MemberList::MemberList()
{
@@ -160,7 +161,7 @@ void MemberList::countDecMembers(bool countEnumValues,GroupDef *gd)
case MemberType_Friend: m_friendCnt++,m_numDecMembers++;
break;
default:
- err("Error: Unknown member type found for member `%s'\n!",md->name().data());
+ err("Unknown member type found for member `%s'\n!",md->name().data());
}
}
}
@@ -385,24 +386,29 @@ void MemberList::writePlainDeclarations(OutputList &ol,
ol.endMemberItem();
if (!md->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startMemberDescription(md->anchor());
- ol.parseDoc(
+ DocRoot *rootNode = validatingParseDoc(
md->briefFile(),md->briefLine(),
cd,md,
md->briefDescription(),
TRUE,FALSE,0,TRUE,FALSE
);
- if (md->isDetailedSectionLinkable())
+ if (rootNode && !rootNode->isEmpty())
{
- ol.disableAllBut(OutputGenerator::Html);
- ol.docify(" ");
- ol.startTextLink(md->getOutputFileBase(),
- md->anchor());
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- ol.enableAll();
+ ol.startMemberDescription(md->anchor());
+ ol.writeDoc(rootNode,cd,md);
+ if (md->isDetailedSectionLinkable())
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.docify(" ");
+ ol.startTextLink(md->getOutputFileBase(),
+ md->anchor());
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ ol.enableAll();
+ }
+ ol.endMemberDescription();
}
- ol.endMemberDescription();
+ delete rootNode;
}
ol.endMemberDeclaration(md->anchor(),inheritId);
}
@@ -476,6 +482,7 @@ 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
@@ -552,7 +559,7 @@ void MemberList::writeDeclarations(OutputList &ol,
if (!st.isEmpty())
{
ol.startMemberSubtitle();
- ol.parseDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,FALSE,FALSE);
+ ol.generateDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,FALSE,FALSE);
ol.endMemberSubtitle();
}
}
@@ -595,7 +602,7 @@ void MemberList::writeDeclarations(OutputList &ol,
{
//printf("Member group has docs!\n");
ol.startMemberGroupDocs();
- ol.parseDoc("[generated]",-1,ctx,0,mg->documentation()+"\n",FALSE,FALSE);
+ ol.generateDoc("[generated]",-1,ctx,0,mg->documentation()+"\n",FALSE,FALSE);
ol.endMemberGroupDocs();
}
ol.startMemberGroup();
@@ -756,8 +763,8 @@ void MemberList::addListReferences(Definition *def)
if (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)
{
md->addListReference(def);
- LockingPtr<MemberList> enumFields = md->enumFieldList();
- if (md->memberType()==MemberType_Enumeration && enumFields!=0)
+ MemberList *enumFields = md->enumFieldList();
+ if (md->memberType()==MemberType_Enumeration && enumFields)
{
//printf(" Adding enum values!\n");
MemberListIterator vmli(*enumFields);
diff --git a/src/message.cpp b/src/message.cpp
index 60cb861..dd1f05c 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -26,6 +26,8 @@
#include "filedef.h"
static QCString outputFormat;
+static const char *warning_str = "Warning: ";
+static const char *error_str = "Error: ";
//static int warnFormatOrder; // 1 = $file,$line,$text
// // 2 = $text,$line,$file
// // 3 = $line,$text,$file
@@ -149,11 +151,17 @@ static void format_warn(const char *file,int line,const char *text)
fwrite(msgText.data(),1,msgText.length(),warnFile);
}
-static void do_warn(const char *tag, const char *file, int line, const char *fmt, va_list args)
+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[4096];
- vsnprintf(text, 4096, fmt, args);
+ int l=0;
+ if (prefix)
+ {
+ strcpy(text,prefix);
+ l=strlen(prefix);
+ }
+ vsnprintf(text+l, 4096-l, fmt, args);
text[4095]='\0';
format_warn(file,line,text);
}
@@ -162,21 +170,21 @@ void warn(const char *file,int line,const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
- do_warn("WARNINGS", file, line, fmt, args);
+ do_warn("WARNINGS", file, line, warning_str, fmt, args);
va_end(args);
}
void warn_simple(const char *file,int line,const char *text)
{
if (!Config_getBool("WARNINGS")) return; // warning type disabled
- format_warn(file,line,text);
+ format_warn(file,line,QCString(warning_str) + text);
}
void warn_undoc(const char *file,int line,const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
- do_warn("WARN_IF_UNDOCUMENTED", file, line, fmt, args);
+ do_warn("WARN_IF_UNDOCUMENTED", file, line, warning_str, fmt, args);
va_end(args);
}
@@ -184,14 +192,22 @@ void warn_doc_error(const char *file,int line,const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
- do_warn("WARN_IF_DOC_ERROR", file, line, fmt, args);
+ do_warn("WARN_IF_DOC_ERROR", file, line, warning_str, fmt, args);
va_end(args);
}
+void warn_uncond(const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ vfprintf(warnFile, (QCString(warning_str) + fmt).data(), args);
+ va_end(args);
+}
+
void err(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
- vfprintf(warnFile, fmt, args);
+ vfprintf(warnFile, (QCString(error_str) + fmt).data(), args);
va_end(args);
}
diff --git a/src/message.h b/src/message.h
index acdbaff..e01b8be 100644
--- a/src/message.h
+++ b/src/message.h
@@ -25,6 +25,7 @@ extern void warn(const char *file,int line,const char *fmt, ...);
extern void warn_simple(const char *file,int line,const char *text);
extern void warn_undoc(const char *file,int line,const char *fmt, ...);
extern void warn_doc_error(const char *file,int line,const char *fmt, ...);
+extern void warn_uncond(const char *fmt, ...);
extern void err(const char *fmt, ...);
void initWarningFormat();
diff --git a/src/msc.cpp b/src/msc.cpp
index e87c16f..f9b069e 100644
--- a/src/msc.cpp
+++ b/src/msc.cpp
@@ -34,7 +34,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,const QCString rel
QFile f(mapName);
if (!f.open(IO_ReadOnly))
{
- err("error: failed to open map file %s for inclusion in the docs!\n"
+ err("failed to open map file %s for inclusion in the docs!\n"
"If you installed Graphviz/dot after a previous failing run, \n"
"try deleting the output directory and rerun doxygen.\n",mapName);
return FALSE;
@@ -136,7 +136,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
portable_sysTimerStart();
if (portable_system("epstopdf",epstopdfArgs)!=0)
{
- err("error: Problems running epstopdf. Check your TeX installation!\n");
+ err("Problems running epstopdf. Check your TeX installation!\n");
}
portable_sysTimerStop();
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index b95cec8..cfca6d6 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -268,7 +268,7 @@ void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title
ol.startTextBlock();
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
{
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
+ ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
}
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
@@ -284,7 +284,7 @@ void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title
}
if (!documentation().isEmpty())
{
- ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
}
ol.endTextBlock();
}
@@ -294,25 +294,30 @@ void NamespaceDef::writeBriefDescription(OutputList &ol)
{
if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty()
- )
+ DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
+ briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
+ if (rootNode && !rootNode->isEmpty())
{
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
+ ol.startParagraph();
+ ol.writeDoc(rootNode,this,0);
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::RTF);
+ ol.writeString(" \n");
+ ol.enable(OutputGenerator::RTF);
+
+ if (Config_getBool("REPEAT_BRIEF") ||
+ !documentation().isEmpty()
+ )
+ {
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.startTextLink(0,"details");
+ ol.parseText(theTranslator->trMore());
+ ol.endTextLink();
+ }
+ ol.popGeneratorState();
+ ol.endParagraph();
}
- ol.popGeneratorState();
- ol.endParagraph();
+ delete rootNode;
// FIXME:PARA
//ol.pushGeneratorState();
@@ -506,6 +511,11 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
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);
@@ -763,8 +773,8 @@ void NamespaceDef::addListReferences()
{
//bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
{
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- addRefItem(xrefItems.pointer(),
+ QList<ListItemInfo> *xrefItems = xrefListItems();
+ addRefItem(xrefItems,
qualifiedName(),
getLanguage()==SrcLangExt_Fortran ?
theTranslator->trModule(TRUE,TRUE) :
@@ -965,7 +975,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription(nd->getOutputFileBase());
- ol.parseDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE);
+ ol.generateDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
diff --git a/src/outputgen.h b/src/outputgen.h
index 719f2cd..2a959e4 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -96,7 +96,7 @@ class BaseOutputDocInterface : public CodeOutputInterface
Examples
};
- virtual void parseText(const QCString &) {}
+ virtual bool parseText(const QCString &s) { return s.isEmpty(); }
/*! Start of a bullet list: e.g. \c \<ul\> in html. startItemListItem() is
* Used for the bullet items.
diff --git a/src/outputlist.cpp b/src/outputlist.cpp
index d51b548..2928400 100644
--- a/src/outputlist.cpp
+++ b/src/outputlist.cpp
@@ -130,14 +130,14 @@ void OutputList::popGeneratorState()
}
}
-void OutputList::parseDoc(const char *fileName,int startLine,
+bool OutputList::generateDoc(const char *fileName,int startLine,
Definition *ctx,MemberDef * md,
const QCString &docStr,bool indexWords,
bool isExample,const char *exampleName,
bool singleLine,bool linkFromIndex)
{
int count=0;
- if (docStr.isEmpty()) return;
+ if (docStr.isEmpty()) return TRUE;
OutputGenerator *og=outputs->first();
while (og)
@@ -145,23 +145,25 @@ void OutputList::parseDoc(const char *fileName,int startLine,
if (og->isEnabled()) count++;
og=outputs->next();
}
- if (count==0) return; // no output formats enabled.
+ if (count==0) return TRUE; // no output formats enabled.
- DocNode *root=0;
- if (docStr.at(docStr.length()-1)=='\n')
- {
- root = validatingParseDoc(fileName,startLine,
- ctx,md,docStr,indexWords,isExample,exampleName,
- singleLine,linkFromIndex);
- }
- else
- {
- root = validatingParseDoc(fileName,startLine,
- ctx,md,docStr+"\n",indexWords,isExample,exampleName,
- singleLine,linkFromIndex);
- }
+ DocRoot *root=0;
+ root = validatingParseDoc(fileName,startLine,
+ ctx,md,docStr,indexWords,isExample,exampleName,
+ singleLine,linkFromIndex);
- og=outputs->first();
+ writeDoc(root,ctx,md);
+
+ bool isEmpty = root->isEmpty();
+
+ delete root;
+
+ return isEmpty;
+}
+
+void OutputList::writeDoc(DocRoot *root,Definition *ctx,MemberDef *md)
+{
+ OutputGenerator *og=outputs->first();
while (og)
{
//printf("og->printDoc(extension=%s)\n",
@@ -171,11 +173,9 @@ void OutputList::parseDoc(const char *fileName,int startLine,
}
VhdlDocGen::setFlowMember(0);
-
- delete root;
}
-void OutputList::parseText(const QCString &textStr)
+bool OutputList::parseText(const QCString &textStr)
{
int count=0;
OutputGenerator *og=outputs->first();
@@ -184,9 +184,9 @@ void OutputList::parseText(const QCString &textStr)
if (og->isEnabled()) count++;
og=outputs->next();
}
- if (count==0) return; // no output formats enabled.
+ if (count==0) return TRUE; // no output formats enabled.
- DocNode *root = validatingParseText(textStr);
+ DocText *root = validatingParseText(textStr);
og=outputs->first();
while (og)
@@ -195,7 +195,11 @@ void OutputList::parseText(const QCString &textStr)
og=outputs->next();
}
+ bool isEmpty = root->isEmpty();
+
delete root;
+
+ return isEmpty;
}
diff --git a/src/outputlist.h b/src/outputlist.h
index 71481ba..b328056 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -42,6 +42,7 @@ class DotInclDepGraph;
class DotGfxHierarchyTable;
class SectionDict;
class DotGroupCollaboration;
+class DocRoot;
/** Class representing a list of output generators that are written to
* in parallel.
@@ -69,11 +70,12 @@ class OutputList : public OutputDocInterface
// OutputDocInterface implementation
//////////////////////////////////////////////////
- void parseDoc(const char *fileName,int startLine,
- Definition *ctx,MemberDef *md,const QCString &docStr,
- bool indexWords,bool isExample,const char *exampleName=0,
- bool singleLine=FALSE,bool linkFromIndex=FALSE);
- void parseText(const QCString &textStr);
+ bool generateDoc(const char *fileName,int startLine,
+ Definition *ctx,MemberDef *md,const QCString &docStr,
+ bool indexWords,bool isExample,const char *exampleName=0,
+ bool singleLine=FALSE,bool linkFromIndex=FALSE);
+ void writeDoc(DocRoot *root,Definition *ctx,MemberDef *md);
+ bool parseText(const QCString &textStr);
void startIndexSection(IndexSections is)
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index 7445287..113eaa5 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -49,7 +49,7 @@ void PageDef::findSectionsInDocumentation()
GroupDef *PageDef::getGroupDef() const
{
- LockingPtr<GroupList> groups = partOfGroups();
+ GroupList *groups = partOfGroups();
return groups!=0 ? groups->getFirst() : 0;
}
@@ -130,7 +130,7 @@ void PageDef::writeDocumentation(OutputList &ol)
ol.endTitleHead(pageName, pageName);
if (si)
{
- ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
ol.endSection(si->label,si->type);
}
ol.popGeneratorState();
@@ -146,7 +146,7 @@ void PageDef::writeDocumentation(OutputList &ol)
{
//ol.startSection(si->label,si->title,si->type);
startTitle(ol,getOutputFileBase(),this);
- ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
//stringToSearchIndex(getOutputFileBase(),
// theTranslator->trPage(TRUE,TRUE)+" "+si->title,
// si->title);
@@ -214,7 +214,7 @@ void PageDef::writePageDocumentation(OutputList &ol)
}
ol.startTextBlock();
- ol.parseDoc(
+ ol.generateDoc(
docFile(), // fileName
docLine(), // startLine
this, // context
diff --git a/src/parserintf.h b/src/parserintf.h
index fa9184c..0274c13 100644
--- a/src/parserintf.h
+++ b/src/parserintf.h
@@ -19,6 +19,7 @@
#define PARSERINTF_H
#include <qdict.h>
+#include <qstrlist.h>
class Entry;
class FileDef;
@@ -36,15 +37,37 @@ class ParserInterface
{
public:
virtual ~ParserInterface() {}
+
+ /** Starts processing a translation unit (source files + headers).
+ * After this call parseInput() is called with sameTranslationUnit
+ * set to FALSE. If parseInput() returns additional include files,
+ * these are also processed using parseInput() with
+ * sameTranslationUnit set to TRUE. After that
+ * finishTranslationUnit() is called.
+ */
+ virtual void startTranslationUnit(const char *fileName) = 0;
+
+ /** Called after all files in a translation unit have been
+ * processed.
+ */
+ virtual void finishTranslationUnit() = 0;
+
/** Parses a single input file with the goal to build an Entry tree.
* @param[in] fileName The full name of the file.
* @param[in] fileBuf The contents of the file (zero terminated).
* @param[in,out] root The root of the tree of Entry *nodes
* representing the information extracted from the file.
+ * @param[in] sameTranslationUnit TRUE if this file was found in the same
+ * translation unit (in the filesInSameTranslationUnit list
+ * returned for another file).
+ * @param[in,out] filesInSameTranslationUnit other files expected to be
+ * found in the same translation unit (used for libclang)
*/
virtual void parseInput(const char *fileName,
const char *fileBuf,
- Entry *root) = 0;
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList &filesInSameTranslationUnit) = 0;
/** Returns TRUE if the language identified by \a extension needs
* the C preprocessor to be run before feed the result to the input
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index be8b1d9..9257df0 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -642,7 +642,7 @@ void PerlModDocVisitor::visit(DocSymbol *sy)
case DocSymbol::RightCeil: symbol = "rceil"; break;
case DocSymbol::LeftFloor: symbol = "lfloor"; break;
case DocSymbol::RightFloor: symbol = "rfloor"; break;
- case DocSymbol::Unknown: err("error: unknown symbol found\n");
+ case DocSymbol::Unknown: err("unknown symbol found\n");
break;
}
if (c != 0)
@@ -910,7 +910,7 @@ void PerlModDocVisitor::visitPre(DocSimpleSect *s)
case DocSimpleSect::User: type = "par"; break;
case DocSimpleSect::Rcs: type = "rcs"; break;
case DocSimpleSect::Unknown:
- err("error: unknown simple section found\n");
+ err("unknown simple section found\n");
break;
}
leaveText();
@@ -1283,7 +1283,7 @@ void PerlModDocVisitor::visitPre(DocParamSect *s)
case DocParamSect::Exception: type = "exceptions"; break;
case DocParamSect::TemplateParam: type = "templateparam"; break;
case DocParamSect::Unknown:
- err("error: unknown parameter section found\n");
+ err("unknown parameter section found\n");
break;
}
openOther();
@@ -1592,16 +1592,16 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
md->memberType()!=MemberType_Enumeration)
m_output.addFieldQuotedString("type", md->typeString());
- LockingPtr<ArgumentList> al = md->argumentList();
+ ArgumentList *al = md->argumentList();
if (isFunc) //function
{
m_output.addFieldBoolean("const", al!=0 && al->constSpecifier)
.addFieldBoolean("volatile", al!=0 && al->volatileSpecifier);
m_output.openList("parameters");
- LockingPtr<ArgumentList> declAl = md->declArgumentList();
- LockingPtr<ArgumentList> defAl = md->argumentList();
- if (declAl!=0 && declAl->count()>0)
+ ArgumentList *declAl = md->declArgumentList();
+ ArgumentList *defAl = md->argumentList();
+ if (declAl && declAl->count()>0)
{
ArgumentListIterator declAli(*declAl);
ArgumentListIterator defAli(*defAl);
@@ -1662,8 +1662,8 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
if (md->memberType()==MemberType_Enumeration) // enum
{
- LockingPtr<MemberList> enumFields = md->enumFieldList();
- if (enumFields!=0)
+ MemberList *enumFields = md->enumFieldList();
+ if (enumFields)
{
m_output.openList("values");
MemberListIterator emli(*enumFields);
@@ -1692,8 +1692,8 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
.addFieldQuotedString("name", rmd->name())
.closeHash();
- LockingPtr<MemberList> rbml = md->reimplementedBy();
- if (rbml!=0)
+ MemberList *rbml = md->reimplementedBy();
+ if (rbml)
{
MemberListIterator mli(*rbml);
m_output.openList("reimplemented_by");
@@ -2258,13 +2258,13 @@ bool PerlModGenerator::createOutputDir(QDir &perlModDir)
dir.setPath(QDir::currentDirPath());
if (!dir.mkdir(outputDirectory))
{
- err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+ err("tag OUTPUT_DIRECTORY: Output directory `%s' does not "
"exist and cannot be created\n",outputDirectory.data());
exit(1);
}
- else if (!Config_getBool("QUIET"))
+ else
{
- err("notice: Output directory `%s' does not exist. "
+ msg("Notice: Output directory `%s' does not exist. "
"I have created it for you.\n", outputDirectory.data());
}
dir.cd(outputDirectory);
diff --git a/src/pre.l b/src/pre.l
index f11cae7..a207a6a 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -221,7 +221,9 @@ class DefineManager
*/
Define *isDefined(const char *name) const
{
- return m_contextDefines.find(name);
+ Define *d = m_contextDefines.find(name);
+ //printf("isDefined(%s)=%p\n",name,d);
+ return d;
}
/** Returns a reference to the defines found in the current context. */
const DefineDict &defineContext() const
@@ -407,7 +409,7 @@ static void decrLevel()
}
else
{
- warn(g_yyFileName,g_yyLineNr,"warning: More #endif's than #if's found.\n");
+ warn(g_yyFileName,g_yyLineNr,"More #endif's than #if's found.\n");
}
}
@@ -415,7 +417,7 @@ static bool otherCaseDone()
{
if (g_level==0)
{
- warn(g_yyFileName,g_yyLineNr,"warning: Found an #else without a preceding #if.\n");
+ warn(g_yyFileName,g_yyLineNr,"Found an #else without a preceding #if.\n");
return TRUE;
}
else
@@ -429,57 +431,6 @@ static void setCaseDone(bool value)
g_levelGuard[g_level-1]=value;
}
-#if 0
-static bool macroIsAccessible(Define *def)
-{
- //printf("macroIsAccessible(%s) input=%s def=%s\n",
- // def->name.data(),g_inputFileDef?g_inputFileDef->name().data():"<none>",
- // def->fileDef ? def->fileDef->name().data() : "<none>");
- if (def && def->isPredefined) // predefined macro -> globally accessible
- {
- //printf("%s: predefined macro %s\n",g_inputFileDef->name().data(),def->name.data());
- return TRUE;
- }
- if (def && def->fileDef==g_inputFileDef)
- {
- //printf("%s: macro %s defined in this file at line %d now at %d\n",
- // g_inputFileDef->name().data(),def->name.data(),def->lineNr,g_yyLineNr);
- return def->lineNr<=g_yyLineNr;
- }
- if (g_inputFileDef && def && def->fileDef) // check if g_inputFileDef actually includes def->fileDef
- {
- QDict<FileDef> includedFiles(257);
- bool b = g_inputFileDef->includes(def->fileDef,&includedFiles);
- //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
- // g_inputFileDef->name().data(),def->name.data(),def->fileDef->name().data(),b);
- return b;
- }
- if (g_inputFileDef && def && !def->fileName.isEmpty())
- {
- bool b = g_inputFileDef->includesByName(def->fileName);
- //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
- // g_inputFileDef->name().data(),def->name.data(),def->fileName.data(),b);
- return b;
- }
- //printf("not accessible!\n");
- return FALSE;
-}
-
-static Define *isDefined(const char *name)
-{
- Define *def=0;
- if (name)
- {
- def=g_globalDefineDict->find(name);
- if (def && def->undef) def=0;
- if (def && !macroIsAccessible(def)) def=0;
- }
- //printf("isDefined(%s)=%p\n",name,def);
- return def;
-}
-#endif
-
-
static QDict<void> g_allIncludes(10009);
static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyIncluded)
@@ -1649,7 +1600,7 @@ static void readIncludeFile(const QCString &inc)
}
if (g_curlyCount>0 && !alreadyIncluded) // failed to find #include inside { ... }
{
- warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
+ warn(g_yyFileName,g_yyLineNr,"include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
}
}
}
@@ -1667,6 +1618,7 @@ static void startCondSection(const char *sectId)
{
g_skip=TRUE;
}
+ //printf(" expResult=%d skip=%d\n",expResult,g_skip);
}
static void endCondSection()
@@ -2326,7 +2278,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_defVarArgs = FALSE;
//printf("Guard check: %s!=%s || %d\n",
// g_defName.data(),g_lastGuardName.data(),g_expectGuard);
- if ( g_defName!=g_lastGuardName || !g_expectGuard)
+ if (g_curlyCount>0 || g_defName!=g_lastGuardName || !g_expectGuard)
{ // define may appear in the output
QCString tmp=(QCString)"#define "+g_defName;
outputArray(tmp.data(),tmp.length());
@@ -2356,7 +2308,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_defVarArgs = FALSE;
//printf("Guard check: %s!=%s || %d\n",
// g_defName.data(),g_lastGuardName.data(),g_expectGuard);
- if ( g_defName!=g_lastGuardName || !g_expectGuard)
+ if (g_curlyCount>0 || g_defName!=g_lastGuardName || !g_expectGuard)
{ // define may appear in the output
QCString tmp=(QCString)"#define "+g_defName;
outputArray(tmp.data(),tmp.length());
@@ -2507,10 +2459,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section
g_ccomment=TRUE;
+ g_condCtx=YY_START;
BEGIN(CondLineCpp);
}
<SkipCComment>[\\@]"cond"[ \t]+ { // conditional section
g_ccomment=FALSE;
+ g_condCtx=YY_START;
BEGIN(CondLineC);
}
<CondLineC,CondLineCpp>[!()&| \ta-z_A-Z0-9.\-]+ {
@@ -2567,6 +2521,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
{
g_ccomment=FALSE;
}
+ g_condCtx=YY_START;
BEGIN(SkipCond);
}
<SkipCond>\n { g_yyLineNr++; outputChar('\n'); }
@@ -2575,8 +2530,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCond>"//"[/!] { g_ccomment=FALSE; }
<SkipCond>"/*"[*!] { g_ccomment=TRUE; }
<SkipCond>[\\@]"endcond"/[^a-z_A-Z0-9] {
+ bool oldSkip = g_skip;
endCondSection();
- if (!g_skip)
+ if (oldSkip && !g_skip)
{
if (g_ccomment)
{
@@ -2586,8 +2542,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
}
<SkipCComment,SkipCPPComment>[\\@]"endcond"/[^a-z_A-Z0-9] {
+ bool oldSkip = g_skip;
endCondSection();
- if (!g_skip)
+ if (oldSkip && !g_skip)
{
BEGIN(g_condCtx);
}
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 74acd4b..dc28d26 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -58,104 +58,104 @@ class PrintDocVisitor : public DocVisitor
indent_leaf();
switch(s->symbol())
{
- case DocSymbol::BSlash: printf("\\"); break;
- case DocSymbol::At: printf("@"); break;
- case DocSymbol::Less: printf("<"); break;
- case DocSymbol::Greater: printf(">"); break;
- case DocSymbol::Amp: printf("&"); break;
- case DocSymbol::Dollar: printf("$"); break;
- case DocSymbol::Hash: printf("#"); break;
- case DocSymbol::Percent: printf("%%"); break;
- case DocSymbol::Pipe: printf("|"); break;
- case DocSymbol::Copy: printf("&copy;"); break;
- case DocSymbol::Apos: printf("'"); break;
- case DocSymbol::Quot: printf("\""); break;
+ case DocSymbol::BSlash: printf("\\"); break;
+ case DocSymbol::At: printf("@"); break;
+ case DocSymbol::Less: printf("<"); break;
+ case DocSymbol::Greater: printf(">"); break;
+ case DocSymbol::Amp: printf("&"); break;
+ case DocSymbol::Dollar: printf("$"); break;
+ case DocSymbol::Hash: printf("#"); break;
+ case DocSymbol::Percent: printf("%%"); break;
+ case DocSymbol::Pipe: printf("|"); break;
+ case DocSymbol::Copy: printf("&copy;"); break;
+ case DocSymbol::Apos: printf("'"); break;
+ case DocSymbol::Quot: printf("\""); break;
case DocSymbol::Lsquo: printf("&lsquo;"); break;
case DocSymbol::Rsquo: printf("&rsquo;"); break;
case DocSymbol::Ldquo: printf("&ldquo;"); break;
case DocSymbol::Rdquo: printf("&rdquo;"); break;
case DocSymbol::Ndash: printf("&ndash;"); break;
case DocSymbol::Mdash: printf("&mdash;"); break;
- case DocSymbol::Uml: printf("&%cuml;",s->letter()); break;
- case DocSymbol::Acute: printf("&%cacute;",s->letter()); break;
- case DocSymbol::Grave: printf("&%cgrave;",s->letter()); break;
- case DocSymbol::Circ: printf("&%ccirc;",s->letter()); break;
- case DocSymbol::Tilde: printf("&%ctilde;",s->letter()); break;
- case DocSymbol::Szlig: printf("&szlig;"); break;
- case DocSymbol::Cedil: printf("&%ccedul;",s->letter()); break;
- case DocSymbol::Ring: printf("&%cring;",s->letter()); break;
- case DocSymbol::Nbsp: printf("&nbsp;"); break;
- case DocSymbol::Aelig: printf("&aelig;"); break;
- case DocSymbol::AElig: printf("&AElig;"); break;
- case DocSymbol::GrkGamma: printf("&Gamma;"); break;
- case DocSymbol::GrkDelta: printf("&Delta;"); break;
- case DocSymbol::GrkTheta: printf("&Theta;"); break;
- case DocSymbol::GrkLambda: printf("&Lambda;"); break;
- case DocSymbol::GrkXi: printf("&Xi;"); break;
- case DocSymbol::GrkPi: printf("&Pi;"); break;
- case DocSymbol::GrkSigma: printf("&Sigma;"); break;
- case DocSymbol::GrkUpsilon: printf("&Upsilon;"); break;
- case DocSymbol::GrkPhi: printf("&Phi;"); break;
- case DocSymbol::GrkPsi: printf("&Psi;"); break;
- case DocSymbol::GrkOmega: printf("&Omega;"); break;
- case DocSymbol::Grkalpha: printf("&alpha;"); break;
- case DocSymbol::Grkbeta: printf("&beta;"); break;
- case DocSymbol::Grkgamma: printf("&gamma;"); break;
- case DocSymbol::Grkdelta: printf("&delta;"); break;
- case DocSymbol::Grkepsilon: printf("&epsilon;"); break;
- case DocSymbol::Grkzeta: printf("&zeta;"); break;
- case DocSymbol::Grketa: printf("&eta;"); break;
- case DocSymbol::Grktheta: printf("&theta;"); break;
- case DocSymbol::Grkiota: printf("&iota;"); break;
- case DocSymbol::Grkkappa: printf("&kappa;"); break;
- case DocSymbol::Grklambda: printf("&lambda;"); break;
- case DocSymbol::Grkmu: printf("&mu;"); break;
- case DocSymbol::Grknu: printf("&nu;"); break;
- case DocSymbol::Grkxi: printf("&xi;"); break;
- case DocSymbol::Grkpi: printf("&pi;"); break;
- case DocSymbol::Grkrho: printf("&rho;"); break;
- case DocSymbol::Grksigma: printf("&sigma;"); break;
- case DocSymbol::Grktau: printf("&tau;"); break;
- case DocSymbol::Grkupsilon: printf("&upsilon;"); break;
- case DocSymbol::Grkphi: printf("&phi;"); break;
- case DocSymbol::Grkchi: printf("&chi;"); break;
- case DocSymbol::Grkpsi: printf("&psi;"); break;
- case DocSymbol::Grkomega: printf("&omega;"); break;
- case DocSymbol::Grkvarsigma: printf("&sigmaf;"); break;
- case DocSymbol::Section: printf("&sect;"); break;
- case DocSymbol::Degree: printf("&deg;"); break;
- case DocSymbol::Prime: printf("&prime;"); break;
- case DocSymbol::DoublePrime: printf("&Prime;"); break;
- case DocSymbol::Infinity: printf("&infin;"); break;
- case DocSymbol::EmptySet: printf("&empty;"); break;
- case DocSymbol::PlusMinus: printf("&plusmn;"); break;
- case DocSymbol::Times: printf("&times;"); break;
- case DocSymbol::Minus: printf("&minus;"); break;
- case DocSymbol::CenterDot: printf("&sdot;"); break;
- case DocSymbol::Partial: printf("&part;"); break;
- case DocSymbol::Nabla: printf("&nabla;"); break;
- case DocSymbol::SquareRoot: printf("&radic;"); break;
- case DocSymbol::Perpendicular: printf("&perp;"); break;
- case DocSymbol::Sum: printf("&sum;"); break;
- case DocSymbol::Integral: printf("&int;"); break;
- case DocSymbol::Product: printf("&prod;"); break;
- case DocSymbol::Similar: printf("&sim;"); break;
- case DocSymbol::Approx: printf("&asymp;"); break;
- case DocSymbol::NotEqual: printf("&ne;"); break;
- case DocSymbol::Equivalent: printf("&equiv;"); break;
- case DocSymbol::Proportional: printf("&prop;"); break;
- case DocSymbol::LessEqual: printf("&le;"); break;
- case DocSymbol::GreaterEqual: printf("&ge;"); break;
- case DocSymbol::LeftArrow: printf("&larr;"); break;
- case DocSymbol::RightArrow: printf("&rarr;"); break;
- case DocSymbol::SetIn: printf("&isin;"); break;
- case DocSymbol::SetNotIn: printf("&notin;"); break;
- case DocSymbol::LeftCeil: printf("&lceil;"); break;
- case DocSymbol::RightCeil: printf("&rceil;"); break;
- case DocSymbol::LeftFloor: printf("&lfloor;"); break;
- case DocSymbol::RightFloor: printf("&rfloor;"); break;
- default:
- printf("Error: unknown symbol found\n");
+ case DocSymbol::Uml: printf("&%cuml;",s->letter()); break;
+ case DocSymbol::Acute: printf("&%cacute;",s->letter()); break;
+ case DocSymbol::Grave: printf("&%cgrave;",s->letter()); break;
+ case DocSymbol::Circ: printf("&%ccirc;",s->letter()); break;
+ case DocSymbol::Tilde: printf("&%ctilde;",s->letter()); break;
+ case DocSymbol::Szlig: printf("&szlig;"); break;
+ case DocSymbol::Cedil: printf("&%ccedul;",s->letter()); break;
+ case DocSymbol::Ring: printf("&%cring;",s->letter()); break;
+ case DocSymbol::Nbsp: printf("&nbsp;"); break;
+ case DocSymbol::Aelig: printf("&aelig;"); break;
+ case DocSymbol::AElig: printf("&AElig;"); break;
+ case DocSymbol::GrkGamma: printf("&Gamma;"); break;
+ case DocSymbol::GrkDelta: printf("&Delta;"); break;
+ case DocSymbol::GrkTheta: printf("&Theta;"); break;
+ case DocSymbol::GrkLambda: printf("&Lambda;"); break;
+ case DocSymbol::GrkXi: printf("&Xi;"); break;
+ case DocSymbol::GrkPi: printf("&Pi;"); break;
+ case DocSymbol::GrkSigma: printf("&Sigma;"); break;
+ case DocSymbol::GrkUpsilon: printf("&Upsilon;"); break;
+ case DocSymbol::GrkPhi: printf("&Phi;"); break;
+ case DocSymbol::GrkPsi: printf("&Psi;"); break;
+ case DocSymbol::GrkOmega: printf("&Omega;"); break;
+ case DocSymbol::Grkalpha: printf("&alpha;"); break;
+ case DocSymbol::Grkbeta: printf("&beta;"); break;
+ case DocSymbol::Grkgamma: printf("&gamma;"); break;
+ case DocSymbol::Grkdelta: printf("&delta;"); break;
+ case DocSymbol::Grkepsilon: printf("&epsilon;"); break;
+ case DocSymbol::Grkzeta: printf("&zeta;"); break;
+ case DocSymbol::Grketa: printf("&eta;"); break;
+ case DocSymbol::Grktheta: printf("&theta;"); break;
+ case DocSymbol::Grkiota: printf("&iota;"); break;
+ case DocSymbol::Grkkappa: printf("&kappa;"); break;
+ case DocSymbol::Grklambda: printf("&lambda;"); break;
+ case DocSymbol::Grkmu: printf("&mu;"); break;
+ case DocSymbol::Grknu: printf("&nu;"); break;
+ case DocSymbol::Grkxi: printf("&xi;"); break;
+ case DocSymbol::Grkpi: printf("&pi;"); break;
+ case DocSymbol::Grkrho: printf("&rho;"); break;
+ case DocSymbol::Grksigma: printf("&sigma;"); break;
+ case DocSymbol::Grktau: printf("&tau;"); break;
+ case DocSymbol::Grkupsilon: printf("&upsilon;"); break;
+ case DocSymbol::Grkphi: printf("&phi;"); break;
+ case DocSymbol::Grkchi: printf("&chi;"); break;
+ case DocSymbol::Grkpsi: printf("&psi;"); break;
+ case DocSymbol::Grkomega: printf("&omega;"); break;
+ case DocSymbol::Grkvarsigma: printf("&sigmaf;"); break;
+ case DocSymbol::Section: printf("&sect;"); break;
+ case DocSymbol::Degree: printf("&deg;"); break;
+ case DocSymbol::Prime: printf("&prime;"); break;
+ case DocSymbol::DoublePrime: printf("&Prime;"); break;
+ case DocSymbol::Infinity: printf("&infin;"); break;
+ case DocSymbol::EmptySet: printf("&empty;"); break;
+ case DocSymbol::PlusMinus: printf("&plusmn;"); break;
+ case DocSymbol::Times: printf("&times;"); break;
+ case DocSymbol::Minus: printf("&minus;"); break;
+ case DocSymbol::CenterDot: printf("&sdot;"); break;
+ case DocSymbol::Partial: printf("&part;"); break;
+ case DocSymbol::Nabla: printf("&nabla;"); break;
+ case DocSymbol::SquareRoot: printf("&radic;"); break;
+ case DocSymbol::Perpendicular: printf("&perp;"); break;
+ case DocSymbol::Sum: printf("&sum;"); break;
+ case DocSymbol::Integral: printf("&int;"); break;
+ case DocSymbol::Product: printf("&prod;"); break;
+ case DocSymbol::Similar: printf("&sim;"); break;
+ case DocSymbol::Approx: printf("&asymp;"); break;
+ case DocSymbol::NotEqual: printf("&ne;"); break;
+ case DocSymbol::Equivalent: printf("&equiv;"); break;
+ case DocSymbol::Proportional: printf("&prop;"); break;
+ case DocSymbol::LessEqual: printf("&le;"); break;
+ case DocSymbol::GreaterEqual: printf("&ge;"); break;
+ case DocSymbol::LeftArrow: printf("&larr;"); break;
+ case DocSymbol::RightArrow: printf("&rarr;"); break;
+ case DocSymbol::SetIn: printf("&isin;"); break;
+ case DocSymbol::SetNotIn: printf("&notin;"); break;
+ case DocSymbol::LeftCeil: printf("&lceil;"); break;
+ case DocSymbol::RightCeil: printf("&rceil;"); break;
+ case DocSymbol::LeftFloor: printf("&lfloor;"); break;
+ case DocSymbol::RightFloor: printf("&rfloor;"); break;
+ default:
+ printf("unknown symbol found\n");
}
}
void visit(DocURL *u)
@@ -179,35 +179,35 @@ class PrintDocVisitor : public DocVisitor
switch (s->style())
{
case DocStyleChange::Bold:
- if (s->enable()) printf("<bold>"); else printf("</bold>");
- break;
+ if (s->enable()) printf("<bold>"); else printf("</bold>");
+ break;
case DocStyleChange::Italic:
- if (s->enable()) printf("<italic>"); else printf("</italic>");
- break;
+ if (s->enable()) printf("<italic>"); else printf("</italic>");
+ break;
case DocStyleChange::Code:
- if (s->enable()) printf("<code>"); else printf("</code>");
- break;
+ if (s->enable()) printf("<code>"); else printf("</code>");
+ break;
case DocStyleChange::Subscript:
- if (s->enable()) printf("<sub>"); else printf("</sub>");
- break;
+ if (s->enable()) printf("<sub>"); else printf("</sub>");
+ break;
case DocStyleChange::Superscript:
- if (s->enable()) printf("<sup>"); else printf("</sup>");
- break;
+ if (s->enable()) printf("<sup>"); else printf("</sup>");
+ break;
case DocStyleChange::Center:
- if (s->enable()) printf("<center>"); else printf("</center>");
- break;
+ if (s->enable()) printf("<center>"); else printf("</center>");
+ break;
case DocStyleChange::Small:
- if (s->enable()) printf("<small>"); else printf("</small>");
- break;
+ if (s->enable()) printf("<small>"); else printf("</small>");
+ break;
case DocStyleChange::Preformatted:
- if (s->enable()) printf("<pre>"); else printf("</pre>");
- break;
+ if (s->enable()) printf("<pre>"); else printf("</pre>");
+ break;
case DocStyleChange::Div:
- if (s->enable()) printf("<div>"); else printf("</div>");
- break;
+ if (s->enable()) printf("<div>"); else printf("</div>");
+ break;
case DocStyleChange::Span:
- if (s->enable()) printf("<span>"); else printf("</span>");
- break;
+ if (s->enable()) printf("<span>"); else printf("</span>");
+ break;
}
}
void visit(DocVerbatim *s)
diff --git a/src/pycode.l b/src/pycode.l
index 226c448..c87f5bb 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -483,6 +483,7 @@ static void codifyLines(char *text)
}
}
+#if 0
static QCString fileLocation()
{
QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
@@ -508,6 +509,7 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst)
src->addSourceReferences(dst,fileLocation());
}
}
+#endif
diff --git a/src/pyscanner.h b/src/pyscanner.h
index 8a6971f..707edbd 100644
--- a/src/pyscanner.h
+++ b/src/pyscanner.h
@@ -35,9 +35,13 @@ class PythonLanguageScanner : public ParserInterface
{
public:
virtual ~PythonLanguageScanner() {}
+ void startTranslationUnit(const char *) {}
+ void finishTranslationUnit() {}
void parseInput(const char * fileName,
const char *fileBuf,
- Entry *root);
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList &filesInSameTranslationUnit);
bool needsPreprocessing(const QCString &extension);
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
diff --git a/src/pyscanner.l b/src/pyscanner.l
index ef11320..69b7558 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -1679,7 +1679,11 @@ void pyscanFreeScanner()
//----------------------------------------------------------------------------
-void PythonLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
+void PythonLanguageScanner::parseInput(const char *fileName,
+ const char *fileBuf,
+ Entry *root,
+ bool /*sameTranslationUnit*/,
+ QStrList & /*filesInSameTranslationUnit*/)
{
g_thisParser = this;
::parseMain(fileName,fileBuf,root);
diff --git a/src/resize.js b/src/resize.js
index 8365b25..a80dece 100644
--- a/src/resize.js
+++ b/src/resize.js
@@ -38,7 +38,7 @@ function resizeWidth()
{
var windowWidth = $(window).width() + "px";
var sidenavWidth = $(sidenav).outerWidth();
- content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar
+ content.css({marginLeft:parseInt(sidenavWidth)+"px"});
writeCookie('width',sidenavWidth, null);
}
diff --git a/src/resize_js.h b/src/resize_js.h
index e24c0b0..160b16c 100644
--- a/src/resize_js.h
+++ b/src/resize_js.h
@@ -38,7 +38,7 @@
"{\n"
" var windowWidth = $(window).width() + \"px\";\n"
" var sidenavWidth = $(sidenav).outerWidth();\n"
-" content.css({marginLeft:parseInt(sidenavWidth)+6+\"px\"}); //account for 6px-wide handle-bar\n"
+" content.css({marginLeft:parseInt(sidenavWidth)+\"px\"}); \n"
" writeCookie('width',sidenavWidth, null);\n"
"}\n"
"\n"
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 8eb3e98..2d07957 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -311,7 +311,7 @@ void RTFDocVisitor::visit(DocSymbol *s)
case DocSymbol::LeftFloor: m_t << "lfloor "; break;
case DocSymbol::RightFloor: m_t << "rfloor "; break;
default:
- err("error: unknown symbol found\n");
+ err("unknown symbol found\n");
}
m_lastIsPara=FALSE;
}
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index c3b715c..9a7dbee 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -178,7 +178,7 @@ void RTFGenerator::init()
while(def->reference != 0)
{
if (def->definition == 0)
- err("Internal error: rtf_Style_Default[%s] has no definition.\n", def->name);
+ err("Internal: rtf_Style_Default[%s] has no definition.\n", def->name);
StyleData* styleData = new StyleData(def->reference, def->definition);
rtf_Style.insert(def->name, styleData);
def++;
@@ -2009,7 +2009,7 @@ void RTFGenerator::incrementIndentLevel()
m_listLevel++;
if (m_listLevel>rtf_maxIndentLevels-1)
{
- err("error: Maximum indent level (%d) exceeded while generating RTF output!\n",rtf_maxIndentLevels);
+ err("Maximum indent level (%d) exceeded while generating RTF output!\n",rtf_maxIndentLevels);
m_listLevel=rtf_maxIndentLevels-1;
}
}
@@ -2019,7 +2019,7 @@ void RTFGenerator::decrementIndentLevel()
m_listLevel--;
if (m_listLevel<0)
{
- err("error: Negative indent level while generating RTF output!\n");
+ err("Negative indent level while generating RTF output!\n");
m_listLevel=0;
}
}
@@ -2337,7 +2337,7 @@ static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncl
QFile f(infName);
if (!f.open(IO_ReadOnly))
{
- err("error: problems opening rtf file %s for reading\n",infName.data());
+ err("problems opening rtf file %s for reading\n",infName.data());
return FALSE;
}
@@ -2352,7 +2352,7 @@ static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncl
{
if (f.readLine(lineBuf.data(),maxLineLength)==-1)
{
- err("ERROR - read error in %s before end of RTF header!\n",infName.data());
+ err("read error in %s before end of RTF header!\n",infName.data());
return FALSE;
}
if (bIncludeHeader) encodeForOutput(t,lineBuf);
@@ -2535,9 +2535,9 @@ void testRTFOutput(const char *name)
}
if (bcount==0) return; // file is OK.
err:
- err("error: RTF integrity test failed at line %d of %s due to a bracket mismatch.\n",line,name);
- err(" Please try to create a small code example that produces this error \n"
- " and send that to dimitri@stack.nl.\n");
+ err("RTF integrity test failed at line %d of %s due to a bracket mismatch.\n"
+ " Please try to create a small code example that produces this error \n"
+ " and send that to dimitri@stack.nl.\n",line,name);
}
/**
@@ -2550,7 +2550,7 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name)
// store the original directory
if (!d.exists())
{
- err("error: Output dir %s does not exist!\n",path);
+ err("Output dir %s does not exist!\n",path);
return FALSE;
}
QCString oldDir = QDir::currentDirPath().utf8();
diff --git a/src/scanner.h b/src/scanner.h
index 5c226a1..54a3c1c 100644
--- a/src/scanner.h
+++ b/src/scanner.h
@@ -30,9 +30,13 @@ class CLanguageScanner : public ParserInterface
{
public:
virtual ~CLanguageScanner() {}
+ void startTranslationUnit(const char *fileName);
+ void finishTranslationUnit();
void parseInput(const char *fileName,
const char *fileBuf,
- Entry *root);
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList &filesInSameTranslationUnit);
bool needsPreprocessing(const QCString &extension);
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
diff --git a/src/scanner.l b/src/scanner.l
index 452632b..32f00c8 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -79,6 +79,7 @@ static int lastRawStringContext;
static int lastCSConstraint;
static int lastHereDocContext;
static int lastDefineContext;
+static int lastAlignAsContext;
static Protection protection;
static Protection baseProt;
static int sharpCount = 0 ;
@@ -310,6 +311,7 @@ static void lineCount()
g_column++,yyColNr++;
}
}
+ //printf("lineCount()=%d\n",g_column);
}
static inline int computeIndent(const char *s,int startIndent)
@@ -627,6 +629,8 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
/* language parsing states */
+%x AlignAs
+%x AlignAsEnd
%x Define
%x DefineEnd
%x CompoundName
@@ -2031,9 +2035,12 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
// *currentTemplateSpec+=yytext;
}
<EndTemplate>"<" {
- current->name+='<';
- // *currentTemplateSpec+='<';
- sharpCount++;
+ if (roundCount==0)
+ {
+ // *currentTemplateSpec+='<';
+ sharpCount++;
+ }
+ current->name+=yytext;
}
<ClassTemplSpec,EndTemplate>">>" {
if (insideJava || insideCS || insideCli || roundCount==0)
@@ -2051,7 +2058,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
<EndTemplate>">" {
current->name+='>';
// *currentTemplateSpec+='>';
- if (--sharpCount<=0)
+ if (roundCount==0 && --sharpCount<=0)
{
//printf("Found %s\n",current->name.data());
BEGIN(FindMembers);
@@ -2061,7 +2068,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
lineCount();
current->name+='>';
// *currentTemplateSpec+='>';
- if (--sharpCount<=0)
+ if (roundCount==0 && --sharpCount<=0)
{
current->bodyLine = yyLineNr;
current->args = "(";
@@ -2075,13 +2082,16 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
<EndTemplate>">"{BN}*/"("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+ { // function pointer returning a template instance
lineCount();
current->name+='>';
- BEGIN(FindMembers);
+ if (roundCount==0)
+ {
+ BEGIN(FindMembers);
+ }
}
<EndTemplate>">"{BN}*/"::" {
lineCount();
current->name+='>';
// *currentTemplateSpec+='>';
- if (--sharpCount<=0)
+ if (roundCount==0 && --sharpCount<=0)
{
BEGIN(FindMemberName);
}
@@ -2234,6 +2244,11 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
insideTryBlock=FALSE;
BEGIN(TryFunctionBlock);
}
+ else if (insideCpp && qstrcmp(yytext,"alignas")==0)
+ {
+ lastAlignAsContext = YY_START;
+ BEGIN(AlignAs);
+ }
else if (insideJS && qstrcmp(yytext,"var")==0)
{ // javascript variable
current->type="var";
@@ -2565,7 +2580,6 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
addType( current );
}
<FindMembers,MemberSpec,Function,NextSemi,EnumBaseType,BitFields,ReadInitializer,OldStyleArgs>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- lineCount();
if (current->bodyLine==-1)
{
current->bodyLine=yyLineNr;
@@ -2576,8 +2590,10 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
QCString indent;
- indent.fill(' ',computeIndent(yytext+1,g_column));
+ indent.fill(' ',computeIndent(yytext,g_column));
docBlock=indent;
+ //printf("indent=%d\n",computeIndent(yytext+1,g_column));
+ lineCount();
docBlockTerm = ';';
if (YY_START==EnumBaseType && current->section==Entry::ENUM_SEC)
@@ -2598,15 +2614,15 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
}
<MemberSpec,FindFields,FindMembers,NextSemi,EnumBaseType,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- lineCount();
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
QCString indent;
- indent.fill(' ',computeIndent(yytext+1,g_column));
+ indent.fill(' ',computeIndent(yytext,g_column));
docBlock=indent;
+ lineCount();
docBlockTerm = ',';
if (YY_START==EnumBaseType && current->section==Entry::ENUM_SEC)
@@ -2627,7 +2643,6 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
}
<DefineEnd,FindFields,FindFieldArg,ReadInitializer,OldStyleArgs>{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- lineCount();
if (current->bodyLine==-1)
{
current->bodyLine=yyLineNr;
@@ -2639,6 +2654,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
QCString indent;
indent.fill(' ',computeIndent(yytext,g_column));
docBlock=indent;
+ lineCount();
docBlockTerm = 0;
if (yytext[yyleng-3]=='/')
@@ -3130,7 +3146,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
yyLineNr = line.mid(s,e-s).toInt();
if (yytext[yyleng-1]=='\n')
{
- yyLineNr++;
+ lineCount();
g_column=0;
}
}
@@ -3674,7 +3690,9 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
else
{
- if (!isTypedef) // not typedef
+ static QRegExp re("@[0-9]+$");
+ if (!isTypedef && memspecEntry &&
+ memspecEntry->name.find(re)==-1) // not typedef or anonymous type (see bug691071)
{
// enabled the next two lines for bug 623424
current->doc.resize(0);
@@ -4320,7 +4338,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
<CopyArgComment,CopyArgVerbatim>. { fullArgString+=*yytext; }
<CopyArgComment>{CMD}("brief"|"short"){B}+ {
warn(yyFileName,yyLineNr,
- "warning: Ignoring %cbrief command inside argument documentation",*yytext
+ "Ignoring %cbrief command inside argument documentation",*yytext
);
fullArgString+=' ';
}
@@ -5019,7 +5037,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
<SkipInits>; {
warn(yyFileName,yyLineNr,
- "warning: Found ';' while parsing initializer list! "
+ "Found ';' while parsing initializer list! "
"(doxygen could be confused by a macro call without semicolon)"
);
BEGIN( FindMembers );
@@ -5065,7 +5083,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
unput(':');
BEGIN(ClassVar);
}
-<Bases,CompoundName>";" {
+<CompoundName>";" {
current->section = Entry::EMPTY_SEC ;
current->type.resize(0) ;
current->name.resize(0) ;
@@ -5073,6 +5091,37 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
current->argList->clear();
BEGIN( FindMembers ) ;
}
+<Bases>";" {
+ if (insideIDL && (current->spec & (Entry::Singleton |
+ Entry::Service)))
+ {
+ // in UNO IDL a service or singleton may be defined
+ // completely like this: "service Foo : XFoo;"
+ if (!current->name.isEmpty() && !current_root->name.isEmpty())
+ {
+ prependScope();
+ }
+ current->name = current->name.stripWhiteSpace();
+ // there can be only one base class here
+ if (!baseName.isEmpty())
+ {
+ current->extends->append(
+ new BaseInfo(baseName,Public,Normal));
+ baseName.resize(0);
+ }
+ current_root->addSubEntry( current ) ;
+ current = new Entry;
+ }
+ else
+ {
+ current->section = Entry::EMPTY_SEC ;
+ current->type.resize(0) ;
+ current->name.resize(0) ;
+ current->args.resize(0) ;
+ current->argList->clear();
+ }
+ BEGIN( FindMembers ) ;
+ }
<CompoundName>{SCOPENAME}{BN}*/"<" {
sharpCount = 0;
current->name = yytext ;
@@ -5196,12 +5245,33 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
<CompoundName>{SCOPENAME}/{BN}*"(" {
current->name = yytext ;
lineCount();
- if (current->spec & Entry::Protocol)
- {
- current->name += "-p";
- }
- BEGIN( ClassVar );
+ if (insideCpp && current->name=="alignas") // C++11
+ {
+ lastAlignAsContext = YY_START;
+ BEGIN( AlignAs );
+ }
+ else
+ {
+ if (current->spec & Entry::Protocol)
+ {
+ current->name += "-p";
+ }
+ BEGIN( ClassVar );
+ }
}
+<AlignAs>"(" { roundCount=1;
+ BEGIN( AlignAsEnd );
+ }
+<AlignAs>\n { lineCount(); }
+<AlignAs>.
+<AlignAsEnd>"(" { roundCount++; }
+<AlignAsEnd>")" { if (--roundCount<=0)
+ {
+ BEGIN( lastAlignAsContext );
+ }
+ }
+<AlignAsEnd>\n { lineCount(); }
+<AlignAsEnd>.
<CompoundName>{SCOPENAME}/{BN}*"," { // multiple forward declarations on one line
// e.g. @protocol A,B;
current->reset();
@@ -6166,7 +6236,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
<DocCopyBlock><<EOF>> {
warn(yyFileName,yyLineNr,
- "warning: reached end of file while inside a %s block!\n"
+ "reached end of file while inside a %s block!\n"
"The command that should end the block seems to be missing!\n",
docBlockName.data());
yyterminate();
@@ -6546,7 +6616,11 @@ static void parseCompounds(Entry *rt)
//----------------------------------------------------------------------------
-static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
+static void parseMain(const char *fileName,
+ const char *fileBuf,
+ Entry *rt,
+ bool sameTranslationUnit,
+ QStrList & filesInSameTranslationUnit)
{
initParser();
@@ -6568,9 +6642,17 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
yyLineNr= 1 ;
yyFileName = fileName;
setContext();
- if (insideCpp || insideObjC)
+ bool processWithClang = insideCpp || insideObjC;
+ if (processWithClang)
{
- ClangParser::instance()->start(fileName);
+ if (!sameTranslationUnit) // new file
+ {
+ ClangParser::instance()->start(fileName,filesInSameTranslationUnit);
+ }
+ else
+ {
+ ClangParser::instance()->switchToFile(fileName);
+ }
}
rt->lang = language;
msg("Parsing file %s...\n",yyFileName.data());
@@ -6605,7 +6687,7 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
if (YY_START==Comment)
{
- warn(yyFileName,yyLineNr,"warning: File ended in the middle of a comment block! Perhaps a missing \\endcode?");
+ warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
}
//forceEndGroup();
@@ -6630,10 +6712,6 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
anonNSCount++;
- if (insideCpp || insideObjC)
- {
- ClangParser::instance()->finish();
- }
}
}
@@ -6647,6 +6725,10 @@ static void parsePrototype(const QCString &text)
warn(yyFileName,yyLineNr,"Empty prototype found!");
return;
}
+ if (!current) // nothing to store (see bug683516)
+ {
+ return;
+ }
const char *orgInputString;
int orgInputPosition;
@@ -6705,10 +6787,28 @@ void scanFreeScanner()
//----------------------------------------------------------------------------
-void CLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
+void CLanguageScanner::startTranslationUnit(const char *)
+{
+}
+
+void CLanguageScanner::finishTranslationUnit()
+{
+ bool processWithClang = insideCpp || insideObjC;
+ if (processWithClang)
+ {
+ ClangParser::instance()->finish();
+ }
+}
+
+void CLanguageScanner::parseInput(const char *fileName,
+ const char *fileBuf,
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList & filesInSameTranslationUnit)
{
g_thisParser = this;
- ::parseMain(fileName,fileBuf,root);
+ ::parseMain(fileName,fileBuf,root,
+ sameTranslationUnit,filesInSameTranslationUnit);
}
void CLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index 681fe96..0380b33 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -92,7 +92,9 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
//printf("SearchIndex::setCurrentDoc(%s,%s,%s)\n",name,baseName,anchor);
QCString url=isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
url+=Config_getString("HTML_FILE_EXTENSION");
+ QCString baseUrl = url;
if (anchor) url+=QCString("#")+anchor;
+ if (!isSourceFile) baseUrl=url;
QCString name=ctx->qualifiedName();
if (ctx->definitionType()==Definition::TypeMember)
{
@@ -164,11 +166,11 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
}
}
- int *pIndex = m_url2IdMap.find(url);
+ int *pIndex = m_url2IdMap.find(baseUrl);
if (pIndex==0)
{
++m_urlIndex;
- m_url2IdMap.insert(url,new int(m_urlIndex));
+ m_url2IdMap.insert(baseUrl,new int(m_urlIndex));
m_urls.insert(m_urlIndex,new URL(name,url));
}
else
@@ -422,11 +424,7 @@ struct SearchDocEntry
struct SearchIndexExternal::Private
{
- Private() : docEntries(257) {}
- //QFile f;
- //bool openOk;
- //FTextStream t;
- //bool insideDoc;
+ Private() : docEntries(12251) {}
SDict<SearchDocEntry> docEntries;
SearchDocEntry *current;
};
@@ -436,29 +434,11 @@ SearchIndexExternal::SearchIndexExternal() : SearchIndexIntf(External)
p = new SearchIndexExternal::Private;
p->docEntries.setAutoDelete(TRUE);
p->current=0;
- //p->f.setName(fileName);
- //p->openOk = p->f.open(IO_WriteOnly);
- //if (p->openOk)
- //{
- // p->t.setDevice(&p->f);
- // p->t << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
- // p->t << "<add>" << endl;
- // p->insideDoc=FALSE;
- //}
}
SearchIndexExternal::~SearchIndexExternal()
{
- //if (p->openOk)
- //{
- // if (p->insideDoc)
- // {
- // p->t << " </doc>" << endl;
- // }
- // p->t << "</add>" << endl;
- // p->f.close();
- // p->openOk=FALSE;
- //}
+ //printf("p->docEntries.count()=%d\n",p->docEntries.count());
delete p;
}
@@ -526,6 +506,7 @@ void SearchIndexExternal::setCurrentDoc(Definition *ctx,const char *anchor,bool
QCString key = extId+";"+url;
p->current = p->docEntries.find(key);
+ //printf("setCurrentDoc(url=%s,isSourceFile=%d) current=%p\n",url.data(),isSourceFile,p->current);
if (!p->current)
{
SearchDocEntry *e = new SearchDocEntry;
diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp
index c50ea75..931341d 100644
--- a/src/sqlite3gen.cpp
+++ b/src/sqlite3gen.cpp
@@ -1355,7 +1355,7 @@ void generateSqlite3()
#else // USE_SQLITE3
void generateSqlite3()
{
- err("Error: sqlite3 support has not been compiled in!");
+ err("sqlite3 support has not been compiled in!");
}
#endif
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 8739c99..8b59c05 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -72,6 +72,7 @@ class TagMemberInfo
QCString anchor;
QCString arglist;
QCString kind;
+ QCString clangId;
TagAnchorInfoList docAnchors;
Protection prot;
Specifier virt;
@@ -87,6 +88,7 @@ class TagClassInfo
~TagClassInfo() { delete bases; delete templateArguments; }
QCString name;
QCString filename;
+ QCString clangId;
TagAnchorInfoList docAnchors;
QList<BaseInfo> *bases;
QList<TagMemberInfo> members;
@@ -103,6 +105,7 @@ class TagNamespaceInfo
TagNamespaceInfo() { members.setAutoDelete(TRUE); }
QCString name;
QCString filename;
+ QCString clangId;
QStringList classList;
QStringList namespaceList;
TagAnchorInfoList docAnchors;
@@ -335,7 +338,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unknown compound attribute `%s' found!\n",kind.data());
+ warn("Unknown compound attribute `%s' found!\n",kind.data());
m_state = Invalid;
}
if (isObjC=="yes" && m_curClass)
@@ -363,7 +366,7 @@ class TagFileParser : public QXmlDefaultHandler
case InPackage: m_tagFilePackages.append(m_curPackage);
m_curPackage=0; break;
default:
- warn("warning: tag `compound' was not expected!\n");
+ warn("tag `compound' was not expected!\n");
}
}
@@ -409,7 +412,7 @@ class TagFileParser : public QXmlDefaultHandler
case InNamespace: m_curNamespace->members.append(m_curMember); break;
case InGroup: m_curGroup->members.append(m_curMember); break;
case InPackage: m_curPackage->members.append(m_curMember); break;
- default: warn("warning: Unexpected tag `member' found\n"); break;
+ default: warn("Unexpected tag `member' found\n"); break;
}
}
@@ -425,7 +428,7 @@ class TagFileParser : public QXmlDefaultHandler
case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- default: warn("warning: Unexpected tag `member' found\n"); break;
+ default: warn("Unexpected tag `member' found\n"); break;
}
}
@@ -438,7 +441,7 @@ class TagFileParser : public QXmlDefaultHandler
case InNamespace: m_curNamespace->classList.append(m_curString); break;
case InGroup: m_curGroup->classList.append(m_curString); break;
case InPackage: m_curPackage->classList.append(m_curString); break;
- default: warn("warning: Unexpected tag `class' found\n"); break;
+ default: warn("Unexpected tag `class' found\n"); break;
}
}
@@ -449,7 +452,7 @@ class TagFileParser : public QXmlDefaultHandler
case InNamespace: m_curNamespace->classList.append(m_curString); break;
case InFile: m_curFile->namespaceList.append(m_curString); break;
case InGroup: m_curGroup->namespaceList.append(m_curString); break;
- default: warn("warning: Unexpected tag `namespace' found\n"); break;
+ default: warn("Unexpected tag `namespace' found\n"); break;
}
}
@@ -459,7 +462,7 @@ class TagFileParser : public QXmlDefaultHandler
{
case InGroup: m_curGroup->fileList.append(m_curString); break;
case InDir: m_curDir->fileList.append(m_curString); break;
- default: warn("warning: Unexpected tag `file' found\n"); break;
+ default: warn("Unexpected tag `file' found\n"); break;
}
}
@@ -468,7 +471,7 @@ class TagFileParser : public QXmlDefaultHandler
switch(m_state)
{
case InGroup: m_curGroup->fileList.append(m_curString); break;
- default: warn("warning: Unexpected tag `page' found\n"); break;
+ default: warn("Unexpected tag `page' found\n"); break;
}
}
@@ -477,7 +480,7 @@ class TagFileParser : public QXmlDefaultHandler
switch(m_state)
{
case InDir: m_curDir->subdirList.append(m_curString); break;
- default: warn("warning: Unexpected tag `page' found\n"); break;
+ default: warn("Unexpected tag `page' found\n"); break;
}
}
@@ -501,7 +504,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unexpected tag `type' found\n");
+ warn("Unexpected tag `type' found\n");
}
}
@@ -517,7 +520,7 @@ class TagFileParser : public QXmlDefaultHandler
case InDir: m_curDir->name = m_curString; break;
case InMember: m_curMember->name = m_curString; break;
case InPackage: m_curPackage->name = m_curString; break;
- default: warn("warning: Unexpected tag `name' found\n"); break;
+ default: warn("Unexpected tag `name' found\n"); break;
}
}
@@ -551,7 +554,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unexpected tag `base' found\n");
+ warn("Unexpected tag `base' found\n");
}
}
@@ -563,7 +566,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unexpected tag `base' found\n");
+ warn("Unexpected tag `base' found\n");
}
}
@@ -580,7 +583,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unexpected tag `includes' found\n");
+ warn("Unexpected tag `includes' found\n");
}
m_curString="";
}
@@ -603,7 +606,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unexpected tag `templarg' found\n");
+ warn("Unexpected tag `templarg' found\n");
}
}
@@ -618,7 +621,7 @@ class TagFileParser : public QXmlDefaultHandler
case InPage: m_curPage->filename = m_curString; break;
case InPackage: m_curPackage->filename = m_curString; break;
case InDir: m_curDir->filename = m_curString; break;
- default: warn("warning: Unexpected tag `filename' found\n"); break;
+ default: warn("Unexpected tag `filename' found\n"); break;
}
}
@@ -628,7 +631,7 @@ class TagFileParser : public QXmlDefaultHandler
{
case InFile: m_curFile->path = m_curString; break;
case InDir: m_curDir->path = m_curString; break;
- default: warn("warning: Unexpected tag `path' found\n"); break;
+ default: warn("Unexpected tag `path' found\n"); break;
}
}
@@ -640,9 +643,31 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
+ warn("Unexpected tag `anchor' found\n");
+ }
+ }
+
+ void endClangId()
+ {
+ if (m_state==InMember)
+ {
+ m_curMember->clangId = m_curString;
+ }
+ else if (m_state==InClass)
+ {
+ m_curClass->clangId = m_curString;
+ }
+ else if (m_state==InNamespace)
+ {
+ m_curNamespace->clangId = m_curString;
+ }
+ else
+ {
warn("warning: Unexpected tag `anchor' found\n");
}
}
+
+
void endAnchorFile()
{
@@ -652,7 +677,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unexpected tag `anchorfile' found\n");
+ warn("Unexpected tag `anchorfile' found\n");
}
}
@@ -664,7 +689,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unexpected tag `arglist' found\n");
+ warn("Unexpected tag `arglist' found\n");
}
}
void endTitle()
@@ -673,7 +698,7 @@ class TagFileParser : public QXmlDefaultHandler
{
case InGroup: m_curGroup->title = m_curString; break;
case InPage: m_curPage->title = m_curString; break;
- default: warn("warning: Unexpected tag `title' found\n"); break;
+ default: warn("Unexpected tag `title' found\n"); break;
}
}
@@ -685,7 +710,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unexpected tag `subgroup' found\n");
+ warn("Unexpected tag `subgroup' found\n");
}
}
@@ -727,6 +752,7 @@ class TagFileParser : public QXmlDefaultHandler
m_startElementHandlers.insert("path", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("anchorfile", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("anchor", new StartElementHandler(this,&TagFileParser::startStringValue));
+ m_startElementHandlers.insert("clangid", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("arglist", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("title", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("subgroup", new StartElementHandler(this,&TagFileParser::startStringValue));
@@ -749,6 +775,7 @@ class TagFileParser : public QXmlDefaultHandler
m_endElementHandlers.insert("path", new EndElementHandler(this,&TagFileParser::endPath));
m_endElementHandlers.insert("anchorfile", new EndElementHandler(this,&TagFileParser::endAnchorFile));
m_endElementHandlers.insert("anchor", new EndElementHandler(this,&TagFileParser::endAnchor));
+ m_endElementHandlers.insert("clangid", new EndElementHandler(this,&TagFileParser::endClangId));
m_endElementHandlers.insert("arglist", new EndElementHandler(this,&TagFileParser::endArglist));
m_endElementHandlers.insert("title", new EndElementHandler(this,&TagFileParser::endTitle));
m_endElementHandlers.insert("subgroup", new EndElementHandler(this,&TagFileParser::endSubgroup));
@@ -776,7 +803,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unknown tag `%s' found!\n",name.data());
+ warn("Unknown tag `%s' found!\n",name.data());
}
return TRUE;
}
@@ -791,7 +818,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
- warn("warning: Unknown tag `%s' found!\n",name.data());
+ warn("Unknown tag `%s' found!\n",name.data());
}
return TRUE;
}
@@ -1079,6 +1106,7 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
me->virt = tmi->virt;
me->stat = tmi->isStatic;
me->fileName = ce->fileName;
+ me->id = tmi->clangId;
if (ce->section == Entry::GROUPDOC_SEC)
{
me->groups->append(new Grouping(ce->name,Grouping::GROUPING_INGROUP));
@@ -1204,8 +1232,9 @@ void TagFileParser::buildLists(Entry *root)
TagInfo *ti = new TagInfo;
ti->tagName = m_tagName;
ti->fileName = tci->filename;
- ce->tagInfo = ti;
- ce->lang = tci->isObjC ? SrcLangExt_ObjC : SrcLangExt_Unknown;
+ ce->id = tci->clangId;
+ ce->tagInfo = ti;
+ ce->lang = tci->isObjC ? SrcLangExt_ObjC : SrcLangExt_Unknown;
// transfer base class list
if (tci->bases)
{
@@ -1286,6 +1315,7 @@ void TagFileParser::buildLists(Entry *root)
TagInfo *ti = new TagInfo;
ti->tagName = m_tagName;
ti->fileName = tni->filename;
+ ne->id = tni->clangId;
ne->tagInfo = ti;
buildMemberList(ne,tni->members);
diff --git a/src/tclscanner.h b/src/tclscanner.h
index f06f3de..a7c0dde 100644
--- a/src/tclscanner.h
+++ b/src/tclscanner.h
@@ -29,9 +29,13 @@ class TclLanguageScanner : public ParserInterface
{
public:
virtual ~TclLanguageScanner() {}
+ void startTranslationUnit(const char *) {}
+ void finishTranslationUnit() {}
void parseInput(const char *fileName,
const char *fileBuf,
- Entry *root);
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList &filesInSameTranslationUnit);
bool needsPreprocessing(const QCString &extension);
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
diff --git a/src/tclscanner.l b/src/tclscanner.l
index b91d7c4..73b2b58 100644
--- a/src/tclscanner.l
+++ b/src/tclscanner.l
@@ -1651,7 +1651,7 @@ static void tcl_codify_link(QCString name)
if (tcl.memberdef)
{
myDef->addSourceReferencedBy(tcl.memberdef);
- tcl.memberdef->addSourceReferences(myDef,NULL);
+ tcl.memberdef->addSourceReferences(myDef);
}
}
else if (tcl_keyword(myName)) // check keyword
@@ -1899,7 +1899,7 @@ D
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl_protection(tcl.entry_current);
tcl_command_ARGLIST(*tcl.list_commandwords.at(2));
- myEntryCl->addSubEntry(tcl.entry_current);
+ if (myEntryCl) myEntryCl->addSubEntry(tcl.entry_current);
myEntry = tcl.entry_current;
tcl.fn.insert(myName,myEntry);
myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(4),
@@ -2527,7 +2527,11 @@ static void tcl_parse(const QCString ns, const QCString cls)
}
//! Parse text file and build up entry tree.
-void TclLanguageScanner::parseInput(const char *fileName,const char *input,Entry *root)
+void TclLanguageScanner::parseInput(const char *fileName,
+ const char *input,
+ Entry *root,
+ bool /*sameTranslationUnit*/,
+ QStrList & /*filesInSameTranslationUnit*/)
{
QFile myFile;
tcl_inf("%s\n",fileName);
diff --git a/src/textdocvisitor.cpp b/src/textdocvisitor.cpp
index bc45de2..9275846 100644
--- a/src/textdocvisitor.cpp
+++ b/src/textdocvisitor.cpp
@@ -127,7 +127,7 @@ void TextDocVisitor::visit(DocSymbol *s)
case DocSymbol::LeftFloor: m_t << "&lfloor;"; break;
case DocSymbol::RightFloor: m_t << "&rfloor;"; break;
default:
- err("error: unknown symbol found\n");
+ err("unknown symbol found\n");
}
}
diff --git a/src/translator_adapter.h b/src/translator_adapter.h
index 4a4db9d..ad89b4b 100644
--- a/src/translator_adapter.h
+++ b/src/translator_adapter.h
@@ -22,7 +22,7 @@ class TranslatorAdapterBase : public Translator
inline QCString createUpdateNeededMessage(const QCString & languageName,
const QCString & versionString)
{
- return QCString("Warning: The selected output language \"")
+ return QCString("The selected output language \"")
+ languageName
+ "\" has not been updated\nsince "
+ versionString
diff --git a/src/translator_ar.h b/src/translator_ar.h
index 8b6b2e0..156a471 100644
--- a/src/translator_ar.h
+++ b/src/translator_ar.h
@@ -78,82 +78,82 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions()
- { return "دوال ذات صلة"; }
+ { return "ط¯ظˆط§ظ„ ط°ط§طھ طµظ„ط©"; }
/*! subscript for the related functions. */
virtual QCString trRelatedSubscript()
- { return "(لاحظ أن هذه الدوال ليست أعضاء)"; }
+ { return "(ظ„ط§ط­ط¸ ط£ظ† ظ‡ط°ظ‡ ط§ظ„ط¯ظˆط§ظ„ ظ„ظٹط³طھ ط£ط¹ط¶ط§ط،)"; }
/*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription()
- { return "وصف تفصيلي"; }
+ { return "ظˆطµظپ طھظپطµظٹظ„ظٹ"; }
/*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation()
- { return "توثيق تعريفات النوع الأعضاء"; }
+ { return "طھظˆط«ظٹظ‚ طھط¹ط±ظٹظپط§طھ ط§ظ„ظ†ظˆط¹ ط§ظ„ط£ط¹ط¶ط§ط،"; }
/*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation()
- { return "توثيق العدديات الأعضاء"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„ط¹ط¯ط¯ظٹط§طھ ط§ظ„ط£ط¹ط¶ط§ط،"; }
/*! header that is put before the list of member functions. */
virtual QCString trMemberFunctionDocumentation()
- { return "توثيق الدوال الأعضاء"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„ط¯ظˆط§ظ„ ط§ظ„ط£ط¹ط¶ط§ط،"; }
/*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "توثيق الحقل";
+ return "طھظˆط«ظٹظ‚ ط§ظ„ط­ظ‚ظ„";
}
else
{
- return "توثيق البيان العضو";
+ return "طھظˆط«ظٹظ‚ ط§ظ„ط¨ظٹط§ظ† ط§ظ„ط¹ط¶ظˆ";
}
}
/*! this is the text of a link put after brief descriptions. */
virtual QCString trMore()
- { return "المزيد ..."; }
+ { return "ط§ظ„ظ…ط²ظٹط¯ ..."; }
/*! put in the class documentation */
virtual QCString trListOfAllMembers()
- { return "اعرض كل الأعضاء"; }
+ { return "ط§ط¹ط±ط¶ ظƒظ„ ط§ظ„ط£ط¹ط¶ط§ط،"; }
/*! used as the title of the "list of all members" page of a class */
virtual QCString trMemberList()
- { return "قائمة الأعضاء"; }
+ { return "ظ‚ط§ط¦ظ…ط© ط§ظ„ط£ط¹ط¶ط§ط،"; }
/*! this is the first part of a sentence that is followed by a class name */
virtual QCString trThisIsTheListOfAllMembers()
- { return "هذه فائمة بكل الأعضاء في "; }
+ { return "ظ‡ط°ظ‡ ظپط§ط¦ظ…ط© ط¨ظƒظ„ ط§ظ„ط£ط¹ط¶ط§ط، ظپظٹ "; }
/*! this is the remainder of the sentence after the class name */
virtual QCString trIncludingInheritedMembers()
- { return ", متضمنة كل الأعضاء الموروثة"; }
+ { return ", ظ…طھط¶ظ…ظ†ط© ظƒظ„ ط§ظ„ط£ط¹ط¶ط§ط، ط§ظ„ظ…ظˆط±ظˆط«ط©"; }
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
*/
virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="تم تكوينها آليا بواسطة Doxygen";
- if (s) result+=(QCString)" لـ "+s;
- result+=" من ملفات المصدر.";
+ { QCString result="طھظ… طھظƒظˆظٹظ†ظ‡ط§ ط¢ظ„ظٹط§ ط¨ظˆط§ط³ط·ط© Doxygen";
+ if (s) result+=(QCString)" ظ„ظ€ "+s;
+ result+=" ظ…ظ† ظ…ظ„ظپط§طھ ط§ظ„ظ…طµط¯ط±.";
return result;
}
/*! put after an enum name in the list of all members */
virtual QCString trEnumName()
- { return "الإسم العددي"; }
+ { return "ط§ظ„ط¥ط³ظ… ط§ظ„ط¹ط¯ط¯ظٹ"; }
/*! put after an enum value in the list of all members */
virtual QCString trEnumValue()
- { return "القيمة العددية"; }
+ { return "ط§ظ„ظ‚ظٹظ…ط© ط§ظ„ط¹ط¯ط¯ظٹط©"; }
/*! put after an undocumented member in the list of all members */
virtual QCString trDefinedIn()
- { return "معرف في"; }
+ { return "ظ…ط¹ط±ظپ ظپظٹ"; }
// quick reference sections
@@ -161,43 +161,43 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* compounds or files (see the \\group command).
*/
virtual QCString trModules()
- { return "مكونات"; }
+ { return "ظ…ظƒظˆظ†ط§طھ"; }
/*! This is put above each page as a link to the class hierarchy */
virtual QCString trClassHierarchy()
- { return "الشكل الهرمي للفئة"; }
+ { return "ط§ظ„ط´ظƒظ„ ط§ظ„ظ‡ط±ظ…ظٹ ظ„ظ„ظپط¦ط©"; }
/*! This is put above each page as a link to the list of annotated classes */
virtual QCString trCompoundList()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "هياكل البيانات";
+ return "ظ‡ظٹط§ظƒظ„ ط§ظ„ط¨ظٹط§ظ†ط§طھ";
}
else
{
- return "قائمة الفئات";
+ return "ظ‚ط§ط¦ظ…ط© ط§ظ„ظپط¦ط§طھ";
}
}
/*! This is put above each page as a link to the list of documented files */
virtual QCString trFileList()
- { return "قائمة الملفات"; }
+ { return "ظ‚ط§ط¦ظ…ط© ط§ظ„ظ…ظ„ظپط§طھ"; }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
- { return "الملفات الرأسية"; }
+ { return "ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ط±ط£ط³ظٹط©"; }
/*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "حقول البيانات";
+ return "ط­ظ‚ظˆظ„ ط§ظ„ط¨ظٹط§ظ†ط§طھ";
}
else
{
- return "أعضاء الفئة";
+ return "ط£ط¹ط¶ط§ط، ط§ظ„ظپط¦ط©";
}
}
@@ -206,38 +206,38 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "العوام";
+ return "ط§ظ„ط¹ظˆط§ظ…";
}
else
{
- return "أعضاء الملف";
+ return "ط£ط¹ط¶ط§ط، ط§ظ„ظ…ظ„ظپ";
}
}
/*! This is put above each page as a link to all related pages. */
virtual QCString trRelatedPages()
- { return "صفحات ذات صلة"; }
+ { return "طµظپط­ط§طھ ط°ط§طھ طµظ„ط©"; }
/*! This is put above each page as a link to all examples. */
virtual QCString trExamples()
- { return "أمثلة"; }
+ { return "ط£ظ…ط«ظ„ط©"; }
/*! This is put above each page as a link to the search engine. */
virtual QCString trSearch()
- { return "بحث"; }
+ { return "ط¨ط­ط«"; }
/*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription()
- { return "قائمة التوارث هذه تم ترتيبها أبجديا بصورة تقريبية ، "
- "ولكن ليس بصورة تامة:";
+ { return "ظ‚ط§ط¦ظ…ط© ط§ظ„طھظˆط§ط±ط« ظ‡ط°ظ‡ طھظ… طھط±طھظٹط¨ظ‡ط§ ط£ط¨ط¬ط¯ظٹط§ ط¨طµظˆط±ط© طھظ‚ط±ظٹط¨ظٹط© طŒ "
+ "ظˆظ„ظƒظ† ظ„ظٹط³ ط¨طµظˆط±ط© طھط§ظ…ط©:";
}
/*! This is an introduction to the list with all files. */
virtual QCString trFileListDescription(bool extractAll)
{
- QCString result="هذه قائمة بكل الملفات";
- if (!extractAll) result+="الموثقة ";
- result+="مع وصف مختصر :";
+ QCString result="ظ‡ط°ظ‡ ظ‚ط§ط¦ظ…ط© ط¨ظƒظ„ ط§ظ„ظ…ظ„ظپط§طھ";
+ if (!extractAll) result+="ط§ظ„ظ…ظˆط«ظ‚ط© ";
+ result+="ظ…ط¹ ظˆطµظپ ظ…ط®طھطµط± :";
return result;
}
@@ -247,53 +247,53 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "هذه هي هياكل البيانات مع وصف مختصر:";
+ return "ظ‡ط°ظ‡ ظ‡ظٹ ظ‡ظٹط§ظƒظ„ ط§ظ„ط¨ظٹط§ظ†ط§طھ ظ…ط¹ ظˆطµظپ ظ…ط®طھطµط±:";
}
else
{
- return "هذه هي الفئات ، البناءات ،"
- "الإتحادات والواجهات مع وصف مختصر:";
+ return "ظ‡ط°ظ‡ ظ‡ظٹ ط§ظ„ظپط¦ط§طھ طŒ ط§ظ„ط¨ظ†ط§ط،ط§طھ طŒ"
+ "ط§ظ„ط¥طھط­ط§ط¯ط§طھ ظˆط§ظ„ظˆط§ط¬ظ‡ط§طھ ظ…ط¹ ظˆطµظپ ظ…ط®طھطµط±:";
}
}
/*! This is an introduction to the page with all class members. */
virtual QCString trCompoundMembersDescription(bool extractAll)
{
- QCString result="هذه قائمة بكل ";
+ QCString result="ظ‡ط°ظ‡ ظ‚ط§ط¦ظ…ط© ط¨ظƒظ„ ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- result+="حقول البناءات والإتحادات";
+ result+="ط­ظ‚ظˆظ„ ط§ظ„ط¨ظ†ط§ط،ط§طھ ظˆط§ظ„ط¥طھط­ط§ط¯ط§طھ";
}
else
{
- result+="أعضاء الفئة";
+ result+="ط£ط¹ط¶ط§ط، ط§ظ„ظپط¦ط©";
}
if (!extractAll)
{
- result+=" الموثقة ";
+ result+=" ط§ظ„ظ…ظˆط«ظ‚ط© ";
}
- result+=" مع وصلات إلى ";
+ result+=" ظ…ط¹ ظˆطµظ„ط§طھ ط¥ظ„ظ‰ ";
if (!extractAll)
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- result+="توثيق البناء/الإتحاد لكل حقل:";
+ result+="طھظˆط«ظٹظ‚ ط§ظ„ط¨ظ†ط§ط،/ط§ظ„ط¥طھط­ط§ط¯ ظ„ظƒظ„ ط­ظ‚ظ„:";
}
else
{
- result+="توثيق الفئة لكل عضو:";
+ result+="طھظˆط«ظٹظ‚ ط§ظ„ظپط¦ط© ظ„ظƒظ„ ط¹ط¶ظˆ:";
}
}
else
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- result+="البناءات/الإتحادات التي ينتمون إليها:";
+ result+="ط§ظ„ط¨ظ†ط§ط،ط§طھ/ط§ظ„ط¥طھط­ط§ط¯ط§طھ ط§ظ„طھظٹ ظٹظ†طھظ…ظˆظ† ط¥ظ„ظٹظ‡ط§:";
}
else
{
- result+="الفئات التي ينتمون إليها:";
+ result+="ط§ظ„ظپط¦ط§طھ ط§ظ„طھظٹ ظٹظ†طھظ…ظˆظ† ط¥ظ„ظٹظ‡ط§:";
}
}
return result;
@@ -327,40 +327,40 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription()
- { return "هذه قائمة بكل الأمثلة:"; }
+ { return "ظ‡ط°ظ‡ ظ‚ط§ط¦ظ…ط© ط¨ظƒظ„ ط§ظ„ط£ظ…ط«ظ„ط©:"; }
/*! This is an introduction to the page with the list of related pages */
virtual QCString trRelatedPagesDescription()
- { return "هذه قائمة بكل صفحات التوثيق ذات الصلة:"; }
+ { return "ظ‡ط°ظ‡ ظ‚ط§ط¦ظ…ط© ط¨ظƒظ„ طµظپط­ط§طھ ط§ظ„طھظˆط«ظٹظ‚ ط°ط§طھ ط§ظ„طµظ„ط©:"; }
/*! This is an introduction to the page with the list of class/file groups */
virtual QCString trModulesDescription()
- { return "هذه قائمة بكل المكونات:"; }
+ { return "ظ‡ط°ظ‡ ظ‚ط§ط¦ظ…ط© ط¨ظƒظ„ ط§ظ„ظ…ظƒظˆظ†ط§طھ:"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
virtual QCString trNoDescriptionAvailable()
- { return "لا يوجد وصف متاح"; }
+ { return "ظ„ط§ ظٹظˆط¬ط¯ ظˆطµظپ ظ…طھط§ط­"; }
// index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
virtual QCString trDocumentation()
- { return "التوثيق"; }
+ { return "ط§ظ„طھظˆط«ظٹظ‚"; }
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
virtual QCString trModuleIndex()
- { return "فهرس المكونات"; }
+ { return "ظپظ‡ط±ط³ ط§ظ„ظ…ظƒظˆظ†ط§طھ"; }
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
virtual QCString trHierarchicalIndex()
- { return "الفهرس الهرمي"; }
+ { return "ط§ظ„ظپظ‡ط±ط³ ط§ظ„ظ‡ط±ظ…ظٹ"; }
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
@@ -369,11 +369,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "فهرس هيكل البيانات";
+ return "ظپظ‡ط±ط³ ظ‡ظٹظƒظ„ ط§ظ„ط¨ظٹط§ظ†ط§طھ";
}
else
{
- return "فهرس الفئة";
+ return "ظپظ‡ط±ط³ ط§ظ„ظپط¦ط©";
}
}
@@ -381,13 +381,13 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* list of all files.
*/
virtual QCString trFileIndex()
- { return "فهرس الملفات"; }
+ { return "ظپظ‡ط±ط³ ط§ظ„ظ…ظ„ظپط§طھ"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
virtual QCString trModuleDocumentation()
- { return "توثيق المكون"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„ظ…ظƒظˆظ†"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions.
@@ -396,11 +396,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "فهرس هيكل البيانات";
+ return "ظپظ‡ط±ط³ ظ‡ظٹظƒظ„ ط§ظ„ط¨ظٹط§ظ†ط§طھ";
}
else
{
- return "فهرس الفئة";
+ return "ظپظ‡ط±ط³ ط§ظ„ظپط¦ط©";
}
}
@@ -408,29 +408,29 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* the documentation of all files.
*/
virtual QCString trFileDocumentation()
- { return "توثيق الملفات"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„ظ…ظ„ظپط§طھ"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
virtual QCString trExampleDocumentation()
- { return "توثيق الأمثلة"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„ط£ظ…ط«ظ„ط©"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
virtual QCString trPageDocumentation()
- { return "توثيق الصفحات"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„طµظپط­ط§طھ"; }
/*! This is used in LaTeX as the title of the document */
virtual QCString trReferenceManual()
- { return "الكتيب المرجعي"; }
+ { return "ط§ظ„ظƒطھظٹط¨ ط§ظ„ظ…ط±ط¬ط¹ظٹ"; }
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
virtual QCString trDefines()
- { return "التعريفات"; }
+ { return "ط§ظ„طھط¹ط±ظٹظپط§طھ"; }
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
@@ -448,19 +448,19 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* list of enumerations
*/
virtual QCString trEnumerations()
- { return "العدديات"; }
+ { return "ط§ظ„ط¹ط¯ط¯ظٹط§طھ"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) functions
*/
virtual QCString trFunctions()
- { return "الدوال"; }
+ { return "ط§ظ„ط¯ظˆط§ظ„"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
virtual QCString trVariables()
- { return "المتغيرات"; }
+ { return "ط§ظ„ظ…طھط؛ظٹط±ط§طھ"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
@@ -502,13 +502,13 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* of documentation blocks for functions
*/
virtual QCString trFunctionDocumentation()
- { return "توثيق الدالة"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„ط¯ط§ظ„ط©"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
virtual QCString trVariableDocumentation()
- { return "توثيق المتغير"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„ظ…طھط؛ظٹط±"; }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
@@ -517,11 +517,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "هياكل البيانات";
+ return "ظ‡ظٹط§ظƒظ„ ط§ظ„ط¨ظٹط§ظ†ط§طھ";
}
else
{
- return "الفئات";
+ return "ط§ظ„ظپط¦ط§طھ";
}
}
@@ -539,7 +539,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trWrittenBy()
{
- return "كتب بواسطة";
+ return "ظƒطھط¨ ط¨ظˆط§ط³ط·ط©";
}
/*! this text is put before a class diagram */
@@ -550,7 +550,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! this text is generated when the \\internal command is used. */
virtual QCString trForInternalUseOnly()
- { return "للاستخدام الداخلي فقط."; }
+ { return "ظ„ظ„ط§ط³طھط®ط¯ط§ظ… ط§ظ„ط¯ط§ط®ظ„ظٹ ظپظ‚ط·."; }
/*! this text is generated when the \\reimp command is used. */
virtual QCString trReimplementedForInternalReasons()
@@ -558,7 +558,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! this text is generated when the \\warning command is used. */
virtual QCString trWarning()
- { return "تنبيه"; }
+ { return "طھظ†ط¨ظٹظ‡"; }
/*! this text is generated when the \\bug command is used. */
virtual QCString trBugsAndLimitations()
@@ -566,11 +566,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! this text is generated when the \\version command is used. */
virtual QCString trVersion()
- { return "إصدارة"; }
+ { return "ط¥طµط¯ط§ط±ط©"; }
/*! this text is generated when the \\date command is used. */
virtual QCString trDate()
- { return "تاريخ"; }
+ { return "طھط§ط±ظٹط®"; }
/*! this text is generated when the \\return command is used. */
virtual QCString trReturns()
@@ -578,7 +578,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! this text is generated when the \\sa command is used. */
virtual QCString trSeeAlso()
- { return "انظر أيضا"; }
+ { return "ط§ظ†ط¸ط± ط£ظٹط¶ط§"; }
/*! this text is generated when the \\param command is used. */
virtual QCString trParameters()
@@ -586,11 +586,11 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! this text is generated when the \\exception command is used. */
virtual QCString trExceptions()
- { return "استثناءات"; }
+ { return "ط§ط³طھط«ظ†ط§ط،ط§طھ"; }
/*! this text is used in the title page of a LaTeX document. */
virtual QCString trGeneratedBy()
- { return "انتجت بواسطة"; }
+ { return "ط§ظ†طھط¬طھ ط¨ظˆط§ط³ط·ط©"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990307
@@ -598,7 +598,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! used as the title of page containing all the index of all namespaces. */
virtual QCString trNamespaceList()
- { return "قائمة مجالات الأسماء"; }
+ { return "ظ‚ط§ط¦ظ…ط© ظ…ط¬ط§ظ„ط§طھ ط§ظ„ط£ط³ظ…ط§ط،"; }
/*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll)
@@ -765,13 +765,13 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* index of all namespaces.
*/
virtual QCString trNamespaceIndex()
- { return "فهرس مجالات الأسماء"; }
+ { return "ظپظ‡ط±ط³ ظ…ط¬ط§ظ„ط§طھ ط§ظ„ط£ط³ظ…ط§ط،"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
virtual QCString trNamespaceDocumentation()
- { return "توثيق مجالات الأسماء"; }
+ { return "طھظˆط«ظٹظ‚ ظ…ط¬ط§ظ„ط§طھ ط§ظ„ط£ط³ظ…ط§ط،"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
@@ -781,7 +781,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* namespaces in a file.
*/
virtual QCString trNamespaces()
- { return "مجالات الأسماء"; }
+ { return "ظ…ط¬ط§ظ„ط§طھ ط§ظ„ط£ط³ظ…ط§ط،"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
@@ -794,20 +794,20 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
- QCString result=(QCString)"توثيق ";
+ QCString result=(QCString)"طھظˆط«ظٹظ‚ ";
switch(compType)
{
- case ClassDef::Class: result+="هذه الفئة"; break;
- case ClassDef::Struct: result+="هذا البناء"; break;
- case ClassDef::Union: result+="هذا الإتحاد"; break;
- case ClassDef::Interface: result+="هذه الواجهة"; break;
- case ClassDef::Protocol: result+="هذا البروتوكول"; break;
- case ClassDef::Category: result+="هذا التصنيف"; break;
- case ClassDef::Exception: result+="هذا الإستثناء"; break;
+ case ClassDef::Class: result+="ظ‡ط°ظ‡ ط§ظ„ظپط¦ط©"; break;
+ case ClassDef::Struct: result+="ظ‡ط°ط§ ط§ظ„ط¨ظ†ط§ط،"; break;
+ case ClassDef::Union: result+="ظ‡ط°ط§ ط§ظ„ط¥طھط­ط§ط¯"; break;
+ case ClassDef::Interface: result+="ظ‡ط°ظ‡ ط§ظ„ظˆط§ط¬ظ‡ط©"; break;
+ case ClassDef::Protocol: result+="ظ‡ط°ط§ ط§ظ„ط¨ط±ظˆطھظˆظƒظˆظ„"; break;
+ case ClassDef::Category: result+="ظ‡ط°ط§ ط§ظ„طھطµظ†ظٹظپ"; break;
+ case ClassDef::Exception: result+="ظ‡ط°ط§ ط§ظ„ط¥ط³طھط«ظ†ط§ط،"; break;
default: break;
}
- result+=" تم تكوينه من ";
- if (single) result+="هذا الملف:"; else result+="هذه الملفات:";
+ result+=" طھظ… طھظƒظˆظٹظ†ظ‡ ظ…ظ† ";
+ if (single) result+="ظ‡ط°ط§ ط§ظ„ظ…ظ„ظپ:"; else result+="ظ‡ط°ظ‡ ط§ظ„ظ…ظ„ظپط§طھ:";
return result;
}
@@ -815,7 +815,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* list.
*/
virtual QCString trAlphabeticalList()
- { return "قائمة أبجدية"; }
+ { return "ظ‚ط§ط¦ظ…ط© ط£ط¨ط¬ط¯ظٹط©"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
@@ -823,18 +823,18 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues()
- { return "قيم العودة"; }
+ { return "ظ‚ظٹظ… ط§ظ„ط¹ظˆط¯ط©"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
- { return "الصفحة الرئيسية"; }
+ { return "ط§ظ„طµظپط­ط© ط§ظ„ط±ط¦ظٹط³ظٹط©"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual QCString trPageAbbreviation()
- { return "ص."; }
+ { return "طµ."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
@@ -842,7 +842,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
virtual QCString trSources()
{
- return "مصادر";
+ return "ظ…طµط§ط¯ط±";
}
virtual QCString trDefinedAtLineInSourceFile()
{
@@ -869,68 +869,68 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! this text is put before a collaboration diagram */
virtual QCString trCollaborationDiagram(const char *clName)
{
- return (QCString)"رسم التعاون لـ "+clName+":";
+ return (QCString)"ط±ط³ظ… ط§ظ„طھط¹ط§ظˆظ† ظ„ظ€ "+clName+":";
}
/*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName)
{
- return (QCString)"رسم اعتمادية التضمين لـ "+fName+":";
+ return (QCString)"ط±ط³ظ… ط§ط¹طھظ…ط§ط¯ظٹط© ط§ظ„طھط¶ظ…ظٹظ† ظ„ظ€ "+fName+":";
}
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
{
- return "توثيق دوال البناء والهدم";
+ return "طھظˆط«ظٹظ‚ ط¯ظˆط§ظ„ ط§ظ„ط¨ظ†ط§ط، ظˆط§ظ„ظ‡ط¯ظ…";
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
{
- return "اذهب إلى الكود الخاص بهذا الملف.";
+ return "ط§ط°ظ‡ط¨ ط¥ظ„ظ‰ ط§ظ„ظƒظˆط¯ ط§ظ„ط®ط§طµ ط¨ظ‡ط°ط§ ط§ظ„ظ…ظ„ظپ.";
}
/*! Used in the file sources to point to the corresponding documentation. */
virtual QCString trGotoDocumentation()
{
- return "اذهب إلى توثيق هذا الملف.";
+ return "ط§ط°ظ‡ط¨ ط¥ظ„ظ‰ طھظˆط«ظٹظ‚ ظ‡ط°ط§ ط§ظ„ظ…ظ„ظپ.";
}
/*! Text for the \\pre command */
virtual QCString trPrecondition()
{
- return "شرط سابق";
+ return "ط´ط±ط· ط³ط§ط¨ظ‚";
}
/*! Text for the \\post command */
virtual QCString trPostcondition()
{
- return "شرط لاحق";
+ return "ط´ط±ط· ظ„ط§ط­ظ‚";
}
/*! Text for the \\invariant command */
virtual QCString trInvariant()
{
- return "ثابت";
+ return "ط«ط§ط¨طھ";
}
/*! Text shown before a multi-line variable/enum initialization */
virtual QCString trInitialValue()
{
- return "قيمة مبدئية:";
+ return "ظ‚ظٹظ…ط© ظ…ط¨ط¯ط¦ظٹط©:";
}
/*! Text used the source code in the file index */
virtual QCString trCode()
{
- return "كود";
+ return "ظƒظˆط¯";
}
virtual QCString trGraphicalHierarchy()
{
- return "الشكل الرسومي للفئات";
+ return "ط§ظ„ط´ظƒظ„ ط§ظ„ط±ط³ظˆظ…ظٹ ظ„ظ„ظپط¦ط§طھ";
}
virtual QCString trGotoGraphicalHierarchy()
{
- return "اذهب إلى الشكل الهرمي الرسومي للفئات";
+ return "ط§ط°ظ‡ط¨ ط¥ظ„ظ‰ ط§ظ„ط´ظƒظ„ ط§ظ„ظ‡ط±ظ…ظٹ ط§ظ„ط±ط³ظˆظ…ظٹ ظ„ظ„ظپط¦ط§طھ";
}
virtual QCString trGotoTextualHierarchy()
{
- return "اذهب إلى الشكل الهرمي النصي للفئات";
+ return "ط§ط°ظ‡ط¨ ط¥ظ„ظ‰ ط§ظ„ط´ظƒظ„ ط§ظ„ظ‡ط±ظ…ظٹ ط§ظ„ظ†طµظٹ ظ„ظ„ظپط¦ط§طھ";
}
virtual QCString trPageIndex()
{
- return "فهرس الصفحات";
+ return "ظپظ‡ط±ط³ ط§ظ„طµظپط­ط§طھ";
}
//////////////////////////////////////////////////////////////////////////
@@ -939,50 +939,50 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
virtual QCString trNote()
{
- return "ملاحظات";
+ return "ظ…ظ„ط§ط­ط¸ط§طھ";
}
virtual QCString trPublicTypes()
{
- return "أنواع عامة";
+ return "ط£ظ†ظˆط§ط¹ ط¹ط§ظ…ط©";
}
virtual QCString trPublicAttribs()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "حقول بيانات";
+ return "ط­ظ‚ظˆظ„ ط¨ظٹط§ظ†ط§طھ";
}
else
{
- return "صفات عامة";
+ return "طµظپط§طھ ط¹ط§ظ…ط©";
}
}
virtual QCString trStaticPublicAttribs()
{
- return "صفات ساكنة عامة";
+ return "طµظپط§طھ ط³ط§ظƒظ†ط© ط¹ط§ظ…ط©";
}
virtual QCString trProtectedTypes()
{
- return "أنواع محمية";
+ return "ط£ظ†ظˆط§ط¹ ظ…ط­ظ…ظٹط©";
}
virtual QCString trProtectedAttribs()
{
- return "صفات محمية";
+ return "طµظپط§طھ ظ…ط­ظ…ظٹط©";
}
virtual QCString trStaticProtectedAttribs()
{
- return "صفات ساكنة محمية";
+ return "طµظپط§طھ ط³ط§ظƒظ†ط© ظ…ط­ظ…ظٹط©";
}
virtual QCString trPrivateTypes()
{
- return "أنواع خاصة";
+ return "ط£ظ†ظˆط§ط¹ ط®ط§طµط©";
}
virtual QCString trPrivateAttribs()
{
- return "صفات خاصة";
+ return "طµظپط§طھ ط®ط§طµط©";
}
virtual QCString trStaticPrivateAttribs()
{
- return "صفات ساكنة خاصة";
+ return "طµظپط§طھ ط³ط§ظƒظ†ط© ط®ط§طµط©";
}
//////////////////////////////////////////////////////////////////////////
@@ -992,12 +992,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! Used as a marker that is put before a \\todo item */
virtual QCString trTodo()
{
- return "مهام";
+ return "ظ…ظ‡ط§ظ…";
}
/*! Used as the header of the todo list */
virtual QCString trTodoList()
{
- return "قائمة المهام";
+ return "ظ‚ط§ط¦ظ…ط© ط§ظ„ظ…ظ‡ط§ظ…";
}
//////////////////////////////////////////////////////////////////////////
@@ -1006,24 +1006,24 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
virtual QCString trReferencedBy()
{
- return "ذكر بواسطة";
+ return "ط°ظƒط± ط¨ظˆط§ط³ط·ط©";
}
virtual QCString trRemarks()
{
- return "تعليقات";
+ return "طھط¹ظ„ظٹظ‚ط§طھ";
}
virtual QCString trAttention()
{
- return "انتبه";
+ return "ط§ظ†طھط¨ظ‡";
}
virtual QCString trInclByDepGraph()
{
- return "هذا الرسم يوضح الملفات التي ضمنت هذا الملف"
- "بصورة مباشرة أو غير مباشرة:";
+ return "ظ‡ط°ط§ ط§ظ„ط±ط³ظ… ظٹظˆط¶ط­ ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„طھظٹ ط¶ظ…ظ†طھ ظ‡ط°ط§ ط§ظ„ظ…ظ„ظپ"
+ "ط¨طµظˆط±ط© ظ…ط¨ط§ط´ط±ط© ط£ظˆ ط؛ظٹط± ظ…ط¨ط§ط´ط±ط©:";
}
virtual QCString trSince()
{
- return "منذ";
+ return "ظ…ظ†ط°";
}
//////////////////////////////////////////////////////////////////////////
@@ -1113,12 +1113,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! Used as a marker that is put before a test item */
virtual QCString trTest()
{
- return "اختبار";
+ return "ط§ط®طھط¨ط§ط±";
}
/*! Used as the header of the test list */
virtual QCString trTestList()
{
- return "قائمة الإختبارات";
+ return "ظ‚ط§ط¦ظ…ط© ط§ظ„ط¥ط®طھط¨ط§ط±ط§طھ";
}
//////////////////////////////////////////////////////////////////////////
@@ -1138,12 +1138,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! Used as a section header for IDL properties */
virtual QCString trProperties()
{
- return "خصائص";
+ return "ط®طµط§ط¦طµ";
}
/*! Used as a section header for IDL property documentation */
virtual QCString trPropertyDocumentation()
{
- return "توثيق الخاصية";
+ return "طھظˆط«ظٹظ‚ ط§ظ„ط®ط§طµظٹط©";
}
//////////////////////////////////////////////////////////////////////////
@@ -1153,49 +1153,49 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
- return "واجهات";
+ return "ظˆط§ط¬ظ‡ط§طھ";
}
/*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "هياكل البيانات";
+ return "ظ‡ظٹط§ظƒظ„ ط§ظ„ط¨ظٹط§ظ†ط§طھ";
}
else
{
- return "فئات";
+ return "ظپط¦ط§طھ";
}
}
/*! Used as the title of a Java package */
virtual QCString trPackage(const char *name)
{
- return (QCString)"حزمة "+name;
+ return (QCString)"ط­ط²ظ…ط© "+name;
}
/*! Title of the package index page */
virtual QCString trPackageList()
{
- return "قائمة الحزم";
+ return "ظ‚ط§ط¦ظ…ط© ط§ظ„ط­ط²ظ…";
}
/*! The description of the package index page */
virtual QCString trPackageListDescription()
{
- return "هذه هي الحزم مع وصف مختصر لكل منها )إن وجد( :";
+ return "ظ‡ط°ظ‡ ظ‡ظٹ ط§ظ„ط­ط²ظ… ظ…ط¹ ظˆطµظپ ظ…ط®طھطµط± ظ„ظƒظ„ ظ…ظ†ظ‡ط§ )ط¥ظ† ظˆط¬ط¯( :";
}
/*! The link name in the Quick links header for each page */
virtual QCString trPackages()
{
- return "حزم";
+ return "ط­ط²ظ…";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
- return "توثيق الحزم";
+ return "طھظˆط«ظٹظ‚ ط§ظ„ط­ط²ظ…";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
- return "القيمة:";
+ return "ط§ظ„ظ‚ظٹظ…ط©:";
}
//////////////////////////////////////////////////////////////////////////
@@ -1205,12 +1205,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! Used as a marker that is put before a \\bug item */
virtual QCString trBug()
{
- return "ثغرة";
+ return "ط«ط؛ط±ط©";
}
/*! Used as the header of the bug list */
virtual QCString trBugList()
{
- return "قائمة الثغرات";
+ return "ظ‚ط§ط¦ظ…ط© ط§ظ„ط«ط؛ط±ط§طھ";
}
//////////////////////////////////////////////////////////////////////////
@@ -1259,7 +1259,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
/*! Used as header RTF general index */
virtual QCString trRTFGeneralIndex()
{
- return "فهرس";
+ return "ظپظ‡ط±ط³";
}
/*! This is used for translation of the word that will possibly
@@ -1268,8 +1268,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trClass(bool /*first_capital*/, bool singular)
{
- QCString result("فئة");
- if (!singular) result="فئات";
+ QCString result("ظپط¦ط©");
+ if (!singular) result="ظپط¦ط§طھ";
return result;
}
@@ -1279,8 +1279,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trFile(bool /*first_capital*/, bool singular)
{
- QCString result("ملف");
- if (!singular) result="ملفات";
+ QCString result("ظ…ظ„ظپ");
+ if (!singular) result="ظ…ظ„ظپط§طھ";
return result;
}
@@ -1290,8 +1290,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trNamespace(bool /*first_capital*/, bool singular)
{
- QCString result("مجال أسماء");
- if (!singular) result="مجالات أسماء";
+ QCString result("ظ…ط¬ط§ظ„ ط£ط³ظ…ط§ط،");
+ if (!singular) result="ظ…ط¬ط§ظ„ط§طھ ط£ط³ظ…ط§ط،";
return result;
}
@@ -1301,8 +1301,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trGroup(bool /*first_capital*/, bool singular)
{
- QCString result("مجموعة");
- if (!singular) result="مجموعات";
+ QCString result("ظ…ط¬ظ…ظˆط¹ط©");
+ if (!singular) result="ظ…ط¬ظ…ظˆط¹ط§طھ";
return result;
}
@@ -1312,8 +1312,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trPage(bool /*first_capital*/, bool singular)
{
- QCString result("صفحة");
- if (!singular) result="صفحات";
+ QCString result("طµظپط­ط©");
+ if (!singular) result="طµظپط­ط§طھ";
return result;
}
@@ -1323,8 +1323,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trMember(bool /*first_capital*/, bool singular)
{
- QCString result("عضو");
- if (!singular) result="أعضاء";
+ QCString result("ط¹ط¶ظˆ");
+ if (!singular) result="ط£ط¹ط¶ط§ط،";
return result;
}
@@ -1334,8 +1334,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trField(bool /*first_capital*/, bool singular)
{
- QCString result("حقل");
- if (!singular) result="حقول";
+ QCString result("ط­ظ‚ظ„");
+ if (!singular) result="ط­ظ‚ظˆظ„";
return result;
}
@@ -1345,8 +1345,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trGlobal(bool /*first_capital*/, bool singular)
{
- QCString result("عام");
- if (!singular) result="عوام";
+ QCString result("ط¹ط§ظ…");
+ if (!singular) result="ط¹ظˆط§ظ…";
return result;
}
@@ -1358,8 +1358,8 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* for the author section in man pages. */
virtual QCString trAuthor(bool /*first_capital*/, bool singular)
{
- QCString result("المؤلف");
- if (!singular) result="المؤلفون";
+ QCString result("ط§ظ„ظ…ط¤ظ„ظپ");
+ if (!singular) result="ط§ظ„ظ…ط¤ظ„ظپظˆظ†";
return result;
}
@@ -1371,7 +1371,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trReferences()
{
- return "مرجعيات";
+ return "ظ…ط±ط¬ط¹ظٹط§طھ";
}
//////////////////////////////////////////////////////////////////////////
@@ -1403,7 +1403,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trRTFTableOfContents()
{
- return "جدول المحتويات";
+ return "ط¬ط¯ظˆظ„ ط§ظ„ظ…ط­طھظˆظٹط§طھ";
}
//////////////////////////////////////////////////////////////////////////
@@ -1427,12 +1427,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trEvents()
{
- return "الأحداث";
+ return "ط§ظ„ط£ط­ط¯ط§ط«";
}
/*! Header used for the documentation section of a class' events. */
virtual QCString trEventDocumentation()
{
- return "توثيق الأحداث";
+ return "طھظˆط«ظٹظ‚ ط§ظ„ط£ط­ط¯ط§ط«";
}
//////////////////////////////////////////////////////////////////////////
@@ -1443,35 +1443,35 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trPackageTypes()
{
- return "أنواع الحزمة";
+ return "ط£ظ†ظˆط§ط¹ ط§ظ„ط­ط²ظ…ط©";
}
/*! Used as a heading for a list of Java class functions with package
* scope.
*/
virtual QCString trPackageMembers()
{
- return "دوال الحزمة";
+ return "ط¯ظˆط§ظ„ ط§ظ„ط­ط²ظ…ط©";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
*/
virtual QCString trStaticPackageMembers()
{
- return "دوال ساكنة للحزمة";
+ return "ط¯ظˆط§ظ„ ط³ط§ظƒظ†ط© ظ„ظ„ط­ط²ظ…ط©";
}
/*! Used as a heading for a list of Java class variables with package
* scope.
*/
virtual QCString trPackageAttribs()
{
- return "خصائص الحزمة";
+ return "ط®طµط§ط¦طµ ط§ظ„ط­ط²ظ…ط©";
}
/*! Used as a heading for a list of static Java class variables with
* package scope.
*/
virtual QCString trStaticPackageAttribs()
{
- return "خصائص ساكنة للحزمة";
+ return "ط®طµط§ط¦طµ ط³ط§ظƒظ†ط© ظ„ظ„ط­ط²ظ…ط©";
}
//////////////////////////////////////////////////////////////////////////
@@ -1483,12 +1483,12 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trAll()
{
- return "الكل";
+ return "ط§ظ„ظƒظ„";
}
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
- return "هذا هو رسم الاستدعاء لهذه الدالة:";
+ return "ظ‡ط°ط§ ظ‡ظˆ ط±ط³ظ… ط§ظ„ط§ط³طھط¯ط¹ط§ط، ظ„ظ‡ط°ظ‡ ط§ظ„ط¯ط§ظ„ط©:";
}
//////////////////////////////////////////////////////////////////////////
@@ -1501,14 +1501,14 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trSearchForIndex()
{
- return "بحث عن";
+ return "ط¨ط­ط« ط¹ظ†";
}
/*! This string is used as the title for the page listing the search
* results.
*/
virtual QCString trSearchResultsTitle()
{
- return "نتائج البحث";
+ return "ظ†طھط§ط¦ط¬ ط§ظ„ط¨ط­ط«";
}
/*! This string is put just before listing the search results. The
* text can be different depending on the number of documents found.
@@ -1522,16 +1522,16 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
{
if (numDocuments==0)
{
- return "عفوا ، لا يوجد توثيق ملائم لما بحثت عنه.";
+ return "ط¹ظپظˆط§ طŒ ظ„ط§ ظٹظˆط¬ط¯ طھظˆط«ظٹظ‚ ظ…ظ„ط§ط¦ظ… ظ„ظ…ط§ ط¨ط­ط«طھ ط¹ظ†ظ‡.";
}
else if (numDocuments==1)
{
- return "وثيقة مناسبة لما بحثت عنه. <b>1</b> تم العثور على.";
+ return "ظˆط«ظٹظ‚ط© ظ…ظ†ط§ط³ط¨ط© ظ„ظ…ط§ ط¨ط­ط«طھ ط¹ظ†ظ‡. <b>1</b> طھظ… ط§ظ„ط¹ط«ظˆط± ط¹ظ„ظ‰.";
}
else
{
- return "وثيقة مطابقة لما بحثت عنه <b>$num</b> تم إيجاد ."
- "وتم ترتيبهم بحيث يكون الأقرب لنتيجة البحث أولا.";
+ return "ظˆط«ظٹظ‚ط© ظ…ط·ط§ط¨ظ‚ط© ظ„ظ…ط§ ط¨ط­ط«طھ ط¹ظ†ظ‡ <b>$num</b> طھظ… ط¥ظٹط¬ط§ط¯ ."
+ "ظˆطھظ… طھط±طھظٹط¨ظ‡ظ… ط¨ط­ظٹط« ظٹظƒظˆظ† ط§ظ„ط£ظ‚ط±ط¨ ظ„ظ†طھظٹط¬ط© ط§ظ„ط¨ط­ط« ط£ظˆظ„ط§.";
}
}
/*! This string is put before the list of matched words, for each search
@@ -1539,7 +1539,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trSearchMatches()
{
- return "يتطابق مع:";
+ return "ظٹطھط·ط§ط¨ظ‚ ظ…ط¹:";
}
//////////////////////////////////////////////////////////////////////////
@@ -1550,7 +1550,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trSourceFile(QCString& filename)
{
- return " ملف المصدر" + filename ;
+ return " ظ…ظ„ظپ ط§ظ„ظ…طµط¯ط±" + filename ;
}
//////////////////////////////////////////////////////////////////////////
@@ -1561,33 +1561,33 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
* hierarchy.
*/
virtual QCString trDirIndex()
- { return "شكل هرمي للأدلة"; }
+ { return "ط´ظƒظ„ ظ‡ط±ظ…ظٹ ظ„ظ„ط£ط¯ظ„ط©"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
- { return "توثيق الأدلة"; }
+ { return "طھظˆط«ظٹظ‚ ط§ظ„ط£ط¯ظ„ط©"; }
/*! This is used as the title of the directory index and also in the
* Quick links of an HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
- { return "الأدلة"; }
+ { return "ط§ظ„ط£ط¯ظ„ط©"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
- { return "هذا الشكل الهرمي للأدلة تم ترتيبه أبجديا بصورة تقريبية، "
- "وليس ترتيبا أبجديا كاملا:";
+ { return "ظ‡ط°ط§ ط§ظ„ط´ظƒظ„ ط§ظ„ظ‡ط±ظ…ظٹ ظ„ظ„ط£ط¯ظ„ط© طھظ… طھط±طھظٹط¨ظ‡ ط£ط¨ط¬ط¯ظٹط§ ط¨طµظˆط±ط© طھظ‚ط±ظٹط¨ظٹط©طŒ "
+ "ظˆظ„ظٹط³ طھط±طھظٹط¨ط§ ط£ط¨ط¬ط¯ظٹط§ ظƒط§ظ…ظ„ط§:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
- { QCString result=" مرجع الدليل"; result+=dirName; return result; }
+ { QCString result=" ظ…ط±ط¬ط¹ ط§ظ„ط¯ظ„ظٹظ„"; result+=dirName; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
@@ -1608,9 +1608,9 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6
*/
virtual QCString trOverloadText()
{
- return "هذه دالة عضو زائدة التحميل ،"
- "وجد أنها ملائمة. إنها تختلف عن الدالة أعلاه"
- "فقط في نوعية ال argument(s) التي تقبلها.";
+ return "ظ‡ط°ظ‡ ط¯ط§ظ„ط© ط¹ط¶ظˆ ط²ط§ط¦ط¯ط© ط§ظ„طھط­ظ…ظٹظ„ طŒ"
+ "ظˆط¬ط¯ ط£ظ†ظ‡ط§ ظ…ظ„ط§ط¦ظ…ط©. ط¥ظ†ظ‡ط§ طھط®طھظ„ظپ ط¹ظ† ط§ظ„ط¯ط§ظ„ط© ط£ط¹ظ„ط§ظ‡"
+ "ظپظ‚ط· ظپظٹ ظ†ظˆط¹ظٹط© ط§ظ„ argument(s) ط§ظ„طھظٹ طھظ‚ط¨ظ„ظ‡ط§.";
}
};
diff --git a/src/translator_fi.h b/src/translator_fi.h
index ff852e8..3a9a890 100644
--- a/src/translator_fi.h
+++ b/src/translator_fi.h
@@ -95,7 +95,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0
*/
/*virtual QCString updateNeededMessage()
{
- return "Warning: The Finnish translator is really obsolete.\n"
+ return "The Finnish translator is really obsolete.\n"
"It was not updated since version 1.0.0. As a result,\n"
"some sentences may appear in English.\n\n";
}*/
diff --git a/src/translator_kr.h b/src/translator_kr.h
index 3e411aa..a1ae9ea 100644
--- a/src/translator_kr.h
+++ b/src/translator_kr.h
@@ -1938,6 +1938,125 @@ class TranslatorKorean : public TranslatorAdapter_1_7_5
{ return "أك°،·خ »َ¼سµب ¸â¹ِµé"; }
//////////////////////////////////////////////////////////////////////////
+// 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 ? "ب°¼؛ب­" : "؛ٌب°¼؛ب­";
+ return "ئذ³خ µ؟±âب­¸¦ "+opt+"اد±â ہ§اط إ¬¸¯اد½ت½أ؟ہ";
+ }
+
+ /*! 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 "ؤ«إ×°ي¸® @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 "إ¬·،½؛ @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 "إ¬·،½؛ ¸ق¼زµهµé";
+ }
+
+ /*! 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 "ہخ½؛إد½؛ ¸ق¼زµهµé";
+ }
+
+ /*! Used as the header of the member functions of an Objective-C class.
+ */
+ virtual QCString trMethodDocumentation()
+ {
+ return "¸ق¼زµه ¹®¼­ب­";
+ }
+
+ /*! Used as the title of the design overview picture created for the
+ * VHDL output.
+ */
+ virtual QCString trDesignOverview()
+ {
+ return "µًہعہخ °³؟ن";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.4
+//////////////////////////////////////////////////////////////////////////
+
+ /** old style UNO IDL services: implemented interfaces */
+ virtual QCString trInterfaces()
+ { return "ہح½؛ئ÷ئ®µب ہخإحئنہج½؛µé"; }
+
+ /** old style UNO IDL services: inherited services */
+ virtual QCString trServices()
+ { return "ئ÷اشµب ¼­؛ٌ½؛µé"; }
+
+ /** UNO IDL constant groups */
+ virtual QCString trConstantGroups()
+ { return "»َ¼ِ ±×·ىµé"; }
+
+ /** UNO IDL constant groups */
+ virtual QCString trConstantGroupReference(const char *namespaceName)
+ {
+ QCString result=namespaceName;
+ result+=" »َ¼ِ ±×·ى ·¹ئغ·±½؛";
+ return result;
+ }
+ /** UNO IDL service page title */
+ virtual QCString trServiceReference(const char *sName)
+ {
+ QCString result=(QCString)sName;
+ result+=" ¼­؛ٌ½؛ ·¹ئغ·±½؛";
+ return result;
+ }
+ /** UNO IDL singleton page title */
+ virtual QCString trSingletonReference(const char *sName)
+ {
+ QCString result=(QCString)sName;
+ result+=" ½ج±غإو ·¹ئغ·±½؛";
+ return result;
+ }
+ /** UNO IDL service page */
+ virtual QCString trServiceGeneratedFromFiles(bool single)
+ {
+ // single is true implies a single file
+ QCString result=(QCString)"ہج ¼­؛ٌ½؛؟، ´ëار ¹®¼­ب­´آ ´ظہ½ہا ئؤہد";
+ if (!single) result+="µé";
+ result+="·خ؛خإح »‎¼؛µا¾ْ½ہ´د´ظ.:";
+ return result;
+ }
+ /** UNO IDL singleton page */
+ virtual QCString trSingletonGeneratedFromFiles(bool single)
+ {
+ // single is true implies a single file
+ QCString result=(QCString)"ہج ½ج±غإو؟، ´ëار ¹®¼­ب­´آ ´ظہ½ہا ئؤہد";
+ if (!single) result+="µé";
+ result+="·خ؛خإح »‎¼؛µا¾ْ½ہ´د´ظ.:";
+ return result;
+ }
+
+//////////////////////////////////////////////////////////////////////////
};
diff --git a/src/types.h b/src/types.h
index 18affcc..0c269be 100644
--- a/src/types.h
+++ b/src/types.h
@@ -22,11 +22,22 @@
* @brief This file contains a number of basic enums and types.
*/
+/** Protection level of members */
enum Protection { Public, Protected, Private, Package } ;
+
+/** Virtualness of a member. */
enum Specifier { Normal, Virtual, Pure } ;
+
+/** Kind of method */
enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event };
+
+/** Type of member relation */
enum RelatesType { Simple, Duplicate, MemberOf };
+
+/** Kind of member relationship */
enum Relationship { Member, Related, Foreign };
+
+/** Language as given by extension */
enum SrcLangExt
{
SrcLangExt_Unknown = 0x00000,
@@ -46,8 +57,10 @@ enum SrcLangExt
SrcLangExt_Markdown = 0x10000
};
+/** Grouping info */
struct Grouping
{
+ /** Grouping priority */
enum GroupPri_t
{
GROUPING_LOWEST,
diff --git a/src/util.cpp b/src/util.cpp
index 205d0ba..0d70d43 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -498,7 +498,7 @@ NamespaceDef *getResolvedNamespace(const char *name)
}
if (count==10)
{
- err("warning: possible recursive namespace alias detected for %s!\n",name);
+ warn_uncond("possible recursive namespace alias detected for %s!\n",name);
}
return Doxygen::namespaceSDict->find(subst->data());
}
@@ -2339,7 +2339,7 @@ QCString transcodeCharacterStringToUTF8(const QCString &input)
void *cd = portable_iconv_open(outputEncoding,inputEncoding);
if (cd==(void *)(-1))
{
- err("error: unsupported character conversion: '%s'->'%s'\n",
+ err("unsupported character conversion: '%s'->'%s'\n",
inputEncoding.data(),outputEncoding);
error=TRUE;
}
@@ -2358,7 +2358,7 @@ QCString transcodeCharacterStringToUTF8(const QCString &input)
}
else
{
- err("error: failed to translate characters from %s to %s: check INPUT_ENCODING\ninput=[%s]\n",
+ err("failed to translate characters from %s to %s: check INPUT_ENCODING\ninput=[%s]\n",
inputEncoding.data(),outputEncoding,input.data());
error=TRUE;
}
@@ -2403,7 +2403,7 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
QFileInfo fi(name);
if (!fi.exists() || !fi.isFile())
{
- err("error: file `%s' not found\n",name);
+ err("file `%s' not found\n",name);
return "";
}
QCString filterName = getFileFilter(name,isSourceCode);
@@ -2437,7 +2437,7 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
FILE *f=portable_popen(cmd,"r");
if (!f)
{
- err("error: could not execute filter %s\n",filterName.data());
+ err("could not execute filter %s\n",filterName.data());
return "";
}
const int bSize=4096;
@@ -2461,7 +2461,7 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
}
if (!fileOpened)
{
- err("error: cannot open file `%s' for reading\n",name);
+ err("cannot open file `%s' for reading\n",name);
}
return "";
}
@@ -2501,7 +2501,7 @@ int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level)
if (cd==bcd) return level;
if (level==256)
{
- err("warning: class %s seem to have a recursive "
+ warn_uncond("class %s seem to have a recursive "
"inheritance relation!\n",cd->name().data());
return -1;
}
@@ -2533,7 +2533,7 @@ Protection classInheritedProtectionLevel(ClassDef *cd,ClassDef *bcd,Protection p
}
if (level==256)
{
- err("error: Internal inconsistency: found class %s seem to have a recursive "
+ err("Internal inconsistency: found class %s seem to have a recursive "
"inheritance relation! Please send a bug report to dimitri@stack.nl\n",cd->name().data());
}
else if (cd->baseClasses())
@@ -3857,10 +3857,10 @@ static void findMembersWithSpecificName(MemberName *mn,
if (args && !md->isDefine() && qstrcmp(args,"()")!=0)
{
argList=new ArgumentList;
- LockingPtr<ArgumentList> mdAl = md->argumentList();
+ ArgumentList *mdAl = md->argumentList();
stringToArgumentList(args,argList);
match=matchArguments2(
- md->getOuterScope(),fd,mdAl.pointer(),
+ md->getOuterScope(),fd,mdAl,
Doxygen::globalScope,fd,argList,
checkCV);
delete argList; argList=0;
@@ -3989,9 +3989,9 @@ bool getDefs(const QCString &scName,
{
//if (mmd->isLinkable())
//{
- LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
+ ArgumentList *mmdAl = mmd->argumentList();
bool match=args==0 ||
- matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
+ matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
fcd,fcd->getFileDef(),argList,
checkCV
);
@@ -4089,8 +4089,8 @@ bool getDefs(const QCString &scName,
QCString className = mmd->getClassDef()->name();
- LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
- if (matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
+ ArgumentList *mmdAl = mmd->argumentList();
+ if (matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
Doxygen::globalScope,mmd->getFileDef(),argList,
checkCV
)
@@ -4153,10 +4153,10 @@ bool getDefs(const QCString &scName,
if (args && qstrcmp(args,"()")!=0)
{
argList=new ArgumentList;
- LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
+ ArgumentList *mmdAl = mmd->argumentList();
stringToArgumentList(args,argList);
match=matchArguments2(
- mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
+ mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
fnd,mmd->getFileDef(),argList,
checkCV);
}
@@ -5677,6 +5677,7 @@ QCString convertCharEntitiesToUTF8(const QCString &s)
}
growBuf.addStr(s.mid(i,s.length()-i));
growBuf.addChar(0);
+ //printf("convertCharEntitiesToUTF8(%s)->%s\n",s.data(),growBuf.get());
return growBuf.get();
}
@@ -5705,7 +5706,7 @@ void addMembersToMemberGroup(MemberList *ml,
{
if (md->isEnumerate()) // insert enum value of this enum into groups
{
- LockingPtr<MemberList> fmdl=md->enumFieldList();
+ MemberList *fmdl=md->enumFieldList();
if (fmdl!=0)
{
MemberDef *fmd=fmdl->first();
@@ -6305,8 +6306,8 @@ void addRefItem(const QList<ListItemInfo> *sli,
void addGroupListToTitle(OutputList &ol,Definition *d)
{
- LockingPtr<GroupList> groups = d->partOfGroups();
- if (groups!=0) // write list of group to which this definition belongs
+ GroupList *groups = d->partOfGroups();
+ if (groups) // write list of group to which this definition belongs
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -7163,7 +7164,7 @@ void writeTypeConstraints(OutputList &ol,Definition *d,ArgumentList *al)
linkifyText(TextGeneratorOLImpl(ol),d,0,0,a->type);
ol.endConstraintType();
ol.startConstraintDocs();
- ol.parseDoc(d->docFile(),d->docLine(),d,0,a->docs,TRUE,FALSE);
+ ol.generateDoc(d->docFile(),d->docLine(),d,0,a->docs,TRUE,FALSE);
ol.endConstraintDocs();
}
ol.endConstraintList();
@@ -7206,7 +7207,7 @@ static int transcodeCharacterBuffer(const char *fileName,BufStr &srcBuf,int size
void *cd = portable_iconv_open(outputEncoding,inputEncoding);
if (cd==(void *)(-1))
{
- err("error: unsupported character conversion: '%s'->'%s': %s\n"
+ err("unsupported character conversion: '%s'->'%s': %s\n"
"Check the INPUT_ENCODING setting in the config file!\n",
inputEncoding,outputEncoding,strerror(errno));
exit(1);
@@ -7227,7 +7228,7 @@ static int transcodeCharacterBuffer(const char *fileName,BufStr &srcBuf,int size
}
else
{
- err("%s: error: failed to translate characters from %s to %s: check INPUT_ENCODING\n",
+ err("%s: failed to translate characters from %s to %s: check INPUT_ENCODING\n",
fileName,inputEncoding,outputEncoding);
exit(1);
}
@@ -7251,7 +7252,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf)
QFile f(fileName);
if (!f.open(IO_ReadOnly))
{
- err("error: could not open file %s\n",fileName);
+ err("could not open file %s\n",fileName);
return FALSE;
}
size=fi.size();
@@ -7259,7 +7260,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf)
inBuf.skip(size);
if (f.readBlock(inBuf.data()/*+oldPos*/,size)!=size)
{
- err("error: problems while reading file %s\n",fileName);
+ err("problems while reading file %s\n",fileName);
return FALSE;
}
}
@@ -7270,7 +7271,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf)
FILE *f=portable_popen(cmd,"r");
if (!f)
{
- err("error: could not execute filter %s\n",filterName.data());
+ err("could not execute filter %s\n",filterName.data());
return FALSE;
}
const int bufSize=1024;
@@ -7536,13 +7537,13 @@ bool copyFile(const QCString &src,const QCString &dest)
}
else
{
- err("error: could not write to file %s\n",dest.data());
+ err("could not write to file %s\n",dest.data());
return FALSE;
}
}
else
{
- err("error: could not open user specified file %s\n",src.data());
+ err("could not open user specified file %s\n",src.data());
return FALSE;
}
return TRUE;
@@ -7736,3 +7737,46 @@ bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile)
);
}
+void addDocCrossReference(MemberDef *src,MemberDef *dst)
+{
+ static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
+ static bool referencesRelation = Config_getBool("REFERENCES_RELATION");
+ static bool callerGraph = Config_getBool("CALLER_GRAPH");
+ static bool callGraph = Config_getBool("CALL_GRAPH");
+
+ //printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
+ if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
+ if ((referencedByRelation || callerGraph || dst->hasCallerGraph()) &&
+ src->showInCallGraph()
+ )
+ {
+ dst->addSourceReferencedBy(src);
+ MemberDef *mdDef = dst->memberDefinition();
+ if (mdDef)
+ {
+ mdDef->addSourceReferencedBy(src);
+ }
+ MemberDef *mdDecl = dst->memberDeclaration();
+ if (mdDecl)
+ {
+ mdDecl->addSourceReferencedBy(src);
+ }
+ }
+ if ((referencesRelation || callGraph || src->hasCallGraph()) &&
+ src->showInCallGraph()
+ )
+ {
+ src->addSourceReferences(dst);
+ MemberDef *mdDef = src->memberDefinition();
+ if (mdDef)
+ {
+ mdDef->addSourceReferences(dst);
+ }
+ MemberDef *mdDecl = src->memberDeclaration();
+ if (mdDecl)
+ {
+ mdDecl->addSourceReferences(dst);
+ }
+ }
+}
+
diff --git a/src/util.h b/src/util.h
index daeef09..e19e829 100644
--- a/src/util.h
+++ b/src/util.h
@@ -408,5 +408,7 @@ QCString stripIndentation(const QCString &s);
bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile);
+void addDocCrossReference(MemberDef *src,MemberDef *dst);
+
#endif
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index 441aa10..8e20419 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -412,7 +412,7 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
static void setParameterList(MemberDef *md)
{
g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
- LockingPtr<ArgumentList> al = md->argumentList();
+ ArgumentList *al = md->argumentList();
if (al==0) return;
Argument *a = al->first();
while (a)
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index fa25000..8545c90 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -876,11 +876,11 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql,
QCString mname=mdef->name();
if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (compareString(funcname,mname)==0))
{
- LockingPtr<ArgumentList> alp = mdef->argumentList();
+ ArgumentList *alp = mdef->argumentList();
// ArgumentList* arg2=mdef->getArgumentList();
if (alp==0) break;
- ArgumentListIterator ali(*alp.pointer());
+ ArgumentListIterator ali(*alp);
ArgumentListIterator ali1(ql);
if (ali.count() != ali1.count()) break;
@@ -1844,7 +1844,7 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit
ol.docify(" ");
}
ol.docify(mdef->name());
- hasParams = VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList().pointer());
+ hasParams = VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList());
}
@@ -1903,7 +1903,6 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
bool /*inGroup*/)
{
static QRegExp reg("[%]");
- LockingPtr<MemberDef> lock(mdef,mdef);
Definition *d=0;
@@ -1962,9 +1961,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
Doxygen::tagFile << " <anchor>" << convertToXML(mdef->anchor()) << "</anchor>" << endl;
if (VhdlDocGen::isVhdlFunction(mdef))
- Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList().pointer(),TRUE)) << "</arglist>" << endl;
+ Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "</arglist>" << endl;
else if (VhdlDocGen::isProcedure(mdef))
- Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList().pointer(),FALSE)) << "</arglist>" << endl;
+ Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "</arglist>" << endl;
else
Doxygen::tagFile << " <arglist>" << convertToXML(mdef->argsString()) << "</arglist>" << endl;
@@ -2027,7 +2026,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
mdef->setArgsString(largs.data());
//ClassDef * plo=mdef->getClassDef();
ClassDef *kl=0;
- LockingPtr<ArgumentList> alp = mdef->argumentList();
+ ArgumentList *alp = mdef->argumentList();
QCString nn;
//VhdlDocGen::adjustRecordMember(mdef);
if (gd) gd=0;
@@ -2046,10 +2045,10 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
writeLink(mdef,ol);
if (alp!=0 && mm==VhdlDocGen::FUNCTION)
- VhdlDocGen::writeFunctionProto(ol,alp.pointer(),mdef);
+ VhdlDocGen::writeFunctionProto(ol,alp,mdef);
if (alp!=0 && mm==VhdlDocGen::PROCEDURE)
- VhdlDocGen::writeProcedureProto(ol,alp.pointer(),mdef);
+ VhdlDocGen::writeProcedureProto(ol,alp,mdef);
break;
case VhdlDocGen::USE:
@@ -2112,7 +2111,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
case VhdlDocGen::PROCESS:
writeLink(mdef,ol);
ol.insertMemberAlign();
- VhdlDocGen::writeProcessProto(ol,alp.pointer(),mdef);
+ VhdlDocGen::writeProcessProto(ol,alp,mdef);
break;
case VhdlDocGen::PACKAGE:
case VhdlDocGen::ENTITY:
@@ -2244,7 +2243,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
if (!mdef->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC") /* && !annMemb */)
{
ol.startMemberDescription(mdef->anchor());
- ol.parseDoc(mdef->briefFile(),mdef->briefLine(),
+ ol.generateDoc(mdef->briefFile(),mdef->briefLine(),
mdef->getOuterScope()?mdef->getOuterScope():d,
mdef,mdef->briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
if (detailsVisible)
@@ -2350,7 +2349,7 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
if (subtitle && subtitle[0]!=0)
{
ol.startMemberSubtitle();
- ol.parseDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE,0,TRUE,FALSE);
+ ol.generateDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberSubtitle();
} //printf("memberGroupList=%p\n",memberGroupList);
@@ -2376,7 +2375,7 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
{
//printf("Member group has docs!\n");
ol.startMemberGroupDocs();
- ol.parseDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE);
+ ol.generateDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE);
ol.endMemberGroupDocs();
}
ol.startMemberGroup();
@@ -2951,7 +2950,7 @@ void assignBinding(VhdlConfNode * conf)
if (!archClass)
{
- // err("\n error:architecture %s not found ! ",conf->confVhdl.data());
+ // err("architecture %s not found ! ",conf->confVhdl.data());
return;
}
@@ -3075,7 +3074,7 @@ void VhdlDocGen::computeVhdlComponentRelations()
}
// if (classEntity==0)
- // err("error: %s:%d:Entity:%s%s",cur->fileName.data(),cur->startLine,entity.data()," could not be found");
+ // err("%s:%d:Entity:%s%s",cur->fileName.data(),cur->startLine,entity.data()," could not be found");
addInstance(classEntity,ar,cd,cur);
}
@@ -3315,7 +3314,10 @@ void VhdlDocGen::createFlowChart(const MemberDef *mdef)
VHDLLanguageScanner *pIntf =(VHDLLanguageScanner*) Doxygen::parserManager->getParser(".vhd");
VhdlDocGen::setFlowMember(mdef);
Entry root;
- pIntf->parseInput("",codeFragment.data(),&root);
+ QStrList filesInSameTu;
+ pIntf->startTranslationUnit("");
+ pIntf->parseInput("",codeFragment.data(),&root,FALSE,filesInSameTu);
+ pIntf->finishTranslationUnit();
}
bool VhdlDocGen::isConstraint(const MemberDef *mdef)
@@ -3906,7 +3908,7 @@ void FlowChart::writeFlowChart()
if (!f.open(IO_WriteOnly))
{
- err("Error: Cannot open file %s for writing\n",fileName.data());
+ err("Cannot open file %s for writing\n",fileName.data());
return;
}
diff --git a/src/vhdlscanner.h b/src/vhdlscanner.h
index 1eb3c83..12c2d13 100644
--- a/src/vhdlscanner.h
+++ b/src/vhdlscanner.h
@@ -48,9 +48,13 @@ class VHDLLanguageScanner : public ParserInterface
{
public:
virtual ~VHDLLanguageScanner() {}
+ void startTranslationUnit(const char *) {}
+ void finishTranslationUnit() {}
void parseInput(const char * fileName,
const char *fileBuf,
- Entry *root);
+ Entry *root,
+ bool sameTranslationUnit,
+ QStrList &filesInSameTranslationUnit);
bool needsPreprocessing(const QCString &extension);
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l
index 9eec358..934a985 100644
--- a/src/vhdlscanner.l
+++ b/src/vhdlscanner.l
@@ -740,7 +740,11 @@ void VHDLLanguageScanner::parsePrototype(const char *text)
// return token;
//}
-void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
+void VHDLLanguageScanner::parseInput(const char *fileName,
+ const char *fileBuf,
+ Entry *root,
+ bool /*sameTranslationUnit*/,
+ QStrList & /*filesInSameTranslationUnit*/)
{
yyFileName=QCString(fileName);
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index dcc40e1..5bae376 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -173,7 +173,7 @@ void XmlDocVisitor::visit(DocSymbol *s)
case DocSymbol::LeftFloor: m_t << "<lfloor>"; break;
case DocSymbol::RightFloor: m_t << "<rfloor>"; break;
default:
- err("error: unknown symbol found\n");
+ err("unknown symbol found\n");
}
}
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 9ab5c0a..b1bfc9c 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -417,10 +417,10 @@ static void writeTemplateArgumentList(ArgumentList *al,
static void writeMemberTemplateLists(MemberDef *md,FTextStream &t)
{
- LockingPtr<ArgumentList> templMd = md->templateArguments();
- if (templMd!=0) // function template prefix
+ ArgumentList *templMd = md->templateArguments();
+ if (templMd) // function template prefix
{
- writeTemplateArgumentList(templMd.pointer(),t,md->getClassDef(),md->getFileDef(),8);
+ writeTemplateArgumentList(templMd,t,md->getClassDef(),md->getFileDef(),8);
}
}
@@ -439,7 +439,7 @@ static void writeXMLDocBlock(FTextStream &t,
QCString stext = text.stripWhiteSpace();
if (stext.isEmpty()) return;
// convert the documentation string into an abstract syntax tree
- DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text+"\n",FALSE,FALSE);
+ DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text,FALSE,FALSE);
// create a code generator
XMLCodeGenerator *xmlCodeGen = new XMLCodeGenerator(t);
// create a parse tree visitor for XML
@@ -614,7 +614,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (isFunc)
{
- LockingPtr<ArgumentList> al = md->argumentList();
+ ArgumentList *al = md->argumentList();
t << " const=\"";
if (al!=0 && al->constSpecifier) t << "yes"; else t << "no";
t << "\"";
@@ -805,8 +805,8 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
<< memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">"
<< convertToXML(rmd->name()) << "</reimplements>" << endl;
}
- LockingPtr<MemberList> rbml = md->reimplementedBy();
- if (rbml!=0)
+ MemberList *rbml = md->reimplementedBy();
+ if (rbml)
{
MemberListIterator mli(*rbml);
for (mli.toFirst();(rmd=mli.current());++mli)
@@ -819,9 +819,9 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (isFunc) //function
{
- LockingPtr<ArgumentList> declAl = md->declArgumentList();
- LockingPtr<ArgumentList> defAl = md->argumentList();
- if (declAl!=0 && declAl->count()>0)
+ ArgumentList *declAl = md->declArgumentList();
+ ArgumentList *defAl = md->argumentList();
+ if (declAl && declAl->count()>0)
{
ArgumentListIterator declAli(*declAl);
ArgumentListIterator defAli(*defAl);
@@ -914,8 +914,8 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (md->memberType()==MemberType_Enumeration) // enum
{
- LockingPtr<MemberList> enumFields = md->enumFieldList();
- if (enumFields!=0)
+ MemberList *enumFields = md->enumFieldList();
+ if (enumFields)
{
MemberListIterator emli(*enumFields);
MemberDef *emd;
@@ -983,8 +983,8 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
}
//printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
- LockingPtr<MemberSDict> mdict = md->getReferencesMembers();
- if (mdict!=0)
+ MemberSDict *mdict = md->getReferencesMembers();
+ if (mdict)
{
MemberSDict::Iterator mdi(*mdict);
MemberDef *rmd;
@@ -994,7 +994,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
}
}
mdict = md->getReferencedByMembers();
- if (mdict!=0)
+ if (mdict)
{
MemberSDict::Iterator mdi(*mdict);
MemberDef *rmd;