diff options
84 files changed, 22960 insertions, 4799 deletions
diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ddc5adf --- /dev/null +++ b/.editorconfig @@ -0,0 +1,5 @@ +# See https://editorconfig.org/ for more information. + +[*] +indent_style = space +indent_size = 2 @@ -1,7 +1,7 @@ DOXYGEN Please read the installation section of the manual -(http://www.doxygen.org/install.html) for instructions. +(http://www.doxygen.nl/manual/install.html) for instructions. -------- Dimitri van Heesch @@ -54,7 +54,7 @@ There are three mailing lists: * doxygen-users@lists.sourceforge.net - for doxygen users * doxygen-develop@lists.sourceforge.net - for doxygen developers * To subscribe follow the link to - * http://sourceforge.net/projects/doxygen + * https://sourceforge.net/projects/doxygen/ Source Code ---------------------------------- @@ -1 +1 @@ -1.8.15 +1.8.16 diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt index 810c0d0..a89864d 100644 --- a/addon/doxywizard/CMakeLists.txt +++ b/addon/doxywizard/CMakeLists.txt @@ -98,6 +98,7 @@ ${GENERATED_SRC_WIZARD}/config_doxyw.cpp ${GENERATED_SRC_WIZARD}/configdoc.cpp ${doxywizard_MOC} ${doxywizard_RESOURCES_RCC} +doxywizard.rc ) if(Qt5Core_FOUND) diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp index 4e0d1aa..56378ed 100755 --- a/addon/doxywizard/doxywizard.cpp +++ b/addon/doxywizard/doxywizard.cpp @@ -208,7 +208,7 @@ void MainWindow::updateWorkingDir() void MainWindow::manual() { - QDesktopServices::openUrl(QUrl(QString::fromLatin1("http://www.doxygen.org/manual.html"))); + QDesktopServices::openUrl(QUrl(QString::fromLatin1("http://www.doxygen.org/manual/index.html"))); } void MainWindow::about() diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index ff5ebc7..7beb485 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -95,6 +95,7 @@ set(DOC_FILES language.tpl maintainers.txt translator.py + smile.png ) file(GLOB LANG_FILES "${TOP}/src/translator_??.h") @@ -143,7 +144,7 @@ set_source_files_properties(config.doc PROPERTIES GENERATED 1) ################################################################################ add_custom_target(run_doxygen COMMENT "Generating Latex and HTML documentation." - COMMAND ${DOXYGEN_EXECUTABLE} + COMMAND ${CMAKE_COMMAND} -E env VERSION=${VERSION} ${DOXYGEN_EXECUTABLE} DEPENDS ${PROJECT_BINARY_DIR}/doc/language.doc ${PROJECT_BINARY_DIR}/doc/config.doc DEPENDS ${OUT_DOC_FILES} DEPENDS examples diff --git a/doc/Doxyfile b/doc/Doxyfile index bdd1098..4c0a19d 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -55,3 +55,4 @@ ALIASES = LaTeX="\f$\mbox{\LaTeX}\f$" ALIASES += TeX="\f$\mbox{\TeX}\f$" LATEX_BATCHMODE = YES LATEX_EXTRA_STYLESHEET = manual.sty +LATEX_EMOJI_DIRECTORY = ../doc diff --git a/doc/changelog.doc b/doc/changelog.doc index bcbfe44..5d9a33c 100644 --- a/doc/changelog.doc +++ b/doc/changelog.doc @@ -2,129 +2,530 @@ \tableofcontents{html,latex} \section log_1_8 1.8 Series +\subsection log_1_8_15 Release 1.8.15 +\htmlonly +<b>(release date 27-12-2018)</b> +<a name="1.8.15"></a> +</p> +<ul> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/851">851</a> - A function cannot be documented as related to two classes. [<a href="https://github.com/doxygen/doxygen/commit/e8661c343a4e8ebeaf82b2f926d68167e41be284">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1041">1041</a> - <a href> doesn't allow <img> as visible part? [<a href="https://github.com/doxygen/doxygen/commit/6c80429e303c89a9cba83569d65d118f8d48f97c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1601">1601</a> - Missing warning of undocumented member in member group [<a href="https://github.com/doxygen/doxygen/commit/fe7e597a172fa08a075ac10bbefc572a785e4c0d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2274">2274</a> - Tooltips are not shown in dot-generated graphs [<a href="https://github.com/doxygen/doxygen/commit/56f6398447407a3826285e527cee547588e2e517">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/1419dca75d33aaf96919ae7a1fc77137d22db14f">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/dbb7838937e7bcbe129dd246438aeabfafc6be32">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2354">2354</a> - caller graph can be improved by having caller on left & callee on right [<a href="https://github.com/doxygen/doxygen/commit/af7dfbdda302e55fb8a62ab224184abccab3d167">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2478">2478</a> - Handling of unnamed parameters (C/C++) unclear [<a href="https://github.com/doxygen/doxygen/commit/7ef7b137d38d7ddcbcef787704317531b44c2baf">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2655">2655</a> - cond/endcond cannot be used in aliases [<a href="https://github.com/doxygen/doxygen/commit/be8465e89496d9b5e0d219d0e3f21aafb70dc299">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2859">2859</a> - Unnamed parameters parsed incorrectly [<a href="https://github.com/doxygen/doxygen/commit/657a6b5348d453fd1351b8c3238426e25acdbbb9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3206">3206</a> - Fortran: Does not recognize backslash at end of documentation line [<a href="https://github.com/doxygen/doxygen/commit/ad244059b3ffc896905f1000ad40b435d8bbe823">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3361">3361</a> - Merging of consecutive repeated commands creates poorly-structured HTML [<a href="https://github.com/doxygen/doxygen/commit/d9b93a377237efd3f60186c5ba2ba344d4439173">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3677">3677</a> - <![CDATA[ is not handled inside C# comments [<a href="https://github.com/doxygen/doxygen/commit/f2b6959dff5b5d3d2bbbe8204b1fc32905003ad3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3691">3691</a> - C# keywords 'get' and 'set' are highlighted as reserved words in C++ documentation source browser. [<a href="https://github.com/doxygen/doxygen/commit/0bdaf4541c2495b3166386992666f842c38642c1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3892">3892</a> - @var in php is not documented [<a href="https://github.com/doxygen/doxygen/commit/d83265914607c6556fefa852a90b6a16821b0634">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3958">3958</a> - \cond after @string literal containing backslash fails in C# [<a href="https://github.com/doxygen/doxygen/commit/179f80e666d6c017f7130b6b26e687f2b5ea54d9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4013">4013</a> - Automatic links don't work correctly with operator< and operator<= [<a href="https://github.com/doxygen/doxygen/commit/7508151230301113cf6531bfe631472fa4513d19">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4064">4064</a> - Support for C# nullable type [<a href="https://github.com/doxygen/doxygen/commit/98eb981dba723ed1d71fdcbcd7ca2de0e086b1e0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4244">4244</a> - Fortran: tagfile.tag:789: warning: Unknown compound attribute `type' found! [<a href="https://github.com/doxygen/doxygen/commit/5088fb700cd0bb4a9ce676ae235d48586229e1ba">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4316">4316</a> - Can't use pound sign in alias command, escaped or unescaped [<a href="https://github.com/doxygen/doxygen/commit/e15c80cbf1c0f35c2d2ddc950e3d653bc24aac4e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4458">4458</a> - @todo in @param leads to strange confusing message [<a href="https://github.com/doxygen/doxygen/commit/59781ae4ee1937f51836c03bd7c67e1e7be13bfc">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4529">4529</a> - HTML tags <u> and </u> not supported [<a href="https://github.com/doxygen/doxygen/commit/9eec9866fcdab896b53d44056c5afbc0b6a6373d">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/b4e535197890521306d30e0713ca8b88a98f7bf7">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4725">4725</a> - single quote in HTML section of PHP breaks doxygen [<a href="https://github.com/doxygen/doxygen/commit/53d89156855079fcf2f25fe516e6493e42e35f1e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4771">4771</a> - Not warning of undocumented function parameters [<a href="https://github.com/doxygen/doxygen/commit/2a61c8542284261e74e5d6720ee6165b8202ed99">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4878">4878</a> - Value from enumeration followed with semicolon is not present in java docs [<a href="https://github.com/doxygen/doxygen/commit/e2b0f27d6fca5dacfedc79a1a4eff32d5e9254e9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4954">4954</a> - JavaDoc @linkplain is not recognized [<a href="https://github.com/doxygen/doxygen/commit/a06b1020839f36e3b2ea73c09d9ead7f75983549">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5032">5032</a> - Line numbers for examples [<a href="https://github.com/doxygen/doxygen/commit/0b4b3698b29436b299d4e4a315d610bc1ab98acb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5068">5068</a> - The 'Examples:' section; bad/missing style and incorrect spelling [<a href="https://github.com/doxygen/doxygen/commit/12eaf6afe565ae1f7d440080205ddb76585bd31d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5213">5213</a> - Generated Doxyfile differs from result of doxygen -u [<a href="https://github.com/doxygen/doxygen/commit/406b442fc3d0360e387324ff1c08251d86a1d035">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/58d4ad3cd25569f09b31c4b80bc145477c6d61cb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5327">5327</a> - <img> on a \page does not copy the image to the html output folder [<a href="https://github.com/doxygen/doxygen/commit/4fcf0ebe7f8b5040fa6b8cca72de6cfa774d4b15">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5366">5366</a> - Error with inserting images to PDF with Markdown [<a href="https://github.com/doxygen/doxygen/commit/7ef3ba54570275a423ce52f65437607446c15b12">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5442">5442</a> - Misparsed comments leading to missing call graph [<a href="https://github.com/doxygen/doxygen/commit/ec8a1a465ef6b4cbcba9b7b9b9cbdf87e39c7bba">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5539">5539</a> - Error message when using memberof in a C macro [<a href="https://github.com/doxygen/doxygen/commit/65a3129eea3d3f807fa6a641087c26c3d0100eac">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5547">5547</a> - "remove" is treated as a keyword (green) in the source browser for C++ [<a href="https://github.com/doxygen/doxygen/commit/55e020ce14abfa2dc2ee395fefd7b1da33180e70">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5677">5677</a> - Negative sign in -Foo::Bar ruins hyperlink in generated output [<a href="https://github.com/doxygen/doxygen/commit/5a9bfc176eb3da266f44bd5cb0b38975c812e49c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5725">5725</a> - Field with name "internal" confuses documentation builder. [<a href="https://github.com/doxygen/doxygen/commit/89f808f75f7d39962a0b9dba4f479b5c6d6d9a24">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5765">5765</a> - \todo at end of C# XML comment breaks following todo's [<a href="https://github.com/doxygen/doxygen/commit/c6adc51933fcb58970bbcf89465d57edc2d19c0d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5783">5783</a> - Navigation incorrect with escaped symbols [<a href="https://github.com/doxygen/doxygen/commit/09af3e03a55a5b02ebb6254c39a09877c8bd671b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5784">5784</a> - Doxygen not creating call graphs for C# methods if namespace contains the classname [<a href="https://github.com/doxygen/doxygen/commit/5f9be083471dad47a9b3ad59d85bf04d3a855001">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5818">5818</a> - Main page absent in TOC of CHM, if PROJECT_NAME is empty [<a href="https://github.com/doxygen/doxygen/commit/887db516c1b0163139db971c5aa720804cc23f37">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5853">5853</a> - Can't suppress @author, @date and @copyright information in the detailed file description [<a href="https://github.com/doxygen/doxygen/commit/39232901e3577f6e548353b89c4338cc8ba11016">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5901">5901</a> - Macros (@test, @todo, etc) used with PHP namespaces causes illegal command warning [<a href="https://github.com/doxygen/doxygen/commit/bf793310d5d493d19b6cb8840151ab38659dd58f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5929">5929</a> - \internal stops all parsing if used inside a section [<a href="https://github.com/doxygen/doxygen/commit/4e71a72e6c826bee54f2aba55a329c2032a83c66">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6025">6025</a> - Make maxLineLen of latex output configurable [<a href="https://github.com/doxygen/doxygen/commit/ee1ea269e1c684cf5ff39ed836fd8af288837275">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6041">6041</a> - PHP: New array syntax not supported when parsing initial value [<a href="https://github.com/doxygen/doxygen/commit/7d325579b7b38a898d3766d186f9358d899dc304">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6104">6104</a> - EXTERNAL_GROUPS lose hierarchy [<a href="https://github.com/doxygen/doxygen/commit/730b7827a8e6dd4ef82d91b6ac6c3d58f95313e3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6118">6118</a> - Title in rtf file is incorrect when overridden by user in extension file [<a href="https://github.com/doxygen/doxygen/commit/67a22b2d5b9c14a325374dd8857e066b11abb7ca">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6153">6153</a> - Build of PDF with LaTEX breaks [<a href="https://github.com/doxygen/doxygen/commit/bf4c90ae6e433922b011d51401db8eb23a83f294">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6160">6160</a> - Python List as Default Parameter not parsed correctly [<a href="https://github.com/doxygen/doxygen/commit/e5e75b7f713251dd6caa472f9c5fb8d49e36ff5a">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6172">6172</a> - CREATE_SUBDIRS breaks SERVER_BASED_SEARCH [<a href="https://github.com/doxygen/doxygen/commit/c95b50542c519a66d6adbdc7031c5a5bafb75929">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6175">6175</a> - plantuml:an unwanted newline is generated after @startuml [<a href="https://github.com/doxygen/doxygen/commit/032d8fd0cd8bd33448186081c54168889e25d55e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6197">6197</a> - Czech/Slovak language documentation with tables from LaTeX to PDF is not possible [<a href="https://github.com/doxygen/doxygen/commit/509cf2db2304ee74e3fa1a580f33dbea3cdfca30">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6208">6208</a> - Annotated function parameter generates <dt> warning in todo list [<a href="https://github.com/doxygen/doxygen/commit/9277e1466f91d7b2d4190b4e55d6e7b9b5e3962d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6213">6213</a> - rtf generation [<a href="https://github.com/doxygen/doxygen/commit/be4fb2753c2f028a53d657a7920267a4191cd566">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6214">6214</a> - LaTeX output for \tparam block fails to compile when it contains a \code block [<a href="https://github.com/doxygen/doxygen/commit/8afcb87097c92fd124282a998dad61ea2b16c7ec">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/d59ed22f114398d74d5c3fd1445a7901d26ff93a">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6224">6224</a> - .tex file is wrong when generating a function whose name includes an underline [<a href="https://github.com/doxygen/doxygen/commit/1c55b572b345bf124daaa33d436d2e822b5f6eee">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6269">6269</a> - Disabled controls when `HAVE_DOT` is already set to `YES` [<a href="https://github.com/doxygen/doxygen/commit/8bf975ea2861def50f9b7d4cca0fb4002c991ec0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6270">6270</a> - Bad handling of Python class members when a class declaration line contains a comment [<a href="https://github.com/doxygen/doxygen/commit/eb72534ade8b9598806fc7e7b08374bd43bb44f3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6295">6295</a> - doxygen has problem with operator&=() [<a href="https://github.com/doxygen/doxygen/commit/1e935dc5b1a7f01fe1f3545f773eca52629dad09">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6305">6305</a> - XHTML pages are broken several ways [<a href="https://github.com/doxygen/doxygen/commit/5bae9d9ec8e5a253d6f5e8f15be43b85cd7ae0ff">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/ceedc1b7c0e9c2ea6e00d44fae2c0f8f477def69">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6308">6308</a> - When generating xhtml, async attribute on script tags need a value [<a href="https://github.com/doxygen/doxygen/commit/1b8afc8802f7ac40614e95a47ffd3ae152b57987">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6310">6310</a> - Table markdown produces invalid xhtml code [<a href="https://github.com/doxygen/doxygen/commit/eb4af56797a4bd5396c4ecda76196de61e709f56">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6311">6311</a> - Blank rows on class page when using external tag file [<a href="https://github.com/doxygen/doxygen/commit/44960da16786f6fe769b2c45d9be309568c3c1a8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6312">6312</a> - markdown plantuml use of graphviz fail if plantuml work i code file [<a href="https://github.com/doxygen/doxygen/commit/a50c7551d3e8cb18514f517d36b6ba343596a426">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6316">6316</a> - unescaped double quote in searchdata.js breaks search box functionality [<a href="https://github.com/doxygen/doxygen/commit/ed642b1cabdd2f3f52906a75cae7c477eb1c0378">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6322">6322</a> - incorrect parsing of markdown table [<a href="https://github.com/doxygen/doxygen/commit/efcc4d035e4ecdb3ecc449770a5fd26694717efa">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6323">6323</a> - error: Could not open file .../doc/html/functions_ .html for writing [<a href="https://github.com/doxygen/doxygen/commit/2609f6f49763fd75e5c529788795a07f6559b954">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6324">6324</a> - C#: Incorrect parsing of property definitions containing "//" symbols in one line with "} [<a href="https://github.com/doxygen/doxygen/commit/098bc86187295a77b08c1e5c061ed5788aaa73ae">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6325">6325</a> - Segmentation fault when generating graphical class hierarchy [<a href="https://github.com/doxygen/doxygen/commit/17338710275948c23e0f0b312d004b84976f68bc">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6339">6339</a> - Examples of TCL files fail to display [<a href="https://github.com/doxygen/doxygen/commit/05bec28930831888b6dfb610307a04da2d345924">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6340">6340</a> - Missed warning opportunity: duplicated arguments [<a href="https://github.com/doxygen/doxygen/commit/d39cdf826f15470def2ca36bc636868a62c42bbf">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6345">6345</a> - c# see langword broken [<a href="https://github.com/doxygen/doxygen/commit/7e041a6f5bf32637ebb71589d471586db1d0f7fd">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6346">6346</a> - Doxygen crash when using \code{.markdown}...\endcode in VHDL source [<a href="https://github.com/doxygen/doxygen/commit/1431d16ca2a8a20a72f029b48e4b178aa59009e3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6350">6350</a> - Broken extension test in FileDef::generateSourceFile() [<a href="https://github.com/doxygen/doxygen/commit/b1792d19afd245f33667e6170b9f08a8528e07f8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6352">6352</a> - "unexpected token TK_EOF as the argument of ref" when target starts with a digit [<a href="https://github.com/doxygen/doxygen/commit/07ae32a61e779647bace1efdbf8d15b35871fcca">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6362">6362</a> - Adjacent xrefitems always added to first list present on page [<a href="https://github.com/doxygen/doxygen/commit/a6b0a7fe237c5eb6e76073d366f281c8413eb0dd">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6363">6363</a> - Backslashes in default values confuse the parser (and cause params to be ignored) [<a href="https://github.com/doxygen/doxygen/commit/b33c0e0274ee25b1a414a79c13521ef8defecbda">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6368">6368</a> - LaTeX: Class scrbook Error: undefined old font command `\tt' [<a href="https://github.com/doxygen/doxygen/commit/52c0b2e25fc3bb15be1d240d86701a5827630db0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6370">6370</a> - Invalid 3-byte UTF8 found in input of graph [<a href="https://github.com/doxygen/doxygen/commit/21ce6ed9d2a37df2de846d48398261bb087c0a09">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6373">6373</a> - Collapsed treeview arrow displays as emoji in Microsoft Edge [<a href="https://github.com/doxygen/doxygen/commit/293e5c9ba4b88924e0cc4b513318cf822f5c63eb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6378">6378</a> - @cond does not stop at @endcond Fortran [<a href="https://github.com/doxygen/doxygen/commit/a0db6fdbff2e21502bb2ac7437c5bd57d515d83b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6517">6517</a> - Emoji support [<a href="https://github.com/doxygen/doxygen/commit/47fee387821113956e10fffa79ea22062de8c817">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/e7fde5d604faf27dec989c8894e949d48676e0c1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6524">6524</a> - Markdown formats missing in doxygen outputs. [<a href="https://github.com/doxygen/doxygen/commit/dee50d6921e2f6fe2a0dd2e9b50fa51cd1fc4c60">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6533">6533</a> - PHP: Namespaced typehints in deprecated methods not handled correctly [<a href="https://github.com/doxygen/doxygen/commit/97f2d220240a1f6692627171398a06a3fa238639">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6547">6547</a> - Call graph missing due to ALIASES [<a href="https://github.com/doxygen/doxygen/commit/0077ab48f682cca9caf99b2d92a8448d1d66cb98">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/93b085e465a42eb26ef8305edfc6d61ba6ce858f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6566">6566</a> - INHERIT_DOCS not working for python [<a href="https://github.com/doxygen/doxygen/commit/f56ce241a09dff819c194be4585aae99f35d85f1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6580">6580</a> - xrefitems not listed if the page is referenced multiple times [<a href="https://github.com/doxygen/doxygen/commit/50d47c3383becb7ba7cedc53bb43b99898df7481">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6589">6589</a> - anchor after test command in a namespace produces duplicate tests [<a href="https://github.com/doxygen/doxygen/commit/cc3cb095a035db0037604dca2109c927e3ba7df3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6594">6594</a> - using ingroup and anchor causes tests to disappear [<a href="https://github.com/doxygen/doxygen/commit/ebbb2ca96a23951dbd82b976ace0d01470e8a9d6">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6597">6597</a> - SIGSEGV presumably caused by C++ "using" declaration [<a href="https://github.com/doxygen/doxygen/commit/efc33490c36cb7c21955901ce0abccc343c0c7b3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6601">6601</a> - tparam HTML gobbles up lines after the tparam comment [<a href="https://github.com/doxygen/doxygen/commit/3b95f4936ce8841f88fdaebdfe80da8eb0504cd3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6612">6612</a> - Issue with handling of emoji [<a href="https://github.com/doxygen/doxygen/commit/d748615666f7fac43880f0d3ec859d11ad304deb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6632">6632</a> - References to Objective C protocols by name broken in 1.8.12 [<a href="https://github.com/doxygen/doxygen/commit/c0b367ecd4a2f48cde85d4f5aed416892d3fa775">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6657">6657</a> - "QGDict::hashAsciiKey: Invalid null key" when using anonymous union/struct [<a href="https://github.com/doxygen/doxygen/commit/62f8c5346b2f3ea492404ae85942a0de4b091c71">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6690">6690</a> - Regression in handling of shorthand signed/unsigned types in function parameters (with bisect and test case) [<a href="https://github.com/doxygen/doxygen/commit/6833f142284376d256688511c5111dda6df9d79d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6691">6691</a> - Multiple issues with emoji matching [<a href="https://github.com/doxygen/doxygen/commit/a06e660406d655568635521f6df161e3a7e5734b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6692">6692</a> - XML TOC generation is not backwards-compatible with 1.8.14 [<a href="https://github.com/doxygen/doxygen/commit/15541e75816673fdc51d90820d6620e98b8fcd4b">view</a>]</li> +<li>'self' keyword in PHP documentation [<a href="https://github.com/doxygen/doxygen/commit/7e591135c56c3679c5ee63aa78f6baeae2cde63f">view</a>]</li> +<li>Added: support RTL for DocXRefItem in html - Removed: support RTL form Return section in html, for consistency with parameter sections [<a href="https://github.com/doxygen/doxygen/commit/08be7a8ef12518736b2530504a28904eec3e47ab">view</a>]</li> +<li>Fixed: list item bullets overlap floating elements in html - Fixed: fragment lines overlap floating elements in html [<a href="https://github.com/doxygen/doxygen/commit/dda245dbab60bddab4e7593cccbf59117d00a812">view</a>]</li> +<li>Fixed: text-align of rtl toc [<a href="https://github.com/doxygen/doxygen/commit/2ad516fef49f95b9edafe7ade6d1ed6d35cb75f7">view</a>]</li> +<li>Fixed: last line underline overlap border in html fragment [<a href="https://github.com/doxygen/doxygen/commit/1245145d6710abbb58057dc555fccac08ac8a3fa">view</a>]</li> +<li>A few more language updates [<a href="https://github.com/doxygen/doxygen/commit/9d35bd4f5865a63f3daacc8d4ab613fb4743bb72">view</a>]</li> +<li>Add VHDL strings to Translator class and add german translations. [<a href="https://github.com/doxygen/doxygen/commit/f1fea3603fa3e561d8f1efff5bc685e4484e7998">view</a>]</li> +<li>Add commands to handle referenced by relation and references relation [<a href="https://github.com/doxygen/doxygen/commit/0697535ad38ed122964c4673b102a8e30ad4369f">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/6c0436303d76a3df4c323bf6ca1e5716b6027ec0">view</a>]</li> +<li>Add formula (images) to RTF output [<a href="https://github.com/doxygen/doxygen/commit/79ac5232cf029f3d40543641e92daa8aaa1c9f7c">view</a>]</li> +<li>Add function annotations support [<a href="https://github.com/doxygen/doxygen/commit/72c5c25695273c96f30f118cb8270a037e28eb7a">view</a>]</li> +<li>Add possibility for adding doxygen configuration items to, all, tests during runtime. [<a href="https://github.com/doxygen/doxygen/commit/bb23893d5d5267942092bb93fd22b14dea9c1135">view</a>]</li> +<li>Add support for std::shared_ptr [<a href="https://github.com/doxygen/doxygen/commit/6c380ba91ae41c6d5c409a5163119318932ae2a3">view</a>]</li> +<li>Add support of dict/set in annotations and default values [<a href="https://github.com/doxygen/doxygen/commit/ec98b6f662024fc3d5bf47e33630fc8d06bde6c6">view</a>]</li> +<li>Add variadic arguments support to @link and @ref, aka '...' arguments, fixes [<a href="https://github.com/doxygen/doxygen/commit/dd88186b18613388902e4921e5203375458783b6">view</a>]</li> +<li>Add variadic function arguments '...' regression tests [<a href="https://github.com/doxygen/doxygen/commit/fce142b4282d80f16fff53ba1cbd2572119b17ef">view</a>]</li> +<li>Add variadic template function regression tests [<a href="https://github.com/doxygen/doxygen/commit/818f0458205a2965f0a676265e2454450a4c3455">view</a>]</li> +<li>Added *.ice files as a recognized file type. Added a Slice-optimized output mode. [<a href="https://github.com/doxygen/doxygen/commit/3a97099d5e6afd298486f219694a7fb5eff67fea">view</a>]</li> +<li>Added French translation [<a href="https://github.com/doxygen/doxygen/commit/7d058fe977db011e35cbfd0247bfa8d7f9435998">view</a>]</li> +<li>Added missing #include for util.h to portable.cpp [<a href="https://github.com/doxygen/doxygen/commit/74c9b5f67758ad21f014f6447d55e8aea6722cb5">view</a>]</li> +<li>Added not for usage of [TOC] together with Markdown headers [<a href="https://github.com/doxygen/doxygen/commit/19e2abe877cafbe4ab56cbc50d913dfaf249e450">view</a>]</li> +<li>Added some VHDL code coloring [<a href="https://github.com/doxygen/doxygen/commit/cb331331f7b09aa44376596e83d29b3191a55b43">view</a>]</li> +<li>Added some missing default types for argument matching [<a href="https://github.com/doxygen/doxygen/commit/72f1b53bb5aebfebf829a684a7f16de1c07873c7">view</a>]</li> +<li>Added substitution variant for character substitution [<a href="https://github.com/doxygen/doxygen/commit/bd6c93b2d26a9a80df66a25404613e285ef35815">view</a>]</li> +<li>Added support for RTL(right to left) languages like Arabic and Persian in HTML output [<a href="https://github.com/doxygen/doxygen/commit/5885c89d6b30ca607f84794d0de6800f49dd327b">view</a>]</li> +<li>Added test case for \ref, and fixed representation of operator->*() [<a href="https://github.com/doxygen/doxygen/commit/2b4257860046b3863b7c478d7f6ad5bdfcab757b">view</a>]</li> +<li>Adding debug options to vhdl parser generator [<a href="https://github.com/doxygen/doxygen/commit/6ad7854e72abda652bdf034d7cf355dcb136a7fe">view</a>]</li> +<li>Adjustment of xhtml1-transitional.dtd [<a href="https://github.com/doxygen/doxygen/commit/2427e160d2299d72813f52f0862d504956c6c209">view</a>]</li> +<li>Automatic detection of UCS-2 based on BOM corrected [<a href="https://github.com/doxygen/doxygen/commit/f3b423989086728ded99492e61a0a5c127f21f69">view</a>]</li> +<li>Better HTML output for VHDL Ports [<a href="https://github.com/doxygen/doxygen/commit/36afe5e25c10dfd5a6208df7c8892eb2bb7498c5">view</a>]</li> +<li>Bold text terminated by plus sign [<a href="https://github.com/doxygen/doxygen/commit/5ddb9f02b9fdaf6e3e25f0281d11e6d516ab4aad">view</a>]</li> +<li>Bug fix for plantuml [<a href="https://github.com/doxygen/doxygen/commit/cbb0ae9a02305e0464737b316abd35e8e6d7c1a2">view</a>]</li> +<li>Bump minimal deployment target for OSX to 10.9 to avoid deprecation warning while linking [<a href="https://github.com/doxygen/doxygen/commit/58f9985ba779cbf733f78a720060ff0225f0156d">view</a>]</li> +<li>C++11 features used in Doxygen [<a href="https://github.com/doxygen/doxygen/commit/e2b07563dd9cc21f8472570d2cc8d6cd69d536b8">view</a>]</li> +<li>Cannot Generate Layout File using -l [<a href="https://github.com/doxygen/doxygen/commit/5c3bcaadff1a693dab41ee49701dc12df7d6b09a">view</a>]</li> +<li>Cannot properly jump from brief to detailed function description [<a href="https://github.com/doxygen/doxygen/commit/edfa0d2a95dacfea8c2cddc1da1e37728d1cc608">view</a>]</li> +<li>Change german translation of trClassDocumentation() for VHDL output. [<a href="https://github.com/doxygen/doxygen/commit/fe88231028cc137b9e97ae1024ce8781244f3103">view</a>]</li> +<li>Changed implementation, added test case [<a href="https://github.com/doxygen/doxygen/commit/0a384496099569c2a675a94c5af06ad83cccb247">view</a>]</li> +<li>Changed mail address and removed obsolete files [<a href="https://github.com/doxygen/doxygen/commit/92aae074ff9115e13295dcc9eb1515ed1d62319c">view</a>]</li> +<li>Changed refiltering to forced use of insideTabbing [<a href="https://github.com/doxygen/doxygen/commit/8deca51e0c8cca7873d40d5670edbea36ea38ee3">view</a>]</li> +<li>Changed state guard instead of adding pattern check+reject [<a href="https://github.com/doxygen/doxygen/commit/510f342b4d6f61f4ea6f0e7cab5531895bc86a20">view</a>]</li> +<li>Close last code line properly. [<a href="https://github.com/doxygen/doxygen/commit/ef9c151c86073f107ec6556b779cd7b8da3154eb">view</a>]</li> +<li>Combined lrRank and rank parameters for computeMd5Signature [<a href="https://github.com/doxygen/doxygen/commit/cbca2bdcd77ce0ab6b907cf2d4bab65340a57f00">view</a>]</li> +<li>Consistency between 'generate' and 'update' startup option [<a href="https://github.com/doxygen/doxygen/commit/c17bfe7f9ee46c9cf41bbf16ef72607793c80036">view</a>]</li> +<li>Consistency between preprocessor and handling of \cond and \if [<a href="https://github.com/doxygen/doxygen/commit/50019481eb64142248d74bb89ad2c6e2b50e69f2">view</a>]</li> +<li>Consistency for "group" commands [<a href="https://github.com/doxygen/doxygen/commit/3514452268bf860ac7516185adc0907817ccda97">view</a>]</li> +<li>Consistency in headings and layout for template parameters (tparam) [<a href="https://github.com/doxygen/doxygen/commit/626e56ee5c6d6d2f6c51bd64855c70500b28472e">view</a>]</li> +<li>Consistency of Index name in LaTeX output [<a href="https://github.com/doxygen/doxygen/commit/84c791d75dd1e9026cbbc1a338316656b0c03896">view</a>]</li> +<li>Consistency of environment variables between config and code [<a href="https://github.com/doxygen/doxygen/commit/35b7de3e692b127f8192900e1ae1152221afe76b">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/b1a7c9f513fd7c15d86d536cad64338dfd2b617c">view</a>]</li> +<li>Consistent warning messages [<a href="https://github.com/doxygen/doxygen/commit/1a16a1be6eff7c32795455e47c09b9452f7c3a4e">view</a>]</li> +<li>Correct list of not used translator functions [<a href="https://github.com/doxygen/doxygen/commit/ca68fbb7cb8937b0a90fcd1b326c00e6e413e70c">view</a>]</li> +<li>Correct typing error in test 5 [<a href="https://github.com/doxygen/doxygen/commit/a705a7a3f3cd0689e0185d92c4f0542c83b9dcb6">view</a>]</li> +<li>Correct typing error in test 51 [<a href="https://github.com/doxygen/doxygen/commit/03fad37f3bd695d0a30333e8cecc3931c4f870ba">view</a>]</li> +<li>Correct typing error in warning message. [<a href="https://github.com/doxygen/doxygen/commit/bae4bd915ac018c4a3ce681067e0a1a51017e418">view</a>]</li> +<li>Corrected description of XML output for emoji characters [<a href="https://github.com/doxygen/doxygen/commit/7d86cf4c84221696cbd2879809dba1e85d2dbaa6">view</a>]</li> +<li>Corrected warning in case of a not supported output format with \image command. [<a href="https://github.com/doxygen/doxygen/commit/e570fd61c6975ef067efbf6a9c09b79cc58d96f5">view</a>]</li> +<li>Correcting "Definition at line @0 of file @1." [<a href="https://github.com/doxygen/doxygen/commit/afecea64c225ec3c8ef9c84235d9fe091af588ca">view</a>]</li> +<li>Correcting labels for citations [<a href="https://github.com/doxygen/doxygen/commit/e2306e7ff24e72d49893eb9ebc568b468298e236">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/fcb7d9fb380b714e1db9a279ceeba5af4cf59965">view</a>]</li> +<li>Correcting tag example and uniform calling all examples [<a href="https://github.com/doxygen/doxygen/commit/dfdf4323434ec466613e9c358da98a4be868986c">view</a>]</li> +<li>Correcting tag in printdocvisitor [<a href="https://github.com/doxygen/doxygen/commit/6ea7d92e56c929af29aafc7ea072ce465d5961d9">view</a>]</li> +<li>Correcting warning messages and echoing unknown command [<a href="https://github.com/doxygen/doxygen/commit/a68e6c0724f99dfa6cea25f7d56fb6077100fc85">view</a>]</li> +<li>Correction for `doxygen -g` [<a href="https://github.com/doxygen/doxygen/commit/f5e25bba9c01e473991ea6c7d8622a40e5c8f92d">view</a>]</li> +<li>Correction in example of FILE_VERSION_FILTER [<a href="https://github.com/doxygen/doxygen/commit/b278c8f658a2507076840f37287e7fe1e3357b54">view</a>]</li> +<li>Correction in title of FAQ [<a href="https://github.com/doxygen/doxygen/commit/f1148cc406d6e1eefd146f35e766b62bd376cdc3">view</a>]</li> +<li>Correction internal documentation [<a href="https://github.com/doxygen/doxygen/commit/55bdda94dc8661dc740e26e6fb91beb7e2bb7ec7">view</a>]</li> +<li>Correction of some coloring of code comments in VHDL, adding data type 'positive' [<a href="https://github.com/doxygen/doxygen/commit/fdd10f2415c65a9a34d64c985ea5ff0a6f4b6654">view</a>]</li> +<li>Create command for escaped equal sign [<a href="https://github.com/doxygen/doxygen/commit/8292eeebd57aea339ea4ebad2267402d1183b097">view</a>]</li> +<li>Create test possibilities for xhtml and pdf output [<a href="https://github.com/doxygen/doxygen/commit/4575eef95039149eb19c4f5e5bf99e67e36afb5a">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/95a6451107f8964b1c2290e2f4e9761a64be124b">view</a>]</li> +<li>Debug output commentcnv independent of QUIET setting [<a href="https://github.com/doxygen/doxygen/commit/3c0327c1f8461a029c83b744d076617e28cd26bf">view</a>]</li> +<li>Difference between standard and used Doxyfile [<a href="https://github.com/doxygen/doxygen/commit/ed1fb80b55bab16443b211ebeb1cd45bb630b08b">view</a>]</li> +<li>Difference between standard and used Doxyfile (list) [<a href="https://github.com/doxygen/doxygen/commit/c6ec3a813f61b1a5c15d959b923c4f26dd2f62c5">view</a>]</li> +<li>Disabled Appveyor documentation build due to unreliability of MikTeX download [<a href="https://github.com/doxygen/doxygen/commit/8c7b1352474e4da5024cfc3ecc25a486b1d4ef2a">view</a>]</li> +<li>Disabled debug print [<a href="https://github.com/doxygen/doxygen/commit/200353a0886f5ee20101b7af4b55af498adc495f">view</a>]</li> +<li>Documentation EXTENSION_MAPPING [<a href="https://github.com/doxygen/doxygen/commit/967be1c5a03c4e80149c984e5a6b208c9f65f824">view</a>]</li> +<li>Documentation correction [<a href="https://github.com/doxygen/doxygen/commit/f1274b44ad4cb7b4c1a04893b5ad17f830600af4">view</a>]</li> +<li>Documentation correction CLANG option usage [<a href="https://github.com/doxygen/doxygen/commit/0e80abeb4c0966ef66a616c21ecb71583465955a">view</a>]</li> +<li>Documentation correction include command with options [<a href="https://github.com/doxygen/doxygen/commit/731758537f45b602b000cb081d8b642fc54141da">view</a>]</li> +<li>Documentation corrections [<a href="https://github.com/doxygen/doxygen/commit/17c8c0ee8c0dd06938f3b85db6361de24c1bbe58">view</a>]</li> +<li>Documentation internet addresses [<a href="https://github.com/doxygen/doxygen/commit/78a73c52935396f0158ed9dd58909424981bee7e">view</a>]</li> +<li>Documentation update regarding right font usage in architecture chapter [<a href="https://github.com/doxygen/doxygen/commit/824025bdec187c07b744e4a1fa0837b932d13679">view</a>]</li> +<li>Does not generate TOC for markdown [<a href="https://github.com/doxygen/doxygen/commit/ea361e255efa1286566fef7f38c1ce5a01a44f33">view</a>]</li> +<li>Don't link to non existing / not accessible namespaces , in CSharp, in the source code [<a href="https://github.com/doxygen/doxygen/commit/28fe14198cf1da1f6bef42d4cba4cfbec35c7155">view</a>]</li> +<li>Doxygen creates empty image titles for Docbook output [<a href="https://github.com/doxygen/doxygen/commit/2e3c07357f208033b502bb6cc5ae015ff76668de">view</a>]</li> +<li>Doxygen manual doesn't have lines around markdown tables / cells. [<a href="https://github.com/doxygen/doxygen/commit/2c5a80f301032ab4653736f767037f2cd6c0ef61">view</a>]</li> +<li>Doxygen manual is not XHTML compliant [<a href="https://github.com/doxygen/doxygen/commit/565c21b260ca58c9d6b845ecc64f8c4aaa9a9a96">view</a>]</li> +<li>Drop down lists in menu bar missing [<a href="https://github.com/doxygen/doxygen/commit/09ae56fcfc540ab79378ba83fdb95ff28401786c">view</a>]</li> +<li>Enable comma as separator in configuration lists [<a href="https://github.com/doxygen/doxygen/commit/7c76f37c452ad49f1b19a661525ceebafc036a6e">view</a>]</li> +<li>Enable in page table of contents for LaTeX [<a href="https://github.com/doxygen/doxygen/commit/ba30b13cfd4910a5913f080a039fc429ec8a7e3f">view</a>]</li> +<li>Enable in page table of contents for XML and add maximum level to in page table of contents [<a href="https://github.com/doxygen/doxygen/commit/5b735d5118581e3bca686f79de341b8b2e76691f">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/956342ae0b2e09f5e398778c255006f9d26e7b52">view</a>]</li> +<li>Enable possibility of CLANG for Cygwin [<a href="https://github.com/doxygen/doxygen/commit/9e29820e9f0207230ac05facb93f414cb5239ae5">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/b0f638cb3a63ba4e73657ed5fd6276e1814391d7">view</a>]</li> +<li>Enable possibility to run single tests [<a href="https://github.com/doxygen/doxygen/commit/a34987da94ea06a53bf4841e09436db1748bf306">view</a>]</li> +<li>Ensure all language files are reset [<a href="https://github.com/doxygen/doxygen/commit/4663bed1653e1009bf06a6e21907e93ad74f281f">view</a>]</li> +<li>Expand sqlite3gen's breadth, depth, and quality [<a href="https://github.com/doxygen/doxygen/commit/61cddaf2d440aff48868fc3a50185a2788917914">view</a>]</li> +<li>Extending \cite command with '-' and '?' characters. [<a href="https://github.com/doxygen/doxygen/commit/8ef2c893f372d44225f9536bac379387e8d2bc44">view</a>]</li> +<li>Extending tests with extra possibilities [<a href="https://github.com/doxygen/doxygen/commit/8176639e13357f74d317c631a5bf01a60bb543af">view</a>]</li> +<li>Fix French lang build [<a href="https://github.com/doxygen/doxygen/commit/e36d06860e9e1441a402ec8c9a7e03742eb85e9a">view</a>]</li> +<li>Fix HTTPS links [<a href="https://github.com/doxygen/doxygen/commit/4cda8f612403c6feb6b596c101ddf1e5d6fe35e0">view</a>]</li> +<li>Fix VHDL Latex documentation having two chapters with the same name. [<a href="https://github.com/doxygen/doxygen/commit/efd2921d1e3a3f9b7f994673d0af6d70b1888b98">view</a>]</li> +<li>Fix Windows build failure [<a href="https://github.com/doxygen/doxygen/commit/e2bbd54c5eb915c6dfecef1895b336d4b16c9df3">view</a>]</li> +<li>Fix annotation with default value parsing [<a href="https://github.com/doxygen/doxygen/commit/03894677569451502c4bbc0b5f656244357dd907">view</a>]</li> +<li>Fix building with Visual Studio 2013 [<a href="https://github.com/doxygen/doxygen/commit/dcd7390a61abc1da656c10dde282191e651a36fb">view</a>]</li> +<li>Fix for 'Definition at line' points to end of multiple-lined definition for Python #6706 [<a href="https://github.com/doxygen/doxygen/commit/babfc33370e28963f890a5f05355aa7778700ca6">view</a>]</li> +<li>Fix for module quicklinks [<a href="https://github.com/doxygen/doxygen/commit/109bd64ceb2fbe41cd1f94011edd51f03b28fbdb">view</a>]</li> +<li>Fix for unbounded memory usage due to a bug in \ref const matching #6689 [<a href="https://github.com/doxygen/doxygen/commit/f30a5fa78d9460550c7e921e73e11087f90b7db3">view</a>]</li> +<li>Fix potential hangup when merging scopes [<a href="https://github.com/doxygen/doxygen/commit/c506514a32991918e06ec75ebaad3f6eaea1dc9b">view</a>]</li> +<li>Fix regression due to move of markdown processing [<a href="https://github.com/doxygen/doxygen/commit/48e838a1d15c5feb2247f9c93bebc971b871800c">view</a>]</li> +<li>Fix scanner.l for Slice [<a href="https://github.com/doxygen/doxygen/commit/d5fd75574bc816e95f1bcdcdb8e2121949d484d8">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/d0f90ba4a1b7a8e2b5a15e7d8a05d0f484e8f3b5">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/e78925a2142bb254dfc8ffc993a21f54ee4cf461">view</a>]</li> +<li>Fix/New: add variadic function args '...' support to @link [<a href="https://github.com/doxygen/doxygen/commit/6b29c4e55009771545305fe3ec3ba92e8d0ba38e">view</a>]</li> +<li>Fix/New: add variadic function args '...' support to @ref [<a href="https://github.com/doxygen/doxygen/commit/037f465e934ce122c8412b55548a153ad517aba0">view</a>]</li> +<li>Fixed bug in URL [<a href="https://github.com/doxygen/doxygen/commit/fbabed9704a0d9876676122515be2651ab696cf1">view</a>]</li> +<li>Fixed compile errors in clang and gcc [<a href="https://github.com/doxygen/doxygen/commit/2a539e12679a244389c781f6146d7f6bd9c82048">view</a>]</li> +<li>Fixed compiler warning for nested /* in scanner.l [<a href="https://github.com/doxygen/doxygen/commit/c78c338fffbdbb9b2379b1896e647f7cc697da57">view</a>]</li> +<li>Fixed differently by changing root cause for introducing the space [<a href="https://github.com/doxygen/doxygen/commit/890e3567470b0767c5ebe52207d1c75a96e888aa">view</a>]</li> +<li>Fixed documentation to point to GitHub issue tracker [<a href="https://github.com/doxygen/doxygen/commit/d72bfbd272669f22bfa615549dc737199a48dc95">view</a>]</li> +<li>Fixed incorrect XHTML output for test 021 [<a href="https://github.com/doxygen/doxygen/commit/d33a129d784f2b0f823f14a008e929513b302ad3">view</a>]</li> +<li>Fixed logic error [<a href="https://github.com/doxygen/doxygen/commit/301425d57d422431037779e52e0ffcc93e509a35">view</a>]</li> +<li>Fixed merge problem [<a href="https://github.com/doxygen/doxygen/commit/c4b853d749fcaffb2f2c142dcd14e48ab049013e">view</a>]</li> +<li>Fixed one remained compile error in clang [<a href="https://github.com/doxygen/doxygen/commit/3977359bd3fb5527a237c2c0cdb61407f2d85464">view</a>]</li> +<li>Fixed problems with emoji handling and added a test case for it [<a href="https://github.com/doxygen/doxygen/commit/348a8cc72dd481fa9e65e6209946bfeef5716914">view</a>]</li> +<li>Fixed some more small memory leaks [<a href="https://github.com/doxygen/doxygen/commit/b6662b61dd83be32481a1c83e092082e9d797f0a">view</a>]</li> +<li>Fixed two small memory leaks [<a href="https://github.com/doxygen/doxygen/commit/0591146bb406c8601c452f7a8a9e6e24823ce8d9">view</a>]</li> +<li>Fixing coverity messages [<a href="https://github.com/doxygen/doxygen/commit/99f948c038b763028fcb95ef2a65fdbc1d5f9520">view</a>]</li> +<li>Fixing coverity messages (Namespace tag) [<a href="https://github.com/doxygen/doxygen/commit/b7cdfc8d47dc7a7f86605bbbc74aa78501d2bc33">view</a>]</li> +<li>Fixing problem with possible not initialized variable (endless loop in VS 2017 debug) [<a href="https://github.com/doxygen/doxygen/commit/0a4b995cdd7735aaf42c423eed2889db5b8617ef">view</a>]</li> +<li>Fortran code coloring improvements (REAL and comment lines) [<a href="https://github.com/doxygen/doxygen/commit/2e570d3762a412f87fff19ea4a30d60b171a6ea4">view</a>]</li> +<li>Fortran improvements [<a href="https://github.com/doxygen/doxygen/commit/5f11678370f55e491fa9a04b7fd03cd473f8982f">view</a>]</li> +<li>Fortran improvements (2) [<a href="https://github.com/doxygen/doxygen/commit/4013e52ba0f87eb12f8a1c8cb3b2714c0d519a81">view</a>]</li> +<li>Fortran scanner abort message [<a href="https://github.com/doxygen/doxygen/commit/ee12e104e1f43aa4e5301b314f7c620dbbf58ecc">view</a>]</li> +<li>French translation for VHDL additions [<a href="https://github.com/doxygen/doxygen/commit/76098e99ae17ed2bf69e3ac17d97b496d3d706f8">view</a>]</li> +<li>Further simplified the fix [<a href="https://github.com/doxygen/doxygen/commit/f194a3165042428359ec5b5af7e9bad7878c0536">view</a>]</li> +<li>Generating doxygen documentation on Windows (with MikTex) [<a href="https://github.com/doxygen/doxygen/commit/df9a47bd2080ce6385f2a21c6d868755ba7b1f67">view</a>]</li> +<li>Handling Fortran functions in call graphs [<a href="https://github.com/doxygen/doxygen/commit/58cf0414b9bfc5d7216e75e00beb115d91e36245">view</a>]</li> +<li>Heading in rtf. #6522 https://github.com/doxygen/doxygen/issues/6522 [<a href="https://github.com/doxygen/doxygen/commit/b90d628a80179f2a2c82f7d43bbec1df3f8190bb">view</a>]</li> +<li>Ignore build* directories and not just build [<a href="https://github.com/doxygen/doxygen/commit/bad04c77bd626e5badf7654136b6a5dfa20c6b93">view</a>]</li> +<li>Implementation Fortran ENUM / ENUMERATION [<a href="https://github.com/doxygen/doxygen/commit/f5ffd481a44fa5eae225ce728d1777070c4143e1">view</a>]</li> +<li>Implementation of standard generator for docbook output [<a href="https://github.com/doxygen/doxygen/commit/7340b1c0e767b0ee88ce389df653d3d2a77801cd">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/d198c549fb88769912761d75277680438d88d69b">view</a>]</li> +<li>Improved robustness of the emoji feature [<a href="https://github.com/doxygen/doxygen/commit/c3ee766d0ad5721c753581e7f87026614c0730e1">view</a>]</li> +<li>Improvement LaTeX output [<a href="https://github.com/doxygen/doxygen/commit/66a728cdcf50baeef45f78a1180c5ce86fe734af">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/496ebe413b20d406ef4a3b6b2a5966461c30af6c">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/4c7ed9016d24482cb2b46363537c95954a809012">view</a>]</li> +<li>Improvement regarding width and title for docbook [<a href="https://github.com/doxygen/doxygen/commit/f5390468388b80c1f0279f5942d05cb325744b28">view</a>]</li> +<li>Improvements in handling special characters in Latex [<a href="https://github.com/doxygen/doxygen/commit/0f8902275a4c02196d4eb1398e621a349355410a">view</a>]</li> +<li>Include "empty" directories in the documentation if they contain a `.dox` file (or similar) documenting the directory itself. [<a href="https://github.com/doxygen/doxygen/commit/5d79d65df3b66554c8e9630fd3bea322c3e36f0d">view</a>]</li> +<li>Include header for CompilationDatabase [<a href="https://github.com/doxygen/doxygen/commit/9606604a18ac78165b92099bc822ccbddda32bb7">view</a>]</li> +<li>Include height item in XML output [<a href="https://github.com/doxygen/doxygen/commit/43e606f185c7fb334062521eff4905d047f78503">view</a>]</li> +<li>Inconsistency in respect to tgroup in docbook [<a href="https://github.com/doxygen/doxygen/commit/529244ed7be4c289c46c66f0d7aa248e80fbacdf">view</a>]</li> +<li>Incorrect tag sequence for xhtml with class diagram possible [<a href="https://github.com/doxygen/doxygen/commit/2bcda330add9279f777990b450f182be16b67e80">view</a>]</li> +<li>Incorrect closing tags for in page table of contents (XHTML) [<a href="https://github.com/doxygen/doxygen/commit/9ef709e59187f18229fce1f9443547ad93f17be0">view</a>]</li> +<li>Incorrect closing tags for in page table of contents (docbook) [<a href="https://github.com/doxygen/doxygen/commit/71b0a3ab98690e20208280c1715807786d56cbc2">view</a>]</li> +<li>Incorrect number of start / end paragraph tags for xhtml with htmlonly [<a href="https://github.com/doxygen/doxygen/commit/f923f26d602fd991577b7a6676d129bd1642f453">view</a>]</li> +<li>Incorrect number of start / end paragraph tags for xhtml with image command [<a href="https://github.com/doxygen/doxygen/commit/5998b139855faba0e089338b6f53e8c1a6eee814">view</a>]</li> +<li>Incorrect number tag sequence for xhtml with htmlinclude command possible [<a href="https://github.com/doxygen/doxygen/commit/1c0a565a28582d0bc0776988ffef16565563e950">view</a>]</li> +<li>Incorrect tag sequence for xhtml with latexinclude command possible [<a href="https://github.com/doxygen/doxygen/commit/f4a16c46b29817ab0847555a2a51e4fa556e4f16">view</a>]</li> +<li>Incorrect tag sequence possible for images possible in case of xhtml [<a href="https://github.com/doxygen/doxygen/commit/400de444ef9b0569b2803dc4a8e5497c181384ce">view</a>]</li> +<li>Index bugfix [<a href="https://github.com/doxygen/doxygen/commit/846cde72cbd7b3f69393391adca19d009fecb8c3">view</a>]</li> +<li>Index list cannot contain special characters in ids for XHTML [<a href="https://github.com/doxygen/doxygen/commit/6f836989966863932e10678bbcfc4dc5ccbf0ea9">view</a>]</li> +<li>Inline images [<a href="https://github.com/doxygen/doxygen/commit/4682b91364247aafe66b6af472e321511e115e7c">view</a>]</li> +<li>Invalid warnings regarding todos when source file name contains a '-' [<a href="https://github.com/doxygen/doxygen/commit/ee97be448f7adc1285b38bae5adb7e7d48d4c29e">view</a>]</li> +<li>Issue #6631 Code blocks incorrectly formatted in Latex [<a href="https://github.com/doxygen/doxygen/commit/75f2cfcffbd0e4667d668e80b9c69ce56e9bd438">view</a>]</li> +<li>Issue 6411: CSS for Markdown tables do not use HTML_COLORSTYLE_HUE, HTML_COLORSTYLE_SAT config variables [<a href="https://github.com/doxygen/doxygen/commit/359e09007d056646bfe4e3bccf64c0a36ac3ccc1">view</a>]</li> +<li>Issue 6469: Java method calls are ignored in generating call/caller graph with Graphviz [<a href="https://github.com/doxygen/doxygen/commit/f0cf6f2324a2f27214b0216be9f9f0d03d32f401">view</a>]</li> +<li>Issue 6494: asterisks before args and kwargs are ignored in python [<a href="https://github.com/doxygen/doxygen/commit/eef433c0531f8f5321f3034bcc5bed02c006f2cf">view</a>]</li> +<li>Issue_6456 Using # in links causes errors in PDF generation [<a href="https://github.com/doxygen/doxygen/commit/1f849a16671e1c9afff4ee30a5b5a33d271e8684">view</a>]</li> +<li>Issue_6585: Unexpected anchor tags in tag-files [<a href="https://github.com/doxygen/doxygen/commit/fcc956dcd48be631a88df8ffbb7fbe160b7250f2">view</a>]</li> +<li>Keyword register (in code) is deprecated since C++11 [<a href="https://github.com/doxygen/doxygen/commit/24e97b9b61e3fb87fc1b9fbc5362ad24cc40b780">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/b6101af96fb793d9e9bdc0c34f0690545f3a1e56">view</a>]</li> +<li>LaTeX with verbatim part inside a table [<a href="https://github.com/doxygen/doxygen/commit/7a8e1182ba11369f11325d75af552ad7467b1e81">view</a>]</li> +<li>Large CALL / CALLER graphs cannot be processed in LaTeX [<a href="https://github.com/doxygen/doxygen/commit/49079853fc4670c11b46e12eba7cb519608be8b0">view</a>]</li> +<li>Make conanfile creation more readable [<a href="https://github.com/doxygen/doxygen/commit/9fa511f6a7080ce19036088078105fc4e01d3f35">view</a>]</li> +<li>Make it possible to list namespace members in file scope for XML output. [<a href="https://github.com/doxygen/doxygen/commit/f5ed5051c0754f9c7e0e5556114e173016d7f984">view</a>]</li> +<li>Making VHDL error messages more doxygen like [<a href="https://github.com/doxygen/doxygen/commit/12ea0367d27b47280e8d768d04c8c332e9657491">view</a>]</li> +<li>Making the 'tex' part of \makeindex available to the user [<a href="https://github.com/doxygen/doxygen/commit/9b52da49cb544fb0a676e9d12fdbafaf0c1db8cb">view</a>]</li> +<li>Markdown list wrong displayed [<a href="https://github.com/doxygen/doxygen/commit/ed562f3ed5e3208a1351387441028c7831ad14fd">view</a>]</li> +<li>Minor documentation fix [<a href="https://github.com/doxygen/doxygen/commit/ae25f5c41545e17b37d67ab7dabf422f0eb757aa">view</a>]</li> +<li>Minor fixes to local toc logic after feedback [<a href="https://github.com/doxygen/doxygen/commit/b6c724e8ab5caeef1e3d065e4c2fa05740d87859">view</a>]</li> +<li>Minor restructuring [<a href="https://github.com/doxygen/doxygen/commit/f0cc0f5da51faddd490c2cf358614b4ab70cc8ac">view</a>]</li> +<li>Misc. typos [<a href="https://github.com/doxygen/doxygen/commit/436ba3423e9a7d9b482bb4b35ae2fce2249dc762">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/99a836218ca4e20862d3f816361c4586b45560ee">view</a>]</li> +<li>Missing opening round bracket in case of an exception [<a href="https://github.com/doxygen/doxygen/commit/a9f1c59479e316ab277521faa2a629f25fde25ba">view</a>]</li> +<li>More typos [<a href="https://github.com/doxygen/doxygen/commit/03a9454f2b748b3c9b7f5e12b921b25a9c8c98cb">view</a>]</li> +<li>Moved #include "config.h" back to the original place [<a href="https://github.com/doxygen/doxygen/commit/d4b5fa51ec2ad9dd2ba59e16fa85c53f9015755f">view</a>]</li> +<li>Moved duplicated code into dedicated function skipLanguageSpecificKeyword [<a href="https://github.com/doxygen/doxygen/commit/2b6fd3bd70795c1c1cf0accb1a991015ad6b2ba9">view</a>]</li> +<li>Moved local toc data into a separate type for better encapsulation [<a href="https://github.com/doxygen/doxygen/commit/185d6abdc832e7dd66183a2154a13a546414b96f">view</a>]</li> +<li>Multiple `\xreflist` in one page with same key [<a href="https://github.com/doxygen/doxygen/commit/00dff76126039629de0595f76260e94ddc189cbe">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/2e03d23d0385dbbe39f5b6a67ab480734f285e76">view</a>]</li> +<li>Multiple addindex commands in HTML with same name [<a href="https://github.com/doxygen/doxygen/commit/2e072c9e3cbc748ac2cdf6453c16d95cbfabf9d7">view</a>]</li> +<li>Namespace with name docstrings_linebreak [<a href="https://github.com/doxygen/doxygen/commit/ab80e5dff5e3f3f1e9ce473ea25894ca08d1f739">view</a>]</li> +<li>Not showing external project in HTML hierarchy class pages [<a href="https://github.com/doxygen/doxygen/commit/12aeab904791c514325d8ef0e230c13893b0b41a">view</a>]</li> +<li>Numbers in comment disappear [<a href="https://github.com/doxygen/doxygen/commit/e91f7a173e00db8ccb6d217728ccfc71981c4d7b">view</a>]</li> +<li>Numbers overlap the titles in TOC of PDF [<a href="https://github.com/doxygen/doxygen/commit/abca136aa24db05c5a3bcbac3e4708cb01aac2c2">view</a>]</li> +<li>Order resources not only on filename but also dirname [<a href="https://github.com/doxygen/doxygen/commit/dc90259bb67126a6f3e016db2a67499945d6224f">view</a>]</li> +<li>PATCH -- updates reference link with no closing [<a href="https://github.com/doxygen/doxygen/commit/30362ecc6da4123a9d87e9c74a6918aa23cc1403">view</a>]</li> +<li>Path for external commands on windows [<a href="https://github.com/doxygen/doxygen/commit/67375f4cf2dc12ad1445d6b02863954c1c11ee97">view</a>]</li> +<li>Possibility to have a \image command inside a <A> tag [<a href="https://github.com/doxygen/doxygen/commit/fb7592546b89471e62f68892c945ab7db98875b6">view</a>]</li> +<li>Possible fix for the build [<a href="https://github.com/doxygen/doxygen/commit/5c4ee43f13433a0c1de63805cc139b61e9a4d872">view</a>]</li> +<li>Prevent <center> and <div> inside brief descriptions to avoid broken XHTML output [<a href="https://github.com/doxygen/doxygen/commit/bed8623159191e65997b34dba80a804bfd4ea85b">view</a>]</li> +<li>Prevent empty list [<a href="https://github.com/doxygen/doxygen/commit/30299da719fea492d07cf56b37537c45c52c52f0">view</a>]</li> +<li>Prevent empty member list table (XHTML) [<a href="https://github.com/doxygen/doxygen/commit/052fea7e9e03fe2fde177cf6c1a788a58a8f392f">view</a>]</li> +<li>Prevent empty page list table (XHTML) [<a href="https://github.com/doxygen/doxygen/commit/f2e96034620007f7ef2e2c66845237814e80d356">view</a>]</li> +<li>Prevent possible 'QGDict::hashAsciiKey: Invalid null key' warning [<a href="https://github.com/doxygen/doxygen/commit/c94a53eefb4159d238cb5714b6732e145aaeb582">view</a>]</li> +<li>Prevent potential race condition [<a href="https://github.com/doxygen/doxygen/commit/cd9c5bb4ceb6bf9ce48c2861bdf72d5c1ff79752">view</a>]</li> +<li>Print emoji text in case of unknown emoji [<a href="https://github.com/doxygen/doxygen/commit/427d2df4b2d7fc35abac519c646b52a1285aab9f">view</a>]</li> +<li>Problem with TEST_FLAGS when using CMake for Visual Studio [<a href="https://github.com/doxygen/doxygen/commit/33f574a534239b9d9e713b8d4c9d1d1dedf4d177">view</a>]</li> +<li>Problem with \cond in normal comment of test 015 [<a href="https://github.com/doxygen/doxygen/commit/f7663cf300375b4ec8d8fe052f3da48782743919">view</a>]</li> +<li>Problem with code inside a Doxy table in LaTeX [<a href="https://github.com/doxygen/doxygen/commit/ed86c707318c1cb005702ef88dbdaa3a2bee5581">view</a>]</li> +<li>Problems and some enhancements for LaTeX tables [<a href="https://github.com/doxygen/doxygen/commit/d984f7dd21863fc01a1a6ede0878d3dd14af157a">view</a>]</li> +<li>RTF layout regarding References and Referenced by [<a href="https://github.com/doxygen/doxygen/commit/c90505681054d51da05fd476d08c610d3e20ca38">view</a>]</li> +<li>RTF lists more levels and removing extra paragraphs [<a href="https://github.com/doxygen/doxygen/commit/8fc23878b4375546bfb6a9149f009fbe0f7da42f">view</a>]</li> +<li>Readded missing "Span" case to DocStyleChange::styleString [<a href="https://github.com/doxygen/doxygen/commit/6a3d1b3d12e353d0c6ebd642b691e5e2608f8df2">view</a>]</li> +<li>Redundant whitespace removal breaks some C++ links [with test case and Git bisect] (Origin: bugzilla #791942) [<a href="https://github.com/doxygen/doxygen/commit/449a7e2b4ff114a72be573013558bae19672ebbc">view</a>]</li> +<li>Refactored code a bit [<a href="https://github.com/doxygen/doxygen/commit/4ed08b969b575d6dc1a49bca936a43eb43d337e2">view</a>]</li> +<li>Refactored code a bit (use const references and made global functions members) [<a href="https://github.com/doxygen/doxygen/commit/3820f6a841115bd66ed409221c73824ec41ae6ab">view</a>]</li> +<li>Reference text in reference list seen as emoji [<a href="https://github.com/doxygen/doxygen/commit/3540365053d32741b0caab83dbdc79b83a7da1cf">view</a>]</li> +<li>Remove debug statement [<a href="https://github.com/doxygen/doxygen/commit/c8ff40b37ca811e207968b70b7c60cbb7dd58596">view</a>]</li> +<li>Remove debug statements [<a href="https://github.com/doxygen/doxygen/commit/51ab08fa5bded3db613d06909fc6d3109c0a9a4c">view</a>]</li> +<li>Remove default assignment from Translator::trVhdlType() declaration [<a href="https://github.com/doxygen/doxygen/commit/da7ff05881501450be84bc870fdb1931b7e57af2">view</a>]</li> +<li>Remove double line with documented argument from addContentsItem in ftvhelp.cpp [<a href="https://github.com/doxygen/doxygen/commit/8c838d66fae65187692ec5fc04389d0811860a7f">view</a>]</li> +<li>Remove non-english translations [<a href="https://github.com/doxygen/doxygen/commit/1a8ea5cd42a1a7c397c21eb8410244608769be46">view</a>]</li> +<li>Remove obsolete definitions from scanner [<a href="https://github.com/doxygen/doxygen/commit/8e6a8c7c396748051a8cb3bbe5dbe0def92e82cc">view</a>]</li> +<li>Remove obsolete line from README.md [<a href="https://github.com/doxygen/doxygen/commit/69092a59ad04016f2423776425140c3190db6a01">view</a>]</li> +<li>Remove old obsolete docbook generator [<a href="https://github.com/doxygen/doxygen/commit/55063c91fa74921d0c5c7c84d1784ce617f0d53b">view</a>]</li> +<li>Remove some dead code [<a href="https://github.com/doxygen/doxygen/commit/279f5286ecd3f1e7a35bbfedab774d9d93b80f99">view</a>]</li> +<li>Renamed (start/end)SimpleSect to (start/end)Examples. [<a href="https://github.com/doxygen/doxygen/commit/a2ea725e1b0070ee8bcf55683157e67f5f727254">view</a>]</li> +<li>Renamed command and moved duplicated code into a macro [<a href="https://github.com/doxygen/doxygen/commit/dff7c1af885ceb0210f6c529df4e16b0ebf19164">view</a>]</li> +<li>Renamed option and test case numbers [<a href="https://github.com/doxygen/doxygen/commit/63931be561ab140b558418cffdd9b63b522c0e0d">view</a>]</li> +<li>Replace ''printf' with appropriate warn 'message' [<a href="https://github.com/doxygen/doxygen/commit/21021ce13919d19ce5434a3db868c2d4f5a4a53c">view</a>]</li> +<li>Replace calls to trTypeString with trVhdlType in single mode, which is the default. [<a href="https://github.com/doxygen/doxygen/commit/6caac96a48e055807920f724d7de68f764e06441">view</a>]</li> +<li>Replaced replace(QRegExp(..)) by substitute [<a href="https://github.com/doxygen/doxygen/commit/5caff305e828e98939c87191342ea6c33b17e96c">view</a>]</li> +<li>Replaced replace(QRegExp..) by substitute [<a href="https://github.com/doxygen/doxygen/commit/fbca3f69cf0e98a8269c86567c7d24d25723bb82">view</a>]</li> +<li>Resolve inconsistency in formula repositories. [<a href="https://github.com/doxygen/doxygen/commit/5d89de25fa5aa146ab65a88f09a7cc729dea3e51">view</a>]</li> +<li>Restructured code to avoid the need for global state [<a href="https://github.com/doxygen/doxygen/commit/f91bf62416c80cbe3bce8c428e0d3da2afa0d55f">view</a>]</li> +<li>Return VHDL specific text in trClassHierarchyDescription() [<a href="https://github.com/doxygen/doxygen/commit/9f7406d151e4f5d021558e97f5d87a0d9cacecf9">view</a>]</li> +<li>Section label with minus sign not recognized properly. [<a href="https://github.com/doxygen/doxygen/commit/7e185a2e25e4bdbac422299f029a68d1c0c70d6e">view</a>]</li> +<li>Small clarification for REFERENCED_BY_RELATION [<a href="https://github.com/doxygen/doxygen/commit/f69d501429f12a2027bb2dfc100a69a30ca1c7f9">view</a>]</li> +<li>Small correction installation / build procedure [<a href="https://github.com/doxygen/doxygen/commit/44278f94827cf772b9f679a6d9f5ea9d3a663b49">view</a>]</li> +<li>Small corrections in distributed man pages [<a href="https://github.com/doxygen/doxygen/commit/c546894fc6c2af3ff81789893a5fb816c697ab73">view</a>]</li> +<li>Small documentation corrections [<a href="https://github.com/doxygen/doxygen/commit/ec0e5078b3a9db1f24079257287f7aee9e721093">view</a>]</li> +<li>Small problems when displaying python code [<a href="https://github.com/doxygen/doxygen/commit/48817487de116ee526714587900380e53b195f5e">view</a>]</li> +<li>Small problems when having code in LaTeX output [<a href="https://github.com/doxygen/doxygen/commit/7bb6b4792a95626685df5750a6ab79b675c9fd60">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/f4544b7508bde732dacb1172e8200e88ac07c82b">view</a>]</li> +<li>Sorting of index in case of LaTex [<a href="https://github.com/doxygen/doxygen/commit/080389ee153981831ea36e14726b49f756e081bf">view</a>]</li> +<li>Spanish translation for VHDL additions [<a href="https://github.com/doxygen/doxygen/commit/8daabeb2d8650e215b9cfd3e242f687a6f06289c">view</a>]</li> +<li>Spelling of the word Javadoc [<a href="https://github.com/doxygen/doxygen/commit/d42f1d1bbb3cd73f71ee2c57791d31ff37d5d0f1">view</a>]</li> +<li>Synchronize chapter names of doxygen's own documentation. [<a href="https://github.com/doxygen/doxygen/commit/35f3081a603c4e2a8fb95f50a9e8a3593e9ca2b6">view</a>]</li> +<li>Syntax highlighting / code coloring in RTF [<a href="https://github.com/doxygen/doxygen/commit/d05562bb395d0e83be29c8ff5ad76ddbe2a794bc">view</a>]</li> +<li>Tag sequence incorrect for svg image (XHTML) [<a href="https://github.com/doxygen/doxygen/commit/57633468f2f0cfb7d4f93bf58c3e8801824dca8d">view</a>]</li> +<li>Test renumbering [<a href="https://github.com/doxygen/doxygen/commit/1c3317e72f7845f121009c10add4d209d607ce48">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/80ec5521ebee6072f6c43946cb5ef3e812ee777a">view</a>]</li> +<li>Tooltip was twice 'HTML escaped' [<a href="https://github.com/doxygen/doxygen/commit/1de4faf17a4b5de11839220d95e08264303924c5">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/80c321c6856e7923e99c2ece878da5625566712c">view</a>]</li> +<li>Translators updated to version 1.8.15. [<a href="https://github.com/doxygen/doxygen/commit/fc2d26714142033dfec24f846c439464bda65dca">view</a>]</li> +<li>Truncated split bar in HTML output between treeview and normal text area [<a href="https://github.com/doxygen/doxygen/commit/5b11346a3620a0788bd0b9106c159e2f1e6356df">view</a>]</li> +<li>Typos [<a href="https://github.com/doxygen/doxygen/commit/c9f7e5073163ede0a1ca071030d6b3746b943b94">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/2f2c2d79d4104b25d87df86d0843d017b125fcdb">view</a>] , [<a href="https://github.com/doxygen/doxygen/commit/a40b6623967d2ab9817d674b0c13c746784bb020">view</a>]</li> +<li>Unbalanced start of lists resulting in not creatable pdf of rtf document [<a href="https://github.com/doxygen/doxygen/commit/b3838c5b58fc224f2638530694f9b3210d5d49d2">view</a>]</li> +<li>Update Dutch translation for new Slice implementation [<a href="https://github.com/doxygen/doxygen/commit/b85c68bd1ea21c2a5b537fbdd2fe64f440f901d8">view</a>]</li> +<li>Update Dutch translation in respect to new VHDL entries. [<a href="https://github.com/doxygen/doxygen/commit/5b2c378d1932bc548d6b3fcc1841b6c7778c4a97">view</a>]</li> +<li>Updated Hungarian translation [<a href="https://github.com/doxygen/doxygen/commit/992204b8a0d8cd509d8da9f17366054a2b7ffa37">view</a>]</li> +<li>Upgrade to jQuery 1.7.2 to get rid of security scan violations. [<a href="https://github.com/doxygen/doxygen/commit/a9471149d84c618f307f8b3970720d38d01a07a9">view</a>]</li> +<li>Usage of '{', '}' and ',' in ALIAS [<a href="https://github.com/doxygen/doxygen/commit/9766554d63dd85ba8857fe18eb7064c84b0231f6">view</a>]</li> +<li>Use QCStringList::split i.s.o. QStringList::split [<a href="https://github.com/doxygen/doxygen/commit/d0852053693f3f56741657f2a5167950e4d000d5">view</a>]</li> +<li>Version bump for next release [<a href="https://github.com/doxygen/doxygen/commit/27731a36c182f672fe4486c4a9ae390c4ee8a10f">view</a>]</li> +<li>Warning running xmllint for xhtml [<a href="https://github.com/doxygen/doxygen/commit/b851ef73be5ea01726bca0b6d686508e54a4191d">view</a>]</li> +<li>Wrong counting of lines during VHDL code output [<a href="https://github.com/doxygen/doxygen/commit/9447c47c5f569dec436e0facef8c0d99fd12943f">view</a>]</li> +<li>Wrong determination of begin / end tag of formula in markdown. [<a href="https://github.com/doxygen/doxygen/commit/39118ed6cef251d1dbdca98801960eab49154128">view</a>]</li> +<li>Wrong link generated for inherited members when tag files are used. [<a href="https://github.com/doxygen/doxygen/commit/135412e4e9af74cda860205b4c8104098c2b65aa">view</a>]</li> +<li>Wrong separator in index for a.o. Python, C# [<a href="https://github.com/doxygen/doxygen/commit/3e6447119d64b492ed55c3baad17b04dd57f4821">view</a>]</li> +<li>Wrong spelling of word doxygen [<a href="https://github.com/doxygen/doxygen/commit/ea4af8a8579f3a1a9712e13b01a725c61773432b">view</a>]</li> +<li>XHTML image tag mandatory alt attribute [<a href="https://github.com/doxygen/doxygen/commit/66f9f6ec07f29fb737b0d0fe11072ea156581576">view</a>]</li> +<li>XHTML incorrect attribute values for align and valign [<a href="https://github.com/doxygen/doxygen/commit/7db371ebe9d770cb1bd977b5698fd698ab0e399b">view</a>]</li> +<li>XHTML problem with class index table [<a href="https://github.com/doxygen/doxygen/commit/a4c2fd0e8f367531b78683ba920a853e23d101ec">view</a>]</li> +<li>XHTML problem with multiple use of node numbers in id attribute [<a href="https://github.com/doxygen/doxygen/commit/36adf08f19b7c6bce53b42a5de577d578bbd0bea">view</a>]</li> +<li>XHTML problem with name attribute with VHDL name attribute [<a href="https://github.com/doxygen/doxygen/commit/889a302661db7eba47b70a4a61827a5971dbe75e">view</a>]</li> +<li>XML output: avoid warnings with scoped enum values in anonymous namespaces. [<a href="https://github.com/doxygen/doxygen/commit/5db858953001c534341562cfaeba39782abc5ca6">view</a>]</li> +<li>[ImgBot] Optimize images [<a href="https://github.com/doxygen/doxygen/commit/ddfe40a3834f63a2705739c19dc9ab637ecb40df">view</a>]</li> +<li>added PHP7 support for the search engine on HTML output. See: http://php.net/manual/en/language.basic-syntax.phptags.php [<a href="https://github.com/doxygen/doxygen/commit/22b67836d678cea695b977ec648c0aa013339c55">view</a>]</li> +<li>addindex supports also DocBook and RTF [<a href="https://github.com/doxygen/doxygen/commit/5fe01a8548f0ac7f9f7eafdc7d0fc614222267ba">view</a>]</li> +<li>correct typo in comment [<a href="https://github.com/doxygen/doxygen/commit/c15e0f7a41510e89145b0562833821a7a4245c77">view</a>]</li> +<li>declares XMLCodeGenerator in xmlgen.h [<a href="https://github.com/doxygen/doxygen/commit/172016e3d3b5cfe6f51470d43669f794b993da65">view</a>]</li> +<li>doxyparse bugfixes and minor improvements [<a href="https://github.com/doxygen/doxygen/commit/b4ec5e1442ec24b0345ba4362cf202014d8371cf">view</a>]</li> +<li>fix build with qt 5.11, deprecated qt5_use_modules macro was removed, patch by Christophe Giboudeaux [<a href="https://github.com/doxygen/doxygen/commit/a74e24784f4d5b6be5cd2167340a7572d869e220">view</a>]</li> +<li>perlmod syntax correction [<a href="https://github.com/doxygen/doxygen/commit/6a0f531d104d80fb1ab220ea952d3c45d3474f57">view</a>]</li> +<li>redundant input_filter runs significantly reduce performance when FILTER_SOURCE_FILES and INLINE_SOURCES are both enabled #6395 [<a href="https://github.com/doxygen/doxygen/commit/608b5c375a3ea265afe96dd8b921b4b81d6b354d">view</a>]</li> +<li>sqlite3: fix missing external_file view schema col [<a href="https://github.com/doxygen/doxygen/commit/eec2d3b6a9f80715fb590b0fb67b7fe87ba5fee7">view</a>]</li> +<li>sqlite3: require sqlite >= 3.9.0 [<a href="https://github.com/doxygen/doxygen/commit/e4f408eb4aad7fb035847616debe68fe115e2ae4">view</a>]</li> +</ul> +<p> +\endhtmlonly + \subsection log_1_8_14 Release 1.8.14 \htmlonly <b>(release date 25-12-2017)</b> <a name="1.8.14"></a> </p> <ul> -<li>Add language type attribute to programlisting tag [<a href="http://github.com/doxygen/doxygen/commit/141dbfd5a4f79c98da14a1b414c6db4e1b34618b">view</a>]</li> -<li>Add links behind nav entries "Namespaces" and "Files" (matching "Classes") [<a href="http://github.com/doxygen/doxygen/commit/464919adf1cdae9057ff840f40c60472b4c30bfd">view</a>]</li> -<li>Allow case insensitive file pattern matching based on CASE_SENSE_NAMES [<a href="http://github.com/doxygen/doxygen/commit/bd759f9a3aa4096bc8574ea45ad6b23fed830742">view</a>]</li> -<li>Async load of mathjax javascript [<a href="http://github.com/doxygen/doxygen/commit/340e516dbf5efd3ae21d964e92369e97b252e4ab">view</a>]</li> -<li>Avoid generating unused dir_* output files for non HTML output formats [<a href="http://github.com/doxygen/doxygen/commit/38987846ec0752b8deee7bab69c7890aa861af00">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3138">3138</a> - Wrong spacing in function names with french language (latex output) [<a href="http://github.com/doxygen/doxygen/commit/9d478d2fedd091ceac8e689507676292f5455882">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4289">4289</a> - does ALIAS work for VHDL code? [<a href="http://github.com/doxygen/doxygen/commit/05364c46f806e73cce76be37a6a31230d0468507">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5468">5468</a> - (UnFriendlyTemplate) Spurious warning when documenting friend template [<a href="http://github.com/doxygen/doxygen/commit/2fe7bc7f1df9a2483355b0743b5e0455aaccc969">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5525">5525</a> - parser misinterpreting fortran [<a href="http://github.com/doxygen/doxygen/commit/747fc768476aef8b8b70fdd78749702a410dcd29">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5724">5724</a> - Duplicate attribute (target="_top" target="_top") generated in .SVG files [<a href="http://github.com/doxygen/doxygen/commit/97bfbfa6c4d4eb07ac8c60545086c3370e9683b8">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6128">6128</a> - Usage of underscore's in parameter names [<a href="http://github.com/doxygen/doxygen/commit/c10af45c61a1f9b25c514f397ace16c94cc7c8df">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6135">6135</a> - [1.8.13 Regression] Segfault building the breathe docs [<a href="http://github.com/doxygen/doxygen/commit/0f02761a158a5e9ddbd5801682482af8986dbc35">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6137">6137</a> - XML Parsing Error for operator<< methods when outputting to XHTML [<a href="http://github.com/doxygen/doxygen/commit/0e8530e42b69c909ef2c26468b24dfb88cc0997f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6139">6139</a> - Menu does not work without Javascript [<a href="http://github.com/doxygen/doxygen/commit/1be97720b7820361e85242d08d4cac3e46570bfe">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6141">6141</a> - Too greedy behavior of @ref const matching [<a href="http://github.com/doxygen/doxygen/commit/04001c8926fb0f37dfcf284b3637b182125bba75">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6169">6169</a> - doxygen build fails [<a href="http://github.com/doxygen/doxygen/commit/bb5c8dd29782ecbb05a4ef9788f2507e9a156848">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6170">6170</a> - Add "\~" command to internatioalization article [<a href="http://github.com/doxygen/doxygen/commit/e204b982eebd54bd15148a520da6608935e33e50">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6223">6223</a> - Problem RTF output: The class list "classes" within the namespace report is wrong indicated. [<a href="http://github.com/doxygen/doxygen/commit/753c06281f6b2e9172c449157fc9f863063232e3">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6238">6238</a> - parsing error in Fortran file with preprocessing [<a href="http://github.com/doxygen/doxygen/commit/2f5e22a4be9d237a150d04659bf6abec1349fbd9">view</a>] -, [<a href="http://github.com/doxygen/doxygen/commit/ec12eb659d8c8e78ad4bb15d1a941ac3153a0f66">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6259">6259</a> - Problem parsing c++ gnu::visibility [<a href="http://github.com/doxygen/doxygen/commit/d8001efd89146e04d92f5ea41ab27a7de09b6c53">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6262">6262</a> - C++: False warning message when inheriting class from tag file [<a href="http://github.com/doxygen/doxygen/commit/aac84d5624b96d8937ff543ab8724c269b8726ab">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6273">6273</a> - Error in markdown emphasis examples [<a href="http://github.com/doxygen/doxygen/commit/81956108f2e6e97bf4dd0f1011fcae1b5c4c4408">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6277">6277</a> - Increasing access of inherited C++ members with 'using...' is not recognized by Doxygen [<a href="http://github.com/doxygen/doxygen/commit/9468ede259153cf79eb8d61635389744e9a2ee7d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6286">6286</a> - C++ parameter from lambda not recognized [<a href="http://github.com/doxygen/doxygen/commit/7b43be09e513ea6f86f9ca53ce05c94d63eada4c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6290">6290</a> - Doxygen not showing the public, non-static member function [<a href="http://github.com/doxygen/doxygen/commit/137b2e8dd03a98e692c2f6d813b47f19f2c64e5b">view</a>]</li> -<li>CMake: avoid if() around the whole contents of documentation CMakeLists.txt [<a href="http://github.com/doxygen/doxygen/commit/62e87408cb7094eeac130775e62d5b7a6f4a79c9">view</a>]</li> -<li>CMake: avoid if() around the whole contents of plugin CMakeLists.txt [<a href="http://github.com/doxygen/doxygen/commit/7c1c75a2c5583415d178e0e46a1a356bef9b0c84">view</a>]</li> -<li>CMake: let CMake handle the C++ standard setting if target_compile_features() is used [<a href="http://github.com/doxygen/doxygen/commit/ca7e60edd370949cfb2adb83ca0b532bb3fdc441">view</a>]</li> -<li>CMake: let file(MAKE_DIRECTORY) create all directories at once [<a href="http://github.com/doxygen/doxygen/commit/0d7be027a6fea2ac198dded58f8b55cda1bbe962">view</a>]</li> -<li>CMake: remove CUSTOM_(LINK|INCLUDE)_DIR [<a href="http://github.com/doxygen/doxygen/commit/28f09783b1e45a827729abaca61f963dd869381b">view</a>]</li> -<li>CMake: remove needless variable expansions [<a href="http://github.com/doxygen/doxygen/commit/975fb19eb07bc65ef48ddd5f26bf6be2736d0e0a">view</a>]</li> -<li>CMake: remove unused program searching [<a href="http://github.com/doxygen/doxygen/commit/02f726b63e2b3a2ed4c5da43c164dcaad5fcfe94">view</a>]</li> -<li>CMake: search for Qt5 only in config file mode [<a href="http://github.com/doxygen/doxygen/commit/ac5ca4ef86ad50232be75a65fab99302307b7795">view</a>]</li> -<li>CMake: use GNUInstallDirs module for man pages directory [<a href="http://github.com/doxygen/doxygen/commit/fcf5fecb64d5c194430e10cbe52482b14224d645">view</a>]</li> -<li>CMake: use add_test to create a test [<a href="http://github.com/doxygen/doxygen/commit/b54b843accb97105ae4afaf24136e33bfd1ea9d4">view</a>]</li> -<li>CMakeLists: Avoid MSVC iconv changes for MinGW builds [<a href="http://github.com/doxygen/doxygen/commit/9532e0f19532e9d76c3f1092d131af91125a2dff">view</a>]</li> -<li>Call endMemberItem consistently. [<a href="http://github.com/doxygen/doxygen/commit/1aafbbc97bdb643cae8be036f2b9ab569ca7f15e">view</a>]</li> -<li>Change navtree collapsed list icon [<a href="http://github.com/doxygen/doxygen/commit/b3869a3ed82957c1785dc955876885f8b73a020b">view</a>]</li> -<li>Code color of , (comma) together with only in use statement [<a href="http://github.com/doxygen/doxygen/commit/6f7264f4a16f5b1240291c6d33a0e4cc98ba30e4">view</a>]</li> -<li>Corrected small type [<a href="http://github.com/doxygen/doxygen/commit/4360982dbaee9b32973a95ba88290022d0643e10">view</a>]</li> -<li>Correction display of backtick in LaTeX [<a href="http://github.com/doxygen/doxygen/commit/beaa386ca97341e66ad673660c808993240df637">view</a>]</li> -<li>Correction of non reachable links and redirected links in documentation. [<a href="http://github.com/doxygen/doxygen/commit/31cf78d223e52fe078ad9b0651672aeb73926065">view</a>]</li> -<li>Documentation, correct referenced file [<a href="http://github.com/doxygen/doxygen/commit/c93a7c34e7efd5ae1f2c3e4d230e29a333bc237a">view</a>]</li> -<li>Doxygen/VHDLdocgen: [<a href="http://github.com/doxygen/doxygen/commit/77e0cf86eadbec22b81e26e083ffc831240869da">view</a>]</li> -<li>Encode invalid XML characters instead of skipping them. [<a href="http://github.com/doxygen/doxygen/commit/b6a7abf02652b74872b9c676fcfa545e18d9bde7">view</a>]</li> -<li>Expose TOC placeholder in XML output. [<a href="http://github.com/doxygen/doxygen/commit/fe760977e2cb643b94fbf21847e0c81e8a080966">view</a>]</li> -<li>Expose underlying enum type in the XML output. [<a href="http://github.com/doxygen/doxygen/commit/17bceb8f4580535de52d19e8cadf0d088f972bef">view</a>]</li> -<li>Fetch filename property from object instead of hardcoded duplicated string [<a href="http://github.com/doxygen/doxygen/commit/84fd1fecfe2de7b4f8c88e1923ef7d5958dc70b0">view</a>]</li> -<li>Fix C# property initializer parsing [<a href="http://github.com/doxygen/doxygen/commit/14a0bcc74a121525917aefc8c9034e283e94884b">view</a>]</li> -<li>Fix for regression in XML output generation after fixing bug 789168 [<a href="http://github.com/doxygen/doxygen/commit/1a1fdbed64de6ce01959b2e4d0988be823fb6bad">view</a>]</li> -<li>Fix <a href="https://github.com/doxygen/doxygen/issues/6210">6210</a>. [<a href="http://github.com/doxygen/doxygen/commit/c87f730fe4bc40f72ed5fa52fe032a7bdf2d549c">view</a>]</li> -<li>Fix minor markup issue in the documentation. [<a href="http://github.com/doxygen/doxygen/commit/b4df85466cf0447d46f311046fc5b3fe062b957f">view</a>]</li> -<li>Fix not initialized pointer when parser is starting on a new file. [<a href="http://github.com/doxygen/doxygen/commit/52fb4cd5bb085960476e0cd256cc81db1370839d">view</a>]</li> -<li>Fix typo [<a href="http://github.com/doxygen/doxygen/commit/d6e9db71645d895450993972ed41406c1cf1fc52">view</a>]</li> -<li>Fix: add missing newline char '\n' [<a href="http://github.com/doxygen/doxygen/commit/856a43cfe08179ebbcebe656262b0229925547c8">view</a>]</li> -<li>Fix: add missing semicolon ';' at end of line [<a href="http://github.com/doxygen/doxygen/commit/507880a0c7ed6029ce7ede2e85d23a9650a3f6bf">view</a>]</li> -<li>Fix: change 'CMakefiles' to 'CMakeFiles' (the 'F' is uppercase) [<a href="http://github.com/doxygen/doxygen/commit/bcc09aa2ba01eff458a00aff853d58ed8213a5da">view</a>]</li> -<li>Fix: perl script regexp to toggle flex debug information [<a href="http://github.com/doxygen/doxygen/commit/b11b19badf4ef7318512c28f448dbecd6a47a715">view</a>]</li> -<li>Fixed problem where automatic line breaking caused missing vertical bars in the parameter table for Latex output. [<a href="http://github.com/doxygen/doxygen/commit/5fc82b2275e202438ac61b070ac5f4be0df792d6">view</a>]</li> -<li>Fixes for cross platform build with new LLVM/CLANG version [<a href="http://github.com/doxygen/doxygen/commit/b0aae61c97966cb9d424b500d7ced5bdf500d8db">view</a>]</li> -<li>Fixup man page NAME section when page has title [<a href="http://github.com/doxygen/doxygen/commit/9d0908359363dbb43236767669c214721700acf7">view</a>]</li> -<li>Function declaration following a function definition incorrectly listed as calling dependencing [<a href="http://github.com/doxygen/doxygen/commit/436fc7ed1158d517dd6f6d25aa3e05568f8c3d94">view</a>]</li> -<li>Further cleanup of lodepng code [<a href="http://github.com/doxygen/doxygen/commit/c627108f3315144f5d9fb84d0197502b939caf7d">view</a>]</li> -<li>Implement "double-space line breaks" syntax in Markdown [<a href="http://github.com/doxygen/doxygen/commit/e4596c7eab90ba4d307e2c212cefeab8ac820269">view</a>]</li> -<li>Improve Chinese translation [<a href="http://github.com/doxygen/doxygen/commit/ded5247523ec8d47129405df3999ce391cca9e2d">view</a>]</li> -<li>Inline attribute got reset for functions returning an explicit struct type [<a href="http://github.com/doxygen/doxygen/commit/127a43d464790dd0312794fe7ae1d92247cd9eef">view</a>]</li> -<li>Isolated none-existing posix threading functions on Android [<a href="http://github.com/doxygen/doxygen/commit/4e25f081847cf2717ad561214e90d9750da5a511">view</a>]</li> -<li>Marks JS as freely licensed [<a href="http://github.com/doxygen/doxygen/commit/6b5617e5a4c87afd2c7f2f7b8cb03de2b6735627">view</a>]</li> -<li>Misc. doxy and comment typos [<a href="http://github.com/doxygen/doxygen/commit/1764f7a0f199b9f2a85f885cfd0f1804f8292c49">view</a>]</li> -<li>Misc. typos [<a href="http://github.com/doxygen/doxygen/commit/9fd7f3aeb4c2e78bda669bf4ef6fff1c12c062a4">view</a>]</li> -<li>New table features mentioned in the documentation were not enabled. [<a href="http://github.com/doxygen/doxygen/commit/c120ac4762331513305e8a19fd9b267b2d4f9e41">view</a>]</li> -<li>Pass strings as const references. [<a href="http://github.com/doxygen/doxygen/commit/ebf75c1fe8a0ff2cc9235155b6d63367944d6342">view</a>]</li> -<li>Physical newlines in ALIASES configuration tags. [<a href="http://github.com/doxygen/doxygen/commit/d6801c4c5eaeebc5e14f5d1cd7c312ad82c1dbbd">view</a>]</li> -<li>Propagate language information to all <programlisting> XML elements. [<a href="http://github.com/doxygen/doxygen/commit/eaf8edbac7e6a1873aa5c4ff0df063cd367351d6">view</a>]</li> -<li>Properly copy images for the XML output. [<a href="http://github.com/doxygen/doxygen/commit/507dd0a60dd12c61ff2088db419187efc928c010">view</a>]</li> -<li>Provide dot path to plantuml [<a href="http://github.com/doxygen/doxygen/commit/c24cb9a74ef0af854455047f29f9925d79ac0195">view</a>]</li> -<li>Provide information about enum type "strongness" in the XML output. [<a href="http://github.com/doxygen/doxygen/commit/169cad806ea795e5c425fd397aa0de54cbc0a81e">view</a>]</li> -<li>Provide page brief in <briefdescription> of XML output. [<a href="http://github.com/doxygen/doxygen/commit/bd2cf98e75c600e0c2f5ae95301df8745d65571a">view</a>]</li> -<li>Provide template parameters also for type aliases in the XML output. [<a href="http://github.com/doxygen/doxygen/commit/21f0ca0085c034a37df07c1ab690472bada0a1f1">view</a>]</li> -<li>Removed -Wno-deprecated flag from bison as it is not support on the bison 2.3 that ships with XCode [<a href="http://github.com/doxygen/doxygen/commit/6c288bf0e7548117aa358719aaecffedcc579590">view</a>]</li> -<li>Restore 'make tests' rule [<a href="http://github.com/doxygen/doxygen/commit/7ce59c9fbd5e99619a9ab0ac6177d21e6aca49c7">view</a>]</li> -<li>Restore Makefile in vhdlparser dir [<a href="http://github.com/doxygen/doxygen/commit/aee944fe954de993a4273fafef6b5f0c726be7f3">view</a>]</li> -<li>Spelling correction [<a href="http://github.com/doxygen/doxygen/commit/4cca51612a50a9016be5adbd6ccdc26c03d12b58">view</a>]</li> -<li>Stripped unused LodePNG code to prevent false positives for coverity [<a href="http://github.com/doxygen/doxygen/commit/64865ad3e91fffe6e50b51b29ae2a54126f80126">view</a>]</li> -<li>Suppresses warning for XML <see langword="..."/> [<a href="http://github.com/doxygen/doxygen/commit/a3c5958b437b5dc9de91de5f40917ec53532b60a">view</a>]</li> -<li>Suppression warnings about deprecated directive [<a href="http://github.com/doxygen/doxygen/commit/cd0faad90e9b6ce83fa1f7b4fb27a39357b0cae3">view</a>]</li> -<li>Update .travis.yml [<a href="http://github.com/doxygen/doxygen/commit/5f028fd744526148aace4c971f739c9876b6108a">view</a>] -, [<a href="http://github.com/doxygen/doxygen/commit/b7fc8a384b091f5761159d263ec27e30c3160a50">view</a>]</li> -<li>Update mathjax path [<a href="http://github.com/doxygen/doxygen/commit/57e69ba26eff5eac4b31b088cd7d3dfa7532f12c">view</a>]</li> -<li>Updated translator_de.h to doxygen 1.8.13 [<a href="http://github.com/doxygen/doxygen/commit/a9e3d5378ffbef542045d04239482bd6fec33e15">view</a>]</li> -<li>Use hidden symbol visibility by default [<a href="http://github.com/doxygen/doxygen/commit/dcb3b2d0b888902a062eefd8200ea194ed1c42d6">view</a>]</li> -<li>Use language identifier instead of file extension for language attribute [<a href="http://github.com/doxygen/doxygen/commit/ed9acb6e1bb81a2eec334180f7b8c1bf0598b444">view</a>]</li> -<li>Use language in stead of lang for language name attribute [<a href="http://github.com/doxygen/doxygen/commit/4e4741221f4290412ef4a6b6bbfe9799abafaf6c">view</a>]</li> -<li>Update of the Brazillian translation [<a href="http://github.com/doxygen/doxygen/commit/d283dfcdcaa0837e84d7995676d436fa04e96d1f">view</a>]</li> -<li>[preprocessing.doc] typo amended [<a href="http://github.com/doxygen/doxygen/commit/6b67a64bd0bd1c6759294c323433dbd7d37df6ac">view</a>]</li> -<li>add decimal to base identifier [<a href="http://github.com/doxygen/doxygen/commit/9cbc1a04e584e83d91ff3f7501f38b0a825e1953">view</a>]</li> -<li>add the number of conditionals path and bugfix [<a href="http://github.com/doxygen/doxygen/commit/20af63f43e583a31dfe93f78807aa868f9b9ff14">view</a>]</li> -<li>build: fix the way lang_cfg.h is generated [<a href="http://github.com/doxygen/doxygen/commit/cc3a9e611c15f32ae4913a87306699db60758245">view</a> and <a href="http://github.com/doxygen/doxygen/commit/a4b6f59e0c99457ba8f4f71782e51d50b7a1057f">view</a>]</li> -<li>bump version number for the development version/next release [<a href="http://github.com/doxygen/doxygen/commit/0a6d8bf6f5ef3a537de6ab517d0ae9c4f5d558d0">view</a>]</li> -<li>const-ify [<a href="http://github.com/doxygen/doxygen/commit/5df4341210ec2374b8b7c09f5df3cd8f4ff60f65">view</a>]</li> -<li>dot.cpp: Fix DotGfxHierarchyTable first class node loop [<a href="http://github.com/doxygen/doxygen/commit/c7348b4483ace9b5608fbbe949eab02921eb0e70">view</a>]</li> -<li>fix spelling [<a href="http://github.com/doxygen/doxygen/commit/bca94d6ca30bde5f01dd17a83cfa63268c0ca664">view</a>]</li> -<li>fix test to support new programlisting attribute [<a href="http://github.com/doxygen/doxygen/commit/a9963fd94acd5839e818890b6a356d6b335c1f74">view</a>]</li> -<li>fix typo [<a href="http://github.com/doxygen/doxygen/commit/f88ebaf9f23c3151f312400d77150eeeeb8158c2">view</a>]</li> -<li>fixes vhdl literal bug [<a href="http://github.com/doxygen/doxygen/commit/6c387a6be9128ced0b89f6fc75946cd1a85096fb">view</a>]</li> -<li>line continuation characters inside comments embedded in a macro definition appeared in the output [<a href="http://github.com/doxygen/doxygen/commit/898b6044194d5967099adfadab454cd09a4f360e">view</a>]</li> -<li>make use of clang compilation database [<a href="http://github.com/doxygen/doxygen/commit/818aefcecf3cca986c971cd236bd7b77337db955">view</a>]</li> -<li>new addon doxyparse, a source parsing engine [<a href="http://github.com/doxygen/doxygen/commit/e6dcc3b6c6dd449800eeebc172c1d15367d61d74">view</a>]</li> -<li>sqlite3gen: add index on params [<a href="http://github.com/doxygen/doxygen/commit/3b3d1edeacde99719456b8f1616077707a5a2012">view</a>]</li> -<li>sqlite3gen: add missing protectedsettable column [<a href="http://github.com/doxygen/doxygen/commit/ba8e4323290da4cb6de59060c77fe02a4df694b4">view</a>]</li> -<li>sqlite3gen: add openDbConnection [<a href="http://github.com/doxygen/doxygen/commit/5596fcd158e7c53638324cea8ba3da31b2c32620">view</a>]</li> -<li>sqlite3gen: start checking operations status [<a href="http://github.com/doxygen/doxygen/commit/74cebdbbbc2c267c254ab2c337ee06250ab8424d">view</a>]</li> -<li>sqlite3gen: use sqlite3_exec for schema setup [<a href="http://github.com/doxygen/doxygen/commit/1ec8f0eb9169fc3f9ab82b60712a332bf60728bf">view</a>]</li> -<li>typos [<a href="http://github.com/doxygen/doxygen/commit/5711b54b4813a2f4ce3b858e496ac846cbda69e5">view</a>]</li> -<li>update compound.xsd to add language attribute [<a href="http://github.com/doxygen/doxygen/commit/0259d2a8bf9571e06873b80df96fd2ff29723dbc">view</a>]</li> -<li>using YAML in the output of "doxyparse" [<a href="http://github.com/doxygen/doxygen/commit/82dbb5fe863e13175eda130dcc728b102101ccda">view</a>]</li> +<li>Add language type attribute to programlisting tag [<a href="https://github.com/doxygen/doxygen/commit/141dbfd5a4f79c98da14a1b414c6db4e1b34618b">view</a>]</li> +<li>Add links behind nav entries "Namespaces" and "Files" (matching "Classes") [<a href="https://github.com/doxygen/doxygen/commit/464919adf1cdae9057ff840f40c60472b4c30bfd">view</a>]</li> +<li>Allow case insensitive file pattern matching based on CASE_SENSE_NAMES [<a href="https://github.com/doxygen/doxygen/commit/bd759f9a3aa4096bc8574ea45ad6b23fed830742">view</a>]</li> +<li>Async load of mathjax javascript [<a href="https://github.com/doxygen/doxygen/commit/340e516dbf5efd3ae21d964e92369e97b252e4ab">view</a>]</li> +<li>Avoid generating unused dir_* output files for non HTML output formats [<a href="https://github.com/doxygen/doxygen/commit/38987846ec0752b8deee7bab69c7890aa861af00">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3138">3138</a> - Wrong spacing in function names with french language (latex output) [<a href="https://github.com/doxygen/doxygen/commit/9d478d2fedd091ceac8e689507676292f5455882">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4289">4289</a> - does ALIAS work for VHDL code? [<a href="https://github.com/doxygen/doxygen/commit/05364c46f806e73cce76be37a6a31230d0468507">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5468">5468</a> - (UnFriendlyTemplate) Spurious warning when documenting friend template [<a href="https://github.com/doxygen/doxygen/commit/2fe7bc7f1df9a2483355b0743b5e0455aaccc969">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5525">5525</a> - parser misinterpreting fortran [<a href="https://github.com/doxygen/doxygen/commit/747fc768476aef8b8b70fdd78749702a410dcd29">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5724">5724</a> - Duplicate attribute (target="_top" target="_top") generated in .SVG files [<a href="https://github.com/doxygen/doxygen/commit/97bfbfa6c4d4eb07ac8c60545086c3370e9683b8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6128">6128</a> - Usage of underscore's in parameter names [<a href="https://github.com/doxygen/doxygen/commit/c10af45c61a1f9b25c514f397ace16c94cc7c8df">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6135">6135</a> - [1.8.13 Regression] Segfault building the breathe docs [<a href="https://github.com/doxygen/doxygen/commit/0f02761a158a5e9ddbd5801682482af8986dbc35">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6137">6137</a> - XML Parsing Error for operator<< methods when outputting to XHTML [<a href="https://github.com/doxygen/doxygen/commit/0e8530e42b69c909ef2c26468b24dfb88cc0997f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6139">6139</a> - Menu does not work without Javascript [<a href="https://github.com/doxygen/doxygen/commit/1be97720b7820361e85242d08d4cac3e46570bfe">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6141">6141</a> - Too greedy behavior of @ref const matching [<a href="https://github.com/doxygen/doxygen/commit/04001c8926fb0f37dfcf284b3637b182125bba75">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6169">6169</a> - doxygen build fails [<a href="https://github.com/doxygen/doxygen/commit/bb5c8dd29782ecbb05a4ef9788f2507e9a156848">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6170">6170</a> - Add "\~" command to internatioalization article [<a href="https://github.com/doxygen/doxygen/commit/e204b982eebd54bd15148a520da6608935e33e50">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6223">6223</a> - Problem RTF output: The class list "classes" within the namespace report is wrong indicated. [<a href="https://github.com/doxygen/doxygen/commit/753c06281f6b2e9172c449157fc9f863063232e3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6238">6238</a> - parsing error in Fortran file with preprocessing [<a href="https://github.com/doxygen/doxygen/commit/2f5e22a4be9d237a150d04659bf6abec1349fbd9">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/ec12eb659d8c8e78ad4bb15d1a941ac3153a0f66">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6259">6259</a> - Problem parsing c++ gnu::visibility [<a href="https://github.com/doxygen/doxygen/commit/d8001efd89146e04d92f5ea41ab27a7de09b6c53">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6262">6262</a> - C++: False warning message when inheriting class from tag file [<a href="https://github.com/doxygen/doxygen/commit/aac84d5624b96d8937ff543ab8724c269b8726ab">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6273">6273</a> - Error in markdown emphasis examples [<a href="https://github.com/doxygen/doxygen/commit/81956108f2e6e97bf4dd0f1011fcae1b5c4c4408">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6277">6277</a> - Increasing access of inherited C++ members with 'using...' is not recognized by Doxygen [<a href="https://github.com/doxygen/doxygen/commit/9468ede259153cf79eb8d61635389744e9a2ee7d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6286">6286</a> - C++ parameter from lambda not recognized [<a href="https://github.com/doxygen/doxygen/commit/7b43be09e513ea6f86f9ca53ce05c94d63eada4c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6290">6290</a> - Doxygen not showing the public, non-static member function [<a href="https://github.com/doxygen/doxygen/commit/137b2e8dd03a98e692c2f6d813b47f19f2c64e5b">view</a>]</li> +<li>CMake: avoid if() around the whole contents of documentation CMakeLists.txt [<a href="https://github.com/doxygen/doxygen/commit/62e87408cb7094eeac130775e62d5b7a6f4a79c9">view</a>]</li> +<li>CMake: avoid if() around the whole contents of plugin CMakeLists.txt [<a href="https://github.com/doxygen/doxygen/commit/7c1c75a2c5583415d178e0e46a1a356bef9b0c84">view</a>]</li> +<li>CMake: let CMake handle the C++ standard setting if target_compile_features() is used [<a href="https://github.com/doxygen/doxygen/commit/ca7e60edd370949cfb2adb83ca0b532bb3fdc441">view</a>]</li> +<li>CMake: let file(MAKE_DIRECTORY) create all directories at once [<a href="https://github.com/doxygen/doxygen/commit/0d7be027a6fea2ac198dded58f8b55cda1bbe962">view</a>]</li> +<li>CMake: remove CUSTOM_(LINK|INCLUDE)_DIR [<a href="https://github.com/doxygen/doxygen/commit/28f09783b1e45a827729abaca61f963dd869381b">view</a>]</li> +<li>CMake: remove needless variable expansions [<a href="https://github.com/doxygen/doxygen/commit/975fb19eb07bc65ef48ddd5f26bf6be2736d0e0a">view</a>]</li> +<li>CMake: remove unused program searching [<a href="https://github.com/doxygen/doxygen/commit/02f726b63e2b3a2ed4c5da43c164dcaad5fcfe94">view</a>]</li> +<li>CMake: search for Qt5 only in config file mode [<a href="https://github.com/doxygen/doxygen/commit/ac5ca4ef86ad50232be75a65fab99302307b7795">view</a>]</li> +<li>CMake: use GNUInstallDirs module for man pages directory [<a href="https://github.com/doxygen/doxygen/commit/fcf5fecb64d5c194430e10cbe52482b14224d645">view</a>]</li> +<li>CMake: use add_test to create a test [<a href="https://github.com/doxygen/doxygen/commit/b54b843accb97105ae4afaf24136e33bfd1ea9d4">view</a>]</li> +<li>CMakeLists: Avoid MSVC iconv changes for MinGW builds [<a href="https://github.com/doxygen/doxygen/commit/9532e0f19532e9d76c3f1092d131af91125a2dff">view</a>]</li> +<li>Call endMemberItem consistently. [<a href="https://github.com/doxygen/doxygen/commit/1aafbbc97bdb643cae8be036f2b9ab569ca7f15e">view</a>]</li> +<li>Change navtree collapsed list icon [<a href="https://github.com/doxygen/doxygen/commit/b3869a3ed82957c1785dc955876885f8b73a020b">view</a>]</li> +<li>Code color of , (comma) together with only in use statement [<a href="https://github.com/doxygen/doxygen/commit/6f7264f4a16f5b1240291c6d33a0e4cc98ba30e4">view</a>]</li> +<li>Corrected small type [<a href="https://github.com/doxygen/doxygen/commit/4360982dbaee9b32973a95ba88290022d0643e10">view</a>]</li> +<li>Correction display of backtick in LaTeX [<a href="https://github.com/doxygen/doxygen/commit/beaa386ca97341e66ad673660c808993240df637">view</a>]</li> +<li>Correction of non reachable links and redirected links in documentation. [<a href="https://github.com/doxygen/doxygen/commit/31cf78d223e52fe078ad9b0651672aeb73926065">view</a>]</li> +<li>Documentation, correct referenced file [<a href="https://github.com/doxygen/doxygen/commit/c93a7c34e7efd5ae1f2c3e4d230e29a333bc237a">view</a>]</li> +<li>Doxygen/VHDLdocgen: [<a href="https://github.com/doxygen/doxygen/commit/77e0cf86eadbec22b81e26e083ffc831240869da">view</a>]</li> +<li>Encode invalid XML characters instead of skipping them. [<a href="https://github.com/doxygen/doxygen/commit/b6a7abf02652b74872b9c676fcfa545e18d9bde7">view</a>]</li> +<li>Expose TOC placeholder in XML output. [<a href="https://github.com/doxygen/doxygen/commit/fe760977e2cb643b94fbf21847e0c81e8a080966">view</a>]</li> +<li>Expose underlying enum type in the XML output. [<a href="https://github.com/doxygen/doxygen/commit/17bceb8f4580535de52d19e8cadf0d088f972bef">view</a>]</li> +<li>Fetch filename property from object instead of hardcoded duplicated string [<a href="https://github.com/doxygen/doxygen/commit/84fd1fecfe2de7b4f8c88e1923ef7d5958dc70b0">view</a>]</li> +<li>Fix C# property initializer parsing [<a href="https://github.com/doxygen/doxygen/commit/14a0bcc74a121525917aefc8c9034e283e94884b">view</a>]</li> +<li>Fix for regression in XML output generation after fixing bug 789168 [<a href="https://github.com/doxygen/doxygen/commit/1a1fdbed64de6ce01959b2e4d0988be823fb6bad">view</a>]</li> +<li>Fix <a href="https://github.com/doxygen/doxygen/issues/6210">6210</a>. [<a href="https://github.com/doxygen/doxygen/commit/c87f730fe4bc40f72ed5fa52fe032a7bdf2d549c">view</a>]</li> +<li>Fix minor markup issue in the documentation. [<a href="https://github.com/doxygen/doxygen/commit/b4df85466cf0447d46f311046fc5b3fe062b957f">view</a>]</li> +<li>Fix not initialized pointer when parser is starting on a new file. [<a href="https://github.com/doxygen/doxygen/commit/52fb4cd5bb085960476e0cd256cc81db1370839d">view</a>]</li> +<li>Fix typo [<a href="https://github.com/doxygen/doxygen/commit/d6e9db71645d895450993972ed41406c1cf1fc52">view</a>]</li> +<li>Fix: add missing newline char '\n' [<a href="https://github.com/doxygen/doxygen/commit/856a43cfe08179ebbcebe656262b0229925547c8">view</a>]</li> +<li>Fix: add missing semicolon ';' at end of line [<a href="https://github.com/doxygen/doxygen/commit/507880a0c7ed6029ce7ede2e85d23a9650a3f6bf">view</a>]</li> +<li>Fix: change 'CMakefiles' to 'CMakeFiles' (the 'F' is uppercase) [<a href="https://github.com/doxygen/doxygen/commit/bcc09aa2ba01eff458a00aff853d58ed8213a5da">view</a>]</li> +<li>Fix: perl script regexp to toggle flex debug information [<a href="https://github.com/doxygen/doxygen/commit/b11b19badf4ef7318512c28f448dbecd6a47a715">view</a>]</li> +<li>Fixed problem where automatic line breaking caused missing vertical bars in the parameter table for Latex output. [<a href="https://github.com/doxygen/doxygen/commit/5fc82b2275e202438ac61b070ac5f4be0df792d6">view</a>]</li> +<li>Fixes for cross platform build with new LLVM/CLANG version [<a href="https://github.com/doxygen/doxygen/commit/b0aae61c97966cb9d424b500d7ced5bdf500d8db">view</a>]</li> +<li>Fixup man page NAME section when page has title [<a href="https://github.com/doxygen/doxygen/commit/9d0908359363dbb43236767669c214721700acf7">view</a>]</li> +<li>Function declaration following a function definition incorrectly listed as calling dependencing [<a href="https://github.com/doxygen/doxygen/commit/436fc7ed1158d517dd6f6d25aa3e05568f8c3d94">view</a>]</li> +<li>Further cleanup of lodepng code [<a href="https://github.com/doxygen/doxygen/commit/c627108f3315144f5d9fb84d0197502b939caf7d">view</a>]</li> +<li>Implement "double-space line breaks" syntax in Markdown [<a href="https://github.com/doxygen/doxygen/commit/e4596c7eab90ba4d307e2c212cefeab8ac820269">view</a>]</li> +<li>Improve Chinese translation [<a href="https://github.com/doxygen/doxygen/commit/ded5247523ec8d47129405df3999ce391cca9e2d">view</a>]</li> +<li>Inline attribute got reset for functions returning an explicit struct type [<a href="https://github.com/doxygen/doxygen/commit/127a43d464790dd0312794fe7ae1d92247cd9eef">view</a>]</li> +<li>Isolated none-existing posix threading functions on Android [<a href="https://github.com/doxygen/doxygen/commit/4e25f081847cf2717ad561214e90d9750da5a511">view</a>]</li> +<li>Marks JS as freely licensed [<a href="https://github.com/doxygen/doxygen/commit/6b5617e5a4c87afd2c7f2f7b8cb03de2b6735627">view</a>]</li> +<li>Misc. doxy and comment typos [<a href="https://github.com/doxygen/doxygen/commit/1764f7a0f199b9f2a85f885cfd0f1804f8292c49">view</a>]</li> +<li>Misc. typos [<a href="https://github.com/doxygen/doxygen/commit/9fd7f3aeb4c2e78bda669bf4ef6fff1c12c062a4">view</a>]</li> +<li>New table features mentioned in the documentation were not enabled. [<a href="https://github.com/doxygen/doxygen/commit/c120ac4762331513305e8a19fd9b267b2d4f9e41">view</a>]</li> +<li>Pass strings as const references. [<a href="https://github.com/doxygen/doxygen/commit/ebf75c1fe8a0ff2cc9235155b6d63367944d6342">view</a>]</li> +<li>Physical newlines in ALIASES configuration tags. [<a href="https://github.com/doxygen/doxygen/commit/d6801c4c5eaeebc5e14f5d1cd7c312ad82c1dbbd">view</a>]</li> +<li>Propagate language information to all <programlisting> XML elements. [<a href="https://github.com/doxygen/doxygen/commit/eaf8edbac7e6a1873aa5c4ff0df063cd367351d6">view</a>]</li> +<li>Properly copy images for the XML output. [<a href="https://github.com/doxygen/doxygen/commit/507dd0a60dd12c61ff2088db419187efc928c010">view</a>]</li> +<li>Provide dot path to plantuml [<a href="https://github.com/doxygen/doxygen/commit/c24cb9a74ef0af854455047f29f9925d79ac0195">view</a>]</li> +<li>Provide information about enum type "strongness" in the XML output. [<a href="https://github.com/doxygen/doxygen/commit/169cad806ea795e5c425fd397aa0de54cbc0a81e">view</a>]</li> +<li>Provide page brief in <briefdescription> of XML output. [<a href="https://github.com/doxygen/doxygen/commit/bd2cf98e75c600e0c2f5ae95301df8745d65571a">view</a>]</li> +<li>Provide template parameters also for type aliases in the XML output. [<a href="https://github.com/doxygen/doxygen/commit/21f0ca0085c034a37df07c1ab690472bada0a1f1">view</a>]</li> +<li>Removed -Wno-deprecated flag from bison as it is not support on the bison 2.3 that ships with XCode [<a href="https://github.com/doxygen/doxygen/commit/6c288bf0e7548117aa358719aaecffedcc579590">view</a>]</li> +<li>Restore 'make tests' rule [<a href="https://github.com/doxygen/doxygen/commit/7ce59c9fbd5e99619a9ab0ac6177d21e6aca49c7">view</a>]</li> +<li>Restore Makefile in vhdlparser dir [<a href="https://github.com/doxygen/doxygen/commit/aee944fe954de993a4273fafef6b5f0c726be7f3">view</a>]</li> +<li>Spelling correction [<a href="https://github.com/doxygen/doxygen/commit/4cca51612a50a9016be5adbd6ccdc26c03d12b58">view</a>]</li> +<li>Stripped unused LodePNG code to prevent false positives for coverity [<a href="https://github.com/doxygen/doxygen/commit/64865ad3e91fffe6e50b51b29ae2a54126f80126">view</a>]</li> +<li>Suppresses warning for XML <see langword="..."/> [<a href="https://github.com/doxygen/doxygen/commit/a3c5958b437b5dc9de91de5f40917ec53532b60a">view</a>]</li> +<li>Suppression warnings about deprecated directive [<a href="https://github.com/doxygen/doxygen/commit/cd0faad90e9b6ce83fa1f7b4fb27a39357b0cae3">view</a>]</li> +<li>Update .travis.yml [<a href="https://github.com/doxygen/doxygen/commit/5f028fd744526148aace4c971f739c9876b6108a">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/b7fc8a384b091f5761159d263ec27e30c3160a50">view</a>]</li> +<li>Update mathjax path [<a href="https://github.com/doxygen/doxygen/commit/57e69ba26eff5eac4b31b088cd7d3dfa7532f12c">view</a>]</li> +<li>Updated translator_de.h to doxygen 1.8.13 [<a href="https://github.com/doxygen/doxygen/commit/a9e3d5378ffbef542045d04239482bd6fec33e15">view</a>]</li> +<li>Use hidden symbol visibility by default [<a href="https://github.com/doxygen/doxygen/commit/dcb3b2d0b888902a062eefd8200ea194ed1c42d6">view</a>]</li> +<li>Use language identifier instead of file extension for language attribute [<a href="https://github.com/doxygen/doxygen/commit/ed9acb6e1bb81a2eec334180f7b8c1bf0598b444">view</a>]</li> +<li>Use language in stead of lang for language name attribute [<a href="https://github.com/doxygen/doxygen/commit/4e4741221f4290412ef4a6b6bbfe9799abafaf6c">view</a>]</li> +<li>Update of the Brazillian translation [<a href="https://github.com/doxygen/doxygen/commit/d283dfcdcaa0837e84d7995676d436fa04e96d1f">view</a>]</li> +<li>[preprocessing.doc] typo amended [<a href="https://github.com/doxygen/doxygen/commit/6b67a64bd0bd1c6759294c323433dbd7d37df6ac">view</a>]</li> +<li>add decimal to base identifier [<a href="https://github.com/doxygen/doxygen/commit/9cbc1a04e584e83d91ff3f7501f38b0a825e1953">view</a>]</li> +<li>add the number of conditionals path and bugfix [<a href="https://github.com/doxygen/doxygen/commit/20af63f43e583a31dfe93f78807aa868f9b9ff14">view</a>]</li> +<li>build: fix the way lang_cfg.h is generated [<a href="https://github.com/doxygen/doxygen/commit/cc3a9e611c15f32ae4913a87306699db60758245">view</a> and <a href="https://github.com/doxygen/doxygen/commit/a4b6f59e0c99457ba8f4f71782e51d50b7a1057f">view</a>]</li> +<li>bump version number for the development version/next release [<a href="https://github.com/doxygen/doxygen/commit/0a6d8bf6f5ef3a537de6ab517d0ae9c4f5d558d0">view</a>]</li> +<li>const-ify [<a href="https://github.com/doxygen/doxygen/commit/5df4341210ec2374b8b7c09f5df3cd8f4ff60f65">view</a>]</li> +<li>dot.cpp: Fix DotGfxHierarchyTable first class node loop [<a href="https://github.com/doxygen/doxygen/commit/c7348b4483ace9b5608fbbe949eab02921eb0e70">view</a>]</li> +<li>fix spelling [<a href="https://github.com/doxygen/doxygen/commit/bca94d6ca30bde5f01dd17a83cfa63268c0ca664">view</a>]</li> +<li>fix test to support new programlisting attribute [<a href="https://github.com/doxygen/doxygen/commit/a9963fd94acd5839e818890b6a356d6b335c1f74">view</a>]</li> +<li>fix typo [<a href="https://github.com/doxygen/doxygen/commit/f88ebaf9f23c3151f312400d77150eeeeb8158c2">view</a>]</li> +<li>fixes vhdl literal bug [<a href="https://github.com/doxygen/doxygen/commit/6c387a6be9128ced0b89f6fc75946cd1a85096fb">view</a>]</li> +<li>line continuation characters inside comments embedded in a macro definition appeared in the output [<a href="https://github.com/doxygen/doxygen/commit/898b6044194d5967099adfadab454cd09a4f360e">view</a>]</li> +<li>make use of clang compilation database [<a href="https://github.com/doxygen/doxygen/commit/818aefcecf3cca986c971cd236bd7b77337db955">view</a>]</li> +<li>new addon doxyparse, a source parsing engine [<a href="https://github.com/doxygen/doxygen/commit/e6dcc3b6c6dd449800eeebc172c1d15367d61d74">view</a>]</li> +<li>sqlite3gen: add index on params [<a href="https://github.com/doxygen/doxygen/commit/3b3d1edeacde99719456b8f1616077707a5a2012">view</a>]</li> +<li>sqlite3gen: add missing protectedsettable column [<a href="https://github.com/doxygen/doxygen/commit/ba8e4323290da4cb6de59060c77fe02a4df694b4">view</a>]</li> +<li>sqlite3gen: add openDbConnection [<a href="https://github.com/doxygen/doxygen/commit/5596fcd158e7c53638324cea8ba3da31b2c32620">view</a>]</li> +<li>sqlite3gen: start checking operations status [<a href="https://github.com/doxygen/doxygen/commit/74cebdbbbc2c267c254ab2c337ee06250ab8424d">view</a>]</li> +<li>sqlite3gen: use sqlite3_exec for schema setup [<a href="https://github.com/doxygen/doxygen/commit/1ec8f0eb9169fc3f9ab82b60712a332bf60728bf">view</a>]</li> +<li>typos [<a href="https://github.com/doxygen/doxygen/commit/5711b54b4813a2f4ce3b858e496ac846cbda69e5">view</a>]</li> +<li>update compound.xsd to add language attribute [<a href="https://github.com/doxygen/doxygen/commit/0259d2a8bf9571e06873b80df96fd2ff29723dbc">view</a>]</li> +<li>using YAML in the output of "doxyparse" [<a href="https://github.com/doxygen/doxygen/commit/82dbb5fe863e13175eda130dcc728b102101ccda">view</a>]</li> </ul> <p> \endhtmlonly @@ -135,60 +536,60 @@ <a name="1.8.13"></a> </p> <ul> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5279">5279</a> - C++/CLI indexed property not documented [<a href="http://github.com/doxygen/doxygen/commit/80656d68a0838483ea2988adf028e2d85292a109">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5280">5280</a> - Grouping of results fail when using built-in javascript search [<a href="http://github.com/doxygen/doxygen/commit/0615b1b023f7888dfdbeee7673d6d0bcc7b803df">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5400">5400</a> - 'static' and 'throw' C++ keywords not colored [<a href="http://github.com/doxygen/doxygen/commit/794ae9cbc40b73d00cce5f0096b53f18e1d3e325">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5476">5476</a> - wrong collaboration diagram when in template used scoped argument type [<a href="http://github.com/doxygen/doxygen/commit/adb44ae6ef1d102caea1338373be078bf4a5d640">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5882">5882</a> - Multiline //!< behavior changed [<a href="http://github.com/doxygen/doxygen/commit/d4accb68ff6536dcf128236b7e1e8d0239d4ffc2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5917">5917</a> - C++11 "using" type alias for function pointer with no arguments is formatted incorrectly [<a href="http://github.com/doxygen/doxygen/commit/d4c24c28ffcf7143bcdfecee1c8b55f704274d37">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5930">5930</a> - fails to build with an unreleased python version [<a href="http://github.com/doxygen/doxygen/commit/5c6f0fdf1ebbd4c28f524a0347fe556ff2421504">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6044">6044</a> - doxygen warning parsing C++11 "using" declaration [<a href="http://github.com/doxygen/doxygen/commit/5730198d20511d93c20aa7870fc2bd11f478db85">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6060">6060</a> - Tag file size double between each run [<a href="http://github.com/doxygen/doxygen/commit/155bd0110585d401d0f898baf9c69b2ec46833ff">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6062">6062</a> - C++11 ref-qualifiers do not appear in Member Function Documentation section [<a href="http://github.com/doxygen/doxygen/commit/9ef1bf94eef1af591c40102b930fef95250b8142">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6063">6063</a> - Web-page bug: Comment blocks in VHDL [<a href="http://github.com/doxygen/doxygen/commit/6c6b847bcd16cc818165b51e62dc11a947f7e084">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6067">6067</a> - French description for "Namespace Members" is wrong and causes fatal javascript error [<a href="http://github.com/doxygen/doxygen/commit/b5e1e195bc207c7bb93df4e51253f9f3a1026a3d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6068">6068</a> - Class name 'internal' breaks class hierarchy in C++ [<a href="http://github.com/doxygen/doxygen/commit/b93dbcdab6dfc5681ec49f1d567698b7c4dc6846">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6084">6084</a> - __xxx__ not interpreted as markdown when xxx begins with a non-word character (e.g. __-1__) [<a href="http://github.com/doxygen/doxygen/commit/a95c07ecc0a2f1205883d8420a8280c5701c901c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6093">6093</a> - Underscores in type or member name cause unwanted hyphenation in PDF output Data Fields [<a href="http://github.com/doxygen/doxygen/commit/d571efb062fbe17d7257f3971e3db6c9cba833d0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6094">6094</a> - "name" attribute of image map not urlencoded, not working in Chrome [<a href="http://github.com/doxygen/doxygen/commit/6300c03b6201ca7981388a6d3c01486f8a8adba0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6105">6105</a> - Please add HTML classes to "Definition at..." & "Referenced by..." for CSS [<a href="http://github.com/doxygen/doxygen/commit/d2593e56cd52ecee2424d844916f95e12fef27c8">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6109">6109</a> - INLINE_SIMPLE_STRUCTS with enums in classes does not work [<a href="http://github.com/doxygen/doxygen/commit/71d7a9399db016cba83ccd63c6ba7e0fac1cd44d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6115">6115</a> - Modify in some pronunciation expression in Korean [<a href="http://github.com/doxygen/doxygen/commit/cd3e39d7db634d9e11afc8e46269eb509ae10e40">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6123">6123</a> - Unknown reference in manual [<a href="http://github.com/doxygen/doxygen/commit/dde15c9748053ecb68ba046ebd0fdfe625be0e2e">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6125">6125</a> - referencing Python files via tagfile broken [<a href="http://github.com/doxygen/doxygen/commit/dc02bb977ebc6c683012c106e16e0190ac72b454">view</a>]</li> -<li>Add NVARCHAR as a SQL type [<a href="http://github.com/doxygen/doxygen/commit/6a85240e65bb5e3d59d2cd161eb8cf241e27ed7d">view</a>]</li> -<li>Add mscgen images to index.qhp [<a href="http://github.com/doxygen/doxygen/commit/f50d9ed4cdc7d4e7884bb64fddb01b017b880778">view</a>]</li> -<li>Add sql syntax highlighting to code blocks [<a href="http://github.com/doxygen/doxygen/commit/adf4a90340921cf7a120ae918af776355cf8ca0f">view</a>]</li> -<li>Add support for more CSS formatting and column/row spanning in markdown tables [<a href="http://github.com/doxygen/doxygen/commit/7f35695022d3baa8fc8c8d1b9a9f3368a0963871">view</a>]</li> -<li>Added missing language value for SQL to XML output [<a href="http://github.com/doxygen/doxygen/commit/b196b1a28151d75d9546dcc407947fbf29789cc5">view</a>]</li> -<li>Adds plantuml support Qt compressed help file [<a href="http://github.com/doxygen/doxygen/commit/c7b740d96288f19e31bd35405306c49bb9fc20c4">view</a>]</li> -<li>Check for undocumented params warnings if members detailed documentation is not written [<a href="http://github.com/doxygen/doxygen/commit/bae3c91812f8a6f845337f8c32d55495c4aa3522">view</a>]</li> -<li>Cleanup: removed redundant =NULL from interfaces, or replaced by =0 where it was needed. [<a href="http://github.com/doxygen/doxygen/commit/3b8b2e1a4b846a5c1b87f4a8ddc837462709895a">view</a>]</li> -<li>Clear header/footer information in ConfigImpl for postProcess [<a href="http://github.com/doxygen/doxygen/commit/5881b1bb624ee6115dc635ba44366d259cc6a10f">view</a>]</li> -<li>Documentation small corrections [<a href="http://github.com/doxygen/doxygen/commit/ae033324fed6ff9b3febe12b5777f19c04e065d2">view</a>]</li> -<li>Doxygen error: Found ';' while parsing initializer list [<a href="http://github.com/doxygen/doxygen/commit/985faf287233badf65fa33d21bde17afa6970d60">view</a>]</li> -<li>Fix for PlantUML configuration [<a href="http://github.com/doxygen/doxygen/commit/701598719c7c4301f2614b38184dfb37cd1704bc">view</a>]</li> -<li>Fix plantuml generation issue [<a href="http://github.com/doxygen/doxygen/commit/6c87c75e197e673d74949839d59fe8b0842e86ff">view</a>]</li> -<li>Fix: Add missing jquery.js, dynsections.js & optional svgpan.js to QCH file [<a href="http://github.com/doxygen/doxygen/commit/bf9415698e53d79b4b94bdf64a52be4347eb3150">view</a>]</li> -<li>Fix: replace deprecated {\bf with \textbf{ in LaTeX generator [<a href="http://github.com/doxygen/doxygen/commit/1d85e00dd1238f74babf0a1d7eeeaf3e2ba659f2">view</a>]</li> -<li>Fixed constexp.y bison issue [<a href="http://github.com/doxygen/doxygen/commit/e12ec76f044b07d4e4fe167c93103be2879abaca">view</a>]</li> -<li>Fixed cross referencing issue when using bitfields. [<a href="http://github.com/doxygen/doxygen/commit/2a5357a0fac644ffb1bf49569344b9bc57603a29">view</a>]</li> -<li>Fixed jump to anchor issue when navigating to source file [<a href="http://github.com/doxygen/doxygen/commit/94b726f4273df805846d7fdcd2e9d5bd7627f628">view</a>]</li> -<li>Fixed problem generating per letter namespace member index pages. [<a href="http://github.com/doxygen/doxygen/commit/2b722b57f20e044b061423109bfa7168a7a1b913">view</a>]</li> -<li>Fixed svgpan.js issue with Chrome causing empty SVG graphs [<a href="http://github.com/doxygen/doxygen/commit/5f01f783e2387a5d44ad70fbff5365aa0e5df938">view</a>]</li> -<li>Fixed typedef and define strings for Spanish translation [<a href="http://github.com/doxygen/doxygen/commit/f69eb5d79885788d6bfc6303f34f5f016b326f1c">view</a>]</li> -<li>Fixup man only output to use generator state push pop [<a href="http://github.com/doxygen/doxygen/commit/051fb8a536e1d52aa0a0422186975852dd139c06">view</a>]</li> -<li>For manpages remove trailing dash when no brief description [<a href="http://github.com/doxygen/doxygen/commit/98d3f8e7d581c589e7bd1a7faf98fc6736847cf1">view</a>]</li> -<li>Made the RTF output honor the PAPER_TYPE option. [<a href="http://github.com/doxygen/doxygen/commit/5e894a760a6584ade2f5417e2577b66c65b51fd9">view</a>]</li> -<li>New classes for generated HTML div elements. [<a href="http://github.com/doxygen/doxygen/commit/84017cac3bc9d08aa95a90cf0e44b913c492c939">view</a>]</li> -<li>Option for PlantUML configuration file [<a href="http://github.com/doxygen/doxygen/commit/d4b0b88e189027d514fa84de75100ff1fe6e681a">view</a>]</li> -<li>Removed x flag from util* source files [<a href="http://github.com/doxygen/doxygen/commit/16d57031188698c7e79dd64554efc56044e91c8f">view</a>]</li> -<li>Replaced section marker before members by diamond shaped bullet [<a href="http://github.com/doxygen/doxygen/commit/da21ad5b5147182c2117751d8c517b81dd57277f">view</a>]</li> -<li>Reverting pull request #537 until it will be fixed [<a href="http://github.com/doxygen/doxygen/commit/fd67ef1f66afb0b51a784866b806ba8f04e12dfb">view</a>]</li> -<li>Update Swedish translation [<a href="http://github.com/doxygen/doxygen/commit/78b43ec9b5469a9e757cd658d21907fa593ed1aa">view</a>]</li> -<li>Updated the Polish translation [<a href="http://github.com/doxygen/doxygen/commit/158b7bdb697d19736692105161af3e891ae7732e">view</a>]</li> -<li>bison: use %declarations instead of command line options. [<a href="http://github.com/doxygen/doxygen/commit/97c2c1d6f323d6d38dda4820c00ca8ca8f5b6940">view</a>]</li> -<li>flex: use %option instead of command line options. [<a href="http://github.com/doxygen/doxygen/commit/0bdb01d4b6ced07750d8e449fd4ffab5554d8a24">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5279">5279</a> - C++/CLI indexed property not documented [<a href="https://github.com/doxygen/doxygen/commit/80656d68a0838483ea2988adf028e2d85292a109">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5280">5280</a> - Grouping of results fail when using built-in javascript search [<a href="https://github.com/doxygen/doxygen/commit/0615b1b023f7888dfdbeee7673d6d0bcc7b803df">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5400">5400</a> - 'static' and 'throw' C++ keywords not colored [<a href="https://github.com/doxygen/doxygen/commit/794ae9cbc40b73d00cce5f0096b53f18e1d3e325">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5476">5476</a> - wrong collaboration diagram when in template used scoped argument type [<a href="https://github.com/doxygen/doxygen/commit/adb44ae6ef1d102caea1338373be078bf4a5d640">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5882">5882</a> - Multiline //!< behavior changed [<a href="https://github.com/doxygen/doxygen/commit/d4accb68ff6536dcf128236b7e1e8d0239d4ffc2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5917">5917</a> - C++11 "using" type alias for function pointer with no arguments is formatted incorrectly [<a href="https://github.com/doxygen/doxygen/commit/d4c24c28ffcf7143bcdfecee1c8b55f704274d37">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5930">5930</a> - fails to build with an unreleased python version [<a href="https://github.com/doxygen/doxygen/commit/5c6f0fdf1ebbd4c28f524a0347fe556ff2421504">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6044">6044</a> - doxygen warning parsing C++11 "using" declaration [<a href="https://github.com/doxygen/doxygen/commit/5730198d20511d93c20aa7870fc2bd11f478db85">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6060">6060</a> - Tag file size double between each run [<a href="https://github.com/doxygen/doxygen/commit/155bd0110585d401d0f898baf9c69b2ec46833ff">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6062">6062</a> - C++11 ref-qualifiers do not appear in Member Function Documentation section [<a href="https://github.com/doxygen/doxygen/commit/9ef1bf94eef1af591c40102b930fef95250b8142">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6063">6063</a> - Web-page bug: Comment blocks in VHDL [<a href="https://github.com/doxygen/doxygen/commit/6c6b847bcd16cc818165b51e62dc11a947f7e084">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6067">6067</a> - French description for "Namespace Members" is wrong and causes fatal javascript error [<a href="https://github.com/doxygen/doxygen/commit/b5e1e195bc207c7bb93df4e51253f9f3a1026a3d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6068">6068</a> - Class name 'internal' breaks class hierarchy in C++ [<a href="https://github.com/doxygen/doxygen/commit/b93dbcdab6dfc5681ec49f1d567698b7c4dc6846">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6084">6084</a> - __xxx__ not interpreted as markdown when xxx begins with a non-word character (e.g. __-1__) [<a href="https://github.com/doxygen/doxygen/commit/a95c07ecc0a2f1205883d8420a8280c5701c901c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6093">6093</a> - Underscores in type or member name cause unwanted hyphenation in PDF output Data Fields [<a href="https://github.com/doxygen/doxygen/commit/d571efb062fbe17d7257f3971e3db6c9cba833d0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6094">6094</a> - "name" attribute of image map not urlencoded, not working in Chrome [<a href="https://github.com/doxygen/doxygen/commit/6300c03b6201ca7981388a6d3c01486f8a8adba0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6105">6105</a> - Please add HTML classes to "Definition at..." & "Referenced by..." for CSS [<a href="https://github.com/doxygen/doxygen/commit/d2593e56cd52ecee2424d844916f95e12fef27c8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6109">6109</a> - INLINE_SIMPLE_STRUCTS with enums in classes does not work [<a href="https://github.com/doxygen/doxygen/commit/71d7a9399db016cba83ccd63c6ba7e0fac1cd44d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6115">6115</a> - Modify in some pronunciation expression in Korean [<a href="https://github.com/doxygen/doxygen/commit/cd3e39d7db634d9e11afc8e46269eb509ae10e40">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6123">6123</a> - Unknown reference in manual [<a href="https://github.com/doxygen/doxygen/commit/dde15c9748053ecb68ba046ebd0fdfe625be0e2e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6125">6125</a> - referencing Python files via tagfile broken [<a href="https://github.com/doxygen/doxygen/commit/dc02bb977ebc6c683012c106e16e0190ac72b454">view</a>]</li> +<li>Add NVARCHAR as a SQL type [<a href="https://github.com/doxygen/doxygen/commit/6a85240e65bb5e3d59d2cd161eb8cf241e27ed7d">view</a>]</li> +<li>Add mscgen images to index.qhp [<a href="https://github.com/doxygen/doxygen/commit/f50d9ed4cdc7d4e7884bb64fddb01b017b880778">view</a>]</li> +<li>Add sql syntax highlighting to code blocks [<a href="https://github.com/doxygen/doxygen/commit/adf4a90340921cf7a120ae918af776355cf8ca0f">view</a>]</li> +<li>Add support for more CSS formatting and column/row spanning in markdown tables [<a href="https://github.com/doxygen/doxygen/commit/7f35695022d3baa8fc8c8d1b9a9f3368a0963871">view</a>]</li> +<li>Added missing language value for SQL to XML output [<a href="https://github.com/doxygen/doxygen/commit/b196b1a28151d75d9546dcc407947fbf29789cc5">view</a>]</li> +<li>Adds plantuml support Qt compressed help file [<a href="https://github.com/doxygen/doxygen/commit/c7b740d96288f19e31bd35405306c49bb9fc20c4">view</a>]</li> +<li>Check for undocumented params warnings if members detailed documentation is not written [<a href="https://github.com/doxygen/doxygen/commit/bae3c91812f8a6f845337f8c32d55495c4aa3522">view</a>]</li> +<li>Cleanup: removed redundant =NULL from interfaces, or replaced by =0 where it was needed. [<a href="https://github.com/doxygen/doxygen/commit/3b8b2e1a4b846a5c1b87f4a8ddc837462709895a">view</a>]</li> +<li>Clear header/footer information in ConfigImpl for postProcess [<a href="https://github.com/doxygen/doxygen/commit/5881b1bb624ee6115dc635ba44366d259cc6a10f">view</a>]</li> +<li>Documentation small corrections [<a href="https://github.com/doxygen/doxygen/commit/ae033324fed6ff9b3febe12b5777f19c04e065d2">view</a>]</li> +<li>Doxygen error: Found ';' while parsing initializer list [<a href="https://github.com/doxygen/doxygen/commit/985faf287233badf65fa33d21bde17afa6970d60">view</a>]</li> +<li>Fix for PlantUML configuration [<a href="https://github.com/doxygen/doxygen/commit/701598719c7c4301f2614b38184dfb37cd1704bc">view</a>]</li> +<li>Fix plantuml generation issue [<a href="https://github.com/doxygen/doxygen/commit/6c87c75e197e673d74949839d59fe8b0842e86ff">view</a>]</li> +<li>Fix: Add missing jquery.js, dynsections.js & optional svgpan.js to QCH file [<a href="https://github.com/doxygen/doxygen/commit/bf9415698e53d79b4b94bdf64a52be4347eb3150">view</a>]</li> +<li>Fix: replace deprecated {\bf with \textbf{ in LaTeX generator [<a href="https://github.com/doxygen/doxygen/commit/1d85e00dd1238f74babf0a1d7eeeaf3e2ba659f2">view</a>]</li> +<li>Fixed constexp.y bison issue [<a href="https://github.com/doxygen/doxygen/commit/e12ec76f044b07d4e4fe167c93103be2879abaca">view</a>]</li> +<li>Fixed cross referencing issue when using bitfields. [<a href="https://github.com/doxygen/doxygen/commit/2a5357a0fac644ffb1bf49569344b9bc57603a29">view</a>]</li> +<li>Fixed jump to anchor issue when navigating to source file [<a href="https://github.com/doxygen/doxygen/commit/94b726f4273df805846d7fdcd2e9d5bd7627f628">view</a>]</li> +<li>Fixed problem generating per letter namespace member index pages. [<a href="https://github.com/doxygen/doxygen/commit/2b722b57f20e044b061423109bfa7168a7a1b913">view</a>]</li> +<li>Fixed svgpan.js issue with Chrome causing empty SVG graphs [<a href="https://github.com/doxygen/doxygen/commit/5f01f783e2387a5d44ad70fbff5365aa0e5df938">view</a>]</li> +<li>Fixed typedef and define strings for Spanish translation [<a href="https://github.com/doxygen/doxygen/commit/f69eb5d79885788d6bfc6303f34f5f016b326f1c">view</a>]</li> +<li>Fixup man only output to use generator state push pop [<a href="https://github.com/doxygen/doxygen/commit/051fb8a536e1d52aa0a0422186975852dd139c06">view</a>]</li> +<li>For manpages remove trailing dash when no brief description [<a href="https://github.com/doxygen/doxygen/commit/98d3f8e7d581c589e7bd1a7faf98fc6736847cf1">view</a>]</li> +<li>Made the RTF output honor the PAPER_TYPE option. [<a href="https://github.com/doxygen/doxygen/commit/5e894a760a6584ade2f5417e2577b66c65b51fd9">view</a>]</li> +<li>New classes for generated HTML div elements. [<a href="https://github.com/doxygen/doxygen/commit/84017cac3bc9d08aa95a90cf0e44b913c492c939">view</a>]</li> +<li>Option for PlantUML configuration file [<a href="https://github.com/doxygen/doxygen/commit/d4b0b88e189027d514fa84de75100ff1fe6e681a">view</a>]</li> +<li>Removed x flag from util* source files [<a href="https://github.com/doxygen/doxygen/commit/16d57031188698c7e79dd64554efc56044e91c8f">view</a>]</li> +<li>Replaced section marker before members by diamond shaped bullet [<a href="https://github.com/doxygen/doxygen/commit/da21ad5b5147182c2117751d8c517b81dd57277f">view</a>]</li> +<li>Reverting pull request #537 until it will be fixed [<a href="https://github.com/doxygen/doxygen/commit/fd67ef1f66afb0b51a784866b806ba8f04e12dfb">view</a>]</li> +<li>Update Swedish translation [<a href="https://github.com/doxygen/doxygen/commit/78b43ec9b5469a9e757cd658d21907fa593ed1aa">view</a>]</li> +<li>Updated the Polish translation [<a href="https://github.com/doxygen/doxygen/commit/158b7bdb697d19736692105161af3e891ae7732e">view</a>]</li> +<li>bison: use %declarations instead of command line options. [<a href="https://github.com/doxygen/doxygen/commit/97c2c1d6f323d6d38dda4820c00ca8ca8f5b6940">view</a>]</li> +<li>flex: use %option instead of command line options. [<a href="https://github.com/doxygen/doxygen/commit/0bdb01d4b6ced07750d8e449fd4ffab5554d8a24">view</a>]</li> </ul> <p> \endhtmlonly @@ -199,156 +600,156 @@ <a name="1.8.12"></a> </p> <ul> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1662">1662</a> - Fix missing title in non-page docanchors from tag files [<a href="http://github.com/doxygen/doxygen/commit/616b392e9bc8984251d969577a5b63974efb1eef">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2763">2763</a> - FILTER_PATTERNS won't take command with arguments [<a href="http://github.com/doxygen/doxygen/commit/ce7a983c2849e4c8fa72189a896e594a8497dd4c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4691">4691</a> - Uses <img> instead of <object> html tag for SVG images [<a href="http://github.com/doxygen/doxygen/commit/8ccd98643a3b88aaa3245b76202666900a2cd401">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5174">5174</a> - error state 21 with fortran code (fixed format) [<a href="http://github.com/doxygen/doxygen/commit/fdee5e9fade0ff5a578817048c6205f2a9acbced">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5323">5323</a> - Missing Page References in the Index Chapters of the LaTex/PDF output [<a href="http://github.com/doxygen/doxygen/commit/efd49dacfbae1ad55d7922a748e2c1d60068b014">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5411">5411</a> - Inherited member of template class issues warning and is not documented [<a href="http://github.com/doxygen/doxygen/commit/4dfc5887660284b345eb93b6c07dc1f91e780fac">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5711">5711</a> - Fortran: attributes after a blank line are ignored / Bug <a href="https://github.com/doxygen/doxygen/issues/3880">3880</a> - FORTRAN: comment in subroutine argument list [<a href="http://github.com/doxygen/doxygen/commit/e9ebf43585bffee80c31dd69538feae2a4525178">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5791">5791</a> - Doxygen handles comments in Objective-C code blocks incorrectly. [<a href="http://github.com/doxygen/doxygen/commit/c2e0ce14c65584f42e875f0abdbe5466d1414636">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5804">5804</a> - Representation of arrows [<a href="http://github.com/doxygen/doxygen/commit/ab96c077a8cd99308e6ae90c3c861ab1c0e911d7">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5811">5811</a> - Markdown: > escaped within backticks [<a href="http://github.com/doxygen/doxygen/commit/5f9d80b2ce73a7e7fb0f4fc16f3ef5fee0cf8105">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5826">5826</a> - Use UTC timezone when displaying QDateTimes parsed from SOURCE_DATE_EPOCH [<a href="http://github.com/doxygen/doxygen/commit/5801460b3141871222569fb99e7964e9a2925d71">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5832">5832</a> - last entry missing in a @name group of typedefs [<a href="http://github.com/doxygen/doxygen/commit/ee2d6faecab57c1f929d6868ae6eb9bdaa53d654">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5843">5843</a> - Link of typedef within namespace on group pages missing [<a href="http://github.com/doxygen/doxygen/commit/0bd419e0a4fabf615fb72eb92bf561d3dfc96a11">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5891">5891</a> - __init__.py causes to ignore some inheritance [<a href="http://github.com/doxygen/doxygen/commit/607b8a302297169e4319280dba2a61dcbe042965">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5923">5923</a> - Figure title needs to be on separate line in order for it to work [<a href="http://github.com/doxygen/doxygen/commit/07521a7f050607609b9d04e8f3c58ed4754c47c3">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5933">5933</a> - Phantom variables/functions in XML, created from non-code files [<a href="http://github.com/doxygen/doxygen/commit/7dc9b378a107b1ccae2245b3f3f3d628db2bd008">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5937">5937</a> - CASE_SENSE_NAMES ignored [<a href="http://github.com/doxygen/doxygen/commit/fab854a10f358c15a69291a59388ea0c184bce20">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5938">5938</a> - Spaces between the closing bracket of the typename and the opening bracket of the parameter list cause detection issues. [<a href="http://github.com/doxygen/doxygen/commit/622d18637f9d633b184e43fd3594b661cf4e9375">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5941">5941</a> - python unicode docstrings are ignored [<a href="http://github.com/doxygen/doxygen/commit/936f242956350825d870f7396ae5d6106fe3081d">view</a>] -, [<a href="http://github.com/doxygen/doxygen/commit/be100f882604a23d94025fee6d059bdb5ec28d3e">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5945">5945</a> - Do not allow ligatures in log output [<a href="http://github.com/doxygen/doxygen/commit/894bdfdf268ba24a268fa72d7b33899a9f3a126b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5958">5958</a> - References for one function can inherit References from subsequent non documented function [<a href="http://github.com/doxygen/doxygen/commit/9abcad810b8d41d338d501ff5b32524e1ced7f33">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5961">5961</a> - External search does not properly escape user supplied data, resulting in vulnerability [<a href="http://github.com/doxygen/doxygen/commit/1cc1adad2de03a0f013881b8960daf89aa155081">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5962">5962</a> - regression, Unescaped percent sign in doxygen output [<a href="http://github.com/doxygen/doxygen/commit/d4ab02c2da7df472bebbf2724419ba00f2de229c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5964">5964</a> - hyperref link label drop underscores [<a href="http://github.com/doxygen/doxygen/commit/537a1c67f316c5a9d2d4542e94a4ace439a78b3a">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5965">5965</a> - Directory list is not generated in HTML output [<a href="http://github.com/doxygen/doxygen/commit/b6b87054121422009f2d5316a279869faaa33d16">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5967">5967</a> - imported section anchors are copied in project tagfile [<a href="http://github.com/doxygen/doxygen/commit/8542ec9c8647da15de486635de40c25f99fc8c63">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5970">5970</a> - Exclusion of a new line at the end of source code file causing nesting of HTML code for function documentation [<a href="http://github.com/doxygen/doxygen/commit/7228bca81e8d054413f85f8758fc13866ab4b85b">view</a>] -, [<a href="http://github.com/doxygen/doxygen/commit/c2c9ed6bd2a94ad25f31a22f70489406c52e5e6f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5975">5975</a> - Recent File list allows only 2 entries [<a href="http://github.com/doxygen/doxygen/commit/0f53af1270a0032d4c24d93aeb7cce245427bf8d">view</a>] -, [<a href="http://github.com/doxygen/doxygen/commit/48b1c6e240238f7dc3965735dfb00900d2c75383">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5978">5978</a> - doxygen crashes no resolved [<a href="http://github.com/doxygen/doxygen/commit/0e45c10d7db6dc82aa0828df7e30ec4c8c5a1f97">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5980">5980</a> - generated xml has errors [<a href="http://github.com/doxygen/doxygen/commit/d3078f4e2e0fcb6dd5f82781b54dab8647f7ccc4">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5981">5981</a> - quick link index in alphabetical class list in classes.html doesn't work [<a href="http://github.com/doxygen/doxygen/commit/ec1ef7b4971540bbe042b16d7ebd3f2a0e0e57f1">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5982">5982</a> - Bad character escaping scheme in HTML anchor generation. [<a href="http://github.com/doxygen/doxygen/commit/6136cf9e3ad70d58cac4d8022cce8c8729805119">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5983">5983</a> - `@addindex`entries fail to link to the exact location in Compiled HTML Help. [<a href="http://github.com/doxygen/doxygen/commit/8dea6e11faf3969c3b6b17b700533f43c9ca73f8">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5985">5985</a> - Java: final keyword on a parameter brakes docs inherinance [<a href="http://github.com/doxygen/doxygen/commit/dfd0336f1a97e189d49e29860db1c43915aced76">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5991">5991</a> - Using `@page` to add title to Markdown file generates surplus empty page. [<a href="http://github.com/doxygen/doxygen/commit/42c7d88ffc11651d1fb6b997fd23cc938bce4a39">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5998">5998</a> - DOT_PATH not expanded [<a href="http://github.com/doxygen/doxygen/commit/752523cd122d6ffdd72c89955005d77819740675">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5999">5999</a> - Files with incorrect extensions (.doc) are picked up by doxygen [<a href="http://github.com/doxygen/doxygen/commit/14b04be2af279e1093f17d6b933d1e9ab530e128">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6002">6002</a> - python: missing cross-links in sources (option SOURCE_BROWSER = YES) [<a href="http://github.com/doxygen/doxygen/commit/f3aeedf7b570c0c06af44a4f8bb66eba6b78c2f2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6007">6007</a> - VHDL: missing last sign in html documentation of constant declaration [<a href="http://github.com/doxygen/doxygen/commit/b00761b30a1d399f95adfe823937c05a64476155">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6009">6009</a> - HTML Tables with 10+ columns are broken for LaTeX based output [<a href="http://github.com/doxygen/doxygen/commit/61919f5483c717370742f2d238dcac88695d1990">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6010">6010</a> - Enumerations heading present but none listed [<a href="http://github.com/doxygen/doxygen/commit/e7ac59b018cdf609cc7c6819f38a7de05c699058">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6020">6020</a> - ALIASES stop working after verbatim with formula and /** */ [<a href="http://github.com/doxygen/doxygen/commit/36731bc9b573cdee6d699d0f66b4b34ad5b8f9ac">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6031">6031</a> - Doxygen segfault (return code 134) when parsing a c++ enum class contained in a class [<a href="http://github.com/doxygen/doxygen/commit/f37c0e58c47c43e96417d4dcf1559e3f9d1b323b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6032">6032</a> - Segmentation fault when processing md containing only header [<a href="http://github.com/doxygen/doxygen/commit/0d9fc8dc45de49a050b1d13f03ff9f4713f736fb">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6033">6033</a> - Invalid XHTML if the directives brief and exception are following immediately [<a href="http://github.com/doxygen/doxygen/commit/1c8d2ecc67997ee88dfabbeafdbc2e9805a10e3f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6035">6035</a> - Can't scroll using finger documentation in Chrome browser on Android OS [<a href="http://github.com/doxygen/doxygen/commit/478c1475ba8cbe508c39589c639662e317b959db">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6048">6048</a> - doxygen generates incorrect documentation for C enum in latex [<a href="http://github.com/doxygen/doxygen/commit/5b2e30aa0847f622e053b6ac6aa9c727f7ea42b3">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6055">6055</a> - Code snippet always shows line numbers from 1 [<a href="http://github.com/doxygen/doxygen/commit/9ae1af9b8679a0f14cb568d1db3afcc6e3ba40a6">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6056">6056</a> - Broken links in HTML output with SHOW_FILES=NO [<a href="http://github.com/doxygen/doxygen/commit/d2eeb765ffcf808812e7ac1c846dee97b85ad4bf">view</a>]</li> -<li>Add caption in verbatim blocks. [<a href="http://github.com/doxygen/doxygen/commit/f075557bf207d67cf2638298cbdd843cc1a2f7d7">view</a>]</li> -<li>Add parameter in/out specifiers to output. [<a href="http://github.com/doxygen/doxygen/commit/5592c705d8ac98f579e2675c12777330c4c322c9">view</a>]</li> -<li>Add section title to output. [<a href="http://github.com/doxygen/doxygen/commit/989a0137df8f8e11df67de1a2ded73712b46a8fd">view</a>]</li> -<li>Added .codedocs file [<a href="http://github.com/doxygen/doxygen/commit/5dee6e8aab6f8c76203a3296ef374e035cf55d34">view</a>]</li> -<li>Added an option to add "anonymous" headings to the table of contents (currently Markdown only). [<a href="http://github.com/doxygen/doxygen/commit/7e564896fcc41c2b1a6bd5c86ebebab0de7ea5f9">view</a>]</li> -<li>Added generating template files and reading templates from disk if present [<a href="http://github.com/doxygen/doxygen/commit/d38d33cef2241cd8d29c99f519d21ae225453357">view</a>]</li> -<li>Added missing free [<a href="http://github.com/doxygen/doxygen/commit/4dc6c6c2f01b7b7bda82f5c3dbf4f78e489341bc">view</a>]</li> -<li>Added support for encoding tag to the template engine used for HTML help indices [<a href="http://github.com/doxygen/doxygen/commit/7b887cfbffd73ea12fe0171c149f49c4540aac40">view</a>]</li> -<li>Adding compilation options for flex/lex and bison/yacc [<a href="http://github.com/doxygen/doxygen/commit/c873fad0b4c2948551e53c082a3829243c4ccb9f">view</a>]</li> -<li>Adding partial htmlhelp support to template system [<a href="http://github.com/doxygen/doxygen/commit/d3f2fcd53000fc4a09cf56c90930f8c8e2ad02b4">view</a>]</li> -<li>Adjusted Doxygen to doxygen in running text in the manual [<a href="http://github.com/doxygen/doxygen/commit/4f80d144f98fc998de5118855eec73797a65bf2e">view</a>]</li> -<li>Allow verbatim code block to be placed on the output. [<a href="http://github.com/doxygen/doxygen/commit/4530978dba88a0d6ccc369e480e6b9a98d29fa1e">view</a>]</li> -<li>Also map .f95, .f03 and .f08 file types to Fortran [<a href="http://github.com/doxygen/doxygen/commit/dc6019413c4609c49322e80d1ec2b089e85486f3">view</a>]</li> -<li>Another possible fix [<a href="http://github.com/doxygen/doxygen/commit/445347566078a1cc64705f28932e1da5bf9f531f">view</a>]</li> -<li>Applied responsive design to menu bar using smartmenus [<a href="http://github.com/doxygen/doxygen/commit/8480d35beef57ed08139b58972bfb83a3b37422c">view</a>]</li> -<li>Assertion failure generation documentation [<a href="http://github.com/doxygen/doxygen/commit/fdefe70a955c8140f080974319bbf97364d3e610">view</a>]</li> -<li>Bug fix for rendering the VHDL Hierarchy (thanks to a patch by Martin Kreis) [<a href="http://github.com/doxygen/doxygen/commit/10256be351f8f00ba5986750a08df1108bf6a4f7">view</a>]</li> -<li>Building doxyapp fails after update of config methodology to improve performance [<a href="http://github.com/doxygen/doxygen/commit/cf1706776bd93367dd357f505d04a7b10553f65f">view</a>]</li> -<li>Bump version for GIT repo [<a href="http://github.com/doxygen/doxygen/commit/295a467a2ebee260d95c7bb3e3c616554b7782b1">view</a>]</li> -<li>CMAKE: Fix building on Windows with VS 2015 [<a href="http://github.com/doxygen/doxygen/commit/6b80cc4181dc73a061b049e3283e6e2d8a4e5346">view</a>]</li> -<li>Changed configuration mechanism to directly access options in order to improve performance [<a href="http://github.com/doxygen/doxygen/commit/a93ec7221d1a258f0268e0c081782478372efe0b">view</a>]</li> -<li>Code with "extension" unparsed shows line numbers [<a href="http://github.com/doxygen/doxygen/commit/2b229f69041023f5f473385ee587ef7743850f55">view</a>]</li> -<li>Color code word OPERATOR and ASSIGNMENT as keyword in FORTRAN code [<a href="http://github.com/doxygen/doxygen/commit/3f559575d63f2fd29888107afae85f4cc902b189">view</a>]</li> -<li>Color code word RESULT as keyword in FORTRAN code [<a href="http://github.com/doxygen/doxygen/commit/0f047eb1862193713889d10bccb4894df1f7c23d">view</a>]</li> -<li>Determination of end of parameter list [<a href="http://github.com/doxygen/doxygen/commit/80f08d11c9a21db86bbeb106194f4e76f67bd50e">view</a>]</li> -<li>Disable selecting line number [<a href="http://github.com/doxygen/doxygen/commit/7bda78adac5d72396526c503325020a11cc12464">view</a>]</li> -<li>Disabled debug prints [<a href="http://github.com/doxygen/doxygen/commit/3e03e42e2b10bf2ccba5ab35e52c665ac35cfa15">view</a>]</li> -<li>Documentation for extensions .f95, .f03 and .f08 [<a href="http://github.com/doxygen/doxygen/commit/4c2e91c10dc6d007c410cd282a00fc7a42d38a0d">view</a>]</li> -<li>Doxygen fails to copy logo image to LaTex output dir [<a href="http://github.com/doxygen/doxygen/commit/711c6c0bee87d47d70b3ffa9ca8b39b704e91723">view</a>]</li> -<li>FORTRAN determination string in preprocessing [<a href="http://github.com/doxygen/doxygen/commit/4a7673fed2f28a24e0c7e8bb94621b0e14ac9ed5">view</a>]</li> -<li>Feature: Translations for german language (changes since 1.8.4) [<a href="http://github.com/doxygen/doxygen/commit/261077497f2bcc3364e182e338d914c470a0a235">view</a>]</li> -<li>Fix STRIP_FROM_PATH when running from drive root [<a href="http://github.com/doxygen/doxygen/commit/fd808ae3c1e37a8d476d250cf6b4325624a9eccb">view</a>]</li> -<li>Fix Windows build instructions. [<a href="http://github.com/doxygen/doxygen/commit/eec8d0a31161746041fc94ccbba5a54aecd8cf93">view</a>]</li> -<li>Fix documentation typos [<a href="http://github.com/doxygen/doxygen/commit/770adb37b2072bbea5412f9cc2058d98d1de60e4">view</a>]</li> -<li>Fix for HTML output when using server side search and the new menu bar [<a href="http://github.com/doxygen/doxygen/commit/0faf45600c6c640bfaf11b017d43a4b9de193ebf">view</a>]</li> -<li>Fix for changed references due to different removeRedudantWhiteSpace() implementation [<a href="http://github.com/doxygen/doxygen/commit/f26cc41d0d3d436c809c293a56c66c1f5f953745">view</a>]</li> -<li>Fix for empty file name [<a href="http://github.com/doxygen/doxygen/commit/0fead5249b8ef2c3c5cbbbd712855bae877aa27b">view</a>]</li> -<li>Fix for error in travis.yml [<a href="http://github.com/doxygen/doxygen/commit/81cf39f249c58db66368d60d596ac164d886ae90">view</a>]</li> -<li>Fix issue escaping backslash inside markdown style code span [<a href="http://github.com/doxygen/doxygen/commit/402970f77f961b85b6371c8e53bd69981435c2d7">view</a>]</li> -<li>Fix linker flags for building with clang on Windows [<a href="http://github.com/doxygen/doxygen/commit/41846b467bea58b904e26ce139394f7371ea5870">view</a>]</li> -<li>Fix order of member initilaization [<a href="http://github.com/doxygen/doxygen/commit/6b1ebb6bcb345d8997054492c21276dc2dc36416">view</a>]</li> -<li>Fix return-type warnings with -DNDEBUG [<a href="http://github.com/doxygen/doxygen/commit/f4574baf118da6aa2051b865040a9948bb0d22c9">view</a>]</li> -<li>Fix search box rendering in HTML when menu bar is disabled [<a href="http://github.com/doxygen/doxygen/commit/ee9a0664c03c306d0aeb127295ced29f8078ae03">view</a>]</li> -<li>Fix uppercase letters B-Z being unnecessarily escaped in index HTML anchors. [<a href="http://github.com/doxygen/doxygen/commit/0f699ab17cb88beff0ae4aa9b10042c0ccaff937">view</a>]</li> -<li>Fixed for index.hhp output when using template engine [<a href="http://github.com/doxygen/doxygen/commit/e629fc64d42121e86bf2230a3b515d1d0d868dcd">view</a>]</li> -<li>Fixed issue escaping ndashes (\--) and mdashes (\---) [<a href="http://github.com/doxygen/doxygen/commit/ef56187f733d946e4df130d9783eadea41ec1c97">view</a>]</li> -<li>Fixed problem with -w command when no Doxyfile was present and specified [<a href="http://github.com/doxygen/doxygen/commit/7c3126407bbb46717a4e0a09b61ee001702af7bf">view</a>]</li> -<li>Fixed two regressions found during extensive testing [<a href="http://github.com/doxygen/doxygen/commit/d9166baf589f50e94597829b04d0cabee4573130">view</a>]</li> -<li>Fixed typos. [<a href="http://github.com/doxygen/doxygen/commit/a787b94d11e9f337570bfab1d36a36b37438ccea">view</a>]</li> -<li>Fixed wrong <p> nesting issue for call/caller graphs [<a href="http://github.com/doxygen/doxygen/commit/50c78a6f0d720617c5a82045b5b2cd18882a15a9">view</a>]</li> -<li>Fortran inline source code and crash on Linux [<a href="http://github.com/doxygen/doxygen/commit/661991e55f7ae18e8143733f364d9d7864ec66d9">view</a>]</li> -<li>Improve output on mobile devices [<a href="http://github.com/doxygen/doxygen/commit/e0dc837a14a466dd4fb58a0a1e6e72b5c400f563">view</a>]</li> -<li>Improved list of files in htmlhelp.hhp [<a href="http://github.com/doxygen/doxygen/commit/f7a05140593d854955151e4286205ef1f908e07b">view</a>]</li> -<li>Improved sorting performance for directories and files [<a href="http://github.com/doxygen/doxygen/commit/5475bf2e9a0f1517567186b47595b8dad2b6b3a3">view</a>]</li> -<li>Include command show line number (e.g. LaTeX) [<a href="http://github.com/doxygen/doxygen/commit/a4bde1e1e71a24d6c714377be4265e95deb1acf3">view</a>]</li> -<li>Initialization of python variables and type determination [<a href="http://github.com/doxygen/doxygen/commit/46ba7769c4a0600c47f3de6871815398bab7ca91">view</a>]</li> -<li>Introducing commands includedoc and snippetdoc [<a href="http://github.com/doxygen/doxygen/commit/ba848363081c44c9aa9e91b193054983f562e90c">view</a>]</li> -<li>Latex page numbering [<a href="http://github.com/doxygen/doxygen/commit/044f2c49882815f58c88b12a0086ad71dd97f071">view</a>]</li> -<li>Minor build fixes [<a href="http://github.com/doxygen/doxygen/commit/5a7a5477cd60ea7cc10b8132862a4928af788028">view</a>]</li> -<li>Minor correction for BUILD.txt [<a href="http://github.com/doxygen/doxygen/commit/89ef13dbb6c8ac81a9c118f4f031c45cdc66e3a3">view</a>]</li> -<li>Minor performance improvement sorting directories [<a href="http://github.com/doxygen/doxygen/commit/67827956351f78516a7c48df366dcf521c51c6eb">view</a>]</li> -<li>Minor update to the installation instructions [<a href="http://github.com/doxygen/doxygen/commit/840d3d18a172edaf92f7780340b1aee4198846fe">view</a>]</li> -<li>Missing semicolon in navtree.css [<a href="http://github.com/doxygen/doxygen/commit/360987c61462c185942e5055a345dd777920216a">view</a>]</li> -<li>Modified (readability) layout for member title in HTML and LaTex [<a href="http://github.com/doxygen/doxygen/commit/a2ae382198092537b6b5c85f9c7e5615046d3c78">view</a>]</li> -<li>Optimized use of convertNameToFile to improve performance [<a href="http://github.com/doxygen/doxygen/commit/d168f8bfef6aac5a71eccad36dced78d55765ae1">view</a>]</li> -<li>PDF generation stops when image with caption is included in a table. [<a href="http://github.com/doxygen/doxygen/commit/1d77a4ed407aaa24eae53f501d1a5ce38b352504">view</a>] -, [<a href="http://github.com/doxygen/doxygen/commit/7b0b7ef746ae15df3894847f5b43a29ae20c9599">view</a>]</li> -<li>Parse more than 1 size indiction in defaultHandleTitleAndSize [<a href="http://github.com/doxygen/doxygen/commit/2bcf196332084067c3d2409fa07992a6b833473d">view</a>]</li> -<li>Problem jumping to line number in source code due to wrong hypertarget name [<a href="http://github.com/doxygen/doxygen/commit/ed875603dc42d3a5ebbcfd89540b1f7ecf472ece">view</a>]</li> -<li>Python strip code comments [<a href="http://github.com/doxygen/doxygen/commit/a19feec4a7864dc17fcb570330ae2f7b9a5c6e45">view</a>]</li> -<li>Reimplemented node renumbering for dot graph to improve performance [<a href="http://github.com/doxygen/doxygen/commit/fb66cae35cd59d1026fe3c6de46ae3a2ed6f9f91">view</a>]</li> -<li>Remove unused variables [<a href="http://github.com/doxygen/doxygen/commit/aa61a4b33e2dd5c0f4809dd23f4561bd225270f9">view</a>] -, [<a href="http://github.com/doxygen/doxygen/commit/e698e53d2c04833143e5ab60f0983e3c683cf85d">view</a>]</li> -<li>Removed ambiguity in the XML schema definition [<a href="http://github.com/doxygen/doxygen/commit/13946338f9e5fcdb6dca7f8e4c2429ca000455fb">view</a>]</li> -<li>Revert #291 [<a href="http://github.com/doxygen/doxygen/commit/6ea76e0d89aff8399117e602a3eab1f7d93e466b">view</a>]</li> -<li>Simplified code of fix for Bug <a href="https://github.com/doxygen/doxygen/issues/5982">5982</a> [<a href="http://github.com/doxygen/doxygen/commit/e70b45fa4398450b588122f9d36b1ed514fc336a">view</a>]</li> -<li>Sorting in latex index and missing \@ in index [<a href="http://github.com/doxygen/doxygen/commit/558958dca5e5cb50bd33f3344cab151aba9ce076">view</a>]</li> -<li>Split apt-get install commands in travis config in an attempt to reduce timeouts [<a href="http://github.com/doxygen/doxygen/commit/2f6f48567cb48d21361237a7905e27744e0acf91">view</a>]</li> -<li>Style fixes and added numbering to overloaded members [<a href="http://github.com/doxygen/doxygen/commit/5af8d5e87657a2d3986783493c618df335b3771c">view</a>]</li> -<li>Table of contents breaks when documentation spans multiple comment blocks with same @page [<a href="http://github.com/doxygen/doxygen/commit/7f7f7273f816335d556668b86aa99d05f7f09992">view</a>]</li> -<li>Unified display of enum values across output formats and languages [<a href="http://github.com/doxygen/doxygen/commit/9c915b83bc06babe6f0127f6446143ea50d00b62">view</a>]</li> -<li>Unify handling of extra packages in formula.cpp and latexgen.cpp so formula.cpp handles package arguments correctly [<a href="http://github.com/doxygen/doxygen/commit/4d2e203a55a2af8f15a3933b86201e6e9b6901b3">view</a>]</li> -<li>Update LICENSE file to latest from FSF [<a href="http://github.com/doxygen/doxygen/commit/48eb44a00b4b805fda0da82620d7efb135116d23">view</a>]</li> -<li>Update copyright year in docs [<a href="http://github.com/doxygen/doxygen/commit/b721f6e1707f8cc446c0d7f9956e6d4aa9f17bc9">view</a>]</li> -<li>Updated README.md to include code docs [<a href="http://github.com/doxygen/doxygen/commit/3911ebdad44a91a6b825051a1ae0f7b280c84567">view</a>]</li> -<li>Updated stylesheet for the manual to fix layout issue in the navigation tree [<a href="http://github.com/doxygen/doxygen/commit/64597bbe46169c08b591a8714f48d314c5341cc2">view</a>]</li> -<li>Warnings from CLANG compiler [<a href="http://github.com/doxygen/doxygen/commit/fdfb027f346c30d6cd209b366e6cb879fb11cbcb">view</a>]</li> -<li>fix ninja build error [<a href="http://github.com/doxygen/doxygen/commit/c4cdfdf65073824d7badb38a1f535310b93d50a9">view</a>]</li> -<li>fixed rtf subsection [<a href="http://github.com/doxygen/doxygen/commit/17bd813313cf073a437001f2fa550f286458586e">view</a>]</li> -<li>mangen.h: remove italic in brief member descriptions [<a href="http://github.com/doxygen/doxygen/commit/5716f0aee08bfc9daf7ab7e22566e5acc51446d0">view</a>]</li> -<li>reimplemented removeRedundantWhiteSpace() to improve performance [<a href="http://github.com/doxygen/doxygen/commit/00ee930a1d73e11885197102c54fd4c8141127da">view</a>]</li> -<li>sqlite3gen: defnname -> defname [<a href="http://github.com/doxygen/doxygen/commit/79a53cc464ef814adf6b64d45a15fee6676f15d6">view</a>]</li> -<li>sqlite3gen: export proper memberdef refid [<a href="http://github.com/doxygen/doxygen/commit/918cf6871359da9d14dd6d3e7c4d00d6ca9a496e">view</a>]</li> -<li>sqlite3gen: insert xrefs using integer refids [<a href="http://github.com/doxygen/doxygen/commit/bac76c1957de71e3e0bddc23ccd46b7b2537c8a1">view</a>]</li> -<li>sqlite3gen: stripFromPath on all calls to insertFile [<a href="http://github.com/doxygen/doxygen/commit/87222afcfe6089899c8ded60b23692fd40997856">view</a>]</li> -<li>sqlite3gen: stripWhitespace on bitfield's text [<a href="http://github.com/doxygen/doxygen/commit/6f4561608adaf8230c2fa015770dfeeab5ce3ba8">view</a>]</li> -<li>sqlite3gen: sync with xmlgen [<a href="http://github.com/doxygen/doxygen/commit/8208b2d5514a3c29659ae967da544adc21585212">view</a>]</li> -<li>sqlite3gen: use the refid stored in the refids table [<a href="http://github.com/doxygen/doxygen/commit/9b02db93e7e78aedc0a0ca7fd2701c81dc153487">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1662">1662</a> - Fix missing title in non-page docanchors from tag files [<a href="https://github.com/doxygen/doxygen/commit/616b392e9bc8984251d969577a5b63974efb1eef">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2763">2763</a> - FILTER_PATTERNS won't take command with arguments [<a href="https://github.com/doxygen/doxygen/commit/ce7a983c2849e4c8fa72189a896e594a8497dd4c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4691">4691</a> - Uses <img> instead of <object> html tag for SVG images [<a href="https://github.com/doxygen/doxygen/commit/8ccd98643a3b88aaa3245b76202666900a2cd401">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5174">5174</a> - error state 21 with fortran code (fixed format) [<a href="https://github.com/doxygen/doxygen/commit/fdee5e9fade0ff5a578817048c6205f2a9acbced">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5323">5323</a> - Missing Page References in the Index Chapters of the LaTex/PDF output [<a href="https://github.com/doxygen/doxygen/commit/efd49dacfbae1ad55d7922a748e2c1d60068b014">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5411">5411</a> - Inherited member of template class issues warning and is not documented [<a href="https://github.com/doxygen/doxygen/commit/4dfc5887660284b345eb93b6c07dc1f91e780fac">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5711">5711</a> - Fortran: attributes after a blank line are ignored / Bug <a href="https://github.com/doxygen/doxygen/issues/3880">3880</a> - FORTRAN: comment in subroutine argument list [<a href="https://github.com/doxygen/doxygen/commit/e9ebf43585bffee80c31dd69538feae2a4525178">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5791">5791</a> - Doxygen handles comments in Objective-C code blocks incorrectly. [<a href="https://github.com/doxygen/doxygen/commit/c2e0ce14c65584f42e875f0abdbe5466d1414636">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5804">5804</a> - Representation of arrows [<a href="https://github.com/doxygen/doxygen/commit/ab96c077a8cd99308e6ae90c3c861ab1c0e911d7">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5811">5811</a> - Markdown: > escaped within backticks [<a href="https://github.com/doxygen/doxygen/commit/5f9d80b2ce73a7e7fb0f4fc16f3ef5fee0cf8105">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5826">5826</a> - Use UTC timezone when displaying QDateTimes parsed from SOURCE_DATE_EPOCH [<a href="https://github.com/doxygen/doxygen/commit/5801460b3141871222569fb99e7964e9a2925d71">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5832">5832</a> - last entry missing in a @name group of typedefs [<a href="https://github.com/doxygen/doxygen/commit/ee2d6faecab57c1f929d6868ae6eb9bdaa53d654">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5843">5843</a> - Link of typedef within namespace on group pages missing [<a href="https://github.com/doxygen/doxygen/commit/0bd419e0a4fabf615fb72eb92bf561d3dfc96a11">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5891">5891</a> - __init__.py causes to ignore some inheritance [<a href="https://github.com/doxygen/doxygen/commit/607b8a302297169e4319280dba2a61dcbe042965">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5923">5923</a> - Figure title needs to be on separate line in order for it to work [<a href="https://github.com/doxygen/doxygen/commit/07521a7f050607609b9d04e8f3c58ed4754c47c3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5933">5933</a> - Phantom variables/functions in XML, created from non-code files [<a href="https://github.com/doxygen/doxygen/commit/7dc9b378a107b1ccae2245b3f3f3d628db2bd008">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5937">5937</a> - CASE_SENSE_NAMES ignored [<a href="https://github.com/doxygen/doxygen/commit/fab854a10f358c15a69291a59388ea0c184bce20">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5938">5938</a> - Spaces between the closing bracket of the typename and the opening bracket of the parameter list cause detection issues. [<a href="https://github.com/doxygen/doxygen/commit/622d18637f9d633b184e43fd3594b661cf4e9375">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5941">5941</a> - python unicode docstrings are ignored [<a href="https://github.com/doxygen/doxygen/commit/936f242956350825d870f7396ae5d6106fe3081d">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/be100f882604a23d94025fee6d059bdb5ec28d3e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5945">5945</a> - Do not allow ligatures in log output [<a href="https://github.com/doxygen/doxygen/commit/894bdfdf268ba24a268fa72d7b33899a9f3a126b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5958">5958</a> - References for one function can inherit References from subsequent non documented function [<a href="https://github.com/doxygen/doxygen/commit/9abcad810b8d41d338d501ff5b32524e1ced7f33">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5961">5961</a> - External search does not properly escape user supplied data, resulting in vulnerability [<a href="https://github.com/doxygen/doxygen/commit/1cc1adad2de03a0f013881b8960daf89aa155081">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5962">5962</a> - regression, Unescaped percent sign in doxygen output [<a href="https://github.com/doxygen/doxygen/commit/d4ab02c2da7df472bebbf2724419ba00f2de229c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5964">5964</a> - hyperref link label drop underscores [<a href="https://github.com/doxygen/doxygen/commit/537a1c67f316c5a9d2d4542e94a4ace439a78b3a">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5965">5965</a> - Directory list is not generated in HTML output [<a href="https://github.com/doxygen/doxygen/commit/b6b87054121422009f2d5316a279869faaa33d16">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5967">5967</a> - imported section anchors are copied in project tagfile [<a href="https://github.com/doxygen/doxygen/commit/8542ec9c8647da15de486635de40c25f99fc8c63">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5970">5970</a> - Exclusion of a new line at the end of source code file causing nesting of HTML code for function documentation [<a href="https://github.com/doxygen/doxygen/commit/7228bca81e8d054413f85f8758fc13866ab4b85b">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/c2c9ed6bd2a94ad25f31a22f70489406c52e5e6f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5975">5975</a> - Recent File list allows only 2 entries [<a href="https://github.com/doxygen/doxygen/commit/0f53af1270a0032d4c24d93aeb7cce245427bf8d">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/48b1c6e240238f7dc3965735dfb00900d2c75383">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5978">5978</a> - doxygen crashes no resolved [<a href="https://github.com/doxygen/doxygen/commit/0e45c10d7db6dc82aa0828df7e30ec4c8c5a1f97">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5980">5980</a> - generated xml has errors [<a href="https://github.com/doxygen/doxygen/commit/d3078f4e2e0fcb6dd5f82781b54dab8647f7ccc4">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5981">5981</a> - quick link index in alphabetical class list in classes.html doesn't work [<a href="https://github.com/doxygen/doxygen/commit/ec1ef7b4971540bbe042b16d7ebd3f2a0e0e57f1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5982">5982</a> - Bad character escaping scheme in HTML anchor generation. [<a href="https://github.com/doxygen/doxygen/commit/6136cf9e3ad70d58cac4d8022cce8c8729805119">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5983">5983</a> - `@addindex`entries fail to link to the exact location in Compiled HTML Help. [<a href="https://github.com/doxygen/doxygen/commit/8dea6e11faf3969c3b6b17b700533f43c9ca73f8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5985">5985</a> - Java: final keyword on a parameter brakes docs inherinance [<a href="https://github.com/doxygen/doxygen/commit/dfd0336f1a97e189d49e29860db1c43915aced76">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5991">5991</a> - Using `@page` to add title to Markdown file generates surplus empty page. [<a href="https://github.com/doxygen/doxygen/commit/42c7d88ffc11651d1fb6b997fd23cc938bce4a39">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5998">5998</a> - DOT_PATH not expanded [<a href="https://github.com/doxygen/doxygen/commit/752523cd122d6ffdd72c89955005d77819740675">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5999">5999</a> - Files with incorrect extensions (.doc) are picked up by doxygen [<a href="https://github.com/doxygen/doxygen/commit/14b04be2af279e1093f17d6b933d1e9ab530e128">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6002">6002</a> - python: missing cross-links in sources (option SOURCE_BROWSER = YES) [<a href="https://github.com/doxygen/doxygen/commit/f3aeedf7b570c0c06af44a4f8bb66eba6b78c2f2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6007">6007</a> - VHDL: missing last sign in html documentation of constant declaration [<a href="https://github.com/doxygen/doxygen/commit/b00761b30a1d399f95adfe823937c05a64476155">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6009">6009</a> - HTML Tables with 10+ columns are broken for LaTeX based output [<a href="https://github.com/doxygen/doxygen/commit/61919f5483c717370742f2d238dcac88695d1990">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6010">6010</a> - Enumerations heading present but none listed [<a href="https://github.com/doxygen/doxygen/commit/e7ac59b018cdf609cc7c6819f38a7de05c699058">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6020">6020</a> - ALIASES stop working after verbatim with formula and /** */ [<a href="https://github.com/doxygen/doxygen/commit/36731bc9b573cdee6d699d0f66b4b34ad5b8f9ac">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6031">6031</a> - Doxygen segfault (return code 134) when parsing a c++ enum class contained in a class [<a href="https://github.com/doxygen/doxygen/commit/f37c0e58c47c43e96417d4dcf1559e3f9d1b323b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6032">6032</a> - Segmentation fault when processing md containing only header [<a href="https://github.com/doxygen/doxygen/commit/0d9fc8dc45de49a050b1d13f03ff9f4713f736fb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6033">6033</a> - Invalid XHTML if the directives brief and exception are following immediately [<a href="https://github.com/doxygen/doxygen/commit/1c8d2ecc67997ee88dfabbeafdbc2e9805a10e3f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6035">6035</a> - Can't scroll using finger documentation in Chrome browser on Android OS [<a href="https://github.com/doxygen/doxygen/commit/478c1475ba8cbe508c39589c639662e317b959db">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6048">6048</a> - doxygen generates incorrect documentation for C enum in latex [<a href="https://github.com/doxygen/doxygen/commit/5b2e30aa0847f622e053b6ac6aa9c727f7ea42b3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6055">6055</a> - Code snippet always shows line numbers from 1 [<a href="https://github.com/doxygen/doxygen/commit/9ae1af9b8679a0f14cb568d1db3afcc6e3ba40a6">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6056">6056</a> - Broken links in HTML output with SHOW_FILES=NO [<a href="https://github.com/doxygen/doxygen/commit/d2eeb765ffcf808812e7ac1c846dee97b85ad4bf">view</a>]</li> +<li>Add caption in verbatim blocks. [<a href="https://github.com/doxygen/doxygen/commit/f075557bf207d67cf2638298cbdd843cc1a2f7d7">view</a>]</li> +<li>Add parameter in/out specifiers to output. [<a href="https://github.com/doxygen/doxygen/commit/5592c705d8ac98f579e2675c12777330c4c322c9">view</a>]</li> +<li>Add section title to output. [<a href="https://github.com/doxygen/doxygen/commit/989a0137df8f8e11df67de1a2ded73712b46a8fd">view</a>]</li> +<li>Added .codedocs file [<a href="https://github.com/doxygen/doxygen/commit/5dee6e8aab6f8c76203a3296ef374e035cf55d34">view</a>]</li> +<li>Added an option to add "anonymous" headings to the table of contents (currently Markdown only). [<a href="https://github.com/doxygen/doxygen/commit/7e564896fcc41c2b1a6bd5c86ebebab0de7ea5f9">view</a>]</li> +<li>Added generating template files and reading templates from disk if present [<a href="https://github.com/doxygen/doxygen/commit/d38d33cef2241cd8d29c99f519d21ae225453357">view</a>]</li> +<li>Added missing free [<a href="https://github.com/doxygen/doxygen/commit/4dc6c6c2f01b7b7bda82f5c3dbf4f78e489341bc">view</a>]</li> +<li>Added support for encoding tag to the template engine used for HTML help indices [<a href="https://github.com/doxygen/doxygen/commit/7b887cfbffd73ea12fe0171c149f49c4540aac40">view</a>]</li> +<li>Adding compilation options for flex/lex and bison/yacc [<a href="https://github.com/doxygen/doxygen/commit/c873fad0b4c2948551e53c082a3829243c4ccb9f">view</a>]</li> +<li>Adding partial htmlhelp support to template system [<a href="https://github.com/doxygen/doxygen/commit/d3f2fcd53000fc4a09cf56c90930f8c8e2ad02b4">view</a>]</li> +<li>Adjusted Doxygen to doxygen in running text in the manual [<a href="https://github.com/doxygen/doxygen/commit/4f80d144f98fc998de5118855eec73797a65bf2e">view</a>]</li> +<li>Allow verbatim code block to be placed on the output. [<a href="https://github.com/doxygen/doxygen/commit/4530978dba88a0d6ccc369e480e6b9a98d29fa1e">view</a>]</li> +<li>Also map .f95, .f03 and .f08 file types to Fortran [<a href="https://github.com/doxygen/doxygen/commit/dc6019413c4609c49322e80d1ec2b089e85486f3">view</a>]</li> +<li>Another possible fix [<a href="https://github.com/doxygen/doxygen/commit/445347566078a1cc64705f28932e1da5bf9f531f">view</a>]</li> +<li>Applied responsive design to menu bar using smartmenus [<a href="https://github.com/doxygen/doxygen/commit/8480d35beef57ed08139b58972bfb83a3b37422c">view</a>]</li> +<li>Assertion failure generation documentation [<a href="https://github.com/doxygen/doxygen/commit/fdefe70a955c8140f080974319bbf97364d3e610">view</a>]</li> +<li>Bug fix for rendering the VHDL Hierarchy (thanks to a patch by Martin Kreis) [<a href="https://github.com/doxygen/doxygen/commit/10256be351f8f00ba5986750a08df1108bf6a4f7">view</a>]</li> +<li>Building doxyapp fails after update of config methodology to improve performance [<a href="https://github.com/doxygen/doxygen/commit/cf1706776bd93367dd357f505d04a7b10553f65f">view</a>]</li> +<li>Bump version for GIT repo [<a href="https://github.com/doxygen/doxygen/commit/295a467a2ebee260d95c7bb3e3c616554b7782b1">view</a>]</li> +<li>CMAKE: Fix building on Windows with VS 2015 [<a href="https://github.com/doxygen/doxygen/commit/6b80cc4181dc73a061b049e3283e6e2d8a4e5346">view</a>]</li> +<li>Changed configuration mechanism to directly access options in order to improve performance [<a href="https://github.com/doxygen/doxygen/commit/a93ec7221d1a258f0268e0c081782478372efe0b">view</a>]</li> +<li>Code with "extension" unparsed shows line numbers [<a href="https://github.com/doxygen/doxygen/commit/2b229f69041023f5f473385ee587ef7743850f55">view</a>]</li> +<li>Color code word OPERATOR and ASSIGNMENT as keyword in FORTRAN code [<a href="https://github.com/doxygen/doxygen/commit/3f559575d63f2fd29888107afae85f4cc902b189">view</a>]</li> +<li>Color code word RESULT as keyword in FORTRAN code [<a href="https://github.com/doxygen/doxygen/commit/0f047eb1862193713889d10bccb4894df1f7c23d">view</a>]</li> +<li>Determination of end of parameter list [<a href="https://github.com/doxygen/doxygen/commit/80f08d11c9a21db86bbeb106194f4e76f67bd50e">view</a>]</li> +<li>Disable selecting line number [<a href="https://github.com/doxygen/doxygen/commit/7bda78adac5d72396526c503325020a11cc12464">view</a>]</li> +<li>Disabled debug prints [<a href="https://github.com/doxygen/doxygen/commit/3e03e42e2b10bf2ccba5ab35e52c665ac35cfa15">view</a>]</li> +<li>Documentation for extensions .f95, .f03 and .f08 [<a href="https://github.com/doxygen/doxygen/commit/4c2e91c10dc6d007c410cd282a00fc7a42d38a0d">view</a>]</li> +<li>Doxygen fails to copy logo image to LaTex output dir [<a href="https://github.com/doxygen/doxygen/commit/711c6c0bee87d47d70b3ffa9ca8b39b704e91723">view</a>]</li> +<li>FORTRAN determination string in preprocessing [<a href="https://github.com/doxygen/doxygen/commit/4a7673fed2f28a24e0c7e8bb94621b0e14ac9ed5">view</a>]</li> +<li>Feature: Translations for german language (changes since 1.8.4) [<a href="https://github.com/doxygen/doxygen/commit/261077497f2bcc3364e182e338d914c470a0a235">view</a>]</li> +<li>Fix STRIP_FROM_PATH when running from drive root [<a href="https://github.com/doxygen/doxygen/commit/fd808ae3c1e37a8d476d250cf6b4325624a9eccb">view</a>]</li> +<li>Fix Windows build instructions. [<a href="https://github.com/doxygen/doxygen/commit/eec8d0a31161746041fc94ccbba5a54aecd8cf93">view</a>]</li> +<li>Fix documentation typos [<a href="https://github.com/doxygen/doxygen/commit/770adb37b2072bbea5412f9cc2058d98d1de60e4">view</a>]</li> +<li>Fix for HTML output when using server side search and the new menu bar [<a href="https://github.com/doxygen/doxygen/commit/0faf45600c6c640bfaf11b017d43a4b9de193ebf">view</a>]</li> +<li>Fix for changed references due to different removeRedudantWhiteSpace() implementation [<a href="https://github.com/doxygen/doxygen/commit/f26cc41d0d3d436c809c293a56c66c1f5f953745">view</a>]</li> +<li>Fix for empty file name [<a href="https://github.com/doxygen/doxygen/commit/0fead5249b8ef2c3c5cbbbd712855bae877aa27b">view</a>]</li> +<li>Fix for error in travis.yml [<a href="https://github.com/doxygen/doxygen/commit/81cf39f249c58db66368d60d596ac164d886ae90">view</a>]</li> +<li>Fix issue escaping backslash inside markdown style code span [<a href="https://github.com/doxygen/doxygen/commit/402970f77f961b85b6371c8e53bd69981435c2d7">view</a>]</li> +<li>Fix linker flags for building with clang on Windows [<a href="https://github.com/doxygen/doxygen/commit/41846b467bea58b904e26ce139394f7371ea5870">view</a>]</li> +<li>Fix order of member initilaization [<a href="https://github.com/doxygen/doxygen/commit/6b1ebb6bcb345d8997054492c21276dc2dc36416">view</a>]</li> +<li>Fix return-type warnings with -DNDEBUG [<a href="https://github.com/doxygen/doxygen/commit/f4574baf118da6aa2051b865040a9948bb0d22c9">view</a>]</li> +<li>Fix search box rendering in HTML when menu bar is disabled [<a href="https://github.com/doxygen/doxygen/commit/ee9a0664c03c306d0aeb127295ced29f8078ae03">view</a>]</li> +<li>Fix uppercase letters B-Z being unnecessarily escaped in index HTML anchors. [<a href="https://github.com/doxygen/doxygen/commit/0f699ab17cb88beff0ae4aa9b10042c0ccaff937">view</a>]</li> +<li>Fixed for index.hhp output when using template engine [<a href="https://github.com/doxygen/doxygen/commit/e629fc64d42121e86bf2230a3b515d1d0d868dcd">view</a>]</li> +<li>Fixed issue escaping ndashes (\--) and mdashes (\---) [<a href="https://github.com/doxygen/doxygen/commit/ef56187f733d946e4df130d9783eadea41ec1c97">view</a>]</li> +<li>Fixed problem with -w command when no Doxyfile was present and specified [<a href="https://github.com/doxygen/doxygen/commit/7c3126407bbb46717a4e0a09b61ee001702af7bf">view</a>]</li> +<li>Fixed two regressions found during extensive testing [<a href="https://github.com/doxygen/doxygen/commit/d9166baf589f50e94597829b04d0cabee4573130">view</a>]</li> +<li>Fixed typos. [<a href="https://github.com/doxygen/doxygen/commit/a787b94d11e9f337570bfab1d36a36b37438ccea">view</a>]</li> +<li>Fixed wrong <p> nesting issue for call/caller graphs [<a href="https://github.com/doxygen/doxygen/commit/50c78a6f0d720617c5a82045b5b2cd18882a15a9">view</a>]</li> +<li>Fortran inline source code and crash on Linux [<a href="https://github.com/doxygen/doxygen/commit/661991e55f7ae18e8143733f364d9d7864ec66d9">view</a>]</li> +<li>Improve output on mobile devices [<a href="https://github.com/doxygen/doxygen/commit/e0dc837a14a466dd4fb58a0a1e6e72b5c400f563">view</a>]</li> +<li>Improved list of files in htmlhelp.hhp [<a href="https://github.com/doxygen/doxygen/commit/f7a05140593d854955151e4286205ef1f908e07b">view</a>]</li> +<li>Improved sorting performance for directories and files [<a href="https://github.com/doxygen/doxygen/commit/5475bf2e9a0f1517567186b47595b8dad2b6b3a3">view</a>]</li> +<li>Include command show line number (e.g. LaTeX) [<a href="https://github.com/doxygen/doxygen/commit/a4bde1e1e71a24d6c714377be4265e95deb1acf3">view</a>]</li> +<li>Initialization of python variables and type determination [<a href="https://github.com/doxygen/doxygen/commit/46ba7769c4a0600c47f3de6871815398bab7ca91">view</a>]</li> +<li>Introducing commands includedoc and snippetdoc [<a href="https://github.com/doxygen/doxygen/commit/ba848363081c44c9aa9e91b193054983f562e90c">view</a>]</li> +<li>Latex page numbering [<a href="https://github.com/doxygen/doxygen/commit/044f2c49882815f58c88b12a0086ad71dd97f071">view</a>]</li> +<li>Minor build fixes [<a href="https://github.com/doxygen/doxygen/commit/5a7a5477cd60ea7cc10b8132862a4928af788028">view</a>]</li> +<li>Minor correction for BUILD.txt [<a href="https://github.com/doxygen/doxygen/commit/89ef13dbb6c8ac81a9c118f4f031c45cdc66e3a3">view</a>]</li> +<li>Minor performance improvement sorting directories [<a href="https://github.com/doxygen/doxygen/commit/67827956351f78516a7c48df366dcf521c51c6eb">view</a>]</li> +<li>Minor update to the installation instructions [<a href="https://github.com/doxygen/doxygen/commit/840d3d18a172edaf92f7780340b1aee4198846fe">view</a>]</li> +<li>Missing semicolon in navtree.css [<a href="https://github.com/doxygen/doxygen/commit/360987c61462c185942e5055a345dd777920216a">view</a>]</li> +<li>Modified (readability) layout for member title in HTML and LaTex [<a href="https://github.com/doxygen/doxygen/commit/a2ae382198092537b6b5c85f9c7e5615046d3c78">view</a>]</li> +<li>Optimized use of convertNameToFile to improve performance [<a href="https://github.com/doxygen/doxygen/commit/d168f8bfef6aac5a71eccad36dced78d55765ae1">view</a>]</li> +<li>PDF generation stops when image with caption is included in a table. [<a href="https://github.com/doxygen/doxygen/commit/1d77a4ed407aaa24eae53f501d1a5ce38b352504">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/7b0b7ef746ae15df3894847f5b43a29ae20c9599">view</a>]</li> +<li>Parse more than 1 size indiction in defaultHandleTitleAndSize [<a href="https://github.com/doxygen/doxygen/commit/2bcf196332084067c3d2409fa07992a6b833473d">view</a>]</li> +<li>Problem jumping to line number in source code due to wrong hypertarget name [<a href="https://github.com/doxygen/doxygen/commit/ed875603dc42d3a5ebbcfd89540b1f7ecf472ece">view</a>]</li> +<li>Python strip code comments [<a href="https://github.com/doxygen/doxygen/commit/a19feec4a7864dc17fcb570330ae2f7b9a5c6e45">view</a>]</li> +<li>Reimplemented node renumbering for dot graph to improve performance [<a href="https://github.com/doxygen/doxygen/commit/fb66cae35cd59d1026fe3c6de46ae3a2ed6f9f91">view</a>]</li> +<li>Remove unused variables [<a href="https://github.com/doxygen/doxygen/commit/aa61a4b33e2dd5c0f4809dd23f4561bd225270f9">view</a>] +, [<a href="https://github.com/doxygen/doxygen/commit/e698e53d2c04833143e5ab60f0983e3c683cf85d">view</a>]</li> +<li>Removed ambiguity in the XML schema definition [<a href="https://github.com/doxygen/doxygen/commit/13946338f9e5fcdb6dca7f8e4c2429ca000455fb">view</a>]</li> +<li>Revert #291 [<a href="https://github.com/doxygen/doxygen/commit/6ea76e0d89aff8399117e602a3eab1f7d93e466b">view</a>]</li> +<li>Simplified code of fix for Bug <a href="https://github.com/doxygen/doxygen/issues/5982">5982</a> [<a href="https://github.com/doxygen/doxygen/commit/e70b45fa4398450b588122f9d36b1ed514fc336a">view</a>]</li> +<li>Sorting in latex index and missing \@ in index [<a href="https://github.com/doxygen/doxygen/commit/558958dca5e5cb50bd33f3344cab151aba9ce076">view</a>]</li> +<li>Split apt-get install commands in travis config in an attempt to reduce timeouts [<a href="https://github.com/doxygen/doxygen/commit/2f6f48567cb48d21361237a7905e27744e0acf91">view</a>]</li> +<li>Style fixes and added numbering to overloaded members [<a href="https://github.com/doxygen/doxygen/commit/5af8d5e87657a2d3986783493c618df335b3771c">view</a>]</li> +<li>Table of contents breaks when documentation spans multiple comment blocks with same @page [<a href="https://github.com/doxygen/doxygen/commit/7f7f7273f816335d556668b86aa99d05f7f09992">view</a>]</li> +<li>Unified display of enum values across output formats and languages [<a href="https://github.com/doxygen/doxygen/commit/9c915b83bc06babe6f0127f6446143ea50d00b62">view</a>]</li> +<li>Unify handling of extra packages in formula.cpp and latexgen.cpp so formula.cpp handles package arguments correctly [<a href="https://github.com/doxygen/doxygen/commit/4d2e203a55a2af8f15a3933b86201e6e9b6901b3">view</a>]</li> +<li>Update LICENSE file to latest from FSF [<a href="https://github.com/doxygen/doxygen/commit/48eb44a00b4b805fda0da82620d7efb135116d23">view</a>]</li> +<li>Update copyright year in docs [<a href="https://github.com/doxygen/doxygen/commit/b721f6e1707f8cc446c0d7f9956e6d4aa9f17bc9">view</a>]</li> +<li>Updated README.md to include code docs [<a href="https://github.com/doxygen/doxygen/commit/3911ebdad44a91a6b825051a1ae0f7b280c84567">view</a>]</li> +<li>Updated stylesheet for the manual to fix layout issue in the navigation tree [<a href="https://github.com/doxygen/doxygen/commit/64597bbe46169c08b591a8714f48d314c5341cc2">view</a>]</li> +<li>Warnings from CLANG compiler [<a href="https://github.com/doxygen/doxygen/commit/fdfb027f346c30d6cd209b366e6cb879fb11cbcb">view</a>]</li> +<li>fix ninja build error [<a href="https://github.com/doxygen/doxygen/commit/c4cdfdf65073824d7badb38a1f535310b93d50a9">view</a>]</li> +<li>fixed rtf subsection [<a href="https://github.com/doxygen/doxygen/commit/17bd813313cf073a437001f2fa550f286458586e">view</a>]</li> +<li>mangen.h: remove italic in brief member descriptions [<a href="https://github.com/doxygen/doxygen/commit/5716f0aee08bfc9daf7ab7e22566e5acc51446d0">view</a>]</li> +<li>reimplemented removeRedundantWhiteSpace() to improve performance [<a href="https://github.com/doxygen/doxygen/commit/00ee930a1d73e11885197102c54fd4c8141127da">view</a>]</li> +<li>sqlite3gen: defnname -> defname [<a href="https://github.com/doxygen/doxygen/commit/79a53cc464ef814adf6b64d45a15fee6676f15d6">view</a>]</li> +<li>sqlite3gen: export proper memberdef refid [<a href="https://github.com/doxygen/doxygen/commit/918cf6871359da9d14dd6d3e7c4d00d6ca9a496e">view</a>]</li> +<li>sqlite3gen: insert xrefs using integer refids [<a href="https://github.com/doxygen/doxygen/commit/bac76c1957de71e3e0bddc23ccd46b7b2537c8a1">view</a>]</li> +<li>sqlite3gen: stripFromPath on all calls to insertFile [<a href="https://github.com/doxygen/doxygen/commit/87222afcfe6089899c8ded60b23692fd40997856">view</a>]</li> +<li>sqlite3gen: stripWhitespace on bitfield's text [<a href="https://github.com/doxygen/doxygen/commit/6f4561608adaf8230c2fa015770dfeeab5ce3ba8">view</a>]</li> +<li>sqlite3gen: sync with xmlgen [<a href="https://github.com/doxygen/doxygen/commit/8208b2d5514a3c29659ae967da544adc21585212">view</a>]</li> +<li>sqlite3gen: use the refid stored in the refids table [<a href="https://github.com/doxygen/doxygen/commit/9b02db93e7e78aedc0a0ca7fd2701c81dc153487">view</a>]</li> </ul> <p> \endhtmlonly @@ -359,153 +760,153 @@ <a name="1.8.11"></a> </p> <ul> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1204">1204</a> - Mainpage title has wrong style in RTF [<a href="http://github.com/doxygen/doxygen/commit/021dfd44f2dbeeaac1b9aff95ddc2a3eae173eb4">view</a> and [<a href="http://github.com/doxygen/doxygen/commit/83f23a4f7f7d1351ef89a4e54db6628a9d582dc5">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2059">2059</a> - $line param [<a href="http://github.com/doxygen/doxygen/commit/993972cd242527ddf929756141a68cccfc8ecef9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2258">2258</a> - python: tuple assignment not recognized as variable initialization [<a href="http://github.com/doxygen/doxygen/commit/015955e0badb6082a1e553392acaeb6890734c31">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2653">2653</a> - Fixes angle brackets (< and >) not escaped in HTML formula alt text [<a href="http://github.com/doxygen/doxygen/commit/64adce8b82c332b3855cdfaaa71afc984ffc4ca9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3354">3354</a> - [Python] Add pyw as a valid extension [<a href="http://github.com/doxygen/doxygen/commit/5924acd279f82d8db7ddb33a6ec67937084d7c31">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3499">3499</a> - Python: STRIP_CODE_COMMENTS Doesn't work within the source code [<a href="http://github.com/doxygen/doxygen/commit/4cad0c9ac3492dd504104b15c9a03ef903950e15">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3515">3515</a> - Python ignores \private tag [<a href="http://github.com/doxygen/doxygen/commit/8782107300b24ac5501d8a5ada9be0859a0ee432">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3621">3621</a> - Deprecated list: Wrong prefix '<globalScope>::' for global functions [<a href="http://github.com/doxygen/doxygen/commit/a5288aca31ccecb78b561b4f382fe6c559bea9f9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3935">3935</a> - Incorrect "References" and "Referenced by" [<a href="http://github.com/doxygen/doxygen/commit/43c415708be4c2d4065ecda9870d361b0beb0f09">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4129">4129</a> - python script with #!/usr/bin/python are not documented correctly [<a href="http://github.com/doxygen/doxygen/commit/322d09de48c07cf7258825e3e7733d5d994e70cf">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4214">4214</a> - htmlonly content appears in generated XML output [<a href="http://github.com/doxygen/doxygen/commit/02ce4f0b2b58ef32dd783b359daf7cc01079462a">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/6004d659c1ca280acc6588351176be63b55faf70">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4249">4249</a> - PYTHON: stops processing the file after encountering \"""" [<a href="http://github.com/doxygen/doxygen/commit/59fdba0dd1e3765a2f53b222fdc9455114f720b1">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4433">4433</a> - writeMemberNavIndex template calls static fixSpaces [<a href="http://github.com/doxygen/doxygen/commit/69d5ffaa68210a6e63a618ef304c63462f6e1fac">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4856">4856</a> - Math does not work in LaTeX with custom header and footer. [<a href="http://github.com/doxygen/doxygen/commit/c713984bf6a4c9e8c2ea393b304682ce4a56358f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5503">5503</a> - Markdown backticks not processed within Markdown links. [<a href="http://github.com/doxygen/doxygen/commit/205f7335bca570e87afc0df07bd355848c7af2e3">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5510">5510</a> - doxygen's \param command is confused by some python default values [<a href="http://github.com/doxygen/doxygen/commit/6447c90acb51807d272ce2f24a94574a413d36e0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5556">5556</a> - Python: Allow undocumented "cls" parameter for class methods [<a href="http://github.com/doxygen/doxygen/commit/0a5dfb77a7d0dfaac2baf8f3e61014a29ba2883b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5715">5715</a> - Unnamed structs gives: QGDict::hashAsciiKey: Invalid null key [<a href="http://github.com/doxygen/doxygen/commit/17b66265ace3418413b5cfab0335b4378e9c176b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5747">5747</a> - PATCH: add option to build latex without timestamps [<a href="http://github.com/doxygen/doxygen/commit/9ef2dc156c37da7fb736c39c3c3fa5074e4d1829">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5755">5755</a> - The table in classes.html has no class attribute [<a href="http://github.com/doxygen/doxygen/commit/0b4b2d76e4cc8fcb85d9b3ad7252e676e5a1d784">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5760">5760</a> - formulas creating invalid HTML code [<a href="http://github.com/doxygen/doxygen/commit/d5905871951cde51c6dcaa01d745de2f884ce9a9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5763">5763</a> - Doxygen thinks C++ class is Objective-C [<a href="http://github.com/doxygen/doxygen/commit/8da86f8adfb826f13321c7d163431f9671ba20b7">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5808">5808</a> - Doxygen don't support longer key in bibtex [<a href="http://github.com/doxygen/doxygen/commit/b0fc11e4a891e51bb4d982730efecddac2ef807e">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5809">5809</a> - \cite still rejects valid BibTeX keys [<a href="http://github.com/doxygen/doxygen/commit/b1601548308c8a6ec586a406155d24f80d75aafd">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5821">5821</a> - using plantuml cause a popup "openwith" windows when calling java.exe [<a href="http://github.com/doxygen/doxygen/commit/51ee1b0633fbfa935da08c8a13f70da6fc1c074d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5826">5826</a> - PATCH: Honour SOURCE_DATE_EPOCH environment variable for reproducible output [<a href="http://github.com/doxygen/doxygen/commit/b31266c1076c6284116f17241d9e8aa048f88e60">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5830">5830</a> - XML not documenting a class in python [<a href="http://github.com/doxygen/doxygen/commit/288afe7d4fe0953f5717b0ac85f805f78d96afa4">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5831">5831</a> - XML empty <argsstring/> in python [<a href="http://github.com/doxygen/doxygen/commit/a1b3f7b1157b8e7b392bfcd6c6452c664bf5a7c2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5832">5832</a> - last entry missing in a @name group of typedefs [<a href="http://github.com/doxygen/doxygen/commit/21d14b3c7697f8807065070f5850259b1b6550e4">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5833">5833</a> - Non-alphanumeric characters in Markdown links don't work properly [<a href="http://github.com/doxygen/doxygen/commit/e89eb77b14810649c679dc7d377ddb4e6a942d82">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5839">5839</a> - $file when using @name is wrong [<a href="http://github.com/doxygen/doxygen/commit/790887ea3f63c051954a4cd49f044fa4f536867d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5845">5845</a> - Copy and paste of code fragment from CHM merges all pasted text into single line [<a href="http://github.com/doxygen/doxygen/commit/663544cc0caf9109ea10c33f38b1e07e7a01a575">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5847">5847</a> - class="current" not applied to <li> for module tab within 'group__*.html' module html files [<a href="http://github.com/doxygen/doxygen/commit/0e2e8916f81892c891a33c5435024776ca0f570f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5848">5848</a> - \bug paragraph doesn't end with a new sectioning command [<a href="http://github.com/doxygen/doxygen/commit/13e2b18c93df1351c4e91d13a7fe224b4841fa73">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5859">5859</a> - Double anchors when using groups [<a href="http://github.com/doxygen/doxygen/commit/e44780a7579ca865cc52801e920b1d20d2a3b438">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5869">5869</a> - xrefitem link to list incorrect when using SHORT_NAMES [<a href="http://github.com/doxygen/doxygen/commit/af5c5b37c5464afb6a2df71edf6f9e82ece75187">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5873">5873</a> - Tree view pane overlaps with content tabs [<a href="http://github.com/doxygen/doxygen/commit/8fc243491cbae2442c1e07faca99a8f6dc6f2e19">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5877">5877</a> - RTF output has incomplete "References" and "Referenced by" sections [<a href="http://github.com/doxygen/doxygen/commit/6184c70c515941212380006a2e6c879e1663daec">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5878">5878</a> - fatal: Cannot open 'graph_legend': No such file or directory [<a href="http://github.com/doxygen/doxygen/commit/08cf278fb80ffb7844b4339458cf4ad03453e827">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5879">5879</a> - Warning refers to incorrect line for undocumented member function (C++) [<a href="http://github.com/doxygen/doxygen/commit/a112c70c7a5d590286e0fad1382b9bb3fd86118b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5883">5883</a> - Race condition in parallel DOT runs [<a href="http://github.com/doxygen/doxygen/commit/f196c9f1d69238a814ff3152103f3bd310efdf0d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5885">5885</a> - Unable to prevent a numbered list [<a href="http://github.com/doxygen/doxygen/commit/3fbb1b66bd5303fa789a36317694bd77eb22ee19">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/5487f855ad12d0b7f3ba70aab72fd2debedae16d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5888">5888</a> - Inline markdown links don't support reference targets that contain ) [<a href="http://github.com/doxygen/doxygen/commit/59a42f974f15fa0154317900ffd9b82babd985ad">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5890">5890</a> - Failed to document nested classes with "reference to array" parameters [<a href="http://github.com/doxygen/doxygen/commit/3bcef269a4fe5bfc1921d7ba934bc09c715eae9c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5893">5893</a> - unclosed tag, c# generics method with where [<a href="http://github.com/doxygen/doxygen/commit/1bb819f5b680d600f010761b21e44df2f5e35ccc">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5894">5894</a> - Doxygen do not support comparison angle bracket in template [<a href="http://github.com/doxygen/doxygen/commit/f836266a4538153a1164642e168bb04c529a4d51">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5897">5897</a> - Brief description of non documented functions [<a href="http://github.com/doxygen/doxygen/commit/7a2164d252a0cb5410ab13b0ca1611a8e94e3c99">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/1b402f49a0638dd0eec2a123462862c6d4c4084d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5898">5898</a> - Bug in VHDL parser + other fixes [<a href="http://github.com/doxygen/doxygen/commit/4bef27771fec1892331df637dd6184abac36fd8f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5900">5900</a> - C++ templated member-function appears both as public and private [<a href="http://github.com/doxygen/doxygen/commit/bb4e403968dc1ac4deb3b47c0b79b4304f1be288">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5904">5904</a> - Markdown fenced code blocks not parsed properly in comment [<a href="http://github.com/doxygen/doxygen/commit/ae6311ea0855d576a7c4b589dd5f4b994a47fd6c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5910">5910</a> - C++11 unified initializer for array with templates treated as function [<a href="http://github.com/doxygen/doxygen/commit/692544fb47407a3f2c5a5a5e4b80185428adda25">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5913">5913</a> - Doxygen parser confused by C++11 attributes [<a href="http://github.com/doxygen/doxygen/commit/6c005b1e9458430a77bfeba6d08deed4778ad71d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5916">5916</a> - unable to @ref or @link C++ templated operator overloads [<a href="http://github.com/doxygen/doxygen/commit/da09bff6dc9cad40c72b6a858728093cc41dff47">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5919">5919</a> - problems with charset using plantuml [<a href="http://github.com/doxygen/doxygen/commit/165498dc9ea33bc9991c5ab5234b5e51d74569d0">view</a>]</li> -<li>Actually using value of GROUP_NESTED_COMPOUNDS option [<a href="http://github.com/doxygen/doxygen/commit/3b314b5d856f6f7a25d512737e640a6b7b17c8d4">view</a>]</li> -<li>Add RPM build for Red Hat [<a href="http://github.com/doxygen/doxygen/commit/7f8f31cb8318e663f2ec145b63fb31278bdd7a76">view</a>]</li> -<li>Add WARN_AS_ERROR option to stop execution at first warning (equivalent of compilers' -Werror option) [<a href="http://github.com/doxygen/doxygen/commit/38277f1da56c212c9b33f774de412edef1156544">view</a>]</li> -<li>Add examples to LaTeX / PDF doxygen manual [<a href="http://github.com/doxygen/doxygen/commit/3a236fd01dc23d2d979e06d848f61b002cb4e6ee">view</a> and [<a href="http://github.com/doxygen/doxygen/commit/5e11f885eea694c2ecfeae6ff5774b66eea312e4">view</a>]</li> -<li>Add mathjax support to template & context. [<a href="http://github.com/doxygen/doxygen/commit/56987af3987f40ac77e70cd39ebbdac3702c1ce2">view</a>]</li> -<li>Add support for "value" attribute in FORTRAN scanner [<a href="http://github.com/doxygen/doxygen/commit/6dacbd9b22bdd6cd1a8c3e9b5ec8c2f7d15977b8">view</a>]</li> -<li>Added documentation for creating tables [<a href="http://github.com/doxygen/doxygen/commit/23faa449843eeb4c9e40e650df8844abec024bb7">view</a>]</li> -<li>Added javascript search engine data to the template context [<a href="http://github.com/doxygen/doxygen/commit/6bb0d2908b4ca7908a8e655a5abcf7615a5f4c77">view</a>]</li> -<li>Added missing html resources to the html template file [<a href="http://github.com/doxygen/doxygen/commit/43a0883022f64539498b84220d487b16ffd49a7e">view</a>]</li> -<li>Added missing information to template version of the all members list [<a href="http://github.com/doxygen/doxygen/commit/f16c156065ac8bc6242870c2ae701252b5d4f9b2">view</a>]</li> -<li>Added support for directory dependency graphs to template engine [<a href="http://github.com/doxygen/doxygen/commit/abe254fbe2235f5b913653acd076d2acd579d5e1">view</a>]</li> -<li>Adding compilation options for flex/lex and bison/yacc [<a href="http://github.com/doxygen/doxygen/commit/beb2ff6c39fefbd6aaeecd5de9827d1b1947740b">view</a>]</li> -<li>Adjusted used option for CLANG usage with CMake in documentation [<a href="http://github.com/doxygen/doxygen/commit/82063c0601b9f7b11c1774a1a42e13295c486467">view</a>]</li> -<li>Alignment in LaTeX parameter table [<a href="http://github.com/doxygen/doxygen/commit/a0880ff1c41a1c57bc92c1ccf99cf750064e2995">view</a>]</li> -<li>Avoid using Resource::data as string, as it is not null terminated. [<a href="http://github.com/doxygen/doxygen/commit/15a87a623791bf407b3076960cdd1133c8973357">view</a>]</li> -<li>Better handling of implicit statement in source code browser [<a href="http://github.com/doxygen/doxygen/commit/404468ac5484d54e47129ce2a00b3ad6e1c2c72a">view</a>]</li> -<li>Bug 149792 - Mainpage title has wrong style in RTF [<a href="http://github.com/doxygen/doxygen/commit/077aeb768767e62407abb4759d44671619bc62fd">view</a>]</li> -<li>Bump version so that the GIT repo represents the version for the "next" release [<a href="http://github.com/doxygen/doxygen/commit/42c376cdb41db392bd025611ccfcaddb49d05e92">view</a>]</li> -<li>Cmake tries to remove directory refman.tex instead of file refman.tex [<a href="http://github.com/doxygen/doxygen/commit/63094c8bb34a2e02e8490860660303d849e4a984">view</a>]</li> -<li>Copy user EXTRA_FILES at the end to overrule files generated by default by doxygen [<a href="http://github.com/doxygen/doxygen/commit/82f08138ad08fa5b8906c162283c4df0e9819d83">view</a>]</li> -<li>Correct / set types for python variables [<a href="http://github.com/doxygen/doxygen/commit/c47920b217491fc861cdac73d44ab4f93d08423e">view</a>]</li> -<li>Correcting print format error in config.l [<a href="http://github.com/doxygen/doxygen/commit/9947c11284542a74c56e52b55be032350c6bbc3e">view</a>]</li> -<li>DO NOT hardcode x86-64 architecture. [<a href="http://github.com/doxygen/doxygen/commit/031780293d2838da2643b46878061598ebb56822">view</a>]</li> -<li>Don't show a console when launching doxywizard on Windows. [<a href="http://github.com/doxygen/doxygen/commit/942efcb758977fe95fafc473813528085b56e4ee">view</a>]</li> -<li>Fix computeCommonDirPrefix sometimes not finding the correct prefix [<a href="http://github.com/doxygen/doxygen/commit/c6bf96520bcff56d3fd67d4277c05b8db9ac2128">view</a>]</li> -<li>Fix error documentation of in flex debug script [<a href="http://github.com/doxygen/doxygen/commit/09c4e990e4e214900e613343fb9bfbbb08f1bc53">view</a>]</li> -<li>Fix for broken link in the manual [<a href="http://github.com/doxygen/doxygen/commit/355370151b61f79633b3867634d76eaf8bacce54">view</a>]</li> -<li>Fix hexChar for inputs 0 <= i < 10 [<a href="http://github.com/doxygen/doxygen/commit/327422d131ed5e6ddf280043b5a56a6fb92d3bbc">view</a> and [<a href="http://github.com/doxygen/doxygen/commit/62da4521880a03b8a92887539eaf76ccad2ee770">view</a>]</li> -<li>Fix spelling in doc/commands.doc (descriptionm) [<a href="http://github.com/doxygen/doxygen/commit/bd7da008fac074202e3265787907434fbfb40e71">view</a>]</li> -<li>Fix typo in function name [<a href="http://github.com/doxygen/doxygen/commit/ace0af42e330a96ad691b2d9a08dd3ff4abb2629">view</a> and [<a href="http://github.com/doxygen/doxygen/commit/b890f40d195b9dc5db12aaa398707de138093c66">view</a>]</li> -<li>Fixed a couple of small memory leaks [<a href="http://github.com/doxygen/doxygen/commit/85ddfc814f33943199928447b4627d05b0920b99">view</a>]</li> -<li>Fixed a number of memory leaks in the template engine [<a href="http://github.com/doxygen/doxygen/commit/d14bcd1f8f5bd4a2034bae842000630f4e098eb6">view</a>]</li> -<li>Fixed compiler warning for MacOSX [<a href="http://github.com/doxygen/doxygen/commit/0aa27346b8728f6698dd2b363959e89d02e03ff6">view</a>]</li> -<li>Fixed link issue for MacOSX 10.11 [<a href="http://github.com/doxygen/doxygen/commit/0918a19225daedfbd5e23388124a5de3860d5420">view</a>]</li> -<li>Fixed minor typos in comments [<a href="http://github.com/doxygen/doxygen/commit/29c500434d30cd4d9c20f6b295475ed42dba2930">view</a>]</li> -<li>Fixed preprocessor macros for flex version check [<a href="http://github.com/doxygen/doxygen/commit/a8c73cdbe37cc53c398002d20e94037552a8fb55">view</a>]</li> -<li>Fixed problem with latex and PDF bookmarks [<a href="http://github.com/doxygen/doxygen/commit/499ecaedf1ee1222535be27f77050ee633595685">view</a>]</li> -<li>Fixed various issues found by PVS-Studio. [<a href="http://github.com/doxygen/doxygen/commit/48ced3ea8071b3141216482e2821e10250910947">view</a>]</li> -<li>Fixes bug 485701: Angle brackets (< and >) not escaped in HTML formula alt text [<a href="http://github.com/doxygen/doxygen/commit/08aa01cb0ee9b2dd6403f753156d8b58d8e62145">view</a>]</li> -<li>Fixes to support nested tables again [<a href="http://github.com/doxygen/doxygen/commit/883989fced827524354297009fde396ca6264a31">view</a>]</li> -<li>Fortran module private variables and EXTRACT_PRIVATE = NO [<a href="http://github.com/doxygen/doxygen/commit/61820a08200ec62c754cacf8dd3a1121ce6dee69">view</a> and <a href="http://github.com/doxygen/doxygen/commit/8504fc3a06e3430242eab9ac1c1f20319112e6a9">view</a>]</li> -<li>Improved handling of <caption> in tables for LaTeX output. [<a href="http://github.com/doxygen/doxygen/commit/fa6585b2fc6847c2b242b226b163810c7a6366de">view</a>]</li> -<li>IncludeInfo class had uninitialized member variable [<a href="http://github.com/doxygen/doxygen/commit/76a9892b190efaeb3c764d824bd285ff3d2c57dc">view</a>]</li> -<li>Made paragraph spacing more flexible in the LaTeX output to prevent page overflows [<a href="http://github.com/doxygen/doxygen/commit/17b3b41e12e890187f6b7dcc98ed9e2451b14018">view</a>]</li> -<li>Made several improvements to the performance of template engine [<a href="http://github.com/doxygen/doxygen/commit/ded4e9a92670d0157cdcc5cbf7a4a1e3193e179a">view</a>]</li> -<li>Make doxywizard compatible with Qt5 [<a href="http://github.com/doxygen/doxygen/commit/333c7c44f1aa3c62f9401b190e45eaff15056d5c">view</a>]</li> -<li>Make list of default extensions consistent with language mapping list [<a href="http://github.com/doxygen/doxygen/commit/bf35f16863f067286260ad4b68ec4c0ae7febdf1">view</a>]</li> -<li>Markdown with @cond and @endcond [<a href="http://github.com/doxygen/doxygen/commit/c5a7911741850777b699a63ae5b7702e379a5ada">view</a>]</li> -<li>Markdown with @cond and @endcond [<a href="http://github.com/doxygen/doxygen/commit/dc26830396970d402ad42d20f1b99bd86f4a5961">view</a>]</li> -<li>Merge remote-tracking branch 'upstream/master' [<a href="http://github.com/doxygen/doxygen/commit/6aba65a4dfaec1aa1131e160ed252d0713403760">view</a>]</li> -<li>Minor change to pycode.l:codifyLines [<a href="http://github.com/doxygen/doxygen/commit/bbd71be14986e637af9958b2cc18d1d62743ba8e">view</a>]</li> -<li>Moved creation of inline class documentation to separate template file [<a href="http://github.com/doxygen/doxygen/commit/4bd50c9f0dc1d7b1413a6bda587b8a5999cd7a19">view</a>]</li> -<li>RTF improvement: Example section was merged with next function title [<a href="http://github.com/doxygen/doxygen/commit/ca617e1e1cd42ee0080c8c13ce3884c8671629dd">view</a>]</li> -<li>Remove obsolete py files [<a href="http://github.com/doxygen/doxygen/commit/183f36fe97cb95636f1947c2c4be61f7b78f87e0">view</a>]</li> -<li>Removed BOM marker from greek translator to avoid Visual C warnings [<a href="http://github.com/doxygen/doxygen/commit/9ee8f777f5a4b7a49e644c2da5247fa509038feb">view</a>]</li> -<li>Repaired breaking @include for LaTeX output [<a href="http://github.com/doxygen/doxygen/commit/ab861c197c596f78c7aea4f45c0e1252de10fc1f">view</a>]</li> -<li>Revert "Spelling correction for error message with USE_HTAGS usage" [<a href="http://github.com/doxygen/doxygen/commit/a888543ca5f3fd28121f7eea4dbd25898fa7be57">view</a>]</li> -<li>Revert using container-based infra as sudo is needed :-( [<a href="http://github.com/doxygen/doxygen/commit/f089c3fa4f47dc8bedd25d9d857d004525ee82c0">view</a>]</li> -<li>Reverted change that caused doxygen to return error code 2 when it produced a warning [<a href="http://github.com/doxygen/doxygen/commit/f9e6fe0bf3886be7e603083b3b200dbd60fbd529">view</a>]</li> -<li>Rework the generation of packages DEB/RPM/... (CPack) [<a href="http://github.com/doxygen/doxygen/commit/8c0c80e44e1e9cb1ce4e88a3e1d01b65536dc60c">view</a>]</li> -<li>Right alignment of in page table of contents [<a href="http://github.com/doxygen/doxygen/commit/a653f7499929f3f0a5b68614dec91242fbc0edf5">view</a>]</li> -<li>Small correction of errors in case of CSharp XML tags [<a href="http://github.com/doxygen/doxygen/commit/68dd27139e50e048f081549394e6fc6dc04fc699">view</a>]</li> -<li>Small documentation corrections [<a href="http://github.com/doxygen/doxygen/commit/564c8cd257e0dd1797d94633a0e92ddc5a496540">view</a>]</li> -<li>Spelling correction for error message with USE_HTAGS usage [<a href="http://github.com/doxygen/doxygen/commit/0d060c455207ab32092e5a7edcd5457bb00f4653">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/5cc45244002d1d7560233cfae01f9d5d735e1a3f">view</a>]</li> -<li>Started with generating LaTeX output via the template engine [<a href="http://github.com/doxygen/doxygen/commit/02a0c353a8947290a3191aead59db08dc84766ce">view</a>]</li> -<li>Stop when doxygen configuration file ("Doxyfile") cannot be read [<a href="http://github.com/doxygen/doxygen/commit/b8bd3d84590d9adee7084f066f0e3e8c75a99245">view</a>]</li> -<li>Support flex-2.6.0 [<a href="http://github.com/doxygen/doxygen/commit/8c51120ad55b440b738ef0b96f8169d84a7ae88a">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/cf936efb8ae99dd297b6afb9c6a06beb81f5b0fb">view</a>]</li> -<li>Support set in code highlighting [<a href="http://github.com/doxygen/doxygen/commit/1cbcce4ef3460f48ab9c8e9435eec21075dcc788">view</a>]</li> -<li>Template enhancements and various other small fixes [<a href="http://github.com/doxygen/doxygen/commit/e58fb0a46f73f37d16859f43fda1eb5ba4a15c5d">view</a>]</li> -<li>Title in case of USE_MDFILE_AS_MAINPAGE [<a href="http://github.com/doxygen/doxygen/commit/09251b805b3c9d96917fedebb3768945d7559b1e">view</a>]</li> -<li>Tooltip can still contain < and > signs [<a href="http://github.com/doxygen/doxygen/commit/1df28fe4b9a0187f8fa6ed077e4a81002fa50fda">view</a>]</li> -<li>Tweaked the htmlonly sections in the manual so it produces valid HTML output [<a href="http://github.com/doxygen/doxygen/commit/de03970396e6f7edec359e2b71f3d2aa9d6a6237">view</a>]</li> -<li>Undo _doxygen to libdoxygen target change [<a href="http://github.com/doxygen/doxygen/commit/940048580f2d61a137e7abbb67b3aed567bfe865">view</a>]</li> -<li>Updated instructions to toggle debugging flex code [<a href="http://github.com/doxygen/doxygen/commit/368f4f057be0ded4673be826c9a08cd771a023ce">view</a>]</li> -<li>Updated Italian translation and translator email address [<a href="http://github.com/doxygen/doxygen/commit/a9ad21b4e541d91c804ac39e393cc0c1db4f45f3">view</a>]</li> -<li>Updated the Greek translation [<a href="http://github.com/doxygen/doxygen/commit/4e0b7f0b9a2a04d0bb5e66871da6d7ffa786836e">view</a>]</li> -<li>Use CPack to generate rpm/deb packages [<a href="http://github.com/doxygen/doxygen/commit/ba6eb1478d24dc32d4e123951e2f62c75b4b88bd">view</a>]</li> -<li>Use STATIC libraries to prevent them being shared [<a href="http://github.com/doxygen/doxygen/commit/37a148f6e35523fd2bbbdbc37e6ed838684c6d90">view</a>]</li> -<li>Using tabu package for LaTeX tables [<a href="http://github.com/doxygen/doxygen/commit/647b6ac8669cd8ba1e8c60eeb3c2de961c7d6a1b">view</a>]</li> -<li>[Bug <a href="https://github.com/doxygen/doxygen/issues/5872">5872</a>] On Windows, generated layout is with UNIX EOL [<a href="http://github.com/doxygen/doxygen/commit/78a80001223af290c7c7321ad2d210fb3cd16f11">view</a>]</li> -<li>[Doxygen-users] plugin / filter not behaving as expected [<a href="http://github.com/doxygen/doxygen/commit/0c7f182016c7c2604a484367738e76cb40c0541b">view</a>]</li> -<li>add spaces like "Doyxgen"CN_SPC->"Doyxgen" CN_SPC [<a href="http://github.com/doxygen/doxygen/commit/35d1aa8bf9208302601fa96462e246c98aa0b0e5">view</a>]</li> -<li>allow building with custom iconv on Windows [<a href="http://github.com/doxygen/doxygen/commit/3d684f6d123abdbf630bb19bc6095cc9d69efb68">view</a>]</li> -<li>doc: generate doxygen's documentation. [<a href="http://github.com/doxygen/doxygen/commit/3c4a1ea2ee56f2604c2277f13737d53b3a0b0353">view</a>]</li> -<li>doc: put man pages under share/man/man1 [<a href="http://github.com/doxygen/doxygen/commit/95d28153779810dc95afafa38ed838f32516a1f4">view</a>]</li> -<li>docparser: warn when finding a documented empty return type [<a href="http://github.com/doxygen/doxygen/commit/10989e2dade3bb35a421787c5315d2630d665842">view</a>]</li> -<li>docs: add examples as a dependency of docs [<a href="http://github.com/doxygen/doxygen/commit/ec5fde6913935fbe2015220259b611a17a437de3">view</a>]</li> -<li>doxyapp and CLANG linking [<a href="http://github.com/doxygen/doxygen/commit/a58a2cafbc136f7821b9313bd6c1413eaab3e868">view</a>]</li> -<li>fixed for travis ci config file [<a href="http://github.com/doxygen/doxygen/commit/ecbb77b40892df8740476023545769ffbda6fd6f">view</a>]</li> -<li>libpng warning: iCCP: known incorrect sRGB profile [<a href="http://github.com/doxygen/doxygen/commit/c82ac124812dd2f9a5e8b36fcdcf7daf20cfbdda">view</a>]</li> -<li>rename build target _doxygen to libdoxygen [<a href="http://github.com/doxygen/doxygen/commit/4116648d3c62aee54c385644a4fe754ee7a4261d">view</a>]</li> -<li>run_translator.cmake is no longer used [<a href="http://github.com/doxygen/doxygen/commit/45e153f2238d0fa031d147cfe207e52b913845eb">view</a>]</li> -<li>runtests: Simplify dictionary usage [<a href="http://github.com/doxygen/doxygen/commit/95d99a4c857d7d5208d8faf974b01354a798eba4">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1204">1204</a> - Mainpage title has wrong style in RTF [<a href="https://github.com/doxygen/doxygen/commit/021dfd44f2dbeeaac1b9aff95ddc2a3eae173eb4">view</a> and [<a href="https://github.com/doxygen/doxygen/commit/83f23a4f7f7d1351ef89a4e54db6628a9d582dc5">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2059">2059</a> - $line param [<a href="https://github.com/doxygen/doxygen/commit/993972cd242527ddf929756141a68cccfc8ecef9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2258">2258</a> - python: tuple assignment not recognized as variable initialization [<a href="https://github.com/doxygen/doxygen/commit/015955e0badb6082a1e553392acaeb6890734c31">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2653">2653</a> - Fixes angle brackets (< and >) not escaped in HTML formula alt text [<a href="https://github.com/doxygen/doxygen/commit/64adce8b82c332b3855cdfaaa71afc984ffc4ca9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3354">3354</a> - [Python] Add pyw as a valid extension [<a href="https://github.com/doxygen/doxygen/commit/5924acd279f82d8db7ddb33a6ec67937084d7c31">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3499">3499</a> - Python: STRIP_CODE_COMMENTS Doesn't work within the source code [<a href="https://github.com/doxygen/doxygen/commit/4cad0c9ac3492dd504104b15c9a03ef903950e15">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3515">3515</a> - Python ignores \private tag [<a href="https://github.com/doxygen/doxygen/commit/8782107300b24ac5501d8a5ada9be0859a0ee432">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3621">3621</a> - Deprecated list: Wrong prefix '<globalScope>::' for global functions [<a href="https://github.com/doxygen/doxygen/commit/a5288aca31ccecb78b561b4f382fe6c559bea9f9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3935">3935</a> - Incorrect "References" and "Referenced by" [<a href="https://github.com/doxygen/doxygen/commit/43c415708be4c2d4065ecda9870d361b0beb0f09">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4129">4129</a> - python script with #!/usr/bin/python are not documented correctly [<a href="https://github.com/doxygen/doxygen/commit/322d09de48c07cf7258825e3e7733d5d994e70cf">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4214">4214</a> - htmlonly content appears in generated XML output [<a href="https://github.com/doxygen/doxygen/commit/02ce4f0b2b58ef32dd783b359daf7cc01079462a">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/6004d659c1ca280acc6588351176be63b55faf70">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4249">4249</a> - PYTHON: stops processing the file after encountering \"""" [<a href="https://github.com/doxygen/doxygen/commit/59fdba0dd1e3765a2f53b222fdc9455114f720b1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4433">4433</a> - writeMemberNavIndex template calls static fixSpaces [<a href="https://github.com/doxygen/doxygen/commit/69d5ffaa68210a6e63a618ef304c63462f6e1fac">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4856">4856</a> - Math does not work in LaTeX with custom header and footer. [<a href="https://github.com/doxygen/doxygen/commit/c713984bf6a4c9e8c2ea393b304682ce4a56358f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5503">5503</a> - Markdown backticks not processed within Markdown links. [<a href="https://github.com/doxygen/doxygen/commit/205f7335bca570e87afc0df07bd355848c7af2e3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5510">5510</a> - doxygen's \param command is confused by some python default values [<a href="https://github.com/doxygen/doxygen/commit/6447c90acb51807d272ce2f24a94574a413d36e0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5556">5556</a> - Python: Allow undocumented "cls" parameter for class methods [<a href="https://github.com/doxygen/doxygen/commit/0a5dfb77a7d0dfaac2baf8f3e61014a29ba2883b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5715">5715</a> - Unnamed structs gives: QGDict::hashAsciiKey: Invalid null key [<a href="https://github.com/doxygen/doxygen/commit/17b66265ace3418413b5cfab0335b4378e9c176b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5747">5747</a> - PATCH: add option to build latex without timestamps [<a href="https://github.com/doxygen/doxygen/commit/9ef2dc156c37da7fb736c39c3c3fa5074e4d1829">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5755">5755</a> - The table in classes.html has no class attribute [<a href="https://github.com/doxygen/doxygen/commit/0b4b2d76e4cc8fcb85d9b3ad7252e676e5a1d784">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5760">5760</a> - formulas creating invalid HTML code [<a href="https://github.com/doxygen/doxygen/commit/d5905871951cde51c6dcaa01d745de2f884ce9a9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5763">5763</a> - Doxygen thinks C++ class is Objective-C [<a href="https://github.com/doxygen/doxygen/commit/8da86f8adfb826f13321c7d163431f9671ba20b7">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5808">5808</a> - Doxygen don't support longer key in bibtex [<a href="https://github.com/doxygen/doxygen/commit/b0fc11e4a891e51bb4d982730efecddac2ef807e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5809">5809</a> - \cite still rejects valid BibTeX keys [<a href="https://github.com/doxygen/doxygen/commit/b1601548308c8a6ec586a406155d24f80d75aafd">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5821">5821</a> - using plantuml cause a popup "openwith" windows when calling java.exe [<a href="https://github.com/doxygen/doxygen/commit/51ee1b0633fbfa935da08c8a13f70da6fc1c074d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5826">5826</a> - PATCH: Honour SOURCE_DATE_EPOCH environment variable for reproducible output [<a href="https://github.com/doxygen/doxygen/commit/b31266c1076c6284116f17241d9e8aa048f88e60">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5830">5830</a> - XML not documenting a class in python [<a href="https://github.com/doxygen/doxygen/commit/288afe7d4fe0953f5717b0ac85f805f78d96afa4">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5831">5831</a> - XML empty <argsstring/> in python [<a href="https://github.com/doxygen/doxygen/commit/a1b3f7b1157b8e7b392bfcd6c6452c664bf5a7c2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5832">5832</a> - last entry missing in a @name group of typedefs [<a href="https://github.com/doxygen/doxygen/commit/21d14b3c7697f8807065070f5850259b1b6550e4">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5833">5833</a> - Non-alphanumeric characters in Markdown links don't work properly [<a href="https://github.com/doxygen/doxygen/commit/e89eb77b14810649c679dc7d377ddb4e6a942d82">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5839">5839</a> - $file when using @name is wrong [<a href="https://github.com/doxygen/doxygen/commit/790887ea3f63c051954a4cd49f044fa4f536867d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5845">5845</a> - Copy and paste of code fragment from CHM merges all pasted text into single line [<a href="https://github.com/doxygen/doxygen/commit/663544cc0caf9109ea10c33f38b1e07e7a01a575">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5847">5847</a> - class="current" not applied to <li> for module tab within 'group__*.html' module html files [<a href="https://github.com/doxygen/doxygen/commit/0e2e8916f81892c891a33c5435024776ca0f570f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5848">5848</a> - \bug paragraph doesn't end with a new sectioning command [<a href="https://github.com/doxygen/doxygen/commit/13e2b18c93df1351c4e91d13a7fe224b4841fa73">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5859">5859</a> - Double anchors when using groups [<a href="https://github.com/doxygen/doxygen/commit/e44780a7579ca865cc52801e920b1d20d2a3b438">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5869">5869</a> - xrefitem link to list incorrect when using SHORT_NAMES [<a href="https://github.com/doxygen/doxygen/commit/af5c5b37c5464afb6a2df71edf6f9e82ece75187">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5873">5873</a> - Tree view pane overlaps with content tabs [<a href="https://github.com/doxygen/doxygen/commit/8fc243491cbae2442c1e07faca99a8f6dc6f2e19">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5877">5877</a> - RTF output has incomplete "References" and "Referenced by" sections [<a href="https://github.com/doxygen/doxygen/commit/6184c70c515941212380006a2e6c879e1663daec">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5878">5878</a> - fatal: Cannot open 'graph_legend': No such file or directory [<a href="https://github.com/doxygen/doxygen/commit/08cf278fb80ffb7844b4339458cf4ad03453e827">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5879">5879</a> - Warning refers to incorrect line for undocumented member function (C++) [<a href="https://github.com/doxygen/doxygen/commit/a112c70c7a5d590286e0fad1382b9bb3fd86118b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5883">5883</a> - Race condition in parallel DOT runs [<a href="https://github.com/doxygen/doxygen/commit/f196c9f1d69238a814ff3152103f3bd310efdf0d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5885">5885</a> - Unable to prevent a numbered list [<a href="https://github.com/doxygen/doxygen/commit/3fbb1b66bd5303fa789a36317694bd77eb22ee19">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/5487f855ad12d0b7f3ba70aab72fd2debedae16d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5888">5888</a> - Inline markdown links don't support reference targets that contain ) [<a href="https://github.com/doxygen/doxygen/commit/59a42f974f15fa0154317900ffd9b82babd985ad">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5890">5890</a> - Failed to document nested classes with "reference to array" parameters [<a href="https://github.com/doxygen/doxygen/commit/3bcef269a4fe5bfc1921d7ba934bc09c715eae9c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5893">5893</a> - unclosed tag, c# generics method with where [<a href="https://github.com/doxygen/doxygen/commit/1bb819f5b680d600f010761b21e44df2f5e35ccc">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5894">5894</a> - Doxygen do not support comparison angle bracket in template [<a href="https://github.com/doxygen/doxygen/commit/f836266a4538153a1164642e168bb04c529a4d51">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5897">5897</a> - Brief description of non documented functions [<a href="https://github.com/doxygen/doxygen/commit/7a2164d252a0cb5410ab13b0ca1611a8e94e3c99">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/1b402f49a0638dd0eec2a123462862c6d4c4084d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5898">5898</a> - Bug in VHDL parser + other fixes [<a href="https://github.com/doxygen/doxygen/commit/4bef27771fec1892331df637dd6184abac36fd8f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5900">5900</a> - C++ templated member-function appears both as public and private [<a href="https://github.com/doxygen/doxygen/commit/bb4e403968dc1ac4deb3b47c0b79b4304f1be288">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5904">5904</a> - Markdown fenced code blocks not parsed properly in comment [<a href="https://github.com/doxygen/doxygen/commit/ae6311ea0855d576a7c4b589dd5f4b994a47fd6c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5910">5910</a> - C++11 unified initializer for array with templates treated as function [<a href="https://github.com/doxygen/doxygen/commit/692544fb47407a3f2c5a5a5e4b80185428adda25">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5913">5913</a> - Doxygen parser confused by C++11 attributes [<a href="https://github.com/doxygen/doxygen/commit/6c005b1e9458430a77bfeba6d08deed4778ad71d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5916">5916</a> - unable to @ref or @link C++ templated operator overloads [<a href="https://github.com/doxygen/doxygen/commit/da09bff6dc9cad40c72b6a858728093cc41dff47">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5919">5919</a> - problems with charset using plantuml [<a href="https://github.com/doxygen/doxygen/commit/165498dc9ea33bc9991c5ab5234b5e51d74569d0">view</a>]</li> +<li>Actually using value of GROUP_NESTED_COMPOUNDS option [<a href="https://github.com/doxygen/doxygen/commit/3b314b5d856f6f7a25d512737e640a6b7b17c8d4">view</a>]</li> +<li>Add RPM build for Red Hat [<a href="https://github.com/doxygen/doxygen/commit/7f8f31cb8318e663f2ec145b63fb31278bdd7a76">view</a>]</li> +<li>Add WARN_AS_ERROR option to stop execution at first warning (equivalent of compilers' -Werror option) [<a href="https://github.com/doxygen/doxygen/commit/38277f1da56c212c9b33f774de412edef1156544">view</a>]</li> +<li>Add examples to LaTeX / PDF doxygen manual [<a href="https://github.com/doxygen/doxygen/commit/3a236fd01dc23d2d979e06d848f61b002cb4e6ee">view</a> and [<a href="https://github.com/doxygen/doxygen/commit/5e11f885eea694c2ecfeae6ff5774b66eea312e4">view</a>]</li> +<li>Add mathjax support to template & context. [<a href="https://github.com/doxygen/doxygen/commit/56987af3987f40ac77e70cd39ebbdac3702c1ce2">view</a>]</li> +<li>Add support for "value" attribute in FORTRAN scanner [<a href="https://github.com/doxygen/doxygen/commit/6dacbd9b22bdd6cd1a8c3e9b5ec8c2f7d15977b8">view</a>]</li> +<li>Added documentation for creating tables [<a href="https://github.com/doxygen/doxygen/commit/23faa449843eeb4c9e40e650df8844abec024bb7">view</a>]</li> +<li>Added javascript search engine data to the template context [<a href="https://github.com/doxygen/doxygen/commit/6bb0d2908b4ca7908a8e655a5abcf7615a5f4c77">view</a>]</li> +<li>Added missing html resources to the html template file [<a href="https://github.com/doxygen/doxygen/commit/43a0883022f64539498b84220d487b16ffd49a7e">view</a>]</li> +<li>Added missing information to template version of the all members list [<a href="https://github.com/doxygen/doxygen/commit/f16c156065ac8bc6242870c2ae701252b5d4f9b2">view</a>]</li> +<li>Added support for directory dependency graphs to template engine [<a href="https://github.com/doxygen/doxygen/commit/abe254fbe2235f5b913653acd076d2acd579d5e1">view</a>]</li> +<li>Adding compilation options for flex/lex and bison/yacc [<a href="https://github.com/doxygen/doxygen/commit/beb2ff6c39fefbd6aaeecd5de9827d1b1947740b">view</a>]</li> +<li>Adjusted used option for CLANG usage with CMake in documentation [<a href="https://github.com/doxygen/doxygen/commit/82063c0601b9f7b11c1774a1a42e13295c486467">view</a>]</li> +<li>Alignment in LaTeX parameter table [<a href="https://github.com/doxygen/doxygen/commit/a0880ff1c41a1c57bc92c1ccf99cf750064e2995">view</a>]</li> +<li>Avoid using Resource::data as string, as it is not null terminated. [<a href="https://github.com/doxygen/doxygen/commit/15a87a623791bf407b3076960cdd1133c8973357">view</a>]</li> +<li>Better handling of implicit statement in source code browser [<a href="https://github.com/doxygen/doxygen/commit/404468ac5484d54e47129ce2a00b3ad6e1c2c72a">view</a>]</li> +<li>Bug 149792 - Mainpage title has wrong style in RTF [<a href="https://github.com/doxygen/doxygen/commit/077aeb768767e62407abb4759d44671619bc62fd">view</a>]</li> +<li>Bump version so that the GIT repo represents the version for the "next" release [<a href="https://github.com/doxygen/doxygen/commit/42c376cdb41db392bd025611ccfcaddb49d05e92">view</a>]</li> +<li>Cmake tries to remove directory refman.tex instead of file refman.tex [<a href="https://github.com/doxygen/doxygen/commit/63094c8bb34a2e02e8490860660303d849e4a984">view</a>]</li> +<li>Copy user EXTRA_FILES at the end to overrule files generated by default by doxygen [<a href="https://github.com/doxygen/doxygen/commit/82f08138ad08fa5b8906c162283c4df0e9819d83">view</a>]</li> +<li>Correct / set types for python variables [<a href="https://github.com/doxygen/doxygen/commit/c47920b217491fc861cdac73d44ab4f93d08423e">view</a>]</li> +<li>Correcting print format error in config.l [<a href="https://github.com/doxygen/doxygen/commit/9947c11284542a74c56e52b55be032350c6bbc3e">view</a>]</li> +<li>DO NOT hardcode x86-64 architecture. [<a href="https://github.com/doxygen/doxygen/commit/031780293d2838da2643b46878061598ebb56822">view</a>]</li> +<li>Don't show a console when launching doxywizard on Windows. [<a href="https://github.com/doxygen/doxygen/commit/942efcb758977fe95fafc473813528085b56e4ee">view</a>]</li> +<li>Fix computeCommonDirPrefix sometimes not finding the correct prefix [<a href="https://github.com/doxygen/doxygen/commit/c6bf96520bcff56d3fd67d4277c05b8db9ac2128">view</a>]</li> +<li>Fix error documentation of in flex debug script [<a href="https://github.com/doxygen/doxygen/commit/09c4e990e4e214900e613343fb9bfbbb08f1bc53">view</a>]</li> +<li>Fix for broken link in the manual [<a href="https://github.com/doxygen/doxygen/commit/355370151b61f79633b3867634d76eaf8bacce54">view</a>]</li> +<li>Fix hexChar for inputs 0 <= i < 10 [<a href="https://github.com/doxygen/doxygen/commit/327422d131ed5e6ddf280043b5a56a6fb92d3bbc">view</a> and [<a href="https://github.com/doxygen/doxygen/commit/62da4521880a03b8a92887539eaf76ccad2ee770">view</a>]</li> +<li>Fix spelling in doc/commands.doc (descriptionm) [<a href="https://github.com/doxygen/doxygen/commit/bd7da008fac074202e3265787907434fbfb40e71">view</a>]</li> +<li>Fix typo in function name [<a href="https://github.com/doxygen/doxygen/commit/ace0af42e330a96ad691b2d9a08dd3ff4abb2629">view</a> and [<a href="https://github.com/doxygen/doxygen/commit/b890f40d195b9dc5db12aaa398707de138093c66">view</a>]</li> +<li>Fixed a couple of small memory leaks [<a href="https://github.com/doxygen/doxygen/commit/85ddfc814f33943199928447b4627d05b0920b99">view</a>]</li> +<li>Fixed a number of memory leaks in the template engine [<a href="https://github.com/doxygen/doxygen/commit/d14bcd1f8f5bd4a2034bae842000630f4e098eb6">view</a>]</li> +<li>Fixed compiler warning for MacOSX [<a href="https://github.com/doxygen/doxygen/commit/0aa27346b8728f6698dd2b363959e89d02e03ff6">view</a>]</li> +<li>Fixed link issue for MacOSX 10.11 [<a href="https://github.com/doxygen/doxygen/commit/0918a19225daedfbd5e23388124a5de3860d5420">view</a>]</li> +<li>Fixed minor typos in comments [<a href="https://github.com/doxygen/doxygen/commit/29c500434d30cd4d9c20f6b295475ed42dba2930">view</a>]</li> +<li>Fixed preprocessor macros for flex version check [<a href="https://github.com/doxygen/doxygen/commit/a8c73cdbe37cc53c398002d20e94037552a8fb55">view</a>]</li> +<li>Fixed problem with latex and PDF bookmarks [<a href="https://github.com/doxygen/doxygen/commit/499ecaedf1ee1222535be27f77050ee633595685">view</a>]</li> +<li>Fixed various issues found by PVS-Studio. [<a href="https://github.com/doxygen/doxygen/commit/48ced3ea8071b3141216482e2821e10250910947">view</a>]</li> +<li>Fixes bug 485701: Angle brackets (< and >) not escaped in HTML formula alt text [<a href="https://github.com/doxygen/doxygen/commit/08aa01cb0ee9b2dd6403f753156d8b58d8e62145">view</a>]</li> +<li>Fixes to support nested tables again [<a href="https://github.com/doxygen/doxygen/commit/883989fced827524354297009fde396ca6264a31">view</a>]</li> +<li>Fortran module private variables and EXTRACT_PRIVATE = NO [<a href="https://github.com/doxygen/doxygen/commit/61820a08200ec62c754cacf8dd3a1121ce6dee69">view</a> and <a href="https://github.com/doxygen/doxygen/commit/8504fc3a06e3430242eab9ac1c1f20319112e6a9">view</a>]</li> +<li>Improved handling of <caption> in tables for LaTeX output. [<a href="https://github.com/doxygen/doxygen/commit/fa6585b2fc6847c2b242b226b163810c7a6366de">view</a>]</li> +<li>IncludeInfo class had uninitialized member variable [<a href="https://github.com/doxygen/doxygen/commit/76a9892b190efaeb3c764d824bd285ff3d2c57dc">view</a>]</li> +<li>Made paragraph spacing more flexible in the LaTeX output to prevent page overflows [<a href="https://github.com/doxygen/doxygen/commit/17b3b41e12e890187f6b7dcc98ed9e2451b14018">view</a>]</li> +<li>Made several improvements to the performance of template engine [<a href="https://github.com/doxygen/doxygen/commit/ded4e9a92670d0157cdcc5cbf7a4a1e3193e179a">view</a>]</li> +<li>Make doxywizard compatible with Qt5 [<a href="https://github.com/doxygen/doxygen/commit/333c7c44f1aa3c62f9401b190e45eaff15056d5c">view</a>]</li> +<li>Make list of default extensions consistent with language mapping list [<a href="https://github.com/doxygen/doxygen/commit/bf35f16863f067286260ad4b68ec4c0ae7febdf1">view</a>]</li> +<li>Markdown with @cond and @endcond [<a href="https://github.com/doxygen/doxygen/commit/c5a7911741850777b699a63ae5b7702e379a5ada">view</a>]</li> +<li>Markdown with @cond and @endcond [<a href="https://github.com/doxygen/doxygen/commit/dc26830396970d402ad42d20f1b99bd86f4a5961">view</a>]</li> +<li>Merge remote-tracking branch 'upstream/master' [<a href="https://github.com/doxygen/doxygen/commit/6aba65a4dfaec1aa1131e160ed252d0713403760">view</a>]</li> +<li>Minor change to pycode.l:codifyLines [<a href="https://github.com/doxygen/doxygen/commit/bbd71be14986e637af9958b2cc18d1d62743ba8e">view</a>]</li> +<li>Moved creation of inline class documentation to separate template file [<a href="https://github.com/doxygen/doxygen/commit/4bd50c9f0dc1d7b1413a6bda587b8a5999cd7a19">view</a>]</li> +<li>RTF improvement: Example section was merged with next function title [<a href="https://github.com/doxygen/doxygen/commit/ca617e1e1cd42ee0080c8c13ce3884c8671629dd">view</a>]</li> +<li>Remove obsolete py files [<a href="https://github.com/doxygen/doxygen/commit/183f36fe97cb95636f1947c2c4be61f7b78f87e0">view</a>]</li> +<li>Removed BOM marker from greek translator to avoid Visual C warnings [<a href="https://github.com/doxygen/doxygen/commit/9ee8f777f5a4b7a49e644c2da5247fa509038feb">view</a>]</li> +<li>Repaired breaking @include for LaTeX output [<a href="https://github.com/doxygen/doxygen/commit/ab861c197c596f78c7aea4f45c0e1252de10fc1f">view</a>]</li> +<li>Revert "Spelling correction for error message with USE_HTAGS usage" [<a href="https://github.com/doxygen/doxygen/commit/a888543ca5f3fd28121f7eea4dbd25898fa7be57">view</a>]</li> +<li>Revert using container-based infra as sudo is needed :-( [<a href="https://github.com/doxygen/doxygen/commit/f089c3fa4f47dc8bedd25d9d857d004525ee82c0">view</a>]</li> +<li>Reverted change that caused doxygen to return error code 2 when it produced a warning [<a href="https://github.com/doxygen/doxygen/commit/f9e6fe0bf3886be7e603083b3b200dbd60fbd529">view</a>]</li> +<li>Rework the generation of packages DEB/RPM/... (CPack) [<a href="https://github.com/doxygen/doxygen/commit/8c0c80e44e1e9cb1ce4e88a3e1d01b65536dc60c">view</a>]</li> +<li>Right alignment of in page table of contents [<a href="https://github.com/doxygen/doxygen/commit/a653f7499929f3f0a5b68614dec91242fbc0edf5">view</a>]</li> +<li>Small correction of errors in case of CSharp XML tags [<a href="https://github.com/doxygen/doxygen/commit/68dd27139e50e048f081549394e6fc6dc04fc699">view</a>]</li> +<li>Small documentation corrections [<a href="https://github.com/doxygen/doxygen/commit/564c8cd257e0dd1797d94633a0e92ddc5a496540">view</a>]</li> +<li>Spelling correction for error message with USE_HTAGS usage [<a href="https://github.com/doxygen/doxygen/commit/0d060c455207ab32092e5a7edcd5457bb00f4653">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/5cc45244002d1d7560233cfae01f9d5d735e1a3f">view</a>]</li> +<li>Started with generating LaTeX output via the template engine [<a href="https://github.com/doxygen/doxygen/commit/02a0c353a8947290a3191aead59db08dc84766ce">view</a>]</li> +<li>Stop when doxygen configuration file ("Doxyfile") cannot be read [<a href="https://github.com/doxygen/doxygen/commit/b8bd3d84590d9adee7084f066f0e3e8c75a99245">view</a>]</li> +<li>Support flex-2.6.0 [<a href="https://github.com/doxygen/doxygen/commit/8c51120ad55b440b738ef0b96f8169d84a7ae88a">view</a>] and [<a href="https://github.com/doxygen/doxygen/commit/cf936efb8ae99dd297b6afb9c6a06beb81f5b0fb">view</a>]</li> +<li>Support set in code highlighting [<a href="https://github.com/doxygen/doxygen/commit/1cbcce4ef3460f48ab9c8e9435eec21075dcc788">view</a>]</li> +<li>Template enhancements and various other small fixes [<a href="https://github.com/doxygen/doxygen/commit/e58fb0a46f73f37d16859f43fda1eb5ba4a15c5d">view</a>]</li> +<li>Title in case of USE_MDFILE_AS_MAINPAGE [<a href="https://github.com/doxygen/doxygen/commit/09251b805b3c9d96917fedebb3768945d7559b1e">view</a>]</li> +<li>Tooltip can still contain < and > signs [<a href="https://github.com/doxygen/doxygen/commit/1df28fe4b9a0187f8fa6ed077e4a81002fa50fda">view</a>]</li> +<li>Tweaked the htmlonly sections in the manual so it produces valid HTML output [<a href="https://github.com/doxygen/doxygen/commit/de03970396e6f7edec359e2b71f3d2aa9d6a6237">view</a>]</li> +<li>Undo _doxygen to libdoxygen target change [<a href="https://github.com/doxygen/doxygen/commit/940048580f2d61a137e7abbb67b3aed567bfe865">view</a>]</li> +<li>Updated instructions to toggle debugging flex code [<a href="https://github.com/doxygen/doxygen/commit/368f4f057be0ded4673be826c9a08cd771a023ce">view</a>]</li> +<li>Updated Italian translation and translator email address [<a href="https://github.com/doxygen/doxygen/commit/a9ad21b4e541d91c804ac39e393cc0c1db4f45f3">view</a>]</li> +<li>Updated the Greek translation [<a href="https://github.com/doxygen/doxygen/commit/4e0b7f0b9a2a04d0bb5e66871da6d7ffa786836e">view</a>]</li> +<li>Use CPack to generate rpm/deb packages [<a href="https://github.com/doxygen/doxygen/commit/ba6eb1478d24dc32d4e123951e2f62c75b4b88bd">view</a>]</li> +<li>Use STATIC libraries to prevent them being shared [<a href="https://github.com/doxygen/doxygen/commit/37a148f6e35523fd2bbbdbc37e6ed838684c6d90">view</a>]</li> +<li>Using tabu package for LaTeX tables [<a href="https://github.com/doxygen/doxygen/commit/647b6ac8669cd8ba1e8c60eeb3c2de961c7d6a1b">view</a>]</li> +<li>[Bug <a href="https://github.com/doxygen/doxygen/issues/5872">5872</a>] On Windows, generated layout is with UNIX EOL [<a href="https://github.com/doxygen/doxygen/commit/78a80001223af290c7c7321ad2d210fb3cd16f11">view</a>]</li> +<li>[Doxygen-users] plugin / filter not behaving as expected [<a href="https://github.com/doxygen/doxygen/commit/0c7f182016c7c2604a484367738e76cb40c0541b">view</a>]</li> +<li>add spaces like "Doyxgen"CN_SPC->"Doyxgen" CN_SPC [<a href="https://github.com/doxygen/doxygen/commit/35d1aa8bf9208302601fa96462e246c98aa0b0e5">view</a>]</li> +<li>allow building with custom iconv on Windows [<a href="https://github.com/doxygen/doxygen/commit/3d684f6d123abdbf630bb19bc6095cc9d69efb68">view</a>]</li> +<li>doc: generate doxygen's documentation. [<a href="https://github.com/doxygen/doxygen/commit/3c4a1ea2ee56f2604c2277f13737d53b3a0b0353">view</a>]</li> +<li>doc: put man pages under share/man/man1 [<a href="https://github.com/doxygen/doxygen/commit/95d28153779810dc95afafa38ed838f32516a1f4">view</a>]</li> +<li>docparser: warn when finding a documented empty return type [<a href="https://github.com/doxygen/doxygen/commit/10989e2dade3bb35a421787c5315d2630d665842">view</a>]</li> +<li>docs: add examples as a dependency of docs [<a href="https://github.com/doxygen/doxygen/commit/ec5fde6913935fbe2015220259b611a17a437de3">view</a>]</li> +<li>doxyapp and CLANG linking [<a href="https://github.com/doxygen/doxygen/commit/a58a2cafbc136f7821b9313bd6c1413eaab3e868">view</a>]</li> +<li>fixed for travis ci config file [<a href="https://github.com/doxygen/doxygen/commit/ecbb77b40892df8740476023545769ffbda6fd6f">view</a>]</li> +<li>libpng warning: iCCP: known incorrect sRGB profile [<a href="https://github.com/doxygen/doxygen/commit/c82ac124812dd2f9a5e8b36fcdcf7daf20cfbdda">view</a>]</li> +<li>rename build target _doxygen to libdoxygen [<a href="https://github.com/doxygen/doxygen/commit/4116648d3c62aee54c385644a4fe754ee7a4261d">view</a>]</li> +<li>run_translator.cmake is no longer used [<a href="https://github.com/doxygen/doxygen/commit/45e153f2238d0fa031d147cfe207e52b913845eb">view</a>]</li> +<li>runtests: Simplify dictionary usage [<a href="https://github.com/doxygen/doxygen/commit/95d99a4c857d7d5208d8faf974b01354a798eba4">view</a>]</li> </ul> <p> \endhtmlonly @@ -516,150 +917,150 @@ <a name="1.8.10"></a> </p> <ul> -<li>change the build system to use cmake [<a href="http://github.com/doxygen/doxygen/commit/2e099b1950eee2c3a0d5d8ae4b25575caeb938b1">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/ba9bb02abf6f6922a83beb2092e7bc270e6f25c1">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/635d8cf30e702bdf83fe5c96452f8f863d57bdee">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/51ee91560a9cbaac41cec536dcdeb3e4c32f139a">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/e775357ae71ecbf02dc93913a923567f31b03681">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/a0cd6a8e0c19a82e9662f96734c7ba21726794d0">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/0dc4eda500e803a65a10445719c97d7e523897da">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/22c0d75d45354979392db5db4e3195570c394e44">view</a>]</li> -<li>Add support for basic XML syntax highlighting. [<a href="http://github.com/doxygen/doxygen/commit/a418518921ba7a99c7221ba7f40d2e791cb207c4">view</a>]</li> -<li>Added documentation for ``` style fenced code block and more robust parsing [<a href="http://github.com/doxygen/doxygen/commit/39ba42c3b21d08ec606eee18ee8b64c67ec6a42a">view</a>]</li> -<li>Added function arguments to the LaTeX toc [<a href="http://github.com/doxygen/doxygen/commit/f5e70723391bacc2d68c19d367ab414e70f786b4">view</a>]</li> -<li>Added missing files and build instructions [<a href="http://github.com/doxygen/doxygen/commit/39228176c052fd293382dc9bc9b4b69b2a6af277">view</a>]</li> -<li>Added missing libraries for building doxysearch on Windows [<a href="http://github.com/doxygen/doxygen/commit/84d94779e76681b63cdcbc362bbe0341cd39064d">view</a>]</li> -<li>Added support for language codes [<a href="http://github.com/doxygen/doxygen/commit/eae07d978b524c787daeab911ca087b47a964577">view</a>]</li> -<li>Added type constraint relations for Java generics to dot graphs and XML output [<a href="http://github.com/doxygen/doxygen/commit/080a465b1321ff93c05ce398cd18a577e0ebae4b">view</a>]</li> -<li>Adding commands \hidecallgraph and \hidecallergraph [<a href="http://github.com/doxygen/doxygen/commit/073e9482a516c24a3d045da049941bfd432f3354">view</a>]</li> -<li>Adjust test script for longer version number [<a href="http://github.com/doxygen/doxygen/commit/c7622971ee485279e8da7634207340ce18b69aaa">view</a>]</li> -<li>Adjusted version in configure script [<a href="http://github.com/doxygen/doxygen/commit/cbd3fa183815191ac5f172a2bac62991642c0b5e">view</a>]</li> -<li>Alignment of project name [<a href="http://github.com/doxygen/doxygen/commit/e7b356d2cb9320a363ac024d39b468e98b223b90">view</a>]</li> -<li>Allow selection of specific translators to compile in at build time [<a href="http://github.com/doxygen/doxygen/commit/faef77a87cecd703e3629a35d2e22efb07e682a0">view</a>]</li> -<li>Based on the report of Peter D. Barnes in the doxygen forum (http://doxygen.10944.n7.nabble.com/doxygen-1-8-9-1-upgrade-errors-td6990.html) [<a href="http://github.com/doxygen/doxygen/commit/9771b807cd776b37f6538dec085442218a5b6a09">view</a>]</li> -<li>Better error message in case of IDL inconsistency [<a href="http://github.com/doxygen/doxygen/commit/a7eef85a89d8772b7ab97a4ba378cc7e78c988cc">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4415">4415</a> - EXTRA_PACKAGES can't handle package options [<a href="http://github.com/doxygen/doxygen/commit/1c47dd436358ffc7bc76901cddc559b2d8ce233d">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/ad53cbab6474e11692f2ca1018a821d042df28e6">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5673">5673</a> - Using HTML entities in PROJECT_NAME [<a href="http://github.com/doxygen/doxygen/commit/8e44571521391403e8d85f893acb926e021e926b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5697">5697</a> - Missing documentation after nested C++11 unified initializer [<a href="http://github.com/doxygen/doxygen/commit/c1789f2e5d8421d6028c836ab66afecacff284ef">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5698">5698</a> - Bogus warning: citelist: Unexpected new line character [<a href="http://github.com/doxygen/doxygen/commit/5c321cbb6359bc1bb875729c08beba2edc084500">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5704">5704</a> - @todo paragraphs incorrectly placed in rtf output [<a href="http://github.com/doxygen/doxygen/commit/600d5859d7bcb94b08ef656fd427914766ae9afe">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5705">5705</a> - Bogus message with addtogroup [<a href="http://github.com/doxygen/doxygen/commit/b75af9180ae53f7c7abb94ccf906333169247785">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5707">5707</a> - Configuring doxyfile to only output docbook produces erroneous warning [<a href="http://github.com/doxygen/doxygen/commit/05fcf8decc25bd2f1a2e7867ee8e5d9da1f08933">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5709">5709</a> - latex compilation: \backmatter incompatible with COMPACT_LATEX=YES [<a href="http://github.com/doxygen/doxygen/commit/c9067c5bb9a1868e0963dc210cf3b7152c4aa79a">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5710">5710</a> - Wrong icons in TOC of CHM help [<a href="http://github.com/doxygen/doxygen/commit/8c97e0cd63bcf942ee5b43c9471055a4ea27551c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5720">5720</a> - <CAPTION> inside <TABLE> no longer works for LaTex output [<a href="http://github.com/doxygen/doxygen/commit/0599f92d06ff433446f34136ffe2f3d65d6bd109">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5726">5726</a> - Duplicate anchors from tagfiles [<a href="http://github.com/doxygen/doxygen/commit/1f21c23c57c91ba6901c0de38bb236f7246e88c9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5727">5727</a> - Tagfile anchors not generated for enumeration values [<a href="http://github.com/doxygen/doxygen/commit/1d4f37cb13a75ca8bdc49be3558438104e7eef19">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5728">5728</a> - Non-ascii characters are not emphasised [<a href="http://github.com/doxygen/doxygen/commit/8f67d4f63efd45b0d38502bdf68987d7fc1e92e9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5744">5744</a> - Using TAGFILES prevents symbol extraction [<a href="http://github.com/doxygen/doxygen/commit/a735498be5a572236755cc3da65bf4774cbac25c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5753">5753</a> - PATCH: please consider making doxygen output byte for byte identical between individual runs by default [<a href="http://github.com/doxygen/doxygen/commit/3f2e8a3067712b025623e4420e6eb161febfd42b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5754">5754</a> - Doxygen generates bad "More..." file links for functions within a namespace [<a href="http://github.com/doxygen/doxygen/commit/ea202be55d68af33917658e3fec169da3a7fa7a8">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5756">5756</a> - [PATCH] QT4's qmake is titled differently on Fedora 21 [<a href="http://github.com/doxygen/doxygen/commit/3bd3ad9f8f4d010e42f0ba8eeab229f44b1ecb1c">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/a883f65ab94973d4c7948623186159f978517851">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5761">5761</a> - last enum member not documented [<a href="http://github.com/doxygen/doxygen/commit/50a329c056a2676608f30321a3207ff17ab20abb">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5764">5764</a> - Nested list in C# XML comments closes outer list prematurely [<a href="http://github.com/doxygen/doxygen/commit/2c679e7d39144dadef2e9fd25772f0e41586e18b">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/7a0522fafde300f36c3d5264f46c1f70cf35b7b9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5768">5768</a> - Bogus warning regarding nested comments [<a href="http://github.com/doxygen/doxygen/commit/e4c0036962d8fa0ea9c1e38dbdb5e91168201f22">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5769">5769</a> - Bogus warnings in case of anonymous namespace and @todo [<a href="http://github.com/doxygen/doxygen/commit/298ab30b2a2aa0936f4683c9366afd44c00adc60">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5772">5772</a> - Don't warn about missing documentation for deleted functions. [<a href="http://github.com/doxygen/doxygen/commit/796d6585be58d1c9112422a919f49d1998dc672c">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/ac576bd974ac27bc1f395e8ae6c77b19f800b6db">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5774">5774</a> - Table of content incorrect with escaped symbols [<a href="http://github.com/doxygen/doxygen/commit/5cdf62661c88b5f0c135337da4d6e58581aad037">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5777">5777</a> - man output should escape minus signs [<a href="http://github.com/doxygen/doxygen/commit/3608a668b3892eaa4f7b2e4b29b833ede24ceee7">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5779">5779</a> - Bug #313527 regression - Enum in bitfield is not parsed properly. [<a href="http://github.com/doxygen/doxygen/commit/528bb8054ca362843630ec261ca6e6990a206081">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/7b2d77abb73288bdd48ca04720fd6779e0bf94c2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5793">5793</a> - FILE_PATTERNS ignores arbitrary extensions [<a href="http://github.com/doxygen/doxygen/commit/52cb086da66533332962f2bf9cb35772e980c092">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5814">5814</a> - class scoped enum documentation appearing at group level instead of class level [<a href="http://github.com/doxygen/doxygen/commit/e4a9d06d7871f24dd6e37ecac6addae729e6d721">view</a>]</li> -<li>Build fixes for windows build [<a href="http://github.com/doxygen/doxygen/commit/5446770855a8286092abdd91d9069cb3191c209d">view</a>]</li> -<li>Bump copyright year [<a href="http://github.com/doxygen/doxygen/commit/e11b48785323017bf1d81e91e8133d7f3ba1f243">view</a>]</li> -<li>Bump version in configure script [<a href="http://github.com/doxygen/doxygen/commit/97342f92e111d7aa3e423a128379a6018820ce6c">view</a>]</li> -<li>Cleanup & adapt travis config [<a href="http://github.com/doxygen/doxygen/commit/5f67c67323bff27751ba07c417ba99180fa0d762">view</a>]</li> -<li>Consistency in handling HTML and LaTeX in respect to header and footer [<a href="http://github.com/doxygen/doxygen/commit/be5cc75ffc2e0a95ecbf0ce8d918b070c276d3e5">view</a>]</li> -<li>Correct string buffer sizes for RTF output, such that the string is always correctly sized. [<a href="http://github.com/doxygen/doxygen/commit/bc8e705cf90cecdff8a247264c249ffed1d2af4a">view</a>]</li> -<li>Crash in case of non generic interface in Fortran [<a href="http://github.com/doxygen/doxygen/commit/7d3a2abf0137c5257eeb0a8e0f76381b79f1e7bb">view</a>]</li> -<li>Documentation HTML Header, Footer, and Stylesheet changes [<a href="http://github.com/doxygen/doxygen/commit/1dded5c92a13f9db60fc630cbe5f2cc5ad9bede0">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/478207365d7f09f0e676a76f654502c084806e4e">view</a>]</li> -<li>Documenting RESULT variable of Fortran FUNCTION [<a href="http://github.com/doxygen/doxygen/commit/21f9e87db8085fb1b5e0a9a9a25dee159b3fd324">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/4d52beec3760244d959ab4d5528aea1acba505e7">view</a>]</li> -<li>Doxygen LaTeX / PDF links point to page 1 [<a href="http://github.com/doxygen/doxygen/commit/e34913dcbe0bee2c3e21d6e21b2bcc6970003a5c">view</a>]</li> -<li>Enable relative paths referenced source files [<a href="http://github.com/doxygen/doxygen/commit/ed178335e8c123b58c4fee24766bceae0fc80aa2">view</a>]</li> -<li>Escape "@" in names as it is not allowed in XML / Docbook names (coming from anon namespaces) [<a href="http://github.com/doxygen/doxygen/commit/65c35c435ae93d5f39c3ddec93008b2f544544ca">view</a>]</li> -<li>Fix for bug 746673. [<a href="http://github.com/doxygen/doxygen/commit/effbbcc72295f5843377ddce2794bcf6e7000322">view</a>]</li> -<li>Fix for building diagram example conditionally [<a href="http://github.com/doxygen/doxygen/commit/f415b624a6cf6b9e577ec6131a23cb4a0e830aaf">view</a>]</li> -<li>Fix for issue 744670 [<a href="http://github.com/doxygen/doxygen/commit/0d684381ac40574f6a948c56eb2da0445c3ee3bf">view</a>]</li> -<li>Fix for issue 744671 [<a href="http://github.com/doxygen/doxygen/commit/192f9e8bf78e10c9d97e08264b1c76c8aa4edf2b">view</a>]</li> -<li>Fix for rendering the template parameters of members of variadic template classes. [<a href="http://github.com/doxygen/doxygen/commit/32093bcca82c7d3a4df4670f52340033e9f16b62">view</a>]</li> -<li>Fix missing brief documentation for overload and specialization functions [<a href="http://github.com/doxygen/doxygen/commit/c604aef8a6465f38f8f04276194a66a4e044dc84">view</a>]</li> -<li>Fix nesting of XML tag "literallayout" for docbook output of enums. [<a href="http://github.com/doxygen/doxygen/commit/3abac31c525e6cf6898a1e8deb5c73f2a2ff5a8a">view</a>]</li> -<li>Fix parsing of ODL-style properties [<a href="http://github.com/doxygen/doxygen/commit/6a8bef8852eb22558b3559ebe96d9e06e6cadfa7">view</a>]</li> -<li>Fix potential null pointer dereference in src/classdef.cpp [<a href="http://github.com/doxygen/doxygen/commit/5743848928ffaeccaaef24dac051aaa9acf2c4b7">view</a>]</li> -<li>Fix potential null pointer dereference in src/context.cpp [<a href="http://github.com/doxygen/doxygen/commit/2690774f87b9fcb12b35153de82cde22248b3949">view</a>]</li> -<li>Fixed a couple of cases where sharing string data could lead to corruption [<a href="http://github.com/doxygen/doxygen/commit/312bef563a5be72f6423377247db1b80044bf711">view</a>]</li> -<li>Fixed code reachability bug found by coverity in translator_fi.h [<a href="http://github.com/doxygen/doxygen/commit/80d09775da9a99a3bc58704ffd055547c6b03043">view</a>]</li> -<li>Fixed compilation issue on Windows [<a href="http://github.com/doxygen/doxygen/commit/d75455eef7c91f11c2b9061d9a086ce93c4231b2">view</a>]</li> -<li>Fixed issue accessing uninitialized buffer under certain conditions. [<a href="http://github.com/doxygen/doxygen/commit/49f6c63aba4d77cd14fa205bee4bf427cefdaa44">view</a>]</li> -<li>Fixed potential crash while generating dot graphs [<a href="http://github.com/doxygen/doxygen/commit/50f82c94b9bf1ff982f9ddd8b9a88fb91d9e0bec">view</a>]</li> -<li>Fixed potential string buffer issue for dot graphs [<a href="http://github.com/doxygen/doxygen/commit/6b24aba8fce772d9e46e3174a655281eeb44ad84">view</a>]</li> -<li>Fixed regression due to buffer resizing while generating RTF. [<a href="http://github.com/doxygen/doxygen/commit/a1f2872ef098cfcc526002b9c9d533da6f2775b5">view</a>]</li> -<li>Fixed regression in argument processing [<a href="http://github.com/doxygen/doxygen/commit/ae8f618d140b4368045d286a682df3f6de7b2960">view</a>]</li> -<li>Fixed type in printdocvisitor.h [<a href="http://github.com/doxygen/doxygen/commit/c9465bd210d8250a5439f22bf564c187cd45e968">view</a>]</li> -<li>Fixed typos in comments. [<a href="http://github.com/doxygen/doxygen/commit/b82320a6f57519443c46e5e3044fef97b1f8f618">view</a>]</li> -<li>Fixes for showing type constraint relations [<a href="http://github.com/doxygen/doxygen/commit/95375152974fa7e0e4d4cec7007d942dd5e9615e">view</a>]</li> -<li>Fortran FUNCTION source code [<a href="http://github.com/doxygen/doxygen/commit/25a90990662449808c5ba58c243a7835d13ba750">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/e7a6a682137a82dbdf847b1879f320ece4f3642f">view</a>]</li> -<li>Fortran: code color GOTO as flow keyword. [<a href="http://github.com/doxygen/doxygen/commit/8090675790ad9265bcffdf07ab4d48fc8c037276">view</a>]</li> -<li>Fortran: fixed format position 73 and further is comment [<a href="http://github.com/doxygen/doxygen/commit/557ad21ce28d093044101eb8bee2c4df1621da7a">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/eb92c064b33bf9f303233210b9693215b0fb7f9d">view</a>]</li> -<li>Fortran: warning message about not documented module member [<a href="http://github.com/doxygen/doxygen/commit/dcdd35ce2a0cda024525298a9a20d6c746539e6d">view</a>]</li> -<li>Guarded debug prints against printing a NULL pointer. [<a href="http://github.com/doxygen/doxygen/commit/0831c71c05c9204839e187759f13303e64783730">view</a>]</li> -<li>HTML entity &deg; gives problems in LaTeX [<a href="http://github.com/doxygen/doxygen/commit/072383ed1c6fcfff7a7619d92ce3a8cb0b91fff9">view</a>]</li> -<li>Help message regarding layout file [<a href="http://github.com/doxygen/doxygen/commit/7569f42d95332a5948e9d35e94e88d56d11634a9">view</a>],[<a href="http://github.com/doxygen/doxygen/commit/ad0e5fe14dce093e3b00ca677849cacbc2d657b7">view</a>]</li> -<li>Internal debug option -d lex is not described [<a href="http://github.com/doxygen/doxygen/commit/00a91ae9fabe7783260c7c3fcdfec5b1ead49350">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/ebe3e8ec4a09edbb8a5b2dde88b6c479b03c0be9">view</a>]</li> -<li>Internal doxygen docs gives: warning: Unsupported xml/html tag <...> found [<a href="http://github.com/doxygen/doxygen/commit/e366acaf0c27ce43ec80a70c0667c27cd5ef9d29">view</a>]</li> -<li>Missing cross reference link [<a href="http://github.com/doxygen/doxygen/commit/213e680537303959f29b2424d40d74ecf66cb3f6">view</a>]</li> -<li>Patch fixing a typo in Pull Request 307 [<a href="http://github.com/doxygen/doxygen/commit/6913c67ff1f9f20a71333f78cacd87a9e0c7756f">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/eac0fd660bffe62ae29a190308bf21b21d49647b">view</a>]</li> -<li>Prevent example.tag from being regenerated [<a href="http://github.com/doxygen/doxygen/commit/d49604f814ceb22f81571d8ca99540e62cfa979a">view</a>]</li> -<li>Problem running tests under Windows [<a href="http://github.com/doxygen/doxygen/commit/9bd54df7ba7dd15783f5a9180c85a7137dcdbc08">view</a>]</li> -<li>Remove the new line after @startuml in generated pu file [<a href="http://github.com/doxygen/doxygen/commit/edf8dbbbc17e65e2eb97b5c9b4763a04969017fe">view</a>]</li> -<li>Remove unreachable code [<a href="http://github.com/doxygen/doxygen/commit/d3e7b06f3a82780083e27bb83360ed9496df9f8d">view</a>]</li> -<li>Remove unused local and static global variables [<a href="http://github.com/doxygen/doxygen/commit/d03e4c2ae1864c6f27a4341449ce97133aeb6847">view</a>]</li> -<li>Remove wrong </File> [<a href="http://github.com/doxygen/doxygen/commit/e8cef724a1f40896f9c6294d6f410e240b6365ee">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/efd55ae1787f8f7ec35761849dc7cfd3175f8b33">view</a>]</li> -<li>Removed OS version check for MACOSX (was not used anywhere) [<a href="http://github.com/doxygen/doxygen/commit/1e3e9f03e746d4ac46c9c7b1b80e7e3100ee42f0">view</a>]</li> -<li>Removed dbus XML parser, various refinements [<a href="http://github.com/doxygen/doxygen/commit/551012f2647c53d8532d638361011d003d5b81f3">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/bf4aee305879406d9057864ab7f8938e01ca8bd0">view</a>]</li> -<li>Removed old build files, added install targets and other options [<a href="http://github.com/doxygen/doxygen/commit/7bcf8e9a379ec0599160e5562f07b93f8fb9557a">view</a>]</li> -<li>Repair doxygen generate invalid styleSheetFile and extensionsFile of RTF [<a href="http://github.com/doxygen/doxygen/commit/0d208bc1c9a32718a93eb9911220ba72ad27fb9a">view</a>]</li> -<li>Replace to_c_cmd by resource compiler [<a href="http://github.com/doxygen/doxygen/commit/2e39e5c7c1427ac6b24c64b7ef01be8d5a20092b">view</a>]</li> -<li>Restore deleted file [<a href="http://github.com/doxygen/doxygen/commit/dfe93f9fde39167eae2aeeab929641a9c56cc916">view</a>]</li> -<li>Showing grey/gray in documentation [<a href="http://github.com/doxygen/doxygen/commit/320ebb35dd4a615a7a692d71de4587be9ce8b99b">view</a>]</li> -<li>Suggestion to use stripPrefix has been implemented for RESULT. For consistency also implemented for arguments. [<a href="http://github.com/doxygen/doxygen/commit/610bdb67c4db775debf26d85091383938d946f3d">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/6720a714461b9454c7cdbae7ceff7eb735feeb3b">view</a>]</li> -<li>Support diff that returns "No differences encountered" when comparing test results [<a href="http://github.com/doxygen/doxygen/commit/4716f426332d02eb6841c509658b8a709cce9318">view</a>]</li> -<li>Support generating index-color PNG files [<a href="http://github.com/doxygen/doxygen/commit/a09ffed2f603699955c18c19e0d3e782fb61d93f">view</a>]</li> -<li>Switched back to version 6.2 of JavaCC for VHDL parser generation. [<a href="http://github.com/doxygen/doxygen/commit/088896f27f460b6ac03c2d64df148e3617c1e519">view</a>]</li> -<li>Tcl: fix for extra line breaks in source browser introduced by commit 312bef5 [<a href="http://github.com/doxygen/doxygen/commit/3cc116ba2250e6946773ec22c6c7c6557773d28e">view</a>]</li> -<li>TranslatorSwedish updated [<a href="http://github.com/doxygen/doxygen/commit/eaa19e3a439a4652023b47b0cf47c7303484ef5d">view</a>]</li> -<li>Update of search from "endless search to 'Character search: criterion. [<a href="http://github.com/doxygen/doxygen/commit/a0820f29e60be1555b5b0c92a975bf334b6f5258">view</a>]</li> -<li>Update translator_cn.h [<a href="http://github.com/doxygen/doxygen/commit/a88d3549373990bfac09f936748577fc5c59d240">view</a>]</li> -<li>Updated changelog for 1.8.9.1 [<a href="http://github.com/doxygen/doxygen/commit/f8671a4520350fe38f986fdd199c2344452e7a01">view</a>]</li> -<li>Updated installation section of the manual [<a href="http://github.com/doxygen/doxygen/commit/db6a3ab2761a328e74fdccf243ff148af7623062">view</a>]</li> -<li>Various VHDL related fixes [<a href="http://github.com/doxygen/doxygen/commit/34b00c442308efe169cc89fad62588fdce1d84e8">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/3eed7a5c5b330736b508c722c9614c774a678ef1">view</a>], -[<a href="http://github.com/doxygen/doxygen/commit/530647f76a7660a406d102269dc041b00b0e3d4e">view</a>]</li> -<li>Various minor changes [<a href="http://github.com/doxygen/doxygen/commit/f63d9ed958d2c06717434e1a90e6417cf2d60f6b">view</a>]</li> -<li>Warning message multiple mainpages [<a href="http://github.com/doxygen/doxygen/commit/17fdd71a0f7a02e8b72eaf86d67bc142210a7059">view</a>]</li> -<li>Warnings without filename [<a href="http://github.com/doxygen/doxygen/commit/da3faf6b93fd3eb4e751d2c0cbd4ed9ceae7922b">view</a>]</li> -<li>add support for github flavored fenced code blocks [<a href="http://github.com/doxygen/doxygen/commit/288ea42fc27389160c20912003a7972e21195265">view</a>]</li> -<li>added HHC.exe own output to the debug output when extcmd flag enabled [<a href="http://github.com/doxygen/doxygen/commit/4438e24b478de1fd97ccc81a3a9f7651124e1c63">view</a>]</li> -<li>doc/translator.py -- minor updates [<a href="http://github.com/doxygen/doxygen/commit/1ccc93fd699b34b7a89acecf9e59a526a5972bb8">view</a>]</li> -<li>drop #include <unistd.h> [<a href="http://github.com/doxygen/doxygen/commit/1dd0cf03f5bf173fa4ac3bb8279d12fff1b98eb7">view</a>]</li> -<li>fix *.l for three backticks [<a href="http://github.com/doxygen/doxygen/commit/bb93db0d60fd4cd123dfc886ecd20167068db6ba">view</a>]</li> -<li>fix enum brief description in RTF output [<a href="http://github.com/doxygen/doxygen/commit/87429a2609b822d2b08ec17fb2a20464a5043c9e">view</a>]</li> -<li>fix for CHM TOC "Classes" entry to point to annotated file [<a href="http://github.com/doxygen/doxygen/commit/700a9ac3c177fdef25b9b00ed6bb5e0ea963d236">view</a>]</li> -<li>fix for src/translator_tw.h by Gary Lee (translation cleaned) [<a href="http://github.com/doxygen/doxygen/commit/d101790db5e64a64f4db0e46391bbb1b0dadc8b1">view</a>]</li> -<li>increase the size of l when result is modified [<a href="http://github.com/doxygen/doxygen/commit/dd0d738683029f80a42b6673e0b1b1228bebfce3">view</a>]</li> -<li>move layout_default.xml to templates/html/ [<a href="http://github.com/doxygen/doxygen/commit/45ebb6ff4846255ad7209e3bec7cd4fe0544ffd5">view</a>]</li> -<li>runtests.pl: mmn version has dash as separator [<a href="http://github.com/doxygen/doxygen/commit/f5efa2f383fe89b53bd8fc27b2116e8636417ebf">view</a>]</li> -<li>specify that doxygen searches files in INPUT tag [<a href="http://github.com/doxygen/doxygen/commit/0971dc7771be1b386a204c3d11515f7d0f5af427">view</a>]</li> -<li>sqlite3: add regexp searches to search.py [<a href="http://github.com/doxygen/doxygen/commit/13dd6d635e7ba2beb26a0d2ee8542ac63d1c7973">view</a>]</li> -<li>sqlite3: add schema comments [<a href="http://github.com/doxygen/doxygen/commit/ef5d48d93f5565ebca9aae4ba9d6633c32719ecc">view</a>]</li> -<li>sqlite3: fix constness [<a href="http://github.com/doxygen/doxygen/commit/90d89d8a2a2be931742c7291cd70e4a980035ae1">view</a>]</li> -<li>version.py pass configure file path as parameter [<a href="http://github.com/doxygen/doxygen/commit/75e8f4c80ab5c06a33eaaf7ec587ee35ed9c1b1a">view</a>]</li> -<li>xml: use STRIP_FROM_PATH on @file attributes. [<a href="http://github.com/doxygen/doxygen/commit/29ae707794042a97412eaa137fa7b30f2367294d">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/5a0379944f8bdf883fdb25e94e0cdb1e5d2f4366">view</a>]</li> +<li>change the build system to use cmake [<a href="https://github.com/doxygen/doxygen/commit/2e099b1950eee2c3a0d5d8ae4b25575caeb938b1">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/ba9bb02abf6f6922a83beb2092e7bc270e6f25c1">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/635d8cf30e702bdf83fe5c96452f8f863d57bdee">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/51ee91560a9cbaac41cec536dcdeb3e4c32f139a">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/e775357ae71ecbf02dc93913a923567f31b03681">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/a0cd6a8e0c19a82e9662f96734c7ba21726794d0">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/0dc4eda500e803a65a10445719c97d7e523897da">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/22c0d75d45354979392db5db4e3195570c394e44">view</a>]</li> +<li>Add support for basic XML syntax highlighting. [<a href="https://github.com/doxygen/doxygen/commit/a418518921ba7a99c7221ba7f40d2e791cb207c4">view</a>]</li> +<li>Added documentation for ``` style fenced code block and more robust parsing [<a href="https://github.com/doxygen/doxygen/commit/39ba42c3b21d08ec606eee18ee8b64c67ec6a42a">view</a>]</li> +<li>Added function arguments to the LaTeX toc [<a href="https://github.com/doxygen/doxygen/commit/f5e70723391bacc2d68c19d367ab414e70f786b4">view</a>]</li> +<li>Added missing files and build instructions [<a href="https://github.com/doxygen/doxygen/commit/39228176c052fd293382dc9bc9b4b69b2a6af277">view</a>]</li> +<li>Added missing libraries for building doxysearch on Windows [<a href="https://github.com/doxygen/doxygen/commit/84d94779e76681b63cdcbc362bbe0341cd39064d">view</a>]</li> +<li>Added support for language codes [<a href="https://github.com/doxygen/doxygen/commit/eae07d978b524c787daeab911ca087b47a964577">view</a>]</li> +<li>Added type constraint relations for Java generics to dot graphs and XML output [<a href="https://github.com/doxygen/doxygen/commit/080a465b1321ff93c05ce398cd18a577e0ebae4b">view</a>]</li> +<li>Adding commands \hidecallgraph and \hidecallergraph [<a href="https://github.com/doxygen/doxygen/commit/073e9482a516c24a3d045da049941bfd432f3354">view</a>]</li> +<li>Adjust test script for longer version number [<a href="https://github.com/doxygen/doxygen/commit/c7622971ee485279e8da7634207340ce18b69aaa">view</a>]</li> +<li>Adjusted version in configure script [<a href="https://github.com/doxygen/doxygen/commit/cbd3fa183815191ac5f172a2bac62991642c0b5e">view</a>]</li> +<li>Alignment of project name [<a href="https://github.com/doxygen/doxygen/commit/e7b356d2cb9320a363ac024d39b468e98b223b90">view</a>]</li> +<li>Allow selection of specific translators to compile in at build time [<a href="https://github.com/doxygen/doxygen/commit/faef77a87cecd703e3629a35d2e22efb07e682a0">view</a>]</li> +<li>Based on the report of Peter D. Barnes in the doxygen forum (http://doxygen.10944.n7.nabble.com/doxygen-1-8-9-1-upgrade-errors-td6990.html) [<a href="https://github.com/doxygen/doxygen/commit/9771b807cd776b37f6538dec085442218a5b6a09">view</a>]</li> +<li>Better error message in case of IDL inconsistency [<a href="https://github.com/doxygen/doxygen/commit/a7eef85a89d8772b7ab97a4ba378cc7e78c988cc">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4415">4415</a> - EXTRA_PACKAGES can't handle package options [<a href="https://github.com/doxygen/doxygen/commit/1c47dd436358ffc7bc76901cddc559b2d8ce233d">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/ad53cbab6474e11692f2ca1018a821d042df28e6">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5673">5673</a> - Using HTML entities in PROJECT_NAME [<a href="https://github.com/doxygen/doxygen/commit/8e44571521391403e8d85f893acb926e021e926b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5697">5697</a> - Missing documentation after nested C++11 unified initializer [<a href="https://github.com/doxygen/doxygen/commit/c1789f2e5d8421d6028c836ab66afecacff284ef">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5698">5698</a> - Bogus warning: citelist: Unexpected new line character [<a href="https://github.com/doxygen/doxygen/commit/5c321cbb6359bc1bb875729c08beba2edc084500">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5704">5704</a> - @todo paragraphs incorrectly placed in rtf output [<a href="https://github.com/doxygen/doxygen/commit/600d5859d7bcb94b08ef656fd427914766ae9afe">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5705">5705</a> - Bogus message with addtogroup [<a href="https://github.com/doxygen/doxygen/commit/b75af9180ae53f7c7abb94ccf906333169247785">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5707">5707</a> - Configuring doxyfile to only output docbook produces erroneous warning [<a href="https://github.com/doxygen/doxygen/commit/05fcf8decc25bd2f1a2e7867ee8e5d9da1f08933">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5709">5709</a> - latex compilation: \backmatter incompatible with COMPACT_LATEX=YES [<a href="https://github.com/doxygen/doxygen/commit/c9067c5bb9a1868e0963dc210cf3b7152c4aa79a">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5710">5710</a> - Wrong icons in TOC of CHM help [<a href="https://github.com/doxygen/doxygen/commit/8c97e0cd63bcf942ee5b43c9471055a4ea27551c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5720">5720</a> - <CAPTION> inside <TABLE> no longer works for LaTex output [<a href="https://github.com/doxygen/doxygen/commit/0599f92d06ff433446f34136ffe2f3d65d6bd109">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5726">5726</a> - Duplicate anchors from tagfiles [<a href="https://github.com/doxygen/doxygen/commit/1f21c23c57c91ba6901c0de38bb236f7246e88c9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5727">5727</a> - Tagfile anchors not generated for enumeration values [<a href="https://github.com/doxygen/doxygen/commit/1d4f37cb13a75ca8bdc49be3558438104e7eef19">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5728">5728</a> - Non-ascii characters are not emphasised [<a href="https://github.com/doxygen/doxygen/commit/8f67d4f63efd45b0d38502bdf68987d7fc1e92e9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5744">5744</a> - Using TAGFILES prevents symbol extraction [<a href="https://github.com/doxygen/doxygen/commit/a735498be5a572236755cc3da65bf4774cbac25c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5753">5753</a> - PATCH: please consider making doxygen output byte for byte identical between individual runs by default [<a href="https://github.com/doxygen/doxygen/commit/3f2e8a3067712b025623e4420e6eb161febfd42b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5754">5754</a> - Doxygen generates bad "More..." file links for functions within a namespace [<a href="https://github.com/doxygen/doxygen/commit/ea202be55d68af33917658e3fec169da3a7fa7a8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5756">5756</a> - [PATCH] QT4's qmake is titled differently on Fedora 21 [<a href="https://github.com/doxygen/doxygen/commit/3bd3ad9f8f4d010e42f0ba8eeab229f44b1ecb1c">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/a883f65ab94973d4c7948623186159f978517851">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5761">5761</a> - last enum member not documented [<a href="https://github.com/doxygen/doxygen/commit/50a329c056a2676608f30321a3207ff17ab20abb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5764">5764</a> - Nested list in C# XML comments closes outer list prematurely [<a href="https://github.com/doxygen/doxygen/commit/2c679e7d39144dadef2e9fd25772f0e41586e18b">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/7a0522fafde300f36c3d5264f46c1f70cf35b7b9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5768">5768</a> - Bogus warning regarding nested comments [<a href="https://github.com/doxygen/doxygen/commit/e4c0036962d8fa0ea9c1e38dbdb5e91168201f22">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5769">5769</a> - Bogus warnings in case of anonymous namespace and @todo [<a href="https://github.com/doxygen/doxygen/commit/298ab30b2a2aa0936f4683c9366afd44c00adc60">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5772">5772</a> - Don't warn about missing documentation for deleted functions. [<a href="https://github.com/doxygen/doxygen/commit/796d6585be58d1c9112422a919f49d1998dc672c">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/ac576bd974ac27bc1f395e8ae6c77b19f800b6db">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5774">5774</a> - Table of content incorrect with escaped symbols [<a href="https://github.com/doxygen/doxygen/commit/5cdf62661c88b5f0c135337da4d6e58581aad037">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5777">5777</a> - man output should escape minus signs [<a href="https://github.com/doxygen/doxygen/commit/3608a668b3892eaa4f7b2e4b29b833ede24ceee7">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5779">5779</a> - Bug #313527 regression - Enum in bitfield is not parsed properly. [<a href="https://github.com/doxygen/doxygen/commit/528bb8054ca362843630ec261ca6e6990a206081">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/7b2d77abb73288bdd48ca04720fd6779e0bf94c2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5793">5793</a> - FILE_PATTERNS ignores arbitrary extensions [<a href="https://github.com/doxygen/doxygen/commit/52cb086da66533332962f2bf9cb35772e980c092">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5814">5814</a> - class scoped enum documentation appearing at group level instead of class level [<a href="https://github.com/doxygen/doxygen/commit/e4a9d06d7871f24dd6e37ecac6addae729e6d721">view</a>]</li> +<li>Build fixes for windows build [<a href="https://github.com/doxygen/doxygen/commit/5446770855a8286092abdd91d9069cb3191c209d">view</a>]</li> +<li>Bump copyright year [<a href="https://github.com/doxygen/doxygen/commit/e11b48785323017bf1d81e91e8133d7f3ba1f243">view</a>]</li> +<li>Bump version in configure script [<a href="https://github.com/doxygen/doxygen/commit/97342f92e111d7aa3e423a128379a6018820ce6c">view</a>]</li> +<li>Cleanup & adapt travis config [<a href="https://github.com/doxygen/doxygen/commit/5f67c67323bff27751ba07c417ba99180fa0d762">view</a>]</li> +<li>Consistency in handling HTML and LaTeX in respect to header and footer [<a href="https://github.com/doxygen/doxygen/commit/be5cc75ffc2e0a95ecbf0ce8d918b070c276d3e5">view</a>]</li> +<li>Correct string buffer sizes for RTF output, such that the string is always correctly sized. [<a href="https://github.com/doxygen/doxygen/commit/bc8e705cf90cecdff8a247264c249ffed1d2af4a">view</a>]</li> +<li>Crash in case of non generic interface in Fortran [<a href="https://github.com/doxygen/doxygen/commit/7d3a2abf0137c5257eeb0a8e0f76381b79f1e7bb">view</a>]</li> +<li>Documentation HTML Header, Footer, and Stylesheet changes [<a href="https://github.com/doxygen/doxygen/commit/1dded5c92a13f9db60fc630cbe5f2cc5ad9bede0">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/478207365d7f09f0e676a76f654502c084806e4e">view</a>]</li> +<li>Documenting RESULT variable of Fortran FUNCTION [<a href="https://github.com/doxygen/doxygen/commit/21f9e87db8085fb1b5e0a9a9a25dee159b3fd324">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/4d52beec3760244d959ab4d5528aea1acba505e7">view</a>]</li> +<li>Doxygen LaTeX / PDF links point to page 1 [<a href="https://github.com/doxygen/doxygen/commit/e34913dcbe0bee2c3e21d6e21b2bcc6970003a5c">view</a>]</li> +<li>Enable relative paths referenced source files [<a href="https://github.com/doxygen/doxygen/commit/ed178335e8c123b58c4fee24766bceae0fc80aa2">view</a>]</li> +<li>Escape "@" in names as it is not allowed in XML / Docbook names (coming from anon namespaces) [<a href="https://github.com/doxygen/doxygen/commit/65c35c435ae93d5f39c3ddec93008b2f544544ca">view</a>]</li> +<li>Fix for bug 746673. [<a href="https://github.com/doxygen/doxygen/commit/effbbcc72295f5843377ddce2794bcf6e7000322">view</a>]</li> +<li>Fix for building diagram example conditionally [<a href="https://github.com/doxygen/doxygen/commit/f415b624a6cf6b9e577ec6131a23cb4a0e830aaf">view</a>]</li> +<li>Fix for issue 744670 [<a href="https://github.com/doxygen/doxygen/commit/0d684381ac40574f6a948c56eb2da0445c3ee3bf">view</a>]</li> +<li>Fix for issue 744671 [<a href="https://github.com/doxygen/doxygen/commit/192f9e8bf78e10c9d97e08264b1c76c8aa4edf2b">view</a>]</li> +<li>Fix for rendering the template parameters of members of variadic template classes. [<a href="https://github.com/doxygen/doxygen/commit/32093bcca82c7d3a4df4670f52340033e9f16b62">view</a>]</li> +<li>Fix missing brief documentation for overload and specialization functions [<a href="https://github.com/doxygen/doxygen/commit/c604aef8a6465f38f8f04276194a66a4e044dc84">view</a>]</li> +<li>Fix nesting of XML tag "literallayout" for docbook output of enums. [<a href="https://github.com/doxygen/doxygen/commit/3abac31c525e6cf6898a1e8deb5c73f2a2ff5a8a">view</a>]</li> +<li>Fix parsing of ODL-style properties [<a href="https://github.com/doxygen/doxygen/commit/6a8bef8852eb22558b3559ebe96d9e06e6cadfa7">view</a>]</li> +<li>Fix potential null pointer dereference in src/classdef.cpp [<a href="https://github.com/doxygen/doxygen/commit/5743848928ffaeccaaef24dac051aaa9acf2c4b7">view</a>]</li> +<li>Fix potential null pointer dereference in src/context.cpp [<a href="https://github.com/doxygen/doxygen/commit/2690774f87b9fcb12b35153de82cde22248b3949">view</a>]</li> +<li>Fixed a couple of cases where sharing string data could lead to corruption [<a href="https://github.com/doxygen/doxygen/commit/312bef563a5be72f6423377247db1b80044bf711">view</a>]</li> +<li>Fixed code reachability bug found by coverity in translator_fi.h [<a href="https://github.com/doxygen/doxygen/commit/80d09775da9a99a3bc58704ffd055547c6b03043">view</a>]</li> +<li>Fixed compilation issue on Windows [<a href="https://github.com/doxygen/doxygen/commit/d75455eef7c91f11c2b9061d9a086ce93c4231b2">view</a>]</li> +<li>Fixed issue accessing uninitialized buffer under certain conditions. [<a href="https://github.com/doxygen/doxygen/commit/49f6c63aba4d77cd14fa205bee4bf427cefdaa44">view</a>]</li> +<li>Fixed potential crash while generating dot graphs [<a href="https://github.com/doxygen/doxygen/commit/50f82c94b9bf1ff982f9ddd8b9a88fb91d9e0bec">view</a>]</li> +<li>Fixed potential string buffer issue for dot graphs [<a href="https://github.com/doxygen/doxygen/commit/6b24aba8fce772d9e46e3174a655281eeb44ad84">view</a>]</li> +<li>Fixed regression due to buffer resizing while generating RTF. [<a href="https://github.com/doxygen/doxygen/commit/a1f2872ef098cfcc526002b9c9d533da6f2775b5">view</a>]</li> +<li>Fixed regression in argument processing [<a href="https://github.com/doxygen/doxygen/commit/ae8f618d140b4368045d286a682df3f6de7b2960">view</a>]</li> +<li>Fixed type in printdocvisitor.h [<a href="https://github.com/doxygen/doxygen/commit/c9465bd210d8250a5439f22bf564c187cd45e968">view</a>]</li> +<li>Fixed typos in comments. [<a href="https://github.com/doxygen/doxygen/commit/b82320a6f57519443c46e5e3044fef97b1f8f618">view</a>]</li> +<li>Fixes for showing type constraint relations [<a href="https://github.com/doxygen/doxygen/commit/95375152974fa7e0e4d4cec7007d942dd5e9615e">view</a>]</li> +<li>Fortran FUNCTION source code [<a href="https://github.com/doxygen/doxygen/commit/25a90990662449808c5ba58c243a7835d13ba750">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/e7a6a682137a82dbdf847b1879f320ece4f3642f">view</a>]</li> +<li>Fortran: code color GOTO as flow keyword. [<a href="https://github.com/doxygen/doxygen/commit/8090675790ad9265bcffdf07ab4d48fc8c037276">view</a>]</li> +<li>Fortran: fixed format position 73 and further is comment [<a href="https://github.com/doxygen/doxygen/commit/557ad21ce28d093044101eb8bee2c4df1621da7a">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/eb92c064b33bf9f303233210b9693215b0fb7f9d">view</a>]</li> +<li>Fortran: warning message about not documented module member [<a href="https://github.com/doxygen/doxygen/commit/dcdd35ce2a0cda024525298a9a20d6c746539e6d">view</a>]</li> +<li>Guarded debug prints against printing a NULL pointer. [<a href="https://github.com/doxygen/doxygen/commit/0831c71c05c9204839e187759f13303e64783730">view</a>]</li> +<li>HTML entity &deg; gives problems in LaTeX [<a href="https://github.com/doxygen/doxygen/commit/072383ed1c6fcfff7a7619d92ce3a8cb0b91fff9">view</a>]</li> +<li>Help message regarding layout file [<a href="https://github.com/doxygen/doxygen/commit/7569f42d95332a5948e9d35e94e88d56d11634a9">view</a>],[<a href="https://github.com/doxygen/doxygen/commit/ad0e5fe14dce093e3b00ca677849cacbc2d657b7">view</a>]</li> +<li>Internal debug option -d lex is not described [<a href="https://github.com/doxygen/doxygen/commit/00a91ae9fabe7783260c7c3fcdfec5b1ead49350">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/ebe3e8ec4a09edbb8a5b2dde88b6c479b03c0be9">view</a>]</li> +<li>Internal doxygen docs gives: warning: Unsupported xml/html tag <...> found [<a href="https://github.com/doxygen/doxygen/commit/e366acaf0c27ce43ec80a70c0667c27cd5ef9d29">view</a>]</li> +<li>Missing cross reference link [<a href="https://github.com/doxygen/doxygen/commit/213e680537303959f29b2424d40d74ecf66cb3f6">view</a>]</li> +<li>Patch fixing a typo in Pull Request 307 [<a href="https://github.com/doxygen/doxygen/commit/6913c67ff1f9f20a71333f78cacd87a9e0c7756f">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/eac0fd660bffe62ae29a190308bf21b21d49647b">view</a>]</li> +<li>Prevent example.tag from being regenerated [<a href="https://github.com/doxygen/doxygen/commit/d49604f814ceb22f81571d8ca99540e62cfa979a">view</a>]</li> +<li>Problem running tests under Windows [<a href="https://github.com/doxygen/doxygen/commit/9bd54df7ba7dd15783f5a9180c85a7137dcdbc08">view</a>]</li> +<li>Remove the new line after @startuml in generated pu file [<a href="https://github.com/doxygen/doxygen/commit/edf8dbbbc17e65e2eb97b5c9b4763a04969017fe">view</a>]</li> +<li>Remove unreachable code [<a href="https://github.com/doxygen/doxygen/commit/d3e7b06f3a82780083e27bb83360ed9496df9f8d">view</a>]</li> +<li>Remove unused local and static global variables [<a href="https://github.com/doxygen/doxygen/commit/d03e4c2ae1864c6f27a4341449ce97133aeb6847">view</a>]</li> +<li>Remove wrong </File> [<a href="https://github.com/doxygen/doxygen/commit/e8cef724a1f40896f9c6294d6f410e240b6365ee">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/efd55ae1787f8f7ec35761849dc7cfd3175f8b33">view</a>]</li> +<li>Removed OS version check for MACOSX (was not used anywhere) [<a href="https://github.com/doxygen/doxygen/commit/1e3e9f03e746d4ac46c9c7b1b80e7e3100ee42f0">view</a>]</li> +<li>Removed dbus XML parser, various refinements [<a href="https://github.com/doxygen/doxygen/commit/551012f2647c53d8532d638361011d003d5b81f3">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/bf4aee305879406d9057864ab7f8938e01ca8bd0">view</a>]</li> +<li>Removed old build files, added install targets and other options [<a href="https://github.com/doxygen/doxygen/commit/7bcf8e9a379ec0599160e5562f07b93f8fb9557a">view</a>]</li> +<li>Repair doxygen generate invalid styleSheetFile and extensionsFile of RTF [<a href="https://github.com/doxygen/doxygen/commit/0d208bc1c9a32718a93eb9911220ba72ad27fb9a">view</a>]</li> +<li>Replace to_c_cmd by resource compiler [<a href="https://github.com/doxygen/doxygen/commit/2e39e5c7c1427ac6b24c64b7ef01be8d5a20092b">view</a>]</li> +<li>Restore deleted file [<a href="https://github.com/doxygen/doxygen/commit/dfe93f9fde39167eae2aeeab929641a9c56cc916">view</a>]</li> +<li>Showing grey/gray in documentation [<a href="https://github.com/doxygen/doxygen/commit/320ebb35dd4a615a7a692d71de4587be9ce8b99b">view</a>]</li> +<li>Suggestion to use stripPrefix has been implemented for RESULT. For consistency also implemented for arguments. [<a href="https://github.com/doxygen/doxygen/commit/610bdb67c4db775debf26d85091383938d946f3d">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/6720a714461b9454c7cdbae7ceff7eb735feeb3b">view</a>]</li> +<li>Support diff that returns "No differences encountered" when comparing test results [<a href="https://github.com/doxygen/doxygen/commit/4716f426332d02eb6841c509658b8a709cce9318">view</a>]</li> +<li>Support generating index-color PNG files [<a href="https://github.com/doxygen/doxygen/commit/a09ffed2f603699955c18c19e0d3e782fb61d93f">view</a>]</li> +<li>Switched back to version 6.2 of JavaCC for VHDL parser generation. [<a href="https://github.com/doxygen/doxygen/commit/088896f27f460b6ac03c2d64df148e3617c1e519">view</a>]</li> +<li>Tcl: fix for extra line breaks in source browser introduced by commit 312bef5 [<a href="https://github.com/doxygen/doxygen/commit/3cc116ba2250e6946773ec22c6c7c6557773d28e">view</a>]</li> +<li>TranslatorSwedish updated [<a href="https://github.com/doxygen/doxygen/commit/eaa19e3a439a4652023b47b0cf47c7303484ef5d">view</a>]</li> +<li>Update of search from "endless search to 'Character search: criterion. [<a href="https://github.com/doxygen/doxygen/commit/a0820f29e60be1555b5b0c92a975bf334b6f5258">view</a>]</li> +<li>Update translator_cn.h [<a href="https://github.com/doxygen/doxygen/commit/a88d3549373990bfac09f936748577fc5c59d240">view</a>]</li> +<li>Updated changelog for 1.8.9.1 [<a href="https://github.com/doxygen/doxygen/commit/f8671a4520350fe38f986fdd199c2344452e7a01">view</a>]</li> +<li>Updated installation section of the manual [<a href="https://github.com/doxygen/doxygen/commit/db6a3ab2761a328e74fdccf243ff148af7623062">view</a>]</li> +<li>Various VHDL related fixes [<a href="https://github.com/doxygen/doxygen/commit/34b00c442308efe169cc89fad62588fdce1d84e8">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/3eed7a5c5b330736b508c722c9614c774a678ef1">view</a>], +[<a href="https://github.com/doxygen/doxygen/commit/530647f76a7660a406d102269dc041b00b0e3d4e">view</a>]</li> +<li>Various minor changes [<a href="https://github.com/doxygen/doxygen/commit/f63d9ed958d2c06717434e1a90e6417cf2d60f6b">view</a>]</li> +<li>Warning message multiple mainpages [<a href="https://github.com/doxygen/doxygen/commit/17fdd71a0f7a02e8b72eaf86d67bc142210a7059">view</a>]</li> +<li>Warnings without filename [<a href="https://github.com/doxygen/doxygen/commit/da3faf6b93fd3eb4e751d2c0cbd4ed9ceae7922b">view</a>]</li> +<li>add support for github flavored fenced code blocks [<a href="https://github.com/doxygen/doxygen/commit/288ea42fc27389160c20912003a7972e21195265">view</a>]</li> +<li>added HHC.exe own output to the debug output when extcmd flag enabled [<a href="https://github.com/doxygen/doxygen/commit/4438e24b478de1fd97ccc81a3a9f7651124e1c63">view</a>]</li> +<li>doc/translator.py -- minor updates [<a href="https://github.com/doxygen/doxygen/commit/1ccc93fd699b34b7a89acecf9e59a526a5972bb8">view</a>]</li> +<li>drop #include <unistd.h> [<a href="https://github.com/doxygen/doxygen/commit/1dd0cf03f5bf173fa4ac3bb8279d12fff1b98eb7">view</a>]</li> +<li>fix *.l for three backticks [<a href="https://github.com/doxygen/doxygen/commit/bb93db0d60fd4cd123dfc886ecd20167068db6ba">view</a>]</li> +<li>fix enum brief description in RTF output [<a href="https://github.com/doxygen/doxygen/commit/87429a2609b822d2b08ec17fb2a20464a5043c9e">view</a>]</li> +<li>fix for CHM TOC "Classes" entry to point to annotated file [<a href="https://github.com/doxygen/doxygen/commit/700a9ac3c177fdef25b9b00ed6bb5e0ea963d236">view</a>]</li> +<li>fix for src/translator_tw.h by Gary Lee (translation cleaned) [<a href="https://github.com/doxygen/doxygen/commit/d101790db5e64a64f4db0e46391bbb1b0dadc8b1">view</a>]</li> +<li>increase the size of l when result is modified [<a href="https://github.com/doxygen/doxygen/commit/dd0d738683029f80a42b6673e0b1b1228bebfce3">view</a>]</li> +<li>move layout_default.xml to templates/html/ [<a href="https://github.com/doxygen/doxygen/commit/45ebb6ff4846255ad7209e3bec7cd4fe0544ffd5">view</a>]</li> +<li>runtests.pl: mmn version has dash as separator [<a href="https://github.com/doxygen/doxygen/commit/f5efa2f383fe89b53bd8fc27b2116e8636417ebf">view</a>]</li> +<li>specify that doxygen searches files in INPUT tag [<a href="https://github.com/doxygen/doxygen/commit/0971dc7771be1b386a204c3d11515f7d0f5af427">view</a>]</li> +<li>sqlite3: add regexp searches to search.py [<a href="https://github.com/doxygen/doxygen/commit/13dd6d635e7ba2beb26a0d2ee8542ac63d1c7973">view</a>]</li> +<li>sqlite3: add schema comments [<a href="https://github.com/doxygen/doxygen/commit/ef5d48d93f5565ebca9aae4ba9d6633c32719ecc">view</a>]</li> +<li>sqlite3: fix constness [<a href="https://github.com/doxygen/doxygen/commit/90d89d8a2a2be931742c7291cd70e4a980035ae1">view</a>]</li> +<li>version.py pass configure file path as parameter [<a href="https://github.com/doxygen/doxygen/commit/75e8f4c80ab5c06a33eaaf7ec587ee35ed9c1b1a">view</a>]</li> +<li>xml: use STRIP_FROM_PATH on @file attributes. [<a href="https://github.com/doxygen/doxygen/commit/29ae707794042a97412eaa137fa7b30f2367294d">view</a>], [<a href="https://github.com/doxygen/doxygen/commit/5a0379944f8bdf883fdb25e94e0cdb1e5d2f4366">view</a>]</li> </ul> <p> \endhtmlonly @@ -670,21 +1071,21 @@ <a name="1.8.9.1"></a> </p> <ul> -<li>Fixed a couple of cases where sharing string data could lead to corruption [<a href="http://github.com/doxygen/doxygen/commit/312bef563a5be72f6423377247db1b80044bf711">view</a>]</li> -<li>Various VHDL related fixes [<a href="http://github.com/doxygen/doxygen/commit/34b00c442308efe169cc89fad62588fdce1d84e8">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5698">5698</a> - Bogus warning: citelist: Unexpected new line character [<a href="http://github.com/doxygen/doxygen/commit/5c321cbb6359bc1bb875729c08beba2edc084500">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5704">5704</a> - @todo paragraphs incorrectly placed in rtf output [<a href="http://github.com/doxygen/doxygen/commit/600d5859d7bcb94b08ef656fd427914766ae9afe">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5705">5705</a> - Bogus message with addtogroup [<a href="http://github.com/doxygen/doxygen/commit/b75af9180ae53f7c7abb94ccf906333169247785">view</a>]</li> -<li>Documentation HTML Header, Footer, and Stylesheet changes [<a href="http://github.com/doxygen/doxygen/commit/478207365d7f09f0e676a76f654502c084806e4e">view</a>]</li> -<li>Documenting RESULT variable of Fortran FUNCTION [<a href="http://github.com/doxygen/doxygen/commit/4d52beec3760244d959ab4d5528aea1acba505e7">view</a>]</li> -<li>Fix potential null pointer dereference in src/context.cpp [<a href="http://github.com/doxygen/doxygen/commit/2690774f87b9fcb12b35153de82cde22248b3949">view</a>]</li> -<li>Fixed compilation issue on Windows [<a href="http://github.com/doxygen/doxygen/commit/d75455eef7c91f11c2b9061d9a086ce93c4231b2">view</a>]</li> -<li>Fortran FUNCTION source code [<a href="http://github.com/doxygen/doxygen/commit/25a90990662449808c5ba58c243a7835d13ba750">view</a>]</li> -<li>Fortran: code color GOTO as flow keyword. [<a href="http://github.com/doxygen/doxygen/commit/8090675790ad9265bcffdf07ab4d48fc8c037276">view</a>]</li> -<li>Help message regarding layout file [<a href="http://github.com/doxygen/doxygen/commit/7569f42d95332a5948e9d35e94e88d56d11634a9">view</a>]</li> -<li>Remove unused local and static global variables [<a href="http://github.com/doxygen/doxygen/commit/d03e4c2ae1864c6f27a4341449ce97133aeb6847">view</a>]</li> -<li>Suggestion to use stripPrefix has been implemented for RESULT. For consistency also implemented for arguments. [<a href="http://github.com/doxygen/doxygen/commit/6720a714461b9454c7cdbae7ceff7eb735feeb3b">view</a>]</li> -<li>Switched back to version 6.2 of JavaCC for VHDL parser generation. [<a href="http://github.com/doxygen/doxygen/commit/088896f27f460b6ac03c2d64df148e3617c1e519">view</a>]</li> +<li>Fixed a couple of cases where sharing string data could lead to corruption [<a href="https://github.com/doxygen/doxygen/commit/312bef563a5be72f6423377247db1b80044bf711">view</a>]</li> +<li>Various VHDL related fixes [<a href="https://github.com/doxygen/doxygen/commit/34b00c442308efe169cc89fad62588fdce1d84e8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5698">5698</a> - Bogus warning: citelist: Unexpected new line character [<a href="https://github.com/doxygen/doxygen/commit/5c321cbb6359bc1bb875729c08beba2edc084500">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5704">5704</a> - @todo paragraphs incorrectly placed in rtf output [<a href="https://github.com/doxygen/doxygen/commit/600d5859d7bcb94b08ef656fd427914766ae9afe">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5705">5705</a> - Bogus message with addtogroup [<a href="https://github.com/doxygen/doxygen/commit/b75af9180ae53f7c7abb94ccf906333169247785">view</a>]</li> +<li>Documentation HTML Header, Footer, and Stylesheet changes [<a href="https://github.com/doxygen/doxygen/commit/478207365d7f09f0e676a76f654502c084806e4e">view</a>]</li> +<li>Documenting RESULT variable of Fortran FUNCTION [<a href="https://github.com/doxygen/doxygen/commit/4d52beec3760244d959ab4d5528aea1acba505e7">view</a>]</li> +<li>Fix potential null pointer dereference in src/context.cpp [<a href="https://github.com/doxygen/doxygen/commit/2690774f87b9fcb12b35153de82cde22248b3949">view</a>]</li> +<li>Fixed compilation issue on Windows [<a href="https://github.com/doxygen/doxygen/commit/d75455eef7c91f11c2b9061d9a086ce93c4231b2">view</a>]</li> +<li>Fortran FUNCTION source code [<a href="https://github.com/doxygen/doxygen/commit/25a90990662449808c5ba58c243a7835d13ba750">view</a>]</li> +<li>Fortran: code color GOTO as flow keyword. [<a href="https://github.com/doxygen/doxygen/commit/8090675790ad9265bcffdf07ab4d48fc8c037276">view</a>]</li> +<li>Help message regarding layout file [<a href="https://github.com/doxygen/doxygen/commit/7569f42d95332a5948e9d35e94e88d56d11634a9">view</a>]</li> +<li>Remove unused local and static global variables [<a href="https://github.com/doxygen/doxygen/commit/d03e4c2ae1864c6f27a4341449ce97133aeb6847">view</a>]</li> +<li>Suggestion to use stripPrefix has been implemented for RESULT. For consistency also implemented for arguments. [<a href="https://github.com/doxygen/doxygen/commit/6720a714461b9454c7cdbae7ceff7eb735feeb3b">view</a>]</li> +<li>Switched back to version 6.2 of JavaCC for VHDL parser generation. [<a href="https://github.com/doxygen/doxygen/commit/088896f27f460b6ac03c2d64df148e3617c1e519">view</a>]</li> </ul> <p> \endhtmlonly @@ -695,87 +1096,87 @@ <a name="1.8.9"></a> </p> <ul> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4011">4011</a> - Fortran: external subroutine as dummy argument not recognized [<a href="http://github.com/doxygen/doxygen/commit/8f78eff7e8b2650f9a8364ff5c5b6925279e6b5a">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4011">4011</a> - Fortran: external subroutine as dummy argument not recognized [<a href="http://github.com/doxygen/doxygen/commit/fabd1194a2e3c2536dddc19945c568a690b17031">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4286">4286</a> - Brief description misplaced in man page output [<a href="http://github.com/doxygen/doxygen/commit/379e3b959a9566571db3c799a8338dd4436881b2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4293">4293</a> - Typedefs in manpages has too few linebreak possiblilities [<a href="http://github.com/doxygen/doxygen/commit/4bbcf71defb2e2be02494b7ff68d475d1a0438ac">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4914">4914</a> - C# <code> tag in an <example> tag does not render as expected. [<a href="http://github.com/doxygen/doxygen/commit/07d5f3f48a497993c525eab9a5ecc0429c317c98">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4941">4941</a> - Add support for LATEX_EXTRA_STYLESHEET [<a href="http://github.com/doxygen/doxygen/commit/fd91442bcc5a20ba298a024ee2cc375ec4f1714d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5237">5237</a> - Allow Class{T}.Method in cref to refer to a generic class in XML comments [<a href="http://github.com/doxygen/doxygen/commit/f9c9edba086f544b813ff036ea9209744da18c44">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5418">5418</a> - classes with same name in different namespace adding to same group [<a href="http://github.com/doxygen/doxygen/commit/73a5a4c48aec0c48353ecb8e5aa6d5ff02463132">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5462">5462</a> - Missing link for item inside the same namespace [<a href="http://github.com/doxygen/doxygen/commit/95aee340bddca0c09c79dc2f137a5ad01eb4fda8">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5467">5467</a> - Added HIDE_COMPOUND_REFERENCE config option [<a href="http://github.com/doxygen/doxygen/commit/415ae7021eeee278ad6c95be23e572dc18ff6a32">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5554">5554</a> - QHP toc broken if mainpage with PROJECT_NAME title has sections/subpages [<a href="http://github.com/doxygen/doxygen/commit/745955f576cbd7b5f7601c55937d9c42db8161e8">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5558">5558</a> - src/Makefile.libdoxycfg shouldn't be distributed [<a href="http://github.com/doxygen/doxygen/commit/45cfc44d3670bb9f72a0795d4a9bc07403a29d6d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5559">5559</a> - plantUML requires epstopdf for building PDF files [<a href="http://github.com/doxygen/doxygen/commit/52d216a87451c867c92691a4483cd85d3e5b906f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5560">5560</a> - tag file: Unknown compound attribute `singleton' found! [<a href="http://github.com/doxygen/doxygen/commit/92eb236037e857f38eaf24238815641a48540792">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5562">5562</a> - Fix a resource leak in src/vhdldocgen.cpp [<a href="http://github.com/doxygen/doxygen/commit/22e44853813066e45b483b1b6633199b3d2bf509">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5563">5563</a> - There's no such thing as a private Q_PROPERTY [<a href="http://github.com/doxygen/doxygen/commit/ff7cc1c73c3d4b3449862055bd08b0f361e5b358">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5564">5564</a> - Same Expression in translator_kr.h [<a href="http://github.com/doxygen/doxygen/commit/32aa9f2a7898b5c43070a5cd0dec8bddcc6b8c39">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5565">5565</a> - Fix a potential null pointer dereference in src/memberdef.cpp [<a href="http://github.com/doxygen/doxygen/commit/7a268f59c0551953fe4e7dde0b1e3804d583a060">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5567">5567</a> - Mismatch in memory allocation/de-allocation function in vhdlparser/vhdlstring.h [<a href="http://github.com/doxygen/doxygen/commit/2038873ce0a9ec90efb28730b3dc787d3d03e964">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5568">5568</a> - Remove a not needed initialization of a local variable in src/mangen.cpp [<a href="http://github.com/doxygen/doxygen/commit/1e8a69902a2cbb3118e6de5959223b9c8d3a843a">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5569">5569</a> - Fix a potential null pointer dereference in src/searchindex.cpp [<a href="http://github.com/doxygen/doxygen/commit/e21aaadb920775f431a27957542da80e39d0c947">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5570">5570</a> - Fix wrong pointer initialization in src/definition.cpp [<a href="http://github.com/doxygen/doxygen/commit/cb5d8e6198fe0d0852fb06d6fa18b8ae2682e2c0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5571">5571</a> - Fix potential modulo by zero in src/template.cpp [<a href="http://github.com/doxygen/doxygen/commit/c4007c3abea9c8494bf32181a1352b5366bede69">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5572">5572</a> - Reached end of file while still inside a (nested) comment in Markdown [<a href="http://github.com/doxygen/doxygen/commit/c7f7c954ec1356e7f361da0d655c72ca0012a0cf">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5573">5573</a> - Fix a terminating null character after fread in src/filedef.cpp [<a href="http://github.com/doxygen/doxygen/commit/a4003db44dfb624c03b7e0a518e368d3e4b8c1ca">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5574">5574</a> - Remove not needed variable initialization in src/classdef.cpp [<a href="http://github.com/doxygen/doxygen/commit/5f01852bbfd3c81320ee4aa8cd45875a80b50ee1">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5575">5575</a> - Remove not needed pointer initialization in src/entry.cpp [<a href="http://github.com/doxygen/doxygen/commit/88832b15f1256846b1228ac411d270c6d092a50b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5576">5576</a> - Provide exit code in case generatePlantUMLOutput fails [<a href="http://github.com/doxygen/doxygen/commit/94ea18e60c50db14f25eda642be020fac5917b3c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5578">5578</a> - Remove not needed variable caching in src/markdown.cpp [<a href="http://github.com/doxygen/doxygen/commit/d6c2464982e5b1c027cdde0400822c3b2fc7fd41">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5580">5580</a> - Do not cache inputSize in src/doxygen.cpp [<a href="http://github.com/doxygen/doxygen/commit/8f3e7fc892f07f32a2c6e0110dab58942f6c20a7">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5581">5581</a> - Expression is always false because 'else if' condition matches previous condition [<a href="http://github.com/doxygen/doxygen/commit/98a9b24cd6006b130dd1e56c32f684e159fee2a3">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5583">5583</a> - Fix missing break in switch case statement [<a href="http://github.com/doxygen/doxygen/commit/b59edd279f887e55b162ae1b1c7bce4b2ca29dab">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5584">5584</a> - Spurious ASSERT message [<a href="http://github.com/doxygen/doxygen/commit/fff03ab9adcbdf480929c6a10975cab469eaf17c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5585">5585</a> - Broken man pages due to bad use of autoBreak [<a href="http://github.com/doxygen/doxygen/commit/6aa7f36ce924cf9dc59a951e5727b17c37d0345e">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5586">5586</a> - Fix potential copy and paste issue in vhdlparser/VhdlParser.cc [<a href="http://github.com/doxygen/doxygen/commit/9238e342bc8f1ce3e0aaa2944d77c33e4363cf48">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5587">5587</a> - [Patch] Documentation: Wrong link for \\diafile [<a href="http://github.com/doxygen/doxygen/commit/285221e3d287db083b9377cb5633650fb2a783a1">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5588">5588</a> - [Patch] DocBook: Possible name clash for generated image files [<a href="http://github.com/doxygen/doxygen/commit/8b39158436b740a78166f947de375b5486441c93">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5589">5589</a> - RTF output: \\diafile and \\mscfile do not work [<a href="http://github.com/doxygen/doxygen/commit/7cd2b1f27a03846a8f9bcd1e4489cbfebf56bfa2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5590">5590</a> - Windows: Process exit code is ignored for processes launched using ShellExecuteEx() [<a href="http://github.com/doxygen/doxygen/commit/68aa8c2bd8a5e6a8ad7c46c725c8bb5e61896ba0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5593">5593</a> - Fix potential allocation of huge memory amount due to type overflow in src/lodepng.cpp [<a href="http://github.com/doxygen/doxygen/commit/30870ef90f4a74e7c53a6856b10bcd2f16e4d1bd">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5594">5594</a> - Fix missing unchecked return value in src/dot.cpp [<a href="http://github.com/doxygen/doxygen/commit/be0c23efcb902891e91bed42ab2ac27a6f1460cb">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5595">5595</a> - Fix potential null pointer dereference in src/dbusxmlscanner.cpp [<a href="http://github.com/doxygen/doxygen/commit/46e83b44be0c0aa97ead5ee52e329154c1fb47bc">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5596">5596</a> - Fix identical code for different branches in src/translator_tw.h [<a href="http://github.com/doxygen/doxygen/commit/79dedb65ae1f9306b83a69058dbd2015ef7c3b94">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5597">5597</a> - Fix potential null pointer dereference in src/index.cpp [<a href="http://github.com/doxygen/doxygen/commit/68c063cbffc38c1528dd86232a8b8642fae26b1b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5598">5598</a> - Remove not needed variable initialization in src/cite.cpp [<a href="http://github.com/doxygen/doxygen/commit/23bc555e5483baa6c1a3d0c1ad346bb37348b31b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5599">5599</a> - Remove not needed local variable in src/doxygen.cpp [<a href="http://github.com/doxygen/doxygen/commit/561a996c68f796dccb36fb3eed6150fcc90e5634">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5600">5600</a> - Remove redundant if/else branch in src/lodepng.cpp [<a href="http://github.com/doxygen/doxygen/commit/3026131de3126298863d1a68fe0c747524e26e43">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5601">5601</a> - Remove redundant if/else branch in src/translator_lt.h [<a href="http://github.com/doxygen/doxygen/commit/e7b9f1d16ea2043be068c448676e368e9239314e">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5602">5602</a> - Cleanup redundant if/else branch in src/translator_kr.h [<a href="http://github.com/doxygen/doxygen/commit/3d1343d1c8876d0eb0352eafafe4aa90bc483adf">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5603">5603</a> - Cleanup redundant if/else branch in src/translator_sr.h [<a href="http://github.com/doxygen/doxygen/commit/192aa6590b6ceb264335a5b8a1aed6b6f8b0f350">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5604">5604</a> - Cleanup redundant if/else branch in src/translator_tw.h [<a href="http://github.com/doxygen/doxygen/commit/02b35985cda1a537c45071f1245b2c4a6dc4ffc6">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5605">5605</a> - Cleanup redundant if/else branch in src/translator_vi.h [<a href="http://github.com/doxygen/doxygen/commit/8e47b4bc5084cb00e5bdcdaa4c1bd048b48a4999">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5606">5606</a> - Remove redundant local variable initialization in qtools/qstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/4afe088327ae6780c9c8a73b7b2d3994005f6cca">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5607">5607</a> - Fix wrong member variable initialization in src/define.cpp [<a href="http://github.com/doxygen/doxygen/commit/33daf7a7d9ab9b6c5454acd7a3cff7923d1c4c14">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5611">5611</a> - Fix potential null pointer dereference in src/util.cpp [<a href="http://github.com/doxygen/doxygen/commit/24b5b715929759a7836a3813ef93976b7cc10641">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5612">5612</a> - Fix another potential null pointer dereference in src/util.cpp [<a href="http://github.com/doxygen/doxygen/commit/bc95beac3eca3cda55430e0cde97ba826d3d7400">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5613">5613</a> - Fix a potential null pointer dereference in src/index.cpp [<a href="http://github.com/doxygen/doxygen/commit/c22be34fb79588fa04a9cf9c86438c8eb00d81fc">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5614">5614</a> - Fix a potential null pointer dereference in src/vhdldocgen.cpp [<a href="http://github.com/doxygen/doxygen/commit/7a22d83a1f9665863201ff0e717071e9b7d3a110">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5632">5632</a> - Member functions omitted from tagfile [<a href="http://github.com/doxygen/doxygen/commit/b9ad9a03cf4febeb2aa10ddca22c1c9296c5223b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5643">5643</a> - Java: Annotations with brackets prevent documentation [<a href="http://github.com/doxygen/doxygen/commit/e446e2e044d674ba3609619e3dd95eb340f15e09">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5647">5647</a> - Invalid element name in footer part when GENERATE_TREEVIEW specified [<a href="http://github.com/doxygen/doxygen/commit/5cb961284e89f197406170389e8866bb9c94fe3a">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5649">5649</a> - Fortran attribute contiguous not identified [<a href="http://github.com/doxygen/doxygen/commit/6da2e3fb28f6ed9f219c66d165ac4467fda36148">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5652">5652</a> - Entity references in XML command attributes are incorrectly handled [<a href="http://github.com/doxygen/doxygen/commit/553a7bf7e1b7be2f602e0230ddfc7f882b009cf8">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5653">5653</a> - Entity references in XML code command are incorrectly handled [<a href="http://github.com/doxygen/doxygen/commit/30216574cb189a92f27bb0e701ff31aa8cce6b83">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5656">5656</a> - latex: dead links to source code [<a href="http://github.com/doxygen/doxygen/commit/b68a4abcfa22e68fd94487a8f2b48588eda5a1af">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5657">5657</a> - &hellip; is replaced by \cdots rather than \dots in the LaTeX output [<a href="http://github.com/doxygen/doxygen/commit/9ac31f84bd25d320f861e9e194fe5df49f4b212b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5664">5664</a> - Python xml not outputting info of functions inside __init__.py [<a href="http://github.com/doxygen/doxygen/commit/d13908f65b6e745bab14dc610c9f9bc7908c55c5">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5665">5665</a> - Python xml - argsstring is empty, while HTML have arguments [<a href="http://github.com/doxygen/doxygen/commit/89eb624fec44c0f900d9035dfea950ceaf0ba76d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5667">5667</a> - Invalid warning about undocumented C++ function imported from tagfile [<a href="http://github.com/doxygen/doxygen/commit/f1c96033bcea28e3ff4528299459b39488831669">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5668">5668</a> - C++11 scoped enums with same name inside different classes are merged if using tagfile [<a href="http://github.com/doxygen/doxygen/commit/b4fd6ac51fad4f20116194816d4802f616739d1f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5669">5669</a> - Cannot make explicit links to C++ const member functions [<a href="http://github.com/doxygen/doxygen/commit/ad5dfc39bee7a1b3de16f36bc3a20565aa6438fe">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5670">5670</a> - Cannot make unscoped link to C++ conversion operator [<a href="http://github.com/doxygen/doxygen/commit/9f477b87fc492221e1b7109d197fe468cd0ed23d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5671">5671</a> - Using "doxygen.css" for HTML_EXTRA_STYLESHEET fails silently [<a href="http://github.com/doxygen/doxygen/commit/5e962c90d3270612df7363e7cf6bf42646c94fbe">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5674">5674</a> - Regression: Base classes incorrect when using CRTP with default template parameter [<a href="http://github.com/doxygen/doxygen/commit/200b828ead9f6bb5b2f6f99919837d5828a250e4">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5678">5678</a> - Full scope needed when making link inside cross-referenced section [<a href="http://github.com/doxygen/doxygen/commit/c6e41226574c94a869ad0757b53027562ef189e1">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5678">5678</a> - Full scope needed when making link inside cross-referenced section (fixed regression) [<a href="http://github.com/doxygen/doxygen/commit/60abada8b95cc1772996a264065904f408ed32ff">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5680">5680</a> - invalid copydoc target does not result in warning [<a href="http://github.com/doxygen/doxygen/commit/738c0dd829b6e3ae74359a8d92d12b491fa71d1b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5686">5686</a> - Latex to PDF hangs when using Markdown tables [<a href="http://github.com/doxygen/doxygen/commit/089771b5f3c3c3984ae6f352125a001788a62d29">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5690">5690</a> - Crash when building gtkmm documentation [<a href="http://github.com/doxygen/doxygen/commit/050fce2b73d6e4455808ab86da2fddcf2f26e9b5">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5694">5694</a> - \cite confused by labels ending with a dot (improved warning message) [<a href="http://github.com/doxygen/doxygen/commit/78fd02dc41384d81baddf17ff0bb3431267452fc">view</a>]</li> -<li>fix docbook output [<a href="http://github.com/doxygen/doxygen/commit/1a403d80160458091bab7c442e54f836c0b90bca">view</a>] +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4011">4011</a> - Fortran: external subroutine as dummy argument not recognized [<a href="https://github.com/doxygen/doxygen/commit/8f78eff7e8b2650f9a8364ff5c5b6925279e6b5a">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4011">4011</a> - Fortran: external subroutine as dummy argument not recognized [<a href="https://github.com/doxygen/doxygen/commit/fabd1194a2e3c2536dddc19945c568a690b17031">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4286">4286</a> - Brief description misplaced in man page output [<a href="https://github.com/doxygen/doxygen/commit/379e3b959a9566571db3c799a8338dd4436881b2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4293">4293</a> - Typedefs in manpages has too few linebreak possiblilities [<a href="https://github.com/doxygen/doxygen/commit/4bbcf71defb2e2be02494b7ff68d475d1a0438ac">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4914">4914</a> - C# <code> tag in an <example> tag does not render as expected. [<a href="https://github.com/doxygen/doxygen/commit/07d5f3f48a497993c525eab9a5ecc0429c317c98">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4941">4941</a> - Add support for LATEX_EXTRA_STYLESHEET [<a href="https://github.com/doxygen/doxygen/commit/fd91442bcc5a20ba298a024ee2cc375ec4f1714d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5237">5237</a> - Allow Class{T}.Method in cref to refer to a generic class in XML comments [<a href="https://github.com/doxygen/doxygen/commit/f9c9edba086f544b813ff036ea9209744da18c44">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5418">5418</a> - classes with same name in different namespace adding to same group [<a href="https://github.com/doxygen/doxygen/commit/73a5a4c48aec0c48353ecb8e5aa6d5ff02463132">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5462">5462</a> - Missing link for item inside the same namespace [<a href="https://github.com/doxygen/doxygen/commit/95aee340bddca0c09c79dc2f137a5ad01eb4fda8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5467">5467</a> - Added HIDE_COMPOUND_REFERENCE config option [<a href="https://github.com/doxygen/doxygen/commit/415ae7021eeee278ad6c95be23e572dc18ff6a32">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5554">5554</a> - QHP toc broken if mainpage with PROJECT_NAME title has sections/subpages [<a href="https://github.com/doxygen/doxygen/commit/745955f576cbd7b5f7601c55937d9c42db8161e8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5558">5558</a> - src/Makefile.libdoxycfg shouldn't be distributed [<a href="https://github.com/doxygen/doxygen/commit/45cfc44d3670bb9f72a0795d4a9bc07403a29d6d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5559">5559</a> - plantUML requires epstopdf for building PDF files [<a href="https://github.com/doxygen/doxygen/commit/52d216a87451c867c92691a4483cd85d3e5b906f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5560">5560</a> - tag file: Unknown compound attribute `singleton' found! [<a href="https://github.com/doxygen/doxygen/commit/92eb236037e857f38eaf24238815641a48540792">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5562">5562</a> - Fix a resource leak in src/vhdldocgen.cpp [<a href="https://github.com/doxygen/doxygen/commit/22e44853813066e45b483b1b6633199b3d2bf509">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5563">5563</a> - There's no such thing as a private Q_PROPERTY [<a href="https://github.com/doxygen/doxygen/commit/ff7cc1c73c3d4b3449862055bd08b0f361e5b358">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5564">5564</a> - Same Expression in translator_kr.h [<a href="https://github.com/doxygen/doxygen/commit/32aa9f2a7898b5c43070a5cd0dec8bddcc6b8c39">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5565">5565</a> - Fix a potential null pointer dereference in src/memberdef.cpp [<a href="https://github.com/doxygen/doxygen/commit/7a268f59c0551953fe4e7dde0b1e3804d583a060">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5567">5567</a> - Mismatch in memory allocation/de-allocation function in vhdlparser/vhdlstring.h [<a href="https://github.com/doxygen/doxygen/commit/2038873ce0a9ec90efb28730b3dc787d3d03e964">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5568">5568</a> - Remove a not needed initialization of a local variable in src/mangen.cpp [<a href="https://github.com/doxygen/doxygen/commit/1e8a69902a2cbb3118e6de5959223b9c8d3a843a">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5569">5569</a> - Fix a potential null pointer dereference in src/searchindex.cpp [<a href="https://github.com/doxygen/doxygen/commit/e21aaadb920775f431a27957542da80e39d0c947">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5570">5570</a> - Fix wrong pointer initialization in src/definition.cpp [<a href="https://github.com/doxygen/doxygen/commit/cb5d8e6198fe0d0852fb06d6fa18b8ae2682e2c0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5571">5571</a> - Fix potential modulo by zero in src/template.cpp [<a href="https://github.com/doxygen/doxygen/commit/c4007c3abea9c8494bf32181a1352b5366bede69">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5572">5572</a> - Reached end of file while still inside a (nested) comment in Markdown [<a href="https://github.com/doxygen/doxygen/commit/c7f7c954ec1356e7f361da0d655c72ca0012a0cf">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5573">5573</a> - Fix a terminating null character after fread in src/filedef.cpp [<a href="https://github.com/doxygen/doxygen/commit/a4003db44dfb624c03b7e0a518e368d3e4b8c1ca">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5574">5574</a> - Remove not needed variable initialization in src/classdef.cpp [<a href="https://github.com/doxygen/doxygen/commit/5f01852bbfd3c81320ee4aa8cd45875a80b50ee1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5575">5575</a> - Remove not needed pointer initialization in src/entry.cpp [<a href="https://github.com/doxygen/doxygen/commit/88832b15f1256846b1228ac411d270c6d092a50b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5576">5576</a> - Provide exit code in case generatePlantUMLOutput fails [<a href="https://github.com/doxygen/doxygen/commit/94ea18e60c50db14f25eda642be020fac5917b3c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5578">5578</a> - Remove not needed variable caching in src/markdown.cpp [<a href="https://github.com/doxygen/doxygen/commit/d6c2464982e5b1c027cdde0400822c3b2fc7fd41">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5580">5580</a> - Do not cache inputSize in src/doxygen.cpp [<a href="https://github.com/doxygen/doxygen/commit/8f3e7fc892f07f32a2c6e0110dab58942f6c20a7">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5581">5581</a> - Expression is always false because 'else if' condition matches previous condition [<a href="https://github.com/doxygen/doxygen/commit/98a9b24cd6006b130dd1e56c32f684e159fee2a3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5583">5583</a> - Fix missing break in switch case statement [<a href="https://github.com/doxygen/doxygen/commit/b59edd279f887e55b162ae1b1c7bce4b2ca29dab">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5584">5584</a> - Spurious ASSERT message [<a href="https://github.com/doxygen/doxygen/commit/fff03ab9adcbdf480929c6a10975cab469eaf17c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5585">5585</a> - Broken man pages due to bad use of autoBreak [<a href="https://github.com/doxygen/doxygen/commit/6aa7f36ce924cf9dc59a951e5727b17c37d0345e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5586">5586</a> - Fix potential copy and paste issue in vhdlparser/VhdlParser.cc [<a href="https://github.com/doxygen/doxygen/commit/9238e342bc8f1ce3e0aaa2944d77c33e4363cf48">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5587">5587</a> - [Patch] Documentation: Wrong link for \\diafile [<a href="https://github.com/doxygen/doxygen/commit/285221e3d287db083b9377cb5633650fb2a783a1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5588">5588</a> - [Patch] DocBook: Possible name clash for generated image files [<a href="https://github.com/doxygen/doxygen/commit/8b39158436b740a78166f947de375b5486441c93">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5589">5589</a> - RTF output: \\diafile and \\mscfile do not work [<a href="https://github.com/doxygen/doxygen/commit/7cd2b1f27a03846a8f9bcd1e4489cbfebf56bfa2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5590">5590</a> - Windows: Process exit code is ignored for processes launched using ShellExecuteEx() [<a href="https://github.com/doxygen/doxygen/commit/68aa8c2bd8a5e6a8ad7c46c725c8bb5e61896ba0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5593">5593</a> - Fix potential allocation of huge memory amount due to type overflow in src/lodepng.cpp [<a href="https://github.com/doxygen/doxygen/commit/30870ef90f4a74e7c53a6856b10bcd2f16e4d1bd">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5594">5594</a> - Fix missing unchecked return value in src/dot.cpp [<a href="https://github.com/doxygen/doxygen/commit/be0c23efcb902891e91bed42ab2ac27a6f1460cb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5595">5595</a> - Fix potential null pointer dereference in src/dbusxmlscanner.cpp [<a href="https://github.com/doxygen/doxygen/commit/46e83b44be0c0aa97ead5ee52e329154c1fb47bc">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5596">5596</a> - Fix identical code for different branches in src/translator_tw.h [<a href="https://github.com/doxygen/doxygen/commit/79dedb65ae1f9306b83a69058dbd2015ef7c3b94">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5597">5597</a> - Fix potential null pointer dereference in src/index.cpp [<a href="https://github.com/doxygen/doxygen/commit/68c063cbffc38c1528dd86232a8b8642fae26b1b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5598">5598</a> - Remove not needed variable initialization in src/cite.cpp [<a href="https://github.com/doxygen/doxygen/commit/23bc555e5483baa6c1a3d0c1ad346bb37348b31b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5599">5599</a> - Remove not needed local variable in src/doxygen.cpp [<a href="https://github.com/doxygen/doxygen/commit/561a996c68f796dccb36fb3eed6150fcc90e5634">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5600">5600</a> - Remove redundant if/else branch in src/lodepng.cpp [<a href="https://github.com/doxygen/doxygen/commit/3026131de3126298863d1a68fe0c747524e26e43">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5601">5601</a> - Remove redundant if/else branch in src/translator_lt.h [<a href="https://github.com/doxygen/doxygen/commit/e7b9f1d16ea2043be068c448676e368e9239314e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5602">5602</a> - Cleanup redundant if/else branch in src/translator_kr.h [<a href="https://github.com/doxygen/doxygen/commit/3d1343d1c8876d0eb0352eafafe4aa90bc483adf">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5603">5603</a> - Cleanup redundant if/else branch in src/translator_sr.h [<a href="https://github.com/doxygen/doxygen/commit/192aa6590b6ceb264335a5b8a1aed6b6f8b0f350">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5604">5604</a> - Cleanup redundant if/else branch in src/translator_tw.h [<a href="https://github.com/doxygen/doxygen/commit/02b35985cda1a537c45071f1245b2c4a6dc4ffc6">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5605">5605</a> - Cleanup redundant if/else branch in src/translator_vi.h [<a href="https://github.com/doxygen/doxygen/commit/8e47b4bc5084cb00e5bdcdaa4c1bd048b48a4999">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5606">5606</a> - Remove redundant local variable initialization in qtools/qstring.cpp [<a href="https://github.com/doxygen/doxygen/commit/4afe088327ae6780c9c8a73b7b2d3994005f6cca">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5607">5607</a> - Fix wrong member variable initialization in src/define.cpp [<a href="https://github.com/doxygen/doxygen/commit/33daf7a7d9ab9b6c5454acd7a3cff7923d1c4c14">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5611">5611</a> - Fix potential null pointer dereference in src/util.cpp [<a href="https://github.com/doxygen/doxygen/commit/24b5b715929759a7836a3813ef93976b7cc10641">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5612">5612</a> - Fix another potential null pointer dereference in src/util.cpp [<a href="https://github.com/doxygen/doxygen/commit/bc95beac3eca3cda55430e0cde97ba826d3d7400">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5613">5613</a> - Fix a potential null pointer dereference in src/index.cpp [<a href="https://github.com/doxygen/doxygen/commit/c22be34fb79588fa04a9cf9c86438c8eb00d81fc">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5614">5614</a> - Fix a potential null pointer dereference in src/vhdldocgen.cpp [<a href="https://github.com/doxygen/doxygen/commit/7a22d83a1f9665863201ff0e717071e9b7d3a110">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5632">5632</a> - Member functions omitted from tagfile [<a href="https://github.com/doxygen/doxygen/commit/b9ad9a03cf4febeb2aa10ddca22c1c9296c5223b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5643">5643</a> - Java: Annotations with brackets prevent documentation [<a href="https://github.com/doxygen/doxygen/commit/e446e2e044d674ba3609619e3dd95eb340f15e09">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5647">5647</a> - Invalid element name in footer part when GENERATE_TREEVIEW specified [<a href="https://github.com/doxygen/doxygen/commit/5cb961284e89f197406170389e8866bb9c94fe3a">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5649">5649</a> - Fortran attribute contiguous not identified [<a href="https://github.com/doxygen/doxygen/commit/6da2e3fb28f6ed9f219c66d165ac4467fda36148">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5652">5652</a> - Entity references in XML command attributes are incorrectly handled [<a href="https://github.com/doxygen/doxygen/commit/553a7bf7e1b7be2f602e0230ddfc7f882b009cf8">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5653">5653</a> - Entity references in XML code command are incorrectly handled [<a href="https://github.com/doxygen/doxygen/commit/30216574cb189a92f27bb0e701ff31aa8cce6b83">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5656">5656</a> - latex: dead links to source code [<a href="https://github.com/doxygen/doxygen/commit/b68a4abcfa22e68fd94487a8f2b48588eda5a1af">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5657">5657</a> - &hellip; is replaced by \cdots rather than \dots in the LaTeX output [<a href="https://github.com/doxygen/doxygen/commit/9ac31f84bd25d320f861e9e194fe5df49f4b212b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5664">5664</a> - Python xml not outputting info of functions inside __init__.py [<a href="https://github.com/doxygen/doxygen/commit/d13908f65b6e745bab14dc610c9f9bc7908c55c5">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5665">5665</a> - Python xml - argsstring is empty, while HTML have arguments [<a href="https://github.com/doxygen/doxygen/commit/89eb624fec44c0f900d9035dfea950ceaf0ba76d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5667">5667</a> - Invalid warning about undocumented C++ function imported from tagfile [<a href="https://github.com/doxygen/doxygen/commit/f1c96033bcea28e3ff4528299459b39488831669">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5668">5668</a> - C++11 scoped enums with same name inside different classes are merged if using tagfile [<a href="https://github.com/doxygen/doxygen/commit/b4fd6ac51fad4f20116194816d4802f616739d1f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5669">5669</a> - Cannot make explicit links to C++ const member functions [<a href="https://github.com/doxygen/doxygen/commit/ad5dfc39bee7a1b3de16f36bc3a20565aa6438fe">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5670">5670</a> - Cannot make unscoped link to C++ conversion operator [<a href="https://github.com/doxygen/doxygen/commit/9f477b87fc492221e1b7109d197fe468cd0ed23d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5671">5671</a> - Using "doxygen.css" for HTML_EXTRA_STYLESHEET fails silently [<a href="https://github.com/doxygen/doxygen/commit/5e962c90d3270612df7363e7cf6bf42646c94fbe">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5674">5674</a> - Regression: Base classes incorrect when using CRTP with default template parameter [<a href="https://github.com/doxygen/doxygen/commit/200b828ead9f6bb5b2f6f99919837d5828a250e4">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5678">5678</a> - Full scope needed when making link inside cross-referenced section [<a href="https://github.com/doxygen/doxygen/commit/c6e41226574c94a869ad0757b53027562ef189e1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5678">5678</a> - Full scope needed when making link inside cross-referenced section (fixed regression) [<a href="https://github.com/doxygen/doxygen/commit/60abada8b95cc1772996a264065904f408ed32ff">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5680">5680</a> - invalid copydoc target does not result in warning [<a href="https://github.com/doxygen/doxygen/commit/738c0dd829b6e3ae74359a8d92d12b491fa71d1b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5686">5686</a> - Latex to PDF hangs when using Markdown tables [<a href="https://github.com/doxygen/doxygen/commit/089771b5f3c3c3984ae6f352125a001788a62d29">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5690">5690</a> - Crash when building gtkmm documentation [<a href="https://github.com/doxygen/doxygen/commit/050fce2b73d6e4455808ab86da2fddcf2f26e9b5">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5694">5694</a> - \cite confused by labels ending with a dot (improved warning message) [<a href="https://github.com/doxygen/doxygen/commit/78fd02dc41384d81baddf17ff0bb3431267452fc">view</a>]</li> +<li>fix docbook output [<a href="https://github.com/doxygen/doxygen/commit/1a403d80160458091bab7c442e54f836c0b90bca">view</a>] <ol><li>support other than english</li> <li>fix broken example link id</li> <li>fix incomplete TOC : no Classe etc.</li> @@ -783,89 +1184,88 @@ <li>Comply with REPEAT_BRIEF </li> <li>Do not output duplicated contents when detailed description is missing.</li> <li>set table colwidth for Param/RetVal</li> - </ol> -</li> -<li>Add missing escape in doxysearch.cpp when result contained a double quote [<a href="http://github.com/doxygen/doxygen/commit/08c9689157d7edc5d8e3369ef96f2ccd4b01c10c">view</a>]</li> -<li>Add source code possibility for RTF output [<a href="http://github.com/doxygen/doxygen/commit/05eb230757f6510d461bd14df3b190da46edd9dc">view</a>]</li> -<li>Added Coverity Scan Build Status to Readme [<a href="http://github.com/doxygen/doxygen/commit/394acb6a10dbef10cad3a0a3ff50a05d0efdea9e">view</a>]</li> -<li>Added clearer range checks for string class to help compiler [<a href="http://github.com/doxygen/doxygen/commit/869ff34828e20e3ec318384d7b0dbf91b6b2d24d">view</a>]</li> -<li>Added compilation support for MacOSX 10.10 (yosemite) [<a href="http://github.com/doxygen/doxygen/commit/151876a8321204bd2ec08ec6c4de38ba9fb2d034">view</a>]</li> -<li>Added faster reference counted string implementation with short string optimization [<a href="http://github.com/doxygen/doxygen/commit/9323ae470ad514586706dc8647501361fe208f36">view</a>]</li> -<li>Added graphical hierarchy support to template engine [<a href="http://github.com/doxygen/doxygen/commit/fe818bf8e3a154788a4a180068cfdfbbadd66ff6">view</a>]</li> -<li>Added guard to prevent (theoretical) out of bound access [<a href="http://github.com/doxygen/doxygen/commit/060a5cc121be5fd177b5d5c834f2b810dc58b9ec">view</a>]</li> -<li>Added language attribute to XML output for classes, namespaces, and files [<a href="http://github.com/doxygen/doxygen/commit/e986e0039de21791bd1fbb1f59b13f58c4a46324">view</a>]</li> -<li>Avoid a (theoretical) memory leak [<a href="http://github.com/doxygen/doxygen/commit/2937e44299a615628c27b0a0a7a95ffdf18249ef">view</a>]</li> -<li>Better handling of inline Fortran parameter documentation [<a href="http://github.com/doxygen/doxygen/commit/d5546cff5c82157f2dfddd0e1c4fdeeee8e501dd">view</a>]</li> -<li>Fixed bug for page numbers in the latex indices [<a href="http://github.com/doxygen/doxygen/commit/37ea04c317f9e1e8a09e5944b8c6c2c2ef35b1f6">view</a>]</li> -<li>Compilation fixes for Windows for new string implementation. [<a href="http://github.com/doxygen/doxygen/commit/a31c9fffec6b5145ac8509d77da826d2e196ed1e">view</a>]</li> -<li>Convert FORTRAN modules to namespaces [<a href="http://github.com/doxygen/doxygen/commit/be933bfacadaca98aaf4713746201b1fc21177de">view</a>]</li> -<li>Create an easy possibility to take a snippet from the current file. [<a href="http://github.com/doxygen/doxygen/commit/f8ceac63bdb52cf395207258c98ff0bcba35870a">view</a>]</li> -<li>Debian Bug 762272: segfault with cyclic subgroups [<a href="http://github.com/doxygen/doxygen/commit/c83db38ea83499be19d9ff242bfa22ae534ee80c">view</a>]</li> -<li>Disabled enter/exit printing for doctokenizer (produced too much noise) [<a href="http://github.com/doxygen/doxygen/commit/0b615342f0a24fbf02cc9fa94550cf34d230425b">view</a>]</li> -<li>Empty entry in \tableofcontents in case e.g. section without description. [<a href="http://github.com/doxygen/doxygen/commit/d2acdcf3b1bbd4d3079cf6c4ff5de6ba6716fd06">view</a>]</li> -<li>Extra empty line in source fragments [<a href="http://github.com/doxygen/doxygen/commit/79b40a437092bccb6589cdb29c0059a4797b771d">view</a>]</li> -<li>Fix bug with C++11 static_assert [<a href="http://github.com/doxygen/doxygen/commit/7c257bb57562b015b094f109851d914ef232ae2a">view</a>]</li> -<li>Fix bug: language switch command "\~" failed to detect language id which contains '-' [<a href="http://github.com/doxygen/doxygen/commit/a4cf65dea1371721f07c63c2bb5f9e5085b2618a">view</a>]</li> -<li>Fix for <a href="https://github.com/doxygen/doxygen/issues/4285">4285</a> [<a href="http://github.com/doxygen/doxygen/commit/e1aa7af27eded7afdf81b688015421d3b3467b2b">view</a>]</li> -<li>Fix for the second issue in bz 651848 [<a href="http://github.com/doxygen/doxygen/commit/bcd3fbf59f9199470d51938486fecda05006da61">view</a>]</li> -<li>Fix potential crash when reading tag file which contained nested java classes using generics [<a href="http://github.com/doxygen/doxygen/commit/6d4044ad43ae1424a256eb1c26992301e7c64f4a">view</a>]</li> -<li>Fix rules for closing FORTRAN module and typedef scopes [<a href="http://github.com/doxygen/doxygen/commit/7ace28eb7bb5f42c3571e5b7be1ab954f4509e17">view</a>]</li> -<li>Fix to ignore the contents of \verbatim and friends while looking for sections [<a href="http://github.com/doxygen/doxygen/commit/cba0d89fafee3daef31469cbe1cdd24e68c7b56a">view</a>]</li> -<li>Fix to show relations between C#/Java generic classes [<a href="http://github.com/doxygen/doxygen/commit/9879fddbf8f91c57b258b8e788b5ed8a150a8331">view</a>]</li> -<li>Fixed a number of issues (resource leaks, uninitialized members, etc) found by coverity [<a href="http://github.com/doxygen/doxygen/commit/41887832b90698df95e8d222cdc0a541ae2f2284">view</a>]</li> -<li>Fixed bug in new QCString::sprintf for long string. [<a href="http://github.com/doxygen/doxygen/commit/0ec56b7aa2dd39e3cab71c2229d486161566e7f6">view</a>]</li> -<li>Fixed extension matching issue if path contained a dot. [<a href="http://github.com/doxygen/doxygen/commit/79ed06502c3abca083f2e231f09fc8101862fcf6">view</a>]</li> -<li>Fixed issue accessing uninitialized data when combining RTF output. [<a href="http://github.com/doxygen/doxygen/commit/e5076edf2c103d262a9e32d57fb40cfe210c9ddf">view</a>]</li> -<li>Fixed issue parsing @end directly followed by the end of the file [<a href="http://github.com/doxygen/doxygen/commit/fa239ea9a3bba27e4fff84629883ee400f674c1e">view</a>]</li> -<li>Fixed problem finding \enduml when using /// style comments. [<a href="http://github.com/doxygen/doxygen/commit/4df52916170bb81179697d0fa78c7d81fd95415f">view</a>]</li> -<li>Fixed refcounting bug in new string implementation [<a href="http://github.com/doxygen/doxygen/commit/a9dcbfe28625673f4d13bc5b3cde694c24062e19">view</a>]</li> -<li>Fixed several Coverity warnings [<a href="http://github.com/doxygen/doxygen/commit/9b7e4ffb6c5f7534e4ba11d5798b4eb74d4a2a70">view</a>]</li> -<li>Fixed to small memory leaks [<a href="http://github.com/doxygen/doxygen/commit/b55a5c91d49359f9bbf7c78d9f284be2092bcfaa">view</a>]</li> -<li>Fixed typos and formatting in Doxyfile (thanks to Armin Mueller) [<a href="http://github.com/doxygen/doxygen/commit/fdd1c3f1527b15f6b0a25c2d99748f6a8adc5fcf">view</a>]</li> -<li>Fixed typos in C/C++ comments. There are no functional changes. [<a href="http://github.com/doxygen/doxygen/commit/458fb1738f4e59586460daa2a1e3ad2e730306c4">view</a>]</li> -<li>Fixed typos in comments. [<a href="http://github.com/doxygen/doxygen/commit/8ff67ad01abfe97b43de0ef1799c8b798d725ab9">view</a>]</li> -<li>Fixed typos in comments. No functional changes. [<a href="http://github.com/doxygen/doxygen/commit/6920d3ec6db21cec32086249a48875cbac957470">view</a>]</li> -<li>Fortran code color END (regression pull request 259) [<a href="http://github.com/doxygen/doxygen/commit/0ccda478e35eb420d644b6c39923f9c020e69c13">view</a>]</li> -<li>Fortran color CALL as keyword [<a href="http://github.com/doxygen/doxygen/commit/d3a5f96d07db323ff97fb07766a809769506ef3a">view</a>]</li> -<li>Fortran color code of END [<a href="http://github.com/doxygen/doxygen/commit/1cfa914cbb4e41f15af1f08517af887d6b241f28">view</a>]</li> -<li>Fortran continuation character seen as begin of function call [<a href="http://github.com/doxygen/doxygen/commit/b2e9aa362540cae4487e48598fb7e80b8651752f">view</a>]</li> -<li>Generate error message in case bibtex generation fails [<a href="http://github.com/doxygen/doxygen/commit/f121923bde72ef68616224a3fa1c1fe27eeb385e">view</a>]</li> -<li>Improved main page rendering via template engine [<a href="http://github.com/doxygen/doxygen/commit/f8a86910e4cd1d98993bd6991eb1b1aff7a86b05">view</a>]</li> -<li>Initialized potentially uninitialized variable in markdown part [<a href="http://github.com/doxygen/doxygen/commit/c98afa68350ed5cbce5a24bee3b47069789cc411">view</a>]</li> -<li>Introduce new optimized string implementation (attempt 2) [<a href="http://github.com/doxygen/doxygen/commit/43edc14cd357dcb070402bccc5030507570c22a4">view</a>]</li> -<li>Introduced template directory for template and resource files and resource compiler & manager [<a href="http://github.com/doxygen/doxygen/commit/0fea3d4ca57187f271d7580ff16f32b7ab4657df">view</a>]</li> -<li>LaTeX problem with 2 consecutive single quotes [<a href="http://github.com/doxygen/doxygen/commit/0cb39b4cf9f1e89720cb19f58158b90ecf0b75ef">view</a>]</li> -<li>Last comment of \code{.f90} missing [<a href="http://github.com/doxygen/doxygen/commit/b9145da402cd49c4c4e888a31dc17612387b1321">view</a>]</li> -<li>Limit images sizes and make more uniform (LaTeX) [<a href="http://github.com/doxygen/doxygen/commit/329a4ddc036ac9dfe72b11d62cb4043bc8488c20">view</a>]</li> -<li>Package mathptmx gives discrepancy between pdf and HTML formulas [<a href="http://github.com/doxygen/doxygen/commit/418d7f076ffbb1aeaae5f689a5dd46977c456a98">view</a>]</li> -<li>Portuguese and Brazilian Portuguese translators updated to 1.8.5. [<a href="http://github.com/doxygen/doxygen/commit/7da215a553e19783de60341bd863264ea9393513">view</a>]</li> -<li>Prevent overly long terms from stopping the search indexer [<a href="http://github.com/doxygen/doxygen/commit/5d266c5d7f7b05dcfa8d3485bc43e268dd8fe90a">view</a>]</li> -<li>Problem in case of line termination (., a dot) direct after the \cite command [<a href="http://github.com/doxygen/doxygen/commit/f0338dbf3a8770a6120eab83b338e6e3c3427a0e">view</a>]</li> -<li>Regression class<T extends V> resulted in class<V> as the page title [<a href="http://github.com/doxygen/doxygen/commit/dec53d22986c8d2c44a30806a2c8ed03bbe24768">view</a>]</li> -<li>Remove bogus argument to avoid compiler warning [<a href="http://github.com/doxygen/doxygen/commit/5bebcfb4a077287c561d2be7b3510d13d4e44a55">view</a>]</li> -<li>Remove dependency of PlantUML on HAVE_DOT [<a href="http://github.com/doxygen/doxygen/commit/352bac2c21b69d4e33ec0056fe4d2b96fbe1b0b5">view</a>]</li> -<li>Remove extraneous 'README' to allow successful RPM creation [<a href="http://github.com/doxygen/doxygen/commit/fefce473f5cde9fe4db3a86544db2ba41eec8d74">view</a>]</li> -<li>Remove filtering rule when generating FORTRAN module links [<a href="http://github.com/doxygen/doxygen/commit/238b73322f87614f5753dc0fa6df6c450f81be5e">view</a>]</li> -<li>Remove redundant code [<a href="http://github.com/doxygen/doxygen/commit/d1ed20c4c9a04f7995b82f8628908e3c34fd054a">view</a>]</li> -<li>Removed bash specific construct from ./configure script to make it work on Solaris [<a href="http://github.com/doxygen/doxygen/commit/3ebc431569aa6566389f3f3fc00aae7b8a90e58b">view</a>]</li> -<li>Removed some comment statements. [<a href="http://github.com/doxygen/doxygen/commit/222753a906d42dab63708e074dd289e66dccf091">view</a>]</li> -<li>Revert "Bug <a href="https://github.com/doxygen/doxygen/issues/4011">4011</a> - Fortran: external subroutine as dummy argument not recognized" [<a href="http://github.com/doxygen/doxygen/commit/8c8120bc3efa6ffa74f5e8cfce9cd6e4cae3de3a">view</a>]</li> -<li>Reverted back to old string implementation. New one needs more work. [<a href="http://github.com/doxygen/doxygen/commit/7d933a9f99dacb83937534719103218470e2a5ab">view</a>]</li> -<li>Show tag file name instead of <unknown> for warnings pointing to symbols extracted from tag files. [<a href="http://github.com/doxygen/doxygen/commit/b4b4c9decfacdf77d58490fa2dd81e1e10fe2dd0">view</a>]</li> -<li>Show the parent-child type specialization relation in Java/C# generics inheritance diagrams [<a href="http://github.com/doxygen/doxygen/commit/7ee743004ac80914bdb66e3c7a8e5c39c0d5bf4a">view</a>]</li> -<li>Support charset option for PlantUML [<a href="http://github.com/doxygen/doxygen/commit/ed0da5fe85e17eb0f7071fff12e851e92c2d79e6">view</a>]</li> -<li>Support for INLINE_SOURCES in Fortran [<a href="http://github.com/doxygen/doxygen/commit/940a802a997609105e5be25f6ff576628a51fbda">view</a>]</li> -<li>Support plantuml !include statement [<a href="http://github.com/doxygen/doxygen/commit/bbb6bb217a2feb7b9b961037072f06ff1024a0ef">view</a>]</li> -<li>Support visible=no for main page tab. [<a href="http://github.com/doxygen/doxygen/commit/52df7ae7fb9ed9765b0faf922c69a1c57a5cfd69">view</a>]</li> -<li>Supporting linking for methods bound to FORTRAN classes in source definitions [<a href="http://github.com/doxygen/doxygen/commit/f704342b42b19a857ec42438542221836576287a">view</a>]</li> -<li>This is the patch attached to bz 651848 by Robin Gareus. [<a href="http://github.com/doxygen/doxygen/commit/f854e1d9f1a60a7e254dcc20a4e6db0aa9172b2c">view</a>]</li> -<li>Update README.md [<a href="http://github.com/doxygen/doxygen/commit/b3c44e52cf7226b16ebd576ad381c3ee343dfd7e">view</a>]</li> -<li>Updated configuration script and libdoxygen.pro.in to use llvm-config [<a href="http://github.com/doxygen/doxygen/commit/61e07f8ea2d0d2a2f001b1f657d3d5bbe44e7690">view</a>]</li> -<li>Use result of vsnprintf [<a href="http://github.com/doxygen/doxygen/commit/84a6f4155659f97d42290494bd21d51f55eda258">view</a>]</li> -<li>Use substitute() instead of QString conversion [<a href="http://github.com/doxygen/doxygen/commit/7a0f5e6d565db6192f8c22045d7988a0b4e4d8c3">view</a>]</li> -<li>Various VHDL fixes [<a href="http://github.com/doxygen/doxygen/commit/475b0c51847271b04cb0e58254bd7e420445250b">view</a>]</li> -<li>various fixes and restructuring [<a href="http://github.com/doxygen/doxygen/commit/223e7de6478019c8eebcfd87085fe22d3bfeec0e">view</a>]</li> -<li>Various latex problems [<a href="http://github.com/doxygen/doxygen/commit/fb4dad1e1d9774e92d1509d1c2d3f8cb341826a1">view</a>]</li> + </ol> </li> +<li>Add missing escape in doxysearch.cpp when result contained a double quote [<a href="https://github.com/doxygen/doxygen/commit/08c9689157d7edc5d8e3369ef96f2ccd4b01c10c">view</a>]</li> +<li>Add source code possibility for RTF output [<a href="https://github.com/doxygen/doxygen/commit/05eb230757f6510d461bd14df3b190da46edd9dc">view</a>]</li> +<li>Added Coverity Scan Build Status to Readme [<a href="https://github.com/doxygen/doxygen/commit/394acb6a10dbef10cad3a0a3ff50a05d0efdea9e">view</a>]</li> +<li>Added clearer range checks for string class to help compiler [<a href="https://github.com/doxygen/doxygen/commit/869ff34828e20e3ec318384d7b0dbf91b6b2d24d">view</a>]</li> +<li>Added compilation support for MacOSX 10.10 (yosemite) [<a href="https://github.com/doxygen/doxygen/commit/151876a8321204bd2ec08ec6c4de38ba9fb2d034">view</a>]</li> +<li>Added faster reference counted string implementation with short string optimization [<a href="https://github.com/doxygen/doxygen/commit/9323ae470ad514586706dc8647501361fe208f36">view</a>]</li> +<li>Added graphical hierarchy support to template engine [<a href="https://github.com/doxygen/doxygen/commit/fe818bf8e3a154788a4a180068cfdfbbadd66ff6">view</a>]</li> +<li>Added guard to prevent (theoretical) out of bound access [<a href="https://github.com/doxygen/doxygen/commit/060a5cc121be5fd177b5d5c834f2b810dc58b9ec">view</a>]</li> +<li>Added language attribute to XML output for classes, namespaces, and files [<a href="https://github.com/doxygen/doxygen/commit/e986e0039de21791bd1fbb1f59b13f58c4a46324">view</a>]</li> +<li>Avoid a (theoretical) memory leak [<a href="https://github.com/doxygen/doxygen/commit/2937e44299a615628c27b0a0a7a95ffdf18249ef">view</a>]</li> +<li>Better handling of inline Fortran parameter documentation [<a href="https://github.com/doxygen/doxygen/commit/d5546cff5c82157f2dfddd0e1c4fdeeee8e501dd">view</a>]</li> +<li>Fixed bug for page numbers in the latex indices [<a href="https://github.com/doxygen/doxygen/commit/37ea04c317f9e1e8a09e5944b8c6c2c2ef35b1f6">view</a>]</li> +<li>Compilation fixes for Windows for new string implementation. [<a href="https://github.com/doxygen/doxygen/commit/a31c9fffec6b5145ac8509d77da826d2e196ed1e">view</a>]</li> +<li>Convert FORTRAN modules to namespaces [<a href="https://github.com/doxygen/doxygen/commit/be933bfacadaca98aaf4713746201b1fc21177de">view</a>]</li> +<li>Create an easy possibility to take a snippet from the current file. [<a href="https://github.com/doxygen/doxygen/commit/f8ceac63bdb52cf395207258c98ff0bcba35870a">view</a>]</li> +<li>Debian Bug 762272: segfault with cyclic subgroups [<a href="https://github.com/doxygen/doxygen/commit/c83db38ea83499be19d9ff242bfa22ae534ee80c">view</a>]</li> +<li>Disabled enter/exit printing for doctokenizer (produced too much noise) [<a href="https://github.com/doxygen/doxygen/commit/0b615342f0a24fbf02cc9fa94550cf34d230425b">view</a>]</li> +<li>Empty entry in \tableofcontents in case e.g. section without description. [<a href="https://github.com/doxygen/doxygen/commit/d2acdcf3b1bbd4d3079cf6c4ff5de6ba6716fd06">view</a>]</li> +<li>Extra empty line in source fragments [<a href="https://github.com/doxygen/doxygen/commit/79b40a437092bccb6589cdb29c0059a4797b771d">view</a>]</li> +<li>Fix bug with C++11 static_assert [<a href="https://github.com/doxygen/doxygen/commit/7c257bb57562b015b094f109851d914ef232ae2a">view</a>]</li> +<li>Fix bug: language switch command "\~" failed to detect language id which contains '-' [<a href="https://github.com/doxygen/doxygen/commit/a4cf65dea1371721f07c63c2bb5f9e5085b2618a">view</a>]</li> +<li>Fix for <a href="https://github.com/doxygen/doxygen/issues/4285">4285</a> [<a href="https://github.com/doxygen/doxygen/commit/e1aa7af27eded7afdf81b688015421d3b3467b2b">view</a>]</li> +<li>Fix for the second issue in bz 651848 [<a href="https://github.com/doxygen/doxygen/commit/bcd3fbf59f9199470d51938486fecda05006da61">view</a>]</li> +<li>Fix potential crash when reading tag file which contained nested java classes using generics [<a href="https://github.com/doxygen/doxygen/commit/6d4044ad43ae1424a256eb1c26992301e7c64f4a">view</a>]</li> +<li>Fix rules for closing FORTRAN module and typedef scopes [<a href="https://github.com/doxygen/doxygen/commit/7ace28eb7bb5f42c3571e5b7be1ab954f4509e17">view</a>]</li> +<li>Fix to ignore the contents of \verbatim and friends while looking for sections [<a href="https://github.com/doxygen/doxygen/commit/cba0d89fafee3daef31469cbe1cdd24e68c7b56a">view</a>]</li> +<li>Fix to show relations between C#/Java generic classes [<a href="https://github.com/doxygen/doxygen/commit/9879fddbf8f91c57b258b8e788b5ed8a150a8331">view</a>]</li> +<li>Fixed a number of issues (resource leaks, uninitialized members, etc) found by coverity [<a href="https://github.com/doxygen/doxygen/commit/41887832b90698df95e8d222cdc0a541ae2f2284">view</a>]</li> +<li>Fixed bug in new QCString::sprintf for long string. [<a href="https://github.com/doxygen/doxygen/commit/0ec56b7aa2dd39e3cab71c2229d486161566e7f6">view</a>]</li> +<li>Fixed extension matching issue if path contained a dot. [<a href="https://github.com/doxygen/doxygen/commit/79ed06502c3abca083f2e231f09fc8101862fcf6">view</a>]</li> +<li>Fixed issue accessing uninitialized data when combining RTF output. [<a href="https://github.com/doxygen/doxygen/commit/e5076edf2c103d262a9e32d57fb40cfe210c9ddf">view</a>]</li> +<li>Fixed issue parsing @end directly followed by the end of the file [<a href="https://github.com/doxygen/doxygen/commit/fa239ea9a3bba27e4fff84629883ee400f674c1e">view</a>]</li> +<li>Fixed problem finding \enduml when using /// style comments. [<a href="https://github.com/doxygen/doxygen/commit/4df52916170bb81179697d0fa78c7d81fd95415f">view</a>]</li> +<li>Fixed refcounting bug in new string implementation [<a href="https://github.com/doxygen/doxygen/commit/a9dcbfe28625673f4d13bc5b3cde694c24062e19">view</a>]</li> +<li>Fixed several Coverity warnings [<a href="https://github.com/doxygen/doxygen/commit/9b7e4ffb6c5f7534e4ba11d5798b4eb74d4a2a70">view</a>]</li> +<li>Fixed to small memory leaks [<a href="https://github.com/doxygen/doxygen/commit/b55a5c91d49359f9bbf7c78d9f284be2092bcfaa">view</a>]</li> +<li>Fixed typos and formatting in Doxyfile (thanks to Armin Mueller) [<a href="https://github.com/doxygen/doxygen/commit/fdd1c3f1527b15f6b0a25c2d99748f6a8adc5fcf">view</a>]</li> +<li>Fixed typos in C/C++ comments. There are no functional changes. [<a href="https://github.com/doxygen/doxygen/commit/458fb1738f4e59586460daa2a1e3ad2e730306c4">view</a>]</li> +<li>Fixed typos in comments. [<a href="https://github.com/doxygen/doxygen/commit/8ff67ad01abfe97b43de0ef1799c8b798d725ab9">view</a>]</li> +<li>Fixed typos in comments. No functional changes. [<a href="https://github.com/doxygen/doxygen/commit/6920d3ec6db21cec32086249a48875cbac957470">view</a>]</li> +<li>Fortran code color END (regression pull request 259) [<a href="https://github.com/doxygen/doxygen/commit/0ccda478e35eb420d644b6c39923f9c020e69c13">view</a>]</li> +<li>Fortran color CALL as keyword [<a href="https://github.com/doxygen/doxygen/commit/d3a5f96d07db323ff97fb07766a809769506ef3a">view</a>]</li> +<li>Fortran color code of END [<a href="https://github.com/doxygen/doxygen/commit/1cfa914cbb4e41f15af1f08517af887d6b241f28">view</a>]</li> +<li>Fortran continuation character seen as begin of function call [<a href="https://github.com/doxygen/doxygen/commit/b2e9aa362540cae4487e48598fb7e80b8651752f">view</a>]</li> +<li>Generate error message in case bibtex generation fails [<a href="https://github.com/doxygen/doxygen/commit/f121923bde72ef68616224a3fa1c1fe27eeb385e">view</a>]</li> +<li>Improved main page rendering via template engine [<a href="https://github.com/doxygen/doxygen/commit/f8a86910e4cd1d98993bd6991eb1b1aff7a86b05">view</a>]</li> +<li>Initialized potentially uninitialized variable in markdown part [<a href="https://github.com/doxygen/doxygen/commit/c98afa68350ed5cbce5a24bee3b47069789cc411">view</a>]</li> +<li>Introduce new optimized string implementation (attempt 2) [<a href="https://github.com/doxygen/doxygen/commit/43edc14cd357dcb070402bccc5030507570c22a4">view</a>]</li> +<li>Introduced template directory for template and resource files and resource compiler & manager [<a href="https://github.com/doxygen/doxygen/commit/0fea3d4ca57187f271d7580ff16f32b7ab4657df">view</a>]</li> +<li>LaTeX problem with 2 consecutive single quotes [<a href="https://github.com/doxygen/doxygen/commit/0cb39b4cf9f1e89720cb19f58158b90ecf0b75ef">view</a>]</li> +<li>Last comment of \code{.f90} missing [<a href="https://github.com/doxygen/doxygen/commit/b9145da402cd49c4c4e888a31dc17612387b1321">view</a>]</li> +<li>Limit images sizes and make more uniform (LaTeX) [<a href="https://github.com/doxygen/doxygen/commit/329a4ddc036ac9dfe72b11d62cb4043bc8488c20">view</a>]</li> +<li>Package mathptmx gives discrepancy between pdf and HTML formulas [<a href="https://github.com/doxygen/doxygen/commit/418d7f076ffbb1aeaae5f689a5dd46977c456a98">view</a>]</li> +<li>Portuguese and Brazilian Portuguese translators updated to 1.8.5. [<a href="https://github.com/doxygen/doxygen/commit/7da215a553e19783de60341bd863264ea9393513">view</a>]</li> +<li>Prevent overly long terms from stopping the search indexer [<a href="https://github.com/doxygen/doxygen/commit/5d266c5d7f7b05dcfa8d3485bc43e268dd8fe90a">view</a>]</li> +<li>Problem in case of line termination (., a dot) direct after the \cite command [<a href="https://github.com/doxygen/doxygen/commit/f0338dbf3a8770a6120eab83b338e6e3c3427a0e">view</a>]</li> +<li>Regression class<T extends V> resulted in class<V> as the page title [<a href="https://github.com/doxygen/doxygen/commit/dec53d22986c8d2c44a30806a2c8ed03bbe24768">view</a>]</li> +<li>Remove bogus argument to avoid compiler warning [<a href="https://github.com/doxygen/doxygen/commit/5bebcfb4a077287c561d2be7b3510d13d4e44a55">view</a>]</li> +<li>Remove dependency of PlantUML on HAVE_DOT [<a href="https://github.com/doxygen/doxygen/commit/352bac2c21b69d4e33ec0056fe4d2b96fbe1b0b5">view</a>]</li> +<li>Remove extraneous 'README' to allow successful RPM creation [<a href="https://github.com/doxygen/doxygen/commit/fefce473f5cde9fe4db3a86544db2ba41eec8d74">view</a>]</li> +<li>Remove filtering rule when generating FORTRAN module links [<a href="https://github.com/doxygen/doxygen/commit/238b73322f87614f5753dc0fa6df6c450f81be5e">view</a>]</li> +<li>Remove redundant code [<a href="https://github.com/doxygen/doxygen/commit/d1ed20c4c9a04f7995b82f8628908e3c34fd054a">view</a>]</li> +<li>Removed bash specific construct from ./configure script to make it work on Solaris [<a href="https://github.com/doxygen/doxygen/commit/3ebc431569aa6566389f3f3fc00aae7b8a90e58b">view</a>]</li> +<li>Removed some comment statements. [<a href="https://github.com/doxygen/doxygen/commit/222753a906d42dab63708e074dd289e66dccf091">view</a>]</li> +<li>Revert "Bug <a href="https://github.com/doxygen/doxygen/issues/4011">4011</a> - Fortran: external subroutine as dummy argument not recognized" [<a href="https://github.com/doxygen/doxygen/commit/8c8120bc3efa6ffa74f5e8cfce9cd6e4cae3de3a">view</a>]</li> +<li>Reverted back to old string implementation. New one needs more work. [<a href="https://github.com/doxygen/doxygen/commit/7d933a9f99dacb83937534719103218470e2a5ab">view</a>]</li> +<li>Show tag file name instead of <unknown> for warnings pointing to symbols extracted from tag files. [<a href="https://github.com/doxygen/doxygen/commit/b4b4c9decfacdf77d58490fa2dd81e1e10fe2dd0">view</a>]</li> +<li>Show the parent-child type specialization relation in Java/C# generics inheritance diagrams [<a href="https://github.com/doxygen/doxygen/commit/7ee743004ac80914bdb66e3c7a8e5c39c0d5bf4a">view</a>]</li> +<li>Support charset option for PlantUML [<a href="https://github.com/doxygen/doxygen/commit/ed0da5fe85e17eb0f7071fff12e851e92c2d79e6">view</a>]</li> +<li>Support for INLINE_SOURCES in Fortran [<a href="https://github.com/doxygen/doxygen/commit/940a802a997609105e5be25f6ff576628a51fbda">view</a>]</li> +<li>Support plantuml !include statement [<a href="https://github.com/doxygen/doxygen/commit/bbb6bb217a2feb7b9b961037072f06ff1024a0ef">view</a>]</li> +<li>Support visible=no for main page tab. [<a href="https://github.com/doxygen/doxygen/commit/52df7ae7fb9ed9765b0faf922c69a1c57a5cfd69">view</a>]</li> +<li>Supporting linking for methods bound to FORTRAN classes in source definitions [<a href="https://github.com/doxygen/doxygen/commit/f704342b42b19a857ec42438542221836576287a">view</a>]</li> +<li>This is the patch attached to bz 651848 by Robin Gareus. [<a href="https://github.com/doxygen/doxygen/commit/f854e1d9f1a60a7e254dcc20a4e6db0aa9172b2c">view</a>]</li> +<li>Update README.md [<a href="https://github.com/doxygen/doxygen/commit/b3c44e52cf7226b16ebd576ad381c3ee343dfd7e">view</a>]</li> +<li>Updated configuration script and libdoxygen.pro.in to use llvm-config [<a href="https://github.com/doxygen/doxygen/commit/61e07f8ea2d0d2a2f001b1f657d3d5bbe44e7690">view</a>]</li> +<li>Use result of vsnprintf [<a href="https://github.com/doxygen/doxygen/commit/84a6f4155659f97d42290494bd21d51f55eda258">view</a>]</li> +<li>Use substitute() instead of QString conversion [<a href="https://github.com/doxygen/doxygen/commit/7a0f5e6d565db6192f8c22045d7988a0b4e4d8c3">view</a>]</li> +<li>Various VHDL fixes [<a href="https://github.com/doxygen/doxygen/commit/475b0c51847271b04cb0e58254bd7e420445250b">view</a>]</li> +<li>various fixes and restructuring [<a href="https://github.com/doxygen/doxygen/commit/223e7de6478019c8eebcfd87085fe22d3bfeec0e">view</a>]</li> +<li>Various latex problems [<a href="https://github.com/doxygen/doxygen/commit/fb4dad1e1d9774e92d1509d1c2d3f8cb341826a1">view</a>]</li> </ul> <p> \endhtmlonly @@ -876,132 +1276,132 @@ </p> <h3>New features</h3> <ul> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5505">5505</a> - Support for PlantUML [<a href="http://github.com/doxygen/doxygen/commit/7506404e646f1fcc5a26ca6fca91a7f65154f05a">view</a>]</li> -<li>Add BREAD_CRUMB_TRAIL. [<a href="http://github.com/doxygen/doxygen/commit/4074da5b83d37dd1c72c5df015fb2b41e7725a7e">view</a>]</li> -</ul> -<h3>Bug fixes</h3> -<ul> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1527">1527</a> $title doesn't work in LateX header [<a href="http://github.com/doxygen/doxygen/commit/790000b90944646702ddd3a183ec166669c18f51">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3405">3405</a> Class diagrams and class hierarchy don't work for java generic classes [<a href="http://github.com/doxygen/doxygen/commit/c3ddf3331239fb3f41e502a8337eee786ceaad06">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3460">3460</a> Flex .rule file for Visual Studio build can't cope with spaces in filenames [<a href="http://github.com/doxygen/doxygen/commit/eb3ab2452d8a1ef7a85af7a03e1622c12b40400b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3834">3834</a> Fortran: quotation after define causes error [<a href="http://github.com/doxygen/doxygen/commit/f083109de116ee2c6e2a31a15ebc17d2dff008e0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3879">3879</a> FORTRAN: recognition free versus fixed formatted code [<a href="http://github.com/doxygen/doxygen/commit/476d79d31a0534c3d7d07001c47c1212a73d10a5">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5182">5182</a> Bibliography duplicate filenames fails [<a href="http://github.com/doxygen/doxygen/commit/7779bf6d6206bc0f78c22100034c44bfdb7f1bc1">view</a>] and - [<a href="http://github.com/doxygen/doxygen/commit/da029a3c893df22536cb3635e597fd3f5b2a4862">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5215">5215</a> \cite rejects valid BibTeX keys [<a href="http://github.com/doxygen/doxygen/commit/06170de4a166bfad9342f3b957dda82b7fb266b2">view</a>] and - [<a href="http://github.com/doxygen/doxygen/commit/69df2f9d1deb87b79c79f9ea1bf20380ff9b71ad">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5259">5259</a> TCL: Documentation of oo::define is not working [<a href="http://github.com/doxygen/doxygen/commit/5ec66c2286d7cedbdbb0930fe0e293b050c91d24">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5445">5445</a> Nested C structures/unions does not work with groups [<a href="http://github.com/doxygen/doxygen/commit/f4388dc4a62e183b7ca4457eba7cb978a35804c2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5459">5459</a> configuration stops with settings.h missing [<a href="http://github.com/doxygen/doxygen/commit/fd4b42ec54cb8d6faf2b0f16e580f376e8cf6982">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5460">5460</a> XML Output: Doxygen doesn't escape & characters (included in a hyperlink) in <detaileddescription> [<a href="http://github.com/doxygen/doxygen/commit/cfde6cdd600b21bba6a2eb0ca0e7e208e014ccaf">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5461">5461</a> function object in member initializer causes documentation loss [<a href="http://github.com/doxygen/doxygen/commit/f4f3e381dba1bc5d46feea3c39e8f076e27463d1">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5472">5472</a> [PATCH] Propagate configure's perl to makefiles [<a href="http://github.com/doxygen/doxygen/commit/f1a692b019a30f7aa07e0fb3e11402d262af8026">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5483">5483</a> man page extension is incorrect [<a href="http://github.com/doxygen/doxygen/commit/f25d896d4da9b44c23f89bfdd0379fa97ab2c351">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5486">5486</a> No documentation generated for method-less C++ struct [<a href="http://github.com/doxygen/doxygen/commit/21178ab40160abf011fa084a10892b5b7821e44c">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5493">5493</a> [PATCH] Fix potential copy and paste error in inputstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/6f5748e822b009cbe82cc1df8eea43e4769bc44b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5494">5494</a> [PATCH] Fix missing '&' in Boolean operation in qstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/27f1e1e9316addcfd0bbc3321b5614ed14f7a1a5">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5497">5497</a> Dead links in html documentation when using tabs for indentation in c++ [<a href="http://github.com/doxygen/doxygen/commit/2cc3b18da39bde323c5739483e507a133e93ac22">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5500">5500</a> Callgraphs for C# only generated for methods inside the same class [<a href="http://github.com/doxygen/doxygen/commit/7edbf2b2e705eccc0d99cce86149228473bc7f3e">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5506">5506</a> Variadic macros failing to expand if trailing ... is empty [<a href="http://github.com/doxygen/doxygen/commit/070c35549da108695074239be3ab4268f3722261">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5512">5512</a> Two entries for a single member in doxygen XML [<a href="http://github.com/doxygen/doxygen/commit/ed8ce3cf405204916f9832e26797cb15d1490fd1">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5514">5514</a> nested html tables cause pdflatex to hang (1.8.4 and 1.8.6) [<a href="http://github.com/doxygen/doxygen/commit/3cb963061343aa5b3b8a044cdfa62848723a02ee">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5521">5521</a> volatile declaration on member functions is not handled as xml attribute [<a href="http://github.com/doxygen/doxygen/commit/97d12d058a7831adcc8c6f2cfe8c20ddd2ae5bc2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5524">5524</a> Incorrect LaTeX generation for private union member in C++ [<a href="http://github.com/doxygen/doxygen/commit/a36ddbe0ee97c5ee248b7b391b4c30fd4b3c884b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5526">5526</a> XML Output invalid: XML_PROGRAMLISTING=YES copies Unicode form feed character (U+000C) to XML files [<a href="http://github.com/doxygen/doxygen/commit/b272b4b5077873457a0f6b517ac799f4a5f8c951">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5528">5528</a> segfault in QGListIterator while parsing fortran code [<a href="http://github.com/doxygen/doxygen/commit/aac81f8bfe8298aa0839bb2d7c70ea75149cdffb">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5531">5531</a> Explicit links using operator()() not generated. [<a href="http://github.com/doxygen/doxygen/commit/e913d55b2e5a8e37ebd1ffd8fec730886a45fbda">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5534">5534</a> no uniquely matching class member found for inline function definition where parameter argument names don't match [<a href="http://github.com/doxygen/doxygen/commit/6f0269ef3074bbc4bc16ad63a0e0a8f9b5f0ce31">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5535">5535</a> Add support for non-parsed language [<a href="http://github.com/doxygen/doxygen/commit/0dd59398b3f62288897c8c3405977a27a94fbfee">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5537">5537</a> Q_PROPERTY switches the member access from private to public [<a href="http://github.com/doxygen/doxygen/commit/392b48a25e4315528fbb11a5a1bfc9f2bca791c0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5540">5540</a> Strong enum members listed in containing namespace [<a href="http://github.com/doxygen/doxygen/commit/4766fdba2ab196844a0bd5ec5e0b64d94df4a74f">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5543">5543</a> Sigsegv while generating XML output [<a href="http://github.com/doxygen/doxygen/commit/14f88af12bae98859eafe605ddb5f54029e44076">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5544">5544</a> GENERATE_TAGFILE no longer includes any @*section links [<a href="http://github.com/doxygen/doxygen/commit/7d9d4320f5d183c4e1ebc87a316589c36f0afeed">view</a>] and - [<a href="http://github.com/doxygen/doxygen/commit/8b279c9bc28c70405e61219a6c2b3c6dbc7426e6">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5548">5548</a> Request: disable building documentation if Python 2.6 or newer not available [<a href="http://github.com/doxygen/doxygen/commit/264ecc9eee1f2b74f0110120574056f0de42a3f9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5550">5550</a> No output for markdown pages with duplicate label title (different anchor) [<a href="http://github.com/doxygen/doxygen/commit/ebb2fe6d73b4aefc6dadab8eec45adc4ee0c9fd5">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5551">5551</a> QGDict::hashAsciiKey: Invalid null key [<a href="http://github.com/doxygen/doxygen/commit/def392bf8d0326733c20504dc36168093e087c95">view</a>]</li> -<li>Add FORTRAN 2003 keywords and commands [<a href="http://github.com/doxygen/doxygen/commit/4cbfaa8372beff4bd7070dd840924af8d96b0772">view</a>]</li> -<li>Add type option to FORTRAN select statements [<a href="http://github.com/doxygen/doxygen/commit/db289e2272bfc3b00452cbf7c2a30114fb8b7c58">view</a>]</li> -<li>Added build support for Python3+ and Python2.6+ [<a href="http://github.com/doxygen/doxygen/commit/98a54c576eec4feda606156ae591854311d9cd0e">view</a>]</li> -<li>Added class/procedure vardefs to FORTRAN code highlighting [<a href="http://github.com/doxygen/doxygen/commit/dbd1985de07ccd19caf57ffa36c88811048689a4">view</a>]</li> -<li>Added documentation for some missing HTML commands [<a href="http://github.com/doxygen/doxygen/commit/04c89e604877fa9a4aea160d971c782006872710">view</a>]</li> -<li>Added flatten, listsort and paginate filters [<a href="http://github.com/doxygen/doxygen/commit/edd056308d04d6f445a48e05105d4d9a0ece80a0">view</a>]</li> -<li>Added get filter, unified index properties [<a href="http://github.com/doxygen/doxygen/commit/7e3e890fedfb20e7018fadfa87ed97eef7f2b720">view</a>]</li> -<li>Added groupby filter and some more context info [<a href="http://github.com/doxygen/doxygen/commit/064992b0c901661b49de24ce1a1d9a06e9957a93">view</a>]</li> -<li>Added import keyword to FORTRAN code highlighting [<a href="http://github.com/doxygen/doxygen/commit/558697792cd062b93e8d7b7904fb9897e5f70750">view</a>]</li> -<li>Added lists for indices to template context [<a href="http://github.com/doxygen/doxygen/commit/2d35b9a7c0fe70fa894dc266dd0b5ddd54d4014e">view</a>]</li> -<li>Added mainpage to context and improved page tree [<a href="http://github.com/doxygen/doxygen/commit/2e837e0be05636923ef593c29299ff76c4590a09">view</a>]</li> -<li>Added member indexes to template context [<a href="http://github.com/doxygen/doxygen/commit/b850eb45e80b348cbe8629c354350b051f7ef2ec">view</a>]</li> -<li>Added missing links in changelog when multiple bug ids were on one line [<a href="http://github.com/doxygen/doxygen/commit/b752d01fe2de1668c0a247bc3955d7be6987d046">view</a>]</li> -<li>Added more missing links to the changelog [<a href="http://github.com/doxygen/doxygen/commit/0d50c30becc147918b091c02b41502829b8083a3">view</a>]</li> -<li>Added namespace info to the context [<a href="http://github.com/doxygen/doxygen/commit/a7c14ac74c43e6b372d866deeed77fe69e2a68e0">view</a>]</li> -<li>Addition of module data to context and alphaIndex filter [<a href="http://github.com/doxygen/doxygen/commit/e0c3517ff9369387e00dd596b094a4729cfe789c">view</a>]</li> -<li>Coded coloring of flow statements corrected (regression) [<a href="http://github.com/doxygen/doxygen/commit/ee7194bd73ee3a8142aee6ea59d2e5dc717b18de">view</a>]</li> -<li>Corrected copyright year [<a href="http://github.com/doxygen/doxygen/commit/7652fc8472ac83e26641fb737539e7c87725ed68">view</a>]</li> -<li>Correction of typing error [<a href="http://github.com/doxygen/doxygen/commit/81c99d10dbc41feab4a1aca220b27634ca0ff8cd">view</a>]</li> -<li>Disabled/fixed segments that produced doxygen warnings while running the test [<a href="http://github.com/doxygen/doxygen/commit/3a5e6ac7c6018a7a0da7acd830293da0fcb7a21c">view</a>]</li> -<li>Docbook output improvements [<a href="http://github.com/doxygen/doxygen/commit/12f5ee8a8c3a287f6bcfe81f79ff4332b3987c7e">view</a>]</li> -<li>Documentation generator: added support for C# property accessors visibility modifiers. [<a href="http://github.com/doxygen/doxygen/commit/54ac45bd9f535d13b2bf98e4d71b27b4590c3dc7">view</a>]</li> -<li>Doxywizard: make the Next button on the last page of the expert tab switch to the run tab [<a href="http://github.com/doxygen/doxygen/commit/2277e6e695d785d319cb52a8a8ead2982eac2afa">view</a>]</li> -<li>Doxywizard: make the Next button on the last page of the wizard switch to the run tab [<a href="http://github.com/doxygen/doxygen/commit/fbc60af2298c2668893e2f7045f66765f8e0c63f">view</a>]</li> -<li>Error linking 32-bit windows [<a href="http://github.com/doxygen/doxygen/commit/cce307d96a93515d46068cfdcf5e55c1944ae9e5">view</a>]</li> -<li>Fix FORTRAN code function scope test [<a href="http://github.com/doxygen/doxygen/commit/2030240bc18d32581479306e6fd86211e6f30c73">view</a>]</li> -<li>Fix after rebase from master [<a href="http://github.com/doxygen/doxygen/commit/57eee1777c18caa6d3215ec162da1fd9b2d14eb2">view</a>]</li> -<li>Fix description of USE_PDFLATEX [<a href="http://github.com/doxygen/doxygen/commit/c87cceafe203a11e4074b748469e993d13cd8fb3">view</a>]</li> -<li>Fix highlighting issues [<a href="http://github.com/doxygen/doxygen/commit/be0986e9ab7c1788e3650f1df7e7af70b68f28d8">view</a>]</li> -<li>Fix typo [<a href="http://github.com/doxygen/doxygen/commit/e32121ab1fb261464356ce2352c08930f942f805">view</a>]</li> -<li>Fix unnecessary rules for FORTRAN types [<a href="http://github.com/doxygen/doxygen/commit/1e6323e5bb04f49df9d00e82e5db3e8f301dbfc4">view</a>]</li> -<li>Fix warning about unused functions in qstring.cpp [<a href="http://github.com/doxygen/doxygen/commit/84064ac4db9e487ca4bff9b6c37eb72992050ee3">view</a>]</li> -<li>Fixed keyword type [<a href="http://github.com/doxygen/doxygen/commit/d8221cb7a73efc8f20068636c3d2fec84ce8cb8b">view</a>]</li> -<li>Fixed missing include for Linux [<a href="http://github.com/doxygen/doxygen/commit/88468313289c659088be9beece59a82206153ed8">view</a>]</li> -<li>Fixed test 021 [<a href="http://github.com/doxygen/doxygen/commit/c5c763056535216ccce4bed4892358bf5c8d1fd5">view</a>]</li> -<li>Fixed typo [<a href="http://github.com/doxygen/doxygen/commit/0bb9b762844a2f88043223a29182dd9e7e524cef">view</a>]</li> -<li>Fixed typo and used QString for directory [<a href="http://github.com/doxygen/doxygen/commit/5d00fa5862a1724bbe417e33d6c1a260607281ef">view</a>]</li> -<li>Fixed windows compile issue for is_neutral [<a href="http://github.com/doxygen/doxygen/commit/9278509cf82ed7b0ff37c39e4d6e97f5308f29de">view</a>]</li> -<li>Fixes for ./configure script on Solaris [<a href="http://github.com/doxygen/doxygen/commit/d234115b6f387ff723cb97a4d47b2bcca7f0bc6d">view</a>]</li> -<li>Fixes regression due to PR 169 [<a href="http://github.com/doxygen/doxygen/commit/56143a268898249a63bb0a443e09dc2c77ec9ce9">view</a>]</li> -<li>Language parser: added support for C# property accessors visibility modifiers. [<a href="http://github.com/doxygen/doxygen/commit/f5ff1b8e55b4dad074d2a73f1d003ff2991cf894">view</a>]</li> -<li>Made INSTALL file version and date independent [<a href="http://github.com/doxygen/doxygen/commit/1781094043eb5f8f7b0f0bbe5f720012346123a2">view</a>]</li> -<li>Made bread crumb trails enabled unconditionally [<a href="http://github.com/doxygen/doxygen/commit/c7c7d73c184ee2eebf65e83044cf1e325751cffa">view</a>]</li> -<li>Made setName() virtual so overloading works [<a href="http://github.com/doxygen/doxygen/commit/d1e39098f94487f544a068b7864aa8d1b1f345cd">view</a>]</li> -<li>Make index for faq [<a href="http://github.com/doxygen/doxygen/commit/38dfdcaba3e9130833cd7b695d5e20fec26f5c3f">view</a>]</li> -<li>Messages truncated in warnings file [<a href="http://github.com/doxygen/doxygen/commit/cc4f3b454cae7d3e9eaa44342bcbae1061f5e790">view</a>]</li> -<li>Minor fixes [<a href="http://github.com/doxygen/doxygen/commit/c31a81a85e0396fb276beefd06bb71c2819571ed">view</a>]</li> -<li>Minor fixes to the template context [<a href="http://github.com/doxygen/doxygen/commit/963e0adfd76e6a59ace5e7318f948632322b1e51">view</a>]</li> -<li>Missing word after \n command in doxygen rtf output, version 1.8.5 & up [<a href="http://github.com/doxygen/doxygen/commit/ea9f3b1d727b22973c0176b2564304fb160aa70b">view</a>]</li> -<li>More robust extraction of scope information from tag files [<a href="http://github.com/doxygen/doxygen/commit/6a60477b418e21dbadd3e62dc557a038e319581b">view</a>]</li> -<li>No warning in case cite definition is missing [<a href="http://github.com/doxygen/doxygen/commit/1f77638174f715f0f2bcf5b2e32ebb329d531f85">view</a>]</li> -<li>Preparations for release 1.8.8 [<a href="http://github.com/doxygen/doxygen/commit/f16be0113f8d47d4f04e69d0c45ccc4b24e3c426">view</a>]</li> -<li>Removed not implemented HTML commands from documentation [<a href="http://github.com/doxygen/doxygen/commit/8199b2d105313efd30367c7a03b57bf7a7d2180b">view</a>]</li> -<li>Removed unsupported HTML commands from the docs [<a href="http://github.com/doxygen/doxygen/commit/16ba4bd5744c2e5fbfabe95b27736b8ca8030390">view</a>]</li> -<li>Set deployment targets for MacOSX 10.5+ versions [<a href="http://github.com/doxygen/doxygen/commit/28f40b3aea1411488832205fae447f4652125cdc">view</a>]</li> -<li>Support multiple extra HTML stylesheets. [<a href="http://github.com/doxygen/doxygen/commit/595943c96860425f9086028b00e1e155e8ec434f">view</a>]</li> -<li>Tcl: add missing file that breaks test 057 [<a href="http://github.com/doxygen/doxygen/commit/73e7c340f555291d4264b2f83caacf59a5a3395f">view</a>]</li> -<li>Tcl: add test code for Bug <a href="https://github.com/doxygen/doxygen/issues/5463">5463</a> [<a href="http://github.com/doxygen/doxygen/commit/36ce0578065b95cf12b81e5a4edd95dea5707e22">view</a>]</li> -<li>Tcl: collect XRefs also if INLINE_SOURCES = no [<a href="http://github.com/doxygen/doxygen/commit/6245ef410358f332330195f9f2bfa458cfb6a2b8">view</a>]</li> -<li>Tcl: correct namespace resolution in case of INLINE_SOURCES = YES [<a href="http://github.com/doxygen/doxygen/commit/470143192d0c8cf90ad84a66226d48060cc713db">view</a>]</li> -<li>Tcl: recurse for [] [<a href="http://github.com/doxygen/doxygen/commit/9d315a987d7d0ea2f38809aa74e36c92281910df">view</a>]</li> -<li>Tcl: refactor similar code into tcl_codify_token function [<a href="http://github.com/doxygen/doxygen/commit/06bd53ac6acee5fb83d9f2b5ded1c55c8a069b29">view</a>]</li> -<li>Tcl: support eval/catch commands [<a href="http://github.com/doxygen/doxygen/commit/9d24b488add8b4c7c689f58a095184a6ed85e9f1">view</a>]</li> -<li>Tcl: support switch command [<a href="http://github.com/doxygen/doxygen/commit/2984dad86558b4a81e11ce07485057e3903a9304">view</a>]</li> -<li>Tcl: test 057 additionally tests mutual Xrefs for two files [<a href="http://github.com/doxygen/doxygen/commit/c6aaf0a4c35db27f968a7a6d0b9fa25b5b311bc3">view</a>]</li> -<li>Template context support for CREATE_SUBDIRS [<a href="http://github.com/doxygen/doxygen/commit/9282aab5ed2a0cca3858df6e62132f959e99edb5">view</a>]</li> -<li>Update dot.cpp [<a href="http://github.com/doxygen/doxygen/commit/a15c5c89f0b4f97d57474d9ea0e3166709d35534">view</a>]</li> -<li>Update latexgen.cpp [<a href="http://github.com/doxygen/doxygen/commit/1f877b09262f34e6bad6dbfaee4b04b4be03bd4c">view</a>]</li> -<li>Update test 058 because commit 9d315a9 fixes also Bug <a href="https://github.com/doxygen/doxygen/issues/5464">5464</a> [<a href="http://github.com/doxygen/doxygen/commit/3486bfc158008da1d69d420e57e7a10f1c0d69c3">view</a>]</li> -<li>Replaced the VHDL parser with the VHDL scanner from 1.7.5 to avoid potential licensing issues [<a href="http://github.com/doxygen/doxygen/commit/99433b3d2319916f11608c2c818fe35360256d9e">view</a>]</li> -<li>New VHDL parser implementation [<a href="http://github.com/doxygen/doxygen/commit/36122e49ed1d9e640b1ceca52536ec7c55e10474">view</a>]</li> -<li>Vhdl fixes [<a href="http://github.com/doxygen/doxygen/commit/3b8fea2f1f7f2e6a83a35626e6dec9d114a78c9e">view</a>]</li> -<li>\usepackage{fixltx2e} must come before use \usepackage{float} [<a href="http://github.com/doxygen/doxygen/commit/d8a36bbd404bc9c77689f42cc4bfde8ac393cd8c">view</a>]</li> -<li>cache anonymous into ClassDefImpl::isAnonymous [<a href="http://github.com/doxygen/doxygen/commit/34a5a051a8b91215ae4f93e5541d43c33aa887c1">view</a>]</li> -<li>changed append filter and added index and path attributes to node [<a href="http://github.com/doxygen/doxygen/commit/47bc520ac8c0dde310dcb1999c622c591b373ffc">view</a>]</li> -<li>doc/translator.py -- unification for Python 2.6+ and 3.3+ (not finished) [<a href="http://github.com/doxygen/doxygen/commit/8cac977ddfdc1c77546f5d766387f4a57710c8c0">view</a>]</li> -<li>doc/translator.py unified for Python 2.6+ and Python 3.0+ [<a href="http://github.com/doxygen/doxygen/commit/6212c2d2af12dd9d47459bdecdf79ad106060229">view</a>]</li> -<li>make.bat: change current directory [<a href="http://github.com/doxygen/doxygen/commit/fc386eb107958b4f3214aa2c0c6caf2a91c83177">view</a>] and - [<a href="http://github.com/doxygen/doxygen/commit/feb24c82002ced816bc72eb8f2a6a35c71e25ed7">view</a>]</li> -<li>removeRedundantWhiteSpace micro-optimization [<a href="http://github.com/doxygen/doxygen/commit/d4601735b582b903f1ccb144f59b2030a7797b05">view</a>]</li> -<li>resolves the error of unbalanced tags opened/closed in docbook output: parser error : Opening and ending tag mismatch: para line 358 and tbody [<a href="http://github.com/doxygen/doxygen/commit/d7b0858e079419bb7ea862e16946218a9352d5b5">view</a>]</li> -<li>winbuild/pack_the_distribution_for_windows.py minor updates [<a href="http://github.com/doxygen/doxygen/commit/6d969cab51f4c32784966a28b8b9d5fe2d5b2089">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5505">5505</a> - Support for PlantUML [<a href="https://github.com/doxygen/doxygen/commit/7506404e646f1fcc5a26ca6fca91a7f65154f05a">view</a>]</li> +<li>Add BREAD_CRUMB_TRAIL. [<a href="https://github.com/doxygen/doxygen/commit/4074da5b83d37dd1c72c5df015fb2b41e7725a7e">view</a>]</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1527">1527</a> $title doesn't work in LateX header [<a href="https://github.com/doxygen/doxygen/commit/790000b90944646702ddd3a183ec166669c18f51">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3405">3405</a> Class diagrams and class hierarchy don't work for java generic classes [<a href="https://github.com/doxygen/doxygen/commit/c3ddf3331239fb3f41e502a8337eee786ceaad06">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3460">3460</a> Flex .rule file for Visual Studio build can't cope with spaces in filenames [<a href="https://github.com/doxygen/doxygen/commit/eb3ab2452d8a1ef7a85af7a03e1622c12b40400b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3834">3834</a> Fortran: quotation after define causes error [<a href="https://github.com/doxygen/doxygen/commit/f083109de116ee2c6e2a31a15ebc17d2dff008e0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3879">3879</a> FORTRAN: recognition free versus fixed formatted code [<a href="https://github.com/doxygen/doxygen/commit/476d79d31a0534c3d7d07001c47c1212a73d10a5">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5182">5182</a> Bibliography duplicate filenames fails [<a href="https://github.com/doxygen/doxygen/commit/7779bf6d6206bc0f78c22100034c44bfdb7f1bc1">view</a>] and + [<a href="https://github.com/doxygen/doxygen/commit/da029a3c893df22536cb3635e597fd3f5b2a4862">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5215">5215</a> \cite rejects valid BibTeX keys [<a href="https://github.com/doxygen/doxygen/commit/06170de4a166bfad9342f3b957dda82b7fb266b2">view</a>] and + [<a href="https://github.com/doxygen/doxygen/commit/69df2f9d1deb87b79c79f9ea1bf20380ff9b71ad">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5259">5259</a> TCL: Documentation of oo::define is not working [<a href="https://github.com/doxygen/doxygen/commit/5ec66c2286d7cedbdbb0930fe0e293b050c91d24">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5445">5445</a> Nested C structures/unions does not work with groups [<a href="https://github.com/doxygen/doxygen/commit/f4388dc4a62e183b7ca4457eba7cb978a35804c2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5459">5459</a> configuration stops with settings.h missing [<a href="https://github.com/doxygen/doxygen/commit/fd4b42ec54cb8d6faf2b0f16e580f376e8cf6982">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5460">5460</a> XML Output: Doxygen doesn't escape & characters (included in a hyperlink) in <detaileddescription> [<a href="https://github.com/doxygen/doxygen/commit/cfde6cdd600b21bba6a2eb0ca0e7e208e014ccaf">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5461">5461</a> function object in member initializer causes documentation loss [<a href="https://github.com/doxygen/doxygen/commit/f4f3e381dba1bc5d46feea3c39e8f076e27463d1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5472">5472</a> [PATCH] Propagate configure's perl to makefiles [<a href="https://github.com/doxygen/doxygen/commit/f1a692b019a30f7aa07e0fb3e11402d262af8026">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5483">5483</a> man page extension is incorrect [<a href="https://github.com/doxygen/doxygen/commit/f25d896d4da9b44c23f89bfdd0379fa97ab2c351">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5486">5486</a> No documentation generated for method-less C++ struct [<a href="https://github.com/doxygen/doxygen/commit/21178ab40160abf011fa084a10892b5b7821e44c">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5493">5493</a> [PATCH] Fix potential copy and paste error in inputstring.cpp [<a href="https://github.com/doxygen/doxygen/commit/6f5748e822b009cbe82cc1df8eea43e4769bc44b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5494">5494</a> [PATCH] Fix missing '&' in Boolean operation in qstring.cpp [<a href="https://github.com/doxygen/doxygen/commit/27f1e1e9316addcfd0bbc3321b5614ed14f7a1a5">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5497">5497</a> Dead links in html documentation when using tabs for indentation in c++ [<a href="https://github.com/doxygen/doxygen/commit/2cc3b18da39bde323c5739483e507a133e93ac22">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5500">5500</a> Callgraphs for C# only generated for methods inside the same class [<a href="https://github.com/doxygen/doxygen/commit/7edbf2b2e705eccc0d99cce86149228473bc7f3e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5506">5506</a> Variadic macros failing to expand if trailing ... is empty [<a href="https://github.com/doxygen/doxygen/commit/070c35549da108695074239be3ab4268f3722261">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5512">5512</a> Two entries for a single member in doxygen XML [<a href="https://github.com/doxygen/doxygen/commit/ed8ce3cf405204916f9832e26797cb15d1490fd1">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5514">5514</a> nested html tables cause pdflatex to hang (1.8.4 and 1.8.6) [<a href="https://github.com/doxygen/doxygen/commit/3cb963061343aa5b3b8a044cdfa62848723a02ee">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5521">5521</a> volatile declaration on member functions is not handled as xml attribute [<a href="https://github.com/doxygen/doxygen/commit/97d12d058a7831adcc8c6f2cfe8c20ddd2ae5bc2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5524">5524</a> Incorrect LaTeX generation for private union member in C++ [<a href="https://github.com/doxygen/doxygen/commit/a36ddbe0ee97c5ee248b7b391b4c30fd4b3c884b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5526">5526</a> XML Output invalid: XML_PROGRAMLISTING=YES copies Unicode form feed character (U+000C) to XML files [<a href="https://github.com/doxygen/doxygen/commit/b272b4b5077873457a0f6b517ac799f4a5f8c951">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5528">5528</a> segfault in QGListIterator while parsing fortran code [<a href="https://github.com/doxygen/doxygen/commit/aac81f8bfe8298aa0839bb2d7c70ea75149cdffb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5531">5531</a> Explicit links using operator()() not generated. [<a href="https://github.com/doxygen/doxygen/commit/e913d55b2e5a8e37ebd1ffd8fec730886a45fbda">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5534">5534</a> no uniquely matching class member found for inline function definition where parameter argument names don't match [<a href="https://github.com/doxygen/doxygen/commit/6f0269ef3074bbc4bc16ad63a0e0a8f9b5f0ce31">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5535">5535</a> Add support for non-parsed language [<a href="https://github.com/doxygen/doxygen/commit/0dd59398b3f62288897c8c3405977a27a94fbfee">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5537">5537</a> Q_PROPERTY switches the member access from private to public [<a href="https://github.com/doxygen/doxygen/commit/392b48a25e4315528fbb11a5a1bfc9f2bca791c0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5540">5540</a> Strong enum members listed in containing namespace [<a href="https://github.com/doxygen/doxygen/commit/4766fdba2ab196844a0bd5ec5e0b64d94df4a74f">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5543">5543</a> Sigsegv while generating XML output [<a href="https://github.com/doxygen/doxygen/commit/14f88af12bae98859eafe605ddb5f54029e44076">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5544">5544</a> GENERATE_TAGFILE no longer includes any @*section links [<a href="https://github.com/doxygen/doxygen/commit/7d9d4320f5d183c4e1ebc87a316589c36f0afeed">view</a>] and + [<a href="https://github.com/doxygen/doxygen/commit/8b279c9bc28c70405e61219a6c2b3c6dbc7426e6">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5548">5548</a> Request: disable building documentation if Python 2.6 or newer not available [<a href="https://github.com/doxygen/doxygen/commit/264ecc9eee1f2b74f0110120574056f0de42a3f9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5550">5550</a> No output for markdown pages with duplicate label title (different anchor) [<a href="https://github.com/doxygen/doxygen/commit/ebb2fe6d73b4aefc6dadab8eec45adc4ee0c9fd5">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5551">5551</a> QGDict::hashAsciiKey: Invalid null key [<a href="https://github.com/doxygen/doxygen/commit/def392bf8d0326733c20504dc36168093e087c95">view</a>]</li> +<li>Add FORTRAN 2003 keywords and commands [<a href="https://github.com/doxygen/doxygen/commit/4cbfaa8372beff4bd7070dd840924af8d96b0772">view</a>]</li> +<li>Add type option to FORTRAN select statements [<a href="https://github.com/doxygen/doxygen/commit/db289e2272bfc3b00452cbf7c2a30114fb8b7c58">view</a>]</li> +<li>Added build support for Python3+ and Python2.6+ [<a href="https://github.com/doxygen/doxygen/commit/98a54c576eec4feda606156ae591854311d9cd0e">view</a>]</li> +<li>Added class/procedure vardefs to FORTRAN code highlighting [<a href="https://github.com/doxygen/doxygen/commit/dbd1985de07ccd19caf57ffa36c88811048689a4">view</a>]</li> +<li>Added documentation for some missing HTML commands [<a href="https://github.com/doxygen/doxygen/commit/04c89e604877fa9a4aea160d971c782006872710">view</a>]</li> +<li>Added flatten, listsort and paginate filters [<a href="https://github.com/doxygen/doxygen/commit/edd056308d04d6f445a48e05105d4d9a0ece80a0">view</a>]</li> +<li>Added get filter, unified index properties [<a href="https://github.com/doxygen/doxygen/commit/7e3e890fedfb20e7018fadfa87ed97eef7f2b720">view</a>]</li> +<li>Added groupby filter and some more context info [<a href="https://github.com/doxygen/doxygen/commit/064992b0c901661b49de24ce1a1d9a06e9957a93">view</a>]</li> +<li>Added import keyword to FORTRAN code highlighting [<a href="https://github.com/doxygen/doxygen/commit/558697792cd062b93e8d7b7904fb9897e5f70750">view</a>]</li> +<li>Added lists for indices to template context [<a href="https://github.com/doxygen/doxygen/commit/2d35b9a7c0fe70fa894dc266dd0b5ddd54d4014e">view</a>]</li> +<li>Added mainpage to context and improved page tree [<a href="https://github.com/doxygen/doxygen/commit/2e837e0be05636923ef593c29299ff76c4590a09">view</a>]</li> +<li>Added member indexes to template context [<a href="https://github.com/doxygen/doxygen/commit/b850eb45e80b348cbe8629c354350b051f7ef2ec">view</a>]</li> +<li>Added missing links in changelog when multiple bug ids were on one line [<a href="https://github.com/doxygen/doxygen/commit/b752d01fe2de1668c0a247bc3955d7be6987d046">view</a>]</li> +<li>Added more missing links to the changelog [<a href="https://github.com/doxygen/doxygen/commit/0d50c30becc147918b091c02b41502829b8083a3">view</a>]</li> +<li>Added namespace info to the context [<a href="https://github.com/doxygen/doxygen/commit/a7c14ac74c43e6b372d866deeed77fe69e2a68e0">view</a>]</li> +<li>Addition of module data to context and alphaIndex filter [<a href="https://github.com/doxygen/doxygen/commit/e0c3517ff9369387e00dd596b094a4729cfe789c">view</a>]</li> +<li>Coded coloring of flow statements corrected (regression) [<a href="https://github.com/doxygen/doxygen/commit/ee7194bd73ee3a8142aee6ea59d2e5dc717b18de">view</a>]</li> +<li>Corrected copyright year [<a href="https://github.com/doxygen/doxygen/commit/7652fc8472ac83e26641fb737539e7c87725ed68">view</a>]</li> +<li>Correction of typing error [<a href="https://github.com/doxygen/doxygen/commit/81c99d10dbc41feab4a1aca220b27634ca0ff8cd">view</a>]</li> +<li>Disabled/fixed segments that produced doxygen warnings while running the test [<a href="https://github.com/doxygen/doxygen/commit/3a5e6ac7c6018a7a0da7acd830293da0fcb7a21c">view</a>]</li> +<li>Docbook output improvements [<a href="https://github.com/doxygen/doxygen/commit/12f5ee8a8c3a287f6bcfe81f79ff4332b3987c7e">view</a>]</li> +<li>Documentation generator: added support for C# property accessors visibility modifiers. [<a href="https://github.com/doxygen/doxygen/commit/54ac45bd9f535d13b2bf98e4d71b27b4590c3dc7">view</a>]</li> +<li>Doxywizard: make the Next button on the last page of the expert tab switch to the run tab [<a href="https://github.com/doxygen/doxygen/commit/2277e6e695d785d319cb52a8a8ead2982eac2afa">view</a>]</li> +<li>Doxywizard: make the Next button on the last page of the wizard switch to the run tab [<a href="https://github.com/doxygen/doxygen/commit/fbc60af2298c2668893e2f7045f66765f8e0c63f">view</a>]</li> +<li>Error linking 32-bit windows [<a href="https://github.com/doxygen/doxygen/commit/cce307d96a93515d46068cfdcf5e55c1944ae9e5">view</a>]</li> +<li>Fix FORTRAN code function scope test [<a href="https://github.com/doxygen/doxygen/commit/2030240bc18d32581479306e6fd86211e6f30c73">view</a>]</li> +<li>Fix after rebase from master [<a href="https://github.com/doxygen/doxygen/commit/57eee1777c18caa6d3215ec162da1fd9b2d14eb2">view</a>]</li> +<li>Fix description of USE_PDFLATEX [<a href="https://github.com/doxygen/doxygen/commit/c87cceafe203a11e4074b748469e993d13cd8fb3">view</a>]</li> +<li>Fix highlighting issues [<a href="https://github.com/doxygen/doxygen/commit/be0986e9ab7c1788e3650f1df7e7af70b68f28d8">view</a>]</li> +<li>Fix typo [<a href="https://github.com/doxygen/doxygen/commit/e32121ab1fb261464356ce2352c08930f942f805">view</a>]</li> +<li>Fix unnecessary rules for FORTRAN types [<a href="https://github.com/doxygen/doxygen/commit/1e6323e5bb04f49df9d00e82e5db3e8f301dbfc4">view</a>]</li> +<li>Fix warning about unused functions in qstring.cpp [<a href="https://github.com/doxygen/doxygen/commit/84064ac4db9e487ca4bff9b6c37eb72992050ee3">view</a>]</li> +<li>Fixed keyword type [<a href="https://github.com/doxygen/doxygen/commit/d8221cb7a73efc8f20068636c3d2fec84ce8cb8b">view</a>]</li> +<li>Fixed missing include for Linux [<a href="https://github.com/doxygen/doxygen/commit/88468313289c659088be9beece59a82206153ed8">view</a>]</li> +<li>Fixed test 021 [<a href="https://github.com/doxygen/doxygen/commit/c5c763056535216ccce4bed4892358bf5c8d1fd5">view</a>]</li> +<li>Fixed typo [<a href="https://github.com/doxygen/doxygen/commit/0bb9b762844a2f88043223a29182dd9e7e524cef">view</a>]</li> +<li>Fixed typo and used QString for directory [<a href="https://github.com/doxygen/doxygen/commit/5d00fa5862a1724bbe417e33d6c1a260607281ef">view</a>]</li> +<li>Fixed windows compile issue for is_neutral [<a href="https://github.com/doxygen/doxygen/commit/9278509cf82ed7b0ff37c39e4d6e97f5308f29de">view</a>]</li> +<li>Fixes for ./configure script on Solaris [<a href="https://github.com/doxygen/doxygen/commit/d234115b6f387ff723cb97a4d47b2bcca7f0bc6d">view</a>]</li> +<li>Fixes regression due to PR 169 [<a href="https://github.com/doxygen/doxygen/commit/56143a268898249a63bb0a443e09dc2c77ec9ce9">view</a>]</li> +<li>Language parser: added support for C# property accessors visibility modifiers. [<a href="https://github.com/doxygen/doxygen/commit/f5ff1b8e55b4dad074d2a73f1d003ff2991cf894">view</a>]</li> +<li>Made INSTALL file version and date independent [<a href="https://github.com/doxygen/doxygen/commit/1781094043eb5f8f7b0f0bbe5f720012346123a2">view</a>]</li> +<li>Made bread crumb trails enabled unconditionally [<a href="https://github.com/doxygen/doxygen/commit/c7c7d73c184ee2eebf65e83044cf1e325751cffa">view</a>]</li> +<li>Made setName() virtual so overloading works [<a href="https://github.com/doxygen/doxygen/commit/d1e39098f94487f544a068b7864aa8d1b1f345cd">view</a>]</li> +<li>Make index for faq [<a href="https://github.com/doxygen/doxygen/commit/38dfdcaba3e9130833cd7b695d5e20fec26f5c3f">view</a>]</li> +<li>Messages truncated in warnings file [<a href="https://github.com/doxygen/doxygen/commit/cc4f3b454cae7d3e9eaa44342bcbae1061f5e790">view</a>]</li> +<li>Minor fixes [<a href="https://github.com/doxygen/doxygen/commit/c31a81a85e0396fb276beefd06bb71c2819571ed">view</a>]</li> +<li>Minor fixes to the template context [<a href="https://github.com/doxygen/doxygen/commit/963e0adfd76e6a59ace5e7318f948632322b1e51">view</a>]</li> +<li>Missing word after \n command in doxygen rtf output, version 1.8.5 & up [<a href="https://github.com/doxygen/doxygen/commit/ea9f3b1d727b22973c0176b2564304fb160aa70b">view</a>]</li> +<li>More robust extraction of scope information from tag files [<a href="https://github.com/doxygen/doxygen/commit/6a60477b418e21dbadd3e62dc557a038e319581b">view</a>]</li> +<li>No warning in case cite definition is missing [<a href="https://github.com/doxygen/doxygen/commit/1f77638174f715f0f2bcf5b2e32ebb329d531f85">view</a>]</li> +<li>Preparations for release 1.8.8 [<a href="https://github.com/doxygen/doxygen/commit/f16be0113f8d47d4f04e69d0c45ccc4b24e3c426">view</a>]</li> +<li>Removed not implemented HTML commands from documentation [<a href="https://github.com/doxygen/doxygen/commit/8199b2d105313efd30367c7a03b57bf7a7d2180b">view</a>]</li> +<li>Removed unsupported HTML commands from the docs [<a href="https://github.com/doxygen/doxygen/commit/16ba4bd5744c2e5fbfabe95b27736b8ca8030390">view</a>]</li> +<li>Set deployment targets for MacOSX 10.5+ versions [<a href="https://github.com/doxygen/doxygen/commit/28f40b3aea1411488832205fae447f4652125cdc">view</a>]</li> +<li>Support multiple extra HTML stylesheets. [<a href="https://github.com/doxygen/doxygen/commit/595943c96860425f9086028b00e1e155e8ec434f">view</a>]</li> +<li>Tcl: add missing file that breaks test 057 [<a href="https://github.com/doxygen/doxygen/commit/73e7c340f555291d4264b2f83caacf59a5a3395f">view</a>]</li> +<li>Tcl: add test code for Bug <a href="https://github.com/doxygen/doxygen/issues/5463">5463</a> [<a href="https://github.com/doxygen/doxygen/commit/36ce0578065b95cf12b81e5a4edd95dea5707e22">view</a>]</li> +<li>Tcl: collect XRefs also if INLINE_SOURCES = no [<a href="https://github.com/doxygen/doxygen/commit/6245ef410358f332330195f9f2bfa458cfb6a2b8">view</a>]</li> +<li>Tcl: correct namespace resolution in case of INLINE_SOURCES = YES [<a href="https://github.com/doxygen/doxygen/commit/470143192d0c8cf90ad84a66226d48060cc713db">view</a>]</li> +<li>Tcl: recurse for [] [<a href="https://github.com/doxygen/doxygen/commit/9d315a987d7d0ea2f38809aa74e36c92281910df">view</a>]</li> +<li>Tcl: refactor similar code into tcl_codify_token function [<a href="https://github.com/doxygen/doxygen/commit/06bd53ac6acee5fb83d9f2b5ded1c55c8a069b29">view</a>]</li> +<li>Tcl: support eval/catch commands [<a href="https://github.com/doxygen/doxygen/commit/9d24b488add8b4c7c689f58a095184a6ed85e9f1">view</a>]</li> +<li>Tcl: support switch command [<a href="https://github.com/doxygen/doxygen/commit/2984dad86558b4a81e11ce07485057e3903a9304">view</a>]</li> +<li>Tcl: test 057 additionally tests mutual Xrefs for two files [<a href="https://github.com/doxygen/doxygen/commit/c6aaf0a4c35db27f968a7a6d0b9fa25b5b311bc3">view</a>]</li> +<li>Template context support for CREATE_SUBDIRS [<a href="https://github.com/doxygen/doxygen/commit/9282aab5ed2a0cca3858df6e62132f959e99edb5">view</a>]</li> +<li>Update dot.cpp [<a href="https://github.com/doxygen/doxygen/commit/a15c5c89f0b4f97d57474d9ea0e3166709d35534">view</a>]</li> +<li>Update latexgen.cpp [<a href="https://github.com/doxygen/doxygen/commit/1f877b09262f34e6bad6dbfaee4b04b4be03bd4c">view</a>]</li> +<li>Update test 058 because commit 9d315a9 fixes also Bug <a href="https://github.com/doxygen/doxygen/issues/5464">5464</a> [<a href="https://github.com/doxygen/doxygen/commit/3486bfc158008da1d69d420e57e7a10f1c0d69c3">view</a>]</li> +<li>Replaced the VHDL parser with the VHDL scanner from 1.7.5 to avoid potential licensing issues [<a href="https://github.com/doxygen/doxygen/commit/99433b3d2319916f11608c2c818fe35360256d9e">view</a>]</li> +<li>New VHDL parser implementation [<a href="https://github.com/doxygen/doxygen/commit/36122e49ed1d9e640b1ceca52536ec7c55e10474">view</a>]</li> +<li>Vhdl fixes [<a href="https://github.com/doxygen/doxygen/commit/3b8fea2f1f7f2e6a83a35626e6dec9d114a78c9e">view</a>]</li> +<li>\usepackage{fixltx2e} must come before use \usepackage{float} [<a href="https://github.com/doxygen/doxygen/commit/d8a36bbd404bc9c77689f42cc4bfde8ac393cd8c">view</a>]</li> +<li>cache anonymous into ClassDefImpl::isAnonymous [<a href="https://github.com/doxygen/doxygen/commit/34a5a051a8b91215ae4f93e5541d43c33aa887c1">view</a>]</li> +<li>changed append filter and added index and path attributes to node [<a href="https://github.com/doxygen/doxygen/commit/47bc520ac8c0dde310dcb1999c622c591b373ffc">view</a>]</li> +<li>doc/translator.py -- unification for Python 2.6+ and 3.3+ (not finished) [<a href="https://github.com/doxygen/doxygen/commit/8cac977ddfdc1c77546f5d766387f4a57710c8c0">view</a>]</li> +<li>doc/translator.py unified for Python 2.6+ and Python 3.0+ [<a href="https://github.com/doxygen/doxygen/commit/6212c2d2af12dd9d47459bdecdf79ad106060229">view</a>]</li> +<li>make.bat: change current directory [<a href="https://github.com/doxygen/doxygen/commit/fc386eb107958b4f3214aa2c0c6caf2a91c83177">view</a>] and + [<a href="https://github.com/doxygen/doxygen/commit/feb24c82002ced816bc72eb8f2a6a35c71e25ed7">view</a>]</li> +<li>removeRedundantWhiteSpace micro-optimization [<a href="https://github.com/doxygen/doxygen/commit/d4601735b582b903f1ccb144f59b2030a7797b05">view</a>]</li> +<li>resolves the error of unbalanced tags opened/closed in docbook output: parser error : Opening and ending tag mismatch: para line 358 and tbody [<a href="https://github.com/doxygen/doxygen/commit/d7b0858e079419bb7ea862e16946218a9352d5b5">view</a>]</li> +<li>winbuild/pack_the_distribution_for_windows.py minor updates [<a href="https://github.com/doxygen/doxygen/commit/6d969cab51f4c32784966a28b8b9d5fe2d5b2089">view</a>]</li> </ul> <p> \endhtmlonly @@ -1012,169 +1412,169 @@ <a name="1.8.7"></a> </p> <ul> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2479">2479</a> - c-source and h-source missing for latex [<a href="http://github.com/doxygen/doxygen/commit/d5d34325fb9bed776cf2b4facc0c341f701e780b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3879">3879</a> - FORTRAN: recognition free versus fixed formatted code [<a href="http://github.com/doxygen/doxygen/commit/2dec1060623165057628ee678eb3580351922408">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3893">3893</a> - Latex $projectname with "&" gets no escaped [<a href="http://github.com/doxygen/doxygen/commit/586b3b69238fb09d55a03c5d50fc1b7d3e65ed97">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4179">4179</a> - Fortran: variable with name "type" confuses doxygen [<a href="http://github.com/doxygen/doxygen/commit/17c5b6160d013d118296663e133cf8884c74a939">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4683">4683</a> - Percent to prevent auto-linking in page title is not removed for navpath [<a href="http://github.com/doxygen/doxygen/commit/5d44acc0a49bd7b990bfe649efa312f5f0bb594b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4762">4762</a> - Nested \if messes up list items [<a href="http://github.com/doxygen/doxygen/commit/7f4414b92a1c2147b073dd3cf58e0db7c8a88be6">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4762">4762</a> - Nested \if messes up list items [<a href="http://github.com/doxygen/doxygen/commit/de502ca71fc1c20ed93209f6a223c488eee38297">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4870">4870</a> - Command ignored when using umlauts in markdown and also C-comments in markdown didn't work properly [<a href="http://github.com/doxygen/doxygen/commit/b4b40f4c7ea57655d1264e8f72c754526e3a9209">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5052">5052</a> - Notes in xml output are not correctly separated [<a href="http://github.com/doxygen/doxygen/commit/bc61f00f142792dfbe97c361d9fecd3ea2850f5e">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5254">5254</a> - Enables using unicode (non ASCII) to name output files [<a href="http://github.com/doxygen/doxygen/commit/d5fb69739a1b2facf32a63ca94c12d097f8278cc">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5258">5258</a> - Nested namespace causes incorrect display when referenced via .tag file [<a href="http://github.com/doxygen/doxygen/commit/1bdbbc60982f2f61f4e0423c9fc8c4a24cfb2e94">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5348">5348</a> - Documentation for enumeration not generated [<a href="http://github.com/doxygen/doxygen/commit/1bb36723a522b371810606c2f6504d0374a7b027">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5383">5383</a> - Code coloring in case of file without extension [<a href="http://github.com/doxygen/doxygen/commit/45934e88fa961686c00be1ad272a088f4e7eac0b">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5387">5387</a> - Trouble with /cond /endcond [<a href="http://github.com/doxygen/doxygen/commit/2912829ca5bced897a2c063d1883b9cfd39d3bd9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5388">5388</a> - Wrong call graph in simple situation [<a href="http://github.com/doxygen/doxygen/commit/e12d6b506862c8ad843b7853bc1c9ceb5d0ccb4d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5389">5389</a> - [Latex/PDF] Merging brief and detailed description in file section [<a href="http://github.com/doxygen/doxygen/commit/a99c33838057acba20768ca32681e1f379f36ca0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5390">5390</a> - Parsing problem with C++11 empty initializer lists [<a href="http://github.com/doxygen/doxygen/commit/1bfacc3b8e589907352eff923b7b3aa73cfc5138">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5393">5393</a> - Move constructors and move assignment operators of embedded classes of template classes cannot be matched. [<a href="http://github.com/doxygen/doxygen/commit/1d0c9b6fefb6c2e0a9a2b7a7ea3192ccace33710">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5396">5396</a> - Dia diagrams not displayed by Firefox [<a href="http://github.com/doxygen/doxygen/commit/5ea2f2a123e473d5964435369fd925d7f103b456">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5404">5404</a> - regression referencing namespaced type [<a href="http://github.com/doxygen/doxygen/commit/9b76c1a9bb7039962933aeef398bb7aa2f59c3a5">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5408">5408</a> - doxygen nested \if \endif sample not working [<a href="http://github.com/doxygen/doxygen/commit/cc78b12b0019fbcb17692b231d38ba75d0952201">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5410">5410</a> - doxygen 1.8.6 sorts the contents of a namespace by group within the Class List [<a href="http://github.com/doxygen/doxygen/commit/f9b80aff6d20524dd0838aff12033fe3df66ba98">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5414">5414</a> - Link refs with no title swallow an extra newline [<a href="http://github.com/doxygen/doxygen/commit/60ea06a68f2e355e34b61bf45babc6405bfbfe84">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5415">5415</a> - Documentation for derived classes no longer has an "Additional Inherited Members" section after upgrading doxygen from 1.8.3.1 to 1.8.6 [<a href="http://github.com/doxygen/doxygen/commit/0e9da9fb27147c5685088019afd428a0aaa901fa">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5416">5416</a> - configure --prefix=/opt/foo not accepted [<a href="http://github.com/doxygen/doxygen/commit/bc7e6301e2d1474592f6cd6cc07624852d1b5016">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5417">5417</a> - Command \| not working when last character in markdown table line [<a href="http://github.com/doxygen/doxygen/commit/8309fbd9e639eaf9e763e83ca7a228c659450a57">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5421">5421</a> - Last line of code block lost if it is only one character and there is no text afterward [<a href="http://github.com/doxygen/doxygen/commit/4d1951ebb648bbc92464904305cafc7fc0dba557">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5422">5422</a> - Doxygen crashes on incorrect end group /**< @} */ [<a href="http://github.com/doxygen/doxygen/commit/b4d5ef176eced8315523baea464cfda733ecb9aa">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5424">5424</a> - star is not printed in \code environment [<a href="http://github.com/doxygen/doxygen/commit/0eaf1cd5d2eac57666b5ffea9e0f948b7a3e6b3a">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5425">5425</a> - Internal inconsistency: namespace in IDL [<a href="http://github.com/doxygen/doxygen/commit/b0456fbefa864b33611f289818deeaaf791c17c9">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5428">5428</a> - Server side (PHP) search broke in 1.8.3 [<a href="http://github.com/doxygen/doxygen/commit/1d2bb19e394850ecb37bea06ef4e5d15fe06e7b0">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5436">5436</a> - python3 import style causes doxygen to ignore some inheritances [<a href="http://github.com/doxygen/doxygen/commit/513ce9aafd05add9b5c1e67e843e540f8937cf63">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5437">5437</a> - Markdown Extra - fenced code block: '>' before tab width parsed as block quote [<a href="http://github.com/doxygen/doxygen/commit/3598e8fdf7ee61a281480fec09f63669710ac35d">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5438">5438</a> - Tilde sign in combination with <pre> and MARKDOWN_SUPPORT disabled [<a href="http://github.com/doxygen/doxygen/commit/721764a1b3c63c77ff0792beb6c37fbfee0f87bb">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5439">5439</a> - Blockquote followed by text inserts an extra paragraph [<a href="http://github.com/doxygen/doxygen/commit/518fccbbadba3136a29c895f3606f40fa220fe47">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5440">5440</a> - alignment of blockquotes in pdf [<a href="http://github.com/doxygen/doxygen/commit/9059295fd6e178804f2f2d95ffe3764645ecc026">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5449">5449</a> - Build fails when --with-libclang on Fedora [<a href="http://github.com/doxygen/doxygen/commit/837d63319a7b014412cb3cb2b5d27d2474a932c2">view</a>]</li> -<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5456">5456</a> - Crash on \addindex \term [<a href="http://github.com/doxygen/doxygen/commit/653a2a8b123b79835af9f684f8b92ef7f88712aa">view</a>]</li> -<li>A new files have been added but is not incorporated in the windows build part [<a href="http://github.com/doxygen/doxygen/commit/d9dd873e25fba968ddcbcc79d6643f5df669b626">view</a>]</li> -<li>Add docbook directory to be removed as well [<a href="http://github.com/doxygen/doxygen/commit/08ea10029e705a388ab14ee29544d496a203f23f">view</a>]</li> -<li>Add extra (documenattion) directories to ignore pattern [<a href="http://github.com/doxygen/doxygen/commit/db358b1f219fecf0d7df96d8c70b47b245471c66">view</a>]</li> -<li>Add index support to context [<a href="http://github.com/doxygen/doxygen/commit/12cd22f4c32ed8b92da7b5a03181aa6735018a5b">view</a>]</li> -<li>Add line numbers in case comment is not closed properly. [<a href="http://github.com/doxygen/doxygen/commit/b1d513b2ac65fe26ceec2fa494867713efa01cd5">view</a>]</li> -<li>Add template context for annotated class index [<a href="http://github.com/doxygen/doxygen/commit/9434ecb13e1f3e2901b78d3e41e7f1d7d9469434">view</a>]</li> -<li>Add validation of internal consistency to html entity mapper [<a href="http://github.com/doxygen/doxygen/commit/d96458ce99b92590a8fec0aba46c67b6816fa632">view</a>]</li> -<li>Add warning when encountering a nested comment start (/*) without matching end (*/). [<a href="http://github.com/doxygen/doxygen/commit/7f30d0afbeb9565bced1439f86ce9f862de5282e">view</a>]</li> -<li>Added \latexinclude command (thanks to Juan Zaratiegui for the patch) [<a href="http://github.com/doxygen/doxygen/commit/1134237afe25f86fcf7c7e2a76a3542eee8acc79">view</a>]</li> -<li>Added basic arithmetic operations to the template expressions, and made the expression lexer faster [<a href="http://github.com/doxygen/doxygen/commit/5af2b7c0aef5cd6a0dc6ceddcffba16f623d920a">view</a>]</li> -<li>Added dir tree nodes to the context [<a href="http://github.com/doxygen/doxygen/commit/762ee821bb0bef125d5406572963ce32c748e227">view</a>]</li> -<li>Added directory info to the context [<a href="http://github.com/doxygen/doxygen/commit/47adeb82d67208db88a4aaae5c3427291462611a">view</a>]</li> -<li>Added doc/config.doc to .gitignore [<a href="http://github.com/doxygen/doxygen/commit/fa400a0252d12db3ffd30eb083e5185f11264112">view</a>]</li> -<li>Added language update for Swedish (thanks to Björn Palmqvist) [<a href="http://github.com/doxygen/doxygen/commit/eec2140f577431915ed087727093c5bf381500ba">view</a>]</li> -<li>Added last and first attributes to index tree node [<a href="http://github.com/doxygen/doxygen/commit/ff5ec803a39b225e03edcd1bf2df3198dafcc16e">view</a>]</li> -<li>Added missing \+ command to build LaTeX manual [<a href="http://github.com/doxygen/doxygen/commit/c096119b0c0bfc567058538b6225ca26eb191a3a">view</a>]</li> -<li>Added new language maintainer for Swedish, removed generated file language.doc [<a href="http://github.com/doxygen/doxygen/commit/f3172cf19514fc05588878d3fabfffe479495cca">view</a>]</li> -<li>Added optional [block] option to \htmlonly [<a href="http://github.com/doxygen/doxygen/commit/842c816a31537e32cec376c85c0a4363f74d7a54">view</a>]</li> -<li>Added reference counting for all context objects [<a href="http://github.com/doxygen/doxygen/commit/ff00706a18b6e57419796ffd6f1448cb2ccb9436">view</a>]</li> -<li>Added stricter URL filtering to prevent DOM Based XSS when the tree view is enabled [<a href="http://github.com/doxygen/doxygen/commit/8ba739ad1ecde1036bfe2e364aee378e137f6dff">view</a>]</li> -<li>Added support for \-- and \--- to prevent interpretation as ndash and mdash [<a href="http://github.com/doxygen/doxygen/commit/385b87e08c23b1392d0e6d6fbdb6ef463fa28477">view</a>]</li> -<li>Added support for elif to the template language [<a href="http://github.com/doxygen/doxygen/commit/ae3a22ba276a2e446a460274e0bff8a9bdf4af7d">view</a>]</li> -<li>Added support for range tag in the template language [<a href="http://github.com/doxygen/doxygen/commit/b98846d0b57b78cd45d34e0962a8bcdc2e643e18">view</a>]</li> -<li>Alternative way to get rules information from flex [<a href="http://github.com/doxygen/doxygen/commit/224fa96dd9c9245bfdf68ee6f92160b7aa05f8d1">view</a>]</li> -<li>Better message in case doxygen -u is used [<a href="http://github.com/doxygen/doxygen/commit/cfd8c2415e7d0744a00bf1990f26aab538940f20">view</a>]</li> -<li>Changed "See Also" back to "See also" [<a href="http://github.com/doxygen/doxygen/commit/0754c968a4a06c8217c9301a5ca82c6212c228ec">view</a>]</li> -<li>Chm don't add images multiple times [<a href="http://github.com/doxygen/doxygen/commit/3b339813794390bdce59fa1009cf71506e0cec2b">view</a>]</li> -<li>Command \< and \> are not properly shown in section headers (and consequently in index) [<a href="http://github.com/doxygen/doxygen/commit/04a8ce9a8e2f022c21a5728ffdfb029258fa54e9">view</a>]</li> -<li>Consistency of usage of the word LaTeX in the documentation [<a href="http://github.com/doxygen/doxygen/commit/d63a7d8812c7f748a48d76bfc39ce57f79f6f667">view</a>]</li> -<li>Context enhancement [<a href="http://github.com/doxygen/doxygen/commit/92d53a473074a78735d25bbef02715b3caced569">view</a>]</li> -<li>Corrected some definitions for some Fortran keywords [<a href="http://github.com/doxygen/doxygen/commit/d4aa05e171d27cc17b177078d3ff481441087da4">view</a>]</li> -<li>Disabled config dependency check to avoid regression [<a href="http://github.com/doxygen/doxygen/commit/904ad3fbdc5e1615fdb052ba8562fc9b1329cd81">view</a>]</li> -<li>Documentation corrections [<a href="http://github.com/doxygen/doxygen/commit/4b51e6113f1e9e20a5700840d83f1c3928d84825">view</a>]</li> -<li>Enable Previous and Next buttons in chm output file [<a href="http://github.com/doxygen/doxygen/commit/e6a78b6b2573388353bdb5dcd7a13dcc11959d13">view</a>]</li> -<li>Enabling possibility to have { and } in (latex) index items [<a href="http://github.com/doxygen/doxygen/commit/dd2c137847e16d0a7c6086053f55bce501d84a0c">view</a>]</li> -<li>Error message is given for make distclean as generated_src is a directory [<a href="http://github.com/doxygen/doxygen/commit/76701e2bfb688ac22a751c4f03b28fa9d5f594f7">view</a>]</li> -<li>Extension in config.xml if type=string with format=image [<a href="http://github.com/doxygen/doxygen/commit/025cc9def72002d4ab6da7bfee8a73c03ca7c331">view</a>]</li> -<li>Extension specific filtering [<a href="http://github.com/doxygen/doxygen/commit/425e64e2ee52b92a2c0c8f6fb5457bf95b95e5bf">view</a>]</li> -<li>Fix id parsing for atx markdown headers [<a href="http://github.com/doxygen/doxygen/commit/ee830bb8888535ac48c0c4fd90580542e7f70481">view</a>]</li> -<li>Fix segfault on invalid bounding FIG when patching dot [<a href="http://github.com/doxygen/doxygen/commit/1bd2e38a2ce2d0823557381c48fe47cb53d6fba8">view</a>]</li> -<li>Fix to VHDL scanner. [<a href="http://github.com/doxygen/doxygen/commit/5ca7d423a11337d5c31082f52a287a3dc0986642">view</a>]</li> -<li>Fix typos in russian translation [<a href="http://github.com/doxygen/doxygen/commit/8ce2b0d7aec1d4398b5b4f365a7d3abbe75daf5f">view</a>]</li> -<li>Fixed Tidy's 'empty span' warning in HTML output [<a href="http://github.com/doxygen/doxygen/commit/8cfac90d6c8632436db1a6b650a05a8dfcfab5d0">view</a>]</li> -<li>Fixed compiler warnings in section.h [<a href="http://github.com/doxygen/doxygen/commit/683ef76f7bf1ba929f9c263064bb5f6c8e377275">view</a>]</li> -<li>Fixed difference between generated XML schema and XML files for HTML entities [<a href="http://github.com/doxygen/doxygen/commit/836af2f9510d10f2dd7d832025f214983387b3c6">view</a>]</li> -<li>Fixed issues with @parblock and added regression test case [<a href="http://github.com/doxygen/doxygen/commit/2ed3d33a92dbcdf0a0149c5f06909926e44cdebd">view</a>]</li> -<li>Fixed issues with SEPARATE_MEMBER_PAGES and INLINE_SIMPLE_STRUCTS [<a href="http://github.com/doxygen/doxygen/commit/a9f93437b6b2b9686e1b4f2e691782c6ebe99c26">view</a>]</li> -<li>Fixed memory leak in nested comment administration [<a href="http://github.com/doxygen/doxygen/commit/2514ba72e53473f8dd424efdbef34287c8a3fd56">view</a>]</li> -<li>Fixed off-by one error for last character in compound.xsd [<a href="http://github.com/doxygen/doxygen/commit/61b00c0061eda805696fe6f90db15136811e1ed7">view</a>]</li> -<li>Fixed potential crash caused by overloading the variadic warn function [<a href="http://github.com/doxygen/doxygen/commit/31505eb34565b2e39d113b7f5460645d02ad6d2e">view</a>]</li> -<li>Fixed problem handling Obj-C protocol list when proceeded by a newline [<a href="http://github.com/doxygen/doxygen/commit/09a5fc198a98d697d3e50c1c76392b8373f1af12">view</a>]</li> -<li>Fixed problem with ending a paragraph when htmlonly was at the end of a comment block [<a href="http://github.com/doxygen/doxygen/commit/8d03b3f35e404abfd0ed31022a687fc1eab07fd5">view</a>]</li> -<li>Fixed typo in changelog [<a href="http://github.com/doxygen/doxygen/commit/8f58d6dd7c3d0f6004d127bf111f76e4a4478516">view</a>]</li> -<li>Fixed typo in doxyindexer.vcproj [<a href="http://github.com/doxygen/doxygen/commit/2bc8a820b3e2fefaedb10a3129eed35581a1ea5b">view</a>]</li> -<li>Fixes for missing build dependencies [<a href="http://github.com/doxygen/doxygen/commit/62379ff8fdb13d95c7651419d92db47150e15bcc">view</a>]</li> -<li>Give message when PROJECT_LOGO cannot be found or cannot be converted [<a href="http://github.com/doxygen/doxygen/commit/164864d9bc8ea7e32a69fbc0e47cff54dc678a48">view</a>]</li> -<li>Handlingh of -- by \c and <code> results in - adjusted documentation [<a href="http://github.com/doxygen/doxygen/commit/73d12cc5cf0656e94125baea62cdb19b67908b3d">view</a>]</li> -<li>Improve rendering of sub and superscripts in LaTeX [<a href="http://github.com/doxygen/doxygen/commit/a7c7f36ea2a67969bf3916c7600fe487e34438c0">view</a>]</li> -<li>Improved handling of percent symbol [<a href="http://github.com/doxygen/doxygen/commit/0e080f486f67008ef427c834f6ab6ebca7578124">view</a>]</li> -<li>Improved performance of rendering large index pages, by replacing images in the tables by spans [<a href="http://github.com/doxygen/doxygen/commit/956a7fb004e72923f737e387d053812f99b7bda2">view</a>]</li> -<li>In case of sections with the same name they are not reported. [<a href="http://github.com/doxygen/doxygen/commit/ac611be473c2d9bf65bcafb53b0577274c4ae706">view</a>]</li> -<li>Inconsistency in usage of simplesecr versus simplesectsep corrected [<a href="http://github.com/doxygen/doxygen/commit/bc46b90c42470e238a6e038f49a7423796a8c2e3">view</a>]</li> -<li>Inconsistency in usage of simplesecr versus simplesectsep corrected [<a href="http://github.com/doxygen/doxygen/commit/c5bedcdc2e3b6c519aae62ff1a08d4ec808cce6b">view</a>]</li> -<li>Incorrect handling dependencies [<a href="http://github.com/doxygen/doxygen/commit/bfcfa6fc73942b80cb22e2900438dc99d844a78e">view</a>]</li> -<li>Items XML_SCHEMA and XML_DTD declared obsolete [<a href="http://github.com/doxygen/doxygen/commit/ba31ee73aad3bdc6b3854add2db01c302c9cf19c">view</a>]</li> -<li>List only the project pages in "Related Pages" [<a href="http://github.com/doxygen/doxygen/commit/a2c7f91d6320f72951f1e3ef092e077a89562670">view</a>]</li> -<li>Made documentation more consistent [<a href="http://github.com/doxygen/doxygen/commit/b81fe14c7fe8b3eaafa4ce8ddcd0f1815c2c7ff0">view</a>]</li> -<li>Make sure all ids in g_linkRefs are lower case [<a href="http://github.com/doxygen/doxygen/commit/3df31762585075033a04e40c3cdfb52781aa258f">view</a>]</li> -<li>Make the MAN_SUBDIR setting override the name of the directory the man pages are placed in. [<a href="http://github.com/doxygen/doxygen/commit/83b344db49b27bf68994eb8ec6be87d6d0f24e86">view</a>]</li> -<li>Meta tag in the HTML search page was not closed properly [<a href="http://github.com/doxygen/doxygen/commit/4ccfb9efa8382de50dfc5b176cb147fd1b05870c">view</a>]</li> -<li>Minor fixes for the new build locations [<a href="http://github.com/doxygen/doxygen/commit/d86520ef4920a9a47a4d6e33eadfc62b8b983748">view</a>]</li> -<li>Missing & and chars after " in tree of chm documentation [<a href="http://github.com/doxygen/doxygen/commit/89638fbc9961bd9a1e9cb7bc25e5f739936e8a43">view</a>]</li> -<li>More context changes [<a href="http://github.com/doxygen/doxygen/commit/196f39515ec5f9fdcbda68046f48a1d1a8250854">view</a>]</li> -<li>More work on the template and context mechanisms [<a href="http://github.com/doxygen/doxygen/commit/744d1ca52e25dfa9e3d656056d87ed7cb6320585">view</a>]</li> -<li>On windows citelist.doc remains [<a href="http://github.com/doxygen/doxygen/commit/3c941f24ee93687c197363fa2d4b787512878eab">view</a>]</li> -<li>Place where dot executable is found [<a href="http://github.com/doxygen/doxygen/commit/90ecc2487146e0cdd392047342a30fd13453b233">view</a>]</li> -<li>Properly escape the XCODE path. [<a href="http://github.com/doxygen/doxygen/commit/0cc8f6b2a14fdeb6d6769d34edb035b755d1299f">view</a>]</li> -<li>Pull out property names in Objective-C. [<a href="http://github.com/doxygen/doxygen/commit/f4ff0ea8b11560ce718bb41b63bdf793cd333f27">view</a>]</li> -<li>Recognize all HTML4 special character entities [<a href="http://github.com/doxygen/doxygen/commit/1bd64ac0e925ba2ff069ec64c026ea3c32f85600">view</a>]</li> -<li>Reduced and improved functionality of QList [<a href="http://github.com/doxygen/doxygen/commit/6e51abf63021dc9fe32c05f003232fe68a08591d">view</a>]</li> -<li>Removed config.doc as it is generated by configgen.py [<a href="http://github.com/doxygen/doxygen/commit/a642629761d43d53f3ade41c78530d0c7228a84d">view</a>]</li> -<li>Removed generated file src/settings.h from source repository [<a href="http://github.com/doxygen/doxygen/commit/43461e44d49200fd1564c4e416db7384e7e5eab8">view</a>]</li> -<li>Removed message, minor restructuring [<a href="http://github.com/doxygen/doxygen/commit/ea436bd659e022d6375dd37f651d4bb18a1c01db">view</a>]</li> -<li>Removed remark about installdox from the FAQ [<a href="http://github.com/doxygen/doxygen/commit/68080883535bb146e2e4f65943c8b836da6b68e0">view</a>]</li> -<li>Restructured html entity handling [<a href="http://github.com/doxygen/doxygen/commit/dfa20277697fe904a0846b60a01cc388fc13c933">view</a>]</li> -<li>Reverted #132 after submitter reported that it did not work [<a href="http://github.com/doxygen/doxygen/commit/fdc81edcd47ce176648d7507d0597294098ae8aa">view</a>]</li> -<li>Showing error message on windows in case on error on startup [<a href="http://github.com/doxygen/doxygen/commit/6a0651d9328262271ade2b733c125aae4415e3c3">view</a>]</li> -<li>Simplified LaTeX header/footer escaping [<a href="http://github.com/doxygen/doxygen/commit/3337add3a6e05e26800c9e269b23fff272a9534c">view</a>]</li> -<li>Some restructuring and some compiler warning fixes [<a href="http://github.com/doxygen/doxygen/commit/941eea998d6b9608b8fc586069ef90e805d771f5">view</a>]</li> -<li>Spitting generated files better from source files [<a href="http://github.com/doxygen/doxygen/commit/8885016b2a3bbeb6045a3e71d508939e0a7bd773">view</a>]</li> -<li>Superfluous < sign [<a href="http://github.com/doxygen/doxygen/commit/599700e6e72d687b6597cfbe2453474b231640ea">view</a>]</li> -<li>Superfluous backslash in documentation [<a href="http://github.com/doxygen/doxygen/commit/be5f9c70bcf38f9bce58e4b8e293dab6aea754fd">view</a>]</li> -<li>Superfluous include removed [<a href="http://github.com/doxygen/doxygen/commit/0e12f6bfa938b675f827074eb3693eff362e6b96">view</a>]</li> -<li>Undo previous commit [<a href="http://github.com/doxygen/doxygen/commit/1b5d5e53a7fce8136f9ab0ce82c95a8f9d479574">view</a>]</li> -<li>Unified DirFileContext and NestingContext [<a href="http://github.com/doxygen/doxygen/commit/df839603204979113b96678e2ab21b3eba64476c">view</a>]</li> -<li>Update doctokenizer.l [<a href="http://github.com/doxygen/doxygen/commit/68cf977ee72f8914678e30e3a88f0e9d90703418">view</a>]</li> -<li>Update doctokenizer.l [<a href="http://github.com/doxygen/doxygen/commit/ea1ee635fccbba4273a922dab3d092dd75b195e0">view</a>]</li> -<li>Updated copyright [<a href="http://github.com/doxygen/doxygen/commit/a28ff2331d8e228d901cd6f0b038f76e1cee630a">view</a>]</li> -<li>Use \newline i.s.o. \par for linebreaks in LaTeX [<a href="http://github.com/doxygen/doxygen/commit/7e719d1ad5da33ccb3f54a90ae11dee58828b6ab">view</a>]</li> -<li>Use hook arrow for hyphens in symbol names in the LaTeX output. [<a href="http://github.com/doxygen/doxygen/commit/ac813134a85ba9bd999fb4cf8271c74e02cd4ebb">view</a>]</li> -<li>Wrong UTF 8 codes [<a href="http://github.com/doxygen/doxygen/commit/fd4beb272e5f1a760a71ab8d85463b8356c6f786">view</a>]</li> -<li>Fix broken links to subpages in LaTeX output [<a href="http://github.com/doxygen/doxygen/commit/10189681dcb46e543a287827e2096cef3dbc42ae">view</a>]</li> -<li>\xmlonly aoppeared twice in see also section of \htmlonly and \docbookonly [<a href="http://github.com/doxygen/doxygen/commit/f1cdb27194dd180f1bff1fbdd87874bb0d15758d">view</a>]</li> -<li>add css-escape to avoid jquery based xss [<a href="http://github.com/doxygen/doxygen/commit/7fea82094723ecfb4e9b3ea6819137b99d7dfa9c">view</a>]</li> -<li>add parameter [<a href="http://github.com/doxygen/doxygen/commit/c5bc9fc8c407aac845d594b2685d0c92699727d8">view</a>]</li> -<li>add search.py, a client for doxygen_sqlite3.db [<a href="http://github.com/doxygen/doxygen/commit/697ac97aad7fa045b6cc205050b69cf3f22408ad">view</a>]</li> -<li>add space between br and / for better compatibility [<a href="http://github.com/doxygen/doxygen/commit/2a40448c3855da250561fa4bac01179311831307">view</a>]</li> -<li>added option to have numbers in the bookmark pane (PDF output) [<a href="http://github.com/doxygen/doxygen/commit/62cf79095c4d02ff1c737e02f91f8dcea2175b9e">view</a>]</li> -<li>config.l: dependency checks for booleans [<a href="http://github.com/doxygen/doxygen/commit/5d64c0e2f39730bb5decd86a483a5b0823a67958">view</a>]</li> -<li>detect python2 as Python 2 binary [<a href="http://github.com/doxygen/doxygen/commit/3754cd80cae41b23dc1069245ad5acdc460b8809">view</a>]</li> -<li>fixed compile issue on Linux [<a href="http://github.com/doxygen/doxygen/commit/e3c636337323ba6e3f21bf1e8cfe2a899a8890c1">view</a>]</li> -<li>pass libclang header file location; add paths for Ubuntu's llvm-3.4 [<a href="http://github.com/doxygen/doxygen/commit/2613bf77ccbeee4721a17a8168dead071e41b45e">view</a>]</li> -<li>sqlite3: SQLITE_TRANSIENTs [<a href="http://github.com/doxygen/doxygen/commit/6f38dd245d56aaa9b6c8e966a4ccebe2f66ceb7d">view</a>]</li> -<li>sqlite3: add new searches to search.py [<a href="http://github.com/doxygen/doxygen/commit/c99422b0c7919e953811a3a06e18c7cacbacd7c6">view</a>]</li> -<li>sqlite3: clear bindings on errors and more care with return [<a href="http://github.com/doxygen/doxygen/commit/1a708967ba0c4a5604c1ac7d8f3c8112ec3e7044">view</a>]</li> -<li>sqlite3: extract more info [<a href="http://github.com/doxygen/doxygen/commit/cd4bdf6708194228434bed1f71d1cd698863aaaf">view</a>]</li> -<li>sqlite3: fedora has libsqlite3.so in /usr/lib64 [<a href="http://github.com/doxygen/doxygen/commit/49f65d1ee1c9005e019ec95a933ec5fcf02556c9">view</a>]</li> -<li>sqlite3: leave out insertMemberReference until xref location is valid [<a href="http://github.com/doxygen/doxygen/commit/2349f4b3ff931e334b3d3e09b3e03861a7630f86">view</a>]</li> -<li>sqlite3: remove some debug messages [<a href="http://github.com/doxygen/doxygen/commit/f76ec80dc8d1d7910951b34582ac25ce6f0efe4d">view</a>]</li> -<li>sqlite3: speedup the SELECTs [<a href="http://github.com/doxygen/doxygen/commit/d7f9bbedaa4b4fcc0253470d522149a2307d1020">view</a>]</li> -<li>sqlite3: updates [<a href="http://github.com/doxygen/doxygen/commit/2b80c416671220315a11287b6e10d5b3b2f852cc">view</a>]</li> -<li>sqlite3: use the new qtools API [<a href="http://github.com/doxygen/doxygen/commit/54fbd99c753e09b1c3850af6b8b4457d339b6e84">view</a>]</li> -<li>testsqlite3: a test for sqlite3gen [<a href="http://github.com/doxygen/doxygen/commit/733aaaa073a92a316ba888b6992f1172550dd469">view</a>]</li> -<li>util/patternMatch: break when pattern is found [<a href="http://github.com/doxygen/doxygen/commit/6d8c3184fadb1834223236b13471797089e4a004">view</a>]</li> -<li>util/patternMatch: don't extract a QCString(QFileInfo) each time we QRegExp.match [<a href="http://github.com/doxygen/doxygen/commit/8991d11cc824f40c11a28ccc38c09e9b10f722c3">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2479">2479</a> - c-source and h-source missing for latex [<a href="https://github.com/doxygen/doxygen/commit/d5d34325fb9bed776cf2b4facc0c341f701e780b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3879">3879</a> - FORTRAN: recognition free versus fixed formatted code [<a href="https://github.com/doxygen/doxygen/commit/2dec1060623165057628ee678eb3580351922408">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/3893">3893</a> - Latex $projectname with "&" gets no escaped [<a href="https://github.com/doxygen/doxygen/commit/586b3b69238fb09d55a03c5d50fc1b7d3e65ed97">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4179">4179</a> - Fortran: variable with name "type" confuses doxygen [<a href="https://github.com/doxygen/doxygen/commit/17c5b6160d013d118296663e133cf8884c74a939">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4683">4683</a> - Percent to prevent auto-linking in page title is not removed for navpath [<a href="https://github.com/doxygen/doxygen/commit/5d44acc0a49bd7b990bfe649efa312f5f0bb594b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4762">4762</a> - Nested \if messes up list items [<a href="https://github.com/doxygen/doxygen/commit/7f4414b92a1c2147b073dd3cf58e0db7c8a88be6">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4762">4762</a> - Nested \if messes up list items [<a href="https://github.com/doxygen/doxygen/commit/de502ca71fc1c20ed93209f6a223c488eee38297">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4870">4870</a> - Command ignored when using umlauts in markdown and also C-comments in markdown didn't work properly [<a href="https://github.com/doxygen/doxygen/commit/b4b40f4c7ea57655d1264e8f72c754526e3a9209">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5052">5052</a> - Notes in xml output are not correctly separated [<a href="https://github.com/doxygen/doxygen/commit/bc61f00f142792dfbe97c361d9fecd3ea2850f5e">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5254">5254</a> - Enables using unicode (non ASCII) to name output files [<a href="https://github.com/doxygen/doxygen/commit/d5fb69739a1b2facf32a63ca94c12d097f8278cc">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5258">5258</a> - Nested namespace causes incorrect display when referenced via .tag file [<a href="https://github.com/doxygen/doxygen/commit/1bdbbc60982f2f61f4e0423c9fc8c4a24cfb2e94">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5348">5348</a> - Documentation for enumeration not generated [<a href="https://github.com/doxygen/doxygen/commit/1bb36723a522b371810606c2f6504d0374a7b027">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5383">5383</a> - Code coloring in case of file without extension [<a href="https://github.com/doxygen/doxygen/commit/45934e88fa961686c00be1ad272a088f4e7eac0b">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5387">5387</a> - Trouble with /cond /endcond [<a href="https://github.com/doxygen/doxygen/commit/2912829ca5bced897a2c063d1883b9cfd39d3bd9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5388">5388</a> - Wrong call graph in simple situation [<a href="https://github.com/doxygen/doxygen/commit/e12d6b506862c8ad843b7853bc1c9ceb5d0ccb4d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5389">5389</a> - [Latex/PDF] Merging brief and detailed description in file section [<a href="https://github.com/doxygen/doxygen/commit/a99c33838057acba20768ca32681e1f379f36ca0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5390">5390</a> - Parsing problem with C++11 empty initializer lists [<a href="https://github.com/doxygen/doxygen/commit/1bfacc3b8e589907352eff923b7b3aa73cfc5138">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5393">5393</a> - Move constructors and move assignment operators of embedded classes of template classes cannot be matched. [<a href="https://github.com/doxygen/doxygen/commit/1d0c9b6fefb6c2e0a9a2b7a7ea3192ccace33710">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5396">5396</a> - Dia diagrams not displayed by Firefox [<a href="https://github.com/doxygen/doxygen/commit/5ea2f2a123e473d5964435369fd925d7f103b456">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5404">5404</a> - regression referencing namespaced type [<a href="https://github.com/doxygen/doxygen/commit/9b76c1a9bb7039962933aeef398bb7aa2f59c3a5">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5408">5408</a> - doxygen nested \if \endif sample not working [<a href="https://github.com/doxygen/doxygen/commit/cc78b12b0019fbcb17692b231d38ba75d0952201">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5410">5410</a> - doxygen 1.8.6 sorts the contents of a namespace by group within the Class List [<a href="https://github.com/doxygen/doxygen/commit/f9b80aff6d20524dd0838aff12033fe3df66ba98">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5414">5414</a> - Link refs with no title swallow an extra newline [<a href="https://github.com/doxygen/doxygen/commit/60ea06a68f2e355e34b61bf45babc6405bfbfe84">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5415">5415</a> - Documentation for derived classes no longer has an "Additional Inherited Members" section after upgrading doxygen from 1.8.3.1 to 1.8.6 [<a href="https://github.com/doxygen/doxygen/commit/0e9da9fb27147c5685088019afd428a0aaa901fa">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5416">5416</a> - configure --prefix=/opt/foo not accepted [<a href="https://github.com/doxygen/doxygen/commit/bc7e6301e2d1474592f6cd6cc07624852d1b5016">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5417">5417</a> - Command \| not working when last character in markdown table line [<a href="https://github.com/doxygen/doxygen/commit/8309fbd9e639eaf9e763e83ca7a228c659450a57">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5421">5421</a> - Last line of code block lost if it is only one character and there is no text afterward [<a href="https://github.com/doxygen/doxygen/commit/4d1951ebb648bbc92464904305cafc7fc0dba557">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5422">5422</a> - Doxygen crashes on incorrect end group /**< @} */ [<a href="https://github.com/doxygen/doxygen/commit/b4d5ef176eced8315523baea464cfda733ecb9aa">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5424">5424</a> - star is not printed in \code environment [<a href="https://github.com/doxygen/doxygen/commit/0eaf1cd5d2eac57666b5ffea9e0f948b7a3e6b3a">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5425">5425</a> - Internal inconsistency: namespace in IDL [<a href="https://github.com/doxygen/doxygen/commit/b0456fbefa864b33611f289818deeaaf791c17c9">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5428">5428</a> - Server side (PHP) search broke in 1.8.3 [<a href="https://github.com/doxygen/doxygen/commit/1d2bb19e394850ecb37bea06ef4e5d15fe06e7b0">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5436">5436</a> - python3 import style causes doxygen to ignore some inheritances [<a href="https://github.com/doxygen/doxygen/commit/513ce9aafd05add9b5c1e67e843e540f8937cf63">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5437">5437</a> - Markdown Extra - fenced code block: '>' before tab width parsed as block quote [<a href="https://github.com/doxygen/doxygen/commit/3598e8fdf7ee61a281480fec09f63669710ac35d">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5438">5438</a> - Tilde sign in combination with <pre> and MARKDOWN_SUPPORT disabled [<a href="https://github.com/doxygen/doxygen/commit/721764a1b3c63c77ff0792beb6c37fbfee0f87bb">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5439">5439</a> - Blockquote followed by text inserts an extra paragraph [<a href="https://github.com/doxygen/doxygen/commit/518fccbbadba3136a29c895f3606f40fa220fe47">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5440">5440</a> - alignment of blockquotes in pdf [<a href="https://github.com/doxygen/doxygen/commit/9059295fd6e178804f2f2d95ffe3764645ecc026">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5449">5449</a> - Build fails when --with-libclang on Fedora [<a href="https://github.com/doxygen/doxygen/commit/837d63319a7b014412cb3cb2b5d27d2474a932c2">view</a>]</li> +<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5456">5456</a> - Crash on \addindex \term [<a href="https://github.com/doxygen/doxygen/commit/653a2a8b123b79835af9f684f8b92ef7f88712aa">view</a>]</li> +<li>A new files have been added but is not incorporated in the windows build part [<a href="https://github.com/doxygen/doxygen/commit/d9dd873e25fba968ddcbcc79d6643f5df669b626">view</a>]</li> +<li>Add docbook directory to be removed as well [<a href="https://github.com/doxygen/doxygen/commit/08ea10029e705a388ab14ee29544d496a203f23f">view</a>]</li> +<li>Add extra (documenattion) directories to ignore pattern [<a href="https://github.com/doxygen/doxygen/commit/db358b1f219fecf0d7df96d8c70b47b245471c66">view</a>]</li> +<li>Add index support to context [<a href="https://github.com/doxygen/doxygen/commit/12cd22f4c32ed8b92da7b5a03181aa6735018a5b">view</a>]</li> +<li>Add line numbers in case comment is not closed properly. [<a href="https://github.com/doxygen/doxygen/commit/b1d513b2ac65fe26ceec2fa494867713efa01cd5">view</a>]</li> +<li>Add template context for annotated class index [<a href="https://github.com/doxygen/doxygen/commit/9434ecb13e1f3e2901b78d3e41e7f1d7d9469434">view</a>]</li> +<li>Add validation of internal consistency to html entity mapper [<a href="https://github.com/doxygen/doxygen/commit/d96458ce99b92590a8fec0aba46c67b6816fa632">view</a>]</li> +<li>Add warning when encountering a nested comment start (/*) without matching end (*/). [<a href="https://github.com/doxygen/doxygen/commit/7f30d0afbeb9565bced1439f86ce9f862de5282e">view</a>]</li> +<li>Added \latexinclude command (thanks to Juan Zaratiegui for the patch) [<a href="https://github.com/doxygen/doxygen/commit/1134237afe25f86fcf7c7e2a76a3542eee8acc79">view</a>]</li> +<li>Added basic arithmetic operations to the template expressions, and made the expression lexer faster [<a href="https://github.com/doxygen/doxygen/commit/5af2b7c0aef5cd6a0dc6ceddcffba16f623d920a">view</a>]</li> +<li>Added dir tree nodes to the context [<a href="https://github.com/doxygen/doxygen/commit/762ee821bb0bef125d5406572963ce32c748e227">view</a>]</li> +<li>Added directory info to the context [<a href="https://github.com/doxygen/doxygen/commit/47adeb82d67208db88a4aaae5c3427291462611a">view</a>]</li> +<li>Added doc/config.doc to .gitignore [<a href="https://github.com/doxygen/doxygen/commit/fa400a0252d12db3ffd30eb083e5185f11264112">view</a>]</li> +<li>Added language update for Swedish (thanks to Björn Palmqvist) [<a href="https://github.com/doxygen/doxygen/commit/eec2140f577431915ed087727093c5bf381500ba">view</a>]</li> +<li>Added last and first attributes to index tree node [<a href="https://github.com/doxygen/doxygen/commit/ff5ec803a39b225e03edcd1bf2df3198dafcc16e">view</a>]</li> +<li>Added missing \+ command to build LaTeX manual [<a href="https://github.com/doxygen/doxygen/commit/c096119b0c0bfc567058538b6225ca26eb191a3a">view</a>]</li> +<li>Added new language maintainer for Swedish, removed generated file language.doc [<a href="https://github.com/doxygen/doxygen/commit/f3172cf19514fc05588878d3fabfffe479495cca">view</a>]</li> +<li>Added optional [block] option to \htmlonly [<a href="https://github.com/doxygen/doxygen/commit/842c816a31537e32cec376c85c0a4363f74d7a54">view</a>]</li> +<li>Added reference counting for all context objects [<a href="https://github.com/doxygen/doxygen/commit/ff00706a18b6e57419796ffd6f1448cb2ccb9436">view</a>]</li> +<li>Added stricter URL filtering to prevent DOM Based XSS when the tree view is enabled [<a href="https://github.com/doxygen/doxygen/commit/8ba739ad1ecde1036bfe2e364aee378e137f6dff">view</a>]</li> +<li>Added support for \-- and \--- to prevent interpretation as ndash and mdash [<a href="https://github.com/doxygen/doxygen/commit/385b87e08c23b1392d0e6d6fbdb6ef463fa28477">view</a>]</li> +<li>Added support for elif to the template language [<a href="https://github.com/doxygen/doxygen/commit/ae3a22ba276a2e446a460274e0bff8a9bdf4af7d">view</a>]</li> +<li>Added support for range tag in the template language [<a href="https://github.com/doxygen/doxygen/commit/b98846d0b57b78cd45d34e0962a8bcdc2e643e18">view</a>]</li> +<li>Alternative way to get rules information from flex [<a href="https://github.com/doxygen/doxygen/commit/224fa96dd9c9245bfdf68ee6f92160b7aa05f8d1">view</a>]</li> +<li>Better message in case doxygen -u is used [<a href="https://github.com/doxygen/doxygen/commit/cfd8c2415e7d0744a00bf1990f26aab538940f20">view</a>]</li> +<li>Changed "See Also" back to "See also" [<a href="https://github.com/doxygen/doxygen/commit/0754c968a4a06c8217c9301a5ca82c6212c228ec">view</a>]</li> +<li>Chm don't add images multiple times [<a href="https://github.com/doxygen/doxygen/commit/3b339813794390bdce59fa1009cf71506e0cec2b">view</a>]</li> +<li>Command \< and \> are not properly shown in section headers (and consequently in index) [<a href="https://github.com/doxygen/doxygen/commit/04a8ce9a8e2f022c21a5728ffdfb029258fa54e9">view</a>]</li> +<li>Consistency of usage of the word LaTeX in the documentation [<a href="https://github.com/doxygen/doxygen/commit/d63a7d8812c7f748a48d76bfc39ce57f79f6f667">view</a>]</li> +<li>Context enhancement [<a href="https://github.com/doxygen/doxygen/commit/92d53a473074a78735d25bbef02715b3caced569">view</a>]</li> +<li>Corrected some definitions for some Fortran keywords [<a href="https://github.com/doxygen/doxygen/commit/d4aa05e171d27cc17b177078d3ff481441087da4">view</a>]</li> +<li>Disabled config dependency check to avoid regression [<a href="https://github.com/doxygen/doxygen/commit/904ad3fbdc5e1615fdb052ba8562fc9b1329cd81">view</a>]</li> +<li>Documentation corrections [<a href="https://github.com/doxygen/doxygen/commit/4b51e6113f1e9e20a5700840d83f1c3928d84825">view</a>]</li> +<li>Enable Previous and Next buttons in chm output file [<a href="https://github.com/doxygen/doxygen/commit/e6a78b6b2573388353bdb5dcd7a13dcc11959d13">view</a>]</li> +<li>Enabling possibility to have { and } in (latex) index items [<a href="https://github.com/doxygen/doxygen/commit/dd2c137847e16d0a7c6086053f55bce501d84a0c">view</a>]</li> +<li>Error message is given for make distclean as generated_src is a directory [<a href="https://github.com/doxygen/doxygen/commit/76701e2bfb688ac22a751c4f03b28fa9d5f594f7">view</a>]</li> +<li>Extension in config.xml if type=string with format=image [<a href="https://github.com/doxygen/doxygen/commit/025cc9def72002d4ab6da7bfee8a73c03ca7c331">view</a>]</li> +<li>Extension specific filtering [<a href="https://github.com/doxygen/doxygen/commit/425e64e2ee52b92a2c0c8f6fb5457bf95b95e5bf">view</a>]</li> +<li>Fix id parsing for atx markdown headers [<a href="https://github.com/doxygen/doxygen/commit/ee830bb8888535ac48c0c4fd90580542e7f70481">view</a>]</li> +<li>Fix segfault on invalid bounding FIG when patching dot [<a href="https://github.com/doxygen/doxygen/commit/1bd2e38a2ce2d0823557381c48fe47cb53d6fba8">view</a>]</li> +<li>Fix to VHDL scanner. [<a href="https://github.com/doxygen/doxygen/commit/5ca7d423a11337d5c31082f52a287a3dc0986642">view</a>]</li> +<li>Fix typos in russian translation [<a href="https://github.com/doxygen/doxygen/commit/8ce2b0d7aec1d4398b5b4f365a7d3abbe75daf5f">view</a>]</li> +<li>Fixed Tidy's 'empty span' warning in HTML output [<a href="https://github.com/doxygen/doxygen/commit/8cfac90d6c8632436db1a6b650a05a8dfcfab5d0">view</a>]</li> +<li>Fixed compiler warnings in section.h [<a href="https://github.com/doxygen/doxygen/commit/683ef76f7bf1ba929f9c263064bb5f6c8e377275">view</a>]</li> +<li>Fixed difference between generated XML schema and XML files for HTML entities [<a href="https://github.com/doxygen/doxygen/commit/836af2f9510d10f2dd7d832025f214983387b3c6">view</a>]</li> +<li>Fixed issues with @parblock and added regression test case [<a href="https://github.com/doxygen/doxygen/commit/2ed3d33a92dbcdf0a0149c5f06909926e44cdebd">view</a>]</li> +<li>Fixed issues with SEPARATE_MEMBER_PAGES and INLINE_SIMPLE_STRUCTS [<a href="https://github.com/doxygen/doxygen/commit/a9f93437b6b2b9686e1b4f2e691782c6ebe99c26">view</a>]</li> +<li>Fixed memory leak in nested comment administration [<a href="https://github.com/doxygen/doxygen/commit/2514ba72e53473f8dd424efdbef34287c8a3fd56">view</a>]</li> +<li>Fixed off-by one error for last character in compound.xsd [<a href="https://github.com/doxygen/doxygen/commit/61b00c0061eda805696fe6f90db15136811e1ed7">view</a>]</li> +<li>Fixed potential crash caused by overloading the variadic warn function [<a href="https://github.com/doxygen/doxygen/commit/31505eb34565b2e39d113b7f5460645d02ad6d2e">view</a>]</li> +<li>Fixed problem handling Obj-C protocol list when proceeded by a newline [<a href="https://github.com/doxygen/doxygen/commit/09a5fc198a98d697d3e50c1c76392b8373f1af12">view</a>]</li> +<li>Fixed problem with ending a paragraph when htmlonly was at the end of a comment block [<a href="https://github.com/doxygen/doxygen/commit/8d03b3f35e404abfd0ed31022a687fc1eab07fd5">view</a>]</li> +<li>Fixed typo in changelog [<a href="https://github.com/doxygen/doxygen/commit/8f58d6dd7c3d0f6004d127bf111f76e4a4478516">view</a>]</li> +<li>Fixed typo in doxyindexer.vcproj [<a href="https://github.com/doxygen/doxygen/commit/2bc8a820b3e2fefaedb10a3129eed35581a1ea5b">view</a>]</li> +<li>Fixes for missing build dependencies [<a href="https://github.com/doxygen/doxygen/commit/62379ff8fdb13d95c7651419d92db47150e15bcc">view</a>]</li> +<li>Give message when PROJECT_LOGO cannot be found or cannot be converted [<a href="https://github.com/doxygen/doxygen/commit/164864d9bc8ea7e32a69fbc0e47cff54dc678a48">view</a>]</li> +<li>Handlingh of -- by \c and <code> results in - adjusted documentation [<a href="https://github.com/doxygen/doxygen/commit/73d12cc5cf0656e94125baea62cdb19b67908b3d">view</a>]</li> +<li>Improve rendering of sub and superscripts in LaTeX [<a href="https://github.com/doxygen/doxygen/commit/a7c7f36ea2a67969bf3916c7600fe487e34438c0">view</a>]</li> +<li>Improved handling of percent symbol [<a href="https://github.com/doxygen/doxygen/commit/0e080f486f67008ef427c834f6ab6ebca7578124">view</a>]</li> +<li>Improved performance of rendering large index pages, by replacing images in the tables by spans [<a href="https://github.com/doxygen/doxygen/commit/956a7fb004e72923f737e387d053812f99b7bda2">view</a>]</li> +<li>In case of sections with the same name they are not reported. [<a href="https://github.com/doxygen/doxygen/commit/ac611be473c2d9bf65bcafb53b0577274c4ae706">view</a>]</li> +<li>Inconsistency in usage of simplesecr versus simplesectsep corrected [<a href="https://github.com/doxygen/doxygen/commit/bc46b90c42470e238a6e038f49a7423796a8c2e3">view</a>]</li> +<li>Inconsistency in usage of simplesecr versus simplesectsep corrected [<a href="https://github.com/doxygen/doxygen/commit/c5bedcdc2e3b6c519aae62ff1a08d4ec808cce6b">view</a>]</li> +<li>Incorrect handling dependencies [<a href="https://github.com/doxygen/doxygen/commit/bfcfa6fc73942b80cb22e2900438dc99d844a78e">view</a>]</li> +<li>Items XML_SCHEMA and XML_DTD declared obsolete [<a href="https://github.com/doxygen/doxygen/commit/ba31ee73aad3bdc6b3854add2db01c302c9cf19c">view</a>]</li> +<li>List only the project pages in "Related Pages" [<a href="https://github.com/doxygen/doxygen/commit/a2c7f91d6320f72951f1e3ef092e077a89562670">view</a>]</li> +<li>Made documentation more consistent [<a href="https://github.com/doxygen/doxygen/commit/b81fe14c7fe8b3eaafa4ce8ddcd0f1815c2c7ff0">view</a>]</li> +<li>Make sure all ids in g_linkRefs are lower case [<a href="https://github.com/doxygen/doxygen/commit/3df31762585075033a04e40c3cdfb52781aa258f">view</a>]</li> +<li>Make the MAN_SUBDIR setting override the name of the directory the man pages are placed in. [<a href="https://github.com/doxygen/doxygen/commit/83b344db49b27bf68994eb8ec6be87d6d0f24e86">view</a>]</li> +<li>Meta tag in the HTML search page was not closed properly [<a href="https://github.com/doxygen/doxygen/commit/4ccfb9efa8382de50dfc5b176cb147fd1b05870c">view</a>]</li> +<li>Minor fixes for the new build locations [<a href="https://github.com/doxygen/doxygen/commit/d86520ef4920a9a47a4d6e33eadfc62b8b983748">view</a>]</li> +<li>Missing & and chars after " in tree of chm documentation [<a href="https://github.com/doxygen/doxygen/commit/89638fbc9961bd9a1e9cb7bc25e5f739936e8a43">view</a>]</li> +<li>More context changes [<a href="https://github.com/doxygen/doxygen/commit/196f39515ec5f9fdcbda68046f48a1d1a8250854">view</a>]</li> +<li>More work on the template and context mechanisms [<a href="https://github.com/doxygen/doxygen/commit/744d1ca52e25dfa9e3d656056d87ed7cb6320585">view</a>]</li> +<li>On windows citelist.doc remains [<a href="https://github.com/doxygen/doxygen/commit/3c941f24ee93687c197363fa2d4b787512878eab">view</a>]</li> +<li>Place where dot executable is found [<a href="https://github.com/doxygen/doxygen/commit/90ecc2487146e0cdd392047342a30fd13453b233">view</a>]</li> +<li>Properly escape the XCODE path. [<a href="https://github.com/doxygen/doxygen/commit/0cc8f6b2a14fdeb6d6769d34edb035b755d1299f">view</a>]</li> +<li>Pull out property names in Objective-C. [<a href="https://github.com/doxygen/doxygen/commit/f4ff0ea8b11560ce718bb41b63bdf793cd333f27">view</a>]</li> +<li>Recognize all HTML4 special character entities [<a href="https://github.com/doxygen/doxygen/commit/1bd64ac0e925ba2ff069ec64c026ea3c32f85600">view</a>]</li> +<li>Reduced and improved functionality of QList [<a href="https://github.com/doxygen/doxygen/commit/6e51abf63021dc9fe32c05f003232fe68a08591d">view</a>]</li> +<li>Removed config.doc as it is generated by configgen.py [<a href="https://github.com/doxygen/doxygen/commit/a642629761d43d53f3ade41c78530d0c7228a84d">view</a>]</li> +<li>Removed generated file src/settings.h from source repository [<a href="https://github.com/doxygen/doxygen/commit/43461e44d49200fd1564c4e416db7384e7e5eab8">view</a>]</li> +<li>Removed message, minor restructuring [<a href="https://github.com/doxygen/doxygen/commit/ea436bd659e022d6375dd37f651d4bb18a1c01db">view</a>]</li> +<li>Removed remark about installdox from the FAQ [<a href="https://github.com/doxygen/doxygen/commit/68080883535bb146e2e4f65943c8b836da6b68e0">view</a>]</li> +<li>Restructured html entity handling [<a href="https://github.com/doxygen/doxygen/commit/dfa20277697fe904a0846b60a01cc388fc13c933">view</a>]</li> +<li>Reverted #132 after submitter reported that it did not work [<a href="https://github.com/doxygen/doxygen/commit/fdc81edcd47ce176648d7507d0597294098ae8aa">view</a>]</li> +<li>Showing error message on windows in case on error on startup [<a href="https://github.com/doxygen/doxygen/commit/6a0651d9328262271ade2b733c125aae4415e3c3">view</a>]</li> +<li>Simplified LaTeX header/footer escaping [<a href="https://github.com/doxygen/doxygen/commit/3337add3a6e05e26800c9e269b23fff272a9534c">view</a>]</li> +<li>Some restructuring and some compiler warning fixes [<a href="https://github.com/doxygen/doxygen/commit/941eea998d6b9608b8fc586069ef90e805d771f5">view</a>]</li> +<li>Spitting generated files better from source files [<a href="https://github.com/doxygen/doxygen/commit/8885016b2a3bbeb6045a3e71d508939e0a7bd773">view</a>]</li> +<li>Superfluous < sign [<a href="https://github.com/doxygen/doxygen/commit/599700e6e72d687b6597cfbe2453474b231640ea">view</a>]</li> +<li>Superfluous backslash in documentation [<a href="https://github.com/doxygen/doxygen/commit/be5f9c70bcf38f9bce58e4b8e293dab6aea754fd">view</a>]</li> +<li>Superfluous include removed [<a href="https://github.com/doxygen/doxygen/commit/0e12f6bfa938b675f827074eb3693eff362e6b96">view</a>]</li> +<li>Undo previous commit [<a href="https://github.com/doxygen/doxygen/commit/1b5d5e53a7fce8136f9ab0ce82c95a8f9d479574">view</a>]</li> +<li>Unified DirFileContext and NestingContext [<a href="https://github.com/doxygen/doxygen/commit/df839603204979113b96678e2ab21b3eba64476c">view</a>]</li> +<li>Update doctokenizer.l [<a href="https://github.com/doxygen/doxygen/commit/68cf977ee72f8914678e30e3a88f0e9d90703418">view</a>]</li> +<li>Update doctokenizer.l [<a href="https://github.com/doxygen/doxygen/commit/ea1ee635fccbba4273a922dab3d092dd75b195e0">view</a>]</li> +<li>Updated copyright [<a href="https://github.com/doxygen/doxygen/commit/a28ff2331d8e228d901cd6f0b038f76e1cee630a">view</a>]</li> +<li>Use \newline i.s.o. \par for linebreaks in LaTeX [<a href="https://github.com/doxygen/doxygen/commit/7e719d1ad5da33ccb3f54a90ae11dee58828b6ab">view</a>]</li> +<li>Use hook arrow for hyphens in symbol names in the LaTeX output. [<a href="https://github.com/doxygen/doxygen/commit/ac813134a85ba9bd999fb4cf8271c74e02cd4ebb">view</a>]</li> +<li>Wrong UTF 8 codes [<a href="https://github.com/doxygen/doxygen/commit/fd4beb272e5f1a760a71ab8d85463b8356c6f786">view</a>]</li> +<li>Fix broken links to subpages in LaTeX output [<a href="https://github.com/doxygen/doxygen/commit/10189681dcb46e543a287827e2096cef3dbc42ae">view</a>]</li> +<li>\xmlonly aoppeared twice in see also section of \htmlonly and \docbookonly [<a href="https://github.com/doxygen/doxygen/commit/f1cdb27194dd180f1bff1fbdd87874bb0d15758d">view</a>]</li> +<li>add css-escape to avoid jquery based xss [<a href="https://github.com/doxygen/doxygen/commit/7fea82094723ecfb4e9b3ea6819137b99d7dfa9c">view</a>]</li> +<li>add parameter [<a href="https://github.com/doxygen/doxygen/commit/c5bc9fc8c407aac845d594b2685d0c92699727d8">view</a>]</li> +<li>add search.py, a client for doxygen_sqlite3.db [<a href="https://github.com/doxygen/doxygen/commit/697ac97aad7fa045b6cc205050b69cf3f22408ad">view</a>]</li> +<li>add space between br and / for better compatibility [<a href="https://github.com/doxygen/doxygen/commit/2a40448c3855da250561fa4bac01179311831307">view</a>]</li> +<li>added option to have numbers in the bookmark pane (PDF output) [<a href="https://github.com/doxygen/doxygen/commit/62cf79095c4d02ff1c737e02f91f8dcea2175b9e">view</a>]</li> +<li>config.l: dependency checks for booleans [<a href="https://github.com/doxygen/doxygen/commit/5d64c0e2f39730bb5decd86a483a5b0823a67958">view</a>]</li> +<li>detect python2 as Python 2 binary [<a href="https://github.com/doxygen/doxygen/commit/3754cd80cae41b23dc1069245ad5acdc460b8809">view</a>]</li> +<li>fixed compile issue on Linux [<a href="https://github.com/doxygen/doxygen/commit/e3c636337323ba6e3f21bf1e8cfe2a899a8890c1">view</a>]</li> +<li>pass libclang header file location; add paths for Ubuntu's llvm-3.4 [<a href="https://github.com/doxygen/doxygen/commit/2613bf77ccbeee4721a17a8168dead071e41b45e">view</a>]</li> +<li>sqlite3: SQLITE_TRANSIENTs [<a href="https://github.com/doxygen/doxygen/commit/6f38dd245d56aaa9b6c8e966a4ccebe2f66ceb7d">view</a>]</li> +<li>sqlite3: add new searches to search.py [<a href="https://github.com/doxygen/doxygen/commit/c99422b0c7919e953811a3a06e18c7cacbacd7c6">view</a>]</li> +<li>sqlite3: clear bindings on errors and more care with return [<a href="https://github.com/doxygen/doxygen/commit/1a708967ba0c4a5604c1ac7d8f3c8112ec3e7044">view</a>]</li> +<li>sqlite3: extract more info [<a href="https://github.com/doxygen/doxygen/commit/cd4bdf6708194228434bed1f71d1cd698863aaaf">view</a>]</li> +<li>sqlite3: fedora has libsqlite3.so in /usr/lib64 [<a href="https://github.com/doxygen/doxygen/commit/49f65d1ee1c9005e019ec95a933ec5fcf02556c9">view</a>]</li> +<li>sqlite3: leave out insertMemberReference until xref location is valid [<a href="https://github.com/doxygen/doxygen/commit/2349f4b3ff931e334b3d3e09b3e03861a7630f86">view</a>]</li> +<li>sqlite3: remove some debug messages [<a href="https://github.com/doxygen/doxygen/commit/f76ec80dc8d1d7910951b34582ac25ce6f0efe4d">view</a>]</li> +<li>sqlite3: speedup the SELECTs [<a href="https://github.com/doxygen/doxygen/commit/d7f9bbedaa4b4fcc0253470d522149a2307d1020">view</a>]</li> +<li>sqlite3: updates [<a href="https://github.com/doxygen/doxygen/commit/2b80c416671220315a11287b6e10d5b3b2f852cc">view</a>]</li> +<li>sqlite3: use the new qtools API [<a href="https://github.com/doxygen/doxygen/commit/54fbd99c753e09b1c3850af6b8b4457d339b6e84">view</a>]</li> +<li>testsqlite3: a test for sqlite3gen [<a href="https://github.com/doxygen/doxygen/commit/733aaaa073a92a316ba888b6992f1172550dd469">view</a>]</li> +<li>util/patternMatch: break when pattern is found [<a href="https://github.com/doxygen/doxygen/commit/6d8c3184fadb1834223236b13471797089e4a004">view</a>]</li> +<li>util/patternMatch: don't extract a QCString(QFileInfo) each time we QRegExp.match [<a href="https://github.com/doxygen/doxygen/commit/8991d11cc824f40c11a28ccc38c09e9b10f722c3">view</a>]</li> </ul> <p> \endhtmlonly @@ -1298,7 +1698,8 @@ <li> Space missing in error message. the word 'in' and the vale of filesOption were concatenated</li> <li> This patch contains changes regarding the build system so that the *nix and Windows systems use the same information (consistency). Some use names routine names have been changed (from .l files with -P option) to reflect the file name that generated the routines, this makes it easier to create a general procedure. A number of include / header files are files are generated from different file types (html, xml, js), due some limitations of the windows build system the generated file names had to be changed (the extension in the windows build system is only available including the '.' so e.g. the file jquery_fx.js generates now jquery_fx.js.h instead of jquery_fx_js.h) In the windows version the creation of .cpp files from .l files has been adjusted to correct for the YY_BUF_SIZE problems. Furthermore on windows (and also used on *nix) some commands have been replaced with python scripts so that on windows only python is need (besides flex and bison). On *nix also perl is required for the generation using tmake.</li> <li> Updated Visual Studio project files to include new source files</li> -<li> Usage of the -d option corrected Giving an error when a wrong -d option is given. Made some error messages more consistent. Corrected usage of the exit call, in case of an error: exit(1) otherwise exit(0). A closer look should be made on exitDoxygen as it does not contain any exit statements and it is unclear (to me) when it is used.</li> <li> VHDL-2008 and arrays on unconstrained elements</li> +<li> Usage of the -d option corrected Giving an error when a wrong -d option is given. Made some error messages more consistent. Corrected usage of the exit call, in case of an error: exit(1) otherwise exit(0). A closer look should be made on exitDoxygen as it does not contain any exit statements and it is unclear (to me) when it is used.</li> +<li> VHDL-2008 and arrays on unconstrained elements</li> <li> consider currentFile when searching for global symbols</li> <li> doc/language.doc generated from the updated sources (bgcolored)</li> <li> doc/language.tpl -- UTF-8 reflected in the langhowto template</li> @@ -2037,8 +2438,7 @@ make sure you add the following: <script type="text/javascript" src="$relpath$jquery.js"></script> <script type="text/javascript" src="$relpath$dynsections.js"></script></pre><p> Otherwise the interactivity of the trees does not work. - </p> -</li> + </p> </li> <li> Included a couple of performance improvements (thanks to Dirk Reiners)</li> <li> Changed the way member attributes (like protected, virtual, and static) are rendered in the HTML output.</li> @@ -2206,7 +2606,7 @@ make sure you add the following: Note that doxygen uses a relative indent of 4 spaces, not an absolute indent like Markdown does. </li> <li> Markdown style hyperlinks and hyperlink references.</li> - <li> Simple tables can be created using the <a href="http://michelf.com/projects/php-markdown/extra/#table">Markdown Extra format</a>.</li> + <li> Simple tables can be created using the <a href="https://michelf.ca/projects/php-markdown/extra/#table">Markdown Extra format</a>.</li> <li> <a href="http://freewisdom.org/projects/python-markdown/Fenced_Code_Blocks">Fenced code blocks</a> are also supported, include language selection.</li> <li> files with extension .md or .markdown are converted to related pages.</li> </ul> @@ -2317,7 +2717,7 @@ make sure you add the following: <a name="1.7.6.1"></a> </p> <h1>Doxygen Release 1.7.6.1</h1> -<h2>(release date 10-12-2011)</h2> +<b>(release date 10-12-2011)</b> <h3>Changes</h3> <ul> <li> Doxygen now reports its cache usage (for the symbol and the @@ -2346,7 +2746,7 @@ make sure you add the following: </ul> <a name="1.7.6"></a> <h1>Doxygen Release 1.7.6</h1> -<h2>(release date 03-12-2011)</h2> +<b>(release date 03-12-2011)</b> <h3>Changes</h3> <ul> <li> To improve the performance of loading the navigation tree, @@ -2437,7 +2837,7 @@ make sure you add the following: </ul> <a name="1.7.5.1"></a> <h1>Doxygen Release 1.7.5.1</h1> -<h2>(release date 21-08-2011)</h2> +<b>(release date 21-08-2011)</b> <h3>New features</h3> <ul> <li>Update of the French translation.</li> @@ -2453,7 +2853,7 @@ make sure you add the following: </ul> <a name="1.7.5"></a> <h1>Doxygen Release 1.7.5</h1> -<h2>(release date 14-08-2011)</h2> +<b>(release date 14-08-2011)</b> <h3>Changes</h3> <ul> <li> id <a href="https://github.com/doxygen/doxygen/issues/4145">4145</a>: Function in the call graphs are now shown based on first @@ -2490,7 +2890,7 @@ make sure you add the following: <li> PHP namespaces are now shown as A\B in the output.</li> <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> + <a href="commands.html#cmdsnippet">\snippet</a> for more info.</li> <li> Added translation support for Armenian, thank to Armen Tangamyan. and included translation updates for a number of languages.</li> </ul> @@ -2596,7 +2996,7 @@ make sure you add the following: </ul> <a name="1.7.4"></a> <h1>Doxygen Release 1.7.4</h1> -<h2>(release date 28-03-2011)</h2> +<b>(release date 28-03-2011)</b> <h3>Changes</h3> <ul> <li> doxygen -w html now reads the default Doxyfile even if not specified @@ -2683,7 +3083,7 @@ make sure you add the following: </ul> <a name="1.7.3"></a> <h1>Doxygen Release 1.7.3</h1> -<h2>(release date 03-01-2011)</h2> +<b>(release date 03-01-2011)</b> <h3>Changes</h3> <ul> <li> Added a header for each HTML page above the navigation menu, @@ -2769,7 +3169,7 @@ make sure you add the following: </ul> <a name="1.7.2"></a> <h1>Doxygen Release 1.7.2</h1> -<h2>(release date 09-10-2010)</h2> +<b>(release date 09-10-2010)</b> <h3>Changes</h3> <ul> @@ -2869,14 +3269,14 @@ make sure you add the following: <li> id <a href="https://github.com/doxygen/doxygen/issues/3963">3963</a>: Inconsistent behaviour when a brief description was given following by a detailed comment block with JAVADOC_AUTOBRIEF enabled.</li> <li> Fixed a number of typos in the documentation - (thanks to Albert van der Meer)</li> + (thanks to Albert)</li> <li> Fixed potential hangup when scanning directories defined as symlinks to absolute paths.</li> <li> HTML attributes other than src were not copied for the <img> tag.</li> </ul> <a name="1.7.1"></a> <h1>Doxygen Release 1.7.1</h1> -<h2>(release date 25-06-2010)</h2> +<b>(release date 25-06-2010)</b> <h3>Changes</h3> <ul> <li> id <a href="https://github.com/doxygen/doxygen/issues/3803">3803</a>: Made warning and error messages appear with lower case @@ -2928,7 +3328,7 @@ make sure you add the following: <a name="1.7.0"></a> <h1>Doxygen Release 1.7.0</h1> -<h2>(release date 15-06-2010)</h2> +<b>(release date 15-06-2010)</b> <h3>Changes</h3> <ul> <li> Changed the look of the HTML output.</li> @@ -3062,7 +3462,7 @@ make sure you add the following: <a name="1.6.3"></a> </p> <h1>Doxygen Release 1.6.3</h1> -<h2>(release date 21-02-2010)</h2> +<b>(release date 21-02-2010)</b> <h3>New features</h3> <ul> <li> id <a href="https://github.com/doxygen/doxygen/issues/3654">3654</a>: Using \dir without argument will create directory @@ -3124,7 +3524,7 @@ make sure you add the following: <a name="1.6.2"></a> <h1>Doxygen Release 1.6.2</h1> -<h2>(release date 30-12-2009)</h2> +<b>(release date 30-12-2009)</b> <h3>Changes</h3> <ul> <li> id <a href="https://github.com/doxygen/doxygen/issues/3513">3513</a>: Autolinking to all-lower case words has been disabled, @@ -3144,7 +3544,7 @@ make sure you add the following: to generate an index file that can be used to embed doxygen's HTML output into Eclipse as a help plugin (thanks to a patch by Ondrej Starek).</li> -<li> Wrote new <a href="http://www.doxygen.org/searching.html">documentation</a> +<li> Wrote new <a href="searching.html">documentation</a> regarding the methods of searching in the HTML output.</li> <li> Included patch by Ed Rosten to render formulas with proper anti-aliasing on non-white backgrounds using transparency.</li> @@ -3230,7 +3630,7 @@ make sure you add the following: <a name="1.6.1"></a> <h1>Doxygen Release 1.6.1</h1> -<h2>(release date 25-08-2009)</h2> +<b>(release date 25-08-2009)</b> <h3>Bug fixes</h3> <ul> <li> Fixed file handle leak when parsing include files. Also fixed @@ -3246,8 +3646,9 @@ make sure you add the following: <li> id <a href="https://github.com/doxygen/doxygen/issues/3489">3489</a>: xrefitems (like @todo) did not appear in the list when found in comments marked with @enum or @name.</li> </ul> +<a name="1.6.0"></a> <h1>Doxygen Release 1.6.0</h1> -<h2>(release date 20-08-2009)</h2> +<b>(release date 20-08-2009)</b> <h3>Changes</h3> <ul> <li> id <a href="https://github.com/doxygen/doxygen/issues/3372">3372</a>, <a href="https://github.com/doxygen/doxygen/issues/3012">3012</a>: Replaced the PHP based search engine by a @@ -3326,7 +3727,6066 @@ make sure you add the following: <li> id <a href="https://github.com/doxygen/doxygen/issues/3477">3477</a>: @optional/@required attributes for Objective-C were missing from the XML output.</li> </ul> -<h1><a href="http://www.doxygen.org/changelog_1.5.html">Doxygen Release 1.5 and earlier</a></h1> +<p> +\endhtmlonly +\section log_1_5 1.5 Series +\htmlonly +</p> +<h1>Doxygen Release 1.5.9</h1> +<b>(release date 30-04-2009)</b> +<a name="1.5.9"></a> +<h3>New features</h3> +<ul> +<li> Added new option LATEX_SOURCE_CODE, which when enabled adds + source code also to the latex output (typically to be used in + combination with SOURCE_BROWSER)</li> +<li> Included updates for the Finnish, Romanian, Korean, German, Japanese, + and Hungarian translation.</li> +<li> Added translation support for Esperanto.</li> +<li> id 579630: Added class attribute to the \todo and \bug HTML code so they + can be customized via CSS.</li> +<li> id 578740: Added support for Æ and æ characters.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 395169: Some links via tagfiles were not correct in + combination with CREATE_SUBDIRS=YES</li> +<li> id 539080: Having the same comment for the declaration and definition + of a function could result in duplicate documentation in case the + indentation level was different.</li> +<li> id 566713: Dot font was not removed even though DOT_CLEANUP was YES.</li> +<li> id 566925: Fixed problem resolving symbolic links.</li> +<li> id 567044: Fully qualified name was not shown correctly for nested + classes.</li> +<li> id 567375: Fixed parse problem for typedefs with redundant braces.</li> +<li> id 567535: Fixed problem when parsing operator%= for CLI/C++ code.</li> +<li> id 567777: Fixed problem with latex output when using enums.</li> +<li> id 567990: Doxygen could crash when there was a symlink in project.</li> +<li> id 568237: Non-ascii values entered where not saved according to the + INPUT_ENCODING.</li> +<li> id 568505: Fixed build problem for old Linux distributions.</li> +<li> id 569478: Fixed line continuation issue with the Fortran parser.</li> +<li> id 570960: C++ class defined in a .mm file was sometimes parsed as + Objective-C code.</li> +<li> id 571013: In the wizard, editing a text field in the middle of the + text in the expert tab caused the cursor to jump to the end of the line.</li> +<li> id 571096: Fixed Objective-C parsing problem when multiple protocol + forward declarations are put on one line.</li> +<li> id 571990: Fixed compiler issue with portable_iconv by moving the + function to a C file.</li> +<li> id 572560: Fixed parse issue when a #define is inside an enum.</li> +<li> id 572740: Fixed problem parsing C++ comments using line continuation.</li> +<li> id 573057: Included update for Swedish translator and changed + the language code from SE to SV to comply with ISO 639.</li> +<li> id 578382: When referring to a static variable or function + doxygen will now look at the file context in case of ambiguity.</li> +</ul> + +<h1>Doxygen Release 1.5.8</h1> +<b>(release date 27-12-2008)</b> +<a name="1.5.8"></a> +<h3>Changes</h3> +<ul> +<li> Completely rewrote the doxywizard. Main changes: + <ul> + <li> It is now based on Qt version 4. (4.3 or higher is required) </li> + <li> Different layout that allows easy switching between wizard + and expert mode, without losing settings.</li> + <li> Running doxygen can be done without first having to save + the configuration file.</li> + <li> For HTML output, there is a button to show the results in + the default browser.</li> + <li> Option to change the default configuration that is used + when you first start the wizard.</li> + <li> Non-default options are shown with red label, and there is + context menu to reset them back to the default.</li> + </ul></li> +<li> Included Qt help update by Sebastian Pipping introducing + three new options to define custom filter sections and attributes: + <code>QHP_CUST_FILTER_NAME</code>, + <code>QHP_CUST_FILTER_ATTRS</code>, + <code>QHP_SECT_FILTER_ATTRS</code>. + Doxygen now directly generates the indices needed + by the qthelpgenerator. + Qt customers can have a look at issue 28 of the Qt Quarterly for + more information.</li> +</ul> +<h3>New features</h3> +<ul> +<li> id 131496, 522488, 541649, 554800: + Add new option EXTENSION_MAPPING, which can be used to + change the + mapping of file extension to language parser, e.g. defining + <code> + EXTENSION_MAPPING = f=C + </code> + will make doxygen parse files with the <code>.f</code> + extension as if it were C files.</li> +<li> Added support for Vietnamese (thanks to Dang Minh Tuan)</li> +<li> Thanks to Emin Ilker Cetinbas doxygen can now also produce Turkish + documentation.</li> +<li> id 143218: It is now possible to add the direction attributes + normally used with the @param command to document parameters + inline, e.g. + <code> + void foo(int v /**< [in] input parameter docs */); + </code></li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> TYPEDEF_HIDES_STRUCT did not work correctly if the typedef did a + forward declaration of the struct/union.</li> +<li> id 153222: Fixed issue following recursive symbolic links.</li> +<li> id 423223: Detailed description was not visible for group functions + when SEPARATE_MEMBER_PAGES was enabled.</li> +<li> id 437346: Fixed issue handling multibyte characters in the RTF output.</li> +<li> id 475377: Improved error handling in case of character encoding + problems.</li> +<li> id 486747: Inherited typedefs were not resolved propertly.</li> +<li> id 508752: Add support for BLOCK DATA to the fortran parser.</li> +<li> id 532695: included documentation update about the use of \public + and friends for object-oriented programming in C.</li> +<li> id 532808: References to class variables in PHP code did not already work.</li> +<li> id 536394: Warning "no matching file member found" was given for a static + variables in multiple anonymous namespaces.</li> +<li> id 537686: Fixed invalid empty section for enum in a member group.</li> +<li> id 539590: C# generics with the same name but different template + parameters where merged.</li> +<li> id 540321: A using declaration in a header file was not taken into + account in the source file that included it.</li> +<li> id 540520: Have two C# enum values with the same name in different enums + was not handled properly.</li> +<li> id 543036: //## comments were extracted even if they were not part of + Rose documentation.</li> +<li> id 547436: Fixed issue combining Python docstrings and doxygen comments.</li> +<li> id 551615: A multiline C# comment with @ was not shown correctly in the + source browser.</li> +<li> id 544598: A multiline comment as part of a #define could case + wrong line counting and missing cross-references.</li> +<li> id 545128: \overload didn't work if it was the last statement in a + comment and not followed by a newline.</li> +<li> id 553380: Removed bogus warning refering to a namespace member from + with a brief description that was converted to a tooltip.</li> +<li> id 553968: Added support for JavaDoc command {@code ... }</li> +<li> id 554444: Bullet lists were no longer correctly indented when using + IE6.</li> +<li> id 554674: Fixed index rendering bug in the RTF output.</li> +<li> id 555174: The .qch file didn't include generated images.</li> +<li> id 555200: Fixed potential crash bug when parsing special comment + inside an if at global scope level of a PHP code fragment.</li> +<li> id 556240: Tree view in HTML output was not encoded correctly.</li> +<li> id 557001: VHDL Parser got confused when -- is in a string literal.</li> +<li> id 557014: Undocumented VHDL record member's internal record prefix + was not removed.</li> +<li> id 557026: Obj-C Protocols and interfaces had wrong + type/name in DocSets.</li> +<li> id 557031: Obj-C methods no longer require a space after the + initial - or +.</li> +<li> id 557034: Fixed problem parsing property in Objective-C code.</li> +<li> id 557038: Items in tabs.css could not be overridden by custom + style sheet.</li> +<li> id 557419: $relpath$ was no longer expanded in custom HTML headers.</li> +<li> id 557735: Summary for member groups was missing for groups and files.</li> +<li> id 558078: collaboration graph of a class using std::list of another class + was not correct if the classes where inside a namespace.</li> +<li> id 558460: When using \subpage, any section in the sub page was + missing from the LaTeX output.</li> +<li> id 558525: Template classes produced invalid HTML in the tree view.</li> +<li> id 559338: PHP Parser could get confused when there was a comment inside + an array initializer.</li> +<li> id 559650: Obj-C @interface without body was handle correctly.</li> +<li> id 560623: Mixin template classes where not shown properly in the inheritance + diagram if the classes where inside a namespace.</li> +<li> id 563136: The brief sentence is not shown for groups with no children.</li> +<li> id 563384: call graphs were not generated for Qt signals and slots</li> +<li> Included VHDL fix by Martin Kreis.</li> +<li> grouping of multiple @todo's (and friends) didn't work anymore, + causing duplicate sections and labels.</li> +<li> Some issues related to the Qt help output were fixed.</li> +</ul> + +<h1>Doxygen Release 1.5.7.1</h1> +<b>(release date 5-10-2008)</b> +<a name="1.5.7.1"></a> +<h3>Changes</h3> +<ul> +<li> The dot tool is no longer part of the doxygen package for MacOSX. + Please install GraphViz separately and set the dot path + to /usr/local/bin</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added option DOT_FONTSIZE which allows to set the size of + the fonts used in dot generated graphs.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 554432: Re-added ALPHABETICAL_INDEX option.</li> +<li> id 554379: Fixed internal error for GENERATE_INDEXLOG when + GENERATE_HTML was set to NO.</li> +<li> id 554546: Included fix for handling relative includes in the + preprocessor.</li> +<li> Included several VHDL fixes related to syntax highlighting, finding + class members, and mixing upper and lower case.</li> +<li> Included patch to allow setting DEST_DIR environment variable + to determine where to install doxygen.</li> +</ul> + +<h1>Doxygen Release 1.5.7</h1> +<b>(release date 28-9-2008)</b> +<a name="1.5.7"></a> +<h3>Changes</h3> +<ul> +<li> The default CSS style sheet has been cleaned up and simplified, thanks + to the work done by Quinn Taylor.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added new config options <code>GENERATE_QHP</code> + which enables generating .qch (Qt compiled help) file via + the Qt's qthelpgenerator tool (part of Qt 4.4+). + This type of files can be read with Qt's Assisant to browse the + documentation in a similar way as is possible with Microsoft's + compiled HTML help (.chm). To further customize the output and run the + help generator from within doxygen, the following options + are available: <code>QCH_FILE</code>, <code>QHP_NAMESPACE</code>, + <code>QHP_VIRTUAL_FOLDER</code>, <code>QHG_LOCATION</code>. + Thanks to Sebastian Pipping for the patch.</li> +<li> Add new option <code>SYMBOL_CACHE_SIZE</code> to allow a different + trade off between doxygen's memory usage and the amount of disk + accesses.</li> +<li> id 532695: Added 3 new commands: \extends, \implements, and \memberof + that allow object oriented constructs to be documented as such + for languages that do not support it natively (e.g. C)</li> +<li> Added better support for one line comments after VHDL types.</li> +<li> Added new option <code>LAYOUT_FILE</code> which can be used to + specify a layout + template file that tells doxygen in which order to generate the + output and which titles to use for headings and how + the navigation index will look; + Read <a href="customize.html">this</a> for more info. + As a result the following options are now obsolete since they can + now only be controlled via the layout file: + <code>DETAILS_AT_TOP</code>, <code>ALPHABETICAL_INDEX</code>. + The following options can also be set via the layout file, but + for convenience and backward compatibility reasons they are still + also part of the configuration file: + <code>SHOW_INCLUDE_FILES</code>, <code>SHOW_USED_FILES</code>, + <code>CLASS_GRAPH</code>, <code>COLLABORATION_GRAPH</code>, + <code>GROUP_GRAPHS</code>, <code>INCLUDE_GRAPH</code>, + <code>INCLUDED_BY_GRAPH</code>. + Run doxygen with the -l option to generate the default layout file.</li> +<li> Included update for the Macedonian, Catalan, Brazilian, and Serbian + translation and also support for Serbian with Cyrilic characters.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 140264, 332187, 541924: Sections inside a \subpage where not shown as + subsection in the LaTeX/RTF output. </li> +<li> id 155098,156188: Added support for UTF-8 special characters in identifiers (which is + allowed by e.g. C#).</li> +<li> id 304598: operator-- caused invalid HTML output.</li> +<li> id 324047: parameter type [in or out] were not generated in RTF document</li> +<li> id 363499: @todo and friends did not work in a comment marked with @dir.</li> +<li> id 445485: HTML commands in a comment block with attribute values without + quotes were not handled properly.</li> +<li> id 533855: Processes were always documented as anonymous in VHDL code.</li> +<li> id 535379: Added support for %{...%} blocks in XPCOM's IDL.</li> +<li> id 536298: Last port in a VHDL port list was not correctly put in a + member group.</li> +<li> id 536385: Fixed problem matching function prototype and implementation + under certain conditions.</li> +<li> id 536629: Fixed compilation issue on NetBSD.</li> +<li> id 537393: Properties in Python were not properly handled.</li> +<li> id 538065: Added support for @optional and @required in Objective C 2.0 + protocols.</li> +<li> id 538239: Some unlabeled VHDL processes were not corrected detected.</li> +<li> id 538515: Deriving a Objective-C interface from a protocol caused + parsing problems if the interface also has a body.</li> +<li> id 539057: Part of an Objective-C expression could be missing in the + source browser under certain conditions.</li> +<li> id 539590: Generic C# classes with the same name but different + template arguments were no longer treated as different classes.</li> +<li> id 539712: Fixed code parser issue for parameter indices of procedures + and functions.</li> +<li> id 540058: Creator code was wrong in the MacOSX application bundle.</li> +<li> id 540372: Fixed problem parsing large table by increasing + YY_READ_BUF_SIZE in the generated parser files.</li> +<li> id 540247: Fixed potential memory corruption issue parsing VHDL.</li> +<li> id 541113: Fixed locale for ctype, to avoid stripping of 0xA0 + from multi-byte UTF-8 characters.</li> +<li> id 544479: <code>SORT_MEMBER_DOCS</code> did not work for class members.</li> +<li> id 546621: Fixed makefile so that .svn stuff is removed from the + tarball when doing "make archive".</li> +<li> id 546812: Using a table with row span greater than 1 did not + produce correct LaTeX output.</li> +<li> id 545098: Fixed problem parsing where clauses in combination with C# + generics.</li> +<li> id 545503: Nameless parameters of type "struct A" could end up wrongly + in the XML output.</li> +<li> id 545970: Refering to the main page did not work as advertised.</li> +<li> id 546158: The variable defined inside a foreach statement in C# code + was not considered for source linking, cause potentially incomplete call + graphs.</li> +<li> id 547361: Linking to specialized template functions did not work.</li> +<li> id 548175: Fixed problem parsing class members within a class X, + inside a namespace that is also named X.</li> +<li> id 548443: Documenting a nested namespace/classes with @namespace X.Y + did not work for C# (only X::Y worked).</li> +<li> id 548489: C++/CLI classes of type sealed abstract were not + processed correctly.</li> +<li> id 549318: Some headings in the user manual where wrongly formatted. </li> +<li> id 549581: Fixed potential buffer overflow in preprocessor.</li> +<li> id 550058: Obj-C: properties for private fields did not appear in the + output unless <code>EXTRACT_PRIVATE</code> was enabled. </li> +<li> id 550156: Corrected typo in the documentation for + <code>GENERATE_TREEVIEW</code>.</li> +<li> id 550247: Fixed problem parsing octal character literals in + the preprocessing phase.</li> +<li> id 551739: Related function with explicit namespace scope was not + properly placed if the function also existed in the global namespace.</li> +<li> id 552115: Anonymous structs and unions could produce invalid links in + the html help index.</li> +<li> id 552361: Fixed problem with operators in the LaTeX output.</li> +<li> id 552600: \copybrief ended a brief description instead of appending + to it.</li> +<li> id 553469: Removed bogus warning about internal inconsistency when + importing items via a tagfiles that are inside an undocumented scope.</li> +<li> id 553616: One can now remove the automatic line breaks in the type + part of a declaration by using a custom stylesheet with + BR.typebreak { display: none; }</li> +<li> id 553663: Aliases did not work in Fortan comments.</li> +<li> id 549022: Reimplemented in links could be wrong in case of + overloaded members.</li> +<li> id 553225: Parser was confused by arrays inside an Obj-C message.</li> +<li> Finnish translation was disabled. </li> +<li> A collaboration graph with multiple edge labels with not written to + the XML output correctly.</li> +<li> sub pages of a \mainpage were not shown in the Latex/RTF output.</li> +<li> Included some fixed for the VHDL parser.</li> +</ul> + +<h1>Doxygen Release 1.5.6</h1> +<b>(release date 18-5-2008)</b> +<a name="1.5.6"></a> +<h3>Changes</h3> +<ul> +<li> The GENERATE_TREEVIEW option is not longer a boolean, but can now + have 4 values, NONE (was NO), FRAME (was YES), HIERARCHIES, and ALL. + Thanks to Jake Colman for the patch.</li> +<li> a page marked as a sub page (\subpage) is now shown in the LaTeX and + RTF output as a section of its parent page. So the top level pages are + shown a chapters, subpages as sections, subpages of a subpage as + subsections, etc. </li> +<li> Included spec file updates by Kenneth Porter.</li> +</ul> +<h3>New features</h3> +<ul> +<li> id 514810: Added DOT_FONTNAME and DOT_FONTPATH options which allow + instructing dot to use a different font than FreeSans.ttf which doxygen + put in the output directory.</li> +<li> id 517242: Added option CHM_INDEX_ENCODING to specify the encoding + to be used for the CHM index files. Needed because CHM index files + cannot handle UTF-8 encoding.</li> +<li> id 519573: Included patch to make the font-size button visible in the + CHM output.</li> +<li> id 521288: Added new options SHOW_NAMESPACES and SHOW_FILES to + Suppress Namepace and Files Pages.</li> +<li> id 521495: Included a patch that makes it easy to modify the root of + the html treeview with an image using style sheets.</li> +<li> id 522300: Added option IDL_PROPERTY_SUPPORT to enable/disable special + propget/propput handling in IDL files.</li> +<li> Translation support for Finnish has been updated.</li> +<li> Added option FORMULA_FONTSIZE which can be used to change the font size + of the formulas included in the HTML documentation.</li> +<li> included update for Russian translation.</li> +<li> included patch to fixed some issues with VHDL code and add support + for some VHDL-93 constructs.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Regression: fixed problem handling STL classes + when BUILTIN_STL_SUPPORT was enabled</li> +<li> id 142866,377976: Added new \copybrief and \copydetails commands, + which work as \copydoc but then only copy either the brief or the + detailed part of a comment block.</li> +<li> id 312655: DISTRIBUTE_GROUP_DOC didn't always work in combination + with SORT_BRIEF_DOCS enabled.</li> +<li> id 352234: The search index could contain invalid references when + SOURCE_BROWSER=NO and CALL_GRAPHS=YES.</li> +<li> id 402447: Added support for C# method declarations with where clauses.</li> +<li> id 425029: WARN_FORMAT does no longer require all of + $file, $line, $text to be valid.</li> +<li> id 495687: Replaced MAX_DOT_GRAPH_MAX_NODES with DOT_GRAPH_MAX_NODES + in the docs & config file.</li> +<li> id 508694 Fixed problem with mixed simple and double quotes in + fortran format declaration</li> +<li> id 508752: Fixed problem where the fortran scanner didn't recognize END</li> +<li> id 510971: Fortran: parser was confused by double REAL() in processed + statements.</li> +<li> id 514488: Fixed problem matching argument lists with const qualifiers.</li> +<li> id 514891: PDF generation failed with a LaTeX error when tocdepth + was set to a value higher than 2.</li> +<li> id 515518: Links in member group documentation was broken when + CREATE_SUBDIRS was enabled.</li> +<li> id 516086: Fixed division by zero when producing RTF output for the + comment /** <table><tr></tr></table> */</li> +<li> id 516536: Fixed build issues on OSX 10.4 and earlier.</li> +<li> id 516070: Added support for simple events without accessors in C#.</li> +<li> id 516387: replace 0xA0 character in perlmodgen.cpp by a space to + avoid compilation problems with the Chinese version of Visual Studio.</li> +<li> id 517112: Regression: examples with the same name but different paths + cause "file not found" warning.</li> +<li> id 518334: Fixed problem parsing Objective-C protocol definitions.</li> +<li> id 518537: Hiding an enum with an undocumented typedef with the same + name caused explicit referencing of the enum to fail.</li> +<li> id 519661: In some cases a function prototype could incorrectly be + flagged as a variable with constructor.</li> +<li> id 520325: Fixed parse problem when comment was after an extern "C" + block and before the opening bracket.</li> +<li> id 521234: Fortran: fixed problem causing + "stack empty! when parsing code"</li> +<li> id 522225: PDF Latex output did not produce proper hyperlinks for \page + and \subpage comment blocks.</li> +<li> id 522248: Page header were wrongly displayed in the RTF output.</li> +<li> id 522415: Fixed compile errors in addon/doxmlparser.</li> +<li> id 522600: Added additional warnings to signal invalid configurations.</li> +<li> id 523138: Removed redundant paragraph in navigation section of the + HTML output. </li> +<li> id 523326: Namespace name was prepended twice to template + specializations classes.</li> +<li> id 524357: Default mentioned for REFERENCED_BY_RELATION relation + was not correct.</li> +<li> id 524359: Default mentioned for REFERENCES_RELATION relation was + not correct.</li> +<li> id 524473: Removed incorrect warnings about parameters in VHDL.</li> +<li> id 525140: Improved handling of Objective-C 2.0 properties.</li> +<li> id 525143: Properties are now listed as attributes in the UML diagrams.</li> +<li> id 525144: GENERATE_DOCSET option greyed out in doxywizard.</li> +<li> id 526155: Removed warning about QFile::setName when parsing VHDL files.</li> +<li> id 527781: Template arguments for bases class not shown in a consistent + way.</li> +<li> id 528023: Inheritance relations were not correctly displayed for + C# generics.</li> +<li> id 528424: Fixed rendering bug in HTML output when used with Opera.</li> +<li> id 528584: Using enum and enum value with the same name in C# code + caused crash.</li> +<li> id 528620: Fixed typo in French translation.</li> +<li> id 528815: Fixed problem parsing define() statements in PHP code.</li> +<li> id 528989: Leading C comment could prevent preprocessor expansion for + the rest of the line.</li> +<li> id 529803: Doxygen didn't find call(er) relations for C# when using + this.Method() calls;</li> +<li> id 529554: Putting defined() inside a macro caused the preprocessor + to get confused.</li> +<li> id 529758: C++/CLI: default inheritance is now public, nested templates + ending with >> are now handled properly as well as indexed properties.</li> +<li> id 530201: Avoided warning for undocumented self parameter in Python.</li> +</ul> + +<h1>Doxygen Release 1.5.5</h1> +<b>(release date 10-2-2008)</b> +<a name="1.5.5"></a> +<h3>Changes</h3> +<ul> +<li> Pages created with @page are now chapters in the LaTeX and RTF output + and treeviews, and directly follow the mainpage. Also the project name + is not longer repeated for each chapter. + This should make it more convenient to create normal, printable + documentation with doxygen.</li> +<li> For dot graphs with an edge with more than ten labels, only the first + ten are shown followed by an ellipsis; done to prevent very long + dot runs resulting in unreadable graphs.</li> +<li> Use of pdflatex with hyperlinks is now the default.</li> +<li> id 511116: C++ preprocessor macro names are now replaced in the + comments as well. For example, S and m are replaced in the comments for: + <code> + #define C(S,m) /** container S */ struct S { /** value m */ int m; } + </code></li> +<li> id 493923: The options SOURCE_BROWSER, CALL_GRAPH, CALLER_GRAPH, + REFERENCES_RELATION, and REFERENCED_BY_RELATION can now be indepently + enabled and disabled. By default the relations are now disabled.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added support for VHDL (.vhd or .vhdl extension) based on a patch by + Martin Kreis. Use OPTIMIZE_OUTPUT_VHDL when parsing VHDL code. </li> +<li> id 374699: Added support for Objective-C 2.0 properties.</li> +<li> Added compilation support for MacOSX 10.5 (Leopard) incombination with + Xcode 3</li> +<li> Added support for docsets, which allow integration of doxygen generated + API documentation in Xcode 3. new options: + <ul> + <li> GENERATE_DOCSET: enables/disables the feature</li> + <li> DOCSET_FEEDNAME: sets the provider/suite name under which the set is + listed.</li> + <li> DOCSET_BUNDLE_ID: A unique name for the docset.</li> + </ul> + See the configuration file or manual for more details.</li> +<li> id 493467: Added compilation support 64bit Solaris machines in + combination with Sun's own compiler (thanks to Heiko Jansen).</li> +<li> id 153376: Added support for the \tparam command, which works similar to \param + but is meant for documenting template parameters.</li> +<li> id 140104: Added \headerfile command which can be used to specify + the second and third argument of a \class command, when + the documentation is already in front of a class definition.</li> +<li> Added translator support for Macedonian.</li> +<li> Added language updates for German, Perian, Spanish, Taiwanese, + and Chinese, Korean, Croatian.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed potential crash bug due to wrong pointer check.</li> +<li> Using @param as the first word in a comment block did not work properly + in combination with JAVADOC_AUTOBRIEF set to YES.</li> +<li> Some character's could be missing from IDL properties.</li> +<li> Automatic abbreviations did not work for nested classes or classes + in a namespace.</li> +<li> Fixed a preprocessor bug where the line numbers of a definition could + get out of sync with the source code.</li> +<li> id 142023: Putting Qt signals or slots in a group did not + make them appear in the group documentation.</li> +<li> id 318668: Comments in Python function argument lists got messed up.</li> +<li> id 325359: Added support for C# XML-doc commands typeparam and + typeparamref.</li> +<li> id 331674: Aliases did not work in Python code.</li> +<li> id 356399: Fixed strange warning when specifying a tag file with an + anchor twice.</li> +<li> id 363828: Docstrings found at the top of a python file are handled + as module documentation again.</li> +<li> id 429437: A #include outside the input files was not searched + in the current directory of the file containing the include.</li> +<li> id 451299: Sometimes the wrong include file chosen when ambiguous</li> +<li> id 460585: @cond did not work in Python code.</li> +<li> id 477377: Function in undocumented anonymous namespace cause broken + link if EXTRACT_ALL was set to NO.</li> +<li> id 484731: Additional fixes for parsing Fortran.</li> +<li> id 488125: <code>operator->*</code> was not displayed properly in the output.</li> +<li> id 490766: Fixed compile error in fortranscanner.l which occurred for + some compilers.</li> +<li> id 492027: Ampersand (&) in front of parameter stops documenting + of PHP source</li> +<li> id 493249: using a namespace (or fortran module) caused the namespace + to appear in the documentation as if it was defined.</li> +<li> id 493434: Nested C# style XML lists in a comment block were not + handled correctly. </li> +<li> id 494187: Doxygen could crash due to an infinite recursion when + using tag files.</li> +<li> id 494599: When updating a config file an extra space was added just + before the end of a quoted string.</li> +<li> id 494760: Putting a # in a path name using Doxywizard, caused the + # to interpreted as the start of a comment in the Doxyfile.</li> +<li> id 495656: Description of default used for DOT_TRANSPARENT was wrong.</li> +<li> id 495687: Fixed typo in the description of DOT_GRAPH_MAX_NODES.</li> +<li> id 496392: Putting character entities like é in section/group + titles resulted in &acute; in the output.</li> +<li> id 498049: Improvements to .spec files for RPM creation.</li> +<li> id 498680: Callgraphs for functions in anonymous namespaces generated + invalid labels for 'dot' when EXTRACT_ANON_NSPACES was set to YES.</li> +<li> id 498711: Reference parameters in PHP were not properly parsed.</li> +<li> id 499577: Collaboration diagrams not working with typedef</li> +<li> id 500227: Wrong output generated for Objective-C methods with + multiple arguments for LaTeX or RTF output.</li> +<li> id 500635: Project name is no longer placed before each top level + item in the treeview and other indices.</li> +<li> id 500465: Fixed some issues compiling for AIX.</li> +<li> id 500928: Fixed parser issue handling a tripple quoted + string when used to initialize a Python variable.</li> +<li> id 500944: Python variables with package scope were only extracted if + EXTRACT_STATIC was enabled.</li> +<li> id 501704: Line numbering was wrong when a #include was placed inside + an array/struct initializer list.</li> +<li> id 502213: Combining a brief and detailed description in an alias + produced the warning "unknown command \_‍linebr".</li> +<li> id 502447: Single quoted PHP strings were not handled correctly + by the source code parser.</li> +<li> id 503939: Variable was checked before initialized.</li> +<li> id 504120: TYPEDEF_HIDES_STRUCT now also works for enums.</li> +<li> id 504439: Assert when marshaling a member which had an associated + example.</li> +<li> id 504650: Generated LaTeX code injected hyperlinks into section titles.</li> +<li> id 507052: Fortran function named x_function was not properly handled.</li> +<li> id 507603: Enabling FILTER_SOURCE_FILES caused strange warnings when + INPUT_FILTER is empty.</li> +<li> id 508740: Using upper case port mode specifiers did not work correctly.</li> +<li> id 508753: Fortran: Added .f as allowed fortran extension.</li> +<li> id 508759: Fortran: fixed potential memory corruption while scanning + parameter lists.</li> +<li> id 507528: XML output was not correct for pointer arrays.</li> +<li> id 508752: Fortran scanner didn't recognize lonely END</li> +<li> id 509278: Spaced before the \internal command where treated as + documentation.</li> +<li> id 509582: Fortran: Spaces in function return type were not parsed + properly.</li> +<li> id 510387: Fortran scanner didn't parse initialisation of complex type + correctly. </li> +<li> id 511921: @file command ended brief description even when + JAVADOC_AUTOBRIEF was enabled.</li> +<li> id 512620: \copydoc of a comment with @param commands could result in + warnings that parameters were not documented.</li> +<li> id 513570: Fixed cross site scripting vulnerability in the + search.php script.</li> +<li> id 514814: Included missing fromUtf8 calls to translator decoder to + prevent potential language encoding issues.</li> +<li> id 513885: Using <code>this-></code> inside a function could result in incomplete + call graph.</li> +</ul> + +<h1>Doxygen Release 1.5.4</h1> +<b>(release date 27-10-2007)</b> +<a name="1.5.4"></a> +<h3>Changes</h3> +<ul> +<li> id 469260: When setting SOURCE_BROWSER to YES, all undocumented classes also ended + up in the documentation. Now this will only happen if EXTRACT_ALL is also + enabled.</li> +<li> Upgraded included third party libs libpng and zlib to version 1.2.21 and 1.2.3 + respectively.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Included support for parsing Fortran 90, thanks to a patch by + Anke Visser and Oleg Batrashev (source: http://dougdevel.org/index.php?page=doxygen)</li> +<li> id 477548: Added config option SIP_SUPPORT to support handling SIP sources + (used for Python to C++ bindings).</li> +<li> id 475828: Added support for CLI/C++ style indexed properties.</li> +<li> Added config option TYPEDEF_HIDES_STRUCT which when enabled treats a typedef + of a struct as a struct with the name of the typedef. This behavious was + coupled to OPTIMIZE_OUTPUT_FOR_C in the previous version and is now an independent + option.</li> +<li> Included updates for the Korean, Brazilian and Chinese translations.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 314541: Fixed wrong DOCTYPE in HTML output when GENERATE_TREEVIEW was set to YES</li> +<li> id 321784: Changed scope resolution algorithm to avoid lookup failures on using + directives (thanks to Christoph Schulz for the patch).</li> +<li> id 415866: Fixed bug in preprocessor causing "More #endif's than #if's found" warning.</li> +<li> id 426971,465020: A brief description would in some cases be treated as a + detailed one.</li> +<li> id 430148: Doxygen reported "Internal Inconsistency" for class member inside + anonymous namespaces.</li> +<li> id 433449,363010: Removed Internal inconsistency when referencing enum values found + in a tag file.</li> +<li> id 438282: Line numbers were displayed when using \include inside \example.</li> +<li> id 443942,461433: mscgen was not called correctly on Windows when + generating .map files.</li> +<li> id 457346: increased the threshold for adding line breaks to the type part of a + declaration.</li> +<li> id 460294: Missing references in source browser when using the "register" keyword.</li> +<li> id 461889: Fixed bogus "no matching class member found" case. </li> +<li> id 462051: In certain cases doxygen failed to find the proper inheritance relation.</li> +<li> id 462077: Error in LaTeX index generation due to unescaped characters.</li> +<li> id 462159, 143250: Added support for parsing functions/methods returning a + pointer or reference to an array, e.g. a function of the + form: "int (*f(int))[];"</li> +<li> id 462436: Inheritance from an unknown template class was not handled consistently.</li> +<li> id 462439: Adjusted \author documentation.</li> +<li> id 462757: Fixed Latex output bug for members of anonymous struct or unions. </li> +<li> id 462861: Members references via tagfiles were sometimes broken.</li> +<li> id 463139: Doxygen failed to detect duplicate variable declarations in the same file.</li> +<li> id 465138: HTML entities in page title (such as ü) where not displayed + correctly in the HTML output.</li> +<li> id 465170: Wrong line numbers reported for errors when using multiline formulas.</li> +<li> id 465172: Fixed issues parsing <code>operator</code>.</li> +<li> id 466803: Fixed crash when parsing Java enum with empty field.</li> +<li> id 466890: Handling of CVS/RCS keywords was broken.</li> +<li> id 466910: When UML_LOOK is set to YES, the graph orientation is always top to bottom.</li> +<li> id 466991: Template argument using '?' operator breaks file generation.</li> +<li> id 468858,472310: C++ casting operator with templates was displayed wrong.</li> +<li> id 468937: .hhc and .hhk was missing the </body> and </html> tags.</li> +<li> id 469269: When HTML_DYNAMIC_SECTIONS was enabled, index.hhp missed + open.gif and closed.gif.</li> +<li> id 470029: Fixed crash while parsing a particular piece of PHP code.</li> +<li> id 471185: The word "property" was stripped from functions that started with it.</li> +<li> id 471495: Objective C category documentation was ignored in some cases.</li> +<li> id 472193: Fixed issue expanding multiple occurrences of the same alias command + argument.</li> +<li> id 472201: Removed spurious warning introduced by the fix for bug 465170.</li> +<li> id 473105: Auto link to nested class inside a base class was missing. </li> +<li> id 473140: Anonymous scope ended up wrongly in the XML output.</li> +<li> id 473402: context dependent \ref's inside a dot or msc graph did not work anymore.</li> +<li> id 473679: Doxygen skipped function if return type contained round parenthesis.</li> +<li> id 474529: index entries in LaTeX could be wrong on some platforms.</li> +<li> id 476035: Externally referenced links obtained via a tag file had an extra g in + the anchor</li> +<li> id 476562: argument of copydoc appears in XML output without proper escaping.</li> +<li> id 476766: Type of a virtual destructor was "virtual" in the XML output.</li> +<li> id 479113: Automatic links were not generated when next word started with "const".</li> +<li> id 479762: Wrong character encoding was used for dot files.</li> +<li> id 480722: File tooltips incorrect for the include dependency graph.</li> +<li> id 481168: Allow \f{environment}{ .... \f} so the number of braces matches.</li> +<li> id 481107: Using HTML_FILE_EXTENSION to set a non-default extension did not work + for the "no frames" link to main.html when GENERATE_TREEVIEW was enabled.</li> +<li> id 481827: Macro expansion removed the @ character when it appear in a C comment.</li> +<li> id 482964: The "template" word was a little too close to the rounded border in + the html output when rendered by Firefox.</li> +<li> id 484277: Adjusted the instructions to report a bug in the hope this will result + in less duplicate bugs.</li> +<li> id 484731: Fixed issue parsing unindented interface (Fortran).</li> +<li> id 486159: Fixed problem parsing \xrefitem commands in joined comment blocks.</li> +<li> id 488760: Added support for Trigraphs to doxygen's C-preprocessor.</li> +<li> id 488800: Fixed problem in perlmod generation.</li> +<li> id 488837: abstract class in PHP was not properly parsed.</li> +<li> id 489049: Setting MUTLILINE_CPP_IS_BRIEF to YES could cause wrong line number + references.</li> +<li> Call graphs were not properly synced between function declaration and definition.</li> +<li> Fixed bug in doxygen's internal caching mechanism which could make doxygen + forget enum lists for large projects. </li> +</ul> + +<h1>Doxygen Release 1.5.3</h1> +<b>(release date 27-7-2007)</b> +<a name="1.5.3"></a> +<h3>Changes</h3> +<ul> +<li> When <code>OPTIMIZE_OUTPUT_FOR_C</code> is enabled then a struct definition of the + form <code>typedef struct _S { ... } S_t</code> will be shown in the output as a + struct of type <code>S_t</code> and the typedef itself is omitted + (previousily <code>_S</code> was shown + as well as a typedef of the form <code>typedef _S S_t</code>). </li> +<li> Improved the line-breaking rules for members whose return types have many characters + (for example a function returning a pointer to a template class).</li> +<li> Multiple brief and detailed descriptions are now possible. It is still not + recommended to make use of them, but at least no documentation is silently hidden + when there are two brief or two detailed descriptions for the same entity.</li> +<li> Improved dot layout control and page sizing to better fit images on the screen + and paper.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added support for aliases with arguments, + see <a href="custcmd.html">the manual</a> + for more information.</li> +<li> Added <code>HTML_DYNAMIC_SECTIONS</code> option which, when enabled, + will produce sections + in the HTML output that can be expanded/collapsed. Currently used for + diagrams and graphs.</li> +<li> Added support for type constraints as available in the C# language ("where" clause)</li> +<li> id 332263: Added new option <code>EXTRACT_ANON_NSPACES</code> that when set to <code>YES</code> will extract + the contents of anonymous namespaces and show then in the output.</li> +<li> id 423765: Added support for <see cref="SomeSymbol"/> style XML comments. </li> +<li> id 426971: Added <code>QT_AUTOBRIEF</code> config option, which has the same meaning + as <code>JAVADOC_AUTOBRIEF</code> only now for /‍*! .. *‍/ style comment blocks.</li> +<li> id 435108: Reintroduced the <code>MAX_DOT_GRAPH_DEPTH</code> option as a means to further + reduce the size of a graph.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 137644: Fixed issue with "const" parsing of a typedef'ed struct where the "const" + is placed after the struct definition.</li> +<li> id 153362: A typedef of a function pointer was not shown correctly in the output.</li> +<li> id 156003: Wrong template arguments when using @related for a (template) function + with a template class.</li> +<li> id 170004: The check for PDF or DVI in the generated latex output + was not always reliable.</li> +<li> id 300022: PHP code with unknown extension was parsed as C/C++ code. Added a + detection rule for <?php to switch to PHP parsing.</li> +<li> id 317967: Setting <code>USE_PDFLATEX</code> to <code>YES</code> now generates a + Makefile with a "pdf" target, + to be consistent with the documentation.</li> +<li> id 397099: Fixed several cases where "referenced by" relation was unresolved.</li> +<li> id 423776: XML style see tag resulted in messed up documentation.</li> +<li> id 426852: \hideinitializer was sometimes ignored when using structural commands.</li> +<li> id 426977: Included a patch allow building under recent versions of Cygwin</li> +<li> id 427991: Doxygen failed to call mscgen.exe properly on Win32 platforms.</li> +<li> id 430962: struct keyword was stripped from typedefs even for C code.</li> +<li> id 431049: Fixed potential crash when <code>GENERATE_PERLMOD</code> was enabled.</li> +<li> id 431202, 333607: Quotes inside strings caused the Pythons parser to get off track.</li> +<li> id 431763: doxygen crashes when using unsupported tags in the config file.</li> +<li> id 432420: Last enum value of a Java 1.5 style enum with constructor did not appear.</li> +<li> id 432743: The "std" namespace appeared in the output when + <code>BUILTIN_STL_SUPPORT</code> was enabled.</li> +<li> id 432757: Setting <code>INLINE_INHERITED_MEMBERS</code> to <code>YES</code>, + did not inherit the group of grouped members of a base class.</li> +<li> id 433630: Using double-quotes (") inside a brief description could lead to + errors in dot files when the brief description was used as a tooltip.</li> +<li> id 434079: The number of graph nodes could still be too large despite a + conservative <code>DOT_GRAPH_MAX_NODES</code> setting.</li> +<li> id 436648: List of class members was no longer complete under certain conditions.</li> +<li> id 437218: Special characters in \brief string cause problems HTML/XML in source + listings.</li> +<li> id 438300: Fixed two cases where doxygen could access memory outside array + boundaries under certain conditions.</li> +<li> id 441114: Add support for <term> inside <list> to conform to + C# XML comments.</li> +<li> id 442313: Casing of special commands was not handled consistently.</li> +<li> id 443942: Fixed problems running mscgen.</li> +<li> id 444823: No newline after the error message when hhc failed with return code >0</li> +<li> id 445105: Fixed some issues and wrong spacing for the RTF generation.</li> +<li> id 446585: Doxygen could crash when producing a warning for undocumented C++/CLI + arguments of the type "T%".</li> +<li> id 447133: Replaced occurrences of ' by ' in the HTML output.</li> +<li> id 448210: Make rule to install manpages was broken.</li> +<li> id 451297: Fixed more issues where using double-quotes (") inside a brief + description could lead to errors in dot files when the brief + description was used as a tooltip.</li> +<li> id 452824: In the source browser linking of a local variable did not work + after a sizeof() of the variable.</li> +<li> id 452828: Missing reference to struct member in the source browser due to + incorrect bracket count.</li> +<li> id 453366: Removed bogus warning for unresolved references in brief descriptions. </li> +<li> id 453918: The __init__.py files were incorrectly treated as modules causing + scoping issues for symbols defined inside such file.</li> +<li> id 456471: Changing the installation location (--prefix) did not affect the + location were the documentation was installed. --docdir can still + be used to overrule the location for the documentation.</li> +<li> id 456475: Added support for C++/CLI style finalizers.</li> +<li> id 457857: Leading "struct" keyword is no longer stripped from the documentation of + functions that return a pointer to a struct.</li> +<li> id 458710: Expanding environment variables in the config file to a + file or path name with spaces (e.g. "$(VCInstallDir)include") was + incorrectly interpreted as a list when used with for instance <code>INPUT</code>.</li> +<li> id 458749: Undocumented constructors/destructors inside an undocumented member group + were not visible in the output.</li> +</ul> + +<h1>Doxygen Release 1.5.2</h1> +<b>(release date 4-4-2007)</b> +<a name="1.5.2"></a> +<h3>Changes</h3> +<ul> +<li> The options <code>MAX_DOT_GRAPH_WIDTH</code>, <code>MAX_DOT_GRAPH_HEIGHT</code>, and <code>MAX_DOT_GRAPH_DEPTH</code> have + been replaced by a single option <code>DOT_GRAPH_MAX_NODES</code>, which can be used to + limit the size of a graph indirectly, by specifying the maximum amount of nodes in + the graph. The main advantage is that this can be computed much faster; dot has + to be run only once per graph and never on graphs with more than the specified + amount of nodes. Note that doxygen will always render the root node and its + direct children even when <code>DOT_GRAPH_MAX_NODES = 0</code>.</li> +<li> Parameters names are now copied to reimplemented functions, avoiding warnings about + missing or wrong parameter names when <code>INHERIT_DOCS = YES</code>.</li> +</ul> +<h3>New features</h3> +<ul> +<li> id 150916,159291,166209,330109,396316 + Doxygen now uses UTF-8 internally for all strings and uses + iconv to recode the input to UTF-8. For HTML, LaTeX and man pages + the output is now always UTF-8. For RTF the encoding is local and + depends on the code page specified in the translator. + The config option <code>USE_WINDOWS_ENCODING</code> has been removed. + A new config option <code>INPUT_ENCODING</code> has been added which can be used to + specify the encoding of the input. Another config option <code>DOXYFILE_ENCODING</code> + can be used to specify the encoding of the config file itself.</li> +<li> Added support for message sequence charts (using mscgen). + For this two new commands have been added: \msc and \endmsc (similar + to \dot..\enddot), and a new config option <code>MSCGEN_PATH</code> (similar to DOT_PATH) + See the manual and <a href="http://www.mcternan.me.uk/mscgen/index.html">website</a> for more info.</li> +<li> Added support for C++/CLI. To enable it set <code>CPP_CLI_SUPPORT</code> to <code>YES</code> in the + config file (thanks to Ben Voigt for doing a lot of the work).</li> +<li> <code>IGNORE_PREFIX</code> now also works for function/members names when shown in the various + indices.</li> +<li> Doxygen will show a tooltip in the HTML output for links to classes, namespaces, + and members with the brief description (including dot graphs and source code).</li> +<li> id 321575: Added a new config option <code>EXCLUDE_SYMBOLS</code> which can be used to + exclude certain namespaces/classes/functions from the output by specifying + their name (which may include wildcards).</li> +<li> id 364536: Included patch by Ben Voigt which adds syntax highlight + support for several (managed) C++ keywords.</li> +<li> id 419349: Added two LaTeX layout enhancements provided by Stefan Pawig. </li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 132886: Included patch to fix an issue with using a sequence of xrefitems</li> +<li> id 134792: Added configure script for Cygwin autodetection.</li> +<li> id 162006: Doxygen now uses the default search path of dot for user defined + dot graphs (defined with @dot and @dotfile).</li> +<li> id 306231: Include fix for Japanese translation.</li> +<li> id 315543: htmlinclude didn't work as part of a description of a param.</li> +<li> id 322806: Doxygen now does not treat >> in a template list as a shift operator + for Java and C#.</li> +<li> id 332815: Legend generated with <code>GENERATE_LEGEND</code> did have typo.</li> +<li> id 345820: Included patch to make doxygen handle config files with + <code>@INCLUDE</code> with absolute paths correctly.</li> +<li> id 364780: Included patch to improve scope handling of nested classes/namespaces by + the code parser (thanks to Ben Voigt).</li> +<li> id 366113: Fixed configure script issue under Solaris.</li> +<li> id 367233: Non-class functions were duplicated in the xml index file.</li> +<li> id 367495: Windows build files had only support for English by default.</li> +<li> id 369499: In some cases variable names were duplicated in python source code output.</li> +<li> id 369200: Fixed parse problem when a single quote appeared in a Python comment line.</li> +<li> id 373229: Doxygen now gives a warning when it cannot inline a #include inside a body </li> +<li> id 374486: Inheriting from a template argument via an intermediate typedef could + result in invalid output.</li> +<li> id 375073: \ref could cause wrong XML output.</li> +<li> id 375753: Added missing new line to error message.</li> +<li> id 377911: Fixed problem with end of formula.</li> +<li> id 380516: Fixed line number issue in the Python parser.</li> +<li> id 381450: Tabs in the HTML output redefined the value of an "id" attribute, + which is not legal HTML.</li> +<li> id 374592: Member grouping didn't work properly for constructors.</li> +<li> id 381608: Initializer values of class variables and constants did no longer + appear in the documentations.</li> +<li> id 382274: Scanning files with <code>RECURSIVE</code> enabled ignored <code>EXCLUDE_PATTERNS</code>.</li> +<li> id 383377: C# code was not passed though the C-preprocessor.</li> +<li> id 383493: Improved the warning message for unterminated code/verbatim blocks.</li> +<li> id 384439: Made comment block parser more robust against HTML errors.</li> +<li> id 385384: <code>SEPARATE_MEMBER_PAGES=YES</code> caused broken links in Html Help index.</li> +<li> id 387781: Parsing #import statements was broken for Objective-C.</li> +<li> id 387848: Included patch to avoid LaTeX compilation issues.</li> +<li> id 389656: For C# enums in the same scope can have the same values, but doxygen's + parser got confused.</li> +<li> id 389750: Fixed alignment bug in the default html footer generated by doxygen.</li> +<li> id 390821: Fixed problem parsing Java 1.5 enums with initializers.</li> +<li> id 391619: When dot produces an non-zero return code, doxygen now prints the + return code and the command it tried to execute.</li> +<li> id 407815: Doxygen's got confused by certain combinations of " and ' s in PHP code.</li> +<li> id 409935: Fixed bug in qcstring.cpp</li> +<li> id 411300: PDF/Latex output was broken for operator[] documentation.</li> +<li> id 411328: Fixed Accessibility/Section 508 Compliance issue.</li> +<li> id 413071: Added support for Java 1.5 annotations.</li> +<li> id 415683: Two typedefs of function pointers with different names could still + resolve to the same type if the only difference was the argument list + and as a result cause "Undocumented function" warnings.</li> +<li> id 418920: Doxygen stripped leading comment chars from C# code blocks.</li> +<li> id 421131: Character encoding was not consistent for all HTML files.</li> +<li> The "list of all members" was not shown for a class with no members that derived + from a class with members.</li> +</ul> + +<h1>Doxygen Release 1.5.1</h1> +<b>(release date 29-10-2006)</b> +<a name="1.5.1"></a> +<h3>Bug fixes</h3> +<ul> +<li> id 148567: @todo at the end of a comment block caused problem when copied by @copydoc</li> +<li> id 352420: Fixed bug in LaTeX output (missing space after \bf).</li> +<li> id 363227: missing output for instance variables defined in a Python function + that has a doc string</li> +<li> id 363397: Member groups did not appear in a class when SUBGROUPING was set to YES.</li> +<li> id 364341: Parsing could become really slow if often included header files contained + using statements.</li> +<li> id 364673: The values of two enums with the same name (both in difference scopes) + where merged.</li> +<li> The version of dot shipped with the Mac binary had some non-standard dependencies.</li> +<li> Doxywizard didn't work on PC's where no Visual Studio 2005 was present, when build + with the project files (I'm now using /MT instead of /MD which fixes this issue). </li> +<li> Running 2 instances of doxygen on the same output directory caused corruption of + the temporary files generated by doxygen.</li> +</ul> + +<h1>Doxygen Release 1.5.0</h1> +<b>(release date 16-10-2006)</b> +<a name="1.5.0"></a> +<h3>Changes</h3> +<ul> +<li> cleaned up the internal structures to make them smaller, and made doxygen use + a temporary file to store the parse results (instead of keeping them in memory), + which will further reduce the memory usage, especially for large projects, and is a + first step towards incremental parsing.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added example application that shows how to configure and run doxygen from + within an application and use the information collected by doxygen without + also generating the output (see addon/doxyapp).</li> +<li> id 322467: Sections produces by \note, \warning, \remarks etc, now have a + class label in the generated HTML (<dl> tag) so you can give them a + distinct style using a non-default stylesheet (i.e. using HTML_STYLESHEET). </li> +<li> Added project files for building doxygen from Visual Studio 2005 (see winbuild dir). </li> +<li> added translator updates for Czech, Danish, German, Catalan, Croatian, French, + Japanese, and Italian.</li> +<li> added translator support for Arabic (thanks to Moaz Reyad)</li> +<li> added translator support for Persian (thanks to Ali Nadalizadeh)</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 131445: Fixed autolinking for related functions.</li> +<li> id 137236: Updated documentation to make it clear that a lower-case only word + is not a candidate for autolinking.</li> +<li> id 141758: Fixed a problem parsing <?=...?> contructs outside of functions in PHP.</li> +<li> id 319169: Second level index not shown when DISABLE_INDEX=YES.</li> +<li> id 325337: Added "optimize output for C#" option to Doxywizard.</li> +<li> id 325426: Partial C# class inside a namespace where not handled properly.</li> +<li> id 327358: Fixed wrong link to the search engine when CREATE_SUBDIRS was set to YES.</li> +<li> id 326885: Leading ///'s ended up in code fragments when using indented + /// comments.</li> +<li> id 330513: For file documentation, the scope not stripped for namespace members + even if HIDE_SCOPE_NAMES was set to YES.</li> +<li> id 335131: Fixed "internal inconsistency" warning related to use of nested + classes defined outside a used namespace.</li> +<li> id 338475: Added support for Q_SIGNALS and Q_SLOTS macros (thanks to Thomas + Zander for the patch). </li> +<li> id 340973: Improved performance of "Computing template instances" step + significantly in case of (large) Java projects.</li> +<li> id 342090: Fixed missing cross-reference to "m" for code of the form f(a[s.f]->m) </li> +<li> id 344443: Code font commands where not treated properly in C# style comments.</li> +<li> id 344445: Made it more clear in the documentation where the XML commands in the + comment blocks are for, and how <code> works in C#.</li> +<li> id 345322: DOTFONTPATH was corrupted in mingw builds.</li> +<li> id 345519: Fixed problem parsing attributes in C#.</li> +<li> id 345660: Python class members that spanned multiple lines could confuse the parser.</li> +<li> id 345742: enum values were shown twice in some cases.</li> +<li> is 346095: Forced a newline before \normalsize in the LaTeX to avoid + font size issues.</li> +<li> id 346848: Under certain conditions nesting of groups did not work properly.</li> +<li> id 347444: paramref XML command did not render properly.</li> +<li> id 348259: Doxygen now keeps the _formulas.log file when there is a problem + generating bitmaps for formulas. This can help to identify the problem quicker.</li> +<li> id 348481: friend class in unnamed namespace produced bogus error.</li> +<li> id 348537: Fixed internal inconsistency warning that could occur when reopening + an anonymous namespace </li> +<li> id 349867: Fixed issue handling brief and detailed description when + both are positioned after an item. </li> +<li> id 350168: Doxygen didn't parse C# type contraints properly.</li> +<li> id 351890: In some cases C# attributes were treated as properties.</li> +<li> id 353044: C99 style variadic macros were not handled properly by doxygen.</li> +<li> id 353195: Member grouping with SUBGROUPING = YES now works the same for files + and namespaces as it does for classes.</li> +<li> id 354765: A command like \ingroup now ends a brief description as was the case + in the pre 1.4.x series.</li> +<li> id 355922: When a function was found in a namespace but also in the global + namespace, doxygen could make the wrong cross-reference.</li> +<li> id 356204: Setting HIDE_UNDOC_RELATIONS to NO could result in + argument mismatches in certain cases.</li> +<li> id 357092: Spurious doxygen warning when using a class that ends with 'const' + or 'volatile'.</li> +<li> id 357438: tabs and newlines were not parsed properly for html attributes inside + a comment block.</li> +<li> id 357646: objcache.cpp did not compile cleanly on a system with 64 bit pointers.</li> +<li> id 361812: whitespace after the colon at the end of a Python definition caused + parsing issues.</li> +<li> "struct Foo operator+()" was not parsed properly due to the "struct" keyword.</li> +<li> As a side-effect of bug 329861 Obj-C protocols and categories were no longer + extracted. </li> +<li> Fixed an problem with cross-referencing Obj-C code.</li> +<li> Removed the memory leaks reported by valgrind and tuned some data structures + to reduce the memory usage.</li> +<li> enums in a used namespace could cause arguments not to match.</li> +<li> fixed several cases where arguments of function/method declaration and definition + did not match while they should.</li> +</ul> +<p> +\endhtmlonly +\section log_1_4 1.4 Series +\htmlonly +</p> +<h1>Doxygen Release 1.4.7</h1> +<b>(release date 11-06-2006)</b> +<a name="1.4.7"></a> +<h3>Changes</h3> +<ul> +<li> The stylesheet has changed, so if you use your own, you will need to + update it or the output will look ugly.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added support for universal binaries on MacOSX (only the non-GUI part).</li> +<li> Added CALLER_GRAPH config option and \callergraph command to add + a caller (or called-by) graph to a function or all functions. + (thanks to Daniel Sherwood for the patch)</li> +<li> Added REFERENCES_LINK_SOURCE config option which allows to selected + if reference relations should point to the source or to the + documentation (thanks to Daniel Sherwood for the patch).</li> +<li> Included patch by Christoph Pesch to mention the member type in the + warning "Member ... of ... is not documented".</li> +<li> included update for Spanish, Italian, Norwegian, and Czech translations.</li> +<li> Added support for get/set properties in IDL (thanks to a patch by + Sander Stoks).</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 151959: incremental "using" of nested namespaces could prevent + that doxygen matched function declaration against definition.</li> +<li> id 310521: HIDE_IN_BODY_DOCS was longer working.</li> +<li> id 315039: Improved handling of members in an anonymous scope. </li> +<li> id 322415: Under certain conditions a scrollbar appeared in a HTML page + while this was not needed.</li> +<li> id 325845: Documentation parser was confused when starting a HTML list + directly after a \b command.</li> +<li> id 325866: SORT_BY_SCOPE_NAME=YES did not always work if SORT_BRIEF_DOCS + was also enabled.</li> +<li> id 326023: CHM files had @ signs in CHM index for anonymous class enums</li> +<li> id 326250: Fixed incorrect regular expression in constexp.l</li> +<li> id 326688: Added better support for PHP5 style constructors + and destructors.</li> +<li> id 326885: Using multi-line //!-blocks did not work nicely together with + @code...@endcode blocks anymore.</li> +<li> id 327242: Python: Methods starting with _ are now marked private, + except for special method names (i.e. starting and ending with __).</li> +<li> id 327666: Fixed parse issue that resulted in a missing call graph.</li> +<li> id 328435: When enabling USE_PDFLATEX a blank line appeared in the + makefile</li> +<li> id 328849: Added clarification to the manual about the use of //!< + comments.</li> +<li> id 328635: Text of the HTML output didn't always wrap properly anymore + after "fixing" bug 322415.</li> +<li> id 329343: Fixed segment in Python parser caused by @var or @fn with + a missing argument.</li> +<li> id 329530: An apostrophe in ##-comments inside a Python class confused + the parser.</li> +<li> id 329534: Fixed problem resolving inheritance relations for nested + Python classes.</li> +<li> id 329537: Corrected the Python example to show how modules should be + documented.</li> +<li> id 329719: # comment in PHP containing a ' caused doxygen to ignore + rest of input.</li> +<li> id 329861: Fixed problem parsing embedded structs in an Objective-C + interface.</li> +<li> id 329905: PDF manual produced a LaTeX error because style sheet + was not up to date.</li> +<li> id 330209: A typedef in an Obj-C implementation file could obscure + class implementation later in the file</li> +<li> id 331511: no matching class member found error for class template + instance in combination with "using" of said class.</li> +<li> id 331751: Fixed problem parsing a function typedef.</li> +<li> id 332110: method matching failed for equivalent template instance + types.</li> +<li> id 332178: Fixed malformed XML output for readable properties.</li> +<li> id 333270: Fixed BoundingBox problem with PostScript graphs generated + with dot using graphviz-2.9.20060302.0540 and later (thanks to + John Ellison for the patch)</li> +<li> id 332875: Enabling SEPARATE_MEMBER_PAGES could lead to bogus warning + messages about undocumented parameters if only the HTML output was + enabled.</li> +<li> id 333330: Patch the reorganizes the treeview.</li> +<li> id 333831: "typedef const struct { } NAME" construction was not + properly parsed.</li> +<li> id 334716: Doxygen could hang when calling latex with invalid formulas.</li> +<li> id 336467: Latex formula could prevent /// comment blocks to be properly + converted to /** */ blocks.</li> +<li> id 336782: Prevented crash when providing code with illegal/redundant + class scope.</li> +<li> id 337344: Configure now accept system's /usr/bin/install on FreeBSD.</li> +<li> id 341365: @endcode comment was skipped in a specific case.</li> +<li> id 341453: Under certain conditions @cond did not stop at @endcond</li> +<li> id 341456: Fixed crash when feeding doxygen /dev/null as config file</li> +<li> id 342329: Text such as "dir/file.cpp" was not auto-linked.</li> +<li> id 342946: Anonymous enums couldn't be grouped using separate @var block</li> +<li> id 344118: Inbody documentation could hide the detailed description.</li> +<li> id 344172: Class Hierarchy appeared in a C-Code-Documentation.</li> +<li> Protection level of inner classes was not written to the XML output + (thanks to Shachar Itzhaky for the patch)</li> +<li> Included patch by Ernst Giessmann, which prevents most of the underfull + hbox warnings that are produced when compiling doxygen's LaTeX output.</li> +<li> Fixed potential crash during preprocessing if C-macros are defined + with /* (thanks to Günther Haslauer for the patch).</li> +<li> Anonymous struct members could end up in the wrong scope + (thanks to Bruno Andrillon for the patch).</li> +<li> saving to an existing file in doxywizard now requires a confirmation.</li> +<li> Fixed potential crash in case a template class with a redundant + namespace qualifier was used: + e.g. "namespace N { template<> class N::C<G::H> {}; }"</li> +</ul> + +<h1>Doxygen Release 1.4.6</h1> +<b>(release date 30-12-2005)</b> +<a name="1.4.6"></a> +<h3>New features</h3> +<ul> +<li> id 317773: Improved .spec file and better support for building rpms + (thanks to Kevin McBride)</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 145294: Boolean expression with '<' as template argument confused + doxygen.</li> +<li> id 303297: The class hierarchy was sometimes incorrectly shown.</li> +<li> id 317819: Updated the documentation concerning the creation of PDF + output.</li> +<li> id 317967: @‍htmlonly..@‍endhtmlonly type of blocks (including formulas) + were not always working properly if used in inline parameter + documentation.</li> +<li> id 318008: The base class name was missing from the XML output.</li> +<li> id 318208: Enabling SUBDIRS resulted in the tabs at the top of certain + pages not be styled as tabs. Also, links to include dependency graphs + had wrong links or were incomplete.</li> +<li> id 318564: Python: parser skipped comment blocks in some cases.</li> +<li> id 318565: Python: single quote doc strings did not get parsed properly + if there was no space before the closing '''.</li> +<li> id 318567: Python: parse problem when () appear in default value of a + function parameter.</li> +<li> id 318618: If INLINE_INHERITED_MEMB = YES constructors of a + template class were shown in the derived class.</li> +<li> id 318678: Python: A referenced variable that + was not found using docstring could lead to memory corruption.</li> +<li> id 319170: The CHM file did not include the stylesheet material needed + to properly render the tabs at the top of each page.</li> +<li> id 319341: Doxygen crashed while generating call graph under certain + circumstances.</li> +<li> id 319539: Fixed parse problem with Python/Objective-C code.</li> +<li> id 319586: tabs.css not correctly included with CREATE_SUBDIRS option + set.</li> +<li> id 318460: Multiply-defined labels if two function specializations + differ only on the name of a template parameter.</li> +<li> id 319219: Spurious space was inserted after inlined math formulae.</li> +<li> id 319826: The file name for template classes could become too + long causing files that cannot be created by some file systems.</li> +<li> id 320026: undocumented "typedef struct foo baz" causes subsequent + variables appear as typedefs.</li> +<li> id 320543: If enabled the alphabetical class list is now the default + item under the classes tab.</li> +<li> id 320587: Links in brief file descriptions shown in directory pages + were broken if CREATE_SUBDIRS was enabled.</li> +<li> id 320693: First sentence in mainpage was missing with + JAVADOC_AUTOBRIEF enabled.</li> +<li> id 320740: Added support for documenting individual elements of an + associative array in PHP.</li> +<li> id 320813: The if() statement with space after the if confused the + code parser and resulted in partial call graphs.</li> +<li> id 320960: redundant line continuation characters were not removed + by doxygen's C-preprocessor.</li> +<li> id 321165: Doxygen choked on Qt properties with namespaced types</li> +<li> id 321197: using a namespace that contains a nested class, where the + inner class was forward defined, could introduce a bogus namespace + with the name of the outer class.</li> +<li> id 321256: Installation path mentioned in the documentation was wrong.</li> +<li> id 321349: In typedefs like "typedef struct {} T, *pT, the pT typedef + appeared wrongly in the documentation.</li> +<li> id 321540: An array of type an anonymous struct was not parsed + properly if there was a space between the name and the size, i.e. + struct {} Var [10];</li> +<li> id 321682: Fixed typo in the HTML output of the search page.</li> +<li> id 321743: Cross-references were missing to members of + anonymous structs.</li> +<li> id 311833: A template specialization of a private class member was + marked as public.</li> +<li> id 312329: @link label @endlink, i.e without link text now shows + the label as text, and space after label is omitted.</li> +<li> id 312624: \verbatim block could cause wrong line numbers while + parsing the source code.</li> +<li> id 322752: Fixed specific case where aliases were incorrectly expanded + inside environment formulas</li> +<li> id 322997: Putting function-style macros in a parameter of a + template return type of a function confused doxygen's parser.</li> +<li> id 323320: An enum name that also appears as a typedef + (i.e. typedef T {} T; }) is now linked as an enum and the typedef is + omitted from the output.</li> +<li> id 323557: Bit field information was missing from the XML output.</li> +<li> id 323627: Fixed compiler warning when using gcc 4.x.</li> +<li> id 323628: Improved warning when documenting #defines while the + preprocessor is disabled.</li> +<li> id 323988: FILE_VERSION_FILTER incorrectly handled command parameters</li> +<li> id 324076: Fixed some typos in the documentation.</li> +<li> id 324153: The configure script didn't work for SunOS 5.8.</li> +<li> id 324163: \todo paragraph did not end at \author (or similar commands).</li> +<li> id 324313: Added support for having a Linux system where libraries are + located in lib64 by adding a new platform to tmake: linux-64</li> +<li> id 324521: Autolinking to classes in a group which itself was in a + namespace didn't work without explicit scoping.</li> +<li> id 324558: Null pointer dereference in namespacedef.cpp</li> +<li> id 324565: References and callgraphs missing for some functions + (thanks to a patch by Dave Dodge).</li> +<li> id 324566: Fixed problem matching + f(unsigned long const a) against f(unsigned long)</li> +<li> id 324568: Fixed problem were some function prototypes were detected + as variable constructor calls (thanks to Dave Dodge for the patch).</li> +<li> id 324601: Cross referencing and call graphs were broken by + certain bracket positions for functions.</li> +<li> id 324823: Doxygen's code parser lost track in some cases, causing + function definitions not being found in some cases.</li> +<li> id 324891: Doxygen crashed on circular python imports.</li> +</ul> +<h1>Doxygen Release 1.4.5</h1> +<b>(release date 4-10-2005)</b> +<a name="1.4.5"></a> +<h3>Changes</h3> +<ul> +<li> Changed to way the index looks (I hope you like it!). + It now is a list of items styled (with CSS) as a row of tabs. + Also class/namespace/file related items are now grouped together and + presented as a second row of tabs to prevent clutter (the latter is + based on the suggestions/patch in bug report 162968). + Note that if you use a custom HTML header you need to add + <link href="tabs.css" rel="stylesheet" type="text/css"> + to the head section!</li> +<li> Copydoc now copies the brief description as well.</li> +</ul> +<h3>New features</h3> +<ul> +<li> id 306889: Added new config option BUILTIN_STL_SUPPORT. When enabled, + doxygen will assume that STL classes exist (without the need to include + the STL headers as INPUT). + This helps with matching of argument lists for function declarations and + definitions and also helps to improve the collaboration and inheritance + diagrams that involve STL classes.</li> +<li> id 317010: Added support for the following new HTML entities: + &lsquo; &rsquo; &ldquo; &rdquo; &ndash; + &mdash; (thanks to a patch by madalexonline)</li> +<li> Included update for Chinese translation.</li> +<li> included update for the VC++ project files (in wintools dir), thanks + to Johan Eriksson.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 304339: Using \dot in latex formulas conflicted with the doxygen's + \dot command.</li> +<li> id 306076: Using a namespace inside an example listed with + @example did not work.</li> +<li> id 306069: Search engine required lower case names in order to find + something, which made pasting of names difficult.</li> +<li> id 308395: Doxygen could crash when producing a warning that included + a %s sequence.</li> +<li> id 311191: Default values for parameters weren't shown in the detailed + documentation.</li> +<li> id 311198: If JAVADOC_AUTOBRIEF was set to YES, a \todo or \bug like + command always ended at the first dot.</li> +<li> id 311207: The /* and */ inside a \code ... \endcode code fragment + were stipped.</li> +<li> id 311577: Putting a documentated class name in the title of the main + page caused a LaTeX error if pdf hyperlinks were enabled.</li> +<li> id 311665: Fixed compile issue for Solaris.</li> +<li> id 312688: Typedefs of arrays were auto-linked to the base type + i.s.o the typedef.</li> +<li> id 312678: Fixed excessive memory usage for @fn commands + due to a memory leak of the scanner buffer 256K of memory was leaked + for each command!</li> +<li> id 312791: Undocumentated members did not result in warnings if + SOURCE_BROWSER was enable and the member's definition was part of + the INPUT.</li> +<li> A C-comment inside a \code block could lead to parse problems in the + preprocessor, resulting in #defines that are not found.</li> +<li> Fixed problem documenting Python code using docstrings where the module + documentation was not picked up. Also fixed several other Python + related issues. Also included Python examples in the documentation.</li> +<li> id 312805: Using BUILTIN_STL_SUPPORT could result in dead links for + STL classes.</li> +<li> id 312807: Added support for STL exceptions (when BUILTIN_STL_SUPPORT + is enabled).</li> +<li> id 313011: Item after the closing of a nested group was ignored in + some cases.</li> +<li> id 313103: Member groups within other nested groups did not work + anymore.</li> +<li> id 313298: Code parser didn't handle function-try-blocks correctly.</li> +<li> id 313572: Fixed lockup issue when generation code for Python files.</li> +<li> id 313695: Fixed parsing issues for the constructs + "\f$n\f$" and "operator <CODE>". </li> +<li> id 313805: '@' characters in a string literal were lost during + macro expansion.</li> +<li> id 313906: added support for "import" and "from ... import" to the + Python parser so cross module inheritance works.</li> +<li> id 313908: Fixed python parser problem: If there are two classes + defined in one module there needed to be a comment between them.</li> +<li> id 314165: Python functions starting with _ are not marked as public, + whereas variables starting with _ are marked private.</li> +<li> id 314194: Brief description containing 'i.e., ' ended after the + comma.</li> +<li> id 314237: You can now also use \ref on directories documented with + \dir.</li> +<li> id 314288: Using \ref with an ambiguous filename didn't work.</li> +<li> id 315006: C++ comments at the start of a line and + inside a <pre>..</pre> block were stripped.</li> +<li> id 316264: Fixed typo in the inline config file documentation.</li> +<li> id 316266: Included update for the Japanese translation (thanks to + Katsuhiro Hermit Endo)</li> +<li> id 316759: Fixed problem in the Makefile of doxywizard so that the + right version appears in the about box.</li> +<li> id 316944: An inline formula (or other special command) did not get + executed if it was within an inline documentation block and + put after a parameter.</li> +<li> id 317052: The alphabetical class index was not sorted properly if + multiple prefixes were specified using IGNORE_PREFIX. </li> +<li> id 317105: Latex output expanded &szlig; as "s instead of {\ss} which + only worked if german.sty was included. Thanks to Stefan Pawig for the + patch)</li> +<li> id 317397: Copying of images from subdirectory within the IMAGE_PATH + didn't work properly since doxygen didn't remove the subdirectory + from the destination path.</li> +<li> id 317446: Documenting an enum with \enum while there is also a function + with the same name in the same scope could make the enum documentation + appear at the wrong spot or the enum in the wrong member group.</li> +<li> id 317490: A variable of a nested class, forward declared in a template + class, which in turn was in a namespace, caused the variable to end + up in the global scope. </li> + +</ul> + +<h1>Doxygen Release 1.4.4</h1> +<b>(release date 21-7-2005)</b> +<a name="1.4.4"></a> +<h3>New features</h3> +<ul> +<li> Added support for parsing Python code. + Special comment blocks in Python are of the + <pre> + ## + # Some comment + # + </pre> + or you can rely on Python docstrings. + This code uses the new parser interface and was based on the work done + by a group of students as part of a compiler design project.</li> +<li> Added support for C# style XML tags in the comments. + See the manual or the C# language specification for more details. + Thanks to Talin for doing most of the work.</li> +<li> Added support for the JavaDoc command {@inheritDoc}.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 166254: SORT_BY_SCOPE_NAME didn't work anymore.</li> +<li> id 304380: New argument matching algorithm didn't handle the case + where "const int" needed to be matched against + "const int a" correctly.</li> +<li> id 304435: Superfluous backslash in the makefile caused problems for + Japanese locale.</li> +<li> id 304476: A #define directly after a //!< style comment block was not + parsed properly.</li> +<li> id 304598: Using operator-- in resulted in broken HTML output due to the + embedded doxytag that include the end of a HTML comment.</li> +<li> id 304623: Spreading a @fn command over multiple lines didn't work + anymore without using line-contination characters.</li> +<li> id 304666: Attributes of the same class appeared separated with \n in + collaboration diagrams</li> +<li> id 304751: A define "foo()" was indisguishable from a define "foo" in + the XML output.</li> +<li> id 304752: XML location tag attribute "file" could have the + syntactially wrong value "<generated>" in some cases.</li> +<li> id 305334: INPUT_FILTER tag did not work properly anymore due to + additional quotes.</li> +<li> id 305364: Improved argument matching routine to avoid cases where + declaration and definition of functions/methods could not + be matched.</li> +<li> id 305439: @link command did not work if the link text started with + "const" as part of a longer word. </li> +<li> id 305638: operator& was only usable with @copydoc if the method was + fully qualified.</li> +<li> id 305672: Title of a paragraph was not properly rendered for the + RTF output when using \par in ALIASES.</li> +<li> id 305740: When putting a \b command in a HTML table cell, doxygen got + confused by the cell end tag, causing the rest of the table + to be displayed wrongly.</li> +<li> id 305768: @todo, @bug, @deprecated, etc, did not always end at the + next paragraph.</li> +<li> id 305770: For overloaded global functions only the first appeared + in the file documentation.</li> +<li> id 306028: The text after /*@{ and //@{ was treated as source code + instead of a comment block.</li> +<li> id 306136: Structural commands were executed even though they appeared + within quoted text.</li> +<li> id 306200: Putting a command like \author before \brief caused the + long description to be glued to the \author command.</li> +<li> id 306235: Punctuation is not automatically added to brief + descriptions for Japanese, Chinese, and Korean anymore. </li> +<li> id 306637: @endcond did not properly end a conditional section + when @cond was used without label.</li> +<li> id 306711: Brief descriptions ended at a new paragraph even if no + content was found and @name didn't work without explicit + @{ ... @} block commands.</li> +<li> id 306851: Under certain conditions bogus argument documentation could + appear.</li> +<li> id 306943: Certain constructs could get the code parser off track and + could lead to memory corruption.</li> +<li> id 307579: Fixed argument matching problem where "unsigned int" + did not match "unsigned int i".</li> +<li> id 307613: Documented struct fields declared as a comma separated list + caused the documentation of all fields to be appended.</li> +<li> id 307618: Reference in the source file did not appear if a variable was + documented with \var and also had a brief description.</li> +<li> id 307954: Parse problem when a /* was nested inside a C-style comment.</li> +<li> id 308053: It is now possible to put multiple structural commands into + a single comment block. Doxygen will treat them as + separate comment blocks internally. Example: + <pre> + /** @file + * File documentation. + * @defgroup grp A Group + * Group documentation. + */ + </pre></li> +<li> id 308059: &nbsp; was written as "\ " to the LaTeX output instead + of ~.</li> +<li> id 308400: The parameter names are now used based on whether the + documentation is in front of the declaration or definition.</li> +<li> id 309022: Conversion operators inherited from a template class + did not appear with the proper type substitution.</li> +<li> id 309148: The search index page was not correct if DISABLE_INDEX was + set to YES.</li> +<li> id 309446: Files beginning with one or more digits were not autolinked.</li> +<li> id 309461: Made the configure script look for qt in places like + /usr/share/qt3 (debian) and /usr/qt/3/ (gentoo)</li> +<li> id 309711: Aliases were expanded inside formulas.</li> +<li> id 310012: Made the allowed suffixes for constants in the constant + expression evaluator of the C-preprocessor more strict.</li> +<li> id 310025: Added explicit type conversion to avoid problems with + compiler bugs in Sun's Forte 6.1 and Studio 10 compiler.</li> +<li> Fixed argument matching issue exposed by the template example in the + examples directory.</li> +</ul> + +<h1>Doxygen Release 1.4.3</h1> +<b>(release date 16-5-2005)</b> +<a name="1.4.3"></a> +<h3>Changes</h3> +<ul> +<li> For Developers: Added an abstract interface for language parsers + (see src/parserintf.h), which can be used implement new programming + language parsers. There is also a manager class, where a parser + instance can be bound to a certain file extension.</li> +<li> Changed the algorithm for matching function/method declarations against + their definitions. The new algorithm should be faster, more powerful, + and more accurate.</li> +</ul> + +<h3>New features</h3> +<ul> +<li> Included new config option HTAGS. When enabled in combination with + SOURCE_BROWSER=YES, the source browser of GNU's Global source + system (via htags) is used instead of doxygen's own (thanks to + Shigio Yamaguchi for the patch).</li> +<li> Added language updates for Indonesian, Catalan, Russian, Korean, + German, Hungarian, Polish, and Lithuanian.</li> +<li> Included update of the .spec file (thanks to Stephane Gourichon).</li> +</ul> + +<h3>Bug fixes</h3> +<ul> +<li> id 163705: Using \image for latex without caption but with size + parameter "width=\textwidth" did not work.</li> +<li> id 163783: Items of an autolist could be wrongly indented if put + directly after @name.</li> +<li> id 163928: Class section was missing in the file documentation.</li> +<li> id 164072: When using tag files unneeded external + classes could appear in the class hierarchy in some cases.</li> +<li> id 169755: page title was omitted in the XML output if + CASE_SENSE_NAME was set to NO.</li> +<li> id 170592: Using \ref for Objective-C methods did not work if the + name contained a colon.</li> +<li> id 171795: Refering to Objective-C methods now follows Apple's + conventions. </li> +<li> id 171878: When JAVADOC_AUTOBRIEF = YES and there was no blank line + after a page command, the first sentence did not appear in + the documentation.</li> +<li> id 171923: Doxygen failed to match arguments for a function documentated + out-of-line with @fn and using @relatesalso.</li> +<li> id 172118: Doxywizard now shows the version of doxygen it is for.</li> +<li> id 172133: Doxygen did not longer ignore preceding C++ comments inside a + comment block.</li> +<li> id 172217: 'using namespace' declarations with spaces resulted + in duplicate namespaces.</li> +<li> id 172329: The index of the CHM did not always link to groups correctly.</li> +<li> id 172456: Fixed case where doxygen had problems differentiating const + and non-const member functions.</li> +<li> id 172494: @code blocks were not poperly ignored by the preprocessor + in some cases.</li> +<li> id 172622: Fixed parse problem for Objective-C method implementations + whole declaration part ended with a semicolon.</li> +<li> id 172723: Namespace members appeared in the file documentation without + proper links to the namespace.</li> +<li> id 172778: A single colon after retval caused a crash.</li> +<li> id 172783: Doxygen will now put quotes around a filter name before + calling it so it will work with filters with spaces in the + name or path.</li> +<li> id 172818: Improved translation of Todo List to German.</li> +<li> id 172937: FILE_VERSION_FILTER failed for filenames containing spaces.</li> +<li> id 173034: The \elseif command was not handled properly.</li> +<li> id 173110: \ingroup did not work with multiple group labels anymore.</li> +<li> id 300204: Doxygen disobeyed Cygwin's 'text/binary mount mode' + (thanks to Max Bowsher for the patch).</li> +<li> id 300466: Improved the documentation for FILTER_SOURCE_FILES.</li> +<li> is 300473: Added a browse button for several of Doxywizard's + fields of the expert dialog where a file was expected.</li> +<li> id 300532: consecutive @todo items were joined together even if they + are in different sections.</li> +<li> id 300745: A disabled @cond section did not omit #define documentation.</li> +<li> is 301409: autolinks to undocumented files did not work correctly when + SOURCE_BROWSER was enabled.</li> +<li> id 301437: Fixed a typo in an example that is part of the preprocessor + documentation.</li> +<li> id 301478: Fixed some cases where cross-references were not properly + detected anymore.</li> +<li> id 301616: Added "+" or "-" to the Objective-C method lists in the + summary section of a class.</li> +<li> id 302100: An enum could not be grouped by grouping out of line + documentation.</li> +<li> id 302158: When enabling SEPARATE_MEMBER_PAGES and CREATE_SUBDIRS + the member index contained invalid links.</li> +<li> id 302160: list directly after @brief not parsed properly if there + were spaces before the @brief command.</li> +<li> id 302713: Updated doxytag so it works better with recent versions + of Qt3 and the Qt4 beta versions.</li> +<li> id 303305: When using \subpage the page hierarchy wasn't reflected + in the tree view or .chm index.</li> +<li> id 303511: Documenting a class in a namespace with a comment block + inside the namespace containing a @class command did + not work properly.</li> +<li> id 303911: Links from todo list items to Objective-C categories were + broken.</li> +<li> id 304026: A class/struct/interface can now be turned into something + else of the same kind using the proper command (i.e. + @interface could by used to turn a class into an interface).</li> +<li> Doxygen did not honor the "All members of an interface in Java are + implicitly public" rule.</li> +<li> An enum of a class could not be documented with @enum from inside a + namespace.</li> +<li> Fixed problem handling unname member groups (useful in combination + with DISTRIBUTE_GROUP_DOC = YES, which didn't work anymore).</li> +<li> Updated Doxygen.dsp (thanks to Gerik Rhoden).</li> +<li> For a word marked with a #, the # is now also removed when no link + could be generated.</li> +<li> Using '<' (or '\<') in a <pre> section cause '$<$' + to appear in the Latex output.</li> +</ul> + +<h1>Doxygen Release 1.4.2</h1> +<b>(release date 28-3-2005)</b> +<a name="1.4.2"></a> +<h3>Changes</h3> +<ul> +<li>If the class/namespace/file member indexes get too long they are now + automatically split over multiple pages (one page per index letter).</li> +<li>Internal: I've split the input scanner (scanner.l) in a part that scans + the supported programming languages and passes the comment blocks to a + second scanner. This should clean up the code a lot and make + the handling of structural commands (like \class and \section) + more consistent. It is also a first step towards supporting dedicated + scanners for other programming languages. </li> +<li>Made doxygen parse .as files (Action Script) as Java code.</li> +</ul> + +<h3>New features</h3> +<ul> +<li>Added a new option SEPARATE_MEMBER_PAGES. When enabled doxygen will + generate a separate page for each documented member, instead of putting + all members on the class/file/namespace page. An index for other members + of the same compound is rendered on the left hand side of the page.</li> +<li>Added new command \subpage that can be used to build a hierarchy of + pages. For pages this is more convenient than using \defgroup + and \ingroup. See the documentation more details and an example.</li> +<li>Included man pages for doxygen and doxywizard.</li> +<li>Language updates for Czech, Swedish, Russian, Italian, Catalan, + German, Brazilian, Korean, Ukrainian, Romanian, Croatian and Chinese,</li> +</ul> + +<h3>Bug fixes</h3> +<ul> +<li>id 124214: #'s inside a single quoted PHP string could lead to parse + problems.</li> +<li>id 142339: Doxygen did not using the LATEX_CMD_NAME setting when + generating formulas.</li> +<li>id 163180: Extension specific filters did not work.</li> +<li>id 163940: Labels in dot graphs containing quotes where + not escaped properly.</li> +<li>id 164198: \overload text was always English, it is now translatable.</li> +<li>id 164498: Fixed problem where doxygen ignored the documentation for + members of Objective C class categories when put in the + implementation section.</li> +<li>id 164563: \anchor didn't work inside a <pre>...</pre> section.</li> +<li>id 164812: fix compile problem for certain language selections.</li> +<li>id 165097: Fixed problem with wrong syntax color in \code section.</li> +<li>id 165188: in index.xsd the refid attribute type (xsd:Name) was + not broad enough and has been replaced by xsd:string.</li> +<li>id 165339: Fixed some issues in the code parser causing missed + cross-referencing relations and/or call graphs.</li> +<li>id 165428: ALIASES containing @section commands where not + handled properly.</li> +<li>id 165503: grouped classes did not appear as such in the XML output.</li> +<li>id 165793: input filter was applied to \verbinclude.</li> +<li>id 165816: Grouped functions referenced via tag files had broken links</li> +<li>id 165821: Tag file parser produced bogus errors for nested classes and + namespaces and no line number was reported.</li> +<li>id 166043: static initializer block in Java made doxygen ignore the + rest of the file.</li> +<li>id 166161: More documentation to make the \code command more clear.</li> +<li>id 166756: Fixed a number of issues with the new comment scanner. + It should be much more usable now.</li> +<li>id 166782: XML output: Simple types in a namespace are also + listed at file scope in index.xml</li> +<li>id 166863: @class required fully qualified name even if the comment + block was in the right scope already.</li> +<li>id 166898: Forward declaring a template class added the template + argument to next class defined</li> +<li>id 167037: The method names were non-informative in the todo like + lists when HIDE_SCOPE_NAMES was set to YES (thanks to Luigi Ballabio + for the fix).</li> +<li>id 167040: Related functions were listed as members in the todo list.</li> +<li>id 167462: Doxygen doesn't recognize references to methods of classes + that come as parameter</li> +<li>id 168159: Sometimes enums don't have hyperlinks in the source code.</li> +<li>id 168243: Doxygen produced an unclear warning when putting multiple + @page commands in one comment block.</li> +<li>id 168693: A C-style comment ending with a brief description (including dot) + and a **/ as end marker, caused strange warning.</li> +<li>id 168734: Nested C comments in a \code block confused the preprocessor.</li> +<li>id 168754: //@{ was not working with the new comment block scanner.</li> +<li>id 168871: \~ did not work in C++ style documentation and aliases.</li> +<li>id 168961: Fixed problem parsing arrays of unnamed structs.</li> +<li>id 169003: cross-references were make to global variables even if the + global variables were hidden by local ones or + undocumented/private member variables.</li> +<li>id 169069: static C++ variables with initializers were detected as + functions.</li> +<li>id 169188: static functions were not extracted from PHP classes even + though EXTRACT_STATIC was set to YES.</li> +<li>id 169495: const Qt properties were not parsed properly.</li> +<li>id 169535: spaces after \ref command were not preserved + in <pre> context when the command had only one argument.</li> +<li>id 169547: Removed bogus warning for friend classes inside classes in + an anonymous namespace.</li> +<li>id 169549: Previous fixes introduced flattening of the class hierarchy.</li> +<li>id 169640: File suffix check for the D language was broken.</li> +<li>id 169641: D contructors and destructors were not detected.</li> +<li>is 169657: Fixed the way import is treated in D to prevent recursive + lockup.</li> +<li>id 169784: Objective-C methods with a variable number of arguments were + are not parsed properly.</li> +<li>id 169789: Images specified via \image are now also copied to the + XML output.</li> +<li>id 170612: documenting members of nested anonymous compounds did no + longer work.</li> +<li>id 170833: <code> ended a brief description.</li> +<li>id 170835: doxygen didn't match members of classes in unnamed + namespaces with their definitions</li> +<li>id 170846: template instance friend classes could not be documented + externally. </li> +<li>id 171260: In some cases doxygen produced an incorrect warning about + duplicate detailed descriptions.</li> +<li>id 171295: It now possible again to link to a (enum)value of a @retval using + #name.</li> +<li>id 171376: \else command was not properly parsed if the corresponding + \if was disabled. </li> +<li>id 171749: Using @relatesalso for functions in a namespace didn't work + correctly.</li> +<li>It is now possible again to use Thing%s to auto-link to a class + Thing and put a non-linked "s" after it.</li> +<li>Nested anonymous namespaces appeared as @<num> in the + documentation of the parent namespace.</li> +<li>aliases containing @brief were not handled correctly.</li> +<li>The class name in the HtmlHelp index was linked to the + first member function of that class instead of the class itself.</li> +</ul> + +<h1>Doxygen Release 1.4.1</h1> +<b>(release date 11-1-2005)</b> +<a name="1.4.1"></a> +<h3>Bug fixes</h3> +<ul> +<li> id 163058,163401: Due to a memory corruption bug doxygen could crash under certain conditions + (the Windows binary was the most sensitive to this).</li> +<li> id 163003,163495: Doxygen crashed when GROUP_GRAPH and UML_LOOK were enabled.</li> +<li> Book icon in the treeview is now clickable and has the appropriate action (thanks to + Will Bateman).</li> +<li> Entering the expert dialog in doxywizard now only requires saving the config file + if actual changes were made.</li> +</ul> +<h1>Doxygen Release 1.4.0</h1> +<b>(release date 31-12-2004)</b> +<a name="1.4.0"></a> +<h3>Changes</h3> +<ul> +<li> In the HTML help output (.chm files) the index items with only one + subitem are now collapsed into one item (thanks to Antony Pranata for + the patch).</li> +<li> Some minor tweaks to the style sheet.</li> +<li> @relates can now not only be used for functions, but also for + other members (i.e. enums, types and variables).</li> +<li> Static members do have have explicit "static" in the declaration + part of the documentation. This is useful for grouping where it + is otherwise not obvious that a member is static.</li> +<li> typedefs and enumeration are no longer shown in the "referenced by" + list as these are types (based on patch by Antoine Tandin). </li> +<li> Make configure script use solaris-g++ by default (Sun's own compiler + generates faulty code for doxygen).</li> +</ul> +<h3>New features</h3> +<ul> +<li> Included language update for Serbian, German, and Korean.</li> +<li> For directories dependency graphs are now generated (controlled + by the DIRECTORY_GRAPH switch). For a given directory, the graph will + show its parent directory and the sub directories as nested boxes. + For the directory and its sub directories it will show the relations + with other directories. Relations are based on #include relations of + the files contained in the directories. Each dependency arrow has an + associated number. This number indicates the number of + different #include relations. Clicking on the number will show a page + with the exact #include relations (the latter is for the HTML output + only). </li> +<li> Added \cond and \endcond commands, which can be used to + (conditionally) exclude a part of a file. See the manual for an + example.</li> +<li> Added "-d ExtCmd" debug option, which when used shows what doxygen + will execute when invoking an external command (such as dot). </li> +<li> New option WARN_NO_PARAMDOC that warns about the absence of function + parameter or return type documentation.</li> +<li> Nested classes are now listed in their containing class.</li> +<li> Extended the \f command to support different environments, i.e. + \f{eqnarray*} for equation arrays. The end command is \f}. The + documentation has an example.</li> +<li> Added support for group dependency graphs + (thanks to a patch by Antoine Tandin): New option: GROUP_GRAPHS</li> +<li> New option DOT_TRANSPARENT to enable dot graph with a transparent + background. Thanks to Maik Hinrichs for the patch.</li> +<li> New option FILE_VERSION_FILTER which allows an external tool to + provide version information per file, which is then used in the + file documentation. Thanks to Maik Hinrichs for the patch.</li> +<li> id 162295: New option DOT_MULTI_TARGETS which when set to YES, + will run dot with multiple output files if possible. This was added + to support older version of dot (<=1.8.10) which do not support multiple + output targets. If you use a recent version of dot, you probably want + to enable this (default is NO).</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 119868: Removed warning when </li> ended a @c or similar command.</li> +<li> id 120367: \~lang didn't work correctly around brief descriptions + and certain commands. It is now implemented as an early filter + operation like \cond.</li> +<li> id 135311: Recursive ALIAS definitions now work again.</li> +<li> id 151012: <td> tag in HTML function documentation missed 'class="md"'</li> +<li> id 154689: Wrong link to members of namespaces imported from tag + files when CASE_SENSE_NAMES is set to NO.</li> +<li> id 154700: anchors in pages imported via tag files could not be + linked to.</li> +<li> id 154755: Files were missing from Doxygen.dsp project file. + (thanks to Gerik Rhoden).</li> +<li> id 154758: Fixed typedef resolution bug that could crash doxygen + (thanks to Gerik Rhoden for the analysis and fix).</li> +<li> id 154862: Fixed problem matching array parameters that include + template parameters as the array size.</li> +<li> id 154863: Fixed parsing problem in the preprocessor when an + expression contained the division operator.</li> +<li> id 154469: Referring to Objective-C messages was broken if the full + scope was used.</li> +<li> id 155086: Typedef for member-function pointers of template classes + not recognized</li> +<li> id 155272: Image filenames in RTF output were not quoted causing problem + with custom images whose name contained spaces.</li> +<li> id 155322: Fixed parse problem for php code containing '#'. </li> +<li> id 155224: Java interfaces did't resolve across packages w/o FQN.</li> +<li> id 156411: Return type of a function was not hyperlinked in some cases + (typical with nested namespaces or Java packages).</li> +<li> id 156445: function seen first in header and doc'ed in + source broke autolinking depending on the order of the input.</li> +<li> id 157085: Autolinks for const/volatile operators didn't work.</li> +<li> id 157229: Upper case letters in \page "<name>" breaks title on page.</li> +<li> id 157433: Multi-variable declarations were not parsed properly.</li> +<li> id 157485: @todo's inside the body of a function were not handled + properly.</li> +<li> id 158961: Set EXTRACT_ALL to NO resulted in no directory information + unless the directory and files were documented. This is now controlled + by SHOW_DIRECTORIES.</li> +<li> id 158481: I did some memory usage analysis with valgrind's massif tool, + which indicated that a lot of memory was used by QCString objects. + This made me decide to reimplement the class and optimize it for + memory usage. The resulting class saves a "new" operation of 12 bytes + per string object, which seems to reduce the overall amount of + memory used by doxygen by a factor 2 to 3! The implementation seemed + more expense to use (as it always copies the content instead of sharing + it), but the performance has improved nevertheless (probably because + "new" is much more expensive operation than copying small strings).</li> +<li> id 158637: Links to classes in brief description in index pages were + wrong when CREATE_SUBDIRS was set to YES.</li> +<li> id 158884: "typedef [something] enum" in IDL was not handled properly.</li> +<li> id 159487: @ref's to Objective-C class categories were not possible.</li> +<li> id 159973: @todo item in anonymous enum resulted in broken link.</li> +<li> id 160642: Fixed problem parsing multi-dimensional C arrays.</li> +<li> id 160673: Borland's __property keyword was not handled correctly.</li> +<li> id 160824: UML Collab diagram did't show fields in user defined groups.</li> +<li> id 160931: Made configure script use /bin/bash as it apparently didn't + work with /bin/sh anyway.</li> +<li> id 161048: Latex output for directories could contain unescaped + underscores when SHOW_DIRECTORIES was set to YES.</li> +<li> id 161167: /// \file was not parsed properly.</li> +<li> id 161247: If CALL_GRAPH was enabled references were shown even if + REFERENCES_RELATION was set to NO.</li> +<li> id 161320: An incorrect line number was given for inherited comments + which have an error.</li> +<li> id 161321: Fixed problem parsing '"' in PHP code.</li> +<li> id 161394: Fixed problem with inheritance tree showing the same + undocumented base class multiple times.</li> +<li> id 161556: Fixed two parse bugs related to member specializations.</li> +<li> id 162149: URLs with commas were not handled properly.</li> +<li> id 162271: Doxygen was confused by read-only Qt properties.</li> +<li> id 162434: void function gave rise to warnings when WARN_NO_PARAMDOC + was set to YES.</li> +<li> id 162446: Fixed parse problem in code.l, causing it to get off track.</li> +<li> id 162517: A @ref command was not parsed properly if the argument + between quotes was found on the next line.</li> +<li> Dot would not run if doxygen was installed in a path which contained + spaces (Mac OS X).</li> +<li> Functions inside inline methods were not always cross-referenced anymore.</li> +<li> Latex output was broken in some cases where anonymous structs were used.</li> +<li> Fixed bug in doxywizard: if the wizard was used some settings + were not remembered.</li> +<li> Using \n inside an ALIAS definition caused line numbers for + source browsing to become misaligned.</li> +<li> For included-by graphs files with the same name all had the same + node label.</li> +<li> The following typedef was not parsed properly: + typedef function<void (int,int)> ptr_t;</li> +<li> Fixed problems with the WARN_NO_PARAMDOC command.</li> +<li> Struct members of the form "enum a b;" where not properly parsed.</li> +<li> Fixed a couple of memory leaks.</li> +<li> Fixed crash problem on Windows related to the new string implementation.</li> +<li> Fixed problem with Visual Studio project files (in wintools).</li> +<li> Included patch by Antoine Tandin to fix problem with GROUP_GRAPHS + in combination with CREATE_SUBDIRS = YES.</li> +<li> Included patch by Mikhail Glushenkov to make HTML look prettier.</li> +<li> Parsing operator[]s was broken.</li> +<li> Referencing constants via #CONST did not work anymore.</li> +<li> Fixed problem handing multiline ALIASES containing @defgroup and + @ingroup.</li> +<li> Fixed problem handling \n in ALIASES.</li> +<li> @section's in non-page documentation blocks did not work.</li> +<li> Referencing a group label in a @see section, now shows the group's + title i.s.o. the label name (this was already done for @ref).</li> +</ul> +<p> +\endhtmlonly +\section log_1_3 1.3 Series +\htmlonly +</p> +<h1>Doxygen Release 1.3.9.1</h1> +<h3>Bug fixes</h3>(ids refer to the old buzilla issue, just use it in the search box of the <a href="https://github.com/doxygen/doxygen/issues">issue tracker</a>)<br/> +<ul> +<li> Due to an error in the packaging script, an old version of doxywizard + was bundled with the Mac OS X version of doxygen.</li> +<li> Dot would not run if doxygen was installed in a path which contained + spaces (Mac OS X).</li> +<li> id 151012: <td> tag in HTML function documentation + missed 'class="md"'</li> +<li> id 154689: Wrong link to members of namespaces imported from tag + files when CASE_SENSE_NAMES is set to NO.</li> +<li> id 154700: anchors in pages imported via tag files could not be + linked to.</li> +<li> id 154755: Files were missing from Doxygen.dsp project file. + (thanks to Gerik Rhoden for sending an update).</li> +<li> id 154758: Fixed typedef resolution bug that could crash doxygen + (thanks to Gerik Rhoden for the analysis and fix).</li> +<li> id 154862: Fixed problem matching array parameters that include + template parameters as the array size.</li> +<li> id 154863: Fixed parsing problem in the preprocessor when an + expression contained the division operator.</li> +</ul> +<h1>Doxygen Release 1.3.9</h1> +<h3>Changes</h3> +<ul> +<li> Changed the stylesheet so font usage is more uniform and consistent.</li> +<li> Changed the colors of the doxygen logo at the bottom of a HTML page. + Let me know if you prefer this one or the old one.</li> +<li> Improved rendering of template functions and methods in the HTML output + (previously these could push the method names to the right side of the page).</li> +<li> id 149899: A macro defined in the config file (see PREDEFINED) can now + prevented from being undefined (via a #undef in the code) when its + value is assigned via the := operator (e.g. PREDEFINED = A(x):=x ).</li> +<li> id 150631: if HIDE_SCOPE_NAMES is enabled the scope of a method in a + call graph is only shown when the method is of a different + class.</li> +<li> id 151911: Stylesheet is generated earlier in the process.</li> +<li> id 152164, 152166: Improved the way search results are sorted.</li> +<li> Changed the way function pointer arguments are represented in the + detailed description.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Directory information is now extracted by doxygen. Files are + automatically grouped by directory. You can use + the SHOW_DIRECTORIES option to enable/disable this feature. + Added a new command \dir which can be used to document directories.</li> +<li> Language updates for Czech, Swedish, Hungarian, Danish, Russian, Italian, + German, Chinese, Croatian, and Polish.</li> +<li> Applied a patch by Arend van Beelen which adds support for the + new features introduced in PHP5.</li> +<li> Applied a patch by Ferdinand Wess for better handling of #import + statements in Obj-C code.</li> +<li> Applied a patch by Adam Treat to add read and write accessors + of a Q_PROPERY to the XML output.</li> +<li> Arnaud Bercegeay has added platform support for the Atari MiNT OS. </li> +<li> Included patch by James Ahlborn which improves the way nested numbered + lists are layouted in the HTML output.</li> +<li> Included update for Hungarian translation.</li> +<li> Added patch to improve support for Debian + (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=263542)</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 123772: putting an example inside a group caused broken links to + in the example list.</li> +<li> id 125737: Fixed link error when a @todo item was placed in the + documentation of a variable inside a anonymous union/struct.</li> +<li> id 126344: Added initial support for member template specializations.</li> +<li> id 126448: Argument passed to input filter was not always quoted.</li> +<li> id 126745: Anchors of grouped members were wrong in some cases.</li> +<li> id 128585: Lists were not always rendered properly in the man page + output format.</li> +<li> id 128809: Hidden files (starting with a dot) could not be included + with for instance \verbinclude.</li> +<li> id 130431: Prevented recursive loop in the call graph when a function + declares a local variable with the name of the function.</li> +<li> id 131299: \copydoc with argument A#func() didn't work.</li> +<li> id 131354: Fixed bug matching function declaration/implementation with + using declarations.</li> +<li> id 135448: Improved autodetection of Qt by the configure script + some more (thanks to Michael Henry).</li> +<li> id 135808: Removed reference to doxysearch.cpp from Doxyfile included + with the source distribution.</li> +<li> id 138629: Included patch to make the HTML output more conformant to + the XHTML standard (thanks to Jan Nijtmans).</li> +<li> id 144865: Variables in anonymous unions/structs did not appear as + data fields.</li> +<li> id 148547: Added a workaround for a compile problem in pngrutils.c + on AIX 5.2.</li> +<li> id 148671: Using "publicsomething" as a name for a base class resulted + in the "public" part being stripped.</li> +<li> id 148707: <a href> and <br> tags are now allowed inside html headings.</li> +<li> id 149023: Fixed template inheritance through typedefs problem.</li> +<li> id 149045: Fixed several small problems related to template handling.</li> +<li> id 149106: Fixed problem parsing enum declarations.</li> +<li> id 149164: Fixed problem in the configure script when used with perl + version 5.6 (thanks to a patch by Joerg Schlichenmaier)</li> +<li> id 149258: Example sources could be wrongly indented.</li> +<li> id 149263: Fixed copy/paste error in HTML_FOOTER documentation.</li> +<li> id 149698: Multiple lines of //!< comments were not handle correctly.</li> +<li> id 149711: Title of a namespace page/section was not generated.</li> +<li> id 149797: Forgot to turn off debug mode for the RTF output.</li> +<li> id 149880: Brief description of one variable could appear in the + the description of the next under certain circumstances.</li> +<li> id 150264: linking to Obj-C protocols did not work.</li> +<li> id 150427: "virtual" and "const" were not nicely formatted when + followed by unary scope resolution operator (e.g "const ::A")</li> +<li> id 150629: Enabling OPTIMIZE_OUTPUT_JAVA did not help for call graphs.</li> +<li> id 151457: Fixed compile problem on Solaris 4.2.</li> +<li> id 151452: Bug in LaTeX output for anonymous structs/unions whose + members have brief descriptions.</li> +<li> id 151246: Parse error when using in-body comment blocks.</li> +<li> id 152005: Objective-C string constants appear in output with @"@"</li> +<li> id 152182: Spaces mess up type in Objective C functions.</li> +<li> id 152184: label-less parameters in Objective C functions were not + parsed properly.</li> +<li> id 152383: Objective-C categories showed methods twice.</li> +<li> id 152572: \brief inside an argument description caused a bogus warning.</li> +<li> id 152681: Call-graphs were generated inside a table environment in + the HTML output.</li> +<li> #include after a @file comment made the #include appear on the same line + when DETAILED_AT_TOP was enabled.</li> +<li> User specified images & stylesheets did not work with + CREATE_SUBDIR.</li> +<li> Nested using directives did not work for C#.</li> +<li> Grouped classes did not always appear in the modules section of the + navigation tree.</li> +<li> "internal" classes appeared in the XML output.</li> +<li> friend classes did no longer appear in the output even when + HIDE_FRIEND_COMPOUNDS was set to NO.</li> +<li> Fixing bug in code parser when encountering arrays and some other + related problems.</li> +<li> Array initializers did not show up regardless of the + MAX_INITIALIZER_LINES setting.</li> +<li> Improved support for classes with the same name but in different + namespaces in combination with "using" of namespaces.</li> +</ul> +<h1>Doxygen Release 1.3.8</h1> +<h3>Changes</h3> +<ul> +<li> Rewrote doxywizard. It should be more easy to use and has much better + support for running doxygen from the GUI. Feedback is welcomed!</li> +<li> Members of a namespace are now also added to the file in which they + appear (thanks to Mike Morearty for the patch).</li> +<li> Included patch by Mikhail Glushenkov that fixed item 5 on the todo list + (titles of html pages are now internationalized).</li> +<li> A macro defined in the config file can now be undefined in the + source code via a #undef.</li> +<li> Optimized calling of dot using multiple -T flags at a couple of places + (note that doxygen now requires graphviz >=1.9)</li> +</ul> +<h3>New features</h3> +<ul> +<li> New option FILTER_PATTERNS which can be used to specify multiple + input filters, and let doxygen select the right one based on + matching the source file name with a specified pattern (thanks to + a patch by James Ahlborn).</li> +<li> id 142939: New commands \protocol and \category which can be used + to document Objective-C protocols and categories in the same way + the \class command does for classes.</li> +<li> Included patch that removes some cosmetic annoyances in the man page + output (thanks to Chris Croughton).</li> +<li> Added internationalization support for Afrikaans and + Lithanian. Included language updates for Dutch, + Czech, Italian, Brazilian, Croatian, Japanese, Norwegian and + Russian.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 120810: \code fragment has links first time, but then no more.</li> +<li> id 124214: Fixed parse problems with single quoted strings in PHP.</li> +<li> id 135508: Using a namespace in C# did not get interpreted correctly.</li> +<li> id 137842: Using @todo/@bug/... and disabling the generation of the + list, still caused a colon to appear in the output.</li> +<li> id 138075: A comment block containing a \code block with C style + comments was not properly parsed.</li> +<li> id 138307: Fixed parse problems with single quoted strings in PHP.</li> +<li> id 138394: C style comments placed on the same line after a macro + definition appeared as part of the macro's value.</li> +<li> id 138429: Fixed language setting for HTML output when using + traditional chinese.</li> +<li> id 140259: Using @dotfile in a comment block could cause broken @refs + to sections defined after the @dotfile command.</li> +<li> id 141915: Fixed a couple of problems with the RTF output.</li> +<li> id 141918: Fixed a couple of problems with the RTF output.</li> +<li> id 142118: Fixed compile issue with the mingw compiler.</li> +<li> id 142288: Doxywizard crashed when started (fix was applied to version + 1.3.7 as well).</li> +<li> id 142741: Links in todo/bug/... lists were broken if CREATE_SUBDIRS + was enabled. Same was true for the built-in diagrams.</li> +<li> id 142925: Autolinking to a member of a class from a page inside a + namespace did not work.</li> +<li> id 142940: Due to a misplaced break statement a examples included + with \example was shown twice in the output.</li> +<li> id 143107: Made some cosmetic changes to the HTML and HTML output, + (thanks to David Baird for the patch).</li> +<li> id 143340: Fixed autolink problem for names ending with a colon or + a <br> tag.</li> +<li> id 143412: Fixed problem parsing Objective C class methods.</li> +<li> id 143413: Fixed problem parsing Objective C root classes.</li> +<li> id 143593: Under certain conditions the XML output could contain a + reference to a non-existing class.</li> +<li> id 145295: Variable of a templated type was mistaken for a function.</li> +<li> id 145583: Fixed problems handing formulas and graphs defined using + @dot in combination with CREATE_SUBDIRS = YES.</li> +<li> id 147253: Quotes in a class initializer could confuse the source + code parser.</li> +<li> id 147425: The class diagram did not show the relation to the template + specialization when inheritance was done via one or more typedefs.</li> +<li> Fixed case where template classes "used" via typedefs were not + properly shown in the collaboration diagram.</li> +<li> Variables explicitly declared external were reported being defined + at the place they were actually declared external.</li> +<li> Fixed bug in the XML schema for enum values with initializers.</li> +<li> Documentation of a member group did not appear in the XML output + (thanks to Chris Croughton for the patch).</li> +<li> Command line build process failed under windows if the name of the + directory in which sources are located contained spaces (thanks to + Mikhail Glushenkov for the patch).</li> +<li> Improved cross-referencing to methods of a template instance variables + (thanks to a patch by Jeff Apple).</li> +<li> Included a patch by Enrico Schnepel that puts the same output files + in the same subdirectories (with SUBDIRS = YES) for subsequent runs + (on slightly modified input files) and also renumbers the dot nodes + so they are only regenerated when actually changed.</li> +<li> Unsupported HTML end tags and unsupported begin tags with attributes + are now copied to the output as is.</li> +</ul> + +<h1>Doxygen Release 1.3.7</h1> +<h3>Changes</h3> +<ul> +<li> The \param command now has an optional input and/or output attribute. + The syntax for an input & output parameter is for example: + \param[in,out] name Description.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added new option CREATE_SUBDIRS which when enabled makes doxygen + distribute the generated output evenly over 100 subdirectories.</li> +<li> Added support for Qt's properties (i.e. Q_PROPERTY) which can be + documented by putting a documentation block in front of the macro or + by using a comment block with the new \property command. </li> +<li> Added new commands \manonly and \endmanonly to enter man page specific + text and commands in the generated man pages (thanks to Carsten Stiborg).</li> +<li> Included new python based translation report script, which now + replaces the old perl based version (thanks to Petr Prikryl).</li> +<li> Improved parser to also support parsing of Objective-C implementation + files.</li> +<li> Added new config option EXTRACT_LOCAL_METHODS which can be used for + Objective-C code to extract methods definition in the implementation + section that are not present in the interface.</li> +<li> Added new config option STRIP_FROM_INC_PATH which allows to + specify a list of paths that, if matched, will be striped from the + #include statement in the generated documentation of a class.</li> +<li> Added new command \includelineno with works as \include except it will + add line numbers to the code (thanks to Giancarlo Niccolai for the patch).</li> +<li> Added BeOS support, thanks to a patch by Mark Hellegers.</li> +<li> Included update for the French translation, thanks to Jacques Bouchard.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 133388: Fixed problem parsing '"' inside multi-line C++ style + comment blocks</li> +<li> id 134265: Doxygen now outputs unrecognized HTML tags instead of + removing them (thanks to Éric Malenfant for the patch).</li> +<li> id 134869: When HIDE_SCOPE_NAMES was set to NO, the methods of an + Objective-C class did not have the right name.</li> +<li> id 134876: Fixed problem with forward declaration of a protocol in + Objective-C.</li> +<li> id 134647: using a parameter name ending with "const" was not + accepted by doxygen.</li> +<li> id 134639: Fixed parse problem in the preprocessor.</li> +<li> id 137398: add \% command to the documentation.</li> +<li> id 137730: Fixed problem for man pages with non numeric extension + (thanks to a patch by Joe Schirmer).</li> +<li> id 138652: Line numbers for defines with /* */ comments were wrong + (thanks to J. Noack for the patch).</li> +<li> id 139591: Fixed problem parsing nested template arguments with + comments.</li> +<li> id 140012: a variable could appear in a group twice if it was + declared externally somewhere.</li> +<li> id 140540: Fixed problem parsing "@" in the source code parser.</li> +<li> id 141133: Spaces were stripped in default arguments such as + f(const char *t=" \t")</li> +<li> id 141364: Members of an anonymous nested structure had no brief + comment and no link to the detailed description if available.</li> +<li> Fixed recursive lockup problem that was caused by two or more + namespaces using each other (i.e. a cycle in the usage relation).</li> +<li> Included patch by Erik Zeek to allow the explicit setting of QTDIR to + override the "search for Qt" algorithm in the configure script.</li> +<li> Parsing of tag files produced for Objective-C code now works.</li> +<li> Objective-C: Improved hyperlinking of source code, handling of + prototypes and the list of all members of a class now also contains the + members of class categories.</li> +<li> Third argument of @class was ignored (thanks to Mahadevan for the patch).</li> +<li> Fixed problem with collaboration diagrams for template instances + whose template parameter list contained qualified scope names + (e.g A<B::C>).</li> +<li> Removed bogus warning about undefined documented function for + classes that were made friends of other classes.</li> +<li> Spaces where not preserved for @code block inside a @example block.</li> +<li> Undocumented dependency relations where not shown in some cases + even though HIDE_UNDOC_RELATIONS was set to NO.</li> +<li> Fixed two bugs that resulted in invalid HTML output. </li> +<li> For Unix the default FILE_PATTERNS did not include upper case versions + such as .C and .H</li> +<li> Fixed incorrect character encoding problem for the generated tag files.</li> +<li> Fixed problem that could lead to memory corruption/crashes.</li> +<li> Included a patch by Bernhard Rosenk to fix a compile problem with + doxywizard using a recent Qt version.</li> +<li> Call-graphs were missing if a file name ended with ".C" and K&R + function definitions were used.</li> +<li> Improved source code generation performance when there are many + typedefs with the same name in different scopes.</li> +<li> Linking to a section resulted in the wrong label in the XML output.</li> +</ul> +<h1>Doxygen Release 1.3.6</h1> +<h3>Changes</h3> +<ul> +<li> For projects with many nested classes, namespaces, typedefs and using + statements, doxygen could become very slow. This should + now be improved significantly.</li> +<li> Made some cosmetic changes to the HTML output (thanks to Ben Harper).</li> +<li> STRIP_FROM_PATH now by default strips the path from which doxygen is + run (i.e. $(PWD)/ on Unix)</li> +</ul> +<h3>New features</h3> +<ul> +<li> Make a start with adding support for Objective-C. Doxygen can now + parse Objective-C header files (including protocols and categories). + Thanks to Apple for donating hardware.</li> +<li> Include a patch by Hauke Duden which adds preliminary support for + the D programming language (see http://www.digitalmars.com/d).</li> +<li> C Comments inside #defines are now preserved. This could be useful + to document boilerplate code.</li> +<li> Included patch to replace tabs by the proper amount of spaced inside + code fragments in the XML output (thanks to Alexandr for the patch). </li> +<li> Included Gerik Rhoden's fixes for the .dsp/.dsw files found in the + wintools dir.</li> +<li> Examples (documented via \example) are now included in the XML output.</li> +<li> New option SORT_BRIEF_DOCS which when enabled will list the + declaration section of the documentation (with the brief descriptions) + in alpabetical order, instead of declaration order (thanks to + Akos Kiss for the patch).</li> +<li> Included patch for Hungarian translation (thanks to Akos Kiss) + and for the Serbian language. Added support for mixed Korean/english + (thanks to Jihoon Chung). + The translator report script was also updated (thanks to Petr Prikryl)</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 120070: Included workaround for build problems with RedHat 9 + (thanks to Tim van Holder)</li> +<li> id 128054: Fixed rare case where doxygen crashed due to a recursive + lock-up.</li> +<li> id 131404: Fixed problem cross-referencing PHP member functions.</li> +<li> id 131434: Clarified confusing warning message.</li> +<li> id 131446: Extra attributes of a <a href> tag (like target) are now + copied to the HTML output.</li> +<li> id 132535: Fixed problem with generating man page output for groups + with brief descriptions.</li> +<li> id 132772: Fixed compile problems on HP-UX using acc compiler + (thanks to Clyde Gerber).</li> +<li> id 133300: Fixed missing cross-reference to "c" in constructs such as + "a[b].c"</li> +<li> id 133482: Fixed spurious cross-references to member function which + was shadowed by a parameter name.</li> +<li> id 133986: Attributes of the <img> tag where not written to the + HTML output.</li> +<li> id 134123: Fixed problem with multiple arrows between nodes + in the graphical class hierarchy.</li> +<li> \ref in dot graphs was not working correctly (thanks to + Eoin MacDonell for the fix).</li> +<li> Grouped pages in the XML output did have the same id as their group.</li> +<li> Fixed problem handling environment variables inside a + quoted string in the config file (e.g. "$(HOME)/My Path/").</li> +<li> Using "\mainpage notitle" caused the "notitle" to appear in the treeview.</li> +<li> Page references where wrong in the latex output when PDF_HYPERLINKS + was disabled.</li> +<li> Words inside a hyperlink could be hyperlinked, resulting in invalid + HTML.</li> +<li> Fixed parse error handling function pointer arguments in K&R-style code.</li> +<li> Doxygen could crash when it failed to enter a directory.</li> +</ul> +<h1>Doxygen Release 1.3.5</h1> +<h3>Changes</h3> +<ul> +<li> Doxygen now only regenerates a dot image if it has actually changed! + This could significantly reduce the time of any run after the first. + Checking if a graph has changed is done by computing an md5 hash for + the graph description which is then stored along with the + image generated by dot and compared in subsequent runs.</li> +<li> Improved the way lists look in the man pages (thanks to Silke Reimer).</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added support for parsing K&R style function prototypes. + Please try it on your favourite legacy C project and report any + problems.</li> +<li> Included languages updates for Traditional Chinese, + Danish, German, Korian translation.</li> +<li> id 120464: doxygen's XML output does now assign a prot="..." + attribute for nested classes (thanks to Paul Ross for the patch).</li> +<li> Added new configuration switch XML_PROGRAMLISTING to enable/disable + generating source code listings as part of the XML output (thanks to + Paul Ross for the patch). </li> +<li> Added new config option ABBREVIATE_BRIEF which makes the + abbration process of brief descriptions configurable and language + independent (thanks to Jake Colman for the patch).</li> +<li> The alphabetical class list now comes with a quick index + (thanks to Marcin Zukowski for the patch).</li> +<li> An XSLT script "combine.xslt" is now generated in the XML output + directory. It can be used to combine XML files into one big file.</li> +<li> The source code is now indexed and thus searchable when the source + browser and search engine options are enabled.</li> +<li> Added "dist" target to the makefile (thanks to Erik Zeek)</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> id 119778, 123385: Documentation in the body of a function could not be + combined with a detailed description before the declaration.</li> +<li> id 122852: References to grouped functions were wrong in certain cases.</li> +<li> id 123031: problem matching f(const char) with f(const char cc).</li> +<li> id 123140: typedef'ed enums whose tag name was the same as the typedef + name did not appear in a group.</li> +<li> id 123145: Under certain circumstances an assertion failed message + was produced.</li> +<li> id 123206: Fixed problem in qtools when opening files in text mode.</li> +<li> id 123322: The search page did not honor DISABLE_INDEX.</li> +<li> id 123420: Functions with a brief description caused bugus </em> tags + in the HTML output.</li> +<li> id 124114: typo in the generated PHP search script could cause errors + in the search result page.</li> +<li> id 124187: Setting EXTRACT_LOCAL_CLASSES to NO, could result in a + broken "More..." link in documented local classes inside a namespace.</li> +<li> id 124214: Fixed problem in search indexer, which could crash doxygen + (thanks to Daniel Koebbing for the patch).</li> +<li> id 124545: fixed a number of problems in the generated search script.</li> +<li> id 124815: Fixed compile problem in filedef.h for aCC on HP-UX.</li> +<li> id 125369: Fixed inconsistency of showing files in the tree view + (thanks to a patch by Alexey Neyman).</li> +<li> id 125424: Font size was not reset after @endcode or verbatim block + in the latex output.</li> +<li> id 125654: Character encoding was not correct for html help treeview + (thanks to Sawada Kentaro for the fix).</li> +<li> id 125367: Fixed problem with producing links in case files with + the same name (but in different directories).</li> +<li> id 126968: Fixed problem parsing verbatim string literals such as + @"\" in C#.</li> +<li> id 127094: Fixed character encoding problem in the XML output.</li> +<li> id 131364: Fixed parse problem when initializing a function pointer.</li> +<li> Links to classes, files, namespaces and groups in the search results + were broken (missing file extension).</li> +<li> Doxygen logo is now transparent even when viewed with IE.</li> +<li> Using a character with ascii code 0x06 in a comment block could crash + doxygen if the preprocessor was enabled.</li> +<li> Fixed problem handling conditional commands and grouping (thanks to + Silke Reimer for the patch).</li> +<li> Fixed problem using \dotfile in combination with RTF output + (thanks to Vegard Larsen).</li> +<li> Fixed several problems related to the new md5 hash feature.</li> +<li> Undocumented functions referenced in a comment block were linked to + anyway.</li> +<li> Fixed a number of typos in the config file documentation (thanks to + Boaz Kelmer)</li> +<li> Workaround for toupper() bug for Russian (thanks to cav@cryptopro.ru)</li> +<li> Fixed problem that HTML image maps ended up in the RTF output.</li> +<li> Fixed bug in code fragment parser that could cause memory corruption + in certain cases.</li> +<li> Fixed problem matching definition and declation of functions, which + could cause bogus warnings for functions with the same name but in + different namespaces.</li> +<li> Using "/// @file" to document a file quickly was not possible, while + "/** @file */" did work. Now both work.</li> +</ul> +<h1>Doxygen Release 1.3.4</h1> +<h3>Changes</h3> +<ul> +<li> Rewrote the search engine. The doxysearch CGI binary has been + replaced by a PHP script which is generated by doxygen. Also the + index file is now generated by doxygen and requires way less memory. + This should make it much easier to use the search facility. + All that is required is a web server with PHP 4.1 or higher. + Please report any problems you find.</li> +<li> Changed the way class names are resolved. This can result in + a significant speedup for projects that use namespaces and typedefs + (including Java projects). Thanks to Edmund Green for the performance + analysis and ideas.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added support for the &oslash;, and &Oslash; character entities.</li> +<li> Added language updates for Korean, Swedish, German, Russian, + Croatian, Brazilian, Spanish, Japanese, French and Italian.</li> +<li> Added new \relatesalso command, which can be used to put a file member + also in the documentation of a class (thanks to Ian Scott for the patch).</li> +<li> Added support for pseudo IDL files with the .pidl extension + (as used in TAO). Thanks to Éric Malenfant for the patch.</li> +<li> Added new commands \dot ... \enddot to include a dot graph in a + comment block (thanks to a patch by Eoin MacDonell). Inside the + URL attribute of a node you can use \ref to make links to documented + items. See the documentation of the \dot command for an example.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed recursive lock-up problem handling "using" of namespaces.</li> +<li> Doxygen incorrectly translated \\htmlonly and \\latexonly to + \verbatim in the output. </li> +<li> Using the -d Time option caused: + message.cpp<100>: Internal error: Requested unknown option QUIET + at the end of the run.</li> +<li> Static members appeared in the todo list even if EXTRACT_STATIC was + set to NO.</li> +<li> Fixed problem matching f(const int *i) with f(const int * const i),</li> +<li> Fixed case where a variable could get by assigned a bogus "()" in the + heading of the detailed description.</li> +<li> Fixed problem handling extern"C" (without the space). </li> +<li> \ref file.c ended up as file::c in the output.</li> +<li> Special characters in generated texts were not always translated into + proper LaTeX commands in the LaTeX output.</li> +<li> Fixed problem parsing "const ::Class *func()" and "static ::Class *func()". + The keywords were seen as namespaces. + due to the use of more than one const keyword.</li> +<li> Fixed two bugs in compound.xsd schema, thanks to Ademar Aguiar.</li> +<li> Fixed some more problems linking typedefs in combination with namespaces.</li> +<li> id 120637: Fixed parse problem handing character literals such + as '"' inside the initializer list of a constructor.</li> +<li> Fixed file handle leak when INLINE_SOURCES was set to YES.</li> +<li> Fixed problem handling Java packages (Internal inconsistency warnings).</li> +<li> Fixed problem preprocessing @verbatim blocks containing C comments.</li> +<li> Fixed problem handling preprocessor statement just before a function + body when ENABLE_PREPROCESSING was set to NO.</li> +<li> id 122457: INLINE_SOURCES feature was broken (only showed the + first line)</li> +</ul> +<h1>Doxygen Release 1.3.3</h1> +<h3>New features</h3> +<ul> +<li> Included update for VC++ 6.0 project/workspace files (can be found + in wintools). Thanks to Simon Goodwin & Johan Eriksson.</li> +<li> Added new debug flag "-d Time" which will report the elapsed time + for each message printed, and will also show the total running time + along with the time spend on external tools such as dot. + Note: If you have a project that takes doxygen a long time to process, + please send me the output so I get a global idea where to optimize.</li> +<li> New option SUBGROUPING which can be set to NO to have \nosubgrouping + for all classes (thanks to Torben Koch for the patch).</li> +<li> Added XML schemas for validating the XML output, and to help + writing XSLT files. + The generated index.xml now has a complete schema, the compounds + not yet. Thanks go to Alexej Humbach for doing a lot of the work. + Note that a couple of "id" attributes in the XML output have been + changed to "refid", and section tags are now nested.</li> +<li> Included language updates for Traditional Chinese and Japanese.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Doxygen crashed when parsing a comment block with only a \mainpage + command.</li> +<li> Fixed problem matching namespace members.</li> +<li> Fixed scanner push back error for ALIASES with long definitions.</li> +<li> Default main page was wrong if DISABLE_INDEX was set to YES.</li> +<li> Argument of type array were not properly parsed in Java, causing + problems when documenting them with @param.</li> +<li> \image with "" as caption didn't work.</li> +<li> If the last \section in a comment block was empty, doxygen produced + warnings.</li> +<li> Call graphs were only generated if REFERENCES_RELATION was set to YES.</li> +<li> Link could be wrong if a member's name was found in multiple namespaces. </li> +<li> A function returning "struct s *" caused a bogus recursion relation + in the call graph.</li> +<li> Improved handling backslashes for the perlmodgen (thanks to Miguel + Lobo).</li> +<li> Page anchors did not appear in the tag files.</li> +<li> \ref's to grouped pages were not generated correctly.</li> +<li> Fixed parse bug when putting \image inside a HTML table. </li> +<li> Made the documentation parser more tollerant to spaces inside HTML + commands.</li> +<li> Doxygen now issues a warning if invalid commands are used inside + a single-line C++ comment (such a @see and @image).</li> +<li> Fixed parse problem for the semicolon in the following: + Class A : a(";") {};</li> +<li> Doxygen now resolves links to classes imported in a namespace + via using declarations or directives.</li> +<li> Doxygen now issues a warning when @code, @verbatim, @htmlonly, or + @latexonly are not properly terminated.</li> +<li> Fixed "Internal inconsistency" messages when parsing Java packages.</li> +<li> A member did not appear in its group if it was first declared without + documentation and then defined with documentation (with \ingroup).</li> +<li> The <caption> tag was put at the end of a <table> + in the HTML output, while it should be the first tag + after <table>. This is now corrected.</li> +<li> In the LaTeX output, the page references were missing for the links + in the documentation when PDF_HYPERLINK was set to NO.</li> +</ul> +<h1>Doxygen Release 1.3.2</h1> +<h3>Changes</h3> +<ul> +<li> The main page (\mainpage) can now be completely customized, by using + no project name or using "notitle" as argument for \mainpage.</li> +<li> Changed the look of the quick index on top of each page using CSS.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added new command \callgraph which can be put in the documentation + of a function to get a callgraph. In the config file a + new option CALL_GRAPH is added which can be set to YES to enable + callgraphs for all functions (note that this will slow doxygen down!).</li> +<li> Added new boolean config option UML_LOOK which can be enabled to give + class and collaboration diagrams a more UML conformant look + (thanks to Dominick Paniscotti).</li> +<li> Added new commands \xmlonly and \endxmlonly which can be paired + to form blocks of text that only appear in the XML output.</li> +<li> Added sub-indices for the lists of all class/file/namespace members + to filter out just of type of members.</li> +<li> Included language update for Czech, Italian, Portuguese, and French.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Doxygen could crash if a namespace and a class with the same + name were found in the global scope.</li> +<li> Fixed problem handling multiple \xrefitem's in one comment block + (could crash doxygen).</li> +<li> Added check for recursive group relations to prevent lock-up/crash while + generating the group index.</li> +<li> Doxygen could crash if a group contained only undocumented members.</li> +<li> Putting a #include inside a function body would cause the + line numbering to be off.</li> +<li> Fixed cause of a failed assertion when @retval or @param was the last + text in a comment block.</li> +<li> Improved scope detection for code parser when dealing with examples + (imported via \example).</li> +<li> Fixed preprocessor bug handling "#if!defined(VALUE)" (note the lack of + a space).</li> +<li> Added warning if @subsection, @subsubsection or @paragraph were found + in the page context.</li> +<li> French translation was broken (probably due to a dos2unix accident).</li> +<li> Underscores inside a <pre> section did not appear correctly in the + LaTeX output.</li> +<li> Fixed several typos in the generated config file (thanks to a patch + by Justin Zaglio)</li> +<li> Formula's inside comments directly in front or behind function arguments + did not work.</li> +<li> Fixed code parser problem when //<! was nested in a normal C comment.</li> +<li> Included a number of fixes for typos found and corrected by Justin + Zaglio.</li> +<li> For #define values that were constant strings, doxygen tried to link + the text inside the string when shown in the documentation.</li> +<li> The source-browse parser did not link to class variables used in + inline function if the variables were defined before the functions. </li> +<li> The first paragraph after a <h1> or similar heading was not put in + a paragraph context in the generated output.</li> +</ul> + +<h1>Doxygen Release 1.3.1</h1> +<h3>Changes</h3> +<ul> +<li> A multi-line C++ comment block now has to be aligned in order to + make doxygen treat it is one block. As a result the + following is treated as one comment block: + <pre> + int var; //!< variable. + //! more info about var. + int anotherVar; + </pre> + while this results in two comment blocks: + <pre> + int var; //!< variable. + //! info about second variable + int anotherVar; + </pre> + Hopefully this will give more intuitive results. Tabs are replaced + by spaces according to the value of TAB_SIZE in the config file.</li> +<li> Modified the CSS to change the look of the HTML output, and made the + stylesheet a little more powerful (thanks to a patch by Ben Harper).</li> +<li> Formula alignment in the HTML output is now controlled via CSS + (thanks to a patch by Vassilii Khachaturov).</li> +<li> The option TEMPLATE_RELATIONS now defaults to NO.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added new command \xrefitem which enables user-defined commands + that act like \todo and \bug, i.e. produces a related page containing + all items, which is cross-referenced with the documentation blocks + where the items are placed.</li> +<li> Added support for package scope in Java.</li> +<li> Added alt attributes to user included images in the HTML output + (thanks to patch by Vassilii Khachaturov)</li> +<li> Added XML_OUTPUT option to allow a user defined location for + generating XML output (thanks to a patch by Emmanuel Guerin).</li> +<li> Included language updates for French, German, Czech, Italian, and + Brazilian.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Occurrences of <span> and <div> tags in the documentation + were not properly handled.</li> +<li> Fixed problem parsing the following pattern + "namespace { .... } typedef ....", which could crash doxygen if + IGNORE_PREFIX was used.</li> +<li> The project name is now put in front of each title of a HTML page + for easier bookmarking.</li> +<li> In C# enums, classes and structs without (optional) ; were not + properly parsed.</li> +<li> Though still not perfect, I Improved the way namespace aliasing is + handled. It should now work inside other namespaces and for + computing class and usage relations.</li> +<li> Fixed problem documenting typedefs of function pointers using + \typedef.</li> +<li> Links to groups imported via tag files were broken.</li> +<li> Fixed problem resolving class relations for nested classes within + namespaces.</li> +<li> Static members can now be documentated in a separate file using \fn + as long as they have unique names. If the names are not unique the + documentation must be located in the same file (as was required before).</li> +<li> In arguments and return types of the form NA::A were not linked if NA + was a namespace alias to a documentation namespace and A a documented + class name.</li> +<li> Matching a declaration f(NA::C c) with f(C c) did not work if NA was + a namespace alias.</li> +<li> Undocumented classes had wrong links in the treeview frame.</li> +<li> Pages whose title contained < or >'s were not written correctly to the + tag file.</li> +<li> Fixed preprocessor bug: "a##b" was not correctly expanded if + argument "a" or "b" was empty.</li> +<li> Putting \todo and friends inside the documentation of enum values + did not result in an entry on the todo list page.</li> +<li> Fixed some problems compiling with versions of flex >2.5.4, but + also added a #error if these are used, since they produce incompatible + parsers (a bug report has been filed, but no feedback was received).</li> +<li> Characters >=128 are now written as &#nnn; to the XML output. + (thanks to a patch by Michiel Ouwehand).</li> +<li> The table row backgroup color of the "all member" list was hard-coded + in the HTML output. This is now controlled by the stylesheet.</li> +<li> Fixed problem handling omission of the optional arguments of + the \image command.</li> +<li> Enabling HIDE_IN_BODY_DOCS did not work properly if C++-style special + comments were used inside the body of a fucntion.</li> +<li> Fixed problem cross-referencing variables used as a + guard (i.e. if (var) ...) </li> +<li> Setting ENUM_VALUES_PER_LINE to 0 caused a division by 0 error.</li> +<li> Autolinking did not work for members that were grouped and imported + via tag files.</li> +<li> The divide symbol "/" did not appear in the output for array/define + initializers</li> +<li> Fixed paring problem parsing "operator <b>new</b>" + in the documentation.</li> +<li> Fixed problem with resolving template relations (as reported by + Kris Thielemans).</li> +<li> Members in the todo list were not shown correctly (with dot separators) + if OPTIMIZE_OUTPUT_JAVA was set to YES.</li> +<li> Fixed problem handing "class A { public: A::f(); };" which is accepted + as valid C++ by a number of compilers.</li> +<li> Putting a /* inside a C-comment without matching */ caused the + preprocessor to ignore the rest of the file.</li> +<li> Improved the way typedefs are resolved.</li> +<li> Fixed parse problem for the following PHP code: $color='#FFFFFF'</li> +<li> Using @dontinclude could cause broken LaTeX output.</li> +<li> Links to examples (using \example) were broken.</li> +<li> Class members appeared twice in the index of the latex output.</li> +<li> Fixed problem putting \if..\else..\endif around a pair of \defgroup's</li> +</ul> + +<h1>Doxygen Release 1.3</h1> +<h3>Changes</h3> +<ul> +<li> Increased internal buffer size from 16K to 256K for a number of + scanners, so the "input buffer overflow, can't enlarge buffer because + scanner uses REJECT" error should occur less easily.</li> +<li> Style commands like \e, \a or \c will now be terminated when + one of the characters in the following string is + found: ".,()[]:;?", example: "a point (consisting of @a x and @a y)"</li> +<li> Setting OPTIMIZE_OUTPUT_JAVA to YES, will automatically set INLINE_INFO + to NO.</li> +<li> Quotes strings (like "\0" or "%H.%d.%Y") are now considered to be + words (hence the \ and % do not have to be escaped).</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added new configuration option USE_WINDOWS_ENCODING which can be + used to select windows specific character encodings for some languages. + (thanks to Piotr Kaminski).</li> +<li> Added new configuration option LATEX_HIDE_INDICES which can be + used to suppress the various indices that are normally generated in + the LaTeX output (thanks to Ken Yarnall for the patch).</li> +<li> Added new option MAX_DOT_GRAPH_DEPTH to set the maximum distance + from a root node after which the class or include graph will be + truncated. Setting this to a low value should considerably reduce the + time doxygen needs on large projects.</li> +<li> Included updates for French, Korean, Polish, Croatian, and + Danish translations.</li> +<li> Access to title of user defined user defined sections is now + possible from the doxmlparser.</li> +<li> <div> and <span> commands can now by used in the + documentation. Their effect is limited to the HTML output though + (thanks to Frank Schimmel for the patch)</li> +<li> Added inline, virtual, explicit and mutable attributes to XML output + (thanks to patch by Michiel Ouwehand).</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed out-of-memory bug for files containing using directives and + including themselves (indirectly).</li> +<li> Doxygen could crash if two \todo-like commands appeared on the + same line.</li> +<li> Non-inline cast operator was not properly parsed.</li> +<li> Fixed preprocessor problem with parsing /*//*/</li> +<li> URL's in the docs using <a href=""> caused a nested link. </li> +<li> "using namespace A::B;" confused the code parser.</li> +<li> Interface keyword was not recognised in C# (thanks to Onorio Catenacci + for the patch).</li> +<li> Line counting was incorrect when parsing multi-line formulas.</li> +<li> \section's in a \mainpage are now correctly numbered in the LaTeX + output (nesting level was one too deep).</li> +<li> \ref to lower case names did not work + (thanks to Herman ten Brug for the patch)</li> +<li> escaped quotes (") were not preserved in the config file when it was + updated (thanks to Herman ten Brug for the patch).</li> +<li> PHP related fixes contributed by Vaclav Dvorak: + <ul> + <li> #-style comment handling, </li> + <li> adds (problematic) support for define() constants, </li> + <li> adds ".phtml" as a supported file extension for PHP code + (not very common, but still...), </li> + <li> fixes handling of code like "include 'file.inc';" (was parsed + as a variable definition), </li> + <li> removes the variable insidePHPCode (was not needed), </li> + <li> fixes spaces in function argument lists (the '$' was the problem).</li> + </ul></li> +<li> Functions documented with \fn did not get transferred to declaration or + definition (depending on where the comment block was put).</li> +<li> If a function definition was documented and grouped the declaration + was not even if the same documentation block was used for it. </li> +<li> Fixed bug in code parser that could crash doxygen under + certain conditions.</li> +<li> Fixed some spacing problems in the LaTeX output + (thanks to patches by Roberto Bagnara).</li> +<li> Mail address containing the '+' character were not properly parsed + (thanks to Jon Parise for the patch).</li> +<li> Fixed duplicate/wrong id's of grouped members in the XML output.</li> +<li> Docparser reported wrong error if unknown command was found inside + \c (or similar command).</li> +<li> Preprocessor got confused when parsing a special comment as + part of a #define and containing a ' or ".</li> +<li> subgroups defined with @defgroup could be reordered if + @addtogroup was used.</li> +<li> Projects name was not shown as the root of the treeview anymore.</li> +<li> Links to pages imported via tag files were broken in the treeview + frame.</li> +<li> removed leading and trailing whitespace within a \code ... \endcode + block.</li> +<li> Constant class variables with constructor were parsed as functions.</li> +<li> Autolinks of the form class#member were not shown as class::member or + class.member in the documentation.</li> +<li> Fixed problem parsing things like echo('!$tar' . '"'); (PHP).</li> +<li> Fixed problem distinguishing f(__true_type) and f(__false_type)</li> +<li> Fixed lack of translation of some latin2 characters in the latex output + (thanks to Aleksander Kupiec for the patch).</li> +<li> Group members appeared in the treeview or html help index regardless + if they were documented.</li> +<li> The treeview page was not rendered with the right character set (it was + always English).</li> +<li> Explicit template instantations appeared as a variable in the output.</li> +<li> Java instance and static initializer blocks are now correctly parsed + and can be documented.</li> +<li> Fixed bug in the LATEX_HIDE_INDICES option.</li> +<li> Fixed bug parsing simple lists (last word or token could get repeated).</li> +<li> \section titles did not appear in the RTF output.</li> +<li> Tables were not correctly rendered in the RTF output.</li> +<li> Verbatim fragments were not properly rendered in the RTF output.</li> +<li> Fixed some cases where collaboration relations were not visible due + to typedefs.</li> +<li> Fixed some compiler warnings that occurred with more recent versions + of gcc.</li> +<li> Auto-links to files were shown with as file::c instead of file.c. </li> +<li> @ref namespace::class was not parsed correctly.</li> +<li> Undocumented enums could appear in the declaration part of the output + even though HIDE_UNDOC_MEMBERS was set to YES.</li> +<li> \anchor tags now appear in the tagfiles as <docanchor> again.</li> +<li> Hyperlinks in the LaTeX were broken in some cases.</li> +<li> Fixed case where a global variable was not linked from within a function + body.</li> +<li> Include dependencies graph was shown at the place where the + "included by" graph should have appeared.</li> +<li> A // comment following by a //! comment was not handled properly by + the source browser.</li> +<li> If the definition of nested class was found before the definition of the + outer class, its name was displayed without scope.</li> +<li> If a parameter of a prototype was documented (with a separate + documentation block) and the name of the parameter in the definition + was different, the wrong name could be shown in the documentation.</li> +<li> Fixed bug handling \line, \skipline, and \until</li> +</ul> +<h1>Doxygen Release 1.3-rc3</h1> +<h3>Changes</h3> +<ul> +<li> Rewrote the implementation of the tree view feature + (see GENERATE_TREEVIEW). The new implementation should be much faster, + but does require a browser that supports JavaScript, DHTML, and CSS. + Please report any problems you find.</li> +<li> Changed the way dot is launched under Linux/Unix (vfork i.s.o. fork) + so less memory is required (thanks to a patch by Thorsten Behrens).</li> +<li> Changed "Methods" to "Member Functions" in the output (thanks to patch + by Tom Emerson).</li> +<li> STRIP_FROM_PATH now ignores the exact casing of characters, which + makes things simpler on Windows.</li> +<li> Style modifiers such as <b>, <em> and <pre> are now + capable of spanning multiple paragraphs.</li> +<li> Made some improvements to the documentation, including a diagram + showing the information flow between the doxygen and various other + tools (see the getting started section).</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added support for comment blocks generated by + Rational Rose's ANSI C++ code generator (thanks to a patch by + Martin Beaudoin).</li> +<li> Included language update for the Serbian and Japanese.</li> +<li> Included patch by Ryunosuke Satoh to reduce size of the executable when + building for Cygwin.</li> +<li> Tables in the docs were ended with a bogus row in the LaTeX output.</li> +<li> A \link to a member variable that is grouped using \defgroup can + now be done from another member without specifying the full scope.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> @addindex now works on the whole line instead of a single word (as + was already suggested in the docs).</li> +<li> source code line in the XML output didn't escape special characters + like & anymore.</li> +<li> Fixed small bug in german translation (thanks to Jens Seidel).</li> +<li> e-mail addresses with multiple dots got truncated when linked.</li> +<li> Attributes of html commands with value "" where not properly parsed + causing the image in the legend page not to appear.</li> +<li> Fixed excessive memory usage in the "Building member list" phase while + using todo/test/bug items (thanks to Gerik Rhoden).</li> +<li> Fixed parsing problem in PHP. Doxygen was expecting classes to end with + a semicolon (thanks to Jaime Uriel Torres for the patch).</li> +<li> Using <dt> with also adding a <dd> caused a parse error while it is + legal HTML.</li> +<li> The identifier "package" in C/C++ code was wrongly interpreted as + a Java keyword.</li> +<li> \todo item at the end of a comment block caused "unexpected character" + error while generating the XML output.</li> +<li> \ref did not work when the argument was a file name.</li> +<li> \ref and \link are now allowed inside a <td>..</td> section.</li> +<li> Argument matching routine was not able to distinguish between + f(long n) and f(long long n).</li> +<li> Classes were listed in the alphabetical index with full scope.</li> +<li> \copydoc did not work recursively for members.</li> +<li> Fixed a number of small memory leaks (I used ccmalloc to detect them).</li> +<li> The HTML command <SUP> was not parsed correctly if it was prefixed + with an identifier (i.e. blah<SUP>).</li> +<li> HTML tags were not properly parsed if there was a linebreak after + the tag name.</li> +<li> The \~id command was not working properly. The section was always + generated regardless of the OUTPUT_LANGUAGE setting.</li> +<li> id attribute was missing from the sect tag in the XML output.</li> +<li> Links to files or file members could be wrong if SHORT_NAMES was set + to YES and the file was imported via a tag file.</li> +<li> Attribute lists inside an enum in an IDL file were not properly parsed.</li> +<li> Fixed problem in code browser that prevented linking to global + variables defined in other files.</li> +<li> When putting a "using namespace X" in a header file doxygen did not + recognise this in files that included the header file.</li> +<li> Fixed bug in parsing sections without title.</li> +<li> doxytag did not include anchor in the search index. Thanks to + Joerg Schlichenmaier for the fix.</li> +<li> Using an auto-list as an argument of @todo and friends did not work.</li> +<li> A class with all members in a section grouped could result in broken + LaTeX output (empty CompactItemize list).</li> +</ul> +<h1>Doxygen Release 1.3-rc2</h1> +<h3>New features</h3> +<ul> +<li> Added support for importing members via using declarations.</li> +<li> Anchors and sections (and references to them) are now supported in + all comment blocks, not just \page blocks.</li> +<li> Dot files imported via @dotfile now produce images maps in the + HTML output. Use the URL node attribute in the dot file to make a link + (thanks to Marco Dalla Gasperina for the patch).</li> +<li> New config option WARN_IF_DOC_ERROR which allows documentation problems + to be shown, while other warnings (such as warnings about + undocumented members) can be hidden (thanks to Miguel for the patch).</li> +<li> Included language update for German and Italian.</li> +<li> Added support for &tm; (trademark) and &reg; (registered). </li> +<li> Added "static" attribute to methods in the XML output to ease parsing.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> A <pre> .. </pre> section with included blank lines + causes warning about missing </pre> marker.</li> +<li> "typedef enum { a };" confused doxygen's parser, while most compilers + seem to accept it without warnings.</li> +<li> \deprecated item alone in a comment block caused a crash.</li> +<li> Putting @todo (and similar commands) inside a function body + did not result in correct cross-references with the todo list.</li> +<li> Java interfaces were not detected as such.</li> +<li> Fixed some localization problems in the XML output.</li> +<li> Fixed problem handling multiple \par commands (headings were wrong).</li> +<li> Fixed array out of bounds assert that was triggered while parsing.</li> +<li> Links to pages were not properly resolved in hyperlinked PDF.</li> +<li> Using a \name command without //@{ .. //@} scoping could cause + a segmentation fault. </li> +<li> Including images with @dotfile caused problems in the LaTeX output.</li> +<li> Local variables and parameters now properly hide globals with the + same name in the source browser, reducing wrong references.</li> +<li> Verbatim blocks in the documentation could break the RTF output.</li> +<li> RCS/CVS tags did not appear in the output.</li> +<li> @note section result in section with type "bug" in the XML output.</li> +<li> Dot graphs were truncated too quickly in some cases.</li> +<li> Files with a .php4 extension are now recognised as PHP files.</li> +<li> Source browser could get out of sync causing wrong cross references.</li> +<li> Text after @} could end up in another documentation block.</li> +<li> Putting a style command such as \c or \b at the end of a line, before + a auto list item, caused the list item to be ignored.</li> +<li> Autolinks to files did not work anymore.</li> +<li> @copydoc of a target without documentation could cause a crash.</li> +</ul> +<h1>Doxygen Release 1.3-rc1</h1> +<h3>Changes</h3> +<ul> +<li> New validating parser for documentation blocks that replaces the + old parser (which was actually only a lexical scanner).</li> +<li> The new documentation parser will now pass attributes of html tags + to the html output. Example: + <pre> + /*! \mainpage A Dutch Table + * <table bgcolor="black" border="0" cellspacing="2" + * cellpadding="2" align="center"> + * <tr><td bgcolor="red">red + * <tr><td bgcolor="white">white + * <tr><td bgcolor="blue">blue + * </table> + */ + </pre></li> +<li> Doxywizard will now run doxygen from the directory where the + config file is found, so paths can be made relative + in the config file. This will now also work if the config file's + path or name contains spaces.</li> +<li> Doxygen style comment blocks found in the body of functions are + now appended to the function's documentation block.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added rudimentary support for C#. Parsing should work, + but not all attributes are handled correctly.</li> +<li> Included perl module generator by Miguel Lobo. Setting + GENERATE_PERLMOD to YES in the config file will produce + a perl module in the output dir.</li> +<li> Included language updates for French, Czech, and Russian.</li> +<li> Included a number of enhancements to the xml parser (thanks to + a patch by Tree).</li> +<li> Locally documentated parameters now appear in the XML output + (thanks to Cormac Twomey for the patch). </li> +<li> The preprocessor now inserts line control commands where appropriate.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Aliased \if .. \endif commands around a \brief section were not handled + properly.</li> +<li> Warnings for undocumentation members were not generated anymore + in certain cases.</li> +<li> A member of a group linked with \ref showed the group's title + as link text instead of the member's name.</li> +<li> Using aliased commands whose definition contained \n's caused the + code browser to put definition links at the wrong line numbers.</li> +<li> Todo items inside related pages appeared in tag files, causing warnings + about duplicated labels.</li> +<li> Included a patch by Ryunosuke Satoh that fixes some issues when + compiling in a cygwin environment.</li> +<li> The presence of using declarations could result bogus entries in the + class hierarchy.</li> +<li> Links in the hyperlinked sources could point to the wrong global + function depending on the order in which files were parsed.</li> +<li> Using \retval in combination with parameters that are documented + on the spot, caused bogus warnings about undocumented parameters.</li> +<li> id attributes of references/referencedby relations are wrong in + the XML output.</li> +<li> Links could wrongly point to a class in an outer scope instead of a + typedef with the same name in the inner scope.</li> +<li> A reference in the code to a member of a derived class that is defined + in a base class is now resolved properly even if both classes are + imported via tag files.</li> +<li> Language codes were wrong in the html help output for some languages + (thanks to Erwin Hoffmann for the patch).</li> +<li> Fixed case where function was detected as a variable.</li> +<li> if HIDE_UNDOC_CLASSES is set YES, doxygen will not complain about + undocumented classes.</li> +<li> Included RTF output fixes by Gorden Machel.</li> +<li> Global variables of complex types were not properly cross-referenced.</li> +<li> Fixed argument matching bug for nested template classes; + matching <code>"f(A::B<T>::C c)"</code> with + <code>"f(C c)"</code> within context <code>A::B<T></code></li> +<li> Fixed preprocessor bug handling nested comment blocks + (the */ of the inner block was eaten).</li> +</ul> +<p> +\endhtmlonly +\section log_1_2 1.2 Series +\htmlonly +</p> +<h1>Doxygen Release 1.2.18</h1> +<h3>Changes</h3> +<ul> +<li> Running doxygen with the "-d Validate" option will activate a + new documentation parser. The parser will produce output for + Html, Latex, XML and RTF output (man page output still needs to be done). + For XML output this new parser will <em>always</em> be used. + Please try it and let me know if you see unexpected errors or + invalid output. This parser will replace the old one in the + next release. + <p> + The main advantages of the new parser are that it actually checks the + syntax of the documentation blocks and will produce valid output + by design. </p> + <p> + For debugging purposes, adding "-d PrintTree" along + with "-d Validate" will let doxygen dump the abstract syntax tree of + each documentation block to the output in a pretty printed way + (this reflects the structure built-up by the parser).</p> </li> +<li> A number of new XML tags are introduced along with the new parser, + these include: umlaut, acute, grave, circ, tilde, szlig, cedil, ring + nonbreakablespace, toclist, tocitem, xrefsect, xrefdescription, + and xreftitle.</li> +<li> Changed the way code fragments are represented in XML to simplify + validation.</li> +<li> Changed the way \page, \section, and \subsection are handled in LaTeX + (and RTF). + <ul> + <li> + \page now results in a section in latex (of the related pages chapter)</li> + <li> + \section is now a subsection within that page section (used to be a + section, so at the same level as \page)</li> + <li> + \subsection is now a subsubsection within a subsection (used to be a + subsection).</li> + </ul></li> +<li> Included a number of patches by Kristian Ede: + <ul> + <li> Undocumented private friend classes no longer cause warnings</li> + <li> Undocumented private classes no longer cause warnings</li> + <li> Undocumented members are now hidden if they are + default constuctors, destructors or reimplemented.</li> + </ul></li> +<li> Pages introduced via \page are now context aware. This means that + if you put them inside a class or namespace, names do not have + to be prefixed with a full scope to create a link in the documentation.</li> +<li> Boolean values in doxywizard can no longer be toggled by clicking + anywhere on the line on which they appear, but only by clicking on + the name or checkbox.</li> +</ul> +<h3>New features</h3> +<ul> +<li> @deprecated is now treated as @todo, @test, and @bug, which means + that a list of all deprecated items is generated. + Thanks to Angela Marshall for the patch.</li> +<li> Enum value documentation was added to the XML output.</li> +<li> Files ending with ".inc" are now recognised as PHP files + (thanks to Marcus Ahlfors).</li> +<li> Included updated documentation for language translators + (thanks to Petr Prikryl).</li> +<li> Included language updates for Czech, Slovak, Brazillan, Croatian, + Portuguese, Russian, Polish, Japanese and Serbian. + Include language support for Catalan (thanks to Albert Mora)</li> +<li> Included .dsp update by Simon Goodwin (already needs to be updated + again :-( )</li> +<li> Added new configuration options XML_DTD and XML_SCHEMA to set the + DTD or Schema used in the XML output.</li> +<li> Include new commands \subsubsection and \paragraph which add two + section level below \section and \subsection (thanks to + Dirk Reiners for the patch) </li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed lock-up bug in RTF output when using tables.</li> +<li> The internal comment conversion routine was confused by lines of the + form //*************</li> +<li> Fixed recursive lockup for template arguments of the form + "typename A = ::A"</li> +<li> Description part of @name did not (always) appear in the resulting + documentation.</li> +<li> Alphabetic index showed package scope using "::" even when + OPTIMIZE_OUTPUT_JAVA was set to YES. The same happened for class and + namespace HTML page titles.</li> +<li> New versions of dot (graphviz >=1.8.8) broke clickable images + for versions of doxygen <=1.2.17. Now fixed for newer doxygen + releases in a backwards compatible way thanks to a patch by John Ellson.</li> +<li> Fixed compile problem for 64 bit machines (pointer to int cast).</li> +<li> Included patch to build Doxygen 1.2.17 on AIX 4.3 by Russ Allbery</li> +<li> \if ... \else ... \endif blocks now also work in //!< style comments.</li> +<li> Fixed a couple of memory leaks in the code parser.</li> +<li> Fixed case where member function was put in the member variable + section (thanks to Mahadevan R)</li> +<li> Fixed bug causing link targets not to appear in the output.</li> +<li> Setting BRIEF_MEMBER_DESC set to NO for a member that did not have + a detailed description while setting ALWAYS_DETAILED to YES caused the + documentation not to appear in the output at all.</li> +<li> Fixed todo list linking problems for hyperlinked pdf output and + grouped pages.</li> +<li> Putting a function declaration and its definition in the same group + could lead to wrong links using @ref.</li> +<li> Undocumented but grouped members did not appear in the output.</li> +<li> The declaration and definition of overloaded global functions + was not always properly matched, causing functions not to appear + in the documentation.</li> +<li> Nested C-comments were confusing the preprocessor, causing it to + incorrectly skip comment blocks.</li> +<li> An empty line was not always being recognized as a paragraph break + (thanks to Stephen Pope for the fix).</li> +<li> An aliased \endif in a skipped section was not handled properly. </li> +</ul> +<h1>Doxygen Release 1.2.17</h1> +<h3>Changes</h3> +<ul> +<li> XML: The index of the XML output now has @refid instead of @id's, + and includes a "kind" attribute for the compounds and members for easier + filtering.</li> +<li> Improved dot image generation speed for large projects by changing + the way the best-fitting graph is computed (thanks to Philip Bergen + for the suggestion).</li> +<li> @name now automatically starts a member group section (previously + a @{ command was needed). The member group continues until a new @name + command is found or until the end of a compound is reached. @{ ... @} + commands can still be used for backward compatibility or to end a member + group before the end of a compound. @defgroup and friends still require + explicit @{ ... @} blocks.</li> +<li> Changed the way \todo, \bug, and \test are handled internally. + This should have no visible effect on the outside, but makes it much + easier to add similar commands and also saves a bit of memory on average.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added initial support for parsing PHP code (thanks to a patch by + Jan Borsodi). For a PHP file the following additional commands are + available: + <dl> + <dt>\private </dt><dd> makes the current item private</dd> + <dt>\protected </dt><dd> makes the current item protected</dd> + <dt>\public </dt><dd> makes the current item public</dd> + <dt>\privatesection </dt><dd> changes to private section(same as private: in C++)</dd> + <dt>\protectedsection </dt><dd> changes to protected section(same as protected: in C++)</dd> + <dt>\publicsection </dt><dd> changes to public section(same as public: in C++)</dd> + <dt>\static </dt><dd> changes the current item to static</dd> + <dt>\pure </dt><dd> changes the current item to pure virtual</dd> + </dl></li> +<li> New command @copydoc that can be used to copy a documentation block + of some item and paste it in another documentation block.</li> +<li> i18n: Added support for the Serbian language (thanks to Dejan Milosavljevic). + Included a new language option Japanese-en for combined Japanese + and english.</li> +<li> Included patch for dealing with variable argument macros in @param + (thanks to Alfred Heggestad).</li> +<li> Added new option MULTILINE_CPP_IS_BRIEF to make doxygen treat + a multi-line brief comment block as a brief description. Set this to + YES to obtain the behaviour of version 1.2.15 and earlier. Default as + of version 1.2.16 is to treat multi-line C++ comment block as a + detailed description.</li> +<li> New option CHM_FILE to set the .chm file (and path) to use for + Html Help output.</li> +<li> New option HHC_LOCATION to set the location of the Html Help compiler. + If given doxygen will automatically run the compiler to create the + .chm file.</li> +<li> Included .dsp & .dsw files to build doxygen from DevStudio in the + wintools dir. Thanks to Simon Goodwin for providing these.</li> +<li> Included new command $year that can be use in header and footer + files to produce the current year (thanks to Michael Beck for the patch).</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed lock-up bug when writing RTF output with verbatim sections.</li> +<li> The tree view showed entries in C++ style even if OPTIMIZE_OUTPUT_JAVA + was set to YES.</li> +<li> Documentation blocks for function arguments in a documented header + file did not show up if the function definition was parsed first.</li> +<li> Inheritance relations in Java where not always correctly resolved if + the base class was explicitly scoped.</li> +<li> Fixed some non-standard conformance issues in the HTML output (thanks to + John Levon for the patch).</li> +<li> Usage relations for variables whose type was a qualified typedef were + not properly resolved.</li> +<li> Fixed potential crash bug (null-pointer dereference) in source browser + parser.</li> +<li> Comment blocks ending with an empty /// comment line were not + properly handled by the comment conversion code.</li> +<li> @relates is no longer needed for a friend function documented in + the source file (thanks to Johan Eriksson for the fix).</li> +<li> Doxygen could link include files to non-existing source files, if they + pointed to external files but were also found in the include path.</li> +<li> "make install_docs" was broken.</li> +<li> Fixed parse bug for conversion operators of the form "operator ::X*()"</li> +<li> XML output fixes: + <ul> + <li> derivedcompoundref was not terminated properly. </li> + <li> innerpage and innergroup were closed twice.</li> + <li> Removed auto-generated section titles from the detailed descriptions + in the XML output.</li> + <li> para tags in simple section in the XML output were not properly matched</li> + </ul></li> +<li> PDF output fixes: + <ul> + <li> Fixed pdflatex reruns in the Makefile when USE_PDFLATEX was YES. It + should now run the proper amount of times (thanks to Simon Goodwin + for the fix).</li> + <li> Links to items in the bug list were broken for the PDF output.</li> + <li> Fixed bug in PDF output that resulted in links to non-existing + source pages.</li> + <li> Fixed bug in URL parsing that caused invalid PDF output for the + doxygen manual.</li> + <li> Doxygen logo did not appear in the PDF manual.</li> + </ul></li> +<li> RTF output fixes/improvements by Janet Swisher, + Gordon Machel & Martin Vuille: + <ul> + <li> Included fix for loading RTF style-sheets</li> + <li> reference list and title were merged</li> + <li> First word of company name was lost.</li> + <li> Main page title was not substituted.</li> + <li> There were two pages numbered "i" in the document.</li> + <li> Added a heading to the table of contents page.</li> + <li> Depending on the order in which things are + documented, there were extra, empty paragraphs + thrown in.</li> + <li> Added a number of debugging comments + and changed some existing ones to make it easier + to relate the comment in the RTF to the name of + the method that generates it.</li> + </ul></li> +<li> operator|() caused invalid entries in the latex index.</li> +<li> Fixed bug parsing URLs with curly braces in documentation blocks.</li> +<li> Html help output now uses the correct language code if non english + language is selected.</li> +<li> Fixed bug in generate makefile for latex output (thanks to Petr + Prikryl)</li> +<li> Fixed source browser bug: a comment just before a function body + confused the parser.</li> +<li> Fixed problem handling function typedefs.</li> +<li> \endif appeared in output when used via ALIASES in a brief description.</li> +<li> Included heuristic to distiguish between a variable definition + with initialization via a constructor and a function prototype + (e.g. "Test var(initVal);", v.s. "Test func(SomeType);").</li> +<li> Fixed lock-up problem when to @brief were put after each other in a + comment block.</li> +<li> Images for include dependency graphs were unclickable.</li> +<li> Members in source fragments and examples were not linked to their + member group documentation if available.</li> +<li> For initializers of the form ' ', the space was removed in the output. </li> +<li> \dotfile generated files did not get generated correctly because dot + could not find the specified font.</li> +<li> Third argument of \class did not always work.</li> +<li> The pattern argument for the @skip, @skipline, @until and @line commands + now extents until the end of the line (as suggested by the documentation) + instead of just the first word. </li> +</ul> + +<h1>Doxygen Release 1.2.16</h1> +<h3>Changes</h3> +<ul> +<li> Verbatim and preformatted sections + are now represented with a new "preformatted" tag in the XML output.</li> +<li> The HIDE_UNDOC_RELATIONS option is no longer depending on + HAVE_DOT being set to YES.</li> +<li> A dot is only added after a brief description if it starts + with a capital (thanks to Ondrej Jombik for the patch).</li> +<li> Doxygen now treats blocks of C++ comments such as + //! Detailed + //! Description + as a detailed description + (such blocks used to be treated as brief descriptions!). + A single line C++ comments still represents a brief description, + for multiline brief description an explicit @brief can be used. + See the updated documentation for more examples.</li> +<li> XML: Added class name to inheritance relations that are written to the + XML output.</li> +<li> Images included with \dotfile are now centered in the latex output + (thanks to Nils Strom for the patch).</li> +</ul> +<h3>New features</h3> +<ul> +<li> Included language update for Slovene.</li> +<li> CGI_URL now allows URLs that start with cgi: (for KDE KIO slave support)</li> +<li> Made include dependency graphs available from the XML parser API.</li> +<li> Added patch to support multi-byte RTF output (thanks to Sato Ryunosuke)</li> +<li> Gary Lee added language support for Chinese-Traditional. </li> +<li> Thanks to a patch by Loïc the RTF output now supports (non-nested) + tables.</li> +<li> Added compilation support for cygwin (win32-g++ target). + Thanks to Ryunosuke Sato for the patch.</li> +<li> Added new option DETAILS_AT_TOP to put the detailed documentation + at the top of a documentation page where normally only the brief + descriptions would be shown (based on a patch by Elliott Hughes).</li> +<li> XML: Added member template parameters to the XML output.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Improved portability of the png code: updated zlib to version 1.1.4, + replaced K&R style code by ansi code, fixed compile problem with + pngenc.cpp on some platforms.</li> +<li> Fixed recursive lock-up problem that could occur for certain cases + in which recursive template inheritance was used.</li> +<li> The cross-package inheritance relations were broken for Java code. + I fixed this by treating Java import statement as C++ using statements. + Please report any problems that remain.</li> +<li> Alias commands put in separate parameter documentation blocks + were not resolved.</li> +<li> The documentation for arguments, documented with a seperate + documentation block, was not consistently shown in source and header + files, depending on the order of the input files. </li> +<li> The characters '(', ')', '$', ''', and ';' were not recognised + as part of an URL.</li> +<li> Grouped enum values could not share the same documentation block + even when DISTRIBUTE_GROUP_DOC is YES. </li> +<li> The end caption tag was missing a closing > in the XML output.</li> +<li> Fixed bug with table captions in XML output.</li> +<li> Removed warning when documenting include guard-like defines. </li> +<li> The \package command was broken. Fixed cases where :: appeared in + the output when OPTIMIZE_OUTPUT_JAVA was set to YES.</li> +<li> Fixed scoping problem using \class for documenting nested classes inside + template classes.</li> +<li> Fixed invalid output bug when putting "-" items inside @arg or @li + lists.</li> +<li> Fixed problem referencing functions using {@link ... } with explicit + argument lists.</li> +<li> Fixed bug when parsing "typedef struct{}TypeName;" (i.e. without + a space before the struct).</li> +<li> Fixed argument matching bug for global functions having undocumented + classes, imported via using declarations, as their parameter type.</li> +<li> Fixed bug in conditional section handling for cases like: + @if guard text @else more text @endif</li> +<li> The html help files did not honour the HTML_FILE_EXTENSION settings.</li> +<li> Removed bogus warning when using @param for function-type + parameters.</li> +<li> Include statements in the source browser output now link to the + right include file in case of ambiguities. </li> +<li> The include lines in the file documentation didn't link to files that + were imported from tag files. </li> +<li> The include dependency graph did not show include files if they + were directly or indirectly imported from tag files. Existing tag + files need to be regenerated to make use of this.</li> +<li> XML: The refid of members in listofallmembers section in the XML output + was wrong. The ulink tag did not end properly in the XML output. + The Value of ambiguityscope in the XML output was not properly escaped. + LaTeX page reference texts appeared in the XML output.</li> +<li> Included language update for Brazilian.</li> +<li> Doxygen now treats "const int *" and "int const *" (i.e. with + reordered const) as equivalent types.</li> +<li> The preprocessor now avoids recursive includes, which helps + to parse files that do not have proper #ifndef-#define .. #endif guards.</li> +<li> Matching arguments with types "unsigned long int" and + "unsigned long int blah" removed argument name. + Same for "int" and "const int blah".</li> +<li> Fixed LaTeX output bug that occurs when using \dotfile in combination + with USE_PDFLATEX = YES (thanks to Nils Strom for the patch).</li> +<li> Links to static functions in the documentation, now point to the + local file in case of ambiguities.</li> +<li> Comments of the form /*/**/ confused the source browser.</li> +<li> Fixed bug parsing "class C : public ::C {};" inside a namespace.</li> +<li> Fixed bug in tag file reader when parsing includes.</li> +<li> The include dependencies were wrong if an include file name was part of + the input but the #include specifically asked for another file + not part of the input but with the same name.</li> +</ul> +<h1>Doxygen Release 1.2.15</h1> +<h3>Changes</h3> +<ul> +<li> On request of Richard Stallman and others I replaced all + generated GIF images with PNG images. + See <a href="http://www.burnallgifs.org">http://www.burnallgifs.org</a> + for the motivation.</li> +<li> The Documentation of function definitions and declarations are now + always merged. References/Referenced by relations are now equal + for function declarations and definitions.</li> +<li> When @retval commands are used to document parameters, doxygen will + no longer produce a warning message for that parameter. @retval can + still be used to document non parameters such as the return values + of a function.</li> +<li> <pre>#define A(x) x /**< a define */</pre> + will document a define, while + <pre>#define A(x) /** an argument */ x</pre> + will document the argument of the define</li> +<li> Links in the documentation to const/volatile members are now + possible by explicitly specifying "f() const" or "f() volatile" + in case a non-const/volatile "f()" also exists.</li> +<li> Doxygen now warns about undocumented compounds (thanks to Itai Frenkel + for the patch).</li> +</ul> +<h3>New features</h3> +<ul> +<li> Included language update for Russian and Romanian translations.</li> +<li> EPS images included with "\image latex" are automatically converted + to pdf's when USE_PDFLATEX is set to YES.</li> +<li> Added two new commands: LATEX_CMD_NAME and MAKEINDEX_CMD_NAME to + set the name of the latex and makeindex tools to be used for latex + output (thanks to Konno Akihisa for the patch).</li> +<li> Improved support for Java. Packages are now treated like + C++ namespaces and there is a new option OPTIMIZE_OUTPUT_JAVA + that, when enabled, provides more Java-oriented output. Please + report any Java-related problems that remain.</li> +<li> Extended XML parser API (see addon/doxmlparser/include/doxmlintf.h) + with full access to documentation blocks. + Made inheritance/collaboration diagrams accessible via the + XML parser API (see addon/doxmlparser/include/doxmlintf.h). + Reorganised the internals of the XML parser so the API does + not require destructors. Made the parser more portable (it should + compile with gcc and M$ visual C++ now).</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Using "@param x,y,z" resulted bogus warnings about undocumented + parameters.</li> +<li> "doxygen -w latex header.tex doxygen.sty Doxyfile" caused a segmentation + fault (thanks to Aric Cyr for the patch).</li> +<li> Fixed argument matching problem that occurred in some rare cases + that involved "using" of namespaces.</li> +<li> Using /**< Brief.\ more brief. Details. */ with ENABLE_JAVADOC = YES, + now removes the slash just like it did with /**...*/ style comments. </li> +<li> Using an ordered, html-style list inside a @param command + resulted in invalid output if list item contained blank lines.</li> +<li> STRIP_FROM_PATH now also works with Windows style paths + (e.g. C:\MyPath\)</li> +<li> A module can now appear more than once in the module tree + (thanks to Itai Frenkel for the patch).</li> +<li> In some cases the tree view showed leaf elements as non-leafs. </li> +<li> Fixed a number of cases where illegal characters could end up in + the XML output.</li> +<li> If a function in a base class was (re)implemented by serveral classes + only one of them appeared in the "(re)implemented in" list. </li> +<li> graph_legend.gif was hardcoded in translator_*.h files. + Note to translators: this has affected all translator files, so please + update your local translator file!</li> +<li> In some cases a grouped member within a namespace did not appear + in the group's documentation.</li> +<li> Namespace members were not properly cross-referenced with in the + source browser output.</li> +<li> Using directives inside anonymous namespaces had no effect.</li> +<li> Fixed bug in the preprocessor when parsing '"' as the argument to + a function macro.</li> +<li> The argument of commands like \c did not produce a link to + external documentation if possible, while links to local + documentation were generated.</li> +</ul> + +<h1>Doxygen Release 1.2.14</h1> +<h3>Changes</h3> +<ul> +<li> Split up the XML output into an index (index.xml) and one page per + compound. This allows for faster processing and less memory consumption, + when using DOM style parsers.</li> +<li> Include files are now shown in the class documentation if + and only if SHOW_INCLUDE_FILES is YES. </li> +<li> Doxygen-style C comments inside macro definitions are now preserved + in the output. Example: + <pre> + #define INIT(x) /*! Initializes x. */ void Init() { x = 0; } + </pre></li> +<li> When deriving from pure virtual members or IDL interfaces, doxygen will + now put an "implements/implemented in" list in the documentation instead + of "reimplements/reimplemented by".</li> +<li> Doxygen now filters out duplicate input files.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added a very simple metrics utility + (see addon/doxmlparser/examples/metrics) which can compute some + figures based on the XML output generated by doxygen.</li> +<li> Added autodetection for Darwin (MacOSX) to the configure script.</li> +<li> Added option EXCLUDE_SYMLINKS. + The EXCLUDE_SYMLINKS tag can be used to select whether or not files or + directories that are symbolic links (a Unix filesystem feature) are + excluded. </li> +<li> Added option EXTERNAL_GROUPS. + If the EXTERNAL_GROUPS tag is set to YES all external groups + will be listed in the modules index. If set to NO, only the + current project's groups will be listed. (thanks to Darren Oldag + for the patch).</li> +<li> Included update for translator.pl (thanks to Petr Prikryl)</li> +<li> updated .spec file (thanks to Emilio Riva).</li> +<li> Included patch by Jochen Hanff to make the index headings configurable + via style-sheets.</li> +<li> If a comment block contains at least one @param command, doxygen now + produces warnings if not all parameters of a function are documented or + if the names of the parameters do not match the argumentlist. + (Please report any false alarms).</li> +<li> Added new command \~language_id to create sections that + are outputted for the language >language_id> only: + Example: + <pre> + /** \~czech Cesky komentar \~english English comment text \~dutch + Nederlands commentaar \~ Common comment for all languages, + this tag switches off the language filter... + */ + </pre> + Which of the language specific fragments is outputed depends + on the setting of OUTPUT_LANGUAGE (Thanks to Milan Rusek for the patch).</li> +<li> Added build support for Cygwin (thanks to Ryunosuke Sato). </li> +<li> Added new option HTML_FILE_EXTENSION to allow different file extension + for the html file outputted by doxygen (like .php). Thanks to + Rob Olsthoorn for the patch.</li> +<li> Added option DOT_IMAGE_FORMAT that can be used to set the image + format of images generated by dot (possible formats: gif, png, jpg).</li> +<li> In the documentation of class, namespace, file and group items a + list of groups to which the item belongs is put between brackets ([..]) + under the title (HTML only).</li> +<li> Added "list of all members" and template parameter lists for + classes to the XML output.</li> +<li> Included language updates for Chinese, Czech, French, Italian, + Brazilian, Japanese, Russian and German.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> The start of a comment (/*) embedded in a page or example block + caused parse problems.</li> +<li> operator%= member caused latex error when in pdf hyperlink mode.</li> +<li> fixed parse problem for global function typedefs like "typedef int f()"</li> +<li> Qt slots weren't included in the reference/referenced by relations + (thanks to Gordon Machel for the patch).</li> +<li> Fixed parse problem that occurred when the <SUP> tag was used in + a brief description. </li> +<li> Private members sometimes showed up in the all member list even though + EXTRACT_PRIVATE was NO.</li> +<li> Doxygen now exits with code 0 if there is no error (previously it + returned 1 in some cases were no error occurred).</li> +<li> Calling "doxygen -g -" now writes the config file to stdout + (this already worked when using "doxygen -g-").</li> +<li> Undocumented classes exposed when setting EXTRACT_ALL to YES, could + result in broken links in the class hierarchy.</li> +<li> Exception specifications in Java were not parsed properly.</li> +<li> If INLINE_INHERITED_MEMB was YES, pure vitual members of base classes + reachable via multiple paths appeared more than once in the + documentation.</li> +<li> Removed potential recursive loop when computing reimplements relations + for template instances.</li> +<li> Fixed argument matching problem when matching "a<int *>" with + a<int * >"</li> +<li> Links in the documentation of grouped namespace members were not + pointing to the group but to the namespace.</li> +<li> For template specializations the title of an html page contained + plain < and > characters.</li> +<li> When computing source references undocumented members could introduce + non-existing relations for documented members in front of it.</li> +<li> Fixed escaping problem in Makefile generated for latex output.</li> +<li> File names were sometimes prefixed for undocumented classes in the + class hierarchy.</li> +<li> When computing the list of all members, interface members are now + treated as virtual.</li> +<li> Protected members of a base class did not appear as such in the list of + all members of derived classes.</li> +<li> Fixed problem with ending itemized lists before paragraph commands + (like @see), which resulted in invalid output.</li> +<li> The version number in config files generated by doxywizard was + always 0.1.</li> +<li> Having a macro function and typedef with the same name confused doxygen.</li> +<li> An \endverbatim command at the end of a \name section was not parsed.</li> +<li> Stars (*) at the start of a line in /**< ... */ style comments + after a parameter were included in the result.</li> +<li> Putting a C-style comment in a @code block was not handled properly.</li> +</ul> + +<h1>Doxygen Release 1.2.13.1</h1> +<h3>Bug fixes</h3> +<ul> +<li> Links to grouped members were broken.</li> +<li> The Module index was broken in HTML and subgroups were still not + sorted properly.</li> +<li> Selecting a non-default language was not possible in doxywizard + (thanks to Heiko Schaefer for the patch).</li> +<li> Ending a dash-style list was not possible by starting a new paragraph + anymore.</li> +<li> Fixed "exceptions" tag mismatch in the XML output.</li> +<li> extern "C" blocks inside source files incorrectly included header files + during preprocessing.</li> +<li> Compiling doxywizard on Unix with Qt-3.x didn't work because + libdoxycfg was linked with qtools from Qt-2.x.</li> +<li> Fixed potential memory corruption when generation the graphical class + hierarchy (nodes were deleted more than once).</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added support for multi-method declarations such as: int func1(),func2();</li> +<li> Included updated DTD for validating the XML output produced by doxygen, + thanks to Angelo Hulshout.</li> +<li> Included support for Japanese-ShiftJIS translation, + thanks to Ryunosuke Sato.</li> +<li> Included update for Slovak translator, thanks to Stanislav Kudlac.</li> +<li> Thanks to a patch by Pascal Flammant tables in the documentation + can now have captions using <caption> ... </caption> + within a table definition.</li> +<li> A dash-style list can now be ended without ending the paragraph. + See the list-section of the documentation for an example.</li> +</ul> +<h1>Doxygen Release 1.2.13</h1> +<h3>Changes</h3> +<ul> +<li> Changed the way @internal works. The "For internal use only" message, + now appears (along with the internal documentation) + if and only if INTERNAL_DOCS = YES. </li> +<li> Subgroups are no longer sorted but presented in declaration order.</li> +<li> Members inside todo/test/bug lists are now shown with qualified + names again. </li> +<li> Reorganized the XML parser. It is now structured as a library, + a header file, and a test application. See addon/doxmlparser for + details.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Included languages updates for French, Portuguese, + Korean, Italian, Dutch, Slovene, Brazil, German and Portuguese. + Thanks to Harry Kalogirou doxygen now has support for output in + the Greek language.</li> +<li> Included patch by Adam Doppelt to make doxysearch work + better with windows/IIS.</li> +<li> Added more info to the XML output: include dependencies, + member groups, re-implement relations, const/volatile specifiers, + namespace info, related pages, inner classes, inner namespaces.</li> +<li> Added some logic to deal with member specializations. + They should now be added as additional members to a class instead of + being ignored and producing a warning.</li> +<li> Thanks to a patch by Bruce Korb, author of + <a href="http://autogen.sourceforge.net/">autogen</a>, doxygen now + has output support for producing autogen definition files. To do + this set GENERATE_AUTOGEN_DEF to YES in the config file. </li> +<li> The \relates command can now be used for macros as well.</li> +<li> New option INLINE_INHERITED_MEMB which can be enabled to include all + directly and indirectly inherited members inside the + documentation of a class as if they were real members (inspired by + a patch sent by Ted Drain). </li> +<li> Added option EXTRACT_LOCAL_CLASSES which can be used to show + or hide classes and structs defined in source files.</li> +<li> Thanks to an install script written by David Greig, the windows + version of doxygen now comes with a windows installer based on + Jordan Russell's + <a href="http://www.jrsoftware.org/isinfo.htm">Inno Setup</a>.</li> +</ul> + +<h3>Bug fixes</h3> +<ul> +<li> Fixed potential bogus link in the references list.</li> +<li> Auto detection of idl files was broken.</li> +<li> Preprocessor did not parse hexadecimal values correctly.</li> +<li> Fixed XML output problem (too many </highlight> tags).</li> +<li> Documentation for nested classes inside other nested classes was + not written to the output.</li> +<li> Fixed problem mixing paragraph commands (like \param) with + hyphen-style lists.</li> +<li> Modules index in LaTeX was broken.</li> +<li> STRIP_FROM_PATH now works for windows-style paths as well. + Thanks to Joël Conraud for the patch.</li> +<li> For functions whose declaration was grouped and whose definition + contained a documentation block with a todo/test/bug item, + the item did not appear in the todo/test/bug list.</li> +<li> In the source browser output, the "=" in variable initializers + was outputted as "==". </li> +<li> Fixed parse problem for typedefs of function pointers returning + a template instance.</li> +<li> Fixed bug in parsing method pointer function arguments of the + form "void f(void (C::*m)() const)"</li> +</ul> +<h1>Doxygen Release 1.2.12</h1> +<h3>Changes</h3> +<ul> +<li> Improved the speed of the todo/test/bug list generation considerably.</li> +<li> The list of all members of a class now shows for each member, + the class in which the member is defined.</li> +<li> Rewrote a substantial part of the source code parser + (SOURCE_BROWSER = YES). It is now more context sensitive and + will generate more/better links.</li> +</ul> + +<h3>New features</h3> +<ul> +<li> Added new option HIDE_UNDOC_RELATIONS that can be set to NO to show + any undocumented inheritance and usage relations from the various + graphs.</li> +<li> Included updates for translations to Chinese (thanks to Charlie Liu) + Slovene (thanks to Matjaz Ostroversnik), Russian + (thanks to Alexandr Chelpanov), Czech (thanks to Petr Prikryl) + and Croatian (thanks to Boris Bralo). Included Petr's translator + adapter simplifications. Included Latin2 patch by Mitja Udovc.</li> +<li> Updated the graph legend page.</li> +<li> Added option REFERENCES_RELATION that can be enabled in combination + with SOURCE_BROWSER to produce for each function + a list of all called/used members/functions/variables. + The reverse list can now be enabled/disabled using the + new REFERENCED_BY_RELATION option.</li> +<li> Added native support for typedefs of the form + "typedef void (__stdcall *name)()", where __stdcall can be any + identifier.</li> +<li> Included a patch by Stephen Goudge which adds an option + EXAMPLE_RECURSIVE to indicate whether or not example files should + be searched recursively.</li> +<li> Included patch by Erik Zeek to add EOL translation to the + config file output.</li> +<li> Doxygen now searches the current directory for source files if + the INPUT and FILE_PATTERNS are empty (thanks to Johan Eriksson + for ideas and code)</li> +<li> Reference to/referenced by information is now included in the XML + output.</li> +</ul> + +<h3>Bug fixes</h3> +<ul> +<li> Fixed more RTF problems and added an RTF integrity check that + is performed on the generated RTF output (bracket matching).</li> +<li> Refined the macro detection in the preprocessor a little, so it does + not match constructors and functions so easily.</li> +<li> the % prefix didn't work for scoped items.</li> +<li> References to groups defined in tag files did not work.</li> +<li> documentation for classes inside namespaces was generated multiple + times.</li> +<li> Running doxytag on qt-3.0.0 resulted in a tag file containing + non-breakable spaces.</li> +<li> The \package statement did not work correctly for packages whose name + contained a dot.</li> +<li> Fixed Parser bug for java initializers of the form = "\"/*";</li> +<li> Fixed LaTeX output problem when using \par followed by a (-) list.</li> +<li> Fixed LaTeX output bug in the related page index.</li> +<li> Commands inside a conditional section would still appear in the + result even if the section was disabled.</li> +<li> Included idea by Roberto Bagnara to make running "make" in the LaTeX + output autodetect how many times latex has to be run.</li> +<li> Included a patch by Johan Eriksson to fix a link problem in the + "list of all member" for grouped members.</li> +<li> Fixed potential crash when \todo was used without arguments.</li> +<li> The HIDE_UNDOC_CLASSES option did not work correctly for template + instances when set to YES.</li> +<li> \line, \skipline and \until introduced too many new lines.</li> +<li> Doxygen did not parse "struct {} typedef S;" correctly.</li> +</ul> + +<h1>Doxygen Release 1.2.11.1</h1> +<h3>Changes</h3> +<ul> +<li> Included update for Slovak translation (thanks to Stanislav Kudlac)</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed RTF output bugs.</li> +<li> When preprocessing was disabled, the input was truncated for sources + containing CR's (i.e. sources edited on Windows).</li> +<li> Syntax highlighting C-style comments was broken.</li> +<li> Links to members in undocumented groups were broken.</li> +<li> Deep class hierarchies caused "nested too deep" error in LaTeX output.</li> +<li> providing one documentation block for grouped, related members did + not work.</li> +<li> Documentation pages for documented classes nested inside + undocumented classes or namespaces were not generated.</li> +</ul> +<h1>Doxygen Release 1.2.11</h1> +<h3>Changes</h3> +<ul> +<li> Undocumented friend class declarations now link to their class + if documented.</li> +<li> Undocumented template classes (and other "used" types) + are now shown in the collaboration diagram.</li> +<li> Changed the look of the various indices (file/class/namespace/...) + in the HTML output.</li> +</ul> +<h3>New features</h3> +<ul> +<li> The source browser option now generates links to (documented) + globals and fields. Especially useful for C code.</li> +<li> Input containing CR+LF (DOS/Windows) or CR only (Mac) are now + automatically converted to LF. </li> +<li> New config option SKIP_FUNCTION_MACROS that when set to YES + (the default) makes doxygen's preprocessor automatically remove all + function macros that are alone on a line and do not end with a + semicolon. These are typically used as boiler-plate code and + confuse the parser if not removed.</li> +<li> Added class collaboration and inheritance diagram descriptions + to the XML output. Also added source browser output for each file.</li> +<li> Added a developers part to the manual, with some information on + how doxygen is structured internally.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Using HIDE_UNDOC_MEMBERS=YES and ENUM_VALUES_PER_LINE=1 resulted in + blank lines in the HTML-output.</li> +<li> "friend class A::B" caused a bogus warning.</li> +<li> Fixed problem generating tag files for the Qt-3.0.0 beta releases.</li> +<li> Fixed parameter list layout problem in the HTML output.</li> +<li> Fixed some (all?) compile problems on Solaris.</li> +<li> Class hierarchy was not correct if a template class inherited from + a template argument, which was also a documented class.</li> +<li> When substituting template arguments, default values of + template arguments were not substituted themselves.</li> +<li> Fixed a number of XML output bugs (thanks to Christian Hammond).</li> +<li> Fixed bug parsing character literals.</li> +<li> Fixed bug in RTF output (bracket mismatch).</li> +<li> Inializer of the last enum value of an enum did not always appear.</li> +<li> Dots were removed from return types in Java.</li> +<li> In some cases a broken "More..." link was generated after + a brief class description.</li> +<li> Text of a section title containing was truncated if it contained an + asterix.</li> +<li> Fixed crash bug when filtering CR+LF's from input (thanks to Petr + Prykril).</li> +<li> Fixed generated makefile dependencies for USE_PDFLATEX = YES + (thanks to Marcus Holland-Moritz)</li> +<li> "\retval #VALUE" now links to VALUE if documented. The same works + for \exception and \throws + (and since the argument is a class no # is needed).</li> +<li> Sorting the alphabetical list was broken for nested classes.</li> +</ul> +<h1>Doxygen Release 1.2.10</h1> +<h3>New features</h3> +<ul> +<li> Relations between templates and their instances are now visualized + in the inheritance and collaboration graphs. Can be disabled + by setting TEMPLATE_RELATIONS to NO in the config file.</li> +<li> A Java package can now be documented using a comment block containing a + @package command or by putting a documentation block in front of a + package statement.</li> +<li> Added new command \dotfile which can be used to include a user + specified dot file as an image in the documentation. The new config + option DOTFILE_DIRS should be used to specify directories in which + doxygen should look for dot files (thanks to Samit Basu for the patch).</li> +<li> Added new build target macosx-c++ to build doxygen for Mac OS X + (Thanks to Jason Harris for telling me what needed to be changed).</li> +<li> Added --enable-langs option to the configure script which can be used + to compile-in support for a specified set of languages (thanks to + Vitaly Repin for the patch).</li> +<li> Included update for Russian & Italian translation.</li> +<li> Included translator.pl update received from Petr.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fix compile problem for the Irix compiler (thanks to Dirk Reiners)</li> +<li> Some generated &nsbp; entities where missing a ; in the HTML output. + For some browsers this resulted in argument types & names being + glued together.</li> +<li> The heading of parameter and return value lists was not bold anymore in + the HTML output. </li> +<li> "Reimplemented to/from" member links now work between template base + classes and their derived classes.</li> +<li> Not all documented templates class were regarded as documented + (unless EXTRACT_ALL was set to YES).</li> +<li> Fixed recursive lock-up problem for recursive templates of the form: + template<class T> class A : public A<typename T::B> {}</li> +<li> The labels in the alphabetical list were broken when namespaces were + used.</li> +<li> An error was given for import statements in Java sources.</li> +<li> The "list of all members" was no longer generated for nested classes.</li> +<li> Fixed bug in XML output causing mis matched <para> tags.</li> +<li> Fixed parse problem for enum initializers like: "enumVal = A<T,C>::val" </li> +<li> \hideinitializer did not hide the initializer of enum values.</li> +<li> Undocumented enums and enum values now behave correctly when + HIDE_UNDOC_MEMBERS is set to YES.</li> +<li> Fixed a problem with using \if inside alias definitions.</li> +<li> Fixed & changed the layout of function arguments a little.</li> +<li> Typedef struct{}Name was not parsed properly without adding more spaces.</li> +<li> Static initializer blocks were not properly parsed in Java classes.</li> +<li> Members of an unnamed namespace are now treated as static, and will + only appear in the documentation if EXTRACT_STATIC is set to YES.</li> +<li> Classes are sorted by their name, i.s.o. full scope again.</li> +<li> Improved argument matching for members defined within (nested) + namespaces.</li> +</ul> + +<h1>Doxygen Release 1.2.9.1</h1> +<h3>Changes</h3> +<ul> +<li> Bug/test/todo items of members are now grouped + together with their compound.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added three new conditional commands: \ifnot, \else and \elseif + (thanks to Fabian Cenedese).</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> The .spec file still assumed the --with-xmlgen switch was available.</li> +<li> Template instances caused double entries in the class list + (in LaTeX) and broke RTF output.</li> +<li> \if and \endif can now be used to make structural commands like + \brief, \ingroup, and \defgroup conditional.</li> +<li> The "const" in "func(B * const)" was parsed as a variable name.</li> +<li> Template specializations of the form A<N::C> where not handled + properly.</li> +<li> Putting \relates in a function documentation block that was + within a namespace, while referring to another namespace did not work.</li> +<li> Doxywizard always complained it could not read the config file.</li> +<li> Doxywizard did not properly update boolean and integer values.</li> +<li> Fixed recursive lock-up problem when recursive templates were used.</li> +<li> LaTeX output was broken when PDF_HYPERLINKS was enabled and templates + were used.</li> +<li> Private friends were hidden even though friends have no access control.</li> +<li> Argument matching was sensitive to spaces in some cases.</li> +<li> Bug/test/todo item in class members did not always result in the + generation of the list. </li> +</ul> + +<h1>Doxygen Release 1.2.9</h1> +<h3>Changes</h3> +<ul> +<li> Friend class declarations are now treated as normal members.</li> +<li> Completely rewrote the way templates are handled. + Doxygen now (internally) computes all template instances it encounters. + This has the following advantages: + <ul> + <li>Template instances are now shown in the hierarchical index + and in all class diagrams in a uniform way.</li> + <li>The list of all members is now correct for classes deriving + from a template.</li> + </ul> + Since there is a lot of new code, some more testing won't hurt + to mature the code. If you are using templates, please try this + version for me and report any problems.</li> +<li> Started moving the XML output generator back into doxygen. + As a result the GENERATE_XML option has reappeared.</li> +<li> Function arguments names are now nicely aligned in the generated + HTML output. Thanks to Joe Bester for doing most of the work. </li> +</ul> +<h3>New features</h3> +<ul> +<li> Added GNU install tool auto detection to the configure script.</li> +<li> Included update for French translation (thanks to Xavier Outhier) + Olexij Tkatchenko has added support for the Ukrainian language. + Included update for Portuguese and Brazillian.</li> +<li> Added --docdir option to the configure script.</li> +<li> Using the non-commercial version of Qt for windows, it is now + possible to build doxywizard for windows.</li> +<li> Made preprocessor parse error messages somewhat more informative.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Image references to dot images were broken in the RTF output + (thanks to Henning Moll for the fix).</li> +<li> Linebreaks are now done with \par instead of \line in the RTF + output (thanks to Henning Moll).</li> +<li> Removed bogus warnings when parsing tag files.</li> +<li> The detailed description in a @name block can now be more than + plain text.</li> +<li> Included fix for the tree view script for the mozilla browser + (thanks to Alec Panovici).</li> +<li> Grouping members with the same signature but with a different scopes + is now possible.</li> +<li> Related functions could not be grouped.</li> +<li> MAN_LINKS option was broken (fixed by Patrick Ohly).</li> +<li> Including a file with \include in LaTeX caused the leading text + to appear in a smaller font size.</li> +<li> Improved the documentation and spec file (thanks to Jens Seidel). + Fixed some typos in the docs. Thanks to Wouter Slegers.</li> +<li> JavaDoc style links such as @{link #var} and @{link #var label} + now work.</li> +<li> "doxygen -g -s" now creates a file named Doxyfile i.s.o "-s" </li> +<li> Fixed a null pointer referencing problem (thanks to Nick Pratt)</li> +<li> 8-bits characters are now correctly handled within the argument + of \b, \c or \e.</li> +<li> Reimplemented links were broken for grouped members (thanks to + Johan Eriksson for the fix).</li> +<li> Enabling the Tree view didn't result in proper RTF and LaTeX output + (thanks to Paul Sydney for the fix).</li> +<li> Merged patches by Joe Bester: + <ul> + <li>Could not link to @anchors in the main page on external packages.</li> + <li> All external modules and pages were linked to or appended + (even the TODO page, etc), even when EXTRACT_ALL is set to NO.</li> + <li> The section containing structs and unions is labeled + "Class Documentation" (in the English translation) even when + the OPTIMIZE_OUTPUT_FOR_C was set to YES.</li> + </ul></li> +<li> using the IDL keyword "import" in other languages did not work + correctly.</li> +<li> members of a privately inherited base class were not shown in the + list of all members, while they were accessible from the derived class.</li> +<li> Reworked part of the template handling. Doxygen should now be + capable of handling nested template classes correctly. Please test + this if you are using these contructs. Thanks to Christoph Koegl + for providing some difficult test cases.</li> +<li> Fixed parse problem when parsing << as part of the first + argument of a typedef.</li> +<li> Further improved typedef resolution.</li> +<li> The LATEX_HEADER-config option disabled the \mainpage-output + (thanks to Eric Reinhart for the fix).</li> +<li> Merged a patch by Erik Zeek, to allow compilation under BCB5</li> +<li> Spaces in arguments of preprocessor macros were not treated properly.</li> +<li> Fixed argument matching bug that caused doxygen to treat + f(type t) and f(type_t t) as the same function. + "void func(const ::A)" was interpreted as "void func(const::A)", + where "const" would have to be a class name.</li> +<li> static file members were not auto-linked even if EXTRACT_STATIC was set + to YES.</li> +</ul> + +<h1>Doxygen Release 1.2.8.1</h1> +<h3>Changes</h3> +<ul> +<li> Enum values of a grouped (with @ingroup) enum are now automatically + added to the same group.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Included update for Brazilian translation.</li> +<li> Add support for &lt; &gt; &amp; &apos; &quot; + in the documentation, + since these commands after occur in Java documentation.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Parameters appeared in the documentation for undocumented + arguments (and twice if they were also documented with @param). </li> +<li> Specifying boolean tags twice in the config file resulted in + an invalid value (both boolean values were appended).</li> +<li> Fixed a number of typos (thanks to Jens Seidel).</li> +<li> When a paragraph header was directly followed by an + item list doxygen did not render the first item properly.</li> +<li> The "More..." link was often omitted for grouped members. </li> +<li> "dangerous" characters like ":" are now escaped from man page + file names</li> +</ul> +<h1>Doxygen Release 1.2.8</h1> +<h3>Changes</h3> +<ul> +<li> Doxygen now uses a more natural naming scheme for man pages.</li> +<li> Man page and rtf output are now disabled by default.</li> +</ul> +<h3>New features</h3> +<ul> +<li> The dot generated inheritance and collaboration graphs for classes + should now show the proper template instantation for the derived/used + classes. For instance it should show that class S uses class V + (indirectly) in the following example: + <pre> + class V {}; + template<class T> class U1 { T *m_t; }; + template<class T> class U2 { U1<T> *m_t; }; + template<class T> class B1 { U2<T> *m_t; }; + template<class T> class B2 : public B1<T> {}; + class S : public B2<V> {}; + </pre> + Please report any example of class hierarchies that are not shown + properly.</li> +<li> Added doc/translator.pl script created by Petr Prikryl. + Its main purpose is to extract information from doxygen's sources + related to internationalization (i.e. the translator classes), to + avoid duplication of information (i.e. doc/language.doc is now + generated) and to generate reports about the status of the translations + (e.g. missing methods). </li> +<li> Stanislav Kudlac added support for Slovak language and + Erik Søe Sørensen added support for Danish. + Applied language updates for + Italian, Croatian, Spanish, Czech, German & Russian.</li> +<li> Added support for "KBD" HTML tags (thanks to Albin Wu).</li> +<li> Added man patch by Patrick Ohly which allows to create freestyle + man pages using \page and puts man page with non-default extension + in the correct directory.</li> +<li> Added MAN_LINKS option (thanks to Patrick Ohly for the patch).</li> +<li> Added grouping patches by Patrick Ohly: + + There are now three commands to define a group: + <pre> + \defgroup name title + \addtogroup name [title] + \weakgroup name [title] + </pre> + + \defgroup must be used exactly once for a group, so you should + provide a title. Without the title you will get a warning and + doxygen will use the name as title (this is the old behaviour). + <pre> + /** \addtogroup name */ + </pre> + can be used to add documentation or + members to a group (as in 1.2.7), but the group is created if + it doesn't exist yet. You can provide the title later + with another block: + <pre> + /** + * \addgroup name title + * documentation + */ + </pre> + <p> + Setting different titles will trigger a warning without overwriting + the title once more. + </p> + <p> + \weakgroup is exactly the same as \addtogroup, but if a member + is put into such a group with <code>\weakgroup name @{ @}</code> + and into + another group with <code>\[def|addto]group @{ @}</code>, then it will be + placed into the other group without issuing a warning. + </p> + <p> + Actually there is a four-level hierarchy for grouping with + (from strongest to weakest) \ingroup, \defgroup, \addtogroup, + \weakgroup. You will get warnings when putting members into + groups with commands of the same level, but only when you really + document this member. This will not trigger a warning and put + variable a into Group1: + </p> + <pre> + /** \addtogroup Group1 */ + /*@{*/ + /** this is the real group */ + extern int a; + /*@}*/ + + /** \addtogroup Group2 */ + /*@{*/ + extern int a; + /*@}*/ + </pre></li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed a bug in the LaTeX output generation (empty lists).</li> +<li> Doxygen can now distiguishing f(const A) from f(const B) + even though they match from a syntactical point of view.</li> +<li> A template base class that is actually an inherited template + argument of the derived class is no longer shown in the output + indices and hierarchies.</li> +<li> TOC_EXPAND could result in a broken tree view + (patch by Alexandr Chalpanov).</li> +<li> If a base class had member names which has the same name as enumerator + values in a derived class, the enumerator values did not show up in + the documentation (thanks to John Harris for reporting this).</li> +<li> Applied a number of patches sent by Jens Seidel.</li> +<li> Fixed compiler limit problem on Windows (thanks to Trevor Robinson).</li> +<li> Add -dBATCH in system calls to ghostscipt (needed for formulas) + to avoid a command prompt for newer versions of ghostscript + (thanks to Marvin Wolfthal).</li> +<li> In some situations doxygen wanted to write a files containing a \n.</li> +<li> Environment variables can now also be used for non-string values + in the config file, like for example QUIET = $(QUIET_ON)</li> +<li> Fixed a number of typo's in the docs (thanks to Philippe Lhoste & + Jens Seidel).</li> +<li> Inheritance through typedefs within a namespace did not yield the + correct inheritance diagram.</li> +<li> References to anchors in grouped members or pages were not + correctly resolved.</li> +<li> Fixed a problem with argument matching for arguments that contained + classes imported via a using declaration.</li> +</ul> +<h1>Doxygen Release 1.2.7</h1> +<h3>Changes</h3> +<ul> +<li> The configgen tool is now replaced by a more dynamic parser. This + will allow future output generators to add specific options without + changing or recompiling the doxygen engine. Doxywizard has also been + updated to use this new parser. Developers that wish to add new + configuration options, please look at Config::create() in src/config.l</li> +<li> Changed the way the translators work internally (thanks to Petr + Prikryl for ideas and code) and updated the documentation regarding + language support and maintenance. Users of languages other than + English will get a warning message if the translation for their + language is not up to date.</li> +<li> Did some internal cleaning up to make things + more consistent and easier to maintain. Please let me know if you + think something has been broken in the process. </li> +<li> Doxygen now uses a more unique output file name mangling scheme, which + generates unique file names even if entity names (like class names) + only differ in case.</li> +<li> Setting ALLEXTERNALS = NO now hides external pages in the page index.</li> +</ul> + +<h3>New features</h3> +<ul> +<li> \image is now supported for RTF output (thanks to Joe Ninety).</li> +<li> New RTF_EXTENSIONS_FILE that can be used to configure the RTF output + (thanks to Joe Ninety for the patch).</li> +<li> Added new command \htmlinclude that can be used to include a + HTML file as is in the HTML documentation. + (thanks to Uwe Wojak for the patch)</li> +<li> &nbsp; can now be put in the documentation to force a + non-breakable space.</li> +<li> Included support for the gcc extension #include_next + (thanks to Jac Goudsmit for the patch). </li> +<li> Included translation for Brazilian Portuguese sent by Fabio Jun + Takada Chino. Add update for the Czech translation + (thanks to Petr Prikryl). Also included updates for German + (thanks to Jens Seidel), Russian (thanks to Alexandr Chelpanov) and + Croatian (thanks to Boris Bralo).</li> +<li> Added RPM spec file update by Jens Seidel.</li> +<li> Added SHORT_NAMES option which can be set to YES to make doxygen + generate short (but non-informative) output file names.</li> +<li> Added new command \addtogroup that can be used to extend a group + defined with \defgroup with extra members and/or documentation.</li> +</ul> + +<h3>Bug fixes</h3> +<ul> +<li> Inline sources weren't appearing for undocumented non-inline members.</li> +<li> Doxygen did not subgroup in case the parent group was + found after the child group. (thanks to Johan Eriksson for the patch + that fixes this).</li> +<li> Specifying a directory at the INPUT that ends with a \ did not + make doxygen recurse the down the directory tree in Windows.</li> +<li> Fixed two small bugs that caused segfaults on + NetBSD and Linux on 64bit Alpha's (thanks to Rex McMaster + and Ovidiu Toader).</li> +<li> "Referenced by" section now starts at a new paragraph + (thanks to Joe Ninety).</li> +<li> Setting OPTIMIZE_OUTPUT_FOR_C still produced some C++-ish + sentences for the list of all struct/union fields.</li> +<li> Undocumented friend functions were listed as friend classes.</li> +<li> A CORBA IDL union with a switch was not always recognised correctly. </li> +<li> doxygen did not handle try-function-blocks with multiple catch clauses + properly.</li> +<li> \bug and co. were not working for static members.</li> +<li> Formulas weren't correctly re-generated when changed.</li> +<li> relative include paths containing /../ were not linked, since they + were not normalized.</li> +<li> Locally included files where not searched in the directory containing + the file that did the inclusion, only in the paths specified with + INCLUDE_PATH. </li> +<li> Fixed problem with numbers in the generated eps file for non-english + systems (thanks to Vsevolod Novikov).</li> +<li> Generated bookmarks in the RTF output not starting with a letter caused + problems (thanks to Jonathan Beaupre for the fix).</li> +<li> Putting &aring; in the docs wasn't working as expected.</li> +<li> Fixed a number of typo's in the docs (thanks to Jens Seidel and + Philippe Lhoste).</li> +<li> Autolinking could create links inside user defined HTML links.</li> +<li> Email addresses in the docs starting with an "a" and put inside sharp + brackets were not properly displayed (thanks to Abramo Bagnara for + the fix).</li> +<li> Fix several man page output bugs (thanks a patch by Patrick Ohly). </li> +</ul> + +<h1>Doxygen Release 1.2.6</h1> +<h3>Changes</h3> +<ul> +<li> The \bug command now works like the \todo and \test commands; each item + documented with \bug will be cross-referenced with a bug list. The list + can be disabled by setting GENERATE_BUGLIST to NO in the config file.</li> +</ul> + +<h3>New features</h3> +<ul> +<li> Included updates for Croatian, Czech and German, + Japanese, Italian and Russian translations.</li> +<li> Added option GENERATE_CHI that can be used to control whether + or not an .chi file should be generated by the HtmlHelp compiler + (default is NO).</li> +<li> Added option DOT_CLEANUP that when set to NO leaves the intermediate + dot files in the output directory.</li> +<li> Added option BINARY_TOC to enable/disable use of a binary table of + contents in a .chm file (thanks to Martin Slater for the patch).</li> +<li> Added option TOC_EXPAND to when enabled shows the members of a + group in the treeview and HTML help table of contents (thanks again + to Martin Slater).</li> +<li> Included group support for man page output (thanks to Joe Bester for + the patch).</li> +<li> Added option SHOW_USED_FILES that can be used to disable the + list of used files normally generated at bottom of the documentation + of classes and structs (thanks to Joe Bester).</li> +<li> Updated the doxbar tool: + <ul> + <li> the addin no longer requires administrator privileges to work + (thanks to Michael Beck)</li> + <li> the existance of files is now checked (thanks to Pekka Pessi).</li> + <li> .odl and .inl files are recognised (thanks to Pekka Pessi).</li> + </ul></li> +</ul> + +<h3>Bug fixes</h3> +<ul> +<li> doxygen.css was also used by the treeview even if the user specified + his/her own stylesheet.</li> +<li> Inline source blocks (INLINE_SOURCES=YES) were sometimes truncated + at the wrong closing bracket (thanks to Jac Goudsmit for the fix).</li> +<li> Some references to subsections were not correctly generated + (thanks to Stefan Ruppert for the fix).</li> +<li> Fixed IDL union parse problem (thanks to Richard Hash).</li> +<li> Latex output sometimes contained $\ast$ for code fragments.</li> +<li> lonely *'s were not removed inside a <pre> and <code> blocks. </li> +<li> Applied patch sent by Joe Bester to make the treeview + javascript work with Mozilla. Still has some problems though.</li> +<li> Fixed a bug in code parser regarding string detection, inside + the argument list of a function.</li> +<li> Using a command alias starting with \class (or other structural + commands) did not give the expected result.</li> +<li> A function pointer returned as the template argument of a template + class that itself is the return type of a function was not + parsed properly.</li> +<li> In IDL, typedef's followed by an attribute list where not parsed + properly. </li> +<li> The list of all members now shows all privately accessible members + if EXTRACT_PRIVATE is set to YES, instead of just the non-inherited + private members.</li> +<li> Fixed autolink problem for grouped members.</li> +<li> Mutliple static global functions with the same name (but in different + files), which were forward declared, could make doxygen put + the wrong documentation block at the wrong global function.</li> +<li> Support for Norwegian was not enabled.</li> +<li> The correct charset is now set when the treeview is used (thanks to + Boris Bralo).</li> +<li> For inline source fragments of member functions, the types + of the arguments are now also taken into account for + cross-referencing.</li> +<li> A sentence ending with a dot, directly followed by a \n was not + handled correctly.</li> +<li> File reference extracted from a tag file could something cause + doxygen to generate a bogus warning. </li> +<li> Parsing large arrays of hex numbers took very long when the source + browser was enabled.</li> +<li> Fixed install rule in the Makefile</li> +<li> Doxygen now parses try-function-blocks correctly.</li> +<li> A zero initialized function pointer inside a namespace was + misinterpreted as a pure virtual function.</li> +<li> Applied Joe Bester's patch that fixes some LaTeX output problems.</li> +<li> Java Package info was not correctly read from a tag file.</li> +<li> Todo items in the documentation of grouped members were not + correctly referenced from the todo list.</li> +<li> Removed bogus "a" entries from appearing in doxysearch's search results.</li> +<li> Putting <a href="..."><img src="..."></a> in the + docs will now work as expected for HTML.</li> +<li> Fixed problems with >pre>...>/pre> block in LaTeX.</li> +<li> Putting &ccedil; in the docs now preduces a c-cedille.</li> +</ul> + + + +<h1>Doxygen Release 1.2.5</h1> +<h3>Changes</h3> +<ul> +<li> Split up doxygen into a library and an executable part, + and moved the XML generation part to a separate front-end + (see addon/xmlgen).</li> +<li> Having SOURCE_BROWSER set to YES does not automatically + imply that a member is documented.</li> +<li> Typedefs of classes are now shown in (dot) inheritance graphs with + their typedef name instead of the resolved name.</li> +<li> Upgraded Qt files to 2.2.3 to fix some compile issues.</li> +</ul> + +<h3>New features</h3> +<ul> +<li> Added initial support for Java. The parsing of Java code + should be ok. There is a new "packages" index, with a list + of all parsed Java packages, each of which can be documented + (but not yet in the Java way using package.html) and contains + links to the interfaces and classes in the package. The code + parser still needs work (It doesn't do much cross-referencing yet). + Also any explicit package scope for classes is basically ignored, + so you cannot have two classes with the same name in different + packages. + Let me know if you know of other improvements.</li> +<li> Added support for the Java style of linking (using + {@link package.object#item()} as syntax)</li> +<li> Added file, compound and namespace members to the treeview index.</li> +<li> New configuration option MAX_INITIALIZER_LINES that can be + used to control when/if the initial values of variable and defines + are shown in the documentation.</li> +<li> OPTIMIZE_OUTPUT_FOR_C flag that when set to YES makes doxygen produce + output that looks more natural for C programmers.</li> +<li> Included Czech language update sent by Petr Prikryl. </li> +<li> Added "Binary TOC=YES" and "Create CHI file=YES" to the HtmlHelp + project file for better integration with MSDN.</li> +<li> I've updated the doxbar tool: + <ul> + <li> sources are appended to the INPUT line of the template config file</li> + <li> sources mentioned in the .dsp with quotes (i.e. "c:\bla.cpp") are now + handled properly (thanks to Robert Radtke for the fix).</li> + </ul></li> +</ul> + +<h3>Bug fixes</h3> +<ul> +<li> Fixed 0-pointer bug that could crash doxygen in some cases.</li> +<li> Starting a list in a brief JavaDoc-style description splitted + the list into two invalid parts if a list item ended with a dot.</li> +<li> Fixed a problem with linking to grouped class members.</li> +<li> Indenting of code fragment in LaTeX output was not always correct. + Also for code lines starting with a * the * was removed.</li> +<li> Typedefs where not properly extracted from tag files.</li> +<li> Links to operators in a "See also" section did only work if the + arguments list was given.</li> +<li> Fixed parse bug in the code parser for the case where "<" + and ">" were found on a line but couldn't possibly be a + template scope.</li> +<li> The "More..." links was incorrect for members of class grouped + with @ingroup.</li> +<li> Fixed preprocessor parse bug that occurred when parsing string + literal "...\\" as an macro argument.</li> +<li> Fixed buffer overflow problems when parsing very long input lines + (thanks to Arnault Bonafos).</li> +<li> References to pages and anchors imported via tag files did not work.</li> +<li> Local references to page anchors did not work.</li> +<li> Windows only: doxygen leaked process handles while running dot + (thanks to Jeroen ter Hofstede for the fix).</li> +<li> Undefining (with #undef) a define set using PREDEFINED now + longer has an effect.</li> +<li> Functions appeared twice in modules if the prototype and definition + did not match exactly.</li> +<li> the word "operator" in todo items caused problems.</li> +<li> Fixed some more problems with references to external pages, + local references to sections, and naming conflicts with multiple + todo/test lists.</li> +<li> "char a:1, b:2" resulting in output including both bitfields for b.</li> +<li> The protection level of the members in the all-member list was not + always correct.</li> +<li> Fixed some typos in the Dutch and German translations.</li> +<li> \todo's in the docs of #define did not end up on the todo list.</li> +<li> "typedef volatile struct {} name;" was not handled properly.</li> +<li> HTML header and footer file are now read only once.</li> +<li> Fixed 2 memory leaks.</li> +</ul> + + +<h1>Doxygen Release 1.2.4</h1> + +<h3>Changes</h3> +<ul> +<li> New XML-based tag file format. <p> + <b>Note:</b> If you are already using tag files, you need + to regenerate them, because the old format is no longer supported!</p></li> +<li> Removed the "No description available" for classes without brief + description in the compound list. </li> +<li> User defined groups (a.k.a. modules) are now shown in a hierarchy.</li> +<li> If a function and its prototype are both inside different documented + files then they may both be documented separately and will appear + as such in their file documentation + If you only document the header file and not the source + file you can still put your documentation in front of the function + definition as before.</li> +<li> For unresolved base classes of a class inside a namespace, doxygen + now guesses they are defined outside the namespace (was inside).</li> +<li> Performance: replaced O(n^2) sort routines for member lists + with O(nlog(n)) versions.</li> +</ul> + +<h3>New features</h3> +<ul> +<li> There is now an HTML Help like tree view, that can be enabled + by setting GENERATE_TREEVIEW to YES. + This feature requires a browser that supports frames and javascript. + Note that frame/page-resizing requires a manual reload with + Netscape 4.x at the moment (it is a known netscape bug). + (thanks to Ken Wong for providing the code to generate the tree + in the proper format).</li> +<li> Added new option TREEVIEW_WIDTH that can be used to set the initial + with of the treeview frame.</li> +<li> A warning is now generated for invalid \link targets + (again thanks to Ken Wong).</li> +<li> Wang Weihan sent an update for the Chinese translation which is now + included. Included update for the Russian and Italian language as well.</li> +<li> Support for Borland C++ and MINGW compilers for Windows + (thanks to Oliver Brandt for the patch). </li> +<li> Groups and pages defined in external documentation (i.e. with tag files) + can now be referenced using \ref.</li> +<li> Pages can now be put into groups using \ingroup (thanks to Ken Wong). + A group with only pages is rendered as a page (the group itself) + with subsections (the inserted pages). </li> +<li> \ingroup can now be put in a one line comments (thanks to Patrick Ohly)</li> +<li> \ingroup in a comment block before a comma separated list of + variables is now applied to all variables (as is the documentation + itself). (thanke to Patrick Ohly for the patch)</li> +<li> @{ .. @} blocks can now be used for normal groups as well + (thanks to Trevor Robinson for the patch). Here is an example: + <pre> + /** @defgroup mygrp My Own Group + * @brief My brief group description. + * @{ + */ + + /** @name My member group + * @{ + */ + /** This is a function */ + void func1(); + + /** Another function */ + void func2(); + + /** This is a typedef */ + typedef int Int; + + /** @} */ + + /** This is a variable */ + int var; + + /** This is a define */ + #define DEF def + + /** @} */ + </pre></li> +<li> Normal groups can now also be nested using /*@{*/ ... /*@}*/ blocks + (thanks to Patrick Ohly for the patch)</li> +</ul> + +<h3>Bug fixes</h3> + +<ul> +<li> If source files were put in the input before header files, the + declaration against definition matching did not work for + global functions (thanks to Frank Warmerdam for reporting this). </li> +<li> The template argument type and name of template functions + were not separated by a space.</li> +<li> A comma separated list of member reference variables (like int &i,&j;) + was not parsed correctly.</li> +<li> Removed bogus warning when excluding non-existent files or directories </li> +<li> Fixed problem parsing nameless bit padding fields.</li> +<li> Fixed a pointer bug in the XML generation that could crash doxygen.</li> +<li> The code parser did not cross-reference functions inside namespaces + and nested classes.</li> +<li> Only the first member of a member group was shown in a group + definition.</li> +<li> REPEAT_BRIEF = NO now works for class, namespace and file documentation + as well.</li> +<li> No macro-expansion was done on a file that was #include'd in a body + of a class or enum.</li> +<li> Fixed macro concatenation bug in the preprocessor.</li> +<li> Global functions that were \ingroup'd could appear twice in a group + in some cases.</li> +<li> % and & can now be used in the URL in the documentation.</li> +<li> \c,\e and \b now also generate a link if they have the name of a + documented file as their argument.</li> +<li> Made the FILTER_SOURCE_FILES actually do something + (it was always treated as enabled).</li> +<li> Fixed two bugs in the autolist feature (thanks to Ken Wong)</li> +<li> Fix macro expansion bug in the preprocessor, when macro's + where used as the argument of an #include.</li> +<li> // did not work inside the argument of a \todo or \test command. </li> +<li> Doxygen did not parse arrays of function pointers properly.</li> +<li> Fixed parse bug for templates with nested template arguments.</li> +<li> Fixed parsing problem for template arguments + containing << or >> operators</li> +<li> Fixed some problems with the DOT_PATH config option on windows.</li> +<li> Group title and file names are now shown in the latex index instead + of the label names.</li> +<li> Portability: Added workaround for SGI MipsPro compiler, that + (hopefully) prevents it from crashing while compiling doxygen. + Worked around a number of compile problems with HP's C++ compiler.</li> +<li> Fixed problem with doxygen calling epstopdf.bat in Windows.</li> +<li> Fixed some problems that occurred when regenerating the + doxygen manual on Windows.</li> +<li> Fixed some output formatting problems regarding templates. </li> +<li> Global functions, typedefs, and enums did not get linked when + were read in via a tag file.</li> +<li> Using /* inside an \code ... \endcode block confused the parser.</li> +</ul> + +<h1>Doxygen Release 1.2.3</h1> + +<h3>Changes</h3> +<ul> +<li> enum values are now packed in groups of 4 in the declaration part + of the HTML docs.</li> +<li> <code>JAVADOC_AUTOBRIEF</code> is now set to NO by default, because too many + people expect the JavaDoc-style to behave as the Qt-style and + not in the way described in the JavaDoc spec.</li> +<li> The distribution now includes the part of Qt-2.2.0 that is needed for + compilation of doxygen, doxytag, and doxysearch. I've also created the + missing files for Windows. This allows compilation of doxygen on systems + without X11 or the full Qt. For doxywizard Qt-2.2.x is still required + however.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Support for the Slovene language (thanks to Matjaz Ostroversnik)</li> +<li> Bit fields for struct members are now shown in the documentation.</li> +<li> Enabled "favourites" and "Full text-search" for the generated + HTML Help browser files. </li> +<li> Added support for M$-IDL properties. The "methods:" section + now also works.</li> +<li> Added support for Borland C++ builder "__published:" and "__property:" + sections. (__published: is just treated as public:).</li> +<li> Included update for the Czech language. Thanks to Wang Weihan there is + also support for Chinese output now.</li> +<li> Added a config option <code>WARN_LOGFILE</code> to log warnings to a + file for those + people that have to use certain "operating systems" that do not support + redirection of stderr to file.</li> +<li> Added a config option <code>GENERATE_LEGEND</code> that can be used to disable the + legend page normally generated for explaining dot graphs.</li> +<li> Thanks to a patch send by Micha Bieber, doxygen can now be run from + inside doxywizard.</li> +<li> Environment variables can now be used in the <code>@INCLUDE_PATH</code> + and <code>@INCLUDE</code> tags in the config file (thanks to Stephen + Goudge).</li> +<li> Windows compilation/installation instructions are updated (thanks to + Petr Prikryl)</li> +<li> New config tag <code>ENUM_VALUES_PER_LINE</code> to set the number of + enum values + that are grouped on one line (default=4).</li> +<li> #include's inside the body of a class are now expanded. </li> +<li> The source browser files can now by filtered using the + <code>INPUT_FILTER</code> if <code>FILTER_SOURCE_FILES</code> is set + to YES (thanks to Paul Strauss).</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> For #foo in member documentation doxygen was trying to find + a global variable named foo instead of a member. Use ::foo + to make an explicit link to a global variable in case there is + also a member named foo. </li> +<li> A bullet list ending with a \par sometimes caused the paragraph to + be indented.</li> +<li> When <code>STRIP_CODE_COMMENTS</code> was set to NO, and /*!< .. */ style + comments were used, the code parser got out of sync with the + documentation parser.</li> +<li> (Hopefully) fixed some Solaris compile problems + (thanks to John Sturton).</li> +<li> documentation for private slots appeared in the documentation even + though <code>EXTRACT_PRIVATE</code> was set to NO.</li> +<li> \relates was not working for nested classes or classes defined + within a namespace.</li> +<li> namespace alias support was broken with respect to inheritance + relations containing aliased namespace names.</li> +<li> The documentation of members that are put into a + group (with \ingroup) is now removed from the natural + container of the member. Also the links are now corrected.</li> +<li> Links from the code parser to static global functions are + now always pointing to the correct file (thanks to Bill Soudan + for the patch).</li> +<li> Fixed HTML bug in non-indexed namespace member lists. </li> +<li> Using `:' inside ID's caused problems for some + XML parsers. I'm now using "__" instead. Also removed @ from appearing + in the output when annonymous compounds were used.</li> +<li> Fixed output bug that is caused by nesting paragraph commands + inside autolists.</li> +<li> Doxygen no longer generates source files for input files that + end with .doc or .txt</li> +<li> Fixed argument matching problem that could result in parameter name + changes for overloaded functions. Also fixed buglet for + matching things like "unsigned int" against "unsigned int name"</li> +<li> Fixed qtools compile problem with ./configure --english-only problem</li> +<li> Putting documentation between the class and its body now also works + if the class has base classes.</li> +<li> Fixed parse problem for const function pointers like + "int* (* const name)(long);"</li> +<li> Slightly changed the HTML output to work around display "bugs" in + Konquerer and Opera (thanks to Achim Spangler).</li> +<li> Examples in compress HTML help of doxygen's manual has absolute links.</li> +</ul> + +<h1>Doxygen Release 1.2.2</h1> +<h3>Changes</h3> +<ul> +<li> Verbatim headers are now also created if a documented header + file does not contain a struct or class (unless VERBATIM_HEADERS = NO + of course).</li> +<li> For member groups, where only the first member is documented, that + documentation is no longer automatically copied to all other + members of the group. You can still enble this by setting + DISTRIBUTE_GROUP_DOC to YES in the config file.</li> +<li> The \mainpage block now gets its own chapter in Latex/RTF</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added support for KDE-2 IDL (more specific: k_dcop member sections).</li> +<li> New ALIASES config option which allows you to add one or more user + defined aliases (a.k.a. macros) that can be used as commands in the + documentation. For instance: + <pre> + ALIASES = "sideeffect=\par Side Effects:\n" + </pre> + allows you to put @sideeffect in the documentation, which doxygen + will replace by "\par Side Effects:", before parsing. As a result + a formatted paragraph with a "Side Effects" header will appear. + Note that the \n's are replaced by real newlines, so in the example + you can put your paragraph text directly after the sideeffect command.</li> +<li> Added language support for Hungarian (Thanks to György Földvári), + Korean (thanks to Richard Kim), and Romanian (thanks to Alexandru Iosup). + Received language updates for Italian, Polish, Croatian, Czech, + Hungarian and Russian.</li> +<li> Added support for namespace aliases.</li> +<li> Added RTF patch from Alexander Bartolich. Here is his description of + the changes: + "The following patch of rtgen.cpp allows to read *complete* style + definitions from rtfstyle. This includes \sbasedon, \snext, \additive + and actual style names. + + If this data is missing the default value is used. + This means old rtfstyle-files can be used without change, with one + exception: + Reset is no longer considered a style. Since unknown style names + are simply ignored I don't consider this a big problem. + There is no means to write rtfstyle in old format, however. + "</li> +<li> Documentation can now also be put after the initializer of a constructor + but before the body. </li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> RTF output was broken w.r.t. dot generated images. </li> +<li> Spacing and blanks inside <pre> ... </pre> block were not + properly preserved.</li> +<li> Fixed lock-up when parsing "enum A { A };"</li> +<li> If INLINE_INFO was set to NO an empty property list could be put after + the function definitions.</li> +<li> Fixed source code linking for the following cases: + <code>A::func().func2()</code> + and <code>a[2]->func()</code>.</li> +<li> \em %className did not remove the %</li> +<li> In some cases namespace members ended up multiple times in the + documentatation.</li> +<li> Fixed a bug in the auto list generation.</li> +<li> \latexonly inside brief description did not work properly.</li> +<li> "Referenced By" list did not include constructors with + inline initializers.</li> +<li> &auml; and such were not parsed when used as the argument of a section.</li> +<li> A struct inheriting from a base class was marked as private inheritance + while it should be public inheritance.</li> +<li> The autobreak routine for long return types was sometimes skipping + characters. </li> +<li> Class usage relations should now also appear in the collaboration + diagrams for classes within the same namespace, without explicitly + having to mention the namespace.</li> +</ul> + + + + +<h1>Doxygen Release 1.2.1</h1> + +<h3>Changes</h3> +<ul> +<li> I have completely rewritten the \todo code. Now a \todo command have a + paragraph as argument. The todo list has a header for each + item indicating where the todo item was found. The todo list (and + all todo items) can be disabled by setting GENERATE_TODOLIST to NO.</li> +<li> <pre> ... </pre> blocks now behave as in plain HTML instead of + \code ... \endcode blocks. This also works for LaTeX ofcourse. + These blocks differ from \verbatim ... \endverbatim blocks in that + commands can be used inside these blocks.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Added rudimentary support for XML output. Still very much work in + progress... You can enable it by setting GENERATE_XML to YES. + There is a small utility (based on Qt & Xerces-C) in addon/xmlread + that uses the SAX interface to read a generated XML file and then dumps + the class hierarchy contained in it.</li> +<li> Thanks to a patch sent by Christophe Prud'homme, doxygen now has a new + option USE_PDFLATEX that when set to YES makes doxygen use + pdflatex instead of latex to generate refman.pdf. The + result is a document with higher quality fonts.</li> +<li> Added a \test command that works similar to \todo and can be used to + describe test cases. Doxygen will generate a page containing a list + of all test cases. To disable the list set GENERATE_TESTLIST to NO. + Thanks to Dave Murrell for the idea and the initial code.</li> +<li> For each list option in the config file += can now be used to append + something to a list. Thanks to Joerg Baumann for adding this.</li> +<li> Numbered items are now supported like this: + <pre> + /*! + This is nested list: + - It can be either one of following: + -# An apple + - Green or + - Red + -# An orange + - Or one of the following: + -# A plane + -# A bird + + More text follows. + */ + </pre> + Credits go to Joerg Baumann.</li> +<li> Included French and Czech language updates from Mathieu Despriée and + Petr Prikryl. Also included a language update for german from + Raimund Klein.</li> +<li> Doxygen will now do give proper warnings for formulas that do not + end properly.</li> +<li> Improved error reporting for illegal list combinations (thanks to + Joerg Baumann for the patch)</li> +<li> Comments from the code example in the dot graph "legend page" was + stripped if STRIP_CODE_COMMENTS was set to YES.</li> +<li> In the config file "@INCLUDE = file" can now be used to include + part of a configuration file. "@INCLUDEPATH = dir1 dir2 ..." can + be put in front of it to add search paths (default is $PWD). + Thanks to Joerg Baumann for the patch.</li> +<li> Added alphabetical quick indices for compound, file and namespace + member lists.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Running ghostscript on Windows for generating formulas was done + asynchronously, resulting in ghostscript trying to access temporary + files that may already have been deleted by doxygen. Thanks to Robert + Golias for the code to fix this.</li> +<li> Include dependency graphs failed to get included in LaTeX because + \includegraphics did not like the dots in the generated file names. + Those dots are now escaped by underscores.</li> +<li> The \remark did not end a brief description in JavaDoc comments, + resulting in a error in the generated LaTeX.</li> +<li> "<code>operator >></code>" was not matched against + "<code>operator>></code>" </li> +<li> the (required) space after \addindex ended up in the LaTeX index, + causing all generated entries to be placed after the user added entries.</li> +<li> "<code>typedef class A<B> a;</code>" is now correctly handled in inheritance + relations. </li> +<li> Fixed some typos in the manual</li> +<li> <code>\c Class::func(arg)</code> was not autolinked.</li> +<li> Doxygen stopped reading from stdin after 4096 bytes.</li> +<li> In code fragments no autolinks for local variables or + dereferenced arguments were generated for template classes.</li> +<li> autolinking to a namespace member foo from within a class scope also + having a member foo did not work. </li> +<li> The brief description was prepended before \todo and \test. + The reference from the todo and test lists back to the documentation + did not work for overloaded members.</li> +<li> specifying width or height for \images was not handled properly. + (width and height were repeated). Now you can also use commands like + \textwidth as the width or height. </li> +<li> After expanding an environment variable in the config file, the + next environment variable was searched starting at the wrong position.</li> +<li> Fixed LaTeX/RTF labelname collisions between members of files and + groups, and between classes and groups with the same name.</li> +<li> HTML image map partly appeared in RTF output when built-in class + diagrams were used causing the RTF file to be truncated.</li> +<li> Inheritance relation was not determined correctly in case a base + class was imported from another namespace via a using declaration.</li> +<li> Todo and test items defined with \class or related block, where + sometimes missing from The todo & test</li> +<li> Preprocessor: Multi-line #define's where not properly parsed & colored + on windows due to \r's</li> +<li> Preprocessor: expansion of <code>M(x)A</code>, where M is a macro + that expands to mx, resulted in + "<code>mxA</code>", instead of "<code>mx A</code>"</li> +<li> Fixed compile problem with Qt-2.2.0beta1</li> +</ul> + +<h1>Doxygen Release 1.2.0</h1> + +<h3>Changes</h3> +<ul> +<li> <code>CASE_SENSE_NAMES</code> is now enabled by default.</li> +<li> In LaTeX <code>.eps</code> images are now included using the + graphicx package instead of epsfig to simplify the use of pdflatex + (thanks to Pier Giorgio for showing me how that works).</li> +<li> Reimplemented the <code>system()</code> call for Unix, so doxygen becomes + interruptable when calling external tools such as dot.</li> +<li> Changed the way <code>-w</code> works. It can now also be used to generate + template header and footers.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Grzegorz Kowal added support for the Polish language. His patch + is now included. </li> +<li> A <code>\par</code> command without title argument can now be used to + add a new paragraph with the same indent under the heading of + another command (such as <code>\par</code>, <code>\param</code>, + <code>\note</code>, etc...) </li> +<li> Added a legend page explaining the various arrows and box colorings + for the class diagrams generated by dot.</li> +<li> Merged update for Croatian language.</li> +<li> Relative paths are now also allowed for the + <code>STRIP_FROM_PATH</code> tag.</li> +<li> Added a new section to the manual explaining the use of tag files + in more detail. Also move the contents of the INSTALL file into + the "installation" section of the manual.</li> +<li> Added <code>ps_2on1</code> and <code>pdf_2on1</code> targets to the + Makefile generated in the + LaTeX directory. These can be used to generate manual with 2 + logical pages on 1 physical pages (Thanks to Onno).</li> +<li> Merged Czech language update from Petr Prikryl. Merged Spanish + language update sent by Lucas Cruz. </li> +<li> Added standard GNU long options <code>--help</code> and + <code>--version</code>.</li> +<li> Added a <code>-w</code> option that can be used to generate template + style sheet files for RTF, HTML, Latex. Thanks to Alexander Bartolich + for the idea and part of the implementation.</li> +<li> Merged patch from Steve Hespelt, which adds a new configuration + option: <code>INCLUDE_FILE_PATTERNS</code>. This tag can be used to + set the file patterns for the include files (if left empty the + <code>FILE_PATTERNS</code> will be used, which was also the old + behaviour). </li> +<li> Added a couple of commands for kdoc compatability: <code>@p</code>, + <code>@li</code>, <code>@em</code>. + Also made @ref a bit less strict.</li> +<li> Portuguese translation by Rui Lopes. </li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Documenting member function pointers with \var like this: + + <pre> + /*! class B */ + class B + { + public: + void (B::*pmf)(); + }; + + /*! \var void (B::*B::pmf)() + * docs for this class member. + */ + </pre> + + did not work.</li> +<li> Library blocks inside M$-IDL files are now also processed + (a library is treated as a namespace at the moment). </li> +<li> Argument matching did not work for array argument with different + amounts of whitespace. </li> +<li> If a namespace definition was found before its documentation than + grouping it (with @ingroup) did not work.</li> +<li> Global functions within anonymous namespace scopes did appear + in the documentation with the anonymous scope marker used internally + by doxygen.</li> +<li> "namespace{}",so without space was not recognised as a namespace.</li> +<li> If the search engine was used then running installdox on the generated + html resulted in bogus links to the search engine.</li> +<li> Fixed some compiler warning on Solaris.</li> +<li> Changed grey by grey50 in dot.cpp to avoid PDF conversion problems.</li> +<li> A </pre> that was not preceeded by a whitespace was ignored </li> +<li> The methods operator<() and operator<<() were not + automatically linked anymore.</li> +<li> Some special characters in LaTeX were eating up the blanks that + followed them.</li> +<li> The built-in C preprocessor did not evaluate the following to TRUE: + <pre> + #define A + #define TO_BE_EVALUATED defined A + #if TO_BE_EVALUATED + ... + #endif + </pre></li> +<li> Improved code parsing a bit: things like + <code>getClass()->func()</code> and + <code>(*pb)->func()</code> should now work. Also the scope of the + body is correctly detected in case of inline constructor initializers + like: <code>A() : m_a(10) { ... }</code></li> +<li> File index is now in (path,name) lexical order, instead of (name,path) + order. The file index is also only generated once instead of twice ;-)</li> +<li> Typedefs to structs in C-style did (still) not get resolved as "usage" + relations for the collaboration diagrams.</li> +<li> Fixed some HTML output typos reported by Onno Kortmann (who used + the tool "html tidy" on the generated output).</li> +<li> Merged a patch from Paul Lieverse that should solve the empty image + map problems on Solaris.</li> +<li> If the title of a <code>\defgroup</code> contained a documented class, a + nested (and thus broken) link was generated. </li> +<li> Externally defined variable were treated as variable definitions. </li> +<li> If a file only had a verbatim header but no documentation, a + link broken link was added to the HTML help TOC.</li> +<li> Fixed "member with no name" warning that occurred when a enum's + last value ended with a comma and the enum was inside a member group.</li> +<li> A <dl> type of list with multiple <dd>'s did not give + the correct output in LaTeX.</li> +<li> <code>SORT_MEMBER_DOCS</code> is <code>NO</code> only worked for + class members.</li> +<li> Both the prototype and the definition of a global function + appeared in a <code>\defgroup</code>.</li> +<li> Fixed some visual problems with operator links in source code + fragments.</li> +<li> Code parser got confused by template specifiers. Also improved + linking of typedef'ed classes. </li> +<li> A warning was generated if the same function was defined both inside + and outside a namespace.</li> +</ul> +<p> +\endhtmlonly +\section log_1_1 1.1 Series +\htmlonly +</p> +<h1>Doxygen Release 1.1.5</h1> + +<h3>Changes</h3> +<ul> +<li> If DISABLE_INDEX = YES and a user defined main was specified + (with \mainpage), then no index will be generated anymore.</li> +<li> RTF output is now enabled by default.</li> +<li> LaTeX output now uses fancyhdr instead of fancyheader.</li> +<li> If the search engine is enabled, the default config values will be + put into the generated HTML files, so you do not need to run + the installdox script, if the initial values are ok. </li> +</ul> +<h3>New features</h3> +<ul> +<li> Added a new config option HIDE_SCOPE_NAMES that can be set to YES + to hide the namespace and class scopes that are put in the + documentation and diagrams.</li> +<li> added a new type of graph, that can be used to visualize + which files #include (i.e. depend on) a given file. This graph is + enabled by setting HAVE_DOT and INCLUDED_BY_GRAPH to YES.</li> +<li> added new configuration option EXTRACT_STATIC that can be used + to enable/disable the extraction of static file members. The behaviour + of this option used to be linked with EXTRACT_PRIVATE.</li> +<li> Added two new configuration options MAX_DOT_GRAPH_WIDTH and + MAX_DOT_GRAPH_HEIGHT that let the user configure how big the + generated dot graph may become.</li> +<li> Added a new configuration option EXPAND_AS_DEFINED that can + be used in combination with PREPROCESSING = YES, MACRO_EXPANSION = YES, + and EXPAND_PREDEF_ONLY = YES, to expand a given list of macro names, + as they are defined in the sources.</li> +<li> Merged Alexander Bartolich's RTF style sheet patch. + A new config option RTF_STYLESHEET_FILE is now available with which you + can specify a style sheet file. The style sheet file should contain + a list of assignments. The assignments can be used to overwrite the + definitions of the various styles with user defined settings. </li> +<li> Added a new command @since for JavaDoc compatibility.</li> +<li> Added two new commands: \remarks and \attention that work in a + similar way as \warning, \pre, \post, et al.</li> +<li> If SOURCE_BROWSER = YES, each member function documentation + now includes a list of member functions that call the member + somewhere in their body. </li> +<li> RCS/CVS tags of the form $word:text$ are now nicely typeset in the + documentation.</li> +<li> Providing all members of an enum with the same documentation can + now be done with member grouping like this: + <pre> + /*! + * Rotation values + */ + enum + { + //@{ rotation value + Up=0, + Left=-90, + Right=90, + Down=180, + //@} + }; + </pre></li> +<li> Member grouping can by denoted more compactly like this: + <pre> + //@{ Same documentation for each function + int getFunc1(); + int getFunc2(); + //@} + + /*@{ @name Set functions + * Functions for setting values. + */ + void setFunc1(int v); + void setFunc2(int v); + /*@}*/ + </pre></li> +<li> Merged Czech language support patches send by Petr Prikryl. Also + removed some obsolete methods from the translator files.</li> +<li> Call chains like <code>a->b()->c()</code> are now followed + by the code parser so <code>c()</code> is linked if documented. </li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> the warning message in case of ambigous file matches was containing + a bogus <code>%s</code>, which could even crash doxygen.</li> +<li> An autolist followed by a \retval, \param, or \exception did + produced invalid output, resulting in a compile error in LaTeX. </li> +<li> " has a special meaning in LaTeX when the german babel package + is loaded. Doxygen now produces proper output for text containing + quotes.</li> +<li> The title of a related page was not properly parsed, causing + HTML special characters to end up in the output for some languages + (German for instance). </li> +<li> The hierarchy shown in the "Contents" part of the html help + browser did not properly show the hierarchy when it contained + undocumented classes. </li> +<li> explict compound specifiers in the return type could lead to + parse problems. Example: + <pre> + enum SomeEnumType_e Func() + { + ... + } + </pre> + This was parsed as an enum definition.</li> +<li> A user defined style sheet did not get included properly, if it + was specified with a (partial) path in HTML_STYLESHEET. </li> +<li> Linking in code fragments now works with nested classes + and links to the correct reimplemented member are generated.</li> +<li> \ingroup did not work when grouping enums</li> +<li> members of a module were not cross-referenced with the sources.</li> +<li> Function pointers like <code>void ( *func )()</code> where not c + orrectly parsed because of the extra spacing between + the `(' and the `*'. </li> +<li> The const in void <code>func(int * const val /*< a value. */);</code> + was named part of the name, instead of the type.</li> +<li> Removed bogus warning in case of global function pointer variables. + Function pointers inside namespaces and member function pointers + did also produce bogus warnings.</li> +<li> Fixed a misalignment problem with inline source fragments. + Also the initializer list after a colon is now included in an inline + source fragment.</li> +<li> Case sensitivity of file names was set before the configuration file + was parsed, causing the default value of CASE_SENSE_NAMES to + be used in any case.</li> +<li> added a space after "file" in the groupdef docs (thanks Hauke)</li> +<li> Documentation blocks can now also be put just after a class name, like + in: + <pre> + class C + /*! documentation here */ + { + ... + }; + </pre> + This was already possible for functions.</li> +<li> Due to a bracket counting bug, throw clauses where not always + parsed properly.</li> +<li> Fixed a parse bug for the following code-pattern: + <pre> + void Class:: + // Comment + method() {} + </pre></li> +<li> With the newer Qt versions (2.1.x), passing a null string as the first + argument of <code>QRegExp::match</code> seems no longer be allowed, + so I added some extra checks to avoid potential crashes.</li> +<li> The title of the documentation of a template class now explicitly + states that it is a template. (For non-English languages, + this still requires a change to trCompoundReference() in + translator_xx.h).</li> +<li> Fixed a problem with matching methods of template classes.</li> +<li> commenting out a section or subsection with <code><!-- --></code> + did not work.</li> +<li> Fixed some inconsistencies in the configuration page of + the documentation.</li> +<li> Some operators like <code>operator[]()</code>, + <code>operator|()</code> and <code>operator!()</code> + did not appear correctly in the LaTeX index.</li> +<li> If an include file name matched a directory name, then the + directory could be found first in the INCLUDE_PATH. This resulted in a + scanner error.</li> +<li> Fixed parse problems that occurred when << or >> was + part of a template argument list.</li> +<li> Fixed some more parse problems that occurred when parsing base classes + that were nested templates.</li> +<li> variables whose name started + with an _ like <code>struct {int x; } _var;</code> + where not properly parsed.</li> +<li> LaTeX formulas did not work in the brief description of a JavaDoc + style block that was put after an item.</li> +<li> Empty group definitions were not properly handled.</li> +<li> References to pages using \ref did not work in LaTeX.</li> +<li> Members that are typedef's to classes are now shown in the + collaboration diagram.</li> +</ul> + + +<h1>Doxygen Release 1.1.4</h1> + +<h3>Changes</h3> +<ul> +<li> The member definition that is put before the detailed + documentation section should now be layouted a bit better for members + of classes with lots of template arguments.</li> +<li> The HTML pages now have a new doxygen logo at the bottom. This logo has + a transparent background and no shadow or anti-aliasing, so it looks + equally nice on all backgrounds.</li> +<li> If the first member of a member group is documented, this documentation + is now repeated for all undocumented members of that group. </li> +<li> The following is now treated as one parameter list with two + parameters, instead of two lists with one parameter each. + <pre> + /*! + * @param a the first parameter + * + * @param b the second parameter + */ + </pre> + The same goes for the @retval and @exception commands.</li> +</ul> +<h3>New features</h3> +<ul> +<li> In code fragments: added different colors for keywords that are + types, and for keywords that deal with the flow control. + Also added colors for string and character literals.</li> +<li> Added a new command \nosubgrouping that can be put in the documentation + of a class. It can be used in combination with member-grouping + to avoid that doxygen puts a member group as a subgroup of a + Public/Protected/Private/... section. + + Example: + <pre> + /*! A class. + * \nosubgrouping + */ + class Test + { + public: + /*! \name A member group + */ + //@{ + /*! Docs for both members in the group. */ + void Member1(); + void Member2(); + //@} + /*! A member outside of the group. */ + void Member3(); + }; + </pre></li> +<li> Added three new configuration options: + <ul> + <li>WARN_IF_UNDOCUMENTED which can be used to turn on or off warning + message related to undocumented entities. This works independently + of the WARNING tag, which is there to enable/disable all + other warning messages.</li> + <li>WARN_FORMAT which can be used to specify the format of the warnings + produced by doxygen. The argument is a free form string + that must contain a $file, $line and $text marker. + The $file and $line markers will be replaced by the file name and line + number from where the warning originated. + The $text marker will be replaced by the actual warning text. + The default argument format string is: <code>"$file:$line: $text"</code>.</li> + <li>DOT_PATH that can be used to specify the path + where the dot tool is to be found, in case it is not in the + default search path.</li> + </ul></li> +<li> Added rudimentary support for using declarations. The following + now works: + <pre> + /*! Docs for the namespace. */ + namespace N + { + /*! Docs for class Test. */ + class Test + { + public: + void func(); + }; + }; + + using N::Test; + + /*! The documentation for func is here */ + void Test::func() {} + </pre> + Using of individual functions remains unsupported.</li> +<li> collaboration and include dependency graph are now also included + in the LaTeX documentation.</li> +<li> Thanks to Tim Mensch, doxygen has now has a \todo command, which + can be used put todo items in the documentation. + All items will automatically be cross-referenced with a + (generated) todo list. Here is an example: + <pre> + /*! \mainpage + * \todo write something useful here. + */ + + /*! A class + * \todo Add more comments here + */ + class Test + { + public: + //! \todo implement this function + void func(); + + /*! Computes stuff. + * \todo can we combine this with Test::func()? + * More docs. + */ + void func2(); + }; + </pre> + + Note that the arguments of the \todo command ends at the end of the + line.</li> +<li> membergroups in files can now also be header-less. Example: + <pre> + /*! @file */ + + /*! A macro */ + #define AMACRO 11 + + //@{ + /*! F1 macros */ + #define F1_0 0 + #define F1_1 (F1_0 + 1) + #define F1_2 (F1_1 + 2) + //@} + + /*! Yet another macro */ + #define YAMACRO 10 + </pre> </li> +<li> The `explicit' and `mutable' keywords are now recognized as + member attributes instead of return types.</li> +<li> the index page is now added to the HTML help contents.</li> +<li> In case "no matching member" is found, a list of possible + (but non-matching) candidates is generated along with the warning. + This makes it much easier to see what's wrong. </li> +<li> added two new commands: + <ul> + <li>\hideinitializer which can be put in the documentation to + a variable or the define to hide the initializer or define value.</li> + <li>\showinitializer which can be used to explicitly show the + initializer of a variable or the value of a define even if it + is longer than 30 lines.</li> + </ul></li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed a lock-up problem, that occurred when + parsing a code fragment containing something like: + <pre> + // + /*! + blah + */ + </pre> + while STRIP_CODE_COMMENTS was set to NO </li> +<li> The auto list feature was still broken. + Due to a bad scanner rule, things like -1 at the start of a line + were treated as a list items (again) and a list at the end of a + comment block did not always work either.</li> +<li> If an non-existent config file was specified, the directories + "html", "man" and "latex" were created anyway.</li> +<li> A fragment like: os <code><< ">"</code> was misinterpreted + by doxygen's code parser.</li> +<li> Parameter declarations that differ only in the presence or absence + of const and/or volatile are now treated as equivalent, as is + dictated by the C++ standard.</li> +<li> The inline function body was wrong in the following example: + <pre> + void f( + int i ///< Parameter + ) + { + return 1; + } + </pre> + Thanks to Alexander Gidon for the fix.</li> +<li> typedef'ed classes are now also resolved in code fragments + (again thanks to Alexander).</li> +<li> Fixed a bug related to base classes with nested template specifiers, + like class SB in the following: + <pre> + template <class T> class C {}; + template <class T> class S {}; + template <class T> class SB {}; + template <class T> class S<C<T> > : public SB<C<T> > {}; + </pre> </li> +<li> #includes in code fragments where not hyperlinked. Operator + methods were also not correctly recognised.</li> +<li> C/C++ comments inside initializers where not handled properly.</li> +<li> If the type of an argument of a member definition was prefixed + with a (redudant) scope name of an indirect base class, + then it was not matched against the member declaration if that + omitted the scope.</li> +<li> \name did not work within //! comments</li> +<li> When FULL_PATH_NAMES was set to YES, doxygen did no longer + distinguish between files with the same name (but in + different directories). </li> +<li> The file match routine now does an case-insensitive lookup + if CASE_SENSE_NAMES = NO. Hopefully this is enough to + let doxygen ignore case differences in file names on Windows.</li> +<li> The constructors and destructors of classes inside namespaces + or other classes did not end up in the constructor/destructor + section of the documentation.</li> +<li> If an environment variable in the config file starts with a space + followed by a list of words, the space ends up in the first word + after expansion.</li> +<li> A <table> inside a JavaDoc style comment block caused a bogus + warning.</li> +<li> Using member groups could result in an empty list generated in + LaTeX, causing a error while compiling the documentation.</li> +<li> Fixed a missing stdlib.h problem in doxywizard, which occurred + on non-Linux systems.</li> +<li> The generation of dot include graphs did not work properly in + case file names with space were used.</li> +<li> back-references from source-lines to documentation only worked for + those members of a member group that were explicitly documented.</li> +<li> doxygen did not distriguish between func(int a) and func(int a[]) + which could cause documentation to end up at the wrong member + in case over overloading. </li> +</ul> + + + +<h1>Doxygen Release 1.1.3</h1> + +<h3>Changes</h3> +<ul> +<li> Changed the way anonymous enums are handled: they are now handled + just like named enums, which makes the "Enumeration Values" section + obsolete.</li> +<li> If + <pre> + /*! \file */ + </pre> + is put into a file (thus without further documentation) then the + file is treated as being documented.</li> +</ul> +<h3>New features</h3> +<ul> +<li> Doxygen now has a GUI frontend to create and edit the configuration + file. It is called doxywizard. To build it from sources use: + <pre> + ./configure --with-doxywizard + </pre> + The front-end requires Qt 2.x to build. I've only tested with Qt-2.1. + Sources can be found in the addon directory.</li> +<li> To make it very easy to add new configuration options, doxygen + now has an additional tool called configgen. All options supported + by doxygen are now located in one place (in configgen.cpp). + From this the configuration parser and part of the GUI are + generated. You only need configgen if you want to add new options + to doxygen. Thanks go to Joerg Baumann for providing the ideas + and part of the code.</li> +<li> Added a bit of syntax highlighting to the generated source + fragments in HTML (only keywords, comments and preprocessor directives + are colored for now). The font color & style is determined by + the style sheet, so it is easy to customize :-)</li> +<li> Typedefs of classes are now resolved when the inheritance + and usage relation of classes is determined.</li> +<li> Waechter Parker made the following improvements on the RTF generator: + <ol> + <li>Now it uses the translator for the table of contents entry names + for the sections.</li> + <li>writeSection now puts braces around the entry so the formatting + doesn't get messed up so easily. </li> + <li>removed extra newline in startDescList </li> + <li>writeSectionRef now writes out "title (p.pagnum)" like it should.</li> + <li>writeSectionRefAnchor now just calls writeSectionRef. </li> + </ol></li> +<li> Doxygen's preprocessor now supports the non-ANSI "#else if" + preprocessor construction, which some other preprocessors seem to + accept as well.</li> +<li> Boris Bralo added language support for the Croatian language. + Nickolay Semyonov has finished the translation to Russian, which is + now included.</li> +<li> Added documentation for the commands \if and \endif, the + configuration tag ENABLED_SECTIONS, and the ways to groups + things together.</li> +<li> In the brief part of a JavaDoc style comment block, + putting a backslash after a space, prevents switching to the + detailed description. Example: <code>i.e.\ this</code>.</li> +<li> Class diagrams can now also be rendered with dot by setting + CLASS_GRAPH to YES (this will disable the build-in class graphs). + The advantages: + <ul> + <li>More compact diagrams.</li> + <li>Correctly looking diagrams in case of virtual inheritance.</li> + <li>A more consistent look w.r.t. the other graphs.</li> + </ul></li> +<li> Groups can now contain namespaces and other groups.</li> +<li> operator% caused problems with LaTeX when PDF_HYPERLINKS was set to YES.</li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> <code>\c func()</code> did not autolink to function "func" anymore. </li> +<li> template members with multiple arguments were misaligned + in the HTML output. </li> +<li> Since 1.1.2, environment variable expansion in the config + file always resulted in a single string for each expanded variable + (just as if quotes were put around the environment variable). + The old behaviour is restored again.</li> +<li> removed redundant spaces in the man page output and fixed the + tab alignment in code fragments.</li> +<li> <code>typedef ( bla::*proc)();</code> was not properly parsed because of the + space after the first opening bracket.</li> +<li> fixed a problem in the namespace strip routine that could potentially + lock up doxygen.</li> +<li> Long pre-initialized arrays ended up in the documentation.</li> +<li> Friend functions that were documented at the declaration were + cross-referenced to the wrong file when using SOURCE_BROWSER=YES.</li> +<li> When EXTRACT_ALL=YES was used, classes that were + documented with \class appeared twice in the namespace documentation.</li> +<li> Setting HIDE_UNDOC_CLASS=YES could result in an incorrectly + indented textual class hierarchy. This should now be fixed.</li> +<li> Members with very long return types caused all member names to + be pushed to the right in the HTML documentation + (if HTML_ALIGN_MEMBERS was YES). Now some line breaks are inserted + at the proper places.</li> +<li> A couple of people reported that doxygen crashed while it was generating + dot graphs. The cause was likely to be multiple frees of the same + pointer (but I have not been able to reproduce the crash myself). + I've now reimplemented the deletion routine of the dot graph + respresentation, which hopefully fixes this problem.</li> +<li> Elements of the configuration options in lists, which used quotes + were broken up into smaller pieces anyway. This most notably broke + PREDEFINED in some cases that worked before.</li> +<li> Detailed description was present for classes, files and namespaces + even if there was only a brief description and REPEAT_BRIEF was NO.</li> +<li> LaTeX: For German output "deutsch" was used as an option for the babel + package, while it should be "german". For Russian output an encoding + option is added.</li> +<li> The inheritance relation was incorrect for the inner class of B in the + following situation: + <pre> + template <class T> class A { public: class inner { }; }; + template <class T> class B : public A<T> + { public: class inner : public A<T>::inner { }; }; + </pre> </li> +<li> Fixed a bug that prevented the header links of the search engine + from working.</li> +<li> Undocumented classes & enums made it in the file documentation even if + HIDE_UNDOC_MEMBERS was set to YES.</li> +<li> Backslashes in includes like + <pre> + #include "..\blah.h" + </pre> + did not end up in the include dependency graph.</li> +<li> If ALPHABETICAL_INDEX=YES but there were no documented classes, part + of the LaTeX output (doxygen.sty a.o.) was not generated + (Thanks to Markus Lepper for reporting this).</li> +<li> Doxygen can now match arguments containing an explicit namespace + qualifier against arguments containing an implicit qualitifier + (i.e. imported via a using directive). + An example (thanks to Karl Stroetmann): + <pre> + /*! a class */ + class Test + { + public: + void resolve(const std::vector<int>&); + }; + using namespace std; + /*! a member */ + void Test::resolve(const vector<int>&) {} + </pre> </li> +<li> Template specifiers are now shown in dot generated + collaboration graphs.</li> +</ul> + +<h1>Doxygen Release 1.1.2</h1> + +<h3>Changes</h3> +<ul> +<li> Having the source browser set to YES does not longer imply that + a member with a reference to the sources is automatically documented.</li> +<li> Base classes are shown in declaration order in the class diagrams</li> +<li> The arguments of a function now each get their own + line in the header above the detailed description. This makes + function with lots of argument much more readable.</li> +<li> Changed the look of the LaTeX output a bit. </li> +</ul> +<h3>New features</h3> +<ul> +<li> Thanks to Joerg Baumann, doxygen now has two new commands: + <ul> + <li>\if label </li> + <li>\endif</li> + </ul> + These commands can be used to create conditional documentation blocks. + Sections are disabled by default. To enable them add a guarding + "label" to the <code>ENABLED_SECTIONS</code> tag in the config file. + Conditional blocks can be nested. + Example: + <pre> + /*! Normal docs. + * \if Cond1 + * Only included if Cond1 is set. + * \endif + * \if Cond2 + * Only included if Cond2 is set. + * \if Cond3 + * Only included if Cond2 and Cond3 are set. + * \endif + * More text. + * \endif + * Unconditional text. + */ + </pre></li> +<li> Again thanks to Joerg Baumann, URLs and mail addresses are now + hyperlinked in the PDF output + (=latex with <code>PDF_HYPERLINKS = YES</code>).</li> +<li> Added support for member grouping. I reimplemented this + from scratch. I decided to follow the doc++ syntax for the member + grouping. Here are two examples. + <p> + <b>Usage:</b> A group is defined by a <code>//@{ .. //@}</code> block + (or <code>/*@{*/../*@}*/</code> if + you're addited to C style comments :-) Nesting of groups is not + allowed. Before the opening marker of a block a separate comment + block should be placed. This block should contain the @name + (or \name) command to specify the header of the group. + </p> + <p> + If all members of a user defined member group are in same section + (for instance all are public methods), then the group as a whole + will be listed as subsection of that section. + </p> + <p> + <b>Example1:</b> Two ways to grouping member of a class + </p> + <pre> + /** A class. Details */ + class Test + { + public: + /** @name Group1 + * Description of group 1. Details. + */ + //@{ + /** Function 1 in group 1. Details. */ + void func1InGroup1(); + /** Function 2 in group 1. Details. */ + void func2InGroup1(); + //@} + + void func1InGroup2(); + void func2InGroup2(); + /** Function without group. Details. */ + void ungroupedFunction(); + }; + + void Test::func1InGroup1() {} + void Test::func2InGroup1() {} + + /** @name Group2 */ + //@{ + /** Function 2 in group 2. Details. */ + void Test::func2InGroup2() {} + /** Function 1 in group 2. Details. */ + void Test::func1InGroup2() {} + //@} + </pre> + <p> + <b>Example2:</b> Combining member groups with @defgroup. + </p> + <pre> + /** @defgroup globals Global Functions + * Functions that may be used in any translation unit. + */ + + /** @name Debug Functions */ + /*@{*/ + + /** @ingroup globals + * debug printf function. + */ + void debugPrint(const char *s /**< the message to print. */ + ); + + /** @ingroup globals + * assert function. + */ + void my_assert(const char *f, /**< current file. */ + int l, /**< current line. */ + BOOL e /**< expression to evaluate. */ + ); + /*@}*/ + + /** @name Test Functions */ + /*@{*/ + + /** @ingroup globals + * test on-board memory. + * @returns TRUE if successful. + */ + bool testRam(); + + /** @ingroup globals + * perform CPU self-test. + * @returns TRUE if successful. + */ + bool testCPU(); + + /*@}*/ + </pre></li> +<li> Documented variables (e.g. constants) that are used as initializers + of function parameters are now also cross-referenced. </li> +<li> Lucas Cruz sent an update for the Spanish translation. This is now + included. Jens Breitenstein sent an update for the German translation. + Philippe Lhoste sent some bug fixes for the French translation. + Alessandro Falappa sent an updated of the Italian translation, which + is now included. Nickolay Semyonov added initial support for the + Russian language. I updated the Dutch translation.</li> +<li> Thanks to Matthias Andree, the doxygen source package + now contains a .spec file. This can be used to build an .rpm package + for doxygen. + doing: + <pre> + rpm -ta doxygen-x.y.z.src.tar.gz + </pre> + will create the rpm (in /usr/src/packages/RPMS/i386/ on my machine). + Running <code>rpm -Uhv</code> as root on the .rpm file will + install/update doxygen. + After that you can use <code>rpm -e doxygen</code> to uninstall it again.</li> +<li> Umlauts and other accents in the documentation now appear properly in + generated RTF output. </li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> Fixed bug in the generated config file (LATEX_BATCHMODE)</li> +<li> When updating the config file, <code>TAB_SIZE</code> and + <code>COLS_IN_ALPHA_INDEX</code> + were reset to their default values. Environment variables in + the config file are no longer replaced by their value when updating + the config file. </li> +<li> The version.cpp file is now automatically updated when creating + a source/cvs package.</li> +<li> The types of arguments that are prefixed with a namespace scope + are now be matched against non-prefixed names. Example: + <pre> + namespace std { class string {}; } + //! A class + class Test { + public: + void test(std::string a); + }; + using std::string; + //! A member + void Test::test(string a); + </pre> + <b>Note:</b> The namespace definition has to be part of the + input sources for this to work!</li> +<li> Fixed a bug in structure of the graphical class hierarchy + (thanks to Paul Bohme for pointing me at this bug)</li> +<li> Non-function members can now also be documented if they + are inside annonymous namespaces, which themselves are nested in + named namespaces.</li> +<li> #defines can now grouped with \defgroup and \ingroup as well.</li> +<li> fixed a bug in the latex output of groups (thanks to Gregory Kurz + for reporting this)</li> +<li> Doing a \ref to a \anchor in an example did not work.</li> +<li> static file & namespace members were cross-referenced even though + they were not visible if EXTRACT_PRIVATE is set to NO.</li> +<li> The following code fragment made doxygen crash, because the + table was split between the brief and detailed section: + <pre> + /** <table><tr><td>a. </td><tr></table> */ + class Test {}; + </pre> + Doxygen now ends the brief description when a <table> tag is encountered.</li> +<li> \c and \b now also accept numbers and other printable characters, + instead of only identifiers.</li> +<li> Autolinking did not work if a member with arguments was specified + in the documentation and that member had a const or volatile postfix + in the code. Autolinking did not also not work if a member with + arguments contained digits (thanks to Fred Labrosse for pointing me + at this bug).</li> +<li> The first line was missed if @code was used for generating man pages. + (Thanks to Joe Bester for the patch). </li> +<li> <code>\link create_link(long,int&) bla \endlink</code> + now works (doxygen was confused by the arguments before).</li> +<li> A brief description after a function definition, followed by a detailed + description now works as expected. Example: + <pre> + bool func() + { + } + //!< Brief. + /*!< Details. */ + </pre></li> +<li> Multi-line brief descriptions after a function declaration or definition + now work as excepted. Example: + <pre> + bool func() + //!< Brief. + //!< More brief. + </pre></li> +<li> \latexonly fragments were put on a single line causing problems + when latex comments (%'s) are used. </li> +<li> The license file that came with doxygen was of LGPL, while it + should be GPL. The correct license file is included now.</li> +<li> The heading of the alphabetical index was duplicated if + classes were present in both upper and lower case.</li> +<li> If ENABLE_PREPROCESSING=NO and the INPUT_FILTER was used, doxygen + did not filter properly can could even block on input!</li> +<li> Internationalization should now output proper characters with qt-2.1x.</li> +<li> If namespace contained a function prototype & a function definition + they both ended up in the documentation.</li> +<li> <table> without </table> could cause doxygen to crash. Now a + warning is given.</li> +<li> Multiline variable and enum initializers with lots of spaces were + shown in an ugly way.</li> +</ul> + + + +<h1>Doxygen Release 1.1.1</h1> + +<h3>Changes</h3> +<ul> +<li> "Reimplements" for a member now points to the most direct + base class that overrides the member instead of the base + class containing the vtable.</li> +<li> classes, namespaces, and members are now sorted + in a case insensitive way (like in a dictionary). + Was case sensitive.</li> +<li> Kenji Nagamatsu has send me an update for the Japanese translation + which is now included.</li> +</ul> +<h3>New features</h3> +<ul> +<li> new option SHOW_INCLUDE_FILES, which can be set to NO to turn of the + list of include files that is generated for each documented file.</li> +<li> new option STRIP_CODE_COMMENTS, which can be set to NO to keep any + special comment blocks in the generated code fragments.</li> +<li> Added a new tag to the configuration file: SORT_MEMBER_DOCS. If this + is set to NO the member documentation will appear in declaration + order (as was the case with version 1.0.0 and older). </li> +<li> Corba IDL exceptions are now also supported by doxygen. + If you do not want to put the documentation in front of the + exception you can use \idlexcept command which behaves like \class.</li> +<li> Local file:/// URLs are now automatically linked when put in the + documentation.</li> +<li> For \class and other structural commands you can now use + a backslash (\) at the end of a line to continue the command on + the next line. + Example: + <pre> + \class Abstract_Server_Session_Implementation \ + Abstract_Server_Session_Implementation.h \ + ATD/Abstract_Server_Session_Implementation.h + </pre></li> +<li> "make distclean" now removes all generated stuff and results in a + package that is more clean than a normal source package + (i.e. the generated flex & bison code is removed). </li> +<li> Added command \note (and @note) for a "Note:" paragraph.</li> +<li> Multi arguments can now be given as a comma separated list + after a \param or \retval command. Example: + <pre> + void Zoom( int aX1, int aY1, int aX2, int aY2 ); + /*! Zoom into the data. + * \param aX1, aY1 Upper left corner. + * \param aX2, aY2 Lower right corner. + */ + </pre></li> +<li> Added 9 new class declaration sections: + Public/Protected/Private Types, for member typedefs & variables. + [Static] Public/Protected/Private Attributes, for member variables.</li> +<li> Doxygen now has a new command line option -u, that can be used + to upgrade an old configuration file without losing the values that + where edited. In combination with the -s option this can also be used + to strip comments from or add comments to a configuration file.</li> +<li> Added a new tag LATEX_BATCHMODE that makes latex run in batch mode. + This will run latex non-interactively, and not stop at the first + problem encountered. If the tag is enabled this mode will also be + used when generation formulas for inclusion in the HTML documentation.</li> +<li> The \ingroup command can now also be used to group a number of + members. The only limitation is that a member can currently be in + one group only (classes, files & namespaces do + not have this limitation). </li> +</ul> +<h3>Bug fixes</h3> +<ul> +<li> The graphical class hierarchy was not properly generated when + template classes were used.</li> +<li> Template specialization could not be documented using the + \class command. This is now fixed. Example: + <pre> + /*! + * \class T<A,int> + * My template specialization of template T. + */ + </pre></li> +<li> Fixed a bug when parsing M$-IDL code, containing + helpstring("bla") attributes. The attributes of a method are no longer + shown in the documentation (the attributes of method arguments + still visible however).</li> +<li> Improved the search algorithm that tries to connect classes with their + base classes. It should now (hopefully) work correct in all cases + where nested classes and/or namespaces are used. </li> +<li> Fixed a scanner problem that could cause doxygen to get + confused after parsing struct initializers.</li> +<li> the DOTFONTPATH environment variable is now automatically set + for Windows. This should make any "missing doxfont.ttf" + messages disappear.</li> +<li> the extra LaTeX packages specified with EXTRA_PACKAGES can now + also be used when generating formulas for HTML. </li> +<li> The documentation of a parameters that is part of a member definition, + is now used in the documentation as well.</li> +<li> Fixed a HTML output bug in the class/file group-pages.</li> +<li> Links to example files generated with \link ... \endlink where not + correct. </li> +<li> made the bullet list generation more robust. A space is now required + after the - sign. A list can now start a paragraph.</li> +<li> the configure script now detects whether or not dot is installed.</li> +<li> The VERBATIM_HEADERS option didn't have any effect any more. + It should now work again as advertised.</li> +<li> The IGNORE_PREFIX option can now also deal with a list of prefixes.</li> +<li> @verbatim ... @endverbatim blocks did not work. </li> +<li> removed some \n's from the systems calls that run dot. This appears to + cause problems for some people and was not what I intended anyway :^)</li> +<li> The following construct was not working: + <pre> + namespace foo { class bar; } + /*! let's go to the bar */ + class foo::bar { }; + </pre></li> +<li> Members inside annonymous namespaces nested inside named namespaces + were not properly handled. </li> +<li> When documenting template specializations with the \class command, + the second argument was not interpreted correctly.</li> +<li> Interface inheritance relations are now always public for IDL + interfaces.</li> +<li> Templetized related functions showed a double `template' line.</li> +<li> Related function that had a declaration and a definition + also appeared in file documentation but without documentation. </li> +<li> Links to files of the include dependency graph were + non existent in some situations.</li> +<li> Removed warning generated for undocumented friend classes.</li> +<li> Class reference in the main page ended up in refman.tex</li> +<li> Source files were generated for files mentioned in tag files.</li> +<li> The graphical class hierarchy always contained all external class, + regardless of the ALLEXTERNALS flag.</li> +<li> operator~() was grouped with the constructor/destructors.</li> +<li> In a number of cases, documented include files, that were + shown in the include dependency diagram where not found to be + documented. As a result the diagram was often not clickable and + incomplete.</li> +<li> Fixed the graphical class hierarchy. Sometimes classes were missing.</li> +<li> Added support for the cpp_quote hack inside M$-IDL code.</li> +<li> The typedef in: + <pre> + struct MyStruct { int i; }; + typedef struct MyStruct * MyStructPtr; + </pre> + was mistaken for a variable.</li> +<li> <pre> + /** @file + * @brief + * Brief. + * + * Details. + */ + </pre> + was not properly handled.</li> +<li> Corba IDL unions now work. Example: + <pre> + /** \union XYZ + * \brief The XYZ union. + */ + union XYZ switch ( ABC ) + { + case A: D_VAR m_d; ///< Docs for a member in case A + case B: E_VAR m_e; ///< Docs for a member in case B + }; + </pre></li> +<li> Classes documented with \class and using \ingroup where not always + put into the group.</li> +<li> In Latex & RTF references to undocumented files where put in the + index. </li> +</ul> + +<h1>Doxygen Release 1.1.0</h1> +<h3>Changes</h3> +<ul> +<li> Static file members are now hidden if EXTRACT_PRIVATE is set to NO.</li> +<li> the documentation of members in the class/file descriptions are now + alphabetically sorted by member name for each section. There is a new + section for constructors & destructors.</li> +<li> merged file, header and source indices into one file index. + As a result, doxygen will generate a hyperlinked source code only + once. This should greatly increase speed and reduce memory usage + for large projects.</li> +</ul> + +<h3>New features</h3> +<ul> +<li> Thanks to Parker Waechter, doxygen now has a new output format: RTF. + This is Microsoft's "portable" document format. Due to the great + "portability" of this format the output produced by doxygen will + probably only look nice with Microsoft's Word 97. + <p> + RTF is currently disabled by default. You can set GENERATE_RTF to + YES to enable it. The directory where the RTF output is put, can + be specified using the RTF_OUTPUT tag in the configuration file. + COMPACT_RTF can be enabled to generate more compact RTF. + RTF_HYPERLINKS can be used to generate HTML like cross references + in the document. </p></li> +<li> Doxygen can now use the "dot" tool from graphviz 1.5, which is an + open-sourced, cross-platform graph drawing toolkit from AT&T and + Lucent Bell Labs. + <p> + Graphviz can be found at + <a href="https://www.graphviz.org/">https://www.graphviz.org/</a> + If you have the "dot" tool available in the path, you can set + HAVE_DOT to YES in the configuration file to let doxygen use it. + </p><p> + Doxygen uses the "dot" tool to generate the following graphs: + </p> + <ul> + <li>if GRAPHICAL_HIERARCHY is set to YES, a graphical representation + of the overall inheritance diagram will be drawn, + along with the textual one (currently supported for HTML only).</li> + <li>if INCLUDE_GRAPH is set to YES, an include dependency graph + is generated for each documented file that includes at least one + other file (currently supported for HTML and RTF only).</li> + <li>if COLLABORATION_GRAPH is set to YES, a graph is drawn for each + documented class and struct that shows: + <ul> + <li> the inheritance relation with base classes + (using solid blue/green/red arrows, for public,protected,private + inheritance).</li> + <li> the containment relations with other structs + and class (using purple dashed arrows with variable names as labels) + (currently supported for HTML and RTF only)</li> + </ul></li> + </ul> + <p> + For the include dependency graph and the collaboration graph, + doxygen will render a transitive closure of the relation. If + the diagram becomes too large (currently wider than 1024 pixels), + only the maximum graph depth (as seen from the root of the + graph) that still fits will be drawn. (the nodes that can still be + expanded are shown with a red border in this case). + </p><p> + For HTML all graphs are drawn as client side clickable image maps.</p></li> +<li> Each file now has a list the files it includes + (with links to the sources if available)</li> +<li> For class documentation it is now possible to choose how the + <code>#include</code> statement should look like + (i.e. like "stdio.h" or <stdio.h>). + This can be done using the third argument of + the <code>\class</code> command. + Example: <pre>\class myclass myclass.h "mydir/myclass.h"</pre></li> +<li> If the - character is used as the first character in a comment line + it is interpreted as an item of a bullet list. Subitems are also + possible. Here is an example: + <pre> + /*! + * A list: + * - item 1 + * - subitem 1 + * - item 2 + * - subitem 1 + * - subsubitem + * - subitem 2 + * - item 3 + * - item 4 + * + * Starting a new paragraph in a top level item ends the list! + */ + </pre> + + Notice: tabs can be used for indenting, but the TAB_SIZE tag in the + configuration file must be set correctly!</li> +<li> Function/member arguments can now be documented, like this + <pre> + /*! This function finds the first occurrence of a + * substring in a string. + */ + char *strstr(const char *haystack, /*!< the string to search in. */ + const char *needle) /*!< the substring to search for. */ + { + } + </pre></li> +<li> Three new section commands <code>\pre</code>, <code>\post</code> and + <code>\invariant</code> are added to describe + preconditions, postcondictions and invariants respectively.</li> +<li> Variable/enum initializers and define definitions are + now included in documentation (unless the initializer/definition + is more than 30 lines long)</li> +<li> Added new configuration option IGNORE_PREFIX that can be + used to ignore a specified prefix while generating the alphabetical + class index.</li> +</ul> + +<h3>Bug fixes</h3> +<ul> +<li> All defines were shown as function macros in the documentation section.</li> +<li> Fixed bug with parsing multi-line defines on Windows (\r problem). </li> +<li> Protection level of members inside nested anonymous compounds was not + set correctly.</li> +<li> Class diagram was not correct in case the same class was inherited + via two different paths (bug introduced in 1.0.0).</li> +<li> If a tag is specified two times in the config file, then the second + definition will correctly overwrite the value of the first occurrence.</li> +<li> For multiple defines with comments after them only the first was + cross-referenced with the sources.</li> +<li> Autolinks to #defines looked like function macro even if they weren't.</li> +<li> Members that were hidden deep in an inheritance tree, got multiple + scope prefixes in the "all members list", while a scope prefix to + the member in the base class was enough to use it unambiguishly.</li> +<li> <code>\latexonly ... \endlatexonly</code> in the main page produced + erroneous text in refman.tex</li> +<li> The keywords in header and footer were only evaluated once.</li> +<li> Formulas now also work in documentation blocks that are put after an + item.</li> +<li> The source code could produce links to the wrong class for + a code fragment like <code>a.f()</code> in + case two classes have the same member variable `a', but with a + different class types and those classes both had the member + function `f'.</li> +<li> array type arguments (like int a[2]) where not matched if the argument + name of declaration and definition were different. </li> +<li> memory in code.l is now returned at the appropriate times.</li> +</ul> <hr/> Go <a href="index.html">back</a> to the main page. <p> diff --git a/doc/commands.doc b/doc/commands.doc index 161c20e..ec207f1 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -75,6 +75,7 @@ documentation: \refitem cmdelse \\else \refitem cmdelseif \\elseif \refitem cmdem \\em +\refitem cmdemoji \\emoji \refitem cmdendcode \\endcode \refitem cmdendcond \\endcond \refitem cmdenddocbookonly \\enddocbookonly @@ -213,12 +214,12 @@ documentation: \refitem cmdamp \\\& \refitem cmdtilde \\~ \refitem cmdlt \\\< +\refitem cmdeq \\= \refitem cmdgt \\\> \refitem cmdhash \\\# \refitem cmdperc \\\% \refitem cmdquot \\\" \refitem cmdchardot \\\. -\refitem cmdcolon \: \refitem cmddcolon \:: \refitem cmdpipe \\| \refitem cmdndash \\\-- @@ -2110,7 +2111,7 @@ Make sure you have first read \ref intro "the introduction". this range are considered to be 5. In case no `level` is specified `level` is set to 5 (show all) In case no `option`. is specified \c \\tableofcontents acts as if just the - `option` `HTML` was specified. In case of multiple \c \\tableofcontents + `option` `HTML` and `XML` was specified. In case of multiple \c \\tableofcontents commands in a page the `option`(s) will be used additional to the already specified `option`(s), but only the last `level` of an `option` is valid. @@ -2743,6 +2744,22 @@ class C {}; \endcode <hr> +\section cmdemoji \\emoji "name" + +This command will produce an emoji character given its name. + +The supported names are the ones also supported by GitHub and listed here +https://gist.github.com/rxaviers/7360908 + +You can use the name with or without colons, i.e. +`\emoji smile` is the same as writing `\emoji :smile:`. +When an emoji is not supported the name with by places in the +text with in between colons, i.e. `\emoji unsupported` will produce +`:unsupported:` in the output. Doxygen will also give a warning message. + +See also the \ref emojisup "emoji support page" for details. + +<hr> \section cmdmsc \\msc ["caption"] [<sizeindication>=<size>] \addindex \\msc @@ -3446,12 +3463,12 @@ class Receiver the start of a line. <hr> -\section cmdcolon \: +\section cmdeq \\= - \addindex \\: - This command writes a single colon (\c \:) to the output. This + \addindex \\= + This command writes an equal sign (`=`) to the output. This character sequence has to be escaped in some cases, because it is used - to define `emoji` see also \ref emojisup "Emoji support". + in Markdown header processing. <hr> \section cmddcolon \\:: diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex index 6ff089c..1a44574 100644 --- a/doc/doxygen_manual.tex +++ b/doc/doxygen_manual.tex @@ -72,6 +72,8 @@ \setlength{\parindent}{0pt} \newcommand{\doxynormalparskip}{\setlength{\parskip}{0.2cm}} \newcommand{\doxytocparskip}{\setlength{\parskip}{0.2cm}} +\newcommand{\doxygenemoji}[2]{% +\IfFileExists{../doc/#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{../doc/#2.png}}}{#1}} \doxynormalparskip \hbadness=750 \tolerance=750 diff --git a/doc/emojisup.doc b/doc/emojisup.doc index 75a90fb..4c861fe 100644 --- a/doc/emojisup.doc +++ b/doc/emojisup.doc @@ -18,26 +18,16 @@ The [Unicode consortium](http://www.unicode.org/) has defined a set of [emoji](https://en.wikipedia.org/wiki/Emoji) with the corresponding unicode -sequences and a so called "CLDR short name". The current version a v11.0 and can be found at -[Full Emoji List, v11.0](https://unicode.org/emoji/charts/full-emoji-list.html) furthermore there is the list with -[Full Emoji Modifier Sequences, v11.0](http://www.unicode.org/emoji/charts/full-emoji-modifiers.html). +sequences. Doxygen supports the subset of emoji characters as used by GitHub (based on the list +https://api.github.com/emojis). +An emoji is created using the \ref cmdemoji "\\emoji" command. +For example `\emoji smile` (or `\emoji :smile:`) both produce \emoji smile. -A common way to denote an emoji is by means of `:<text>:`, -doxygen supports the emoji as mentioned in the above mentioned unicode emoji lists in this way -by means of the "CLDR short name" with the exception that in case a colon (`:`) is in the -"CLDR short name" this colon has to be removed. -Furthermore doxygen supports the list of emoji as used by github (based on the list -https://api.github.com/emojis). In this list also a reference is given to the unicode codes (just the -first and last) and these unicodes are mapped onto the official unicode sequences. -In case the "CLDR short name" and the "github name" are the same the reference from the -"CLDR short name" has precedence. - -Implementation +\section emojirep Representation For the different doxygen output types there is an output defined: - Unicode code sequence, the actual representation is depending on the possibilities of the fonts loaded: - HTML - - XML - DocBook - RTF, converted to UTF-16 representation. - Image @@ -45,117 +35,81 @@ For the different doxygen output types there is an output defined: - plain emoji text (i.e. `:<text>:`) - man - perl +- For XML there is a dedicated `<emoji>` tag with name and unicode attributes. -\anchor emojiimage Emoji image retrieval +\section emojiimage Emoji image retrieval -In the lists -[Full Emoji List, v11.0](https://unicode.org/emoji/charts/full-emoji-list.html) and -[Full Emoji Modifier Sequences, v11.0](http://www.unicode.org/emoji/charts/full-emoji-modifiers.html). -define images for the different vendors. These images can be retrieved by means of the following procedure (based on the code from Henning Pohl, https://github.com/henningpohl/latex-emoji): +In the list of images can be downloaded via the following Python script: \code{.py} -from bs4 import BeautifulSoup -import base64 +# script to download the emoticons from GitHub and to produce a table for +# inclusion in doxygen. Works with python 2.7+ and python 3.x +import json import os -import requests - -# http://www.unicode.org/emoji/charts/index.html -# http://www.unicode.org/emoji/charts/full-emoji-list.html -PAGE_URL = 'http://www.unicode.org/emoji/charts/full-emoji-list.html' -PAGE_URL_SKIN = 'http://www.unicode.org/emoji/charts/full-emoji-modifiers.html' -PAGE = 'full-emoji-list.html' -PAGE_SKIN = 'full-emoji-modifiers.html' - - -def get_header_names(header): - cols = header.find_all('th') - cols = [c.get_text() for c in cols] - cols = [c.replace('*','') for c in cols] - cols = [c.lower() for c in cols] - return cols - -def extract_image(column): - if 'miss' in column['class']: - return None - - if 'miss7' in column['class']: - return None - - data = column.img['src'] - data_start = data.find("base64,") - if data_start == -1: - return None - - data = base64.b64decode(data[data_start + len("base64,"):]) - return data - -def save_image(folder, imgSrc, filename): - if os.path.exists(folder) is False: - os.mkdir(folder) - - filename = os.path.join(folder, filename) - if os.path.exists(filename): - return - - img = extract_image(imgSrc) - if img is not None: - with open(filename, 'wb') as out: - out.write(img) +import argparse +import re +try: + import urllib.request as urlrequest +except ImportError: + import urllib as urlrequest + +unicode_re = re.compile(r'.*?/unicode/(.*?).png\?.*') + +def get_emojis(): + response = urlrequest.urlopen('https://api.github.com/emojis') + raw_data = response.read() + return json.loads(raw_data) + +def download_images(dir_name): + json_data = get_emojis() + num_items = len(json_data) + cur_item=0 + for image,url in sorted(json_data.items()): + image_name = image+'.png' + cur_item=cur_item+1 + if url.find('/unicode/')==-1 or not os.path.isfile(dir_name+'/'+image_name): + with open(dir_name+'/'+image_name,'wb') as file: + print('%s/%s: fetching %s' % (cur_item,num_items,image_name)) + file.write(urlrequest.urlopen(url).read()) + else: + print('%s/%s: skipping %s' % (cur_item,num_items,image_name)) + +def produce_table(): + json_data = get_emojis() + lines = [] + for image,url in sorted(json_data.items()): + match = unicode_re.match(url) + if match: + unicodes = match.group(1).split('-') + unicodes_html = ''.join(["&#x"+x+";" for x in unicodes]) + image_str = "\":"+image+":\"," + unicode_str = "\""+unicodes_html+"\"" + lines.append(' { %-42s %-38s }' % (image_str,unicode_str)) + out_str = ',\n'.join(lines) + print("{") + print(out_str) + print("};") + +if __name__=="__main__": + parser = argparse.ArgumentParser() + group = parser.add_mutually_exclusive_group() + group.add_argument('-d','--dir',help='directory to place images in') + group.add_argument('-t','--table',help='generate code fragment',action='store_true') + args = parser.parse_args() + if args.table: + produce_table() + else: + download_images(args.dir) -def scrape(page_url, page): - # Possibilities to obtain the basic data: - # - use request.get directly - soup = BeautifulSoup(requests.get(page_url).text, "html5lib") - # - download file (e.g. with wget http://www.unicode.org/emoji/charts/full-emoji-list.html) - # with open(page) as fp: - # soup = BeautifulSoup(fp,"html5lib") - - table = soup('table')[0] - - # for version 11.0 - # first row: smileys - # second row: face smileys - # third row: row with vendors, i.e. the one we want - header = table.find_all('tr')[2] - keys = get_header_names(header) - - for row in header.find_next_siblings('tr'): - fields = {k:c for k, c in zip(keys, row.find_all('td')) } - if 'code' not in fields: - continue - - codes = fields['code'].text.replace('U+', '').split(' ') - filename = "-".join(codes) + ".png" - - save_image('ios', fields['appl'], filename) - save_image('android', fields['goog'], filename) - save_image('twitter', fields['twtr'], filename) - save_image('windows', fields['wind'], filename) - save_image('one', fields['one'], filename) - save_image('facebook', fields['fb'], filename) - save_image('samsung', fields['sams'], filename) - #save_image('gmail', fields['gmail'], filename) - #save_image('softbank', fields['sb'], filename) - #save_image('docomo', fields['dcm'], filename) - #save_image('kddi', fields['kddi'], filename) - #save_image('bw', fields['chart'], filename) - -if __name__ == '__main__': - scrape(PAGE_URL, PAGE) - scrape(PAGE_URL_SKIN, PAGE_SKIN) \endcode -This results in a number of directories with the supported images. By means of the doxygen configuration parameter +When invoking it with the `-d image_dir` option the images will by downloaded in the `image_dir` directory. +By means of the doxygen configuration parameter \ref cfg_latex_emoji_directory "LATEX_EMOJI_DIRECTORY" the requested directory can be selected. -It is also possible to use images from other sources or mix images from different sources, the only requirement is that the filename represents the unicode of the emoji. e.g. if we have the emoji <tt>\:grinning face with big eyes\:</tt> (also known as <tt>\:smiley\:</tt>) the coresponding unicode is `U+1F603` and the name of the file is `1F603.png`.<br> -For a more complex emoji like <tt>\:keycap 1\:</tt> (also known as <tt>\:one\:</tt>) the coresponding unicode sequence is `U+0031U+FE0FU+20E3` and the name of the file is `0031-FE0F-20E3.png`. - - -Note that when you want to use a colon (`:`) in your text it might be necessary to escape the colon (see \ref cmdcolon "\\:") as it might conflict with a, possible, emoji sequence. - +For convenience a zip with the result of running the script can also be downloaded from +http://www.doxygen.nl/dl/github_emojis.zip For a overview of the supported emoji one can issue the comand:<br> -`doxygen.exe -f emoji <outputFileName>` - +`doxygen -f emoji <outputFileName>` \htmlonly Go to the <a href="langhowto.html">next</a> section or return to the diff --git a/doc/smile.png b/doc/smile.png Binary files differnew file mode 100644 index 0000000..a3abe00 --- /dev/null +++ b/doc/smile.png diff --git a/jquery/Makefile b/jquery/Makefile index 02cdd34..eac56bc 100644 --- a/jquery/Makefile +++ b/jquery/Makefile @@ -1,4 +1,4 @@ -JQUERY_VERSION = 1.7.1 +JQUERY_VERSION = 1.7.2 JQUERY_UI_VERSION = 1.8.18 HASHCHANGE_VERSION = 1.3 SCROLL_VERSION = 1.4.2 diff --git a/jquery/jquery-1.7.2.js b/jquery/jquery-1.7.2.js new file mode 100644 index 0000000..3774ff9 --- /dev/null +++ b/jquery/jquery-1.7.2.js @@ -0,0 +1,9404 @@ +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over <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.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = " <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, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" + + "<table " + style + "' cellpadding='0' cellspacing='0'>" + + "<tr><td></td></tr></table>"; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "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 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "<div style='width:5px;'></div>"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = "<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.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /<tbody/i, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style)/i, + rnocache = /<(?:script|object|embed|option|style)/i, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "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( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + 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 ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + null; + } + + + 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 (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + 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, function( i, elem ) { + if ( elem.src ) { + jQuery.ajax({ + type: "GET", + global: false, + 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 ); + } + }); + } + } + + 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 ] ); + } + } + } + + // 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; + + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; + } + + // Event data gets referenced instead of copied if the expando + // gets copied too + dest.removeAttribute( jQuery.expando ); + + // Clear flags for bubbling special change/submit events, they must + // be reattached when the newly cloned events are first activated + dest.removeAttribute( "_submit_attached" ); + dest.removeAttribute( "_change_attached" ); +} + +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 || jQuery.isXMLDoc(elem) || !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, script, j, + ret = []; + + 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; + } + + 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"), + safeChildNodes = safeFragment.childNodes, + remove; + + // 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; + + // Clear elements from DocumentFragment (safeFragment or otherwise) + // to avoid hoarding elements. Fixes #11356 + if ( div ) { + div.parentNode.removeChild( div ); + + // Guard against -1 index exceptions in FF3.6 + if ( safeChildNodes.length > 0 ) { + remove = safeChildNodes[ safeChildNodes.length - 1 ]; + + if ( remove && remove.parentNode ) { + remove.parentNode.removeChild( remove ); + } + } + } + } + } + + // 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++ ) { + script = ret[i]; + if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) { + scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script ); + + } else { + if ( script.nodeType === 1 ) { + var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType ); + + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); + } + fragment.appendChild( script ); + } + } + } + + 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 ]; + } + } + } +}); + + + + +var ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity=([^)]*)/, + // fixed for IE9, see #8346 + rupper = /([A-Z]|^ms)/g, + rnum = /^[\-+]?(?:\d*\.)?\d+$/i, + rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i, + rrelNum = /^([\-+])=([\-+.\de]+)/, + rmargin = /^margin/, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + + // order is important! + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + + curCSS, + + getComputedStyle, + currentStyle; + +jQuery.fn.css = function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); +}; + +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" ); + 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 = {}, + ret, name; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// DEPRECATED in 1.3, Use jQuery.css() instead +jQuery.curCSS = jQuery.css; + +if ( document.defaultView && document.defaultView.getComputedStyle ) { + getComputedStyle = function( elem, name ) { + var ret, defaultView, computedStyle, width, + style = elem.style; + + 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 ); + } + } + + // A tribute to the "awesome hack by Dean Edwards" + // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins + // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) { + width = style.width; + style.width = ret; + ret = computedStyle.width; + style.width = width; + } + + 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 ( rnumnonpx.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; + 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 getWidthOrHeight( elem, name, extra ) { + + // Start with offset property + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + i = name === "width" ? 1 : 0, + len = 4; + + if ( val > 0 ) { + if ( extra !== "border" ) { + for ( ; i < len; i += 2 ) { + if ( !extra ) { + val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0; + } + if ( extra === "margin" ) { + val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0; + } else { + val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } + } + + return val + "px"; + } + + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Add padding, border, margin + if ( extra ) { + for ( ; i < len; i += 2 ) { + val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0; + if ( extra !== "padding" ) { + val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + if ( extra === "margin" ) { + val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0; + } + } + } + + return val + "px"; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + if ( elem.offsetWidth !== 0 ) { + return getWidthOrHeight( elem, name, extra ); + } else { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } + } + }, + + set: function( elem, value ) { + return rnum.test( value ) ? + value + "px" : + 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 + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "margin-right" ); + } else { + return elem.style.marginRight; + } + }); + } + }; + } +}); + +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 ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; + + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; +}); + + + + +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; charset=UTF-8", + 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 prefilter, 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" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( 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 = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType ); + + 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; + } + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( _ ) { + } + + // 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.contains( elem.ownerDocument.documentElement, elem ) ) { + 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, hooks, replace, + parts, start, end, unit, + method; + + // will store per property easing and be used to determine when an animation is complete + opt.animatedProperties = {}; + + // first pass over propertys to expand / normalize + for ( p in prop ) { + name = jQuery.camelCase( p ); + if ( p !== name ) { + prop[ name ] = prop[ p ]; + delete prop[ p ]; + } + + if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) { + replace = hooks.expand( prop[ name ] ); + delete prop[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'p' from above because we have the correct "name" + for ( p in replace ) { + if ( ! ( p in prop ) ) { + prop[ p ] = replace[ p ]; + } + } + } + } + + for ( name in prop ) { + 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 ) { + return p; + }, + swing: function( p ) { + return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5; + } + }, + + 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 ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) { + if ( self.options.hide ) { + jQuery._data( self.elem, "fxshow" + self.prop, self.start ); + } else if ( self.options.show ) { + jQuery._data( self.elem, "fxshow" + self.prop, self.end ); + } + } + }; + + 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; + } + } + } +}); + +// Ensure props that can't be negative don't go there on undershoot easing +jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) { + // exclude marginTop, marginLeft, marginBottom and marginRight from this list + if ( prop.indexOf( "margin" ) ) { + 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( ( jQuery.support.boxModel ? "<!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 getOffset, + rtable = /^t(?:able|d|h)$/i, + rroot = /^(?:body|html)$/i; + +if ( "getBoundingClientRect" in document.documentElement ) { + getOffset = function( elem, doc, docElem, box ) { + try { + box = elem.getBoundingClientRect(); + } catch(e) {} + + // 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 { + getOffset = function( elem, doc, docElem ) { + var computedStyle, + offsetParent = elem.offsetParent, + prevOffsetParent = elem, + 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.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var elem = this[0], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return null; + } + + if ( elem === doc.body ) { + return jQuery.offset.bodyOffset( elem ); + } + + return getOffset( elem, doc, doc.documentElement ); +}; + +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( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); + + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + jQuery.support.boxModel && win.document.documentElement[ method ] || + win.document.body[ method ] : + elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +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: "height", Width: "width" }, function( name, type ) { + var clientProp = "client" + name, + scrollProp = "scroll" + name, + offsetProp = "offset" + name; + + // 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( value ) { + return jQuery.access( this, function( elem, type, value ) { + var doc, docElemProp, orig, ret; + + if ( jQuery.isWindow( elem ) ) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[ clientProp ]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[ clientProp ] || docElemProp; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + doc = elem.documentElement; + + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if ( doc[ clientProp ] >= doc[ scrollProp ] ) { + return doc[ clientProp ]; + } + + return Math.max( + elem.body[ scrollProp ], doc[ scrollProp ], + elem.body[ offsetProp ], doc[ offsetProp ] + ); + } + + // Get width or height on the element + if ( value === undefined ) { + orig = jQuery.css( elem, type ); + ret = parseFloat( orig ); + return jQuery.isNumeric( ret ) ? ret : orig; + } + + // Set the width or height on the element + jQuery( elem ).css( type, value ); + }, type, value, arguments.length, null ); + }; +}); + + + + +// 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/qtools/qlist.h b/qtools/qlist.h index e9b908d..eaaa674 100644 --- a/qtools/qlist.h +++ b/qtools/qlist.h @@ -97,6 +97,7 @@ public: // ownership void setAutoDelete( bool enable ) { QGList::setAutoDelete(enable); } + bool autoDelete() const { return QGList::autoDelete(); } private: // new to be reimplemented methods diff --git a/src/clangparser.cpp b/src/clangparser.cpp index 18dd404..c22d5c5 100644 --- a/src/clangparser.cpp +++ b/src/clangparser.cpp @@ -162,7 +162,7 @@ void ClangParser::start(const char *fileName,QStrList &filesInTranslationUnit) static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); static QStrList &includePath = Config_getList(INCLUDE_PATH); static QStrList clangOptions = Config_getList(CLANG_OPTIONS); - static QCString clangCompileDatabase = Config_getList(CLANG_COMPILATION_DATABASE_PATH); + static QCString clangCompileDatabase = Config_getString(CLANG_DATABASE_PATH); if (!clangAssistedParsing) return; //printf("ClangParser::start(%s)\n",fileName); p->fileName = fileName; @@ -178,91 +178,100 @@ void ClangParser::start(const char *fileName,QStrList &filesInTranslationUnit) clang::tooling::CompilationDatabase::loadFromDirectory(clangCompileDatabase.data(), error); int clang_option_len = 0; std::vector<clang::tooling::CompileCommand> command; - if (strcmp(clangCompileDatabase, "0") != 0) { - if (db == nullptr) { + if (qstrcmp(clangCompileDatabase, "0") != 0) + { + if (db == nullptr) + { // user specified a path, but DB file was not found err("%s using clang compilation database path of: \"%s\"\n", error.c_str(), clangCompileDatabase.data()); - } else { + } + else + { // check if the file we are parsing is in the DB command = db->getCompileCommands(fileName); - if (!command.empty() ) { + if (!command.empty() ) + { // it's possible to have multiple entries for the same file, so use the last entry clang_option_len = command[command.size()-1].CommandLine.size(); } } } char **argv = (char**)malloc(sizeof(char*)*(4+Doxygen::inputPaths.count()+includePath.count()+clangOptions.count()+clang_option_len)); - if (!command.empty() ) { + if (!command.empty() ) + { std::vector<std::string> options = command[command.size()-1].CommandLine; // copy each compiler option used from the database. Skip the first which is compiler exe. - for (auto option = options.begin()+1; option != options.end(); option++) { + for (auto option = options.begin()+1; option != options.end(); option++) + { argv[argc++] = qstrdup(option->c_str()); } // this extra addition to argv is accounted for as we are skipping the first entry in argv[argc++]=qstrdup("-w"); // finally, turn off warnings. - } else { - // add include paths for input files - for (di.toFirst();di.current();++di,++argc) - { - QCString inc = QCString("-I")+di.currentKey(); - argv[argc]=qstrdup(inc.data()); - //printf("argv[%d]=%s\n",argc,argv[argc]); - } - // add external include paths - for (uint i=0;i<includePath.count();i++) - { - QCString inc = QCString("-I")+includePath.at(i); - argv[argc++]=qstrdup(inc.data()); - } - // user specified options - for (uint i=0;i<clangOptions.count();i++) - { - argv[argc++]=qstrdup(clangOptions.at(i)); - } - // extra options - argv[argc++]=qstrdup("-ferror-limit=0"); - argv[argc++]=qstrdup("-x"); - - // Since we can be presented with a .h file that can contain C/C++ or - // Objective C code and we need to configure the parser before knowing this, - // we use the source file to detected the language. Detection will fail if you - // pass a bunch of .h files containing ObjC code, and no sources :-( - SrcLangExt lang = getLanguageFromFileName(fileName); - if (lang==SrcLangExt_ObjC || p->detectedLang!=ClangParser::Private::Detected_Cpp) - { - QCString fn = fileName; - if (p->detectedLang==ClangParser::Private::Detected_Cpp && - (fn.right(4).lower()==".cpp" || fn.right(4).lower()==".cxx" || - fn.right(3).lower()==".cc" || fn.right(2).lower()==".c")) - { // fall back to C/C++ once we see an extension that indicates this - p->detectedLang = ClangParser::Private::Detected_Cpp; + } + else + { + // add include paths for input files + for (di.toFirst();di.current();++di,++argc) + { + QCString inc = QCString("-I")+di.currentKey(); + argv[argc]=qstrdup(inc.data()); + //printf("argv[%d]=%s\n",argc,argv[argc]); } - else if (fn.right(3).lower()==".mm") // switch to Objective C++ + // add external include paths + for (uint i=0;i<includePath.count();i++) { - p->detectedLang = ClangParser::Private::Detected_ObjCpp; + QCString inc = QCString("-I")+includePath.at(i); + argv[argc++]=qstrdup(inc.data()); } - else if (fn.right(2).lower()==".m") // switch to Objective C + // user specified options + for (uint i=0;i<clangOptions.count();i++) { - p->detectedLang = ClangParser::Private::Detected_ObjC; + argv[argc++]=qstrdup(clangOptions.at(i)); + } + // extra options + argv[argc++]=qstrdup("-ferror-limit=0"); + argv[argc++]=qstrdup("-x"); + + // Since we can be presented with a .h file that can contain C/C++ or + // Objective C code and we need to configure the parser before knowing this, + // we use the source file to detected the language. Detection will fail if you + // pass a bunch of .h files containing ObjC code, and no sources :-( + SrcLangExt lang = getLanguageFromFileName(fileName); + if (lang==SrcLangExt_ObjC || p->detectedLang!=ClangParser::Private::Detected_Cpp) + { + QCString fn = fileName; + if (p->detectedLang==ClangParser::Private::Detected_Cpp && + (fn.right(4).lower()==".cpp" || fn.right(4).lower()==".cxx" || + fn.right(3).lower()==".cc" || fn.right(2).lower()==".c")) + { // fall back to C/C++ once we see an extension that indicates this + p->detectedLang = ClangParser::Private::Detected_Cpp; + } + else if (fn.right(3).lower()==".mm") // switch to Objective C++ + { + p->detectedLang = ClangParser::Private::Detected_ObjCpp; + } + else if (fn.right(2).lower()==".m") // switch to Objective C + { + p->detectedLang = ClangParser::Private::Detected_ObjC; + } + } + switch(p->detectedLang) + { + case ClangParser::Private::Detected_Cpp: + argv[argc++]=qstrdup("c++"); + break; + case ClangParser::Private::Detected_ObjC: + argv[argc++]=qstrdup("objective-c"); + break; + case ClangParser::Private::Detected_ObjCpp: + argv[argc++]=qstrdup("objective-c++"); + break; } - } - switch(p->detectedLang) - { - case ClangParser::Private::Detected_Cpp: - argv[argc++]=qstrdup("c++"); - break; - case ClangParser::Private::Detected_ObjC: - argv[argc++]=qstrdup("objective-c"); - break; - case ClangParser::Private::Detected_ObjCpp: - argv[argc++]=qstrdup("objective-c++"); - break; - } - // provide the input and and its dependencies as unsaved files so we can - // pass the filtered versions - argv[argc++]=qstrdup(fileName); + // provide the input and and its dependencies as unsaved files so we can + // pass the filtered versions + argv[argc++]=qstrdup(fileName); } static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES); //printf("source %s ----------\n%s\n-------------\n\n", diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp index acbbe44..55f8214 100644 --- a/src/cmdmapper.cpp +++ b/src/cmdmapper.cpp @@ -111,6 +111,7 @@ CommandMap cmdMap[] = { "\\", CMD_BSLASH }, { "@", CMD_AT }, { "<", CMD_LESS }, + { "=", CMD_EQUAL }, { ">", CMD_GREATER }, { "&", CMD_AMP }, { "$", CMD_DOLLAR }, @@ -120,7 +121,6 @@ CommandMap cmdMap[] = { ".", CMD_PUNT }, { "+", CMD_PLUS }, { "-", CMD_MINUS }, - { ":", CMD_COLON }, { "::", CMD_DCOLON }, { "\"", CMD_QUOTE }, { "_internalref", CMD_INTERNALREF }, @@ -148,6 +148,7 @@ CommandMap cmdMap[] = { "--", CMD_NDASH }, { "---", CMD_MDASH }, { "_setscope", CMD_SETSCOPE }, + { "emoji", CMD_EMOJI }, { 0, 0 }, }; diff --git a/src/cmdmapper.h b/src/cmdmapper.h index c1747ee..8c49b3f 100644 --- a/src/cmdmapper.h +++ b/src/cmdmapper.h @@ -137,7 +137,8 @@ enum CommandType CMD_INCLUDEDOC = 107, CMD_SNIPPETDOC = 108, CMD_SNIPWITHLINES= 109, - CMD_COLON = 110 + CMD_EMOJI = 110, + CMD_EQUAL = 111 }; enum HtmlTagType diff --git a/src/commentscan.l b/src/commentscan.l index 3af682c..235cd7c 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -1121,6 +1121,8 @@ RCSTAG "$"{ID}":"[^\n$]+"$" // the {B}* in the front was added for bug620924 QCString fullMatch = QCString(yytext); int idx = fullMatch.find('{'); + /* handle `\f{` and `@f{` as special cases */ + if ((idx > 1) && (yytext[idx-1] == 'f') && (yytext[idx-2] == '\\' || yytext[idx-2] =='@')) REJECT; int idxEnd = fullMatch.find("}",idx+1); QCString cmdName; QCStringList optList; @@ -1617,20 +1619,12 @@ RCSTAG "$"{ID}":"[^\n$]+"$" /* --------- handle arguments of the param command ------------ */ <ParamArg1>{ID}/{B}*"," { - if (yytext[0]=='_' && Config_getBool(MARKDOWN_SUPPORT)) - { - addOutput('\\'); - } addOutput(yytext); } <ParamArg1>"," { addOutput(" , "); } <ParamArg1>{ID} { - if (yytext[0]=='_' && Config_getBool(MARKDOWN_SUPPORT)) - { - addOutput('\\'); - } addOutput(yytext); BEGIN( Comment ); } @@ -3005,7 +2999,9 @@ static bool handleToc(const QCString &, const QCStringList &optList) } if (current->localToc.nothingEnabled()) { - current->localToc.enableHtml(5); // for backward compatibility + // for backward compatibility + current->localToc.enableHtml(5); + current->localToc.enableXml(5); } } return FALSE; @@ -3102,12 +3098,19 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, if (comment.isEmpty()) return FALSE; // avoid empty strings if (Doxygen::markdownSupport) { - inputString = processMarkdown(fileName,lineNr,NULL,comment); - QString qq(inputString); - while (qq.startsWith(" ")) qq = qq.mid(1); - while (qq.startsWith("\n")) qq = qq.mid(1); - if (qq.startsWith("<br>")) qq = qq.mid(4); - inputString = QCString(qq.data()); + inputString = processMarkdown(fileName,lineNr,NULL,comment); + const char *p = inputString.data(); + if (p) + { + while (*p==' ') p++; // skip over spaces + while (*p=='\n') p++; // skip over newlines + if (qstrncmp(p,"<br>",4)==0) p+=4; // skip over <br> + } + if (p>inputString.data()) + { + // strip part of the input + inputString = inputString.mid(p-inputString.data()); + } } else { diff --git a/src/config.xml b/src/config.xml index db0f557..fdc562d 100644 --- a/src/config.xml +++ b/src/config.xml @@ -1692,7 +1692,7 @@ to disable this feature. ]]> </docs> </option> - <option type='string' id='CLANG_COMPILATION_DATABASE_PATH' setting='USE_LIBCLANG' defval='0'> + <option type='string' id='CLANG_DATABASE_PATH' setting='USE_LIBCLANG' defval=''> <docs> <![CDATA[ If clang assisted parsing is enabled you can provide the clang parser with the @@ -2945,6 +2945,15 @@ or ]]> </docs> </option> + <option type='bool' id='XML_NS_MEMB_FILE_SCOPE' defval='0' depends='GENERATE_XML'> + <docs> +<![CDATA[ + If the \c XML_NS_MEMB_FILE_SCOPE tag is set to \c YES, doxygen + will include namespace members in file scope as well, matching the HTML + output. +]]> + </docs> + </option> </group> <group name='Docbook' docs='Configuration options related to the DOCBOOK output'> <option type='bool' id='GENERATE_DOCBOOK' defval='0'> diff --git a/src/configimpl.l b/src/configimpl.l index b533910..644250f 100644 --- a/src/configimpl.l +++ b/src/configimpl.l @@ -712,7 +712,7 @@ static void readIncludeFile(const char *incName) if (option==0) // oops not known { config_warn("ignoring unsupported tag `%s' at line %d, file %s\n", - yytext,yyLineNr,yyFileName.data()); + cmd.data(),yyLineNr,yyFileName.data()); BEGIN(SkipInvalid); } else // known tag @@ -788,7 +788,7 @@ static void readIncludeFile(const char *incName) if (option==0) // oops not known { config_warn("ignoring unsupported tag `%s' at line %d, file %s\n", - yytext,yyLineNr,yyFileName.data()); + cmd.data(),yyLineNr,yyFileName.data()); BEGIN(SkipInvalid); } else // known tag diff --git a/src/context.cpp b/src/context.cpp index 6b5d2ac..8a3a784 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -7807,7 +7807,7 @@ class NavPathElemContext::Private { text = ((const GroupDef*)m_def)->groupTitle(); } - else if (type==Definition::TypePage && !(((const PageDef*)m_def)->title().isEmpty())) + else if (type==Definition::TypePage && (((const PageDef*)m_def)->hasTitle())) { text = ((const PageDef*)m_def)->title(); } diff --git a/src/defargs.l b/src/defargs.l index 52052fa..7e9ccca 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -104,17 +104,36 @@ static int yyread(char *buf,int max_size) } /* bug_520975 */ -static bool checkSpecialType(QCString &typ, QCString &nam) +static bool nameIsActuallyPartOfType(QCString &name) { - if (nam == "unsigned" || nam == "signed" || - nam == "volatile" || nam == "const") return TRUE; - QCStringList qsl=QCStringList::split(' ',typ); - for (uint j=0;j<qsl.count();j++) + static bool first=TRUE; + static QDict<void> keywords(17); + if (first) // fill keyword dict first time { - if (!(qsl[j] == "unsigned" || qsl[j] == "signed" || - qsl[j] == "volatile" || qsl[j] == "const")) return FALSE; + #define DUMMY_ADDR (void*)0x8 + keywords.insert("unsigned", DUMMY_ADDR); // foo(... unsigned) + keywords.insert("signed", DUMMY_ADDR); // foo(... signed) + keywords.insert("bool", DUMMY_ADDR); // foo(... bool) + keywords.insert("char", DUMMY_ADDR); // foo(... char) + keywords.insert("char8_t", DUMMY_ADDR); // foo(... char8_t) + keywords.insert("char16_t", DUMMY_ADDR); // foo(... char16_t) + keywords.insert("char32_t", DUMMY_ADDR); // foo(... char32_t) + keywords.insert("int", DUMMY_ADDR); // foo(... int) + keywords.insert("short", DUMMY_ADDR); // foo(... short) + keywords.insert("long", DUMMY_ADDR); // foo(... long) + keywords.insert("float", DUMMY_ADDR); // foo(... float) + keywords.insert("double", DUMMY_ADDR); // foo(... double) + keywords.insert("int8_t", DUMMY_ADDR); // foo(... int8_t) + keywords.insert("uint8_t", DUMMY_ADDR); // foo(... uint8_t) + keywords.insert("int16_t", DUMMY_ADDR); // foo(... int16_t) + keywords.insert("uint16_t", DUMMY_ADDR); // foo(... uint16_t) + keywords.insert("int32_t", DUMMY_ADDR); // foo(... int32_t) + keywords.insert("uint32_t", DUMMY_ADDR); // foo(... uint32_t) + keywords.insert("const", DUMMY_ADDR); // foo(... const) + keywords.insert("volatile", DUMMY_ADDR); // foo(... volatile) + first=FALSE; } - return TRUE; + return name.length()>0 && keywords.find(name)!=0; } %} @@ -398,9 +417,9 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" a->type.mid(sv)=="union" || a->type.mid(sv)=="class" || a->type.mid(sv)=="typename" || - checkSpecialType(a->type, a->name) + nameIsActuallyPartOfType(a->name) ) - { + { a->type = a->type + " " + a->name; a->name.resize(0); } diff --git a/src/definition.cpp b/src/definition.cpp index 936565d..62a4e69 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -271,6 +271,7 @@ void Definition::removeFromMap(Definition *d) if (dl->isEmpty()) { Doxygen::symbolMap->take(symbolName); + delete dl; } } else // symbolName unique @@ -1693,7 +1694,7 @@ QCString Definition::pathFragment() const { result+=((const GroupDef*)this)->groupTitle(); } - else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty()) + else if (definitionType()==Definition::TypePage && ((const PageDef*)this)->hasTitle()) { result+=((const PageDef*)this)->title(); } @@ -1736,10 +1737,10 @@ QCString Definition::navigationPathAsString() const result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+ convertToHtml(((const GroupDef*)this)->groupTitle())+"</a>"; } - else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty()) + else if (definitionType()==Definition::TypePage && ((const PageDef*)this)->hasTitle()) { result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+ - convertToHtml(((const PageDef*)this)->title())+"</a>"; + convertToHtml(((const PageDef*)this)->title())+"</a>"; } else if (definitionType()==Definition::TypeClass) { @@ -1837,6 +1838,7 @@ void Definition::writeToc(OutputList &ol, const LocalToc &localToc) level = nextLevel; } } + if (level > maxLevel) level = maxLevel; while (level>1 && level <= maxLevel) { if (inLi[level]) ol.writeString("</li>\n"); @@ -1896,6 +1898,14 @@ void Definition::writeToc(OutputList &ol, const LocalToc &localToc) level = nextLevel; } } + if (level > maxLevel) level = maxLevel; + while (level>1 && level <= maxLevel) + { + inLi[level]=FALSE; + ol.writeString("</tocdiv>\n"); + level--; + } + inLi[level]=FALSE; ol.writeString(" </toc>\n"); ol.popGeneratorState(); } diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp index 97c602d..011ef12 100644 --- a/src/docbookgen.cpp +++ b/src/docbookgen.cpp @@ -635,7 +635,7 @@ DB_GEN_C if (!pd->getGroupDef() && !pd->isReference() && pd->name() == stripPath(name)) { t << "<chapter>\n"; - if (!pd->title().isEmpty()) + if (pd->hasTitle()) { t << " <title>" << convertToDocBook(pd->title()) << "</title>" << endl; } diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp index f7fb10f..99df99c 100644 --- a/src/docbookvisitor.cpp +++ b/src/docbookvisitor.cpp @@ -182,14 +182,14 @@ void DocbookDocVisitor::visit(DocEmoji *s) { DB_VIS_C if (m_hide) return; - const char *res = EmojiEntityMapper::instance()->docbook(s->emoji()); + const char *res = EmojiEntityMapper::instance()->unicode(s->index()); if (res) { m_t << res; } else { - err("DocBook: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji())); + m_t << s->name(); } } diff --git a/src/docparser.cpp b/src/docparser.cpp index ec018b9..c91dcde 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -431,7 +431,7 @@ static void checkArgumentName(const QCString &name,bool isParam) } if (!found && isParam) { - //printf("member type=%d\n",memberDef->memberType()); + //printf("member type=%d\n",g_memberDef->memberType()); QCString scope=g_memberDef->getScopeString(); if (!scope.isEmpty()) scope+="::"; else scope=""; QCString inheritedFrom = ""; @@ -509,7 +509,7 @@ static void checkUnOrMultipleDocumentedParams() "argument '" + aName + "' from the argument list of " + QCString(g_memberDef->qualifiedName()) + - " has muliple @param documentation sections"); + " has multiple @param documentation sections"); } } if (found) @@ -886,10 +886,6 @@ inline void errorHandleDefaultToken(DocNode *parent,int tok, warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found found as part of a %s", qPrint(g_token->name), txt); break; - case TK_EMOJI: - warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found while handling command %s", - qPrint(g_token->name),txt); - break; default: children.append(new DocWord(parent,g_token->name)); warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s found as part of a %s", @@ -1379,7 +1375,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children handleWord) { DBG(("token %s at %d",tokToString(tok),doctokenizerYYlineno)); - if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_EMOJI || tok==TK_URL || + if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_URL || tok==TK_COMMAND_AT || tok==TK_COMMAND_BS || tok==TK_HTMLTAG ) { @@ -1416,9 +1412,6 @@ reparsetoken: case CMD_HASH: children.append(new DocSymbol(parent,DocSymbol::Sym_Hash)); break; - case CMD_COLON: - children.append(new DocSymbol(parent,DocSymbol::Sym_Colon)); - break; case CMD_DCOLON: children.append(new DocSymbol(parent,DocSymbol::Sym_DoubleColon)); break; @@ -1446,6 +1439,9 @@ reparsetoken: case CMD_MINUS: children.append(new DocSymbol(parent,DocSymbol::Sym_Minus)); break; + case CMD_EQUAL: + children.append(new DocSymbol(parent,DocSymbol::Sym_Equal)); + break; case CMD_EMPHASIS: { children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Italic,TRUE)); @@ -1710,19 +1706,6 @@ reparsetoken: } } break; - case TK_EMOJI: - { - int s = DocEmoji::decodeEmoji(tokenName); - if (s!=0) - { - children.append(new DocEmoji(parent,s)); - } - else - { - return FALSE; - } - } - break; case TK_WHITESPACE: case TK_NEWPARA: handlepara: @@ -1801,10 +1784,25 @@ DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName) return HtmlEntityMapper::instance()->name2sym(symName); } -int DocEmoji::decodeEmoji(const QCString &symName) +//--------------------------------------------------------------------------- + +DocEmoji::DocEmoji(DocNode *parent,const QCString &symName) : + m_symName(symName), m_index(-1) { - DBG(("decodeSymbol(%s)\n",qPrint(symName))); - return EmojiEntityMapper::instance()->name2sym(symName); + m_parent = parent; + QCString locSymName = symName; + int len=locSymName.length(); + if (len>0) + { + if (locSymName.at(len-1)!=':') locSymName.append(":"); + if (locSymName.at(0)!=':') locSymName.prepend(":"); + } + m_symName = locSymName; + m_index = EmojiEntityMapper::instance()->symbol2index(m_symName); + if (m_index==-1) + { + warn_doc_error(g_fileName,doctokenizerYYlineno,"Found unsupported emoji symbol '%s'\n",qPrint(m_symName)); + } } //--------------------------------------------------------------------------- @@ -2776,10 +2774,6 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink) warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found as part of a \\link", qPrint(g_token->name)); break; - case TK_EMOJI: - warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found", - qPrint(g_token->name)); - break; case TK_HTMLTAG: if (g_token->name!="see" || !isXmlLink) { @@ -2987,6 +2981,11 @@ DocImage::DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString m_parent = parent; } +bool DocImage::isSVG() const +{ + return m_url.isEmpty() ? m_name.right(4)==".svg" : m_url.right(4)==".svg"; +} + void DocImage::parse() { defaultHandleTitleAndSize(CMD_IMAGE,this,m_children,m_width,m_height); @@ -3267,19 +3266,6 @@ int DocIndexEntry::parse() } } break; - case TK_EMOJI: - { - int s = DocEmoji::decodeEmoji(g_token->name); - if (s != 0) - { - m_entry+=g_token->name; - } - else - { - warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected emoji found as argument of \\addindex"); - } - } - break; case TK_COMMAND_AT: // fall through case TK_COMMAND_BS: @@ -3292,7 +3278,6 @@ int DocIndexEntry::parse() case CMD_AMP: m_entry+='&'; break; case CMD_DOLLAR: m_entry+='$'; break; case CMD_HASH: m_entry+='#'; break; - case CMD_COLON: m_entry+=":"; break; case CMD_DCOLON: m_entry+="::"; break; case CMD_PERCENT: m_entry+='%'; break; case CMD_NDASH: m_entry+="--"; break; @@ -3301,6 +3286,7 @@ int DocIndexEntry::parse() case CMD_PUNT: m_entry+='.'; break; case CMD_PLUS: m_entry+='+'; break; case CMD_MINUS: m_entry+='-'; break; + case CMD_EQUAL: m_entry+='='; break; default: warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command %s found as argument of \\addindex", qPrint(g_token->name)); @@ -3981,10 +3967,6 @@ int DocHtmlDescTitle::parse() warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol \\%s found as part of a <dt> tag", qPrint(g_token->name)); break; - case TK_EMOJI: - warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found", - qPrint(g_token->name)); - break; case TK_HTMLTAG: { int tagId=Mappers::htmlTagMapper->map(g_token->name); @@ -4984,6 +4966,35 @@ void DocPara::handleCite() doctokenizerYYsetStatePara(); } +void DocPara::handleEmoji() +{ + // get the argument of the emoji command. + int tok=doctokenizerYYlex(); + if (tok!=TK_WHITESPACE) + { + warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command", + qPrint("emoji")); + return; + } + doctokenizerYYsetStateEmoji(); + tok=doctokenizerYYlex(); + if (tok==0) + { + warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the " + "argument of command %s\n", qPrint("emoji")); + return; + } + else if (tok!=TK_WORD) + { + warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s", + tokToString(tok),qPrint("emoji")); + return; + } + DocEmoji *emoji = new DocEmoji(this,g_token->name); + m_children.append(emoji); + doctokenizerYYsetStatePara(); +} + int DocPara::handleXRefItem() { int retval=doctokenizerYYlex(); @@ -5488,9 +5499,6 @@ int DocPara::handleCommand(const QCString &cmdName, const int tok) case CMD_PIPE: m_children.append(new DocSymbol(this,DocSymbol::Sym_Pipe)); break; - case CMD_COLON: - m_children.append(new DocSymbol(this,DocSymbol::Sym_Colon)); - break; case CMD_DCOLON: m_children.append(new DocSymbol(this,DocSymbol::Sym_DoubleColon)); break; @@ -5518,6 +5526,9 @@ int DocPara::handleCommand(const QCString &cmdName, const int tok) case CMD_MINUS: m_children.append(new DocSymbol(this,DocSymbol::Sym_Minus)); break; + case CMD_EQUAL: + m_children.append(new DocSymbol(this,DocSymbol::Sym_Equal)); + break; case CMD_SA: g_inSeeBlock=TRUE; retval = handleSimpleSection(DocSimpleSect::See); @@ -5871,6 +5882,9 @@ int DocPara::handleCommand(const QCString &cmdName, const int tok) case CMD_CITE: handleCite(); break; + case CMD_EMOJI: + handleEmoji(); + break; case CMD_REF: // fall through case CMD_SUBPAGE: handleRef(cmdName); @@ -6548,7 +6562,7 @@ int DocPara::parse() { reparsetoken: DBG(("token %s at %d",tokToString(tok),doctokenizerYYlineno)); - if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_EMOJI || tok==TK_URL || + if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_URL || tok==TK_COMMAND_AT || tok == TK_COMMAND_BS || tok==TK_HTMLTAG ) { @@ -6806,20 +6820,6 @@ reparsetoken: } break; } - case TK_EMOJI: - { - int s = DocEmoji::decodeEmoji(g_token->name); - if (s!=0) - { - m_children.append(new DocEmoji(this,s)); - } - else - { - warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found", - qPrint(g_token->name)); - } - break; - } case TK_NEWPARA: retval=TK_NEWPARA; goto endparagraph; @@ -7034,20 +7034,6 @@ void DocText::parse() } } break; - case TK_EMOJI: - { - int s = DocSymbol::decodeSymbol(g_token->name); - if (s!=0) - { - m_children.append(new DocEmoji(this,s)); - } - else - { - warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found", - qPrint(g_token->name)); - } - } - break; case TK_COMMAND_AT: // fall through case TK_COMMAND_BS: @@ -7074,9 +7060,6 @@ void DocText::parse() case CMD_HASH: m_children.append(new DocSymbol(this,DocSymbol::Sym_Hash)); break; - case CMD_COLON: - m_children.append(new DocSymbol(this,DocSymbol::Sym_Colon)); - break; case CMD_DCOLON: m_children.append(new DocSymbol(this,DocSymbol::Sym_DoubleColon)); break; @@ -7104,6 +7087,9 @@ void DocText::parse() case CMD_MINUS: m_children.append(new DocSymbol(this,DocSymbol::Sym_Minus)); break; + case CMD_EQUAL: + m_children.append(new DocSymbol(this,DocSymbol::Sym_Equal)); + break; default: warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command `%s' found", qPrint(g_token->name)); @@ -7605,7 +7591,7 @@ DocRoot *validatingParseDoc(const char *fileName,int startLine, case Definition::TypePage: { PageDef *pd = (PageDef *)ctx; - if (!pd->title().isEmpty()) + if (pd->hasTitle()) { name = theTranslator->trPage(TRUE,TRUE)+" "+pd->title(); } diff --git a/src/docparser.h b/src/docparser.h index c010af3..5d2cc89 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -455,7 +455,7 @@ class DocSymbol : public DocNode /* doxygen commands mapped */ Sym_BSlash, Sym_At, Sym_Less, Sym_Greater, Sym_Amp, Sym_Dollar, Sym_Hash, Sym_DoubleColon, Sym_Percent, Sym_Pipe, - Sym_Quot, Sym_Minus, Sym_Plus, Sym_Dot, Sym_Colon + Sym_Quot, Sym_Minus, Sym_Plus, Sym_Dot, Sym_Colon, Sym_Equal }; enum PerlType { Perl_unknown = 0, Perl_string, Perl_char, Perl_symbol, Perl_umlaut, Perl_acute, Perl_grave, Perl_circ, Perl_slash, Perl_tilde, @@ -480,15 +480,15 @@ class DocSymbol : public DocNode class DocEmoji : public DocNode { public: - DocEmoji(DocNode *parent,int s) : - m_symbol(s) { m_parent = parent; } - int emoji() const { return m_symbol; } + DocEmoji(DocNode *parent,const QCString &symName); + QCString name() const { return m_symName; } + int index() const { return m_index; } Kind kind() const { return Kind_Emoji; } void accept(DocVisitor *v) { v->visit(this); } - static int decodeEmoji(const QCString &symName); private: - int m_symbol; + QCString m_symName; + int m_index; }; /** Node representing some amount of white space */ @@ -498,7 +498,7 @@ class DocWhiteSpace : public DocNode DocWhiteSpace(DocNode *parent,const QCString &chars) : m_chars(chars) { m_parent = parent; } Kind kind() const { return Kind_WhiteSpace; } - QCString chars() const { return m_chars; } + QCString chars() const { return m_chars; } void accept(DocVisitor *v) { v->visit(this); } private: QCString m_chars; @@ -768,6 +768,7 @@ class DocImage : public CompAccept<DocImage> QCString relPath() const { return m_relPath; } QCString url() const { return m_url; } bool isInlineImage() const { return m_inlineImage; } + bool isSVG() const; const HtmlAttribList &attribs() const { return m_attribs; } void parse(); @@ -1189,6 +1190,7 @@ class DocPara : public CompAccept<DocPara> void handleInclude(const QCString &cmdName,DocInclude::Type t); void handleLink(const QCString &cmdName,bool isJavaLink); void handleCite(); + void handleEmoji(); void handleRef(const QCString &cmdName); void handleSection(const QCString &cmdName); void handleInheritDoc(); diff --git a/src/doctokenizer.h b/src/doctokenizer.h index d72a674..8b8ca97 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -41,7 +41,6 @@ enum Tokens TK_RCSTAG = 10, TK_URL = 11, TK_COMMAND_BS = 12, //! Command starting with `\` - TK_EMOJI = 13, RetVal_OK = 0x10000, RetVal_SimpleSec = 0x10001, @@ -167,5 +166,6 @@ void doctokenizerYYsetStateSetScope(); void doctokenizerYYsetStatePlantUMLOpt(); void doctokenizerYYsetStateOptions(); void doctokenizerYYsetStateBlock(); +void doctokenizerYYsetStateEmoji(); #endif diff --git a/src/doctokenizer.l b/src/doctokenizer.l index deac51c..90f9846 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -126,7 +126,6 @@ const char *tokToString(int token) case TK_RCSTAG: return "TK_RCSTAG"; case TK_URL: return "TK_URL"; case TK_COMMAND_BS: return "TK_COMMAND_BS"; - case TK_EMOJI: return "TK_EMOJI"; } return "ERROR"; } @@ -343,7 +342,6 @@ CMD ("\\"|"@") WS [ \t\r\n] NONWS [^ \t\r\n] BLANK [ \t\r] -EMOJI (":"[a-z_A-Z0-9\x80-\xFF"'+()&\*\.!,#-]":"|":"[a-z_A-Z0-9\x80-\xFF"'+()&\*\.!,#-][a-z_A-Z0-9\x80-\xFF "'+()&\*\.!,#-]*[a-z_A-Z0-9\x80-\xFF"'+()&\*\.!,#-]":") ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]* PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+ @@ -362,12 +360,12 @@ URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=] URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)+ FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+@&#] FILEECHAR [a-z_A-Z0-9\-\+@&#] -HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)* +HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)+ FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK} LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)? VERBATIM "verbatim"{BLANK}* SPCMD1 {CMD}([a-z_A-Z][a-z_A-Z0-9]*|{VERBATIM}|"--"|"---") -SPCMD2 {CMD}[\\@<>&$#%~".+|-] +SPCMD2 {CMD}[\\@<>&$#%~".+=|-] SPCMD3 {CMD}form#[0-9]+ SPCMD4 {CMD}"::" SPCMD5 {CMD}":" @@ -462,6 +460,7 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} %x St_SetScopeEnd %x St_Options %x St_Block +%x St_Emoji %x St_Sections %s St_SecLabel1 @@ -689,17 +688,6 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} g_token->name = yytext; return TK_SYMBOL; } -<St_Para,St_Text>{EMOJI} { /* emoji symbol */ - if (g_fileName == CiteConsts::fileName) - { - REJECT; - } - else - { - g_token->name = yytext; - return TK_EMOJI; - } - } /********* patterns for linkable words ******************/ @@ -946,17 +934,6 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} g_token->name = yytext; return TK_SYMBOL; } -<St_TitleN>{EMOJI} { /* emoji */ - if (g_fileName == CiteConsts::fileName) - { - REJECT; - } - else - { - g_token->name = yytext; - return TK_EMOJI; - } - } <St_TitleN>{HTMLTAG} { } <St_TitleN>{SPCMD1} | @@ -993,17 +970,6 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} g_token->name = yytext; return TK_SYMBOL; } -<St_TitleQ>{EMOJI} { /* emoji */ - if (g_fileName == CiteConsts::fileName) - { - REJECT; - } - else - { - g_token->name = yytext; - return TK_EMOJI; - } - } <St_TitleQ>{SPCMD1} | <St_TitleQ>{SPCMD2} { /* special command */ g_token->name = yytext+1; @@ -1042,6 +1008,7 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} return 0; } <St_TitleV,St_TitleA>\n { + unput(*yytext); return 0; } @@ -1143,17 +1110,6 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} g_token->name = yytext; return TK_SYMBOL; } -<St_Ref2>{EMOJI} { /* emoji */ - if (g_fileName == CiteConsts::fileName) - { - REJECT; - } - else - { - g_token->name = yytext; - return TK_EMOJI; - } - } <St_Ref2>{SPCMD1} | <St_Ref2>{SPCMD2} { /* special command */ g_token->name = yytext+1; @@ -1232,6 +1188,13 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} <St_Block>"]" { return TK_WORD; } +<St_Emoji>[:0-9_a-z+-]+ { + g_token->name=yytext; + return TK_WORD; + } +<St_Emoji>. { + return 0; + } <St_File>{FILEMASK} { g_token->name = yytext; return TK_WORD; @@ -1606,6 +1569,12 @@ void doctokenizerYYsetStateBlock() BEGIN(St_Block); } +void doctokenizerYYsetStateEmoji() +{ + g_token->name=""; + BEGIN(St_Emoji); +} + void doctokenizerYYcleanup() { yy_delete_buffer( YY_CURRENT_BUFFER ); diff --git a/src/dot.cpp b/src/dot.cpp index 0944a02..07a1a43 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -377,7 +377,6 @@ static bool convertMapFile(FTextStream &t,const char *mapName, const QCString &context=QCString()) { QFile f(mapName); - static QRegExp re("id=\"node[0-9]*\""); if (!f.open(IO_ReadOnly)) { err("problems opening map file %s for inclusion in the docs!\n" @@ -396,7 +395,17 @@ static bool convertMapFile(FTextStream &t,const char *mapName, if (buf.left(5)=="<area") { - t << replaceRef(buf,relPath,urlOnly,context).replace(re,""); + QCString replBuf = replaceRef(buf,relPath,urlOnly,context); + // strip id="..." from replBuf since the id's are not needed and not unique. + int indexS = replBuf.find("id=\""), indexE; + if (indexS>0 && (indexE=replBuf.find('"',indexS+4))!=-1) + { + t << replBuf.left(indexS-1) << replBuf.right(replBuf.length() - indexE - 1); + } + else + { + t << replBuf; + } } } } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index e8df763..2d55ae6 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -9937,7 +9937,6 @@ void readFormulaRepository(QCString dir, bool cmp) else { f=new Formula(formText); - Doxygen::formulaList->setAutoDelete(TRUE); Doxygen::formulaList->append(f); Doxygen::formulaDict->insert(formText,f); Doxygen::formulaNameDict->insert(formName,f); @@ -10231,6 +10230,7 @@ void initDoxygen() Doxygen::genericsDict = new GenericsSDict; Doxygen::indexList = new IndexList; Doxygen::formulaList = new FormulaList; + Doxygen::formulaList->setAutoDelete(TRUE); Doxygen::formulaDict = new FormulaDict(1009); Doxygen::formulaNameDict = new FormulaDict(1009); Doxygen::sectionDict = new SectionDict(257); @@ -10729,8 +10729,11 @@ void adjustConfiguration() Doxygen::imageNameDict = new FileNameDict(257); Doxygen::imageNameDict->setAutoDelete(TRUE); Doxygen::dotFileNameDict = new FileNameDict(257); + Doxygen::dotFileNameDict->setAutoDelete(TRUE); Doxygen::mscFileNameDict = new FileNameDict(257); + Doxygen::mscFileNameDict->setAutoDelete(TRUE); Doxygen::diaFileNameDict = new FileNameDict(257); + Doxygen::diaFileNameDict->setAutoDelete(TRUE); QCString outputLanguage=Config_getEnum(OUTPUT_LANGUAGE); if (!setTranslator(outputLanguage)) diff --git a/src/emoji.cpp b/src/emoji.cpp index f10ebc5..c332083 100644 --- a/src/emoji.cpp +++ b/src/emoji.cpp @@ -18,2925 +18,1521 @@ #include "ftextstream.h" #include "util.h" -/* to generate the content of this table see the documentation at the end of this file */ static struct emojiEntityInfo { - const char *githubName; - const char *unicodeName; - const char *code; + const char *name; + const char *unicode; } g_emojiEntities[] = +/* generated using the download_github_emojis.py script */ { - {":+1:", ":thumbs up:", "👍"}, - {":-1:", ":thumbs down:", "👎"}, - {":100:", ":hundred points:", "💯"}, - {":1234:", ":input numbers:", "🔢"}, - {":1st_place_medal:", ":1st place medal:", "🥇"}, - {":2nd_place_medal:", ":2nd place medal:", "🥈"}, - {":3rd_place_medal:", ":3rd place medal:", "🥉"}, - {":8ball:", ":pool 8 ball:", "🎱"}, - {":a:", ":a button (blood type):", "🅰"}, - {":ab:", ":ab button (blood type):", "🆎"}, - {":abc:", ":input latin letters:", "🔤"}, - {":abcd:", ":input latin lowercase:", "🔡"}, - {":accept:", ":japanese \"acceptable\" button:", "🉑"}, - {":aerial_tramway:", ":aerial tramway:", "🚡"}, - {":afghanistan:", ":flag afghanistan:", "🇦🇫"}, - {":airplane:", ":airplane:", "✈"}, - {":aland_islands:", ":flag Ã…land islands:", "🇦🇽"}, - {":alarm_clock:", ":alarm clock:", "⏰"}, - {":albania:", ":flag albania:", "🇦🇱"}, - {":alembic:", ":alembic:", "⚗"}, - {":algeria:", ":flag algeria:", "🇩🇿"}, - {":alien:", ":alien:", "👽"}, - {":ambulance:", ":ambulance:", "🚑"}, - {":american_samoa:", ":flag american samoa:", "🇦🇸"}, - {":amphora:", ":amphora:", "🏺"}, - {":anchor:", ":anchor:", "⚓"}, - {":andorra:", ":flag andorra:", "🇦🇩"}, - {":angel:", ":baby angel:", "👼"}, - {":anger:", ":anger symbol:", "💢"}, - {":angola:", ":flag angola:", "🇦🇴"}, - {":angry:", ":angry face:", "😠"}, - {":anguilla:", ":flag anguilla:", "🇦🇮"}, - {":anguished:", ":anguished face:", "😧"}, - {":ant:", ":ant:", "🐜"}, - {":antarctica:", ":flag antarctica:", "🇦🇶"}, - {":antigua_barbuda:", ":flag antigua & barbuda:", "🇦🇬"}, - {":apple:", ":red apple:", "🍎"}, - {":aquarius:", ":aquarius:", "♒"}, - {":argentina:", ":flag argentina:", "🇦🇷"}, - {":aries:", ":aries:", "♈"}, - {":armenia:", ":flag armenia:", "🇦🇲"}, - {":arrow_backward:", ":reverse button:", "◀"}, - {":arrow_double_down:", ":fast down button:", "⏬"}, - {":arrow_double_up:", ":fast up button:", "⏫"}, - {":arrow_down:", ":down arrow:", "⬇"}, - {":arrow_down_small:", ":downwards button:", "🔽"}, - {":arrow_forward:", ":play button:", "▶"}, - {":arrow_heading_down:", ":right arrow curving down:", "⤵"}, - {":arrow_heading_up:", ":right arrow curving up:", "⤴"}, - {":arrow_left:", ":left arrow:", "⬅"}, - {":arrow_lower_left:", ":down-left arrow:", "↙"}, - {":arrow_lower_right:", ":down-right arrow:", "↘"}, - {":arrow_right:", ":right arrow:", "➡"}, - {":arrow_right_hook:", ":left arrow curving right:", "↪"}, - {":arrow_up:", ":up arrow:", "⬆"}, - {":arrow_up_down:", ":up-down arrow:", "↕"}, - {":arrow_up_small:", ":upwards button:", "🔼"}, - {":arrow_upper_left:", ":up-left arrow:", "↖"}, - {":arrow_upper_right:", ":up-right arrow:", "↗"}, - {":arrows_clockwise:", ":clockwise vertical arrows:", "🔃"}, - {":arrows_counterclockwise:", ":counterclockwise arrows button:", "🔄"}, - {":art:", ":artist palette:", "🎨"}, - {":articulated_lorry:", ":articulated lorry:", "🚛"}, - {":artificial_satellite:", ":satellite:", "🛰"}, - {":aruba:", ":flag aruba:", "🇦🇼"}, - {":asterisk:", ":keycap *:", "*️⃣"}, - {":astonished:", ":astonished face:", "😲"}, - {":athletic_shoe:", ":running shoe:", "👟"}, - {":atm:", ":atm sign:", "🏧"}, - {":atom_symbol:", ":atom symbol:", "⚛"}, - {":australia:", ":flag australia:", "🇦🇺"}, - {":austria:", ":flag austria:", "🇦🇹"}, - {":avocado:", ":avocado:", "🥑"}, - {":azerbaijan:", ":flag azerbaijan:", "🇦🇿"}, - {":b:", ":b button (blood type):", "🅱"}, - {":baby:", ":baby:", "👶"}, - {":baby_bottle:", ":baby bottle:", "🍼"}, - {":baby_chick:", ":baby chick:", "🐤"}, - {":baby_symbol:", ":baby symbol:", "🚼"}, - {":back:", ":back arrow:", "🔙"}, - {":bacon:", ":bacon:", "🥓"}, - {":badminton:", ":badminton:", "🏸"}, - {":baggage_claim:", ":baggage claim:", "🛄"}, - {":baguette_bread:", ":baguette bread:", "🥖"}, - {":bahamas:", ":flag bahamas:", "🇧🇸"}, - {":bahrain:", ":flag bahrain:", "🇧🇭"}, - {":balance_scale:", ":balance scale:", "⚖"}, - {":balloon:", ":balloon:", "🎈"}, - {":ballot_box:", ":ballot box with ballot:", "🗳"}, - {":ballot_box_with_check:", ":ballot box with check:", "☑"}, - {":bamboo:", ":pine decoration:", "🎍"}, - {":banana:", ":banana:", "🍌"}, - {":bangbang:", ":double exclamation mark:", "‼"}, - {":bangladesh:", ":flag bangladesh:", "🇧🇩"}, - {":bank:", ":bank:", "🏦"}, - {":bar_chart:", ":bar chart:", "📊"}, - {":barbados:", ":flag barbados:", "🇧🇧"}, - {":barber:", ":barber pole:", "💈"}, - {":baseball:", ":baseball:", "⚾"}, - {":basketball:", ":basketball:", "🏀"}, - {":basketball_man:", ":person bouncing ball:", "⛹"}, - {":basketball_woman:", ":woman bouncing ball:", "⛹️‍♀️"}, - {":bat:", ":bat:", "🦇"}, - {":bath:", ":person taking bath:", "🛀"}, - {":bathtub:", ":bathtub:", "🛁"}, - {":battery:", ":battery:", "🔋"}, - {":beach_umbrella:", ":beach with umbrella:", "🏖"}, - {":bear:", ":bear face:", "🐻"}, - {":bed:", ":bed:", "🛏"}, - {":bee:", ":honeybee:", "🐝"}, - {":beer:", ":beer mug:", "🍺"}, - {":beers:", ":clinking beer mugs:", "🍻"}, - {":beetle:", ":lady beetle:", "🐞"}, - {":beginner:", ":japanese symbol for beginner:", "🔰"}, - {":belarus:", ":flag belarus:", "🇧🇾"}, - {":belgium:", ":flag belgium:", "🇧🇪"}, - {":belize:", ":flag belize:", "🇧🇿"}, - {":bell:", ":bell:", "🔔"}, - {":bellhop_bell:", ":bellhop bell:", "🛎"}, - {":benin:", ":flag benin:", "🇧🇯"}, - {":bento:", ":bento box:", "🍱"}, - {":bermuda:", ":flag bermuda:", "🇧🇲"}, - {":bhutan:", ":flag bhutan:", "🇧🇹"}, - {":bicyclist:", ":person biking:", "🚴"}, - {":bike:", ":bicycle:", "🚲"}, - {":biking_man:", ":person biking:", "🚴"}, - {":biking_woman:", ":woman biking:", "🚴‍♀️"}, - {":bikini:", ":bikini:", "👙"}, - {":biohazard:", ":biohazard:", "☣"}, - {":bird:", ":bird:", "🐦"}, - {":birthday:", ":birthday cake:", "🎂"}, - {":black_circle:", ":black circle:", "⚫"}, - {":black_flag:", ":black flag:", "🏴"}, - {":black_heart:", ":black heart:", "🖤"}, - {":black_joker:", ":joker:", "🃏"}, - {":black_large_square:", ":black large square:", "⬛"}, - {":black_medium_small_square:", ":black medium-small square:", "◾"}, - {":black_medium_square:", ":black medium square:", "◼"}, - {":black_nib:", ":black nib:", "✒"}, - {":black_small_square:", ":black small square:", "▪"}, - {":black_square_button:", ":black square button:", "🔲"}, - {":blonde_man:", ":person blond hair:", "👱"}, - {":blonde_woman:", ":woman blond hair:", "👱‍♀️"}, - {":blossom:", ":blossom:", "🌼"}, - {":blowfish:", ":blowfish:", "🐡"}, - {":blue_book:", ":blue book:", "📘"}, - {":blue_car:", ":sport utility vehicle:", "🚙"}, - {":blue_heart:", ":blue heart:", "💙"}, - {":blush:", ":smiling face with smiling eyes:", "😊"}, - {":boar:", ":boar:", "🐗"}, - {":boat:", ":sailboat:", "⛵"}, - {":bolivia:", ":flag bolivia:", "🇧🇴"}, - {":bomb:", ":bomb:", "💣"}, - {":book:", ":open book:", "📖"}, - {":bookmark:", ":bookmark:", "🔖"}, - {":bookmark_tabs:", ":bookmark tabs:", "📑"}, - {":books:", ":books:", "📚"}, - {":boom:", ":collision:", "💥"}, - {":boot:", ":woman's boot:", "👢"}, - {":bosnia_herzegovina:", ":flag bosnia & herzegovina:", "🇧🇦"}, - {":botswana:", ":flag botswana:", "🇧🇼"}, - {":bouquet:", ":bouquet:", "💐"}, - {":bow:", ":person bowing:", "🙇"}, - {":bow_and_arrow:", ":bow and arrow:", "🏹"}, - {":bowing_man:", ":person bowing:", "🙇"}, - {":bowing_woman:", ":woman bowing:", "🙇‍♀️"}, - {":bowling:", ":bowling:", "🎳"}, - {":boxing_glove:", ":boxing glove:", "🥊"}, - {":boy:", ":boy:", "👦"}, - {":brazil:", ":flag brazil:", "🇧🇷"}, - {":bread:", ":bread:", "🍞"}, - {":bride_with_veil:", ":bride with veil:", "👰"}, - {":bridge_at_night:", ":bridge at night:", "🌉"}, - {":briefcase:", ":briefcase:", "💼"}, - {":british_indian_ocean_territory:", ":flag british indian ocean territory:", "🇮🇴"}, - {":british_virgin_islands:", ":flag british virgin islands:", "🇻🇬"}, - {":broken_heart:", ":broken heart:", "💔"}, - {":brunei:", ":flag brunei:", "🇧🇳"}, - {":bug:", ":bug:", "🐛"}, - {":building_construction:", ":building construction:", "🏗"}, - {":bulb:", ":light bulb:", "💡"}, - {":bulgaria:", ":flag bulgaria:", "🇧🇬"}, - {":bullettrain_front:", ":bullet train:", "🚅"}, - {":bullettrain_side:", ":high-speed train:", "🚄"}, - {":burkina_faso:", ":flag burkina faso:", "🇧🇫"}, - {":burrito:", ":burrito:", "🌯"}, - {":burundi:", ":flag burundi:", "🇧🇮"}, - {":bus:", ":bus:", "🚌"}, - {":business_suit_levitating:", ":man in suit levitating:", "🕴"}, - {":busstop:", ":bus stop:", "🚏"}, - {":bust_in_silhouette:", ":bust in silhouette:", "👤"}, - {":busts_in_silhouette:", ":busts in silhouette:", "👥"}, - {":butterfly:", ":butterfly:", "🦋"}, - {":cactus:", ":cactus:", "🌵"}, - {":cake:", ":shortcake:", "🍰"}, - {":calendar:", ":tear-off calendar:", "📆"}, - {":call_me_hand:", ":call me hand:", "🤙"}, - {":calling:", ":mobile phone with arrow:", "📲"}, - {":cambodia:", ":flag cambodia:", "🇰🇭"}, - {":camel:", ":two-hump camel:", "🐫"}, - {":camera:", ":camera:", "📷"}, - {":camera_flash:", ":camera with flash:", "📸"}, - {":cameroon:", ":flag cameroon:", "🇨🇲"}, - {":camping:", ":camping:", "🏕"}, - {":canada:", ":flag canada:", "🇨🇦"}, - {":canary_islands:", ":flag canary islands:", "🇮🇨"}, - {":cancer:", ":cancer:", "♋"}, - {":candle:", ":candle:", "🕯"}, - {":candy:", ":candy:", "🍬"}, - {":canoe:", ":canoe:", "🛶"}, - {":cape_verde:", ":flag cape verde:", "🇨🇻"}, - {":capital_abcd:", ":input latin uppercase:", "🔠"}, - {":capricorn:", ":capricorn:", "♑"}, - {":car:", ":automobile:", "🚗"}, - {":card_file_box:", ":card file box:", "🗃"}, - {":card_index:", ":card index:", "📇"}, - {":card_index_dividers:", ":card index dividers:", "🗂"}, - {":caribbean_netherlands:", ":flag caribbean netherlands:", "🇧🇶"}, - {":carousel_horse:", ":carousel horse:", "🎠"}, - {":carrot:", ":carrot:", "🥕"}, - {":cat:", ":cat face:", "🐱"}, - {":cat2:", ":cat:", "🐈"}, - {":cayman_islands:", ":flag cayman islands:", "🇰🇾"}, - {":cd:", ":optical disk:", "💿"}, - {":central_african_republic:", ":flag central african republic:", "🇨🇫"}, - {":chad:", ":flag chad:", "🇹🇩"}, - {":chains:", ":chains:", "⛓"}, - {":champagne:", ":bottle with popping cork:", "🍾"}, - {":chart:", ":chart increasing with yen:", "💹"}, - {":chart_with_downwards_trend:", ":chart decreasing:", "📉"}, - {":chart_with_upwards_trend:", ":chart increasing:", "📈"}, - {":checkered_flag:", ":chequered flag:", "🏁"}, - {":cheese:", ":cheese wedge:", "🧀"}, - {":cherries:", ":cherries:", "🍒"}, - {":cherry_blossom:", ":cherry blossom:", "🌸"}, - {":chestnut:", ":chestnut:", "🌰"}, - {":chicken:", ":chicken:", "🐔"}, - {":children_crossing:", ":children crossing:", "🚸"}, - {":chile:", ":flag chile:", "🇨🇱"}, - {":chipmunk:", ":chipmunk:", "🐿"}, - {":chocolate_bar:", ":chocolate bar:", "🍫"}, - {":christmas_island:", ":flag christmas island:", "🇨🇽"}, - {":christmas_tree:", ":christmas tree:", "🎄"}, - {":church:", ":church:", "⛪"}, - {":cinema:", ":cinema:", "🎦"}, - {":circus_tent:", ":circus tent:", "🎪"}, - {":city_sunrise:", ":sunset:", "🌇"}, - {":city_sunset:", ":cityscape at dusk:", "🌆"}, - {":cityscape:", ":cityscape:", "🏙"}, - {":cl:", ":cl button:", "🆑"}, - {":clamp:", ":clamp:", "🗜"}, - {":clap:", ":clapping hands:", "👏"}, - {":clapper:", ":clapper board:", "🎬"}, - {":classical_building:", ":classical building:", "🏛"}, - {":clinking_glasses:", ":clinking glasses:", "🥂"}, - {":clipboard:", ":clipboard:", "📋"}, - {":clock1:", ":one o'clock:", "🕐"}, - {":clock10:", ":ten o'clock:", "🕙"}, - {":clock1030:", ":ten-thirty:", "🕥"}, - {":clock11:", ":eleven o'clock:", "🕚"}, - {":clock1130:", ":eleven-thirty:", "🕦"}, - {":clock12:", ":twelve o'clock:", "🕛"}, - {":clock1230:", ":twelve-thirty:", "🕧"}, - {":clock130:", ":one-thirty:", "🕜"}, - {":clock2:", ":two o'clock:", "🕑"}, - {":clock230:", ":two-thirty:", "🕝"}, - {":clock3:", ":three o'clock:", "🕒"}, - {":clock330:", ":three-thirty:", "🕞"}, - {":clock4:", ":four o'clock:", "🕓"}, - {":clock430:", ":four-thirty:", "🕟"}, - {":clock5:", ":five o'clock:", "🕔"}, - {":clock530:", ":five-thirty:", "🕠"}, - {":clock6:", ":six o'clock:", "🕕"}, - {":clock630:", ":six-thirty:", "🕡"}, - {":clock7:", ":seven o'clock:", "🕖"}, - {":clock730:", ":seven-thirty:", "🕢"}, - {":clock8:", ":eight o'clock:", "🕗"}, - {":clock830:", ":eight-thirty:", "🕣"}, - {":clock9:", ":nine o'clock:", "🕘"}, - {":clock930:", ":nine-thirty:", "🕤"}, - {":closed_book:", ":closed book:", "📕"}, - {":closed_lock_with_key:", ":locked with key:", "🔐"}, - {":closed_umbrella:", ":closed umbrella:", "🌂"}, - {":cloud:", ":cloud:", "☁"}, - {":cloud_with_lightning:", ":cloud with lightning:", "🌩"}, - {":cloud_with_lightning_and_rain:", ":cloud with lightning and rain:", "⛈"}, - {":cloud_with_rain:", ":cloud with rain:", "🌧"}, - {":cloud_with_snow:", ":cloud with snow:", "🌨"}, - {":clown_face:", ":clown face:", "🤡"}, - {":clubs:", ":club suit:", "♣"}, - {":cn:", ":flag china:", "🇨🇳"}, - {":cocktail:", ":cocktail glass:", "🍸"}, - {":cocos_islands:", ":flag cocos (keeling) islands:", "🇨🇨"}, - {":coffee:", ":hot beverage:", "☕"}, - {":coffin:", ":coffin:", "⚰"}, - {":cold_sweat:", ":anxious face with sweat:", "😰"}, - {":collision:", ":collision:", "💥"}, - {":colombia:", ":flag colombia:", "🇨🇴"}, - {":comet:", ":comet:", "☄"}, - {":comoros:", ":flag comoros:", "🇰🇲"}, - {":computer:", ":laptop computer:", "💻"}, - {":computer_mouse:", ":computer mouse:", "🖱"}, - {":confetti_ball:", ":confetti ball:", "🎊"}, - {":confounded:", ":confounded face:", "😖"}, - {":confused:", ":confused face:", "😕"}, - {":congo_brazzaville:", ":flag congo - brazzaville:", "🇨🇬"}, - {":congo_kinshasa:", ":flag congo - kinshasa:", "🇨🇩"}, - {":congratulations:", ":japanese \"congratulations\" button:", "㊗"}, - {":construction:", ":construction:", "🚧"}, - {":construction_worker:", ":construction worker:", "👷"}, - {":construction_worker_man:", ":construction worker:", "👷"}, - {":construction_worker_woman:", ":woman construction worker:", "👷‍♀️"}, - {":control_knobs:", ":control knobs:", "🎛"}, - {":convenience_store:", ":convenience store:", "🏪"}, - {":cook_islands:", ":flag cook islands:", "🇨🇰"}, - {":cookie:", ":cookie:", "🍪"}, - {":cool:", ":cool button:", "🆒"}, - {":cop:", ":police officer:", "👮"}, - {":copyright:", ":copyright:", "©"}, - {":corn:", ":ear of corn:", "🌽"}, - {":costa_rica:", ":flag costa rica:", "🇨🇷"}, - {":cote_divoire:", ":flag côte d'ivoire:", "🇨🇮"}, - {":couch_and_lamp:", ":couch and lamp:", "🛋"}, - {":couple:", ":man and woman holding hands:", "👫"}, - {":couple_with_heart:", ":couple with heart:", "💑"}, - {":couple_with_heart_man_man:", ":kiss man, man:", "👨‍❤️‍💋‍👨"}, - {":couple_with_heart_woman_man:", ":couple with heart:", "💑"}, - {":couple_with_heart_woman_woman:", ":kiss woman, woman:", "👩‍❤️‍💋‍👩"}, - {":couplekiss_man_man:", ":kiss man, man:", "👨‍❤️‍💋‍👨"}, - {":couplekiss_man_woman:", ":kiss:", "💏"}, - {":couplekiss_woman_woman:", ":kiss woman, woman:", "👩‍❤️‍💋‍👩"}, - {":cow:", ":cow face:", "🐮"}, - {":cow2:", ":cow:", "🐄"}, - {":cowboy_hat_face:", ":cowboy hat face:", "🤠"}, - {":crab:", ":crab:", "🦀"}, - {":crayon:", ":crayon:", "🖍"}, - {":credit_card:", ":credit card:", "💳"}, - {":crescent_moon:", ":crescent moon:", "🌙"}, - {":cricket:", ":cricket game:", "🏏"}, - {":croatia:", ":flag croatia:", "🇭🇷"}, - {":crocodile:", ":crocodile:", "🐊"}, - {":croissant:", ":croissant:", "🥐"}, - {":crossed_fingers:", ":crossed fingers:", "🤞"}, - {":crossed_flags:", ":crossed flags:", "🎌"}, - {":crossed_swords:", ":crossed swords:", "⚔"}, - {":crown:", ":crown:", "👑"}, - {":cry:", ":crying face:", "😢"}, - {":crying_cat_face:", ":crying cat face:", "😿"}, - {":crystal_ball:", ":crystal ball:", "🔮"}, - {":cuba:", ":flag cuba:", "🇨🇺"}, - {":cucumber:", ":cucumber:", "🥒"}, - {":cupid:", ":heart with arrow:", "💘"}, - {":curacao:", ":flag curaçao:", "🇨🇼"}, - {":curly_loop:", ":curly loop:", "➰"}, - {":currency_exchange:", ":currency exchange:", "💱"}, - {":curry:", ":curry rice:", "🍛"}, - {":custard:", ":custard:", "🍮"}, - {":customs:", ":customs:", "🛃"}, - {":cyclone:", ":cyclone:", "🌀"}, - {":cyprus:", ":flag cyprus:", "🇨🇾"}, - {":czech_republic:", ":flag czechia:", "🇨🇿"}, - {":dagger:", ":dagger:", "🗡"}, - {":dancer:", ":woman dancing:", "💃"}, - {":dancers:", ":people with bunny ears:", "👯"}, - {":dancing_men:", ":men with bunny ears:", "👯‍♂️"}, - {":dancing_women:", ":people with bunny ears:", "👯"}, - {":dango:", ":dango:", "🍡"}, - {":dark_sunglasses:", ":sunglasses:", "🕶"}, - {":dart:", ":direct hit:", "🎯"}, - {":dash:", ":dashing away:", "💨"}, - {":date:", ":calendar:", "📅"}, - {":de:", ":flag germany:", "🇩🇪"}, - {":deciduous_tree:", ":deciduous tree:", "🌳"}, - {":deer:", ":deer:", "🦌"}, - {":denmark:", ":flag denmark:", "🇩🇰"}, - {":department_store:", ":department store:", "🏬"}, - {":derelict_house:", ":derelict house:", "🏚"}, - {":desert:", ":desert:", "🏜"}, - {":desert_island:", ":desert island:", "🏝"}, - {":desktop_computer:", ":desktop computer:", "🖥"}, - {":detective:", ":detective:", "🕵"}, - {":diamond_shape_with_a_dot_inside:", ":diamond with a dot:", "💠"}, - {":diamonds:", ":diamond suit:", "♦"}, - {":disappointed:", ":disappointed face:", "😞"}, - {":disappointed_relieved:", ":sad but relieved face:", "😥"}, - {":dizzy:", ":dizzy:", "💫"}, - {":dizzy_face:", ":dizzy face:", "😵"}, - {":djibouti:", ":flag djibouti:", "🇩🇯"}, - {":do_not_litter:", ":no littering:", "🚯"}, - {":dog:", ":dog face:", "🐶"}, - {":dog2:", ":dog:", "🐕"}, - {":dollar:", ":dollar banknote:", "💵"}, - {":dolls:", ":japanese dolls:", "🎎"}, - {":dolphin:", ":dolphin:", "🐬"}, - {":dominica:", ":flag dominica:", "🇩🇲"}, - {":dominican_republic:", ":flag dominican republic:", "🇩🇴"}, - {":door:", ":door:", "🚪"}, - {":doughnut:", ":doughnut:", "🍩"}, - {":dove:", ":dove:", "🕊"}, - {":dragon:", ":dragon:", "🐉"}, - {":dragon_face:", ":dragon face:", "🐲"}, - {":dress:", ":dress:", "👗"}, - {":dromedary_camel:", ":camel:", "🐪"}, - {":drooling_face:", ":drooling face:", "🤤"}, - {":droplet:", ":droplet:", "💧"}, - {":drum:", ":drum:", "🥁"}, - {":duck:", ":duck:", "🦆"}, - {":dvd:", ":dvd:", "📀"}, - {":e-mail:", ":e-mail:", "📧"}, - {":eagle:", ":eagle:", "🦅"}, - {":ear:", ":ear:", "👂"}, - {":ear_of_rice:", ":sheaf of rice:", "🌾"}, - {":earth_africa:", ":globe showing europe-africa:", "🌍"}, - {":earth_americas:", ":globe showing americas:", "🌎"}, - {":earth_asia:", ":globe showing asia-australia:", "🌏"}, - {":ecuador:", ":flag ecuador:", "🇪🇨"}, - {":egg:", ":egg:", "🥚"}, - {":eggplant:", ":eggplant:", "🍆"}, - {":egypt:", ":flag egypt:", "🇪🇬"}, - {":eight:", ":keycap 8:", "8️⃣"}, - {":eight_pointed_black_star:", ":eight-pointed star:", "✴"}, - {":eight_spoked_asterisk:", ":eight-spoked asterisk:", "✳"}, - {":el_salvador:", ":flag el salvador:", "🇸🇻"}, - {":electric_plug:", ":electric plug:", "🔌"}, - {":elephant:", ":elephant:", "🐘"}, - {":email:", ":envelope:", "✉"}, - {":end:", ":end arrow:", "🔚"}, - {":envelope:", ":envelope:", "✉"}, - {":envelope_with_arrow:", ":envelope with arrow:", "📩"}, - {":equatorial_guinea:", ":flag equatorial guinea:", "🇬🇶"}, - {":eritrea:", ":flag eritrea:", "🇪🇷"}, - {":es:", ":flag spain:", "🇪🇸"}, - {":estonia:", ":flag estonia:", "🇪🇪"}, - {":ethiopia:", ":flag ethiopia:", "🇪🇹"}, - {":eu:", ":flag european union:", "🇪🇺"}, - {":euro:", ":euro banknote:", "💶"}, - {":european_castle:", ":castle:", "🏰"}, - {":european_post_office:", ":post office:", "🏤"}, - {":european_union:", ":flag european union:", "🇪🇺"}, - {":evergreen_tree:", ":evergreen tree:", "🌲"}, - {":exclamation:", ":exclamation mark:", "❗"}, - {":expressionless:", ":expressionless face:", "😑"}, - {":eye:", ":eye in speech bubble:", "👁️‍🗨️"}, - {":eye_speech_bubble:", ":eye in speech bubble:", "👁️‍🗨️"}, - {":eyeglasses:", ":glasses:", "👓"}, - {":eyes:", ":eyes:", "👀"}, - {":face_with_head_bandage:", ":face with head-bandage:", "🤕"}, - {":face_with_thermometer:", ":face with thermometer:", "🤒"}, - {":facepunch:", ":oncoming fist:", "👊"}, - {":factory:", ":factory:", "🏭"}, - {":falkland_islands:", ":flag falkland islands:", "🇫🇰"}, - {":fallen_leaf:", ":fallen leaf:", "🍂"}, - {":family:", ":family:", "👪"}, - {":family_man_boy:", ":family man, woman, boy:", "👨‍👩‍👦"}, - {":family_man_boy_boy:", ":family man, woman, boy, boy:", "👨‍👩‍👦‍👦"}, - {":family_man_girl:", ":family man, woman, girl:", "👨‍👩‍👧"}, - {":family_man_girl_boy:", ":family man, woman, girl, boy:", "👨‍👩‍👧‍👦"}, - {":family_man_girl_girl:", ":family man, woman, girl, girl:", "👨‍👩‍👧‍👧"}, - {":family_man_man_boy:", ":family man, man, boy:", "👨‍👨‍👦"}, - {":family_man_man_boy_boy:", ":family man, man, boy, boy:", "👨‍👨‍👦‍👦"}, - {":family_man_man_girl:", ":family man, man, girl:", "👨‍👨‍👧"}, - {":family_man_man_girl_boy:", ":family man, man, girl, boy:", "👨‍👨‍👧‍👦"}, - {":family_man_man_girl_girl:", ":family man, man, girl, girl:", "👨‍👨‍👧‍👧"}, - {":family_man_woman_boy:", ":family:", "👪"}, - {":family_man_woman_boy_boy:", ":family man, woman, boy, boy:", "👨‍👩‍👦‍👦"}, - {":family_man_woman_girl:", ":family man, woman, girl:", "👨‍👩‍👧"}, - {":family_man_woman_girl_boy:", ":family man, woman, girl, boy:", "👨‍👩‍👧‍👦"}, - {":family_man_woman_girl_girl:", ":family man, woman, girl, girl:", "👨‍👩‍👧‍👧"}, - {":family_woman_boy:", ":family woman, woman, boy:", "👩‍👩‍👦"}, - {":family_woman_boy_boy:", ":family woman, woman, boy, boy:", "👩‍👩‍👦‍👦"}, - {":family_woman_girl:", ":family woman, woman, girl:", "👩‍👩‍👧"}, - {":family_woman_girl_boy:", ":family woman, woman, girl, boy:", "👩‍👩‍👧‍👦"}, - {":family_woman_girl_girl:", ":family woman, woman, girl, girl:", "👩‍👩‍👧‍👧"}, - {":family_woman_woman_boy:", ":family woman, woman, boy:", "👩‍👩‍👦"}, - {":family_woman_woman_boy_boy:", ":family woman, woman, boy, boy:", "👩‍👩‍👦‍👦"}, - {":family_woman_woman_girl:", ":family woman, woman, girl:", "👩‍👩‍👧"}, - {":family_woman_woman_girl_boy:", ":family woman, woman, girl, boy:", "👩‍👩‍👧‍👦"}, - {":family_woman_woman_girl_girl:", ":family woman, woman, girl, girl:", "👩‍👩‍👧‍👧"}, - {":faroe_islands:", ":flag faroe islands:", "🇫🇴"}, - {":fast_forward:", ":fast-forward button:", "⏩"}, - {":fax:", ":fax machine:", "📠"}, - {":fearful:", ":fearful face:", "😨"}, - {":feet:", ":paw prints:", "🐾"}, - {":female_detective:", ":woman detective:", "🕵️‍♀️"}, - {":ferris_wheel:", ":ferris wheel:", "🎡"}, - {":ferry:", ":ferry:", "⛴"}, - {":field_hockey:", ":field hockey:", "🏑"}, - {":fiji:", ":flag fiji:", "🇫🇯"}, - {":file_cabinet:", ":file cabinet:", "🗄"}, - {":file_folder:", ":file folder:", "📁"}, - {":film_projector:", ":film projector:", "📽"}, - {":film_strip:", ":film frames:", "🎞"}, - {":finland:", ":flag finland:", "🇫🇮"}, - {":fire:", ":fire:", "🔥"}, - {":fire_engine:", ":fire engine:", "🚒"}, - {":fireworks:", ":fireworks:", "🎆"}, - {":first_quarter_moon:", ":first quarter moon:", "🌓"}, - {":first_quarter_moon_with_face:", ":first quarter moon face:", "🌛"}, - {":fish:", ":fish:", "🐟"}, - {":fish_cake:", ":fish cake with swirl:", "🍥"}, - {":fishing_pole_and_fish:", ":fishing pole:", "🎣"}, - {":fist:", ":raised fist:", "✊"}, - {":fist_left:", ":left-facing fist:", "🤛"}, - {":fist_oncoming:", ":oncoming fist:", "👊"}, - {":fist_raised:", ":raised fist:", "✊"}, - {":fist_right:", ":right-facing fist:", "🤜"}, - {":five:", ":keycap 5:", "5️⃣"}, - {":flags:", ":carp streamer:", "🎏"}, - {":flashlight:", ":flashlight:", "🔦"}, - {":fleur_de_lis:", ":fleur-de-lis:", "⚜"}, - {":flight_arrival:", ":airplane arrival:", "🛬"}, - {":flight_departure:", ":airplane departure:", "🛫"}, - {":flipper:", ":dolphin:", "🐬"}, - {":floppy_disk:", ":floppy disk:", "💾"}, - {":flower_playing_cards:", ":flower playing cards:", "🎴"}, - {":flushed:", ":flushed face:", "😳"}, - {":fog:", ":fog:", "🌫"}, - {":foggy:", ":foggy:", "🌁"}, - {":football:", ":american football:", "🏈"}, - {":footprints:", ":footprints:", "👣"}, - {":fork_and_knife:", ":fork and knife:", "🍴"}, - {":fountain:", ":fountain:", "⛲"}, - {":fountain_pen:", ":fountain pen:", "🖋"}, - {":four:", ":keycap 4:", "4️⃣"}, - {":four_leaf_clover:", ":four leaf clover:", "🍀"}, - {":fox_face:", ":fox face:", "🦊"}, - {":fr:", ":flag france:", "🇫🇷"}, - {":framed_picture:", ":framed picture:", "🖼"}, - {":free:", ":free button:", "🆓"}, - {":french_guiana:", ":flag french guiana:", "🇬🇫"}, - {":french_polynesia:", ":flag french polynesia:", "🇵🇫"}, - {":french_southern_territories:", ":flag french southern territories:", "🇹🇫"}, - {":fried_egg:", ":cooking:", "🍳"}, - {":fried_shrimp:", ":fried shrimp:", "🍤"}, - {":fries:", ":french fries:", "🍟"}, - {":frog:", ":frog face:", "🐸"}, - {":frowning:", ":frowning face with open mouth:", "😦"}, - {":frowning_face:", ":frowning face:", "☹"}, - {":frowning_man:", ":man frowning:", "🙍‍♂️"}, - {":frowning_woman:", ":person frowning:", "🙍"}, - {":fu:", ":middle finger:", "🖕"}, - {":fuelpump:", ":fuel pump:", "⛽"}, - {":full_moon:", ":full moon:", "🌕"}, - {":full_moon_with_face:", ":full moon face:", "🌝"}, - {":funeral_urn:", ":funeral urn:", "⚱"}, - {":gabon:", ":flag gabon:", "🇬🇦"}, - {":gambia:", ":flag gambia:", "🇬🇲"}, - {":game_die:", ":game die:", "🎲"}, - {":gb:", ":flag united kingdom:", "🇬🇧"}, - {":gear:", ":gear:", "⚙"}, - {":gem:", ":gem stone:", "💎"}, - {":gemini:", ":gemini:", "♊"}, - {":georgia:", ":flag georgia:", "🇬🇪"}, - {":ghana:", ":flag ghana:", "🇬🇭"}, - {":ghost:", ":ghost:", "👻"}, - {":gibraltar:", ":flag gibraltar:", "🇬🇮"}, - {":gift:", ":wrapped gift:", "🎁"}, - {":gift_heart:", ":heart with ribbon:", "💝"}, - {":girl:", ":girl:", "👧"}, - {":globe_with_meridians:", ":globe with meridians:", "🌐"}, - {":goal_net:", ":goal net:", "🥅"}, - {":goat:", ":goat:", "🐐"}, - {":golf:", ":flag in hole:", "⛳"}, - {":golfing_man:", ":person golfing:", "🏌"}, - {":golfing_woman:", ":woman golfing:", "🏌️‍♀️"}, - {":gorilla:", ":gorilla:", "🦍"}, - {":grapes:", ":grapes:", "🍇"}, - {":greece:", ":flag greece:", "🇬🇷"}, - {":green_apple:", ":green apple:", "🍏"}, - {":green_book:", ":green book:", "📗"}, - {":green_heart:", ":green heart:", "💚"}, - {":green_salad:", ":green salad:", "🥗"}, - {":greenland:", ":flag greenland:", "🇬🇱"}, - {":grenada:", ":flag grenada:", "🇬🇩"}, - {":grey_exclamation:", ":white exclamation mark:", "❕"}, - {":grey_question:", ":white question mark:", "❔"}, - {":grimacing:", ":grimacing face:", "😬"}, - {":grin:", ":beaming face with smiling eyes:", "😁"}, - {":grinning:", ":grinning face:", "😀"}, - {":guadeloupe:", ":flag guadeloupe:", "🇬🇵"}, - {":guam:", ":flag guam:", "🇬🇺"}, - {":guardsman:", ":guard:", "💂"}, - {":guardswoman:", ":woman guard:", "💂‍♀️"}, - {":guatemala:", ":flag guatemala:", "🇬🇹"}, - {":guernsey:", ":flag guernsey:", "🇬🇬"}, - {":guinea:", ":flag guinea:", "🇬🇳"}, - {":guinea_bissau:", ":flag guinea-bissau:", "🇬🇼"}, - {":guitar:", ":guitar:", "🎸"}, - {":gun:", ":pistol:", "🔫"}, - {":guyana:", ":flag guyana:", "🇬🇾"}, - {":haircut:", ":person getting haircut:", "💇"}, - {":haircut_man:", ":man getting haircut:", "💇‍♂️"}, - {":haircut_woman:", ":person getting haircut:", "💇"}, - {":haiti:", ":flag haiti:", "🇭🇹"}, - {":hamburger:", ":hamburger:", "🍔"}, - {":hammer:", ":hammer:", "🔨"}, - {":hammer_and_pick:", ":hammer and pick:", "⚒"}, - {":hammer_and_wrench:", ":hammer and wrench:", "🛠"}, - {":hamster:", ":hamster face:", "🐹"}, - {":hand:", ":raised hand:", "✋"}, - {":handbag:", ":handbag:", "👜"}, - {":handshake:", ":handshake:", "🤝"}, - {":hankey:", ":pile of poo:", "💩"}, - {":hash:", ":keycap #:", "#️⃣"}, - {":hatched_chick:", ":front-facing baby chick:", "🐥"}, - {":hatching_chick:", ":hatching chick:", "🐣"}, - {":headphones:", ":headphone:", "🎧"}, - {":hear_no_evil:", ":hear-no-evil monkey:", "🙉"}, - {":heart:", ":red heart:", "❤"}, - {":heart_decoration:", ":heart decoration:", "💟"}, - {":heart_eyes:", ":smiling face with heart-eyes:", "😍"}, - {":heart_eyes_cat:", ":smiling cat face with heart-eyes:", "😻"}, - {":heartbeat:", ":beating heart:", "💓"}, - {":heartpulse:", ":growing heart:", "💗"}, - {":hearts:", ":heart suit:", "♥"}, - {":heavy_check_mark:", ":heavy check mark:", "✔"}, - {":heavy_division_sign:", ":heavy division sign:", "➗"}, - {":heavy_dollar_sign:", ":heavy dollar sign:", "💲"}, - {":heavy_exclamation_mark:", ":exclamation mark:", "❗"}, - {":heavy_heart_exclamation:", ":heavy heart exclamation:", "❣"}, - {":heavy_minus_sign:", ":heavy minus sign:", "➖"}, - {":heavy_multiplication_x:", ":heavy multiplication x:", "✖"}, - {":heavy_plus_sign:", ":heavy plus sign:", "➕"}, - {":helicopter:", ":helicopter:", "🚁"}, - {":herb:", ":herb:", "🌿"}, - {":hibiscus:", ":hibiscus:", "🌺"}, - {":high_brightness:", ":bright button:", "🔆"}, - {":high_heel:", ":high-heeled shoe:", "👠"}, - {":hocho:", ":kitchen knife:", "🔪"}, - {":hole:", ":hole:", "🕳"}, - {":honduras:", ":flag honduras:", "🇭🇳"}, - {":honey_pot:", ":honey pot:", "🍯"}, - {":honeybee:", ":honeybee:", "🐝"}, - {":hong_kong:", ":flag hong kong sar china:", "🇭🇰"}, - {":horse:", ":horse face:", "🐴"}, - {":horse_racing:", ":horse racing:", "🏇"}, - {":hospital:", ":hospital:", "🏥"}, - {":hot_pepper:", ":hot pepper:", "🌶"}, - {":hotdog:", ":hot dog:", "🌭"}, - {":hotel:", ":hotel:", "🏨"}, - {":hotsprings:", ":hot springs:", "♨"}, - {":hourglass:", ":hourglass done:", "⌛"}, - {":hourglass_flowing_sand:", ":hourglass not done:", "⏳"}, - {":house:", ":house:", "🏠"}, - {":house_with_garden:", ":house with garden:", "🏡"}, - {":houses:", ":houses:", "🏘"}, - {":hugs:", ":hugging face:", "🤗"}, - {":hungary:", ":flag hungary:", "🇭🇺"}, - {":hushed:", ":hushed face:", "😯"}, - {":ice_cream:", ":ice cream:", "🍨"}, - {":ice_hockey:", ":ice hockey:", "🏒"}, - {":ice_skate:", ":ice skate:", "⛸"}, - {":icecream:", ":soft ice cream:", "🍦"}, - {":iceland:", ":flag iceland:", "🇮🇸"}, - {":id:", ":id button:", "🆔"}, - {":ideograph_advantage:", ":japanese \"bargain\" button:", "🉐"}, - {":imp:", ":angry face with horns:", "👿"}, - {":inbox_tray:", ":inbox tray:", "📥"}, - {":incoming_envelope:", ":incoming envelope:", "📨"}, - {":india:", ":flag india:", "🇮🇳"}, - {":indonesia:", ":flag indonesia:", "🇮🇩"}, - {":information_desk_person:", ":person tipping hand:", "💁"}, - {":information_source:", ":information:", "ℹ"}, - {":innocent:", ":smiling face with halo:", "😇"}, - {":interrobang:", ":exclamation question mark:", "⁉"}, - {":iphone:", ":mobile phone:", "📱"}, - {":iran:", ":flag iran:", "🇮🇷"}, - {":iraq:", ":flag iraq:", "🇮🇶"}, - {":ireland:", ":flag ireland:", "🇮🇪"}, - {":isle_of_man:", ":flag isle of man:", "🇮🇲"}, - {":israel:", ":flag israel:", "🇮🇱"}, - {":it:", ":flag italy:", "🇮🇹"}, - {":izakaya_lantern:", ":red paper lantern:", "🏮"}, - {":jack_o_lantern:", ":jack-o-lantern:", "🎃"}, - {":jamaica:", ":flag jamaica:", "🇯🇲"}, - {":japan:", ":map of japan:", "🗾"}, - {":japanese_castle:", ":japanese castle:", "🏯"}, - {":japanese_goblin:", ":goblin:", "👺"}, - {":japanese_ogre:", ":ogre:", "👹"}, - {":jeans:", ":jeans:", "👖"}, - {":jersey:", ":flag jersey:", "🇯🇪"}, - {":jordan:", ":flag jordan:", "🇯🇴"}, - {":joy:", ":face with tears of joy:", "😂"}, - {":joy_cat:", ":cat face with tears of joy:", "😹"}, - {":joystick:", ":joystick:", "🕹"}, - {":jp:", ":flag japan:", "🇯🇵"}, - {":kaaba:", ":kaaba:", "🕋"}, - {":kazakhstan:", ":flag kazakhstan:", "🇰🇿"}, - {":kenya:", ":flag kenya:", "🇰🇪"}, - {":key:", ":key:", "🔑"}, - {":keyboard:", ":keyboard:", "⌨"}, - {":keycap_ten:", ":keycap 10:", "🔟"}, - {":kick_scooter:", ":kick scooter:", "🛴"}, - {":kimono:", ":kimono:", "👘"}, - {":kiribati:", ":flag kiribati:", "🇰🇮"}, - {":kiss:", ":kiss mark:", "💋"}, - {":kissing:", ":kissing face:", "😗"}, - {":kissing_cat:", ":kissing cat face:", "😽"}, - {":kissing_closed_eyes:", ":kissing face with closed eyes:", "😚"}, - {":kissing_heart:", ":face blowing a kiss:", "😘"}, - {":kissing_smiling_eyes:", ":kissing face with smiling eyes:", "😙"}, - {":kiwi_fruit:", ":kiwi fruit:", "🥝"}, - {":knife:", ":kitchen knife:", "🔪"}, - {":koala:", ":koala:", "🐨"}, - {":koko:", ":japanese \"here\" button:", "🈁"}, - {":kosovo:", ":flag kosovo:", "🇽🇰"}, - {":kr:", ":flag south korea:", "🇰🇷"}, - {":kuwait:", ":flag kuwait:", "🇰🇼"}, - {":kyrgyzstan:", ":flag kyrgyzstan:", "🇰🇬"}, - {":label:", ":label:", "🏷"}, - {":lantern:", ":red paper lantern:", "🏮"}, - {":laos:", ":flag laos:", "🇱🇦"}, - {":large_blue_circle:", ":blue circle:", "🔵"}, - {":large_blue_diamond:", ":large blue diamond:", "🔷"}, - {":large_orange_diamond:", ":large orange diamond:", "🔶"}, - {":last_quarter_moon:", ":last quarter moon:", "🌗"}, - {":last_quarter_moon_with_face:", ":last quarter moon face:", "🌜"}, - {":latin_cross:", ":latin cross:", "✝"}, - {":latvia:", ":flag latvia:", "🇱🇻"}, - {":laughing:", ":grinning squinting face:", "😆"}, - {":leaves:", ":leaf fluttering in wind:", "🍃"}, - {":lebanon:", ":flag lebanon:", "🇱🇧"}, - {":ledger:", ":ledger:", "📒"}, - {":left_luggage:", ":left luggage:", "🛅"}, - {":left_right_arrow:", ":left-right arrow:", "↔"}, - {":leftwards_arrow_with_hook:", ":right arrow curving left:", "↩"}, - {":lemon:", ":lemon:", "🍋"}, - {":leo:", ":leo:", "♌"}, - {":leopard:", ":leopard:", "🐆"}, - {":lesotho:", ":flag lesotho:", "🇱🇸"}, - {":level_slider:", ":level slider:", "🎚"}, - {":liberia:", ":flag liberia:", "🇱🇷"}, - {":libra:", ":libra:", "♎"}, - {":libya:", ":flag libya:", "🇱🇾"}, - {":liechtenstein:", ":flag liechtenstein:", "🇱🇮"}, - {":light_rail:", ":light rail:", "🚈"}, - {":link:", ":link:", "🔗"}, - {":lion:", ":lion face:", "🦁"}, - {":lips:", ":mouth:", "👄"}, - {":lipstick:", ":lipstick:", "💄"}, - {":lithuania:", ":flag lithuania:", "🇱🇹"}, - {":lizard:", ":lizard:", "🦎"}, - {":lock:", ":locked:", "🔒"}, - {":lock_with_ink_pen:", ":locked with pen:", "🔏"}, - {":lollipop:", ":lollipop:", "🍭"}, - {":loop:", ":double curly loop:", "➿"}, - {":loud_sound:", ":speaker high volume:", "🔊"}, - {":loudspeaker:", ":loudspeaker:", "📢"}, - {":love_hotel:", ":love hotel:", "🏩"}, - {":love_letter:", ":love letter:", "💌"}, - {":low_brightness:", ":dim button:", "🔅"}, - {":luxembourg:", ":flag luxembourg:", "🇱🇺"}, - {":lying_face:", ":lying face:", "🤥"}, - {":m:", ":circled m:", "Ⓜ"}, - {":macau:", ":flag macau sar china:", "🇲🇴"}, - {":macedonia:", ":flag macedonia:", "🇲🇰"}, - {":madagascar:", ":flag madagascar:", "🇲🇬"}, - {":mag:", ":magnifying glass tilted left:", "🔍"}, - {":mag_right:", ":magnifying glass tilted right:", "🔎"}, - {":mahjong:", ":mahjong red dragon:", "🀄"}, - {":mailbox:", ":closed mailbox with raised flag:", "📫"}, - {":mailbox_closed:", ":closed mailbox with lowered flag:", "📪"}, - {":mailbox_with_mail:", ":open mailbox with raised flag:", "📬"}, - {":mailbox_with_no_mail:", ":open mailbox with lowered flag:", "📭"}, - {":malawi:", ":flag malawi:", "🇲🇼"}, - {":malaysia:", ":flag malaysia:", "🇲🇾"}, - {":maldives:", ":flag maldives:", "🇲🇻"}, - {":male_detective:", ":detective:", "🕵"}, - {":mali:", ":flag mali:", "🇲🇱"}, - {":malta:", ":flag malta:", "🇲🇹"}, - {":man:", ":man:", "👨"}, - {":man_artist:", ":man artist:", "👨‍🎨"}, - {":man_astronaut:", ":man astronaut:", "👨‍🚀"}, - {":man_cartwheeling:", ":man cartwheeling:", "🤸‍♂️"}, - {":man_cook:", ":man cook:", "👨‍🍳"}, - {":man_dancing:", ":man dancing:", "🕺"}, - {":man_facepalming:", ":man facepalming:", "🤦‍♂️"}, - {":man_factory_worker:", ":man factory worker:", "👨‍🏭"}, - {":man_farmer:", ":man farmer:", "👨‍🌾"}, - {":man_firefighter:", ":man firefighter:", "👨‍🚒"}, - {":man_health_worker:", ":man health worker:", "👨‍⚕️"}, - {":man_in_tuxedo:", ":man in tuxedo:", "🤵"}, - {":man_judge:", ":man judge:", "👨‍⚖️"}, - {":man_juggling:", ":man juggling:", "🤹‍♂️"}, - {":man_mechanic:", ":man mechanic:", "👨‍🔧"}, - {":man_office_worker:", ":man office worker:", "👨‍💼"}, - {":man_pilot:", ":man pilot:", "👨‍✈️"}, - {":man_playing_handball:", ":man playing handball:", "🤾‍♂️"}, - {":man_playing_water_polo:", ":man playing water polo:", "🤽‍♂️"}, - {":man_scientist:", ":man scientist:", "👨‍🔬"}, - {":man_shrugging:", ":man shrugging:", "🤷‍♂️"}, - {":man_singer:", ":man singer:", "👨‍🎤"}, - {":man_student:", ":man student:", "👨‍🎓"}, - {":man_teacher:", ":man teacher:", "👨‍🏫"}, - {":man_technologist:", ":man technologist:", "👨‍💻"}, - {":man_with_gua_pi_mao:", ":man with chinese cap:", "👲"}, - {":man_with_turban:", ":person wearing turban:", "👳"}, - {":mandarin:", ":tangerine:", "🍊"}, - {":mans_shoe:", ":man's shoe:", "👞"}, - {":mantelpiece_clock:", ":mantelpiece clock:", "🕰"}, - {":maple_leaf:", ":maple leaf:", "🍁"}, - {":marshall_islands:", ":flag marshall islands:", "🇲🇭"}, - {":martial_arts_uniform:", ":martial arts uniform:", "🥋"}, - {":martinique:", ":flag martinique:", "🇲🇶"}, - {":mask:", ":face with medical mask:", "😷"}, - {":massage:", ":person getting massage:", "💆"}, - {":massage_man:", ":man getting massage:", "💆‍♂️"}, - {":massage_woman:", ":person getting massage:", "💆"}, - {":mauritania:", ":flag mauritania:", "🇲🇷"}, - {":mauritius:", ":flag mauritius:", "🇲🇺"}, - {":mayotte:", ":flag mayotte:", "🇾🇹"}, - {":meat_on_bone:", ":meat on bone:", "🍖"}, - {":medal_military:", ":military medal:", "🎖"}, - {":medal_sports:", ":sports medal:", "🏅"}, - {":mega:", ":megaphone:", "📣"}, - {":melon:", ":melon:", "🍈"}, - {":memo:", ":memo:", "📝"}, - {":men_wrestling:", ":men wrestling:", "🤼‍♂️"}, - {":menorah:", ":menorah:", "🕎"}, - {":mens:", ":men's room:", "🚹"}, - {":metal:", ":sign of the horns:", "🤘"}, - {":metro:", ":metro:", "🚇"}, - {":mexico:", ":flag mexico:", "🇲🇽"}, - {":micronesia:", ":flag micronesia:", "🇫🇲"}, - {":microphone:", ":microphone:", "🎤"}, - {":microscope:", ":microscope:", "🔬"}, - {":middle_finger:", ":middle finger:", "🖕"}, - {":milk_glass:", ":glass of milk:", "🥛"}, - {":milky_way:", ":milky way:", "🌌"}, - {":minibus:", ":minibus:", "🚐"}, - {":minidisc:", ":computer disk:", "💽"}, - {":mobile_phone_off:", ":mobile phone off:", "📴"}, - {":moldova:", ":flag moldova:", "🇲🇩"}, - {":monaco:", ":flag monaco:", "🇲🇨"}, - {":money_mouth_face:", ":money-mouth face:", "🤑"}, - {":money_with_wings:", ":money with wings:", "💸"}, - {":moneybag:", ":money bag:", "💰"}, - {":mongolia:", ":flag mongolia:", "🇲🇳"}, - {":monkey:", ":monkey:", "🐒"}, - {":monkey_face:", ":monkey face:", "🐵"}, - {":monorail:", ":monorail:", "🚝"}, - {":montenegro:", ":flag montenegro:", "🇲🇪"}, - {":montserrat:", ":flag montserrat:", "🇲🇸"}, - {":moon:", ":waxing gibbous moon:", "🌔"}, - {":morocco:", ":flag morocco:", "🇲🇦"}, - {":mortar_board:", ":graduation cap:", "🎓"}, - {":mosque:", ":mosque:", "🕌"}, - {":motor_boat:", ":motor boat:", "🛥"}, - {":motor_scooter:", ":motor scooter:", "🛵"}, - {":motorcycle:", ":motorcycle:", "🏍"}, - {":motorway:", ":motorway:", "🛣"}, - {":mount_fuji:", ":mount fuji:", "🗻"}, - {":mountain:", ":mountain:", "⛰"}, - {":mountain_bicyclist:", ":person mountain biking:", "🚵"}, - {":mountain_biking_man:", ":person mountain biking:", "🚵"}, - {":mountain_biking_woman:", ":woman mountain biking:", "🚵‍♀️"}, - {":mountain_cableway:", ":mountain cableway:", "🚠"}, - {":mountain_railway:", ":mountain railway:", "🚞"}, - {":mountain_snow:", ":snow-capped mountain:", "🏔"}, - {":mouse:", ":mouse face:", "🐭"}, - {":mouse2:", ":mouse:", "🐁"}, - {":movie_camera:", ":movie camera:", "🎥"}, - {":moyai:", ":moai:", "🗿"}, - {":mozambique:", ":flag mozambique:", "🇲🇿"}, - {":mrs_claus:", ":mrs. claus:", "🤶"}, - {":muscle:", ":flexed biceps:", "💪"}, - {":mushroom:", ":mushroom:", "🍄"}, - {":musical_keyboard:", ":musical keyboard:", "🎹"}, - {":musical_note:", ":musical note:", "🎵"}, - {":musical_score:", ":musical score:", "🎼"}, - {":mute:", ":muted speaker:", "🔇"}, - {":myanmar:", ":flag myanmar (burma):", "🇲🇲"}, - {":nail_care:", ":nail polish:", "💅"}, - {":name_badge:", ":name badge:", "📛"}, - {":namibia:", ":flag namibia:", "🇳🇦"}, - {":national_park:", ":national park:", "🏞"}, - {":nauru:", ":flag nauru:", "🇳🇷"}, - {":nauseated_face:", ":nauseated face:", "🤢"}, - {":necktie:", ":necktie:", "👔"}, - {":negative_squared_cross_mark:", ":cross mark button:", "❎"}, - {":nepal:", ":flag nepal:", "🇳🇵"}, - {":nerd_face:", ":nerd face:", "🤓"}, - {":netherlands:", ":flag netherlands:", "🇳🇱"}, - {":neutral_face:", ":neutral face:", "😐"}, - {":new:", ":new button:", "🆕"}, - {":new_caledonia:", ":flag new caledonia:", "🇳🇨"}, - {":new_moon:", ":new moon:", "🌑"}, - {":new_moon_with_face:", ":new moon face:", "🌚"}, - {":new_zealand:", ":flag new zealand:", "🇳🇿"}, - {":newspaper:", ":newspaper:", "📰"}, - {":newspaper_roll:", ":rolled-up newspaper:", "🗞"}, - {":next_track_button:", ":next track button:", "⏭"}, - {":ng:", ":ng button:", "🆖"}, - {":ng_man:", ":man gesturing no:", "🙅‍♂️"}, - {":ng_woman:", ":person gesturing no:", "🙅"}, - {":nicaragua:", ":flag nicaragua:", "🇳🇮"}, - {":niger:", ":flag niger:", "🇳🇪"}, - {":nigeria:", ":flag nigeria:", "🇳🇬"}, - {":night_with_stars:", ":night with stars:", "🌃"}, - {":nine:", ":keycap 9:", "9️⃣"}, - {":niue:", ":flag niue:", "🇳🇺"}, - {":no_bell:", ":bell with slash:", "🔕"}, - {":no_bicycles:", ":no bicycles:", "🚳"}, - {":no_entry:", ":no entry:", "⛔"}, - {":no_entry_sign:", ":prohibited:", "🚫"}, - {":no_good:", ":person gesturing no:", "🙅"}, - {":no_good_man:", ":man gesturing no:", "🙅‍♂️"}, - {":no_good_woman:", ":person gesturing no:", "🙅"}, - {":no_mobile_phones:", ":no mobile phones:", "📵"}, - {":no_mouth:", ":face without mouth:", "😶"}, - {":no_pedestrians:", ":no pedestrians:", "🚷"}, - {":no_smoking:", ":no smoking:", "🚭"}, - {":non-potable_water:", ":non-potable water:", "🚱"}, - {":norfolk_island:", ":flag norfolk island:", "🇳🇫"}, - {":north_korea:", ":flag north korea:", "🇰🇵"}, - {":northern_mariana_islands:", ":flag northern mariana islands:", "🇲🇵"}, - {":norway:", ":flag norway:", "🇳🇴"}, - {":nose:", ":nose:", "👃"}, - {":notebook:", ":notebook:", "📓"}, - {":notebook_with_decorative_cover:", ":notebook with decorative cover:", "📔"}, - {":notes:", ":musical notes:", "🎶"}, - {":nut_and_bolt:", ":nut and bolt:", "🔩"}, - {":o:", ":heavy large circle:", "⭕"}, - {":o2:", ":o button (blood type):", "🅾"}, - {":ocean:", ":water wave:", "🌊"}, - {":octopus:", ":octopus:", "🐙"}, - {":oden:", ":oden:", "🍢"}, - {":office:", ":office building:", "🏢"}, - {":oil_drum:", ":oil drum:", "🛢"}, - {":ok:", ":ok button:", "🆗"}, - {":ok_hand:", ":ok hand:", "👌"}, - {":ok_man:", ":man gesturing ok:", "🙆‍♂️"}, - {":ok_woman:", ":person gesturing ok:", "🙆"}, - {":old_key:", ":old key:", "🗝"}, - {":older_man:", ":old man:", "👴"}, - {":older_woman:", ":old woman:", "👵"}, - {":om:", ":om:", "🕉"}, - {":oman:", ":flag oman:", "🇴🇲"}, - {":on:", ":on! arrow:", "🔛"}, - {":oncoming_automobile:", ":oncoming automobile:", "🚘"}, - {":oncoming_bus:", ":oncoming bus:", "🚍"}, - {":oncoming_police_car:", ":oncoming police car:", "🚔"}, - {":oncoming_taxi:", ":oncoming taxi:", "🚖"}, - {":one:", ":keycap 1:", "1️⃣"}, - {":open_book:", ":open book:", "📖"}, - {":open_file_folder:", ":open file folder:", "📂"}, - {":open_hands:", ":open hands:", "👐"}, - {":open_mouth:", ":face with open mouth:", "😮"}, - {":open_umbrella:", ":umbrella:", "☂"}, - {":ophiuchus:", ":ophiuchus:", "⛎"}, - {":orange:", ":tangerine:", "🍊"}, - {":orange_book:", ":orange book:", "📙"}, - {":orthodox_cross:", ":orthodox cross:", "☦"}, - {":outbox_tray:", ":outbox tray:", "📤"}, - {":owl:", ":owl:", "🦉"}, - {":ox:", ":ox:", "🐂"}, - {":package:", ":package:", "📦"}, - {":page_facing_up:", ":page facing up:", "📄"}, - {":page_with_curl:", ":page with curl:", "📃"}, - {":pager:", ":pager:", "📟"}, - {":paintbrush:", ":paintbrush:", "🖌"}, - {":pakistan:", ":flag pakistan:", "🇵🇰"}, - {":palau:", ":flag palau:", "🇵🇼"}, - {":palestinian_territories:", ":flag palestinian territories:", "🇵🇸"}, - {":palm_tree:", ":palm tree:", "🌴"}, - {":panama:", ":flag panama:", "🇵🇦"}, - {":pancakes:", ":pancakes:", "🥞"}, - {":panda_face:", ":panda face:", "🐼"}, - {":paperclip:", ":paperclip:", "📎"}, - {":paperclips:", ":linked paperclips:", "🖇"}, - {":papua_new_guinea:", ":flag papua new guinea:", "🇵🇬"}, - {":paraguay:", ":flag paraguay:", "🇵🇾"}, - {":parasol_on_ground:", ":umbrella on ground:", "⛱"}, - {":parking:", ":p button:", "🅿"}, - {":part_alternation_mark:", ":part alternation mark:", "〽"}, - {":partly_sunny:", ":sun behind cloud:", "⛅"}, - {":passenger_ship:", ":passenger ship:", "🛳"}, - {":passport_control:", ":passport control:", "🛂"}, - {":pause_button:", ":pause button:", "⏸"}, - {":paw_prints:", ":paw prints:", "🐾"}, - {":peace_symbol:", ":peace symbol:", "☮"}, - {":peach:", ":peach:", "🍑"}, - {":peanuts:", ":peanuts:", "🥜"}, - {":pear:", ":pear:", "🍐"}, - {":pen:", ":pen:", "🖊"}, - {":pencil:", ":memo:", "📝"}, - {":pencil2:", ":pencil:", "✏"}, - {":penguin:", ":penguin:", "🐧"}, - {":pensive:", ":pensive face:", "😔"}, - {":performing_arts:", ":performing arts:", "🎭"}, - {":persevere:", ":persevering face:", "😣"}, - {":person_fencing:", ":person fencing:", "🤺"}, - {":person_frowning:", ":person frowning:", "🙍"}, - {":person_with_blond_hair:", ":person blond hair:", "👱"}, - {":person_with_pouting_face:", ":person pouting:", "🙎"}, - {":peru:", ":flag peru:", "🇵🇪"}, - {":philippines:", ":flag philippines:", "🇵🇭"}, - {":phone:", ":telephone:", "☎"}, - {":pick:", ":pick:", "⛏"}, - {":pig:", ":pig face:", "🐷"}, - {":pig2:", ":pig:", "🐖"}, - {":pig_nose:", ":pig nose:", "🐽"}, - {":pill:", ":pill:", "💊"}, - {":pineapple:", ":pineapple:", "🍍"}, - {":ping_pong:", ":ping pong:", "🏓"}, - {":pisces:", ":pisces:", "♓"}, - {":pitcairn_islands:", ":flag pitcairn islands:", "🇵🇳"}, - {":pizza:", ":pizza:", "🍕"}, - {":place_of_worship:", ":place of worship:", "🛐"}, - {":plate_with_cutlery:", ":fork and knife with plate:", "🍽"}, - {":play_or_pause_button:", ":play or pause button:", "⏯"}, - {":point_down:", ":backhand index pointing down:", "👇"}, - {":point_left:", ":backhand index pointing left:", "👈"}, - {":point_right:", ":backhand index pointing right:", "👉"}, - {":point_up:", ":index pointing up:", "☝"}, - {":point_up_2:", ":backhand index pointing up:", "👆"}, - {":poland:", ":flag poland:", "🇵🇱"}, - {":police_car:", ":police car:", "🚓"}, - {":policeman:", ":police officer:", "👮"}, - {":policewoman:", ":woman police officer:", "👮‍♀️"}, - {":poodle:", ":poodle:", "🐩"}, - {":poop:", ":pile of poo:", "💩"}, - {":popcorn:", ":popcorn:", "🍿"}, - {":portugal:", ":flag portugal:", "🇵🇹"}, - {":post_office:", ":japanese post office:", "🏣"}, - {":postal_horn:", ":postal horn:", "📯"}, - {":postbox:", ":postbox:", "📮"}, - {":potable_water:", ":potable water:", "🚰"}, - {":potato:", ":potato:", "🥔"}, - {":pouch:", ":clutch bag:", "👝"}, - {":poultry_leg:", ":poultry leg:", "🍗"}, - {":pound:", ":pound banknote:", "💷"}, - {":pout:", ":pouting face:", "😡"}, - {":pouting_cat:", ":pouting cat face:", "😾"}, - {":pouting_man:", ":man pouting:", "🙎‍♂️"}, - {":pouting_woman:", ":person pouting:", "🙎"}, - {":pray:", ":folded hands:", "🙏"}, - {":prayer_beads:", ":prayer beads:", "📿"}, - {":pregnant_woman:", ":pregnant woman:", "🤰"}, - {":previous_track_button:", ":last track button:", "⏮"}, - {":prince:", ":prince:", "🤴"}, - {":princess:", ":princess:", "👸"}, - {":printer:", ":printer:", "🖨"}, - {":puerto_rico:", ":flag puerto rico:", "🇵🇷"}, - {":punch:", ":oncoming fist:", "👊"}, - {":purple_heart:", ":purple heart:", "💜"}, - {":purse:", ":purse:", "👛"}, - {":pushpin:", ":pushpin:", "📌"}, - {":put_litter_in_its_place:", ":litter in bin sign:", "🚮"}, - {":qatar:", ":flag qatar:", "🇶🇦"}, - {":question:", ":question mark:", "❓"}, - {":rabbit:", ":rabbit face:", "🐰"}, - {":rabbit2:", ":rabbit:", "🐇"}, - {":racehorse:", ":horse:", "🐎"}, - {":racing_car:", ":racing car:", "🏎"}, - {":radio:", ":radio:", "📻"}, - {":radio_button:", ":radio button:", "🔘"}, - {":radioactive:", ":radioactive:", "☢"}, - {":rage:", ":pouting face:", "😡"}, - {":railway_car:", ":railway car:", "🚃"}, - {":railway_track:", ":railway track:", "🛤"}, - {":rainbow:", ":rainbow:", "🌈"}, - {":rainbow_flag:", ":rainbow flag:", "🏳️‍🌈"}, - {":raised_back_of_hand:", ":raised back of hand:", "🤚"}, - {":raised_hand:", ":raised hand:", "✋"}, - {":raised_hand_with_fingers_splayed:", ":hand with fingers splayed:", "🖐"}, - {":raised_hands:", ":raising hands:", "🙌"}, - {":raising_hand:", ":person raising hand:", "🙋"}, - {":raising_hand_man:", ":man raising hand:", "🙋‍♂️"}, - {":raising_hand_woman:", ":person raising hand:", "🙋"}, - {":ram:", ":ram:", "🐏"}, - {":ramen:", ":steaming bowl:", "🍜"}, - {":rat:", ":rat:", "🐀"}, - {":record_button:", ":record button:", "⏺"}, - {":recycle:", ":recycling symbol:", "♻"}, - {":red_car:", ":automobile:", "🚗"}, - {":red_circle:", ":red circle:", "🔴"}, - {":registered:", ":registered:", "®"}, - {":relaxed:", ":smiling face:", "☺"}, - {":relieved:", ":relieved face:", "😌"}, - {":reminder_ribbon:", ":reminder ribbon:", "🎗"}, - {":repeat:", ":repeat button:", "🔁"}, - {":repeat_one:", ":repeat single button:", "🔂"}, - {":rescue_worker_helmet:", ":rescue worker's helmet:", "⛑"}, - {":restroom:", ":restroom:", "🚻"}, - {":reunion:", ":flag réunion:", "🇷🇪"}, - {":revolving_hearts:", ":revolving hearts:", "💞"}, - {":rewind:", ":fast reverse button:", "⏪"}, - {":rhinoceros:", ":rhinoceros:", "🦏"}, - {":ribbon:", ":ribbon:", "🎀"}, - {":rice:", ":cooked rice:", "🍚"}, - {":rice_ball:", ":rice ball:", "🍙"}, - {":rice_cracker:", ":rice cracker:", "🍘"}, - {":rice_scene:", ":moon viewing ceremony:", "🎑"}, - {":right_anger_bubble:", ":right anger bubble:", "🗯"}, - {":ring:", ":ring:", "💍"}, - {":robot:", ":robot face:", "🤖"}, - {":rocket:", ":rocket:", "🚀"}, - {":rofl:", ":rolling on the floor laughing:", "🤣"}, - {":roll_eyes:", ":face with rolling eyes:", "🙄"}, - {":roller_coaster:", ":roller coaster:", "🎢"}, - {":romania:", ":flag romania:", "🇷🇴"}, - {":rooster:", ":rooster:", "🐓"}, - {":rose:", ":rose:", "🌹"}, - {":rosette:", ":rosette:", "🏵"}, - {":rotating_light:", ":police car light:", "🚨"}, - {":round_pushpin:", ":round pushpin:", "📍"}, - {":rowboat:", ":person rowing boat:", "🚣"}, - {":rowing_man:", ":person rowing boat:", "🚣"}, - {":rowing_woman:", ":woman rowing boat:", "🚣‍♀️"}, - {":ru:", ":flag russia:", "🇷🇺"}, - {":rugby_football:", ":rugby football:", "🏉"}, - {":runner:", ":person running:", "🏃"}, - {":running:", ":person running:", "🏃"}, - {":running_man:", ":person running:", "🏃"}, - {":running_shirt_with_sash:", ":running shirt:", "🎽"}, - {":running_woman:", ":woman running:", "🏃‍♀️"}, - {":rwanda:", ":flag rwanda:", "🇷🇼"}, - {":sa:", ":japanese \"service charge\" button:", "🈂"}, - {":sagittarius:", ":sagittarius:", "♐"}, - {":sailboat:", ":sailboat:", "⛵"}, - {":sake:", ":sake:", "🍶"}, - {":samoa:", ":flag samoa:", "🇼🇸"}, - {":san_marino:", ":flag san marino:", "🇸🇲"}, - {":sandal:", ":woman's sandal:", "👡"}, - {":santa:", ":santa claus:", "🎅"}, - {":sao_tome_principe:", ":flag são tomé & prÃncipe:", "🇸🇹"}, - {":satellite:", ":satellite antenna:", "📡"}, - {":satisfied:", ":grinning squinting face:", "😆"}, - {":saudi_arabia:", ":flag saudi arabia:", "🇸🇦"}, - {":saxophone:", ":saxophone:", "🎷"}, - {":school:", ":school:", "🏫"}, - {":school_satchel:", ":backpack:", "🎒"}, - {":scissors:", ":scissors:", "✂"}, - {":scorpion:", ":scorpion:", "🦂"}, - {":scorpius:", ":scorpio:", "♏"}, - {":scream:", ":face screaming in fear:", "😱"}, - {":scream_cat:", ":weary cat face:", "🙀"}, - {":scroll:", ":scroll:", "📜"}, - {":seat:", ":seat:", "💺"}, - {":secret:", ":japanese \"secret\" button:", "㊙"}, - {":see_no_evil:", ":see-no-evil monkey:", "🙈"}, - {":seedling:", ":seedling:", "🌱"}, - {":selfie:", ":selfie:", "🤳"}, - {":senegal:", ":flag senegal:", "🇸🇳"}, - {":serbia:", ":flag serbia:", "🇷🇸"}, - {":seven:", ":keycap 7:", "7️⃣"}, - {":seychelles:", ":flag seychelles:", "🇸🇨"}, - {":shallow_pan_of_food:", ":shallow pan of food:", "🥘"}, - {":shamrock:", ":shamrock:", "☘"}, - {":shark:", ":shark:", "🦈"}, - {":shaved_ice:", ":shaved ice:", "🍧"}, - {":sheep:", ":ewe:", "🐑"}, - {":shell:", ":spiral shell:", "🐚"}, - {":shield:", ":shield:", "🛡"}, - {":shinto_shrine:", ":shinto shrine:", "⛩"}, - {":ship:", ":ship:", "🚢"}, - {":shirt:", ":t-shirt:", "👕"}, - {":shit:", ":pile of poo:", "💩"}, - {":shoe:", ":man's shoe:", "👞"}, - {":shopping:", ":shopping bags:", "🛍"}, - {":shopping_cart:", ":shopping cart:", "🛒"}, - {":shower:", ":shower:", "🚿"}, - {":shrimp:", ":shrimp:", "🦐"}, - {":sierra_leone:", ":flag sierra leone:", "🇸🇱"}, - {":signal_strength:", ":antenna bars:", "📶"}, - {":singapore:", ":flag singapore:", "🇸🇬"}, - {":sint_maarten:", ":flag sint maarten:", "🇸🇽"}, - {":six:", ":keycap 6:", "6️⃣"}, - {":six_pointed_star:", ":dotted six-pointed star:", "🔯"}, - {":ski:", ":skis:", "🎿"}, - {":skier:", ":skier:", "⛷"}, - {":skull:", ":skull:", "💀"}, - {":skull_and_crossbones:", ":skull and crossbones:", "☠"}, - {":sleeping:", ":sleeping face:", "😴"}, - {":sleeping_bed:", ":person in bed:", "🛌"}, - {":sleepy:", ":sleepy face:", "😪"}, - {":slightly_frowning_face:", ":slightly frowning face:", "🙁"}, - {":slightly_smiling_face:", ":slightly smiling face:", "🙂"}, - {":slot_machine:", ":slot machine:", "🎰"}, - {":slovakia:", ":flag slovakia:", "🇸🇰"}, - {":slovenia:", ":flag slovenia:", "🇸🇮"}, - {":small_airplane:", ":small airplane:", "🛩"}, - {":small_blue_diamond:", ":small blue diamond:", "🔹"}, - {":small_orange_diamond:", ":small orange diamond:", "🔸"}, - {":small_red_triangle:", ":red triangle pointed up:", "🔺"}, - {":small_red_triangle_down:", ":red triangle pointed down:", "🔻"}, - {":smile:", ":grinning face with smiling eyes:", "😄"}, - {":smile_cat:", ":grinning cat face with smiling eyes:", "😸"}, - {":smiley:", ":grinning face with big eyes:", "😃"}, - {":smiley_cat:", ":grinning cat face:", "😺"}, - {":smiling_imp:", ":smiling face with horns:", "😈"}, - {":smirk:", ":smirking face:", "😏"}, - {":smirk_cat:", ":cat face with wry smile:", "😼"}, - {":smoking:", ":cigarette:", "🚬"}, - {":snail:", ":snail:", "🐌"}, - {":snake:", ":snake:", "🐍"}, - {":sneezing_face:", ":sneezing face:", "🤧"}, - {":snowboarder:", ":snowboarder:", "🏂"}, - {":snowflake:", ":snowflake:", "❄"}, - {":snowman:", ":snowman without snow:", "⛄"}, - {":snowman_with_snow:", ":snowman:", "☃"}, - {":sob:", ":loudly crying face:", "😭"}, - {":soccer:", ":soccer ball:", "⚽"}, - {":solomon_islands:", ":flag solomon islands:", "🇸🇧"}, - {":somalia:", ":flag somalia:", "🇸🇴"}, - {":soon:", ":soon arrow:", "🔜"}, - {":sos:", ":sos button:", "🆘"}, - {":sound:", ":speaker medium volume:", "🔉"}, - {":south_africa:", ":flag south africa:", "🇿🇦"}, - {":south_georgia_south_sandwich_islands:", ":flag south georgia & south sandwich islands:", "🇬🇸"}, - {":south_sudan:", ":flag south sudan:", "🇸🇸"}, - {":space_invader:", ":alien monster:", "👾"}, - {":spades:", ":spade suit:", "♠"}, - {":spaghetti:", ":spaghetti:", "🍝"}, - {":sparkle:", ":sparkle:", "❇"}, - {":sparkler:", ":sparkler:", "🎇"}, - {":sparkles:", ":sparkles:", "✨"}, - {":sparkling_heart:", ":sparkling heart:", "💖"}, - {":speak_no_evil:", ":speak-no-evil monkey:", "🙊"}, - {":speaker:", ":speaker low volume:", "🔈"}, - {":speaking_head:", ":speaking head:", "🗣"}, - {":speech_balloon:", ":speech balloon:", "💬"}, - {":speedboat:", ":speedboat:", "🚤"}, - {":spider:", ":spider:", "🕷"}, - {":spider_web:", ":spider web:", "🕸"}, - {":spiral_calendar:", ":spiral calendar:", "🗓"}, - {":spiral_notepad:", ":spiral notepad:", "🗒"}, - {":spoon:", ":spoon:", "🥄"}, - {":squid:", ":squid:", "🦑"}, - {":sri_lanka:", ":flag sri lanka:", "🇱🇰"}, - {":st_barthelemy:", ":flag st. barthélemy:", "🇧🇱"}, - {":st_helena:", ":flag st. helena:", "🇸🇭"}, - {":st_kitts_nevis:", ":flag st. kitts & nevis:", "🇰🇳"}, - {":st_lucia:", ":flag st. lucia:", "🇱🇨"}, - {":st_pierre_miquelon:", ":flag st. pierre & miquelon:", "🇵🇲"}, - {":st_vincent_grenadines:", ":flag st. vincent & grenadines:", "🇻🇨"}, - {":stadium:", ":stadium:", "🏟"}, - {":star:", ":star:", "⭐"}, - {":star2:", ":glowing star:", "🌟"}, - {":star_and_crescent:", ":star and crescent:", "☪"}, - {":star_of_david:", ":star of david:", "✡"}, - {":stars:", ":shooting star:", "🌠"}, - {":station:", ":station:", "🚉"}, - {":statue_of_liberty:", ":statue of liberty:", "🗽"}, - {":steam_locomotive:", ":locomotive:", "🚂"}, - {":stew:", ":pot of food:", "🍲"}, - {":stop_button:", ":stop button:", "⏹"}, - {":stop_sign:", ":stop sign:", "🛑"}, - {":stopwatch:", ":stopwatch:", "⏱"}, - {":straight_ruler:", ":straight ruler:", "📏"}, - {":strawberry:", ":strawberry:", "🍓"}, - {":stuck_out_tongue:", ":face with tongue:", "😛"}, - {":stuck_out_tongue_closed_eyes:", ":squinting face with tongue:", "😝"}, - {":stuck_out_tongue_winking_eye:", ":winking face with tongue:", "😜"}, - {":studio_microphone:", ":studio microphone:", "🎙"}, - {":stuffed_flatbread:", ":stuffed flatbread:", "🥙"}, - {":sudan:", ":flag sudan:", "🇸🇩"}, - {":sun_behind_large_cloud:", ":sun behind large cloud:", "🌥"}, - {":sun_behind_rain_cloud:", ":sun behind rain cloud:", "🌦"}, - {":sun_behind_small_cloud:", ":sun behind small cloud:", "🌤"}, - {":sun_with_face:", ":sun with face:", "🌞"}, - {":sunflower:", ":sunflower:", "🌻"}, - {":sunglasses:", ":smiling face with sunglasses:", "😎"}, - {":sunny:", ":sun:", "☀"}, - {":sunrise:", ":sunrise:", "🌅"}, - {":sunrise_over_mountains:", ":sunrise over mountains:", "🌄"}, - {":surfer:", ":person surfing:", "🏄"}, - {":surfing_man:", ":person surfing:", "🏄"}, - {":surfing_woman:", ":woman surfing:", "🏄‍♀️"}, - {":suriname:", ":flag suriname:", "🇸🇷"}, - {":sushi:", ":sushi:", "🍣"}, - {":suspension_railway:", ":suspension railway:", "🚟"}, - {":swaziland:", ":flag swaziland:", "🇸🇿"}, - {":sweat:", ":downcast face with sweat:", "😓"}, - {":sweat_drops:", ":sweat droplets:", "💦"}, - {":sweat_smile:", ":grinning face with sweat:", "😅"}, - {":sweden:", ":flag sweden:", "🇸🇪"}, - {":sweet_potato:", ":roasted sweet potato:", "🍠"}, - {":swimmer:", ":person swimming:", "🏊"}, - {":swimming_man:", ":person swimming:", "🏊"}, - {":swimming_woman:", ":woman swimming:", "🏊‍♀️"}, - {":switzerland:", ":flag switzerland:", "🇨🇭"}, - {":symbols:", ":input symbols:", "🔣"}, - {":synagogue:", ":synagogue:", "🕍"}, - {":syria:", ":flag syria:", "🇸🇾"}, - {":syringe:", ":syringe:", "💉"}, - {":taco:", ":taco:", "🌮"}, - {":tada:", ":party popper:", "🎉"}, - {":taiwan:", ":flag taiwan:", "🇹🇼"}, - {":tajikistan:", ":flag tajikistan:", "🇹🇯"}, - {":tanabata_tree:", ":tanabata tree:", "🎋"}, - {":tangerine:", ":tangerine:", "🍊"}, - {":tanzania:", ":flag tanzania:", "🇹🇿"}, - {":taurus:", ":taurus:", "♉"}, - {":taxi:", ":taxi:", "🚕"}, - {":tea:", ":teacup without handle:", "🍵"}, - {":telephone:", ":telephone:", "☎"}, - {":telephone_receiver:", ":telephone receiver:", "📞"}, - {":telescope:", ":telescope:", "🔭"}, - {":tennis:", ":tennis:", "🎾"}, - {":tent:", ":tent:", "⛺"}, - {":thailand:", ":flag thailand:", "🇹🇭"}, - {":thermometer:", ":thermometer:", "🌡"}, - {":thinking:", ":thinking face:", "🤔"}, - {":thought_balloon:", ":thought balloon:", "💭"}, - {":three:", ":keycap 3:", "3️⃣"}, - {":thumbsdown:", ":thumbs down:", "👎"}, - {":thumbsup:", ":thumbs up:", "👍"}, - {":ticket:", ":ticket:", "🎫"}, - {":tickets:", ":admission tickets:", "🎟"}, - {":tiger:", ":tiger face:", "🐯"}, - {":tiger2:", ":tiger:", "🐅"}, - {":timer_clock:", ":timer clock:", "⏲"}, - {":timor_leste:", ":flag timor-leste:", "🇹🇱"}, - {":tipping_hand_man:", ":man tipping hand:", "💁‍♂️"}, - {":tipping_hand_woman:", ":person tipping hand:", "💁"}, - {":tired_face:", ":tired face:", "😫"}, - {":tm:", ":trade mark:", "™"}, - {":togo:", ":flag togo:", "🇹🇬"}, - {":toilet:", ":toilet:", "🚽"}, - {":tokelau:", ":flag tokelau:", "🇹🇰"}, - {":tokyo_tower:", ":tokyo tower:", "🗼"}, - {":tomato:", ":tomato:", "🍅"}, - {":tonga:", ":flag tonga:", "🇹🇴"}, - {":tongue:", ":tongue:", "👅"}, - {":top:", ":top arrow:", "🔝"}, - {":tophat:", ":top hat:", "🎩"}, - {":tornado:", ":tornado:", "🌪"}, - {":tr:", ":flag turkey:", "🇹🇷"}, - {":trackball:", ":trackball:", "🖲"}, - {":tractor:", ":tractor:", "🚜"}, - {":traffic_light:", ":horizontal traffic light:", "🚥"}, - {":train:", ":tram car:", "🚋"}, - {":train2:", ":train:", "🚆"}, - {":tram:", ":tram:", "🚊"}, - {":triangular_flag_on_post:", ":triangular flag:", "🚩"}, - {":triangular_ruler:", ":triangular ruler:", "📐"}, - {":trident:", ":trident emblem:", "🔱"}, - {":trinidad_tobago:", ":flag trinidad & tobago:", "🇹🇹"}, - {":triumph:", ":face with steam from nose:", "😤"}, - {":trolleybus:", ":trolleybus:", "🚎"}, - {":trophy:", ":trophy:", "🏆"}, - {":tropical_drink:", ":tropical drink:", "🍹"}, - {":tropical_fish:", ":tropical fish:", "🐠"}, - {":truck:", ":delivery truck:", "🚚"}, - {":trumpet:", ":trumpet:", "🎺"}, - {":tshirt:", ":t-shirt:", "👕"}, - {":tulip:", ":tulip:", "🌷"}, - {":tumbler_glass:", ":tumbler glass:", "🥃"}, - {":tunisia:", ":flag tunisia:", "🇹🇳"}, - {":turkey:", ":turkey:", "🦃"}, - {":turkmenistan:", ":flag turkmenistan:", "🇹🇲"}, - {":turks_caicos_islands:", ":flag turks & caicos islands:", "🇹🇨"}, - {":turtle:", ":turtle:", "🐢"}, - {":tuvalu:", ":flag tuvalu:", "🇹🇻"}, - {":tv:", ":television:", "📺"}, - {":twisted_rightwards_arrows:", ":shuffle tracks button:", "🔀"}, - {":two:", ":keycap 2:", "2️⃣"}, - {":two_hearts:", ":two hearts:", "💕"}, - {":two_men_holding_hands:", ":two men holding hands:", "👬"}, - {":two_women_holding_hands:", ":two women holding hands:", "👭"}, - {":u5272:", ":japanese \"discount\" button:", "🈹"}, - {":u5408:", ":japanese \"passing grade\" button:", "🈴"}, - {":u55b6:", ":japanese \"open for business\" button:", "🈺"}, - {":u6307:", ":japanese \"reserved\" button:", "🈯"}, - {":u6708:", ":japanese \"monthly amount\" button:", "🈷"}, - {":u6709:", ":japanese \"not free of charge\" button:", "🈶"}, - {":u6e80:", ":japanese \"no vacancy\" button:", "🈵"}, - {":u7121:", ":japanese \"free of charge\" button:", "🈚"}, - {":u7533:", ":japanese \"application\" button:", "🈸"}, - {":u7981:", ":japanese \"prohibited\" button:", "🈲"}, - {":u7a7a:", ":japanese \"vacancy\" button:", "🈳"}, - {":uganda:", ":flag uganda:", "🇺🇬"}, - {":uk:", ":flag united kingdom:", "🇬🇧"}, - {":ukraine:", ":flag ukraine:", "🇺🇦"}, - {":umbrella:", ":umbrella with rain drops:", "☔"}, - {":unamused:", ":unamused face:", "😒"}, - {":underage:", ":no one under eighteen:", "🔞"}, - {":unicorn:", ":unicorn face:", "🦄"}, - {":united_arab_emirates:", ":flag united arab emirates:", "🇦🇪"}, - {":unlock:", ":unlocked:", "🔓"}, - {":up:", ":up! button:", "🆙"}, - {":upside_down_face:", ":upside-down face:", "🙃"}, - {":uruguay:", ":flag uruguay:", "🇺🇾"}, - {":us:", ":flag united states:", "🇺🇸"}, - {":us_virgin_islands:", ":flag u.s. virgin islands:", "🇻🇮"}, - {":uzbekistan:", ":flag uzbekistan:", "🇺🇿"}, - {":v:", ":victory hand:", "✌"}, - {":vanuatu:", ":flag vanuatu:", "🇻🇺"}, - {":vatican_city:", ":flag vatican city:", "🇻🇦"}, - {":venezuela:", ":flag venezuela:", "🇻🇪"}, - {":vertical_traffic_light:", ":vertical traffic light:", "🚦"}, - {":vhs:", ":videocassette:", "📼"}, - {":vibration_mode:", ":vibration mode:", "📳"}, - {":video_camera:", ":video camera:", "📹"}, - {":video_game:", ":video game:", "🎮"}, - {":vietnam:", ":flag vietnam:", "🇻🇳"}, - {":violin:", ":violin:", "🎻"}, - {":virgo:", ":virgo:", "♍"}, - {":volcano:", ":volcano:", "🌋"}, - {":volleyball:", ":volleyball:", "🏐"}, - {":vs:", ":vs button:", "🆚"}, - {":vulcan_salute:", ":vulcan salute:", "🖖"}, - {":walking:", ":person walking:", "🚶"}, - {":walking_man:", ":person walking:", "🚶"}, - {":walking_woman:", ":woman walking:", "🚶‍♀️"}, - {":wallis_futuna:", ":flag wallis & futuna:", "🇼🇫"}, - {":waning_crescent_moon:", ":waning crescent moon:", "🌘"}, - {":waning_gibbous_moon:", ":waning gibbous moon:", "🌖"}, - {":warning:", ":warning:", "⚠"}, - {":wastebasket:", ":wastebasket:", "🗑"}, - {":watch:", ":watch:", "⌚"}, - {":water_buffalo:", ":water buffalo:", "🐃"}, - {":watermelon:", ":watermelon:", "🍉"}, - {":wave:", ":waving hand:", "👋"}, - {":wavy_dash:", ":wavy dash:", "〰"}, - {":waxing_crescent_moon:", ":waxing crescent moon:", "🌒"}, - {":waxing_gibbous_moon:", ":waxing gibbous moon:", "🌔"}, - {":wc:", ":water closet:", "🚾"}, - {":weary:", ":weary face:", "😩"}, - {":wedding:", ":wedding:", "💒"}, - {":weight_lifting_man:", ":person lifting weights:", "🏋"}, - {":weight_lifting_woman:", ":woman lifting weights:", "🏋️‍♀️"}, - {":western_sahara:", ":flag western sahara:", "🇪🇭"}, - {":whale:", ":spouting whale:", "🐳"}, - {":whale2:", ":whale:", "🐋"}, - {":wheel_of_dharma:", ":wheel of dharma:", "☸"}, - {":wheelchair:", ":wheelchair symbol:", "♿"}, - {":white_check_mark:", ":white heavy check mark:", "✅"}, - {":white_circle:", ":white circle:", "⚪"}, - {":white_flag:", ":white flag:", "🏳"}, - {":white_flower:", ":white flower:", "💮"}, - {":white_large_square:", ":white large square:", "⬜"}, - {":white_medium_small_square:", ":white medium-small square:", "◽"}, - {":white_medium_square:", ":white medium square:", "◻"}, - {":white_small_square:", ":white small square:", "▫"}, - {":white_square_button:", ":white square button:", "🔳"}, - {":wilted_flower:", ":wilted flower:", "🥀"}, - {":wind_chime:", ":wind chime:", "🎐"}, - {":wind_face:", ":wind face:", "🌬"}, - {":wine_glass:", ":wine glass:", "🍷"}, - {":wink:", ":winking face:", "😉"}, - {":wolf:", ":wolf face:", "🐺"}, - {":woman:", ":woman:", "👩"}, - {":woman_artist:", ":woman artist:", "👩‍🎨"}, - {":woman_astronaut:", ":woman astronaut:", "👩‍🚀"}, - {":woman_cartwheeling:", ":woman cartwheeling:", "🤸‍♀️"}, - {":woman_cook:", ":woman cook:", "👩‍🍳"}, - {":woman_facepalming:", ":woman facepalming:", "🤦‍♀️"}, - {":woman_factory_worker:", ":woman factory worker:", "👩‍🏭"}, - {":woman_farmer:", ":woman farmer:", "👩‍🌾"}, - {":woman_firefighter:", ":woman firefighter:", "👩‍🚒"}, - {":woman_health_worker:", ":woman health worker:", "👩‍⚕️"}, - {":woman_judge:", ":woman judge:", "👩‍⚖️"}, - {":woman_juggling:", ":woman juggling:", "🤹‍♀️"}, - {":woman_mechanic:", ":woman mechanic:", "👩‍🔧"}, - {":woman_office_worker:", ":woman office worker:", "👩‍💼"}, - {":woman_pilot:", ":woman pilot:", "👩‍✈️"}, - {":woman_playing_handball:", ":woman playing handball:", "🤾‍♀️"}, - {":woman_playing_water_polo:", ":woman playing water polo:", "🤽‍♀️"}, - {":woman_scientist:", ":woman scientist:", "👩‍🔬"}, - {":woman_shrugging:", ":woman shrugging:", "🤷‍♀️"}, - {":woman_singer:", ":woman singer:", "👩‍🎤"}, - {":woman_student:", ":woman student:", "👩‍🎓"}, - {":woman_teacher:", ":woman teacher:", "👩‍🏫"}, - {":woman_technologist:", ":woman technologist:", "👩‍💻"}, - {":woman_with_turban:", ":woman wearing turban:", "👳‍♀️"}, - {":womans_clothes:", ":woman's clothes:", "👚"}, - {":womans_hat:", ":woman's hat:", "👒"}, - {":women_wrestling:", ":women wrestling:", "🤼‍♀️"}, - {":womens:", ":women's room:", "🚺"}, - {":world_map:", ":world map:", "🗺"}, - {":worried:", ":worried face:", "😟"}, - {":wrench:", ":wrench:", "🔧"}, - {":writing_hand:", ":writing hand:", "✍"}, - {":x:", ":cross mark:", "❌"}, - {":yellow_heart:", ":yellow heart:", "💛"}, - {":yemen:", ":flag yemen:", "🇾🇪"}, - {":yen:", ":yen banknote:", "💴"}, - {":yin_yang:", ":yin yang:", "☯"}, - {":yum:", ":face savoring food:", "😋"}, - {":zambia:", ":flag zambia:", "🇿🇲"}, - {":zap:", ":high voltage:", "⚡"}, - {":zero:", ":keycap 0:", "0️⃣"}, - {":zimbabwe:", ":flag zimbabwe:", "🇿🇼"}, - {":zipper_mouth_face:", ":zipper-mouth face:", "🤐"}, - {":zzz:", ":zzz:", "💤"}, - {"", ":smiling face with 3 hearts:", "🥰"}, - {"", ":star-struck:", "🤩"}, - {"", ":zany face:", "🤪"}, - {"", ":face with hand over mouth:", "🤭"}, - {"", ":shushing face:", "🤫"}, - {"", ":face with raised eyebrow:", "🤨"}, - {"", ":face vomiting:", "🤮"}, - {"", ":hot face:", "🥵"}, - {"", ":cold face:", "🥶"}, - {"", ":woozy face:", "🥴"}, - {"", ":exploding head:", "🤯"}, - {"", ":partying face:", "🥳"}, - {"", ":face with monocle:", "🧐"}, - {"", ":pleading face:", "🥺"}, - {"", ":face with symbols on mouth:", "🤬"}, - {"", ":orange heart:", "🧡"}, - {"", ":left speech bubble:", "🗨"}, - {"", ":love-you gesture:", "🤟"}, - {"", ":palms up together:", "🤲"}, - {"", ":leg:", "🦵"}, - {"", ":foot:", "🦶"}, - {"", ":brain:", "🧠"}, - {"", ":tooth:", "🦷"}, - {"", ":bone:", "🦴"}, - {"", ":eye:", "👁"}, - {"", ":child:", "🧒"}, - {"", ":person:", "🧑"}, - {"", ":man blond hair:", "👱‍♂️"}, - {"", ":man red hair:", "👨‍🦰"}, - {"", ":man curly hair:", "👨‍🦱"}, - {"", ":man white hair:", "👨‍🦳"}, - {"", ":man bald:", "👨‍🦲"}, - {"", ":man beard:", "🧔"}, - {"", ":woman red hair:", "👩‍🦰"}, - {"", ":woman curly hair:", "👩‍🦱"}, - {"", ":woman white hair:", "👩‍🦳"}, - {"", ":woman bald:", "👩‍🦲"}, - {"", ":older person:", "🧓"}, - {"", ":woman frowning:", "🙍‍♀️"}, - {"", ":woman pouting:", "🙎‍♀️"}, - {"", ":woman gesturing no:", "🙅‍♀️"}, - {"", ":woman gesturing ok:", "🙆‍♀️"}, - {"", ":woman tipping hand:", "💁‍♀️"}, - {"", ":woman raising hand:", "🙋‍♀️"}, - {"", ":man bowing:", "🙇‍♂️"}, - {"", ":person facepalming:", "🤦"}, - {"", ":person shrugging:", "🤷"}, - {"", ":man police officer:", "👮‍♂️"}, - {"", ":man detective:", "🕵️‍♂️"}, - {"", ":man guard:", "💂‍♂️"}, - {"", ":man construction worker:", "👷‍♂️"}, - {"", ":man wearing turban:", "👳‍♂️"}, - {"", ":woman with headscarf:", "🧕"}, - {"", ":breast-feeding:", "🤱"}, - {"", ":superhero:", "🦸"}, - {"", ":man superhero:", "🦸‍♂️"}, - {"", ":woman superhero:", "🦸‍♀️"}, - {"", ":supervillain:", "🦹"}, - {"", ":man supervillain:", "🦹‍♂️"}, - {"", ":woman supervillain:", "🦹‍♀️"}, - {"", ":mage:", "🧙"}, - {"", ":man mage:", "🧙‍♂️"}, - {"", ":woman mage:", "🧙‍♀️"}, - {"", ":fairy:", "🧚"}, - {"", ":man fairy:", "🧚‍♂️"}, - {"", ":woman fairy:", "🧚‍♀️"}, - {"", ":vampire:", "🧛"}, - {"", ":man vampire:", "🧛‍♂️"}, - {"", ":woman vampire:", "🧛‍♀️"}, - {"", ":merperson:", "🧜"}, - {"", ":merman:", "🧜‍♂️"}, - {"", ":mermaid:", "🧜‍♀️"}, - {"", ":elf:", "🧝"}, - {"", ":man elf:", "🧝‍♂️"}, - {"", ":woman elf:", "🧝‍♀️"}, - {"", ":genie:", "🧞"}, - {"", ":man genie:", "🧞‍♂️"}, - {"", ":woman genie:", "🧞‍♀️"}, - {"", ":zombie:", "🧟"}, - {"", ":man zombie:", "🧟‍♂️"}, - {"", ":woman zombie:", "🧟‍♀️"}, - {"", ":woman getting massage:", "💆‍♀️"}, - {"", ":woman getting haircut:", "💇‍♀️"}, - {"", ":man walking:", "🚶‍♂️"}, - {"", ":man running:", "🏃‍♂️"}, - {"", ":women with bunny ears:", "👯‍♀️"}, - {"", ":person in steamy room:", "🧖"}, - {"", ":man in steamy room:", "🧖‍♂️"}, - {"", ":woman in steamy room:", "🧖‍♀️"}, - {"", ":person climbing:", "🧗"}, - {"", ":man climbing:", "🧗‍♂️"}, - {"", ":woman climbing:", "🧗‍♀️"}, - {"", ":man golfing:", "🏌️‍♂️"}, - {"", ":man surfing:", "🏄‍♂️"}, - {"", ":man rowing boat:", "🚣‍♂️"}, - {"", ":man swimming:", "🏊‍♂️"}, - {"", ":man bouncing ball:", "⛹️‍♂️"}, - {"", ":man lifting weights:", "🏋️‍♂️"}, - {"", ":man biking:", "🚴‍♂️"}, - {"", ":man mountain biking:", "🚵‍♂️"}, - {"", ":person cartwheeling:", "🤸"}, - {"", ":people wrestling:", "🤼"}, - {"", ":person playing water polo:", "🤽"}, - {"", ":person playing handball:", "🤾"}, - {"", ":person juggling:", "🤹"}, - {"", ":person in lotus position:", "🧘"}, - {"", ":man in lotus position:", "🧘‍♂️"}, - {"", ":woman in lotus position:", "🧘‍♀️"}, - {"", ":kiss woman, man:", "👩‍❤️‍💋‍👨"}, - {"", ":couple with heart woman, man:", "👩‍❤️‍👨"}, - {"", ":couple with heart man, man:", "👨‍❤️‍👨"}, - {"", ":couple with heart woman, woman:", "👩‍❤️‍👩"}, - {"", ":family man, boy:", "👨‍👦"}, - {"", ":family man, boy, boy:", "👨‍👦‍👦"}, - {"", ":family man, girl:", "👨‍👧"}, - {"", ":family man, girl, boy:", "👨‍👧‍👦"}, - {"", ":family man, girl, girl:", "👨‍👧‍👧"}, - {"", ":family woman, boy:", "👩‍👦"}, - {"", ":family woman, boy, boy:", "👩‍👦‍👦"}, - {"", ":family woman, girl:", "👩‍👧"}, - {"", ":family woman, girl, boy:", "👩‍👧‍👦"}, - {"", ":family woman, girl, girl:", "👩‍👧‍👧"}, - {"", ":red hair:", "🦰"}, - {"", ":curly hair:", "🦱"}, - {"", ":white hair:", "🦳"}, - {"", ":bald:", "🦲"}, - {"", ":female sign:", "♀"}, - {"", ":male sign:", "♂"}, - {"", ":raccoon:", "🦝"}, - {"", ":zebra:", "🦓"}, - {"", ":llama:", "🦙"}, - {"", ":giraffe:", "🦒"}, - {"", ":hippopotamus:", "🦛"}, - {"", ":hedgehog:", "🦔"}, - {"", ":kangaroo:", "🦘"}, - {"", ":badger:", "🦡"}, - {"", ":swan:", "🦢"}, - {"", ":peacock:", "🦚"}, - {"", ":parrot:", "🦜"}, - {"", ":sauropod:", "🦕"}, - {"", ":t-rex:", "🦖"}, - {"", ":cricket:", "🦗"}, - {"", ":mosquito:", "🦟"}, - {"", ":microbe:", "🦠"}, - {"", ":mango:", "🥭"}, - {"", ":coconut:", "🥥"}, - {"", ":leafy green:", "🥬"}, - {"", ":broccoli:", "🥦"}, - {"", ":pretzel:", "🥨"}, - {"", ":bagel:", "🥯"}, - {"", ":cut of meat:", "🥩"}, - {"", ":sandwich:", "🥪"}, - {"", ":bowl with spoon:", "🥣"}, - {"", ":salt:", "🧂"}, - {"", ":canned food:", "🥫"}, - {"", ":moon cake:", "🥮"}, - {"", ":dumpling:", "🥟"}, - {"", ":fortune cookie:", "🥠"}, - {"", ":takeout box:", "🥡"}, - {"", ":lobster:", "🦞"}, - {"", ":cupcake:", "🧁"}, - {"", ":pie:", "🥧"}, - {"", ":cup with straw:", "🥤"}, - {"", ":chopsticks:", "🥢"}, - {"", ":compass:", "🧭"}, - {"", ":brick:", "🧱"}, - {"", ":skateboard:", "🛹"}, - {"", ":flying saucer:", "🛸"}, - {"", ":luggage:", "🧳"}, - {"", ":firecracker:", "🧨"}, - {"", ":red envelope:", "🧧"}, - {"", ":softball:", "🥎"}, - {"", ":flying disc:", "🥏"}, - {"", ":lacrosse:", "🥍"}, - {"", ":sled:", "🛷"}, - {"", ":curling stone:", "🥌"}, - {"", ":nazar amulet:", "🧿"}, - {"", ":jigsaw:", "🧩"}, - {"", ":teddy bear:", "🧸"}, - {"", ":chess pawn:", "♟"}, - {"", ":thread:", "🧵"}, - {"", ":yarn:", "🧶"}, - {"", ":goggles:", "🥽"}, - {"", ":lab coat:", "🥼"}, - {"", ":scarf:", "🧣"}, - {"", ":gloves:", "🧤"}, - {"", ":coat:", "🧥"}, - {"", ":socks:", "🧦"}, - {"", ":hiking boot:", "🥾"}, - {"", ":flat shoe:", "🥿"}, - {"", ":billed cap:", "🧢"}, - {"", ":abacus:", "🧮"}, - {"", ":receipt:", "🧾"}, - {"", ":toolbox:", "🧰"}, - {"", ":magnet:", "🧲"}, - {"", ":test tube:", "🧪"}, - {"", ":petri dish:", "🧫"}, - {"", ":dna:", "🧬"}, - {"", ":lotion bottle:", "🧴"}, - {"", ":safety pin:", "🧷"}, - {"", ":broom:", "🧹"}, - {"", ":basket:", "🧺"}, - {"", ":roll of paper:", "🧻"}, - {"", ":soap:", "🧼"}, - {"", ":sponge:", "🧽"}, - {"", ":fire extinguisher:", "🧯"}, - {"", ":eject button:", "⏏"}, - {"", ":medical symbol:", "⚕"}, - {"", ":infinity:", "♾"}, - {"", ":pirate flag:", "🏴‍☠️"}, - {"", ":flag ascension island:", "🇦🇨"}, - {"", ":flag bouvet island:", "🇧🇻"}, - {"", ":flag clipperton island:", "🇨🇵"}, - {"", ":flag diego garcia:", "🇩🇬"}, - {"", ":flag ceuta & melilla:", "🇪🇦"}, - {"", ":flag heard & mcdonald islands:", "🇭🇲"}, - {"", ":flag st. martin:", "🇲🇫"}, - {"", ":flag svalbard & jan mayen:", "🇸🇯"}, - {"", ":flag tristan da cunha:", "🇹🇦"}, - {"", ":flag u.s. outlying islands:", "🇺🇲"}, - {"", ":flag united nations:", "🇺🇳"}, - {"", ":flag england:", "🏴󠁧󠁢󠁥󠁮󠁧󠁿"}, - {"", ":flag scotland:", "🏴󠁧󠁢󠁳󠁣󠁴󠁿"}, - {"", ":flag wales:", "🏴󠁧󠁢󠁷󠁬󠁳󠁿"}, - {"", ":waving hand light skin tone:", "👋🏻"}, - {"", ":waving hand medium-light skin tone:", "👋🏼"}, - {"", ":waving hand medium skin tone:", "👋🏽"}, - {"", ":waving hand medium-dark skin tone:", "👋🏾"}, - {"", ":waving hand dark skin tone:", "👋🏿"}, - {"", ":raised back of hand light skin tone:", "🤚🏻"}, - {"", ":raised back of hand medium-light skin tone:", "🤚🏼"}, - {"", ":raised back of hand medium skin tone:", "🤚🏽"}, - {"", ":raised back of hand medium-dark skin tone:", "🤚🏾"}, - {"", ":raised back of hand dark skin tone:", "🤚🏿"}, - {"", ":hand with fingers splayed light skin tone:", "🖐🏻"}, - {"", ":hand with fingers splayed medium-light skin tone:", "🖐🏼"}, - {"", ":hand with fingers splayed medium skin tone:", "🖐🏽"}, - {"", ":hand with fingers splayed medium-dark skin tone:", "🖐🏾"}, - {"", ":hand with fingers splayed dark skin tone:", "🖐🏿"}, - {"", ":raised hand light skin tone:", "✋🏻"}, - {"", ":raised hand medium-light skin tone:", "✋🏼"}, - {"", ":raised hand medium skin tone:", "✋🏽"}, - {"", ":raised hand medium-dark skin tone:", "✋🏾"}, - {"", ":raised hand dark skin tone:", "✋🏿"}, - {"", ":vulcan salute light skin tone:", "🖖🏻"}, - {"", ":vulcan salute medium-light skin tone:", "🖖🏼"}, - {"", ":vulcan salute medium skin tone:", "🖖🏽"}, - {"", ":vulcan salute medium-dark skin tone:", "🖖🏾"}, - {"", ":vulcan salute dark skin tone:", "🖖🏿"}, - {"", ":ok hand light skin tone:", "👌🏻"}, - {"", ":ok hand medium-light skin tone:", "👌🏼"}, - {"", ":ok hand medium skin tone:", "👌🏽"}, - {"", ":ok hand medium-dark skin tone:", "👌🏾"}, - {"", ":ok hand dark skin tone:", "👌🏿"}, - {"", ":victory hand light skin tone:", "✌🏻"}, - {"", ":victory hand medium-light skin tone:", "✌🏼"}, - {"", ":victory hand medium skin tone:", "✌🏽"}, - {"", ":victory hand medium-dark skin tone:", "✌🏾"}, - {"", ":victory hand dark skin tone:", "✌🏿"}, - {"", ":crossed fingers light skin tone:", "🤞🏻"}, - {"", ":crossed fingers medium-light skin tone:", "🤞🏼"}, - {"", ":crossed fingers medium skin tone:", "🤞🏽"}, - {"", ":crossed fingers medium-dark skin tone:", "🤞🏾"}, - {"", ":crossed fingers dark skin tone:", "🤞🏿"}, - {"", ":love-you gesture light skin tone:", "🤟🏻"}, - {"", ":love-you gesture medium-light skin tone:", "🤟🏼"}, - {"", ":love-you gesture medium skin tone:", "🤟🏽"}, - {"", ":love-you gesture medium-dark skin tone:", "🤟🏾"}, - {"", ":love-you gesture dark skin tone:", "🤟🏿"}, - {"", ":sign of the horns light skin tone:", "🤘🏻"}, - {"", ":sign of the horns medium-light skin tone:", "🤘🏼"}, - {"", ":sign of the horns medium skin tone:", "🤘🏽"}, - {"", ":sign of the horns medium-dark skin tone:", "🤘🏾"}, - {"", ":sign of the horns dark skin tone:", "🤘🏿"}, - {"", ":call me hand light skin tone:", "🤙🏻"}, - {"", ":call me hand medium-light skin tone:", "🤙🏼"}, - {"", ":call me hand medium skin tone:", "🤙🏽"}, - {"", ":call me hand medium-dark skin tone:", "🤙🏾"}, - {"", ":call me hand dark skin tone:", "🤙🏿"}, - {"", ":backhand index pointing left light skin tone:", "👈🏻"}, - {"", ":backhand index pointing left medium-light skin tone:", "👈🏼"}, - {"", ":backhand index pointing left medium skin tone:", "👈🏽"}, - {"", ":backhand index pointing left medium-dark skin tone:", "👈🏾"}, - {"", ":backhand index pointing left dark skin tone:", "👈🏿"}, - {"", ":backhand index pointing right light skin tone:", "👉🏻"}, - {"", ":backhand index pointing right medium-light skin tone:", "👉🏼"}, - {"", ":backhand index pointing right medium skin tone:", "👉🏽"}, - {"", ":backhand index pointing right medium-dark skin tone:", "👉🏾"}, - {"", ":backhand index pointing right dark skin tone:", "👉🏿"}, - {"", ":backhand index pointing up light skin tone:", "👆🏻"}, - {"", ":backhand index pointing up medium-light skin tone:", "👆🏼"}, - {"", ":backhand index pointing up medium skin tone:", "👆🏽"}, - {"", ":backhand index pointing up medium-dark skin tone:", "👆🏾"}, - {"", ":backhand index pointing up dark skin tone:", "👆🏿"}, - {"", ":middle finger light skin tone:", "🖕🏻"}, - {"", ":middle finger medium-light skin tone:", "🖕🏼"}, - {"", ":middle finger medium skin tone:", "🖕🏽"}, - {"", ":middle finger medium-dark skin tone:", "🖕🏾"}, - {"", ":middle finger dark skin tone:", "🖕🏿"}, - {"", ":backhand index pointing down light skin tone:", "👇🏻"}, - {"", ":backhand index pointing down medium-light skin tone:", "👇🏼"}, - {"", ":backhand index pointing down medium skin tone:", "👇🏽"}, - {"", ":backhand index pointing down medium-dark skin tone:", "👇🏾"}, - {"", ":backhand index pointing down dark skin tone:", "👇🏿"}, - {"", ":index pointing up light skin tone:", "☝🏻"}, - {"", ":index pointing up medium-light skin tone:", "☝🏼"}, - {"", ":index pointing up medium skin tone:", "☝🏽"}, - {"", ":index pointing up medium-dark skin tone:", "☝🏾"}, - {"", ":index pointing up dark skin tone:", "☝🏿"}, - {"", ":thumbs up light skin tone:", "👍🏻"}, - {"", ":thumbs up medium-light skin tone:", "👍🏼"}, - {"", ":thumbs up medium skin tone:", "👍🏽"}, - {"", ":thumbs up medium-dark skin tone:", "👍🏾"}, - {"", ":thumbs up dark skin tone:", "👍🏿"}, - {"", ":thumbs down light skin tone:", "👎🏻"}, - {"", ":thumbs down medium-light skin tone:", "👎🏼"}, - {"", ":thumbs down medium skin tone:", "👎🏽"}, - {"", ":thumbs down medium-dark skin tone:", "👎🏾"}, - {"", ":thumbs down dark skin tone:", "👎🏿"}, - {"", ":raised fist light skin tone:", "✊🏻"}, - {"", ":raised fist medium-light skin tone:", "✊🏼"}, - {"", ":raised fist medium skin tone:", "✊🏽"}, - {"", ":raised fist medium-dark skin tone:", "✊🏾"}, - {"", ":raised fist dark skin tone:", "✊🏿"}, - {"", ":oncoming fist light skin tone:", "👊🏻"}, - {"", ":oncoming fist medium-light skin tone:", "👊🏼"}, - {"", ":oncoming fist medium skin tone:", "👊🏽"}, - {"", ":oncoming fist medium-dark skin tone:", "👊🏾"}, - {"", ":oncoming fist dark skin tone:", "👊🏿"}, - {"", ":left-facing fist light skin tone:", "🤛🏻"}, - {"", ":left-facing fist medium-light skin tone:", "🤛🏼"}, - {"", ":left-facing fist medium skin tone:", "🤛🏽"}, - {"", ":left-facing fist medium-dark skin tone:", "🤛🏾"}, - {"", ":left-facing fist dark skin tone:", "🤛🏿"}, - {"", ":right-facing fist light skin tone:", "🤜🏻"}, - {"", ":right-facing fist medium-light skin tone:", "🤜🏼"}, - {"", ":right-facing fist medium skin tone:", "🤜🏽"}, - {"", ":right-facing fist medium-dark skin tone:", "🤜🏾"}, - {"", ":right-facing fist dark skin tone:", "🤜🏿"}, - {"", ":clapping hands light skin tone:", "👏🏻"}, - {"", ":clapping hands medium-light skin tone:", "👏🏼"}, - {"", ":clapping hands medium skin tone:", "👏🏽"}, - {"", ":clapping hands medium-dark skin tone:", "👏🏾"}, - {"", ":clapping hands dark skin tone:", "👏🏿"}, - {"", ":raising hands light skin tone:", "🙌🏻"}, - {"", ":raising hands medium-light skin tone:", "🙌🏼"}, - {"", ":raising hands medium skin tone:", "🙌🏽"}, - {"", ":raising hands medium-dark skin tone:", "🙌🏾"}, - {"", ":raising hands dark skin tone:", "🙌🏿"}, - {"", ":open hands light skin tone:", "👐🏻"}, - {"", ":open hands medium-light skin tone:", "👐🏼"}, - {"", ":open hands medium skin tone:", "👐🏽"}, - {"", ":open hands medium-dark skin tone:", "👐🏾"}, - {"", ":open hands dark skin tone:", "👐🏿"}, - {"", ":palms up together light skin tone:", "🤲🏻"}, - {"", ":palms up together medium-light skin tone:", "🤲🏼"}, - {"", ":palms up together medium skin tone:", "🤲🏽"}, - {"", ":palms up together medium-dark skin tone:", "🤲🏾"}, - {"", ":palms up together dark skin tone:", "🤲🏿"}, - {"", ":folded hands light skin tone:", "🙏🏻"}, - {"", ":folded hands medium-light skin tone:", "🙏🏼"}, - {"", ":folded hands medium skin tone:", "🙏🏽"}, - {"", ":folded hands medium-dark skin tone:", "🙏🏾"}, - {"", ":folded hands dark skin tone:", "🙏🏿"}, - {"", ":writing hand light skin tone:", "✍🏻"}, - {"", ":writing hand medium-light skin tone:", "✍🏼"}, - {"", ":writing hand medium skin tone:", "✍🏽"}, - {"", ":writing hand medium-dark skin tone:", "✍🏾"}, - {"", ":writing hand dark skin tone:", "✍🏿"}, - {"", ":nail polish light skin tone:", "💅🏻"}, - {"", ":nail polish medium-light skin tone:", "💅🏼"}, - {"", ":nail polish medium skin tone:", "💅🏽"}, - {"", ":nail polish medium-dark skin tone:", "💅🏾"}, - {"", ":nail polish dark skin tone:", "💅🏿"}, - {"", ":selfie light skin tone:", "🤳🏻"}, - {"", ":selfie medium-light skin tone:", "🤳🏼"}, - {"", ":selfie medium skin tone:", "🤳🏽"}, - {"", ":selfie medium-dark skin tone:", "🤳🏾"}, - {"", ":selfie dark skin tone:", "🤳🏿"}, - {"", ":flexed biceps light skin tone:", "💪🏻"}, - {"", ":flexed biceps medium-light skin tone:", "💪🏼"}, - {"", ":flexed biceps medium skin tone:", "💪🏽"}, - {"", ":flexed biceps medium-dark skin tone:", "💪🏾"}, - {"", ":flexed biceps dark skin tone:", "💪🏿"}, - {"", ":leg light skin tone:", "🦵🏻"}, - {"", ":leg medium-light skin tone:", "🦵🏼"}, - {"", ":leg medium skin tone:", "🦵🏽"}, - {"", ":leg medium-dark skin tone:", "🦵🏾"}, - {"", ":leg dark skin tone:", "🦵🏿"}, - {"", ":foot light skin tone:", "🦶🏻"}, - {"", ":foot medium-light skin tone:", "🦶🏼"}, - {"", ":foot medium skin tone:", "🦶🏽"}, - {"", ":foot medium-dark skin tone:", "🦶🏾"}, - {"", ":foot dark skin tone:", "🦶🏿"}, - {"", ":ear light skin tone:", "👂🏻"}, - {"", ":ear medium-light skin tone:", "👂🏼"}, - {"", ":ear medium skin tone:", "👂🏽"}, - {"", ":ear medium-dark skin tone:", "👂🏾"}, - {"", ":ear dark skin tone:", "👂🏿"}, - {"", ":nose light skin tone:", "👃🏻"}, - {"", ":nose medium-light skin tone:", "👃🏼"}, - {"", ":nose medium skin tone:", "👃🏽"}, - {"", ":nose medium-dark skin tone:", "👃🏾"}, - {"", ":nose dark skin tone:", "👃🏿"}, - {"", ":baby light skin tone:", "👶🏻"}, - {"", ":baby medium-light skin tone:", "👶🏼"}, - {"", ":baby medium skin tone:", "👶🏽"}, - {"", ":baby medium-dark skin tone:", "👶🏾"}, - {"", ":baby dark skin tone:", "👶🏿"}, - {"", ":child light skin tone:", "🧒🏻"}, - {"", ":child medium-light skin tone:", "🧒🏼"}, - {"", ":child medium skin tone:", "🧒🏽"}, - {"", ":child medium-dark skin tone:", "🧒🏾"}, - {"", ":child dark skin tone:", "🧒🏿"}, - {"", ":boy light skin tone:", "👦🏻"}, - {"", ":boy medium-light skin tone:", "👦🏼"}, - {"", ":boy medium skin tone:", "👦🏽"}, - {"", ":boy medium-dark skin tone:", "👦🏾"}, - {"", ":boy dark skin tone:", "👦🏿"}, - {"", ":girl light skin tone:", "👧🏻"}, - {"", ":girl medium-light skin tone:", "👧🏼"}, - {"", ":girl medium skin tone:", "👧🏽"}, - {"", ":girl medium-dark skin tone:", "👧🏾"}, - {"", ":girl dark skin tone:", "👧🏿"}, - {"", ":person light skin tone:", "🧑🏻"}, - {"", ":person medium-light skin tone:", "🧑🏼"}, - {"", ":person medium skin tone:", "🧑🏽"}, - {"", ":person medium-dark skin tone:", "🧑🏾"}, - {"", ":person dark skin tone:", "🧑🏿"}, - {"", ":person light skin tone, blond hair:", "👱🏻"}, - {"", ":person medium-light skin tone, blond hair:", "👱🏼"}, - {"", ":person medium skin tone, blond hair:", "👱🏽"}, - {"", ":person medium-dark skin tone, blond hair:", "👱🏾"}, - {"", ":person dark skin tone, blond hair:", "👱🏿"}, - {"", ":man light skin tone:", "👨🏻"}, - {"", ":man medium-light skin tone:", "👨🏼"}, - {"", ":man medium skin tone:", "👨🏽"}, - {"", ":man medium-dark skin tone:", "👨🏾"}, - {"", ":man dark skin tone:", "👨🏿"}, - {"", ":man light skin tone, blond hair:", "👱🏻‍♂️"}, - {"", ":man medium-light skin tone, blond hair:", "👱🏼‍♂️"}, - {"", ":man medium skin tone, blond hair:", "👱🏽‍♂️"}, - {"", ":man medium-dark skin tone, blond hair:", "👱🏾‍♂️"}, - {"", ":man dark skin tone, blond hair:", "👱🏿‍♂️"}, - {"", ":man light skin tone, red hair:", "👨🏻‍🦰"}, - {"", ":man medium-light skin tone, red hair:", "👨🏼‍🦰"}, - {"", ":man medium skin tone, red hair:", "👨🏽‍🦰"}, - {"", ":man medium-dark skin tone, red hair:", "👨🏾‍🦰"}, - {"", ":man dark skin tone, red hair:", "👨🏿‍🦰"}, - {"", ":man light skin tone, curly hair:", "👨🏻‍🦱"}, - {"", ":man medium-light skin tone, curly hair:", "👨🏼‍🦱"}, - {"", ":man medium skin tone, curly hair:", "👨🏽‍🦱"}, - {"", ":man medium-dark skin tone, curly hair:", "👨🏾‍🦱"}, - {"", ":man dark skin tone, curly hair:", "👨🏿‍🦱"}, - {"", ":man light skin tone, white hair:", "👨🏻‍🦳"}, - {"", ":man medium-light skin tone, white hair:", "👨🏼‍🦳"}, - {"", ":man medium skin tone, white hair:", "👨🏽‍🦳"}, - {"", ":man medium-dark skin tone, white hair:", "👨🏾‍🦳"}, - {"", ":man dark skin tone, white hair:", "👨🏿‍🦳"}, - {"", ":man light skin tone, bald:", "👨🏻‍🦲"}, - {"", ":man medium-light skin tone, bald:", "👨🏼‍🦲"}, - {"", ":man medium skin tone, bald:", "👨🏽‍🦲"}, - {"", ":man medium-dark skin tone, bald:", "👨🏾‍🦲"}, - {"", ":man dark skin tone, bald:", "👨🏿‍🦲"}, - {"", ":man light skin tone, beard:", "🧔🏻"}, - {"", ":man medium-light skin tone, beard:", "🧔🏼"}, - {"", ":man medium skin tone, beard:", "🧔🏽"}, - {"", ":man medium-dark skin tone, beard:", "🧔🏾"}, - {"", ":man dark skin tone, beard:", "🧔🏿"}, - {"", ":woman light skin tone:", "👩🏻"}, - {"", ":woman medium-light skin tone:", "👩🏼"}, - {"", ":woman medium skin tone:", "👩🏽"}, - {"", ":woman medium-dark skin tone:", "👩🏾"}, - {"", ":woman dark skin tone:", "👩🏿"}, - {"", ":woman light skin tone, blond hair:", "👱🏻‍♀️"}, - {"", ":woman medium-light skin tone, blond hair:", "👱🏼‍♀️"}, - {"", ":woman medium skin tone, blond hair:", "👱🏽‍♀️"}, - {"", ":woman medium-dark skin tone, blond hair:", "👱🏾‍♀️"}, - {"", ":woman dark skin tone, blond hair:", "👱🏿‍♀️"}, - {"", ":woman light skin tone, red hair:", "👩🏻‍🦰"}, - {"", ":woman medium-light skin tone, red hair:", "👩🏼‍🦰"}, - {"", ":woman medium skin tone, red hair:", "👩🏽‍🦰"}, - {"", ":woman medium-dark skin tone, red hair:", "👩🏾‍🦰"}, - {"", ":woman dark skin tone, red hair:", "👩🏿‍🦰"}, - {"", ":woman light skin tone, curly hair:", "👩🏻‍🦱"}, - {"", ":woman medium-light skin tone, curly hair:", "👩🏼‍🦱"}, - {"", ":woman medium skin tone, curly hair:", "👩🏽‍🦱"}, - {"", ":woman medium-dark skin tone, curly hair:", "👩🏾‍🦱"}, - {"", ":woman dark skin tone, curly hair:", "👩🏿‍🦱"}, - {"", ":woman light skin tone, white hair:", "👩🏻‍🦳"}, - {"", ":woman medium-light skin tone, white hair:", "👩🏼‍🦳"}, - {"", ":woman medium skin tone, white hair:", "👩🏽‍🦳"}, - {"", ":woman medium-dark skin tone, white hair:", "👩🏾‍🦳"}, - {"", ":woman dark skin tone, white hair:", "👩🏿‍🦳"}, - {"", ":woman light skin tone, bald:", "👩🏻‍🦲"}, - {"", ":woman medium-light skin tone, bald:", "👩🏼‍🦲"}, - {"", ":woman medium skin tone, bald:", "👩🏽‍🦲"}, - {"", ":woman medium-dark skin tone, bald:", "👩🏾‍🦲"}, - {"", ":woman dark skin tone, bald:", "👩🏿‍🦲"}, - {"", ":older person light skin tone:", "🧓🏻"}, - {"", ":older person medium-light skin tone:", "🧓🏼"}, - {"", ":older person medium skin tone:", "🧓🏽"}, - {"", ":older person medium-dark skin tone:", "🧓🏾"}, - {"", ":older person dark skin tone:", "🧓🏿"}, - {"", ":old man light skin tone:", "👴🏻"}, - {"", ":old man medium-light skin tone:", "👴🏼"}, - {"", ":old man medium skin tone:", "👴🏽"}, - {"", ":old man medium-dark skin tone:", "👴🏾"}, - {"", ":old man dark skin tone:", "👴🏿"}, - {"", ":old woman light skin tone:", "👵🏻"}, - {"", ":old woman medium-light skin tone:", "👵🏼"}, - {"", ":old woman medium skin tone:", "👵🏽"}, - {"", ":old woman medium-dark skin tone:", "👵🏾"}, - {"", ":old woman dark skin tone:", "👵🏿"}, - {"", ":person frowning light skin tone:", "🙍🏻"}, - {"", ":person frowning medium-light skin tone:", "🙍🏼"}, - {"", ":person frowning medium skin tone:", "🙍🏽"}, - {"", ":person frowning medium-dark skin tone:", "🙍🏾"}, - {"", ":person frowning dark skin tone:", "🙍🏿"}, - {"", ":man frowning light skin tone:", "🙍🏻‍♂️"}, - {"", ":man frowning medium-light skin tone:", "🙍🏼‍♂️"}, - {"", ":man frowning medium skin tone:", "🙍🏽‍♂️"}, - {"", ":man frowning medium-dark skin tone:", "🙍🏾‍♂️"}, - {"", ":man frowning dark skin tone:", "🙍🏿‍♂️"}, - {"", ":woman frowning light skin tone:", "🙍🏻‍♀️"}, - {"", ":woman frowning medium-light skin tone:", "🙍🏼‍♀️"}, - {"", ":woman frowning medium skin tone:", "🙍🏽‍♀️"}, - {"", ":woman frowning medium-dark skin tone:", "🙍🏾‍♀️"}, - {"", ":woman frowning dark skin tone:", "🙍🏿‍♀️"}, - {"", ":person pouting light skin tone:", "🙎🏻"}, - {"", ":person pouting medium-light skin tone:", "🙎🏼"}, - {"", ":person pouting medium skin tone:", "🙎🏽"}, - {"", ":person pouting medium-dark skin tone:", "🙎🏾"}, - {"", ":person pouting dark skin tone:", "🙎🏿"}, - {"", ":man pouting light skin tone:", "🙎🏻‍♂️"}, - {"", ":man pouting medium-light skin tone:", "🙎🏼‍♂️"}, - {"", ":man pouting medium skin tone:", "🙎🏽‍♂️"}, - {"", ":man pouting medium-dark skin tone:", "🙎🏾‍♂️"}, - {"", ":man pouting dark skin tone:", "🙎🏿‍♂️"}, - {"", ":woman pouting light skin tone:", "🙎🏻‍♀️"}, - {"", ":woman pouting medium-light skin tone:", "🙎🏼‍♀️"}, - {"", ":woman pouting medium skin tone:", "🙎🏽‍♀️"}, - {"", ":woman pouting medium-dark skin tone:", "🙎🏾‍♀️"}, - {"", ":woman pouting dark skin tone:", "🙎🏿‍♀️"}, - {"", ":person gesturing no light skin tone:", "🙅🏻"}, - {"", ":person gesturing no medium-light skin tone:", "🙅🏼"}, - {"", ":person gesturing no medium skin tone:", "🙅🏽"}, - {"", ":person gesturing no medium-dark skin tone:", "🙅🏾"}, - {"", ":person gesturing no dark skin tone:", "🙅🏿"}, - {"", ":man gesturing no light skin tone:", "🙅🏻‍♂️"}, - {"", ":man gesturing no medium-light skin tone:", "🙅🏼‍♂️"}, - {"", ":man gesturing no medium skin tone:", "🙅🏽‍♂️"}, - {"", ":man gesturing no medium-dark skin tone:", "🙅🏾‍♂️"}, - {"", ":man gesturing no dark skin tone:", "🙅🏿‍♂️"}, - {"", ":woman gesturing no light skin tone:", "🙅🏻‍♀️"}, - {"", ":woman gesturing no medium-light skin tone:", "🙅🏼‍♀️"}, - {"", ":woman gesturing no medium skin tone:", "🙅🏽‍♀️"}, - {"", ":woman gesturing no medium-dark skin tone:", "🙅🏾‍♀️"}, - {"", ":woman gesturing no dark skin tone:", "🙅🏿‍♀️"}, - {"", ":person gesturing ok light skin tone:", "🙆🏻"}, - {"", ":person gesturing ok medium-light skin tone:", "🙆🏼"}, - {"", ":person gesturing ok medium skin tone:", "🙆🏽"}, - {"", ":person gesturing ok medium-dark skin tone:", "🙆🏾"}, - {"", ":person gesturing ok dark skin tone:", "🙆🏿"}, - {"", ":man gesturing ok light skin tone:", "🙆🏻‍♂️"}, - {"", ":man gesturing ok medium-light skin tone:", "🙆🏼‍♂️"}, - {"", ":man gesturing ok medium skin tone:", "🙆🏽‍♂️"}, - {"", ":man gesturing ok medium-dark skin tone:", "🙆🏾‍♂️"}, - {"", ":man gesturing ok dark skin tone:", "🙆🏿‍♂️"}, - {"", ":woman gesturing ok light skin tone:", "🙆🏻‍♀️"}, - {"", ":woman gesturing ok medium-light skin tone:", "🙆🏼‍♀️"}, - {"", ":woman gesturing ok medium skin tone:", "🙆🏽‍♀️"}, - {"", ":woman gesturing ok medium-dark skin tone:", "🙆🏾‍♀️"}, - {"", ":woman gesturing ok dark skin tone:", "🙆🏿‍♀️"}, - {"", ":person tipping hand light skin tone:", "💁🏻"}, - {"", ":person tipping hand medium-light skin tone:", "💁🏼"}, - {"", ":person tipping hand medium skin tone:", "💁🏽"}, - {"", ":person tipping hand medium-dark skin tone:", "💁🏾"}, - {"", ":person tipping hand dark skin tone:", "💁🏿"}, - {"", ":man tipping hand light skin tone:", "💁🏻‍♂️"}, - {"", ":man tipping hand medium-light skin tone:", "💁🏼‍♂️"}, - {"", ":man tipping hand medium skin tone:", "💁🏽‍♂️"}, - {"", ":man tipping hand medium-dark skin tone:", "💁🏾‍♂️"}, - {"", ":man tipping hand dark skin tone:", "💁🏿‍♂️"}, - {"", ":woman tipping hand light skin tone:", "💁🏻‍♀️"}, - {"", ":woman tipping hand medium-light skin tone:", "💁🏼‍♀️"}, - {"", ":woman tipping hand medium skin tone:", "💁🏽‍♀️"}, - {"", ":woman tipping hand medium-dark skin tone:", "💁🏾‍♀️"}, - {"", ":woman tipping hand dark skin tone:", "💁🏿‍♀️"}, - {"", ":person raising hand light skin tone:", "🙋🏻"}, - {"", ":person raising hand medium-light skin tone:", "🙋🏼"}, - {"", ":person raising hand medium skin tone:", "🙋🏽"}, - {"", ":person raising hand medium-dark skin tone:", "🙋🏾"}, - {"", ":person raising hand dark skin tone:", "🙋🏿"}, - {"", ":man raising hand light skin tone:", "🙋🏻‍♂️"}, - {"", ":man raising hand medium-light skin tone:", "🙋🏼‍♂️"}, - {"", ":man raising hand medium skin tone:", "🙋🏽‍♂️"}, - {"", ":man raising hand medium-dark skin tone:", "🙋🏾‍♂️"}, - {"", ":man raising hand dark skin tone:", "🙋🏿‍♂️"}, - {"", ":woman raising hand light skin tone:", "🙋🏻‍♀️"}, - {"", ":woman raising hand medium-light skin tone:", "🙋🏼‍♀️"}, - {"", ":woman raising hand medium skin tone:", "🙋🏽‍♀️"}, - {"", ":woman raising hand medium-dark skin tone:", "🙋🏾‍♀️"}, - {"", ":woman raising hand dark skin tone:", "🙋🏿‍♀️"}, - {"", ":person bowing light skin tone:", "🙇🏻"}, - {"", ":person bowing medium-light skin tone:", "🙇🏼"}, - {"", ":person bowing medium skin tone:", "🙇🏽"}, - {"", ":person bowing medium-dark skin tone:", "🙇🏾"}, - {"", ":person bowing dark skin tone:", "🙇🏿"}, - {"", ":man bowing light skin tone:", "🙇🏻‍♂️"}, - {"", ":man bowing medium-light skin tone:", "🙇🏼‍♂️"}, - {"", ":man bowing medium skin tone:", "🙇🏽‍♂️"}, - {"", ":man bowing medium-dark skin tone:", "🙇🏾‍♂️"}, - {"", ":man bowing dark skin tone:", "🙇🏿‍♂️"}, - {"", ":woman bowing light skin tone:", "🙇🏻‍♀️"}, - {"", ":woman bowing medium-light skin tone:", "🙇🏼‍♀️"}, - {"", ":woman bowing medium skin tone:", "🙇🏽‍♀️"}, - {"", ":woman bowing medium-dark skin tone:", "🙇🏾‍♀️"}, - {"", ":woman bowing dark skin tone:", "🙇🏿‍♀️"}, - {"", ":person facepalming light skin tone:", "🤦🏻"}, - {"", ":person facepalming medium-light skin tone:", "🤦🏼"}, - {"", ":person facepalming medium skin tone:", "🤦🏽"}, - {"", ":person facepalming medium-dark skin tone:", "🤦🏾"}, - {"", ":person facepalming dark skin tone:", "🤦🏿"}, - {"", ":man facepalming light skin tone:", "🤦🏻‍♂️"}, - {"", ":man facepalming medium-light skin tone:", "🤦🏼‍♂️"}, - {"", ":man facepalming medium skin tone:", "🤦🏽‍♂️"}, - {"", ":man facepalming medium-dark skin tone:", "🤦🏾‍♂️"}, - {"", ":man facepalming dark skin tone:", "🤦🏿‍♂️"}, - {"", ":woman facepalming light skin tone:", "🤦🏻‍♀️"}, - {"", ":woman facepalming medium-light skin tone:", "🤦🏼‍♀️"}, - {"", ":woman facepalming medium skin tone:", "🤦🏽‍♀️"}, - {"", ":woman facepalming medium-dark skin tone:", "🤦🏾‍♀️"}, - {"", ":woman facepalming dark skin tone:", "🤦🏿‍♀️"}, - {"", ":person shrugging light skin tone:", "🤷🏻"}, - {"", ":person shrugging medium-light skin tone:", "🤷🏼"}, - {"", ":person shrugging medium skin tone:", "🤷🏽"}, - {"", ":person shrugging medium-dark skin tone:", "🤷🏾"}, - {"", ":person shrugging dark skin tone:", "🤷🏿"}, - {"", ":man shrugging light skin tone:", "🤷🏻‍♂️"}, - {"", ":man shrugging medium-light skin tone:", "🤷🏼‍♂️"}, - {"", ":man shrugging medium skin tone:", "🤷🏽‍♂️"}, - {"", ":man shrugging medium-dark skin tone:", "🤷🏾‍♂️"}, - {"", ":man shrugging dark skin tone:", "🤷🏿‍♂️"}, - {"", ":woman shrugging light skin tone:", "🤷🏻‍♀️"}, - {"", ":woman shrugging medium-light skin tone:", "🤷🏼‍♀️"}, - {"", ":woman shrugging medium skin tone:", "🤷🏽‍♀️"}, - {"", ":woman shrugging medium-dark skin tone:", "🤷🏾‍♀️"}, - {"", ":woman shrugging dark skin tone:", "🤷🏿‍♀️"}, - {"", ":man health worker light skin tone:", "👨🏻‍⚕️"}, - {"", ":man health worker medium-light skin tone:", "👨🏼‍⚕️"}, - {"", ":man health worker medium skin tone:", "👨🏽‍⚕️"}, - {"", ":man health worker medium-dark skin tone:", "👨🏾‍⚕️"}, - {"", ":man health worker dark skin tone:", "👨🏿‍⚕️"}, - {"", ":woman health worker light skin tone:", "👩🏻‍⚕️"}, - {"", ":woman health worker medium-light skin tone:", "👩🏼‍⚕️"}, - {"", ":woman health worker medium skin tone:", "👩🏽‍⚕️"}, - {"", ":woman health worker medium-dark skin tone:", "👩🏾‍⚕️"}, - {"", ":woman health worker dark skin tone:", "👩🏿‍⚕️"}, - {"", ":man student light skin tone:", "👨🏻‍🎓"}, - {"", ":man student medium-light skin tone:", "👨🏼‍🎓"}, - {"", ":man student medium skin tone:", "👨🏽‍🎓"}, - {"", ":man student medium-dark skin tone:", "👨🏾‍🎓"}, - {"", ":man student dark skin tone:", "👨🏿‍🎓"}, - {"", ":woman student light skin tone:", "👩🏻‍🎓"}, - {"", ":woman student medium-light skin tone:", "👩🏼‍🎓"}, - {"", ":woman student medium skin tone:", "👩🏽‍🎓"}, - {"", ":woman student medium-dark skin tone:", "👩🏾‍🎓"}, - {"", ":woman student dark skin tone:", "👩🏿‍🎓"}, - {"", ":man teacher light skin tone:", "👨🏻‍🏫"}, - {"", ":man teacher medium-light skin tone:", "👨🏼‍🏫"}, - {"", ":man teacher medium skin tone:", "👨🏽‍🏫"}, - {"", ":man teacher medium-dark skin tone:", "👨🏾‍🏫"}, - {"", ":man teacher dark skin tone:", "👨🏿‍🏫"}, - {"", ":woman teacher light skin tone:", "👩🏻‍🏫"}, - {"", ":woman teacher medium-light skin tone:", "👩🏼‍🏫"}, - {"", ":woman teacher medium skin tone:", "👩🏽‍🏫"}, - {"", ":woman teacher medium-dark skin tone:", "👩🏾‍🏫"}, - {"", ":woman teacher dark skin tone:", "👩🏿‍🏫"}, - {"", ":man judge light skin tone:", "👨🏻‍⚖️"}, - {"", ":man judge medium-light skin tone:", "👨🏼‍⚖️"}, - {"", ":man judge medium skin tone:", "👨🏽‍⚖️"}, - {"", ":man judge medium-dark skin tone:", "👨🏾‍⚖️"}, - {"", ":man judge dark skin tone:", "👨🏿‍⚖️"}, - {"", ":woman judge light skin tone:", "👩🏻‍⚖️"}, - {"", ":woman judge medium-light skin tone:", "👩🏼‍⚖️"}, - {"", ":woman judge medium skin tone:", "👩🏽‍⚖️"}, - {"", ":woman judge medium-dark skin tone:", "👩🏾‍⚖️"}, - {"", ":woman judge dark skin tone:", "👩🏿‍⚖️"}, - {"", ":man farmer light skin tone:", "👨🏻‍🌾"}, - {"", ":man farmer medium-light skin tone:", "👨🏼‍🌾"}, - {"", ":man farmer medium skin tone:", "👨🏽‍🌾"}, - {"", ":man farmer medium-dark skin tone:", "👨🏾‍🌾"}, - {"", ":man farmer dark skin tone:", "👨🏿‍🌾"}, - {"", ":woman farmer light skin tone:", "👩🏻‍🌾"}, - {"", ":woman farmer medium-light skin tone:", "👩🏼‍🌾"}, - {"", ":woman farmer medium skin tone:", "👩🏽‍🌾"}, - {"", ":woman farmer medium-dark skin tone:", "👩🏾‍🌾"}, - {"", ":woman farmer dark skin tone:", "👩🏿‍🌾"}, - {"", ":man cook light skin tone:", "👨🏻‍🍳"}, - {"", ":man cook medium-light skin tone:", "👨🏼‍🍳"}, - {"", ":man cook medium skin tone:", "👨🏽‍🍳"}, - {"", ":man cook medium-dark skin tone:", "👨🏾‍🍳"}, - {"", ":man cook dark skin tone:", "👨🏿‍🍳"}, - {"", ":woman cook light skin tone:", "👩🏻‍🍳"}, - {"", ":woman cook medium-light skin tone:", "👩🏼‍🍳"}, - {"", ":woman cook medium skin tone:", "👩🏽‍🍳"}, - {"", ":woman cook medium-dark skin tone:", "👩🏾‍🍳"}, - {"", ":woman cook dark skin tone:", "👩🏿‍🍳"}, - {"", ":man mechanic light skin tone:", "👨🏻‍🔧"}, - {"", ":man mechanic medium-light skin tone:", "👨🏼‍🔧"}, - {"", ":man mechanic medium skin tone:", "👨🏽‍🔧"}, - {"", ":man mechanic medium-dark skin tone:", "👨🏾‍🔧"}, - {"", ":man mechanic dark skin tone:", "👨🏿‍🔧"}, - {"", ":woman mechanic light skin tone:", "👩🏻‍🔧"}, - {"", ":woman mechanic medium-light skin tone:", "👩🏼‍🔧"}, - {"", ":woman mechanic medium skin tone:", "👩🏽‍🔧"}, - {"", ":woman mechanic medium-dark skin tone:", "👩🏾‍🔧"}, - {"", ":woman mechanic dark skin tone:", "👩🏿‍🔧"}, - {"", ":man factory worker light skin tone:", "👨🏻‍🏭"}, - {"", ":man factory worker medium-light skin tone:", "👨🏼‍🏭"}, - {"", ":man factory worker medium skin tone:", "👨🏽‍🏭"}, - {"", ":man factory worker medium-dark skin tone:", "👨🏾‍🏭"}, - {"", ":man factory worker dark skin tone:", "👨🏿‍🏭"}, - {"", ":woman factory worker light skin tone:", "👩🏻‍🏭"}, - {"", ":woman factory worker medium-light skin tone:", "👩🏼‍🏭"}, - {"", ":woman factory worker medium skin tone:", "👩🏽‍🏭"}, - {"", ":woman factory worker medium-dark skin tone:", "👩🏾‍🏭"}, - {"", ":woman factory worker dark skin tone:", "👩🏿‍🏭"}, - {"", ":man office worker light skin tone:", "👨🏻‍💼"}, - {"", ":man office worker medium-light skin tone:", "👨🏼‍💼"}, - {"", ":man office worker medium skin tone:", "👨🏽‍💼"}, - {"", ":man office worker medium-dark skin tone:", "👨🏾‍💼"}, - {"", ":man office worker dark skin tone:", "👨🏿‍💼"}, - {"", ":woman office worker light skin tone:", "👩🏻‍💼"}, - {"", ":woman office worker medium-light skin tone:", "👩🏼‍💼"}, - {"", ":woman office worker medium skin tone:", "👩🏽‍💼"}, - {"", ":woman office worker medium-dark skin tone:", "👩🏾‍💼"}, - {"", ":woman office worker dark skin tone:", "👩🏿‍💼"}, - {"", ":man scientist light skin tone:", "👨🏻‍🔬"}, - {"", ":man scientist medium-light skin tone:", "👨🏼‍🔬"}, - {"", ":man scientist medium skin tone:", "👨🏽‍🔬"}, - {"", ":man scientist medium-dark skin tone:", "👨🏾‍🔬"}, - {"", ":man scientist dark skin tone:", "👨🏿‍🔬"}, - {"", ":woman scientist light skin tone:", "👩🏻‍🔬"}, - {"", ":woman scientist medium-light skin tone:", "👩🏼‍🔬"}, - {"", ":woman scientist medium skin tone:", "👩🏽‍🔬"}, - {"", ":woman scientist medium-dark skin tone:", "👩🏾‍🔬"}, - {"", ":woman scientist dark skin tone:", "👩🏿‍🔬"}, - {"", ":man technologist light skin tone:", "👨🏻‍💻"}, - {"", ":man technologist medium-light skin tone:", "👨🏼‍💻"}, - {"", ":man technologist medium skin tone:", "👨🏽‍💻"}, - {"", ":man technologist medium-dark skin tone:", "👨🏾‍💻"}, - {"", ":man technologist dark skin tone:", "👨🏿‍💻"}, - {"", ":woman technologist light skin tone:", "👩🏻‍💻"}, - {"", ":woman technologist medium-light skin tone:", "👩🏼‍💻"}, - {"", ":woman technologist medium skin tone:", "👩🏽‍💻"}, - {"", ":woman technologist medium-dark skin tone:", "👩🏾‍💻"}, - {"", ":woman technologist dark skin tone:", "👩🏿‍💻"}, - {"", ":man singer light skin tone:", "👨🏻‍🎤"}, - {"", ":man singer medium-light skin tone:", "👨🏼‍🎤"}, - {"", ":man singer medium skin tone:", "👨🏽‍🎤"}, - {"", ":man singer medium-dark skin tone:", "👨🏾‍🎤"}, - {"", ":man singer dark skin tone:", "👨🏿‍🎤"}, - {"", ":woman singer light skin tone:", "👩🏻‍🎤"}, - {"", ":woman singer medium-light skin tone:", "👩🏼‍🎤"}, - {"", ":woman singer medium skin tone:", "👩🏽‍🎤"}, - {"", ":woman singer medium-dark skin tone:", "👩🏾‍🎤"}, - {"", ":woman singer dark skin tone:", "👩🏿‍🎤"}, - {"", ":man artist light skin tone:", "👨🏻‍🎨"}, - {"", ":man artist medium-light skin tone:", "👨🏼‍🎨"}, - {"", ":man artist medium skin tone:", "👨🏽‍🎨"}, - {"", ":man artist medium-dark skin tone:", "👨🏾‍🎨"}, - {"", ":man artist dark skin tone:", "👨🏿‍🎨"}, - {"", ":woman artist light skin tone:", "👩🏻‍🎨"}, - {"", ":woman artist medium-light skin tone:", "👩🏼‍🎨"}, - {"", ":woman artist medium skin tone:", "👩🏽‍🎨"}, - {"", ":woman artist medium-dark skin tone:", "👩🏾‍🎨"}, - {"", ":woman artist dark skin tone:", "👩🏿‍🎨"}, - {"", ":man pilot light skin tone:", "👨🏻‍✈️"}, - {"", ":man pilot medium-light skin tone:", "👨🏼‍✈️"}, - {"", ":man pilot medium skin tone:", "👨🏽‍✈️"}, - {"", ":man pilot medium-dark skin tone:", "👨🏾‍✈️"}, - {"", ":man pilot dark skin tone:", "👨🏿‍✈️"}, - {"", ":woman pilot light skin tone:", "👩🏻‍✈️"}, - {"", ":woman pilot medium-light skin tone:", "👩🏼‍✈️"}, - {"", ":woman pilot medium skin tone:", "👩🏽‍✈️"}, - {"", ":woman pilot medium-dark skin tone:", "👩🏾‍✈️"}, - {"", ":woman pilot dark skin tone:", "👩🏿‍✈️"}, - {"", ":man astronaut light skin tone:", "👨🏻‍🚀"}, - {"", ":man astronaut medium-light skin tone:", "👨🏼‍🚀"}, - {"", ":man astronaut medium skin tone:", "👨🏽‍🚀"}, - {"", ":man astronaut medium-dark skin tone:", "👨🏾‍🚀"}, - {"", ":man astronaut dark skin tone:", "👨🏿‍🚀"}, - {"", ":woman astronaut light skin tone:", "👩🏻‍🚀"}, - {"", ":woman astronaut medium-light skin tone:", "👩🏼‍🚀"}, - {"", ":woman astronaut medium skin tone:", "👩🏽‍🚀"}, - {"", ":woman astronaut medium-dark skin tone:", "👩🏾‍🚀"}, - {"", ":woman astronaut dark skin tone:", "👩🏿‍🚀"}, - {"", ":man firefighter light skin tone:", "👨🏻‍🚒"}, - {"", ":man firefighter medium-light skin tone:", "👨🏼‍🚒"}, - {"", ":man firefighter medium skin tone:", "👨🏽‍🚒"}, - {"", ":man firefighter medium-dark skin tone:", "👨🏾‍🚒"}, - {"", ":man firefighter dark skin tone:", "👨🏿‍🚒"}, - {"", ":woman firefighter light skin tone:", "👩🏻‍🚒"}, - {"", ":woman firefighter medium-light skin tone:", "👩🏼‍🚒"}, - {"", ":woman firefighter medium skin tone:", "👩🏽‍🚒"}, - {"", ":woman firefighter medium-dark skin tone:", "👩🏾‍🚒"}, - {"", ":woman firefighter dark skin tone:", "👩🏿‍🚒"}, - {"", ":police officer light skin tone:", "👮🏻"}, - {"", ":police officer medium-light skin tone:", "👮🏼"}, - {"", ":police officer medium skin tone:", "👮🏽"}, - {"", ":police officer medium-dark skin tone:", "👮🏾"}, - {"", ":police officer dark skin tone:", "👮🏿"}, - {"", ":man police officer light skin tone:", "👮🏻‍♂️"}, - {"", ":man police officer medium-light skin tone:", "👮🏼‍♂️"}, - {"", ":man police officer medium skin tone:", "👮🏽‍♂️"}, - {"", ":man police officer medium-dark skin tone:", "👮🏾‍♂️"}, - {"", ":man police officer dark skin tone:", "👮🏿‍♂️"}, - {"", ":woman police officer light skin tone:", "👮🏻‍♀️"}, - {"", ":woman police officer medium-light skin tone:", "👮🏼‍♀️"}, - {"", ":woman police officer medium skin tone:", "👮🏽‍♀️"}, - {"", ":woman police officer medium-dark skin tone:", "👮🏾‍♀️"}, - {"", ":woman police officer dark skin tone:", "👮🏿‍♀️"}, - {"", ":detective light skin tone:", "🕵🏻"}, - {"", ":detective medium-light skin tone:", "🕵🏼"}, - {"", ":detective medium skin tone:", "🕵🏽"}, - {"", ":detective medium-dark skin tone:", "🕵🏾"}, - {"", ":detective dark skin tone:", "🕵🏿"}, - {"", ":man detective light skin tone:", "🕵🏻‍♂️"}, - {"", ":man detective medium-light skin tone:", "🕵🏼‍♂️"}, - {"", ":man detective medium skin tone:", "🕵🏽‍♂️"}, - {"", ":man detective medium-dark skin tone:", "🕵🏾‍♂️"}, - {"", ":man detective dark skin tone:", "🕵🏿‍♂️"}, - {"", ":woman detective light skin tone:", "🕵🏻‍♀️"}, - {"", ":woman detective medium-light skin tone:", "🕵🏼‍♀️"}, - {"", ":woman detective medium skin tone:", "🕵🏽‍♀️"}, - {"", ":woman detective medium-dark skin tone:", "🕵🏾‍♀️"}, - {"", ":woman detective dark skin tone:", "🕵🏿‍♀️"}, - {"", ":guard light skin tone:", "💂🏻"}, - {"", ":guard medium-light skin tone:", "💂🏼"}, - {"", ":guard medium skin tone:", "💂🏽"}, - {"", ":guard medium-dark skin tone:", "💂🏾"}, - {"", ":guard dark skin tone:", "💂🏿"}, - {"", ":man guard light skin tone:", "💂🏻‍♂️"}, - {"", ":man guard medium-light skin tone:", "💂🏼‍♂️"}, - {"", ":man guard medium skin tone:", "💂🏽‍♂️"}, - {"", ":man guard medium-dark skin tone:", "💂🏾‍♂️"}, - {"", ":man guard dark skin tone:", "💂🏿‍♂️"}, - {"", ":woman guard light skin tone:", "💂🏻‍♀️"}, - {"", ":woman guard medium-light skin tone:", "💂🏼‍♀️"}, - {"", ":woman guard medium skin tone:", "💂🏽‍♀️"}, - {"", ":woman guard medium-dark skin tone:", "💂🏾‍♀️"}, - {"", ":woman guard dark skin tone:", "💂🏿‍♀️"}, - {"", ":construction worker light skin tone:", "👷🏻"}, - {"", ":construction worker medium-light skin tone:", "👷🏼"}, - {"", ":construction worker medium skin tone:", "👷🏽"}, - {"", ":construction worker medium-dark skin tone:", "👷🏾"}, - {"", ":construction worker dark skin tone:", "👷🏿"}, - {"", ":man construction worker light skin tone:", "👷🏻‍♂️"}, - {"", ":man construction worker medium-light skin tone:", "👷🏼‍♂️"}, - {"", ":man construction worker medium skin tone:", "👷🏽‍♂️"}, - {"", ":man construction worker medium-dark skin tone:", "👷🏾‍♂️"}, - {"", ":man construction worker dark skin tone:", "👷🏿‍♂️"}, - {"", ":woman construction worker light skin tone:", "👷🏻‍♀️"}, - {"", ":woman construction worker medium-light skin tone:", "👷🏼‍♀️"}, - {"", ":woman construction worker medium skin tone:", "👷🏽‍♀️"}, - {"", ":woman construction worker medium-dark skin tone:", "👷🏾‍♀️"}, - {"", ":woman construction worker dark skin tone:", "👷🏿‍♀️"}, - {"", ":prince light skin tone:", "🤴🏻"}, - {"", ":prince medium-light skin tone:", "🤴🏼"}, - {"", ":prince medium skin tone:", "🤴🏽"}, - {"", ":prince medium-dark skin tone:", "🤴🏾"}, - {"", ":prince dark skin tone:", "🤴🏿"}, - {"", ":princess light skin tone:", "👸🏻"}, - {"", ":princess medium-light skin tone:", "👸🏼"}, - {"", ":princess medium skin tone:", "👸🏽"}, - {"", ":princess medium-dark skin tone:", "👸🏾"}, - {"", ":princess dark skin tone:", "👸🏿"}, - {"", ":person wearing turban light skin tone:", "👳🏻"}, - {"", ":person wearing turban medium-light skin tone:", "👳🏼"}, - {"", ":person wearing turban medium skin tone:", "👳🏽"}, - {"", ":person wearing turban medium-dark skin tone:", "👳🏾"}, - {"", ":person wearing turban dark skin tone:", "👳🏿"}, - {"", ":man wearing turban light skin tone:", "👳🏻‍♂️"}, - {"", ":man wearing turban medium-light skin tone:", "👳🏼‍♂️"}, - {"", ":man wearing turban medium skin tone:", "👳🏽‍♂️"}, - {"", ":man wearing turban medium-dark skin tone:", "👳🏾‍♂️"}, - {"", ":man wearing turban dark skin tone:", "👳🏿‍♂️"}, - {"", ":woman wearing turban light skin tone:", "👳🏻‍♀️"}, - {"", ":woman wearing turban medium-light skin tone:", "👳🏼‍♀️"}, - {"", ":woman wearing turban medium skin tone:", "👳🏽‍♀️"}, - {"", ":woman wearing turban medium-dark skin tone:", "👳🏾‍♀️"}, - {"", ":woman wearing turban dark skin tone:", "👳🏿‍♀️"}, - {"", ":man with chinese cap light skin tone:", "👲🏻"}, - {"", ":man with chinese cap medium-light skin tone:", "👲🏼"}, - {"", ":man with chinese cap medium skin tone:", "👲🏽"}, - {"", ":man with chinese cap medium-dark skin tone:", "👲🏾"}, - {"", ":man with chinese cap dark skin tone:", "👲🏿"}, - {"", ":woman with headscarf light skin tone:", "🧕🏻"}, - {"", ":woman with headscarf medium-light skin tone:", "🧕🏼"}, - {"", ":woman with headscarf medium skin tone:", "🧕🏽"}, - {"", ":woman with headscarf medium-dark skin tone:", "🧕🏾"}, - {"", ":woman with headscarf dark skin tone:", "🧕🏿"}, - {"", ":man in tuxedo light skin tone:", "🤵🏻"}, - {"", ":man in tuxedo medium-light skin tone:", "🤵🏼"}, - {"", ":man in tuxedo medium skin tone:", "🤵🏽"}, - {"", ":man in tuxedo medium-dark skin tone:", "🤵🏾"}, - {"", ":man in tuxedo dark skin tone:", "🤵🏿"}, - {"", ":bride with veil light skin tone:", "👰🏻"}, - {"", ":bride with veil medium-light skin tone:", "👰🏼"}, - {"", ":bride with veil medium skin tone:", "👰🏽"}, - {"", ":bride with veil medium-dark skin tone:", "👰🏾"}, - {"", ":bride with veil dark skin tone:", "👰🏿"}, - {"", ":pregnant woman light skin tone:", "🤰🏻"}, - {"", ":pregnant woman medium-light skin tone:", "🤰🏼"}, - {"", ":pregnant woman medium skin tone:", "🤰🏽"}, - {"", ":pregnant woman medium-dark skin tone:", "🤰🏾"}, - {"", ":pregnant woman dark skin tone:", "🤰🏿"}, - {"", ":breast-feeding light skin tone:", "🤱🏻"}, - {"", ":breast-feeding medium-light skin tone:", "🤱🏼"}, - {"", ":breast-feeding medium skin tone:", "🤱🏽"}, - {"", ":breast-feeding medium-dark skin tone:", "🤱🏾"}, - {"", ":breast-feeding dark skin tone:", "🤱🏿"}, - {"", ":baby angel light skin tone:", "👼🏻"}, - {"", ":baby angel medium-light skin tone:", "👼🏼"}, - {"", ":baby angel medium skin tone:", "👼🏽"}, - {"", ":baby angel medium-dark skin tone:", "👼🏾"}, - {"", ":baby angel dark skin tone:", "👼🏿"}, - {"", ":santa claus light skin tone:", "🎅🏻"}, - {"", ":santa claus medium-light skin tone:", "🎅🏼"}, - {"", ":santa claus medium skin tone:", "🎅🏽"}, - {"", ":santa claus medium-dark skin tone:", "🎅🏾"}, - {"", ":santa claus dark skin tone:", "🎅🏿"}, - {"", ":mrs. claus light skin tone:", "🤶🏻"}, - {"", ":mrs. claus medium-light skin tone:", "🤶🏼"}, - {"", ":mrs. claus medium skin tone:", "🤶🏽"}, - {"", ":mrs. claus medium-dark skin tone:", "🤶🏾"}, - {"", ":mrs. claus dark skin tone:", "🤶🏿"}, - {"", ":superhero light skin tone:", "🦸🏻"}, - {"", ":superhero medium-light skin tone:", "🦸🏼"}, - {"", ":superhero medium skin tone:", "🦸🏽"}, - {"", ":superhero medium-dark skin tone:", "🦸🏾"}, - {"", ":superhero dark skin tone:", "🦸🏿"}, - {"", ":man superhero light skin tone:", "🦸🏻‍♂️"}, - {"", ":man superhero medium-light skin tone:", "🦸🏼‍♂️"}, - {"", ":man superhero medium skin tone:", "🦸🏽‍♂️"}, - {"", ":man superhero medium-dark skin tone:", "🦸🏾‍♂️"}, - {"", ":man superhero dark skin tone:", "🦸🏿‍♂️"}, - {"", ":woman superhero light skin tone:", "🦸🏻‍♀️"}, - {"", ":woman superhero medium-light skin tone:", "🦸🏼‍♀️"}, - {"", ":woman superhero medium skin tone:", "🦸🏽‍♀️"}, - {"", ":woman superhero medium-dark skin tone:", "🦸🏾‍♀️"}, - {"", ":woman superhero dark skin tone:", "🦸🏿‍♀️"}, - {"", ":supervillain light skin tone:", "🦹🏻"}, - {"", ":supervillain medium-light skin tone:", "🦹🏼"}, - {"", ":supervillain medium skin tone:", "🦹🏽"}, - {"", ":supervillain medium-dark skin tone:", "🦹🏾"}, - {"", ":supervillain dark skin tone:", "🦹🏿"}, - {"", ":man supervillain light skin tone:", "🦹🏻‍♂️"}, - {"", ":man supervillain medium-light skin tone:", "🦹🏼‍♂️"}, - {"", ":man supervillain medium skin tone:", "🦹🏽‍♂️"}, - {"", ":man supervillain medium-dark skin tone:", "🦹🏾‍♂️"}, - {"", ":man supervillain dark skin tone:", "🦹🏿‍♂️"}, - {"", ":woman supervillain light skin tone:", "🦹🏻‍♀️"}, - {"", ":woman supervillain medium-light skin tone:", "🦹🏼‍♀️"}, - {"", ":woman supervillain medium skin tone:", "🦹🏽‍♀️"}, - {"", ":woman supervillain medium-dark skin tone:", "🦹🏾‍♀️"}, - {"", ":woman supervillain dark skin tone:", "🦹🏿‍♀️"}, - {"", ":mage light skin tone:", "🧙🏻"}, - {"", ":mage medium-light skin tone:", "🧙🏼"}, - {"", ":mage medium skin tone:", "🧙🏽"}, - {"", ":mage medium-dark skin tone:", "🧙🏾"}, - {"", ":mage dark skin tone:", "🧙🏿"}, - {"", ":man mage light skin tone:", "🧙🏻‍♂️"}, - {"", ":man mage medium-light skin tone:", "🧙🏼‍♂️"}, - {"", ":man mage medium skin tone:", "🧙🏽‍♂️"}, - {"", ":man mage medium-dark skin tone:", "🧙🏾‍♂️"}, - {"", ":man mage dark skin tone:", "🧙🏿‍♂️"}, - {"", ":woman mage light skin tone:", "🧙🏻‍♀️"}, - {"", ":woman mage medium-light skin tone:", "🧙🏼‍♀️"}, - {"", ":woman mage medium skin tone:", "🧙🏽‍♀️"}, - {"", ":woman mage medium-dark skin tone:", "🧙🏾‍♀️"}, - {"", ":woman mage dark skin tone:", "🧙🏿‍♀️"}, - {"", ":fairy light skin tone:", "🧚🏻"}, - {"", ":fairy medium-light skin tone:", "🧚🏼"}, - {"", ":fairy medium skin tone:", "🧚🏽"}, - {"", ":fairy medium-dark skin tone:", "🧚🏾"}, - {"", ":fairy dark skin tone:", "🧚🏿"}, - {"", ":man fairy light skin tone:", "🧚🏻‍♂️"}, - {"", ":man fairy medium-light skin tone:", "🧚🏼‍♂️"}, - {"", ":man fairy medium skin tone:", "🧚🏽‍♂️"}, - {"", ":man fairy medium-dark skin tone:", "🧚🏾‍♂️"}, - {"", ":man fairy dark skin tone:", "🧚🏿‍♂️"}, - {"", ":woman fairy light skin tone:", "🧚🏻‍♀️"}, - {"", ":woman fairy medium-light skin tone:", "🧚🏼‍♀️"}, - {"", ":woman fairy medium skin tone:", "🧚🏽‍♀️"}, - {"", ":woman fairy medium-dark skin tone:", "🧚🏾‍♀️"}, - {"", ":woman fairy dark skin tone:", "🧚🏿‍♀️"}, - {"", ":vampire light skin tone:", "🧛🏻"}, - {"", ":vampire medium-light skin tone:", "🧛🏼"}, - {"", ":vampire medium skin tone:", "🧛🏽"}, - {"", ":vampire medium-dark skin tone:", "🧛🏾"}, - {"", ":vampire dark skin tone:", "🧛🏿"}, - {"", ":man vampire light skin tone:", "🧛🏻‍♂️"}, - {"", ":man vampire medium-light skin tone:", "🧛🏼‍♂️"}, - {"", ":man vampire medium skin tone:", "🧛🏽‍♂️"}, - {"", ":man vampire medium-dark skin tone:", "🧛🏾‍♂️"}, - {"", ":man vampire dark skin tone:", "🧛🏿‍♂️"}, - {"", ":woman vampire light skin tone:", "🧛🏻‍♀️"}, - {"", ":woman vampire medium-light skin tone:", "🧛🏼‍♀️"}, - {"", ":woman vampire medium skin tone:", "🧛🏽‍♀️"}, - {"", ":woman vampire medium-dark skin tone:", "🧛🏾‍♀️"}, - {"", ":woman vampire dark skin tone:", "🧛🏿‍♀️"}, - {"", ":merperson light skin tone:", "🧜🏻"}, - {"", ":merperson medium-light skin tone:", "🧜🏼"}, - {"", ":merperson medium skin tone:", "🧜🏽"}, - {"", ":merperson medium-dark skin tone:", "🧜🏾"}, - {"", ":merperson dark skin tone:", "🧜🏿"}, - {"", ":merman light skin tone:", "🧜🏻‍♂️"}, - {"", ":merman medium-light skin tone:", "🧜🏼‍♂️"}, - {"", ":merman medium skin tone:", "🧜🏽‍♂️"}, - {"", ":merman medium-dark skin tone:", "🧜🏾‍♂️"}, - {"", ":merman dark skin tone:", "🧜🏿‍♂️"}, - {"", ":mermaid light skin tone:", "🧜🏻‍♀️"}, - {"", ":mermaid medium-light skin tone:", "🧜🏼‍♀️"}, - {"", ":mermaid medium skin tone:", "🧜🏽‍♀️"}, - {"", ":mermaid medium-dark skin tone:", "🧜🏾‍♀️"}, - {"", ":mermaid dark skin tone:", "🧜🏿‍♀️"}, - {"", ":elf light skin tone:", "🧝🏻"}, - {"", ":elf medium-light skin tone:", "🧝🏼"}, - {"", ":elf medium skin tone:", "🧝🏽"}, - {"", ":elf medium-dark skin tone:", "🧝🏾"}, - {"", ":elf dark skin tone:", "🧝🏿"}, - {"", ":man elf light skin tone:", "🧝🏻‍♂️"}, - {"", ":man elf medium-light skin tone:", "🧝🏼‍♂️"}, - {"", ":man elf medium skin tone:", "🧝🏽‍♂️"}, - {"", ":man elf medium-dark skin tone:", "🧝🏾‍♂️"}, - {"", ":man elf dark skin tone:", "🧝🏿‍♂️"}, - {"", ":woman elf light skin tone:", "🧝🏻‍♀️"}, - {"", ":woman elf medium-light skin tone:", "🧝🏼‍♀️"}, - {"", ":woman elf medium skin tone:", "🧝🏽‍♀️"}, - {"", ":woman elf medium-dark skin tone:", "🧝🏾‍♀️"}, - {"", ":woman elf dark skin tone:", "🧝🏿‍♀️"}, - {"", ":person getting massage light skin tone:", "💆🏻"}, - {"", ":person getting massage medium-light skin tone:", "💆🏼"}, - {"", ":person getting massage medium skin tone:", "💆🏽"}, - {"", ":person getting massage medium-dark skin tone:", "💆🏾"}, - {"", ":person getting massage dark skin tone:", "💆🏿"}, - {"", ":man getting massage light skin tone:", "💆🏻‍♂️"}, - {"", ":man getting massage medium-light skin tone:", "💆🏼‍♂️"}, - {"", ":man getting massage medium skin tone:", "💆🏽‍♂️"}, - {"", ":man getting massage medium-dark skin tone:", "💆🏾‍♂️"}, - {"", ":man getting massage dark skin tone:", "💆🏿‍♂️"}, - {"", ":woman getting massage light skin tone:", "💆🏻‍♀️"}, - {"", ":woman getting massage medium-light skin tone:", "💆🏼‍♀️"}, - {"", ":woman getting massage medium skin tone:", "💆🏽‍♀️"}, - {"", ":woman getting massage medium-dark skin tone:", "💆🏾‍♀️"}, - {"", ":woman getting massage dark skin tone:", "💆🏿‍♀️"}, - {"", ":person getting haircut light skin tone:", "💇🏻"}, - {"", ":person getting haircut medium-light skin tone:", "💇🏼"}, - {"", ":person getting haircut medium skin tone:", "💇🏽"}, - {"", ":person getting haircut medium-dark skin tone:", "💇🏾"}, - {"", ":person getting haircut dark skin tone:", "💇🏿"}, - {"", ":man getting haircut light skin tone:", "💇🏻‍♂️"}, - {"", ":man getting haircut medium-light skin tone:", "💇🏼‍♂️"}, - {"", ":man getting haircut medium skin tone:", "💇🏽‍♂️"}, - {"", ":man getting haircut medium-dark skin tone:", "💇🏾‍♂️"}, - {"", ":man getting haircut dark skin tone:", "💇🏿‍♂️"}, - {"", ":woman getting haircut light skin tone:", "💇🏻‍♀️"}, - {"", ":woman getting haircut medium-light skin tone:", "💇🏼‍♀️"}, - {"", ":woman getting haircut medium skin tone:", "💇🏽‍♀️"}, - {"", ":woman getting haircut medium-dark skin tone:", "💇🏾‍♀️"}, - {"", ":woman getting haircut dark skin tone:", "💇🏿‍♀️"}, - {"", ":person walking light skin tone:", "🚶🏻"}, - {"", ":person walking medium-light skin tone:", "🚶🏼"}, - {"", ":person walking medium skin tone:", "🚶🏽"}, - {"", ":person walking medium-dark skin tone:", "🚶🏾"}, - {"", ":person walking dark skin tone:", "🚶🏿"}, - {"", ":man walking light skin tone:", "🚶🏻‍♂️"}, - {"", ":man walking medium-light skin tone:", "🚶🏼‍♂️"}, - {"", ":man walking medium skin tone:", "🚶🏽‍♂️"}, - {"", ":man walking medium-dark skin tone:", "🚶🏾‍♂️"}, - {"", ":man walking dark skin tone:", "🚶🏿‍♂️"}, - {"", ":woman walking light skin tone:", "🚶🏻‍♀️"}, - {"", ":woman walking medium-light skin tone:", "🚶🏼‍♀️"}, - {"", ":woman walking medium skin tone:", "🚶🏽‍♀️"}, - {"", ":woman walking medium-dark skin tone:", "🚶🏾‍♀️"}, - {"", ":woman walking dark skin tone:", "🚶🏿‍♀️"}, - {"", ":person running light skin tone:", "🏃🏻"}, - {"", ":person running medium-light skin tone:", "🏃🏼"}, - {"", ":person running medium skin tone:", "🏃🏽"}, - {"", ":person running medium-dark skin tone:", "🏃🏾"}, - {"", ":person running dark skin tone:", "🏃🏿"}, - {"", ":man running light skin tone:", "🏃🏻‍♂️"}, - {"", ":man running medium-light skin tone:", "🏃🏼‍♂️"}, - {"", ":man running medium skin tone:", "🏃🏽‍♂️"}, - {"", ":man running medium-dark skin tone:", "🏃🏾‍♂️"}, - {"", ":man running dark skin tone:", "🏃🏿‍♂️"}, - {"", ":woman running light skin tone:", "🏃🏻‍♀️"}, - {"", ":woman running medium-light skin tone:", "🏃🏼‍♀️"}, - {"", ":woman running medium skin tone:", "🏃🏽‍♀️"}, - {"", ":woman running medium-dark skin tone:", "🏃🏾‍♀️"}, - {"", ":woman running dark skin tone:", "🏃🏿‍♀️"}, - {"", ":woman dancing light skin tone:", "💃🏻"}, - {"", ":woman dancing medium-light skin tone:", "💃🏼"}, - {"", ":woman dancing medium skin tone:", "💃🏽"}, - {"", ":woman dancing medium-dark skin tone:", "💃🏾"}, - {"", ":woman dancing dark skin tone:", "💃🏿"}, - {"", ":man dancing light skin tone:", "🕺🏻"}, - {"", ":man dancing medium-light skin tone:", "🕺🏼"}, - {"", ":man dancing medium skin tone:", "🕺🏽"}, - {"", ":man dancing medium-dark skin tone:", "🕺🏾"}, - {"", ":man dancing dark skin tone:", "🕺🏿"}, - {"", ":man in suit levitating light skin tone:", "🕴🏻"}, - {"", ":man in suit levitating medium-light skin tone:", "🕴🏼"}, - {"", ":man in suit levitating medium skin tone:", "🕴🏽"}, - {"", ":man in suit levitating medium-dark skin tone:", "🕴🏾"}, - {"", ":man in suit levitating dark skin tone:", "🕴🏿"}, - {"", ":person in steamy room light skin tone:", "🧖🏻"}, - {"", ":person in steamy room medium-light skin tone:", "🧖🏼"}, - {"", ":person in steamy room medium skin tone:", "🧖🏽"}, - {"", ":person in steamy room medium-dark skin tone:", "🧖🏾"}, - {"", ":person in steamy room dark skin tone:", "🧖🏿"}, - {"", ":man in steamy room light skin tone:", "🧖🏻‍♂️"}, - {"", ":man in steamy room medium-light skin tone:", "🧖🏼‍♂️"}, - {"", ":man in steamy room medium skin tone:", "🧖🏽‍♂️"}, - {"", ":man in steamy room medium-dark skin tone:", "🧖🏾‍♂️"}, - {"", ":man in steamy room dark skin tone:", "🧖🏿‍♂️"}, - {"", ":woman in steamy room light skin tone:", "🧖🏻‍♀️"}, - {"", ":woman in steamy room medium-light skin tone:", "🧖🏼‍♀️"}, - {"", ":woman in steamy room medium skin tone:", "🧖🏽‍♀️"}, - {"", ":woman in steamy room medium-dark skin tone:", "🧖🏾‍♀️"}, - {"", ":woman in steamy room dark skin tone:", "🧖🏿‍♀️"}, - {"", ":person climbing light skin tone:", "🧗🏻"}, - {"", ":person climbing medium-light skin tone:", "🧗🏼"}, - {"", ":person climbing medium skin tone:", "🧗🏽"}, - {"", ":person climbing medium-dark skin tone:", "🧗🏾"}, - {"", ":person climbing dark skin tone:", "🧗🏿"}, - {"", ":man climbing light skin tone:", "🧗🏻‍♂️"}, - {"", ":man climbing medium-light skin tone:", "🧗🏼‍♂️"}, - {"", ":man climbing medium skin tone:", "🧗🏽‍♂️"}, - {"", ":man climbing medium-dark skin tone:", "🧗🏾‍♂️"}, - {"", ":man climbing dark skin tone:", "🧗🏿‍♂️"}, - {"", ":woman climbing light skin tone:", "🧗🏻‍♀️"}, - {"", ":woman climbing medium-light skin tone:", "🧗🏼‍♀️"}, - {"", ":woman climbing medium skin tone:", "🧗🏽‍♀️"}, - {"", ":woman climbing medium-dark skin tone:", "🧗🏾‍♀️"}, - {"", ":woman climbing dark skin tone:", "🧗🏿‍♀️"}, - {"", ":horse racing light skin tone:", "🏇🏻"}, - {"", ":horse racing medium-light skin tone:", "🏇🏼"}, - {"", ":horse racing medium skin tone:", "🏇🏽"}, - {"", ":horse racing medium-dark skin tone:", "🏇🏾"}, - {"", ":horse racing dark skin tone:", "🏇🏿"}, - {"", ":snowboarder light skin tone:", "🏂🏻"}, - {"", ":snowboarder medium-light skin tone:", "🏂🏼"}, - {"", ":snowboarder medium skin tone:", "🏂🏽"}, - {"", ":snowboarder medium-dark skin tone:", "🏂🏾"}, - {"", ":snowboarder dark skin tone:", "🏂🏿"}, - {"", ":person golfing light skin tone:", "🏌🏻"}, - {"", ":person golfing medium-light skin tone:", "🏌🏼"}, - {"", ":person golfing medium skin tone:", "🏌🏽"}, - {"", ":person golfing medium-dark skin tone:", "🏌🏾"}, - {"", ":person golfing dark skin tone:", "🏌🏿"}, - {"", ":man golfing light skin tone:", "🏌🏻‍♂️"}, - {"", ":man golfing medium-light skin tone:", "🏌🏼‍♂️"}, - {"", ":man golfing medium skin tone:", "🏌🏽‍♂️"}, - {"", ":man golfing medium-dark skin tone:", "🏌🏾‍♂️"}, - {"", ":man golfing dark skin tone:", "🏌🏿‍♂️"}, - {"", ":woman golfing light skin tone:", "🏌🏻‍♀️"}, - {"", ":woman golfing medium-light skin tone:", "🏌🏼‍♀️"}, - {"", ":woman golfing medium skin tone:", "🏌🏽‍♀️"}, - {"", ":woman golfing medium-dark skin tone:", "🏌🏾‍♀️"}, - {"", ":woman golfing dark skin tone:", "🏌🏿‍♀️"}, - {"", ":person surfing light skin tone:", "🏄🏻"}, - {"", ":person surfing medium-light skin tone:", "🏄🏼"}, - {"", ":person surfing medium skin tone:", "🏄🏽"}, - {"", ":person surfing medium-dark skin tone:", "🏄🏾"}, - {"", ":person surfing dark skin tone:", "🏄🏿"}, - {"", ":man surfing light skin tone:", "🏄🏻‍♂️"}, - {"", ":man surfing medium-light skin tone:", "🏄🏼‍♂️"}, - {"", ":man surfing medium skin tone:", "🏄🏽‍♂️"}, - {"", ":man surfing medium-dark skin tone:", "🏄🏾‍♂️"}, - {"", ":man surfing dark skin tone:", "🏄🏿‍♂️"}, - {"", ":woman surfing light skin tone:", "🏄🏻‍♀️"}, - {"", ":woman surfing medium-light skin tone:", "🏄🏼‍♀️"}, - {"", ":woman surfing medium skin tone:", "🏄🏽‍♀️"}, - {"", ":woman surfing medium-dark skin tone:", "🏄🏾‍♀️"}, - {"", ":woman surfing dark skin tone:", "🏄🏿‍♀️"}, - {"", ":person rowing boat light skin tone:", "🚣🏻"}, - {"", ":person rowing boat medium-light skin tone:", "🚣🏼"}, - {"", ":person rowing boat medium skin tone:", "🚣🏽"}, - {"", ":person rowing boat medium-dark skin tone:", "🚣🏾"}, - {"", ":person rowing boat dark skin tone:", "🚣🏿"}, - {"", ":man rowing boat light skin tone:", "🚣🏻‍♂️"}, - {"", ":man rowing boat medium-light skin tone:", "🚣🏼‍♂️"}, - {"", ":man rowing boat medium skin tone:", "🚣🏽‍♂️"}, - {"", ":man rowing boat medium-dark skin tone:", "🚣🏾‍♂️"}, - {"", ":man rowing boat dark skin tone:", "🚣🏿‍♂️"}, - {"", ":woman rowing boat light skin tone:", "🚣🏻‍♀️"}, - {"", ":woman rowing boat medium-light skin tone:", "🚣🏼‍♀️"}, - {"", ":woman rowing boat medium skin tone:", "🚣🏽‍♀️"}, - {"", ":woman rowing boat medium-dark skin tone:", "🚣🏾‍♀️"}, - {"", ":woman rowing boat dark skin tone:", "🚣🏿‍♀️"}, - {"", ":person swimming light skin tone:", "🏊🏻"}, - {"", ":person swimming medium-light skin tone:", "🏊🏼"}, - {"", ":person swimming medium skin tone:", "🏊🏽"}, - {"", ":person swimming medium-dark skin tone:", "🏊🏾"}, - {"", ":person swimming dark skin tone:", "🏊🏿"}, - {"", ":man swimming light skin tone:", "🏊🏻‍♂️"}, - {"", ":man swimming medium-light skin tone:", "🏊🏼‍♂️"}, - {"", ":man swimming medium skin tone:", "🏊🏽‍♂️"}, - {"", ":man swimming medium-dark skin tone:", "🏊🏾‍♂️"}, - {"", ":man swimming dark skin tone:", "🏊🏿‍♂️"}, - {"", ":woman swimming light skin tone:", "🏊🏻‍♀️"}, - {"", ":woman swimming medium-light skin tone:", "🏊🏼‍♀️"}, - {"", ":woman swimming medium skin tone:", "🏊🏽‍♀️"}, - {"", ":woman swimming medium-dark skin tone:", "🏊🏾‍♀️"}, - {"", ":woman swimming dark skin tone:", "🏊🏿‍♀️"}, - {"", ":person bouncing ball light skin tone:", "⛹🏻"}, - {"", ":person bouncing ball medium-light skin tone:", "⛹🏼"}, - {"", ":person bouncing ball medium skin tone:", "⛹🏽"}, - {"", ":person bouncing ball medium-dark skin tone:", "⛹🏾"}, - {"", ":person bouncing ball dark skin tone:", "⛹🏿"}, - {"", ":man bouncing ball light skin tone:", "⛹🏻‍♂️"}, - {"", ":man bouncing ball medium-light skin tone:", "⛹🏼‍♂️"}, - {"", ":man bouncing ball medium skin tone:", "⛹🏽‍♂️"}, - {"", ":man bouncing ball medium-dark skin tone:", "⛹🏾‍♂️"}, - {"", ":man bouncing ball dark skin tone:", "⛹🏿‍♂️"}, - {"", ":woman bouncing ball light skin tone:", "⛹🏻‍♀️"}, - {"", ":woman bouncing ball medium-light skin tone:", "⛹🏼‍♀️"}, - {"", ":woman bouncing ball medium skin tone:", "⛹🏽‍♀️"}, - {"", ":woman bouncing ball medium-dark skin tone:", "⛹🏾‍♀️"}, - {"", ":woman bouncing ball dark skin tone:", "⛹🏿‍♀️"}, - {"", ":person lifting weights light skin tone:", "🏋🏻"}, - {"", ":person lifting weights medium-light skin tone:", "🏋🏼"}, - {"", ":person lifting weights medium skin tone:", "🏋🏽"}, - {"", ":person lifting weights medium-dark skin tone:", "🏋🏾"}, - {"", ":person lifting weights dark skin tone:", "🏋🏿"}, - {"", ":man lifting weights light skin tone:", "🏋🏻‍♂️"}, - {"", ":man lifting weights medium-light skin tone:", "🏋🏼‍♂️"}, - {"", ":man lifting weights medium skin tone:", "🏋🏽‍♂️"}, - {"", ":man lifting weights medium-dark skin tone:", "🏋🏾‍♂️"}, - {"", ":man lifting weights dark skin tone:", "🏋🏿‍♂️"}, - {"", ":woman lifting weights light skin tone:", "🏋🏻‍♀️"}, - {"", ":woman lifting weights medium-light skin tone:", "🏋🏼‍♀️"}, - {"", ":woman lifting weights medium skin tone:", "🏋🏽‍♀️"}, - {"", ":woman lifting weights medium-dark skin tone:", "🏋🏾‍♀️"}, - {"", ":woman lifting weights dark skin tone:", "🏋🏿‍♀️"}, - {"", ":person biking light skin tone:", "🚴🏻"}, - {"", ":person biking medium-light skin tone:", "🚴🏼"}, - {"", ":person biking medium skin tone:", "🚴🏽"}, - {"", ":person biking medium-dark skin tone:", "🚴🏾"}, - {"", ":person biking dark skin tone:", "🚴🏿"}, - {"", ":man biking light skin tone:", "🚴🏻‍♂️"}, - {"", ":man biking medium-light skin tone:", "🚴🏼‍♂️"}, - {"", ":man biking medium skin tone:", "🚴🏽‍♂️"}, - {"", ":man biking medium-dark skin tone:", "🚴🏾‍♂️"}, - {"", ":man biking dark skin tone:", "🚴🏿‍♂️"}, - {"", ":woman biking light skin tone:", "🚴🏻‍♀️"}, - {"", ":woman biking medium-light skin tone:", "🚴🏼‍♀️"}, - {"", ":woman biking medium skin tone:", "🚴🏽‍♀️"}, - {"", ":woman biking medium-dark skin tone:", "🚴🏾‍♀️"}, - {"", ":woman biking dark skin tone:", "🚴🏿‍♀️"}, - {"", ":person mountain biking light skin tone:", "🚵🏻"}, - {"", ":person mountain biking medium-light skin tone:", "🚵🏼"}, - {"", ":person mountain biking medium skin tone:", "🚵🏽"}, - {"", ":person mountain biking medium-dark skin tone:", "🚵🏾"}, - {"", ":person mountain biking dark skin tone:", "🚵🏿"}, - {"", ":man mountain biking light skin tone:", "🚵🏻‍♂️"}, - {"", ":man mountain biking medium-light skin tone:", "🚵🏼‍♂️"}, - {"", ":man mountain biking medium skin tone:", "🚵🏽‍♂️"}, - {"", ":man mountain biking medium-dark skin tone:", "🚵🏾‍♂️"}, - {"", ":man mountain biking dark skin tone:", "🚵🏿‍♂️"}, - {"", ":woman mountain biking light skin tone:", "🚵🏻‍♀️"}, - {"", ":woman mountain biking medium-light skin tone:", "🚵🏼‍♀️"}, - {"", ":woman mountain biking medium skin tone:", "🚵🏽‍♀️"}, - {"", ":woman mountain biking medium-dark skin tone:", "🚵🏾‍♀️"}, - {"", ":woman mountain biking dark skin tone:", "🚵🏿‍♀️"}, - {"", ":person cartwheeling light skin tone:", "🤸🏻"}, - {"", ":person cartwheeling medium-light skin tone:", "🤸🏼"}, - {"", ":person cartwheeling medium skin tone:", "🤸🏽"}, - {"", ":person cartwheeling medium-dark skin tone:", "🤸🏾"}, - {"", ":person cartwheeling dark skin tone:", "🤸🏿"}, - {"", ":man cartwheeling light skin tone:", "🤸🏻‍♂️"}, - {"", ":man cartwheeling medium-light skin tone:", "🤸🏼‍♂️"}, - {"", ":man cartwheeling medium skin tone:", "🤸🏽‍♂️"}, - {"", ":man cartwheeling medium-dark skin tone:", "🤸🏾‍♂️"}, - {"", ":man cartwheeling dark skin tone:", "🤸🏿‍♂️"}, - {"", ":woman cartwheeling light skin tone:", "🤸🏻‍♀️"}, - {"", ":woman cartwheeling medium-light skin tone:", "🤸🏼‍♀️"}, - {"", ":woman cartwheeling medium skin tone:", "🤸🏽‍♀️"}, - {"", ":woman cartwheeling medium-dark skin tone:", "🤸🏾‍♀️"}, - {"", ":woman cartwheeling dark skin tone:", "🤸🏿‍♀️"}, - {"", ":person playing water polo light skin tone:", "🤽🏻"}, - {"", ":person playing water polo medium-light skin tone:", "🤽🏼"}, - {"", ":person playing water polo medium skin tone:", "🤽🏽"}, - {"", ":person playing water polo medium-dark skin tone:", "🤽🏾"}, - {"", ":person playing water polo dark skin tone:", "🤽🏿"}, - {"", ":man playing water polo light skin tone:", "🤽🏻‍♂️"}, - {"", ":man playing water polo medium-light skin tone:", "🤽🏼‍♂️"}, - {"", ":man playing water polo medium skin tone:", "🤽🏽‍♂️"}, - {"", ":man playing water polo medium-dark skin tone:", "🤽🏾‍♂️"}, - {"", ":man playing water polo dark skin tone:", "🤽🏿‍♂️"}, - {"", ":woman playing water polo light skin tone:", "🤽🏻‍♀️"}, - {"", ":woman playing water polo medium-light skin tone:", "🤽🏼‍♀️"}, - {"", ":woman playing water polo medium skin tone:", "🤽🏽‍♀️"}, - {"", ":woman playing water polo medium-dark skin tone:", "🤽🏾‍♀️"}, - {"", ":woman playing water polo dark skin tone:", "🤽🏿‍♀️"}, - {"", ":person playing handball light skin tone:", "🤾🏻"}, - {"", ":person playing handball medium-light skin tone:", "🤾🏼"}, - {"", ":person playing handball medium skin tone:", "🤾🏽"}, - {"", ":person playing handball medium-dark skin tone:", "🤾🏾"}, - {"", ":person playing handball dark skin tone:", "🤾🏿"}, - {"", ":man playing handball light skin tone:", "🤾🏻‍♂️"}, - {"", ":man playing handball medium-light skin tone:", "🤾🏼‍♂️"}, - {"", ":man playing handball medium skin tone:", "🤾🏽‍♂️"}, - {"", ":man playing handball medium-dark skin tone:", "🤾🏾‍♂️"}, - {"", ":man playing handball dark skin tone:", "🤾🏿‍♂️"}, - {"", ":woman playing handball light skin tone:", "🤾🏻‍♀️"}, - {"", ":woman playing handball medium-light skin tone:", "🤾🏼‍♀️"}, - {"", ":woman playing handball medium skin tone:", "🤾🏽‍♀️"}, - {"", ":woman playing handball medium-dark skin tone:", "🤾🏾‍♀️"}, - {"", ":woman playing handball dark skin tone:", "🤾🏿‍♀️"}, - {"", ":person juggling light skin tone:", "🤹🏻"}, - {"", ":person juggling medium-light skin tone:", "🤹🏼"}, - {"", ":person juggling medium skin tone:", "🤹🏽"}, - {"", ":person juggling medium-dark skin tone:", "🤹🏾"}, - {"", ":person juggling dark skin tone:", "🤹🏿"}, - {"", ":man juggling light skin tone:", "🤹🏻‍♂️"}, - {"", ":man juggling medium-light skin tone:", "🤹🏼‍♂️"}, - {"", ":man juggling medium skin tone:", "🤹🏽‍♂️"}, - {"", ":man juggling medium-dark skin tone:", "🤹🏾‍♂️"}, - {"", ":man juggling dark skin tone:", "🤹🏿‍♂️"}, - {"", ":woman juggling light skin tone:", "🤹🏻‍♀️"}, - {"", ":woman juggling medium-light skin tone:", "🤹🏼‍♀️"}, - {"", ":woman juggling medium skin tone:", "🤹🏽‍♀️"}, - {"", ":woman juggling medium-dark skin tone:", "🤹🏾‍♀️"}, - {"", ":woman juggling dark skin tone:", "🤹🏿‍♀️"}, - {"", ":person in lotus position light skin tone:", "🧘🏻"}, - {"", ":person in lotus position medium-light skin tone:", "🧘🏼"}, - {"", ":person in lotus position medium skin tone:", "🧘🏽"}, - {"", ":person in lotus position medium-dark skin tone:", "🧘🏾"}, - {"", ":person in lotus position dark skin tone:", "🧘🏿"}, - {"", ":man in lotus position light skin tone:", "🧘🏻‍♂️"}, - {"", ":man in lotus position medium-light skin tone:", "🧘🏼‍♂️"}, - {"", ":man in lotus position medium skin tone:", "🧘🏽‍♂️"}, - {"", ":man in lotus position medium-dark skin tone:", "🧘🏾‍♂️"}, - {"", ":man in lotus position dark skin tone:", "🧘🏿‍♂️"}, - {"", ":woman in lotus position light skin tone:", "🧘🏻‍♀️"}, - {"", ":woman in lotus position medium-light skin tone:", "🧘🏼‍♀️"}, - {"", ":woman in lotus position medium skin tone:", "🧘🏽‍♀️"}, - {"", ":woman in lotus position medium-dark skin tone:", "🧘🏾‍♀️"}, - {"", ":woman in lotus position dark skin tone:", "🧘🏿‍♀️"}, - {"", ":person taking bath light skin tone:", "🛀🏻"}, - {"", ":person taking bath medium-light skin tone:", "🛀🏼"}, - {"", ":person taking bath medium skin tone:", "🛀🏽"}, - {"", ":person taking bath medium-dark skin tone:", "🛀🏾"}, - {"", ":person taking bath dark skin tone:", "🛀🏿"}, - {"", ":person in bed light skin tone:", "🛌🏻"}, - {"", ":person in bed medium-light skin tone:", "🛌🏼"}, - {"", ":person in bed medium skin tone:", "🛌🏽"}, - {"", ":person in bed medium-dark skin tone:", "🛌🏾"}, - {"", ":person in bed dark skin tone:", "🛌🏿"}, - {"", ":light skin tone:", "🏻"}, - {"", ":medium-light skin tone:", "🏼"}, - {"", ":medium skin tone:", "🏽"}, - {"", ":medium-dark skin tone:", "🏾"}, - {"", ":dark skin tone:", "🏿"}, -} -; + { ":+1:", "👍" }, + { ":-1:", "👎" }, + { ":100:", "💯" }, + { ":1234:", "🔢" }, + { ":1st_place_medal:", "🥇" }, + { ":2nd_place_medal:", "🥈" }, + { ":3rd_place_medal:", "🥉" }, + { ":8ball:", "🎱" }, + { ":a:", "🅰" }, + { ":ab:", "🆎" }, + { ":abc:", "🔤" }, + { ":abcd:", "🔡" }, + { ":accept:", "🉑" }, + { ":aerial_tramway:", "🚡" }, + { ":afghanistan:", "🇦🇫" }, + { ":airplane:", "✈" }, + { ":aland_islands:", "🇦🇽" }, + { ":alarm_clock:", "⏰" }, + { ":albania:", "🇦🇱" }, + { ":alembic:", "⚗" }, + { ":algeria:", "🇩🇿" }, + { ":alien:", "👽" }, + { ":ambulance:", "🚑" }, + { ":american_samoa:", "🇦🇸" }, + { ":amphora:", "🏺" }, + { ":anchor:", "⚓" }, + { ":andorra:", "🇦🇩" }, + { ":angel:", "👼" }, + { ":anger:", "💢" }, + { ":angola:", "🇦🇴" }, + { ":angry:", "😠" }, + { ":anguilla:", "🇦🇮" }, + { ":anguished:", "😧" }, + { ":ant:", "🐜" }, + { ":antarctica:", "🇦🇶" }, + { ":antigua_barbuda:", "🇦🇬" }, + { ":apple:", "🍎" }, + { ":aquarius:", "♒" }, + { ":argentina:", "🇦🇷" }, + { ":aries:", "♈" }, + { ":armenia:", "🇦🇲" }, + { ":arrow_backward:", "◀" }, + { ":arrow_double_down:", "⏬" }, + { ":arrow_double_up:", "⏫" }, + { ":arrow_down:", "⬇" }, + { ":arrow_down_small:", "🔽" }, + { ":arrow_forward:", "▶" }, + { ":arrow_heading_down:", "⤵" }, + { ":arrow_heading_up:", "⤴" }, + { ":arrow_left:", "⬅" }, + { ":arrow_lower_left:", "↙" }, + { ":arrow_lower_right:", "↘" }, + { ":arrow_right:", "➡" }, + { ":arrow_right_hook:", "↪" }, + { ":arrow_up:", "⬆" }, + { ":arrow_up_down:", "↕" }, + { ":arrow_up_small:", "🔼" }, + { ":arrow_upper_left:", "↖" }, + { ":arrow_upper_right:", "↗" }, + { ":arrows_clockwise:", "🔃" }, + { ":arrows_counterclockwise:", "🔄" }, + { ":art:", "🎨" }, + { ":articulated_lorry:", "🚛" }, + { ":artificial_satellite:", "🛰" }, + { ":aruba:", "🇦🇼" }, + { ":asterisk:", "*⃣" }, + { ":astonished:", "😲" }, + { ":athletic_shoe:", "👟" }, + { ":atm:", "🏧" }, + { ":atom_symbol:", "⚛" }, + { ":australia:", "🇦🇺" }, + { ":austria:", "🇦🇹" }, + { ":avocado:", "🥑" }, + { ":azerbaijan:", "🇦🇿" }, + { ":b:", "🅱" }, + { ":baby:", "👶" }, + { ":baby_bottle:", "🍼" }, + { ":baby_chick:", "🐤" }, + { ":baby_symbol:", "🚼" }, + { ":back:", "🔙" }, + { ":bacon:", "🥓" }, + { ":badminton:", "🏸" }, + { ":baggage_claim:", "🛄" }, + { ":baguette_bread:", "🥖" }, + { ":bahamas:", "🇧🇸" }, + { ":bahrain:", "🇧🇭" }, + { ":balance_scale:", "⚖" }, + { ":balloon:", "🎈" }, + { ":ballot_box:", "🗳" }, + { ":ballot_box_with_check:", "☑" }, + { ":bamboo:", "🎍" }, + { ":banana:", "🍌" }, + { ":bangbang:", "‼" }, + { ":bangladesh:", "🇧🇩" }, + { ":bank:", "🏦" }, + { ":bar_chart:", "📊" }, + { ":barbados:", "🇧🇧" }, + { ":barber:", "💈" }, + { ":baseball:", "⚾" }, + { ":basketball:", "🏀" }, + { ":basketball_man:", "⛹" }, + { ":basketball_woman:", "⛹♀" }, + { ":bat:", "🦇" }, + { ":bath:", "🛀" }, + { ":bathtub:", "🛁" }, + { ":battery:", "🔋" }, + { ":beach_umbrella:", "🏖" }, + { ":bear:", "🐻" }, + { ":bed:", "🛏" }, + { ":bee:", "🐝" }, + { ":beer:", "🍺" }, + { ":beers:", "🍻" }, + { ":beetle:", "🐞" }, + { ":beginner:", "🔰" }, + { ":belarus:", "🇧🇾" }, + { ":belgium:", "🇧🇪" }, + { ":belize:", "🇧🇿" }, + { ":bell:", "🔔" }, + { ":bellhop_bell:", "🛎" }, + { ":benin:", "🇧🇯" }, + { ":bento:", "🍱" }, + { ":bermuda:", "🇧🇲" }, + { ":bhutan:", "🇧🇹" }, + { ":bicyclist:", "🚴" }, + { ":bike:", "🚲" }, + { ":biking_man:", "🚴" }, + { ":biking_woman:", "🚴♀" }, + { ":bikini:", "👙" }, + { ":biohazard:", "☣" }, + { ":bird:", "🐦" }, + { ":birthday:", "🎂" }, + { ":black_circle:", "⚫" }, + { ":black_flag:", "🏴" }, + { ":black_heart:", "🖤" }, + { ":black_joker:", "🃏" }, + { ":black_large_square:", "⬛" }, + { ":black_medium_small_square:", "◾" }, + { ":black_medium_square:", "◼" }, + { ":black_nib:", "✒" }, + { ":black_small_square:", "▪" }, + { ":black_square_button:", "🔲" }, + { ":blonde_man:", "👱" }, + { ":blonde_woman:", "👱♀" }, + { ":blossom:", "🌼" }, + { ":blowfish:", "🐡" }, + { ":blue_book:", "📘" }, + { ":blue_car:", "🚙" }, + { ":blue_heart:", "💙" }, + { ":blush:", "😊" }, + { ":boar:", "🐗" }, + { ":boat:", "⛵" }, + { ":bolivia:", "🇧🇴" }, + { ":bomb:", "💣" }, + { ":book:", "📖" }, + { ":bookmark:", "🔖" }, + { ":bookmark_tabs:", "📑" }, + { ":books:", "📚" }, + { ":boom:", "💥" }, + { ":boot:", "👢" }, + { ":bosnia_herzegovina:", "🇧🇦" }, + { ":botswana:", "🇧🇼" }, + { ":bouquet:", "💐" }, + { ":bow:", "🙇" }, + { ":bow_and_arrow:", "🏹" }, + { ":bowing_man:", "🙇" }, + { ":bowing_woman:", "🙇♀" }, + { ":bowling:", "🎳" }, + { ":boxing_glove:", "🥊" }, + { ":boy:", "👦" }, + { ":brazil:", "🇧🇷" }, + { ":bread:", "🍞" }, + { ":bride_with_veil:", "👰" }, + { ":bridge_at_night:", "🌉" }, + { ":briefcase:", "💼" }, + { ":british_indian_ocean_territory:", "🇮🇴" }, + { ":british_virgin_islands:", "🇻🇬" }, + { ":broken_heart:", "💔" }, + { ":brunei:", "🇧🇳" }, + { ":bug:", "🐛" }, + { ":building_construction:", "🏗" }, + { ":bulb:", "💡" }, + { ":bulgaria:", "🇧🇬" }, + { ":bullettrain_front:", "🚅" }, + { ":bullettrain_side:", "🚄" }, + { ":burkina_faso:", "🇧🇫" }, + { ":burrito:", "🌯" }, + { ":burundi:", "🇧🇮" }, + { ":bus:", "🚌" }, + { ":business_suit_levitating:", "🕴" }, + { ":busstop:", "🚏" }, + { ":bust_in_silhouette:", "👤" }, + { ":busts_in_silhouette:", "👥" }, + { ":butterfly:", "🦋" }, + { ":cactus:", "🌵" }, + { ":cake:", "🍰" }, + { ":calendar:", "📆" }, + { ":call_me_hand:", "🤙" }, + { ":calling:", "📲" }, + { ":cambodia:", "🇰🇭" }, + { ":camel:", "🐫" }, + { ":camera:", "📷" }, + { ":camera_flash:", "📸" }, + { ":cameroon:", "🇨🇲" }, + { ":camping:", "🏕" }, + { ":canada:", "🇨🇦" }, + { ":canary_islands:", "🇮🇨" }, + { ":cancer:", "♋" }, + { ":candle:", "🕯" }, + { ":candy:", "🍬" }, + { ":canoe:", "🛶" }, + { ":cape_verde:", "🇨🇻" }, + { ":capital_abcd:", "🔠" }, + { ":capricorn:", "♑" }, + { ":car:", "🚗" }, + { ":card_file_box:", "🗃" }, + { ":card_index:", "📇" }, + { ":card_index_dividers:", "🗂" }, + { ":caribbean_netherlands:", "🇧🇶" }, + { ":carousel_horse:", "🎠" }, + { ":carrot:", "🥕" }, + { ":cat:", "🐱" }, + { ":cat2:", "🐈" }, + { ":cayman_islands:", "🇰🇾" }, + { ":cd:", "💿" }, + { ":central_african_republic:", "🇨🇫" }, + { ":chad:", "🇹🇩" }, + { ":chains:", "⛓" }, + { ":champagne:", "🍾" }, + { ":chart:", "💹" }, + { ":chart_with_downwards_trend:", "📉" }, + { ":chart_with_upwards_trend:", "📈" }, + { ":checkered_flag:", "🏁" }, + { ":cheese:", "🧀" }, + { ":cherries:", "🍒" }, + { ":cherry_blossom:", "🌸" }, + { ":chestnut:", "🌰" }, + { ":chicken:", "🐔" }, + { ":children_crossing:", "🚸" }, + { ":chile:", "🇨🇱" }, + { ":chipmunk:", "🐿" }, + { ":chocolate_bar:", "🍫" }, + { ":christmas_island:", "🇨🇽" }, + { ":christmas_tree:", "🎄" }, + { ":church:", "⛪" }, + { ":cinema:", "🎦" }, + { ":circus_tent:", "🎪" }, + { ":city_sunrise:", "🌇" }, + { ":city_sunset:", "🌆" }, + { ":cityscape:", "🏙" }, + { ":cl:", "🆑" }, + { ":clamp:", "🗜" }, + { ":clap:", "👏" }, + { ":clapper:", "🎬" }, + { ":classical_building:", "🏛" }, + { ":clinking_glasses:", "🥂" }, + { ":clipboard:", "📋" }, + { ":clock1:", "🕐" }, + { ":clock10:", "🕙" }, + { ":clock1030:", "🕥" }, + { ":clock11:", "🕚" }, + { ":clock1130:", "🕦" }, + { ":clock12:", "🕛" }, + { ":clock1230:", "🕧" }, + { ":clock130:", "🕜" }, + { ":clock2:", "🕑" }, + { ":clock230:", "🕝" }, + { ":clock3:", "🕒" }, + { ":clock330:", "🕞" }, + { ":clock4:", "🕓" }, + { ":clock430:", "🕟" }, + { ":clock5:", "🕔" }, + { ":clock530:", "🕠" }, + { ":clock6:", "🕕" }, + { ":clock630:", "🕡" }, + { ":clock7:", "🕖" }, + { ":clock730:", "🕢" }, + { ":clock8:", "🕗" }, + { ":clock830:", "🕣" }, + { ":clock9:", "🕘" }, + { ":clock930:", "🕤" }, + { ":closed_book:", "📕" }, + { ":closed_lock_with_key:", "🔐" }, + { ":closed_umbrella:", "🌂" }, + { ":cloud:", "☁" }, + { ":cloud_with_lightning:", "🌩" }, + { ":cloud_with_lightning_and_rain:", "⛈" }, + { ":cloud_with_rain:", "🌧" }, + { ":cloud_with_snow:", "🌨" }, + { ":clown_face:", "🤡" }, + { ":clubs:", "♣" }, + { ":cn:", "🇨🇳" }, + { ":cocktail:", "🍸" }, + { ":cocos_islands:", "🇨🇨" }, + { ":coffee:", "☕" }, + { ":coffin:", "⚰" }, + { ":cold_sweat:", "😰" }, + { ":collision:", "💥" }, + { ":colombia:", "🇨🇴" }, + { ":comet:", "☄" }, + { ":comoros:", "🇰🇲" }, + { ":computer:", "💻" }, + { ":computer_mouse:", "🖱" }, + { ":confetti_ball:", "🎊" }, + { ":confounded:", "😖" }, + { ":confused:", "😕" }, + { ":congo_brazzaville:", "🇨🇬" }, + { ":congo_kinshasa:", "🇨🇩" }, + { ":congratulations:", "㊗" }, + { ":construction:", "🚧" }, + { ":construction_worker:", "👷" }, + { ":construction_worker_man:", "👷" }, + { ":construction_worker_woman:", "👷♀" }, + { ":control_knobs:", "🎛" }, + { ":convenience_store:", "🏪" }, + { ":cook_islands:", "🇨🇰" }, + { ":cookie:", "🍪" }, + { ":cool:", "🆒" }, + { ":cop:", "👮" }, + { ":copyright:", "©" }, + { ":corn:", "🌽" }, + { ":costa_rica:", "🇨🇷" }, + { ":cote_divoire:", "🇨🇮" }, + { ":couch_and_lamp:", "🛋" }, + { ":couple:", "👫" }, + { ":couple_with_heart:", "💑" }, + { ":couple_with_heart_man_man:", "👨❤👨" }, + { ":couple_with_heart_woman_man:", "💑" }, + { ":couple_with_heart_woman_woman:", "👩❤👩" }, + { ":couplekiss_man_man:", "👨❤💋👨" }, + { ":couplekiss_man_woman:", "💏" }, + { ":couplekiss_woman_woman:", "👩❤💋👩" }, + { ":cow:", "🐮" }, + { ":cow2:", "🐄" }, + { ":cowboy_hat_face:", "🤠" }, + { ":crab:", "🦀" }, + { ":crayon:", "🖍" }, + { ":credit_card:", "💳" }, + { ":crescent_moon:", "🌙" }, + { ":cricket:", "🏏" }, + { ":croatia:", "🇭🇷" }, + { ":crocodile:", "🐊" }, + { ":croissant:", "🥐" }, + { ":crossed_fingers:", "🤞" }, + { ":crossed_flags:", "🎌" }, + { ":crossed_swords:", "⚔" }, + { ":crown:", "👑" }, + { ":cry:", "😢" }, + { ":crying_cat_face:", "😿" }, + { ":crystal_ball:", "🔮" }, + { ":cuba:", "🇨🇺" }, + { ":cucumber:", "🥒" }, + { ":cupid:", "💘" }, + { ":curacao:", "🇨🇼" }, + { ":curly_loop:", "➰" }, + { ":currency_exchange:", "💱" }, + { ":curry:", "🍛" }, + { ":custard:", "🍮" }, + { ":customs:", "🛃" }, + { ":cyclone:", "🌀" }, + { ":cyprus:", "🇨🇾" }, + { ":czech_republic:", "🇨🇿" }, + { ":dagger:", "🗡" }, + { ":dancer:", "💃" }, + { ":dancers:", "👯" }, + { ":dancing_men:", "👯♂" }, + { ":dancing_women:", "👯" }, + { ":dango:", "🍡" }, + { ":dark_sunglasses:", "🕶" }, + { ":dart:", "🎯" }, + { ":dash:", "💨" }, + { ":date:", "📅" }, + { ":de:", "🇩🇪" }, + { ":deciduous_tree:", "🌳" }, + { ":deer:", "🦌" }, + { ":denmark:", "🇩🇰" }, + { ":department_store:", "🏬" }, + { ":derelict_house:", "🏚" }, + { ":desert:", "🏜" }, + { ":desert_island:", "🏝" }, + { ":desktop_computer:", "🖥" }, + { ":detective:", "🕵" }, + { ":diamond_shape_with_a_dot_inside:", "💠" }, + { ":diamonds:", "♦" }, + { ":disappointed:", "😞" }, + { ":disappointed_relieved:", "😥" }, + { ":dizzy:", "💫" }, + { ":dizzy_face:", "😵" }, + { ":djibouti:", "🇩🇯" }, + { ":do_not_litter:", "🚯" }, + { ":dog:", "🐶" }, + { ":dog2:", "🐕" }, + { ":dollar:", "💵" }, + { ":dolls:", "🎎" }, + { ":dolphin:", "🐬" }, + { ":dominica:", "🇩🇲" }, + { ":dominican_republic:", "🇩🇴" }, + { ":door:", "🚪" }, + { ":doughnut:", "🍩" }, + { ":dove:", "🕊" }, + { ":dragon:", "🐉" }, + { ":dragon_face:", "🐲" }, + { ":dress:", "👗" }, + { ":dromedary_camel:", "🐪" }, + { ":drooling_face:", "🤤" }, + { ":droplet:", "💧" }, + { ":drum:", "🥁" }, + { ":duck:", "🦆" }, + { ":dvd:", "📀" }, + { ":e-mail:", "📧" }, + { ":eagle:", "🦅" }, + { ":ear:", "👂" }, + { ":ear_of_rice:", "🌾" }, + { ":earth_africa:", "🌍" }, + { ":earth_americas:", "🌎" }, + { ":earth_asia:", "🌏" }, + { ":ecuador:", "🇪🇨" }, + { ":egg:", "🥚" }, + { ":eggplant:", "🍆" }, + { ":egypt:", "🇪🇬" }, + { ":eight:", "8⃣" }, + { ":eight_pointed_black_star:", "✴" }, + { ":eight_spoked_asterisk:", "✳" }, + { ":el_salvador:", "🇸🇻" }, + { ":electric_plug:", "🔌" }, + { ":elephant:", "🐘" }, + { ":email:", "✉" }, + { ":end:", "🔚" }, + { ":envelope:", "✉" }, + { ":envelope_with_arrow:", "📩" }, + { ":equatorial_guinea:", "🇬🇶" }, + { ":eritrea:", "🇪🇷" }, + { ":es:", "🇪🇸" }, + { ":estonia:", "🇪🇪" }, + { ":ethiopia:", "🇪🇹" }, + { ":eu:", "🇪🇺" }, + { ":euro:", "💶" }, + { ":european_castle:", "🏰" }, + { ":european_post_office:", "🏤" }, + { ":european_union:", "🇪🇺" }, + { ":evergreen_tree:", "🌲" }, + { ":exclamation:", "❗" }, + { ":expressionless:", "😑" }, + { ":eye:", "👁" }, + { ":eye_speech_bubble:", "👁🗨" }, + { ":eyeglasses:", "👓" }, + { ":eyes:", "👀" }, + { ":face_with_head_bandage:", "🤕" }, + { ":face_with_thermometer:", "🤒" }, + { ":facepunch:", "👊" }, + { ":factory:", "🏭" }, + { ":falkland_islands:", "🇫🇰" }, + { ":fallen_leaf:", "🍂" }, + { ":family:", "👪" }, + { ":family_man_boy:", "👨👦" }, + { ":family_man_boy_boy:", "👨👦👦" }, + { ":family_man_girl:", "👨👧" }, + { ":family_man_girl_boy:", "👨👧👦" }, + { ":family_man_girl_girl:", "👨👧👧" }, + { ":family_man_man_boy:", "👨👨👦" }, + { ":family_man_man_boy_boy:", "👨👨👦👦" }, + { ":family_man_man_girl:", "👨👨👧" }, + { ":family_man_man_girl_boy:", "👨👨👧👦" }, + { ":family_man_man_girl_girl:", "👨👨👧👧" }, + { ":family_man_woman_boy:", "👪" }, + { ":family_man_woman_boy_boy:", "👨👩👦👦" }, + { ":family_man_woman_girl:", "👨👩👧" }, + { ":family_man_woman_girl_boy:", "👨👩👧👦" }, + { ":family_man_woman_girl_girl:", "👨👩👧👧" }, + { ":family_woman_boy:", "👩👦" }, + { ":family_woman_boy_boy:", "👩👦👦" }, + { ":family_woman_girl:", "👩👧" }, + { ":family_woman_girl_boy:", "👩👧👦" }, + { ":family_woman_girl_girl:", "👩👧👧" }, + { ":family_woman_woman_boy:", "👩👩👦" }, + { ":family_woman_woman_boy_boy:", "👩👩👦👦" }, + { ":family_woman_woman_girl:", "👩👩👧" }, + { ":family_woman_woman_girl_boy:", "👩👩👧👦" }, + { ":family_woman_woman_girl_girl:", "👩👩👧👧" }, + { ":faroe_islands:", "🇫🇴" }, + { ":fast_forward:", "⏩" }, + { ":fax:", "📠" }, + { ":fearful:", "😨" }, + { ":feet:", "🐾" }, + { ":female_detective:", "🕵♀" }, + { ":ferris_wheel:", "🎡" }, + { ":ferry:", "⛴" }, + { ":field_hockey:", "🏑" }, + { ":fiji:", "🇫🇯" }, + { ":file_cabinet:", "🗄" }, + { ":file_folder:", "📁" }, + { ":film_projector:", "📽" }, + { ":film_strip:", "🎞" }, + { ":finland:", "🇫🇮" }, + { ":fire:", "🔥" }, + { ":fire_engine:", "🚒" }, + { ":fireworks:", "🎆" }, + { ":first_quarter_moon:", "🌓" }, + { ":first_quarter_moon_with_face:", "🌛" }, + { ":fish:", "🐟" }, + { ":fish_cake:", "🍥" }, + { ":fishing_pole_and_fish:", "🎣" }, + { ":fist:", "✊" }, + { ":fist_left:", "🤛" }, + { ":fist_oncoming:", "👊" }, + { ":fist_raised:", "✊" }, + { ":fist_right:", "🤜" }, + { ":five:", "5⃣" }, + { ":flags:", "🎏" }, + { ":flashlight:", "🔦" }, + { ":fleur_de_lis:", "⚜" }, + { ":flight_arrival:", "🛬" }, + { ":flight_departure:", "🛫" }, + { ":flipper:", "🐬" }, + { ":floppy_disk:", "💾" }, + { ":flower_playing_cards:", "🎴" }, + { ":flushed:", "😳" }, + { ":fog:", "🌫" }, + { ":foggy:", "🌁" }, + { ":football:", "🏈" }, + { ":footprints:", "👣" }, + { ":fork_and_knife:", "🍴" }, + { ":fountain:", "⛲" }, + { ":fountain_pen:", "🖋" }, + { ":four:", "4⃣" }, + { ":four_leaf_clover:", "🍀" }, + { ":fox_face:", "🦊" }, + { ":fr:", "🇫🇷" }, + { ":framed_picture:", "🖼" }, + { ":free:", "🆓" }, + { ":french_guiana:", "🇬🇫" }, + { ":french_polynesia:", "🇵🇫" }, + { ":french_southern_territories:", "🇹🇫" }, + { ":fried_egg:", "🍳" }, + { ":fried_shrimp:", "🍤" }, + { ":fries:", "🍟" }, + { ":frog:", "🐸" }, + { ":frowning:", "😦" }, + { ":frowning_face:", "☹" }, + { ":frowning_man:", "🙍♂" }, + { ":frowning_woman:", "🙍" }, + { ":fu:", "🖕" }, + { ":fuelpump:", "⛽" }, + { ":full_moon:", "🌕" }, + { ":full_moon_with_face:", "🌝" }, + { ":funeral_urn:", "⚱" }, + { ":gabon:", "🇬🇦" }, + { ":gambia:", "🇬🇲" }, + { ":game_die:", "🎲" }, + { ":gb:", "🇬🇧" }, + { ":gear:", "⚙" }, + { ":gem:", "💎" }, + { ":gemini:", "♊" }, + { ":georgia:", "🇬🇪" }, + { ":ghana:", "🇬🇭" }, + { ":ghost:", "👻" }, + { ":gibraltar:", "🇬🇮" }, + { ":gift:", "🎁" }, + { ":gift_heart:", "💝" }, + { ":girl:", "👧" }, + { ":globe_with_meridians:", "🌐" }, + { ":goal_net:", "🥅" }, + { ":goat:", "🐐" }, + { ":golf:", "⛳" }, + { ":golfing_man:", "🏌" }, + { ":golfing_woman:", "🏌♀" }, + { ":gorilla:", "🦍" }, + { ":grapes:", "🍇" }, + { ":greece:", "🇬🇷" }, + { ":green_apple:", "🍏" }, + { ":green_book:", "📗" }, + { ":green_heart:", "💚" }, + { ":green_salad:", "🥗" }, + { ":greenland:", "🇬🇱" }, + { ":grenada:", "🇬🇩" }, + { ":grey_exclamation:", "❕" }, + { ":grey_question:", "❔" }, + { ":grimacing:", "😬" }, + { ":grin:", "😁" }, + { ":grinning:", "😀" }, + { ":guadeloupe:", "🇬🇵" }, + { ":guam:", "🇬🇺" }, + { ":guardsman:", "💂" }, + { ":guardswoman:", "💂♀" }, + { ":guatemala:", "🇬🇹" }, + { ":guernsey:", "🇬🇬" }, + { ":guinea:", "🇬🇳" }, + { ":guinea_bissau:", "🇬🇼" }, + { ":guitar:", "🎸" }, + { ":gun:", "🔫" }, + { ":guyana:", "🇬🇾" }, + { ":haircut:", "💇" }, + { ":haircut_man:", "💇♂" }, + { ":haircut_woman:", "💇" }, + { ":haiti:", "🇭🇹" }, + { ":hamburger:", "🍔" }, + { ":hammer:", "🔨" }, + { ":hammer_and_pick:", "⚒" }, + { ":hammer_and_wrench:", "🛠" }, + { ":hamster:", "🐹" }, + { ":hand:", "✋" }, + { ":handbag:", "👜" }, + { ":handshake:", "🤝" }, + { ":hankey:", "💩" }, + { ":hash:", "#⃣" }, + { ":hatched_chick:", "🐥" }, + { ":hatching_chick:", "🐣" }, + { ":headphones:", "🎧" }, + { ":hear_no_evil:", "🙉" }, + { ":heart:", "❤" }, + { ":heart_decoration:", "💟" }, + { ":heart_eyes:", "😍" }, + { ":heart_eyes_cat:", "😻" }, + { ":heartbeat:", "💓" }, + { ":heartpulse:", "💗" }, + { ":hearts:", "♥" }, + { ":heavy_check_mark:", "✔" }, + { ":heavy_division_sign:", "➗" }, + { ":heavy_dollar_sign:", "💲" }, + { ":heavy_exclamation_mark:", "❗" }, + { ":heavy_heart_exclamation:", "❣" }, + { ":heavy_minus_sign:", "➖" }, + { ":heavy_multiplication_x:", "✖" }, + { ":heavy_plus_sign:", "➕" }, + { ":helicopter:", "🚁" }, + { ":herb:", "🌿" }, + { ":hibiscus:", "🌺" }, + { ":high_brightness:", "🔆" }, + { ":high_heel:", "👠" }, + { ":hocho:", "🔪" }, + { ":hole:", "🕳" }, + { ":honduras:", "🇭🇳" }, + { ":honey_pot:", "🍯" }, + { ":honeybee:", "🐝" }, + { ":hong_kong:", "🇭🇰" }, + { ":horse:", "🐴" }, + { ":horse_racing:", "🏇" }, + { ":hospital:", "🏥" }, + { ":hot_pepper:", "🌶" }, + { ":hotdog:", "🌭" }, + { ":hotel:", "🏨" }, + { ":hotsprings:", "♨" }, + { ":hourglass:", "⌛" }, + { ":hourglass_flowing_sand:", "⏳" }, + { ":house:", "🏠" }, + { ":house_with_garden:", "🏡" }, + { ":houses:", "🏘" }, + { ":hugs:", "🤗" }, + { ":hungary:", "🇭🇺" }, + { ":hushed:", "😯" }, + { ":ice_cream:", "🍨" }, + { ":ice_hockey:", "🏒" }, + { ":ice_skate:", "⛸" }, + { ":icecream:", "🍦" }, + { ":iceland:", "🇮🇸" }, + { ":id:", "🆔" }, + { ":ideograph_advantage:", "🉐" }, + { ":imp:", "👿" }, + { ":inbox_tray:", "📥" }, + { ":incoming_envelope:", "📨" }, + { ":india:", "🇮🇳" }, + { ":indonesia:", "🇮🇩" }, + { ":information_desk_person:", "💁" }, + { ":information_source:", "ℹ" }, + { ":innocent:", "😇" }, + { ":interrobang:", "⁉" }, + { ":iphone:", "📱" }, + { ":iran:", "🇮🇷" }, + { ":iraq:", "🇮🇶" }, + { ":ireland:", "🇮🇪" }, + { ":isle_of_man:", "🇮🇲" }, + { ":israel:", "🇮🇱" }, + { ":it:", "🇮🇹" }, + { ":izakaya_lantern:", "🏮" }, + { ":jack_o_lantern:", "🎃" }, + { ":jamaica:", "🇯🇲" }, + { ":japan:", "🗾" }, + { ":japanese_castle:", "🏯" }, + { ":japanese_goblin:", "👺" }, + { ":japanese_ogre:", "👹" }, + { ":jeans:", "👖" }, + { ":jersey:", "🇯🇪" }, + { ":jordan:", "🇯🇴" }, + { ":joy:", "😂" }, + { ":joy_cat:", "😹" }, + { ":joystick:", "🕹" }, + { ":jp:", "🇯🇵" }, + { ":kaaba:", "🕋" }, + { ":kazakhstan:", "🇰🇿" }, + { ":kenya:", "🇰🇪" }, + { ":key:", "🔑" }, + { ":keyboard:", "⌨" }, + { ":keycap_ten:", "🔟" }, + { ":kick_scooter:", "🛴" }, + { ":kimono:", "👘" }, + { ":kiribati:", "🇰🇮" }, + { ":kiss:", "💋" }, + { ":kissing:", "😗" }, + { ":kissing_cat:", "😽" }, + { ":kissing_closed_eyes:", "😚" }, + { ":kissing_heart:", "😘" }, + { ":kissing_smiling_eyes:", "😙" }, + { ":kiwi_fruit:", "🥝" }, + { ":knife:", "🔪" }, + { ":koala:", "🐨" }, + { ":koko:", "🈁" }, + { ":kosovo:", "🇽🇰" }, + { ":kr:", "🇰🇷" }, + { ":kuwait:", "🇰🇼" }, + { ":kyrgyzstan:", "🇰🇬" }, + { ":label:", "🏷" }, + { ":lantern:", "🏮" }, + { ":laos:", "🇱🇦" }, + { ":large_blue_circle:", "🔵" }, + { ":large_blue_diamond:", "🔷" }, + { ":large_orange_diamond:", "🔶" }, + { ":last_quarter_moon:", "🌗" }, + { ":last_quarter_moon_with_face:", "🌜" }, + { ":latin_cross:", "✝" }, + { ":latvia:", "🇱🇻" }, + { ":laughing:", "😆" }, + { ":leaves:", "🍃" }, + { ":lebanon:", "🇱🇧" }, + { ":ledger:", "📒" }, + { ":left_luggage:", "🛅" }, + { ":left_right_arrow:", "↔" }, + { ":leftwards_arrow_with_hook:", "↩" }, + { ":lemon:", "🍋" }, + { ":leo:", "♌" }, + { ":leopard:", "🐆" }, + { ":lesotho:", "🇱🇸" }, + { ":level_slider:", "🎚" }, + { ":liberia:", "🇱🇷" }, + { ":libra:", "♎" }, + { ":libya:", "🇱🇾" }, + { ":liechtenstein:", "🇱🇮" }, + { ":light_rail:", "🚈" }, + { ":link:", "🔗" }, + { ":lion:", "🦁" }, + { ":lips:", "👄" }, + { ":lipstick:", "💄" }, + { ":lithuania:", "🇱🇹" }, + { ":lizard:", "🦎" }, + { ":lock:", "🔒" }, + { ":lock_with_ink_pen:", "🔏" }, + { ":lollipop:", "🍭" }, + { ":loop:", "➿" }, + { ":loud_sound:", "🔊" }, + { ":loudspeaker:", "📢" }, + { ":love_hotel:", "🏩" }, + { ":love_letter:", "💌" }, + { ":low_brightness:", "🔅" }, + { ":luxembourg:", "🇱🇺" }, + { ":lying_face:", "🤥" }, + { ":m:", "Ⓜ" }, + { ":macau:", "🇲🇴" }, + { ":macedonia:", "🇲🇰" }, + { ":madagascar:", "🇲🇬" }, + { ":mag:", "🔍" }, + { ":mag_right:", "🔎" }, + { ":mahjong:", "🀄" }, + { ":mailbox:", "📫" }, + { ":mailbox_closed:", "📪" }, + { ":mailbox_with_mail:", "📬" }, + { ":mailbox_with_no_mail:", "📭" }, + { ":malawi:", "🇲🇼" }, + { ":malaysia:", "🇲🇾" }, + { ":maldives:", "🇲🇻" }, + { ":male_detective:", "🕵" }, + { ":mali:", "🇲🇱" }, + { ":malta:", "🇲🇹" }, + { ":man:", "👨" }, + { ":man_artist:", "👨🎨" }, + { ":man_astronaut:", "👨🚀" }, + { ":man_cartwheeling:", "🤸♂" }, + { ":man_cook:", "👨🍳" }, + { ":man_dancing:", "🕺" }, + { ":man_facepalming:", "🤦♂" }, + { ":man_factory_worker:", "👨🏭" }, + { ":man_farmer:", "👨🌾" }, + { ":man_firefighter:", "👨🚒" }, + { ":man_health_worker:", "👨⚕" }, + { ":man_in_tuxedo:", "🤵" }, + { ":man_judge:", "👨⚖" }, + { ":man_juggling:", "🤹♂" }, + { ":man_mechanic:", "👨🔧" }, + { ":man_office_worker:", "👨💼" }, + { ":man_pilot:", "👨✈" }, + { ":man_playing_handball:", "🤾♂" }, + { ":man_playing_water_polo:", "🤽♂" }, + { ":man_scientist:", "👨🔬" }, + { ":man_shrugging:", "🤷♂" }, + { ":man_singer:", "👨🎤" }, + { ":man_student:", "👨🎓" }, + { ":man_teacher:", "👨🏫" }, + { ":man_technologist:", "👨💻" }, + { ":man_with_gua_pi_mao:", "👲" }, + { ":man_with_turban:", "👳" }, + { ":mandarin:", "🍊" }, + { ":mans_shoe:", "👞" }, + { ":mantelpiece_clock:", "🕰" }, + { ":maple_leaf:", "🍁" }, + { ":marshall_islands:", "🇲🇭" }, + { ":martial_arts_uniform:", "🥋" }, + { ":martinique:", "🇲🇶" }, + { ":mask:", "😷" }, + { ":massage:", "💆" }, + { ":massage_man:", "💆♂" }, + { ":massage_woman:", "💆" }, + { ":mauritania:", "🇲🇷" }, + { ":mauritius:", "🇲🇺" }, + { ":mayotte:", "🇾🇹" }, + { ":meat_on_bone:", "🍖" }, + { ":medal_military:", "🎖" }, + { ":medal_sports:", "🏅" }, + { ":mega:", "📣" }, + { ":melon:", "🍈" }, + { ":memo:", "📝" }, + { ":men_wrestling:", "🤼♂" }, + { ":menorah:", "🕎" }, + { ":mens:", "🚹" }, + { ":metal:", "🤘" }, + { ":metro:", "🚇" }, + { ":mexico:", "🇲🇽" }, + { ":micronesia:", "🇫🇲" }, + { ":microphone:", "🎤" }, + { ":microscope:", "🔬" }, + { ":middle_finger:", "🖕" }, + { ":milk_glass:", "🥛" }, + { ":milky_way:", "🌌" }, + { ":minibus:", "🚐" }, + { ":minidisc:", "💽" }, + { ":mobile_phone_off:", "📴" }, + { ":moldova:", "🇲🇩" }, + { ":monaco:", "🇲🇨" }, + { ":money_mouth_face:", "🤑" }, + { ":money_with_wings:", "💸" }, + { ":moneybag:", "💰" }, + { ":mongolia:", "🇲🇳" }, + { ":monkey:", "🐒" }, + { ":monkey_face:", "🐵" }, + { ":monorail:", "🚝" }, + { ":montenegro:", "🇲🇪" }, + { ":montserrat:", "🇲🇸" }, + { ":moon:", "🌔" }, + { ":morocco:", "🇲🇦" }, + { ":mortar_board:", "🎓" }, + { ":mosque:", "🕌" }, + { ":motor_boat:", "🛥" }, + { ":motor_scooter:", "🛵" }, + { ":motorcycle:", "🏍" }, + { ":motorway:", "🛣" }, + { ":mount_fuji:", "🗻" }, + { ":mountain:", "⛰" }, + { ":mountain_bicyclist:", "🚵" }, + { ":mountain_biking_man:", "🚵" }, + { ":mountain_biking_woman:", "🚵♀" }, + { ":mountain_cableway:", "🚠" }, + { ":mountain_railway:", "🚞" }, + { ":mountain_snow:", "🏔" }, + { ":mouse:", "🐭" }, + { ":mouse2:", "🐁" }, + { ":movie_camera:", "🎥" }, + { ":moyai:", "🗿" }, + { ":mozambique:", "🇲🇿" }, + { ":mrs_claus:", "🤶" }, + { ":muscle:", "💪" }, + { ":mushroom:", "🍄" }, + { ":musical_keyboard:", "🎹" }, + { ":musical_note:", "🎵" }, + { ":musical_score:", "🎼" }, + { ":mute:", "🔇" }, + { ":myanmar:", "🇲🇲" }, + { ":nail_care:", "💅" }, + { ":name_badge:", "📛" }, + { ":namibia:", "🇳🇦" }, + { ":national_park:", "🏞" }, + { ":nauru:", "🇳🇷" }, + { ":nauseated_face:", "🤢" }, + { ":necktie:", "👔" }, + { ":negative_squared_cross_mark:", "❎" }, + { ":nepal:", "🇳🇵" }, + { ":nerd_face:", "🤓" }, + { ":netherlands:", "🇳🇱" }, + { ":neutral_face:", "😐" }, + { ":new:", "🆕" }, + { ":new_caledonia:", "🇳🇨" }, + { ":new_moon:", "🌑" }, + { ":new_moon_with_face:", "🌚" }, + { ":new_zealand:", "🇳🇿" }, + { ":newspaper:", "📰" }, + { ":newspaper_roll:", "🗞" }, + { ":next_track_button:", "⏭" }, + { ":ng:", "🆖" }, + { ":ng_man:", "🙅♂" }, + { ":ng_woman:", "🙅" }, + { ":nicaragua:", "🇳🇮" }, + { ":niger:", "🇳🇪" }, + { ":nigeria:", "🇳🇬" }, + { ":night_with_stars:", "🌃" }, + { ":nine:", "9⃣" }, + { ":niue:", "🇳🇺" }, + { ":no_bell:", "🔕" }, + { ":no_bicycles:", "🚳" }, + { ":no_entry:", "⛔" }, + { ":no_entry_sign:", "🚫" }, + { ":no_good:", "🙅" }, + { ":no_good_man:", "🙅♂" }, + { ":no_good_woman:", "🙅" }, + { ":no_mobile_phones:", "📵" }, + { ":no_mouth:", "😶" }, + { ":no_pedestrians:", "🚷" }, + { ":no_smoking:", "🚭" }, + { ":non-potable_water:", "🚱" }, + { ":norfolk_island:", "🇳🇫" }, + { ":north_korea:", "🇰🇵" }, + { ":northern_mariana_islands:", "🇲🇵" }, + { ":norway:", "🇳🇴" }, + { ":nose:", "👃" }, + { ":notebook:", "📓" }, + { ":notebook_with_decorative_cover:", "📔" }, + { ":notes:", "🎶" }, + { ":nut_and_bolt:", "🔩" }, + { ":o:", "⭕" }, + { ":o2:", "🅾" }, + { ":ocean:", "🌊" }, + { ":octopus:", "🐙" }, + { ":oden:", "🍢" }, + { ":office:", "🏢" }, + { ":oil_drum:", "🛢" }, + { ":ok:", "🆗" }, + { ":ok_hand:", "👌" }, + { ":ok_man:", "🙆♂" }, + { ":ok_woman:", "🙆" }, + { ":old_key:", "🗝" }, + { ":older_man:", "👴" }, + { ":older_woman:", "👵" }, + { ":om:", "🕉" }, + { ":oman:", "🇴🇲" }, + { ":on:", "🔛" }, + { ":oncoming_automobile:", "🚘" }, + { ":oncoming_bus:", "🚍" }, + { ":oncoming_police_car:", "🚔" }, + { ":oncoming_taxi:", "🚖" }, + { ":one:", "1⃣" }, + { ":open_book:", "📖" }, + { ":open_file_folder:", "📂" }, + { ":open_hands:", "👐" }, + { ":open_mouth:", "😮" }, + { ":open_umbrella:", "☂" }, + { ":ophiuchus:", "⛎" }, + { ":orange:", "🍊" }, + { ":orange_book:", "📙" }, + { ":orthodox_cross:", "☦" }, + { ":outbox_tray:", "📤" }, + { ":owl:", "🦉" }, + { ":ox:", "🐂" }, + { ":package:", "📦" }, + { ":page_facing_up:", "📄" }, + { ":page_with_curl:", "📃" }, + { ":pager:", "📟" }, + { ":paintbrush:", "🖌" }, + { ":pakistan:", "🇵🇰" }, + { ":palau:", "🇵🇼" }, + { ":palestinian_territories:", "🇵🇸" }, + { ":palm_tree:", "🌴" }, + { ":panama:", "🇵🇦" }, + { ":pancakes:", "🥞" }, + { ":panda_face:", "🐼" }, + { ":paperclip:", "📎" }, + { ":paperclips:", "🖇" }, + { ":papua_new_guinea:", "🇵🇬" }, + { ":paraguay:", "🇵🇾" }, + { ":parasol_on_ground:", "⛱" }, + { ":parking:", "🅿" }, + { ":part_alternation_mark:", "〽" }, + { ":partly_sunny:", "⛅" }, + { ":passenger_ship:", "🛳" }, + { ":passport_control:", "🛂" }, + { ":pause_button:", "⏸" }, + { ":paw_prints:", "🐾" }, + { ":peace_symbol:", "☮" }, + { ":peach:", "🍑" }, + { ":peanuts:", "🥜" }, + { ":pear:", "🍐" }, + { ":pen:", "🖊" }, + { ":pencil:", "📝" }, + { ":pencil2:", "✏" }, + { ":penguin:", "🐧" }, + { ":pensive:", "😔" }, + { ":performing_arts:", "🎭" }, + { ":persevere:", "😣" }, + { ":person_fencing:", "🤺" }, + { ":person_frowning:", "🙍" }, + { ":person_with_blond_hair:", "👱" }, + { ":person_with_pouting_face:", "🙎" }, + { ":peru:", "🇵🇪" }, + { ":philippines:", "🇵🇭" }, + { ":phone:", "☎" }, + { ":pick:", "⛏" }, + { ":pig:", "🐷" }, + { ":pig2:", "🐖" }, + { ":pig_nose:", "🐽" }, + { ":pill:", "💊" }, + { ":pineapple:", "🍍" }, + { ":ping_pong:", "🏓" }, + { ":pisces:", "♓" }, + { ":pitcairn_islands:", "🇵🇳" }, + { ":pizza:", "🍕" }, + { ":place_of_worship:", "🛐" }, + { ":plate_with_cutlery:", "🍽" }, + { ":play_or_pause_button:", "⏯" }, + { ":point_down:", "👇" }, + { ":point_left:", "👈" }, + { ":point_right:", "👉" }, + { ":point_up:", "☝" }, + { ":point_up_2:", "👆" }, + { ":poland:", "🇵🇱" }, + { ":police_car:", "🚓" }, + { ":policeman:", "👮" }, + { ":policewoman:", "👮♀" }, + { ":poodle:", "🐩" }, + { ":poop:", "💩" }, + { ":popcorn:", "🍿" }, + { ":portugal:", "🇵🇹" }, + { ":post_office:", "🏣" }, + { ":postal_horn:", "📯" }, + { ":postbox:", "📮" }, + { ":potable_water:", "🚰" }, + { ":potato:", "🥔" }, + { ":pouch:", "👝" }, + { ":poultry_leg:", "🍗" }, + { ":pound:", "💷" }, + { ":pout:", "😡" }, + { ":pouting_cat:", "😾" }, + { ":pouting_man:", "🙎♂" }, + { ":pouting_woman:", "🙎" }, + { ":pray:", "🙏" }, + { ":prayer_beads:", "📿" }, + { ":pregnant_woman:", "🤰" }, + { ":previous_track_button:", "⏮" }, + { ":prince:", "🤴" }, + { ":princess:", "👸" }, + { ":printer:", "🖨" }, + { ":puerto_rico:", "🇵🇷" }, + { ":punch:", "👊" }, + { ":purple_heart:", "💜" }, + { ":purse:", "👛" }, + { ":pushpin:", "📌" }, + { ":put_litter_in_its_place:", "🚮" }, + { ":qatar:", "🇶🇦" }, + { ":question:", "❓" }, + { ":rabbit:", "🐰" }, + { ":rabbit2:", "🐇" }, + { ":racehorse:", "🐎" }, + { ":racing_car:", "🏎" }, + { ":radio:", "📻" }, + { ":radio_button:", "🔘" }, + { ":radioactive:", "☢" }, + { ":rage:", "😡" }, + { ":railway_car:", "🚃" }, + { ":railway_track:", "🛤" }, + { ":rainbow:", "🌈" }, + { ":rainbow_flag:", "🏳🌈" }, + { ":raised_back_of_hand:", "🤚" }, + { ":raised_hand:", "✋" }, + { ":raised_hand_with_fingers_splayed:", "🖐" }, + { ":raised_hands:", "🙌" }, + { ":raising_hand:", "🙋" }, + { ":raising_hand_man:", "🙋♂" }, + { ":raising_hand_woman:", "🙋" }, + { ":ram:", "🐏" }, + { ":ramen:", "🍜" }, + { ":rat:", "🐀" }, + { ":record_button:", "⏺" }, + { ":recycle:", "♻" }, + { ":red_car:", "🚗" }, + { ":red_circle:", "🔴" }, + { ":registered:", "®" }, + { ":relaxed:", "☺" }, + { ":relieved:", "😌" }, + { ":reminder_ribbon:", "🎗" }, + { ":repeat:", "🔁" }, + { ":repeat_one:", "🔂" }, + { ":rescue_worker_helmet:", "⛑" }, + { ":restroom:", "🚻" }, + { ":reunion:", "🇷🇪" }, + { ":revolving_hearts:", "💞" }, + { ":rewind:", "⏪" }, + { ":rhinoceros:", "🦏" }, + { ":ribbon:", "🎀" }, + { ":rice:", "🍚" }, + { ":rice_ball:", "🍙" }, + { ":rice_cracker:", "🍘" }, + { ":rice_scene:", "🎑" }, + { ":right_anger_bubble:", "🗯" }, + { ":ring:", "💍" }, + { ":robot:", "🤖" }, + { ":rocket:", "🚀" }, + { ":rofl:", "🤣" }, + { ":roll_eyes:", "🙄" }, + { ":roller_coaster:", "🎢" }, + { ":romania:", "🇷🇴" }, + { ":rooster:", "🐓" }, + { ":rose:", "🌹" }, + { ":rosette:", "🏵" }, + { ":rotating_light:", "🚨" }, + { ":round_pushpin:", "📍" }, + { ":rowboat:", "🚣" }, + { ":rowing_man:", "🚣" }, + { ":rowing_woman:", "🚣♀" }, + { ":ru:", "🇷🇺" }, + { ":rugby_football:", "🏉" }, + { ":runner:", "🏃" }, + { ":running:", "🏃" }, + { ":running_man:", "🏃" }, + { ":running_shirt_with_sash:", "🎽" }, + { ":running_woman:", "🏃♀" }, + { ":rwanda:", "🇷🇼" }, + { ":sa:", "🈂" }, + { ":sagittarius:", "♐" }, + { ":sailboat:", "⛵" }, + { ":sake:", "🍶" }, + { ":samoa:", "🇼🇸" }, + { ":san_marino:", "🇸🇲" }, + { ":sandal:", "👡" }, + { ":santa:", "🎅" }, + { ":sao_tome_principe:", "🇸🇹" }, + { ":satellite:", "📡" }, + { ":satisfied:", "😆" }, + { ":saudi_arabia:", "🇸🇦" }, + { ":saxophone:", "🎷" }, + { ":school:", "🏫" }, + { ":school_satchel:", "🎒" }, + { ":scissors:", "✂" }, + { ":scorpion:", "🦂" }, + { ":scorpius:", "♏" }, + { ":scream:", "😱" }, + { ":scream_cat:", "🙀" }, + { ":scroll:", "📜" }, + { ":seat:", "💺" }, + { ":secret:", "㊙" }, + { ":see_no_evil:", "🙈" }, + { ":seedling:", "🌱" }, + { ":selfie:", "🤳" }, + { ":senegal:", "🇸🇳" }, + { ":serbia:", "🇷🇸" }, + { ":seven:", "7⃣" }, + { ":seychelles:", "🇸🇨" }, + { ":shallow_pan_of_food:", "🥘" }, + { ":shamrock:", "☘" }, + { ":shark:", "🦈" }, + { ":shaved_ice:", "🍧" }, + { ":sheep:", "🐑" }, + { ":shell:", "🐚" }, + { ":shield:", "🛡" }, + { ":shinto_shrine:", "⛩" }, + { ":ship:", "🚢" }, + { ":shirt:", "👕" }, + { ":shit:", "💩" }, + { ":shoe:", "👞" }, + { ":shopping:", "🛍" }, + { ":shopping_cart:", "🛒" }, + { ":shower:", "🚿" }, + { ":shrimp:", "🦐" }, + { ":sierra_leone:", "🇸🇱" }, + { ":signal_strength:", "📶" }, + { ":singapore:", "🇸🇬" }, + { ":sint_maarten:", "🇸🇽" }, + { ":six:", "6⃣" }, + { ":six_pointed_star:", "🔯" }, + { ":ski:", "🎿" }, + { ":skier:", "⛷" }, + { ":skull:", "💀" }, + { ":skull_and_crossbones:", "☠" }, + { ":sleeping:", "😴" }, + { ":sleeping_bed:", "🛌" }, + { ":sleepy:", "😪" }, + { ":slightly_frowning_face:", "🙁" }, + { ":slightly_smiling_face:", "🙂" }, + { ":slot_machine:", "🎰" }, + { ":slovakia:", "🇸🇰" }, + { ":slovenia:", "🇸🇮" }, + { ":small_airplane:", "🛩" }, + { ":small_blue_diamond:", "🔹" }, + { ":small_orange_diamond:", "🔸" }, + { ":small_red_triangle:", "🔺" }, + { ":small_red_triangle_down:", "🔻" }, + { ":smile:", "😄" }, + { ":smile_cat:", "😸" }, + { ":smiley:", "😃" }, + { ":smiley_cat:", "😺" }, + { ":smiling_imp:", "😈" }, + { ":smirk:", "😏" }, + { ":smirk_cat:", "😼" }, + { ":smoking:", "🚬" }, + { ":snail:", "🐌" }, + { ":snake:", "🐍" }, + { ":sneezing_face:", "🤧" }, + { ":snowboarder:", "🏂" }, + { ":snowflake:", "❄" }, + { ":snowman:", "⛄" }, + { ":snowman_with_snow:", "☃" }, + { ":sob:", "😭" }, + { ":soccer:", "⚽" }, + { ":solomon_islands:", "🇸🇧" }, + { ":somalia:", "🇸🇴" }, + { ":soon:", "🔜" }, + { ":sos:", "🆘" }, + { ":sound:", "🔉" }, + { ":south_africa:", "🇿🇦" }, + { ":south_georgia_south_sandwich_islands:", "🇬🇸" }, + { ":south_sudan:", "🇸🇸" }, + { ":space_invader:", "👾" }, + { ":spades:", "♠" }, + { ":spaghetti:", "🍝" }, + { ":sparkle:", "❇" }, + { ":sparkler:", "🎇" }, + { ":sparkles:", "✨" }, + { ":sparkling_heart:", "💖" }, + { ":speak_no_evil:", "🙊" }, + { ":speaker:", "🔈" }, + { ":speaking_head:", "🗣" }, + { ":speech_balloon:", "💬" }, + { ":speedboat:", "🚤" }, + { ":spider:", "🕷" }, + { ":spider_web:", "🕸" }, + { ":spiral_calendar:", "🗓" }, + { ":spiral_notepad:", "🗒" }, + { ":spoon:", "🥄" }, + { ":squid:", "🦑" }, + { ":sri_lanka:", "🇱🇰" }, + { ":st_barthelemy:", "🇧🇱" }, + { ":st_helena:", "🇸🇭" }, + { ":st_kitts_nevis:", "🇰🇳" }, + { ":st_lucia:", "🇱🇨" }, + { ":st_pierre_miquelon:", "🇵🇲" }, + { ":st_vincent_grenadines:", "🇻🇨" }, + { ":stadium:", "🏟" }, + { ":star:", "⭐" }, + { ":star2:", "🌟" }, + { ":star_and_crescent:", "☪" }, + { ":star_of_david:", "✡" }, + { ":stars:", "🌠" }, + { ":station:", "🚉" }, + { ":statue_of_liberty:", "🗽" }, + { ":steam_locomotive:", "🚂" }, + { ":stew:", "🍲" }, + { ":stop_button:", "⏹" }, + { ":stop_sign:", "🛑" }, + { ":stopwatch:", "⏱" }, + { ":straight_ruler:", "📏" }, + { ":strawberry:", "🍓" }, + { ":stuck_out_tongue:", "😛" }, + { ":stuck_out_tongue_closed_eyes:", "😝" }, + { ":stuck_out_tongue_winking_eye:", "😜" }, + { ":studio_microphone:", "🎙" }, + { ":stuffed_flatbread:", "🥙" }, + { ":sudan:", "🇸🇩" }, + { ":sun_behind_large_cloud:", "🌥" }, + { ":sun_behind_rain_cloud:", "🌦" }, + { ":sun_behind_small_cloud:", "🌤" }, + { ":sun_with_face:", "🌞" }, + { ":sunflower:", "🌻" }, + { ":sunglasses:", "😎" }, + { ":sunny:", "☀" }, + { ":sunrise:", "🌅" }, + { ":sunrise_over_mountains:", "🌄" }, + { ":surfer:", "🏄" }, + { ":surfing_man:", "🏄" }, + { ":surfing_woman:", "🏄♀" }, + { ":suriname:", "🇸🇷" }, + { ":sushi:", "🍣" }, + { ":suspension_railway:", "🚟" }, + { ":swaziland:", "🇸🇿" }, + { ":sweat:", "😓" }, + { ":sweat_drops:", "💦" }, + { ":sweat_smile:", "😅" }, + { ":sweden:", "🇸🇪" }, + { ":sweet_potato:", "🍠" }, + { ":swimmer:", "🏊" }, + { ":swimming_man:", "🏊" }, + { ":swimming_woman:", "🏊♀" }, + { ":switzerland:", "🇨🇭" }, + { ":symbols:", "🔣" }, + { ":synagogue:", "🕍" }, + { ":syria:", "🇸🇾" }, + { ":syringe:", "💉" }, + { ":taco:", "🌮" }, + { ":tada:", "🎉" }, + { ":taiwan:", "🇹🇼" }, + { ":tajikistan:", "🇹🇯" }, + { ":tanabata_tree:", "🎋" }, + { ":tangerine:", "🍊" }, + { ":tanzania:", "🇹🇿" }, + { ":taurus:", "♉" }, + { ":taxi:", "🚕" }, + { ":tea:", "🍵" }, + { ":telephone:", "☎" }, + { ":telephone_receiver:", "📞" }, + { ":telescope:", "🔭" }, + { ":tennis:", "🎾" }, + { ":tent:", "⛺" }, + { ":thailand:", "🇹🇭" }, + { ":thermometer:", "🌡" }, + { ":thinking:", "🤔" }, + { ":thought_balloon:", "💭" }, + { ":three:", "3⃣" }, + { ":thumbsdown:", "👎" }, + { ":thumbsup:", "👍" }, + { ":ticket:", "🎫" }, + { ":tickets:", "🎟" }, + { ":tiger:", "🐯" }, + { ":tiger2:", "🐅" }, + { ":timer_clock:", "⏲" }, + { ":timor_leste:", "🇹🇱" }, + { ":tipping_hand_man:", "💁♂" }, + { ":tipping_hand_woman:", "💁" }, + { ":tired_face:", "😫" }, + { ":tm:", "™" }, + { ":togo:", "🇹🇬" }, + { ":toilet:", "🚽" }, + { ":tokelau:", "🇹🇰" }, + { ":tokyo_tower:", "🗼" }, + { ":tomato:", "🍅" }, + { ":tonga:", "🇹🇴" }, + { ":tongue:", "👅" }, + { ":top:", "🔝" }, + { ":tophat:", "🎩" }, + { ":tornado:", "🌪" }, + { ":tr:", "🇹🇷" }, + { ":trackball:", "🖲" }, + { ":tractor:", "🚜" }, + { ":traffic_light:", "🚥" }, + { ":train:", "🚋" }, + { ":train2:", "🚆" }, + { ":tram:", "🚊" }, + { ":triangular_flag_on_post:", "🚩" }, + { ":triangular_ruler:", "📐" }, + { ":trident:", "🔱" }, + { ":trinidad_tobago:", "🇹🇹" }, + { ":triumph:", "😤" }, + { ":trolleybus:", "🚎" }, + { ":trophy:", "🏆" }, + { ":tropical_drink:", "🍹" }, + { ":tropical_fish:", "🐠" }, + { ":truck:", "🚚" }, + { ":trumpet:", "🎺" }, + { ":tshirt:", "👕" }, + { ":tulip:", "🌷" }, + { ":tumbler_glass:", "🥃" }, + { ":tunisia:", "🇹🇳" }, + { ":turkey:", "🦃" }, + { ":turkmenistan:", "🇹🇲" }, + { ":turks_caicos_islands:", "🇹🇨" }, + { ":turtle:", "🐢" }, + { ":tuvalu:", "🇹🇻" }, + { ":tv:", "📺" }, + { ":twisted_rightwards_arrows:", "🔀" }, + { ":two:", "2⃣" }, + { ":two_hearts:", "💕" }, + { ":two_men_holding_hands:", "👬" }, + { ":two_women_holding_hands:", "👭" }, + { ":u5272:", "🈹" }, + { ":u5408:", "🈴" }, + { ":u55b6:", "🈺" }, + { ":u6307:", "🈯" }, + { ":u6708:", "🈷" }, + { ":u6709:", "🈶" }, + { ":u6e80:", "🈵" }, + { ":u7121:", "🈚" }, + { ":u7533:", "🈸" }, + { ":u7981:", "🈲" }, + { ":u7a7a:", "🈳" }, + { ":uganda:", "🇺🇬" }, + { ":uk:", "🇬🇧" }, + { ":ukraine:", "🇺🇦" }, + { ":umbrella:", "☔" }, + { ":unamused:", "😒" }, + { ":underage:", "🔞" }, + { ":unicorn:", "🦄" }, + { ":united_arab_emirates:", "🇦🇪" }, + { ":unlock:", "🔓" }, + { ":up:", "🆙" }, + { ":upside_down_face:", "🙃" }, + { ":uruguay:", "🇺🇾" }, + { ":us:", "🇺🇸" }, + { ":us_virgin_islands:", "🇻🇮" }, + { ":uzbekistan:", "🇺🇿" }, + { ":v:", "✌" }, + { ":vanuatu:", "🇻🇺" }, + { ":vatican_city:", "🇻🇦" }, + { ":venezuela:", "🇻🇪" }, + { ":vertical_traffic_light:", "🚦" }, + { ":vhs:", "📼" }, + { ":vibration_mode:", "📳" }, + { ":video_camera:", "📹" }, + { ":video_game:", "🎮" }, + { ":vietnam:", "🇻🇳" }, + { ":violin:", "🎻" }, + { ":virgo:", "♍" }, + { ":volcano:", "🌋" }, + { ":volleyball:", "🏐" }, + { ":vs:", "🆚" }, + { ":vulcan_salute:", "🖖" }, + { ":walking:", "🚶" }, + { ":walking_man:", "🚶" }, + { ":walking_woman:", "🚶♀" }, + { ":wallis_futuna:", "🇼🇫" }, + { ":waning_crescent_moon:", "🌘" }, + { ":waning_gibbous_moon:", "🌖" }, + { ":warning:", "⚠" }, + { ":wastebasket:", "🗑" }, + { ":watch:", "⌚" }, + { ":water_buffalo:", "🐃" }, + { ":watermelon:", "🍉" }, + { ":wave:", "👋" }, + { ":wavy_dash:", "〰" }, + { ":waxing_crescent_moon:", "🌒" }, + { ":waxing_gibbous_moon:", "🌔" }, + { ":wc:", "🚾" }, + { ":weary:", "😩" }, + { ":wedding:", "💒" }, + { ":weight_lifting_man:", "🏋" }, + { ":weight_lifting_woman:", "🏋♀" }, + { ":western_sahara:", "🇪🇭" }, + { ":whale:", "🐳" }, + { ":whale2:", "🐋" }, + { ":wheel_of_dharma:", "☸" }, + { ":wheelchair:", "♿" }, + { ":white_check_mark:", "✅" }, + { ":white_circle:", "⚪" }, + { ":white_flag:", "🏳" }, + { ":white_flower:", "💮" }, + { ":white_large_square:", "⬜" }, + { ":white_medium_small_square:", "◽" }, + { ":white_medium_square:", "◻" }, + { ":white_small_square:", "▫" }, + { ":white_square_button:", "🔳" }, + { ":wilted_flower:", "🥀" }, + { ":wind_chime:", "🎐" }, + { ":wind_face:", "🌬" }, + { ":wine_glass:", "🍷" }, + { ":wink:", "😉" }, + { ":wolf:", "🐺" }, + { ":woman:", "👩" }, + { ":woman_artist:", "👩🎨" }, + { ":woman_astronaut:", "👩🚀" }, + { ":woman_cartwheeling:", "🤸♀" }, + { ":woman_cook:", "👩🍳" }, + { ":woman_facepalming:", "🤦♀" }, + { ":woman_factory_worker:", "👩🏭" }, + { ":woman_farmer:", "👩🌾" }, + { ":woman_firefighter:", "👩🚒" }, + { ":woman_health_worker:", "👩⚕" }, + { ":woman_judge:", "👩⚖" }, + { ":woman_juggling:", "🤹♀" }, + { ":woman_mechanic:", "👩🔧" }, + { ":woman_office_worker:", "👩💼" }, + { ":woman_pilot:", "👩✈" }, + { ":woman_playing_handball:", "🤾♀" }, + { ":woman_playing_water_polo:", "🤽♀" }, + { ":woman_scientist:", "👩🔬" }, + { ":woman_shrugging:", "🤷♀" }, + { ":woman_singer:", "👩🎤" }, + { ":woman_student:", "👩🎓" }, + { ":woman_teacher:", "👩🏫" }, + { ":woman_technologist:", "👩💻" }, + { ":woman_with_turban:", "👳♀" }, + { ":womans_clothes:", "👚" }, + { ":womans_hat:", "👒" }, + { ":women_wrestling:", "🤼♀" }, + { ":womens:", "🚺" }, + { ":world_map:", "🗺" }, + { ":worried:", "😟" }, + { ":wrench:", "🔧" }, + { ":writing_hand:", "✍" }, + { ":x:", "❌" }, + { ":yellow_heart:", "💛" }, + { ":yemen:", "🇾🇪" }, + { ":yen:", "💴" }, + { ":yin_yang:", "☯" }, + { ":yum:", "😋" }, + { ":zambia:", "🇿🇲" }, + { ":zap:", "⚡" }, + { ":zero:", "0⃣" }, + { ":zimbabwe:", "🇿🇼" }, + { ":zipper_mouth_face:", "🤐" }, + { ":zzz:", "💤" } +}; -static const int g_numEmojiEntities = (int)(sizeof(g_emojiEntities)/ sizeof(*g_emojiEntities)); +static const int g_numEmojiEntities = (int)(sizeof(g_emojiEntities)/sizeof(*g_emojiEntities)); EmojiEntityMapper *EmojiEntityMapper::s_instance = 0; EmojiEntityMapper::EmojiEntityMapper() { m_name2symGh = new QDict<int>(1009); - m_name2symUni = new QDict<int>(1009); - m_name2symStripUni = new QDict<int>(10); m_name2symGh->setAutoDelete(TRUE); - m_name2symUni->setAutoDelete(TRUE); - m_name2symStripUni->setAutoDelete(TRUE); // 2 loops to be able to give precedence to the unicodeName (CLDR) for (int i = 0; i < g_numEmojiEntities; i++) { - if (strlen(g_emojiEntities[i].githubName)) m_name2symGh->insert(g_emojiEntities[i].githubName, new int(i+1)); - } - for (int i = 0; i < g_numEmojiEntities; i++) - { - m_name2symUni->insert(g_emojiEntities[i].unicodeName, new int(-(i+1))); - QCString strippedUnicodeName = g_emojiEntities[i].unicodeName; - // A ring -> a ring - strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\x85","\xc3\xa5"); - if (strippedUnicodeName != g_emojiEntities[i].unicodeName) - { - m_name2symStripUni->insert(strippedUnicodeName, new int(-(i+1))); - } - // a ring -> a - strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xa5","a"); - // c cedille -> c - strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xa7","c"); - // o circumflex -> o - strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xb4","o"); - // e acute -> e - strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xa9","e"); - // a tilde -> a - strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xa3","a"); - // i acute -> i - strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xad","i"); - if (strippedUnicodeName != g_emojiEntities[i].unicodeName) - { - m_name2symStripUni->insert(strippedUnicodeName, new int(-(i+1))); - } + m_name2symGh->insert(g_emojiEntities[i].name, new int(i)); } } EmojiEntityMapper::~EmojiEntityMapper() { delete m_name2symGh; - delete m_name2symUni; - delete m_name2symStripUni; } /** Returns the one and only instance of the Emoji entity mapper */ @@ -2956,232 +1552,48 @@ void EmojiEntityMapper::deleteInstance() s_instance=0; } - -/*! @brief Access routine to the UTF8 code of the Emoji entity - * - * @param symb Code of the requested Emoji entity - * @param useInPrintf If TRUE the result will be escaped such that it can be - * used in a printf string pattern - * @return the UTF8 code of the Emoji entity, - * in case the UTF code is unknown \c NULL is returned. - */ -const char *EmojiEntityMapper::utf8(int symb) const -{ - if (symb > 0) return g_emojiEntities[symb-1].githubName; - else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName; - else return NULL; -} - -/*! @brief Access routine to the html code of the Emoji entity - * - * @param symb Code of the requested Emoji entity - * @param useInPrintf If TRUE the result will be escaped such that it can be - * used in a printf string pattern - * @return the html representation of the Emoji entity, - * in case the html code is unknown \c NULL is returned. - */ -const char *EmojiEntityMapper::html(int symb) const -{ - return g_emojiEntities[abs(symb) - 1].code; -} - -/*! @brief Access routine to the XML code of the Emoji entity - * - * @param symb Code of the requested Emoji entity - * @return the XML code of the Emoji entity, - * in case the XML code is unknown \c NULL is returned. - */ -const char *EmojiEntityMapper::xml(int symb) const -{ - return g_emojiEntities[abs(symb) - 1].code; -} -/*! @brief Access routine to the docbook code of the Emoji entity - * - * @param symb Code of the requested Emoji entity - * @return the docbook code of the Emoji entity, - * in case the docbook code is unknown \c NULL is returned. - */ -const char *EmojiEntityMapper::docbook(int symb) const -{ - return g_emojiEntities[abs(symb) - 1].code; -} - -/*! @brief Access routine to the LaTeX code of the Emoji entity - * - * @param symb Code of the requested Emoji entity - * @return the LaTeX code of the Emoji entity, - * in case the LaTeX code is unknown \c NULL is returned. - */ -const char *EmojiEntityMapper::latex(int symb) const -{ - if (symb > 0) return g_emojiEntities[symb-1].githubName; - else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName; - else return NULL; -} - -/*! @brief Access routine to the man code of the Emoji entity - * - * @param symb Code of the requested Emoji entity - * @return the man of the Emoji entity, - * in case the man code is unknown \c NULL is returned. - */ -const char *EmojiEntityMapper::man(int symb) const -{ - if (symb > 0) return g_emojiEntities[symb-1].githubName; - else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName; - else return NULL; -} - -/*! @brief Access routine to the RTF code of the Emoji entity - * - * @param symb Code of the requested Emoji entity - * @return the RTF of the Emoji entity, - * in case the RTF code is unknown \c NULL is returned. - */ -const char *EmojiEntityMapper::rtf(int symb) const -{ - return g_emojiEntities[abs(symb) - 1].code; -} - -/*! @brief Access routine to the perl struct with the perl code of the Emoji entity - * - * @param symb Code of the requested Emoji entity - * @return the pointer to perl struct with the perl code of the Emoji entity, - * in case the perl code does not exists the NULL pointer is entered in the - * \c symb field and in the `DocSymbol::Perl_unknown` in the \c type field. - */ -const char *EmojiEntityMapper::perl(int symb) const -{ - if (symb > 0) return g_emojiEntities[symb-1].githubName; - else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName; - else return NULL; -} - /*! - * @brief Give code of the requested Emoji entity name + * @brief Returns a code for the requested Emoji entity name * @param symName Emoji entity name * @return the code for the requested Emoji entity name, - * in case the requested Emoji item does not exist `0` is returned. + * in case the requested Emoji item does not exist `-1` is returned. */ -int EmojiEntityMapper::name2sym(const QCString &symName) const +int EmojiEntityMapper::symbol2index(const QCString &symName) const { - QCString locSymName = symName.lower(); - int *pSymb = m_name2symUni->find(locSymName); - if (!pSymb) pSymb = m_name2symStripUni->find(locSymName); - if (!pSymb) pSymb = m_name2symGh->find(locSymName); - return pSymb ? (*pSymb) : 0; + int *val = m_name2symGh->find(symName); + return val ? *val : -1; } + +/*! + * @brief Writes the list of supported emojis to the given file. + */ void EmojiEntityMapper::writeEmojiFile(QFile &file) { FTextStream t(&file); - for (int i = 0; i < g_numEmojiEntities; i++) { - t << g_emojiEntities[i].unicodeName << endl; - } - for (int i = 0; i < g_numEmojiEntities; i++) - { - if (strlen(g_emojiEntities[i].githubName)) t << g_emojiEntities[i].githubName << endl; + t << g_emojiEntities[i].name << endl; } } -/*! @brief Access routine to the code of the Emoji entity + +/*! @brief Access routine to the unicode sequence for the Emoji entity * - * @param symb Code of the requested Emoji entity - * @return the code of the Emoji entity, + * @param symb code of the requested Emoji entity returned by symbol2index() + * @return the unicode sequence of the Emoji entity, */ -const char *EmojiEntityMapper::code(int symb) const +const char *EmojiEntityMapper::unicode(int index) const { - return g_emojiEntities[abs(symb) - 1].code; + return index>=0 && index<g_numEmojiEntities ? g_emojiEntities[index].unicode : 0; } -/*! @brief Access routine to the text of the Emoji entity +/*! @brief Access routine to the name of the Emoji entity * - * @param symb Code of the requested Emoji entity - * @return the text of the Emoji entity, + * @param symb code of the requested Emoji entity returned by symbol2index() + * @return the name of the Emoji entity in GitHub format (i.e. :smile:) */ -const char *EmojiEntityMapper::text(int symb) const +const char *EmojiEntityMapper::name(int index) const { - if (symb > 0) return g_emojiEntities[symb-1].githubName; - else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName; - else return NULL; + return index>=0 && index<g_numEmojiEntities ? g_emojiEntities[index].name : 0; } -/// \file -/// to generate the content of the table with the emoji definitions and code the following procedure has been used: -/// -/// <pre> -/// wget https://api.github.com/emojis -/// wget https://www.unicode.org/emoji/charts/full-emoji-list.html -/// wget http://www.unicode.org/emoji/charts/full-emoji-modifiers.html -/// -/// grep -v "[{}]" emojis | sed -e "s/https:.*\///" | sed -e "s%.png.*%%" | sed -e "s/ //" | sed -e "s/://" | tr ' ' '\n' | tr '\042' ' ' | sed -e "s/ //g" > emojis.res -/// -/// grep -A 14 "<tr><td class='rchars'>[0-9]" full-emoji-list.html | grep -v "class='andr" | grep -v "class='[r]*chars'" | sed -e "s/<[^>]*>//g" | sed -e "s/://" | tr [A-Z] [a-z] | sed -e "s/^[^a-z][^a-z][^a-z] //" | grep -v "\-\-" | sed -e "s/&/\&/" | sed -e "s/ u+/;\&#x/g" | sed -e "s/^u+\(.*\)/\&#x\1;/" > full.res -/// grep -A 14 "<tr><td class='rchars'>[0-9]" full-emoji-modifiers.html | grep -v "class='andr" | grep -v "class='[r]*chars'" | sed -e "s/<[^>]*>//g" | sed -e "s/://" | tr [A-Z] [a-z] | sed -e "s/^[^a-z][^a-z][^a-z] //" | grep -v "\-\-" | sed -e "s/&/\&/" | sed -e "s/ u+/;\&#x/g" | sed -e "s/^u+\(.*\)/\&#x\1;/" >> full.res -/// -/// -/// python transform.py full.res emojis.res > transform.res -/// </pre> -/// where the contents of `transform.py` is: -/// \code{.py} -///import sys -/// -///# read first file (unicode names) -///# read second files (github names) -/// -///uniFile = open(sys.argv[1]) -///emoFile = open(sys.argv[2]) -/// -///uniLines = uniFile.readlines() -///emoLines = emoFile.readlines() -/// -///uniFile.close() -///emoFile.close() -/// -///uniMaxLen = 0 -///emoMaxLen = 0 -/// -///for i in range(0, len(uniLines), 2): -/// if (len(uniLines[i]) > uniMaxLen): -/// uniMaxLen = len(uniLines[i]) -/// -///for i in range(0, len(emoLines), 2): -/// if (len(emoLines[i]) > emoMaxLen): -/// emoMaxLen = len(emoLines[i]) -/// -///uniProcessed = [False]*(len(uniLines) / 2) -/// -///# replace "strange" single and double quotes. -///for i in range(0, len(uniLines), 2): -/// uniLines[i+1] = uniLines[i+1].replace("\342\200\234",'\\"').replace("\342\200\235",'\\"') -/// uniLines[i+1] = uniLines[i+1].replace("\342\200\231","'").replace("\342\200\231","'") -/// -///for i in range(0, len(emoLines), 2): -/// emoCode = emoLines[i+1].split('-') -/// found = False -/// emoCode = [e.replace('\n', '') for e in emoCode] -/// for u in range(0, len(uniLines), 2): -/// cnt = 0 -/// beg = 0 -/// for j in emoCode: -/// pos = uniLines[u].find(j, beg) -/// if pos != -1: -/// # in case of 'u+': 2, '&#x': 3 -/// if (beg == 0 and j == emoCode[0] and pos != 3): -/// break -/// cnt += 1 -/// beg = pos + 1 -/// if (cnt == len(emoCode)): -/// uniProcessed[u/2] = True -/// found = True -/// print ' {":'+emoLines[i].replace('\n','')+':",'+(emoMaxLen-len(emoLines[i].replace('\n',''))+1)*' '+'":'+uniLines[u+1].replace('\n','')+':",'+(uniMaxLen-len(uniLines[u+1].replace('\n',''))+1)*' '+'"'+uniLines[u].replace('\n','')+'"},' -/// break -/// if not found: -/// # github name but no unicode version -/// # print ' ONLY_GITHUB_NAME "'+emoLines[i].replace('\n','')+'" "'+emoLines[i+1].replace('\n','')+'"' -/// pass -/// -///for u in range(0, len(uniProcessed)): -/// if not uniProcessed[u]: -/// print ' {"",'+(emoMaxLen+1)*' '+'":'+uniLines[u*2+1].replace('\n','')+':",'+(uniMaxLen-len(uniLines[u*2+1].replace('\n',''))+1)*' '+'"'+uniLines[u*2].replace('\n','')+'"},' -/// -/// \endcode + + diff --git a/src/emoji.h b/src/emoji.h index b8db6f1..f24a2c0 100644 --- a/src/emoji.h +++ b/src/emoji.h @@ -26,25 +26,16 @@ class EmojiEntityMapper public: static EmojiEntityMapper *instance(); static void deleteInstance(); - int name2sym(const QCString &symName) const; - const char *utf8(int symb) const; - const char *html(int symb) const; - const char *xml(int symb) const; - const char *docbook(int symb) const; - const char *latex(int symb) const; - const char *man(int symb) const; - const char *rtf(int symb) const; - const char *perl(int symb) const; - const char *code(int symb) const; - const char *text(int symb) const; + const char *name(int index) const; + const char *unicode(int index) const; void writeEmojiFile(QFile &file); + int symbol2index(const QCString &symName) const; + private: EmojiEntityMapper(); ~EmojiEntityMapper(); static EmojiEntityMapper *s_instance; QDict<int> *m_name2symGh; - QDict<int> *m_name2symUni; - QDict<int> *m_name2symStripUni; }; #endif diff --git a/src/entry.cpp b/src/entry.cpp index 15c6fec..b3693cd 100644 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -170,7 +170,7 @@ Entry::Entry(const Entry &e) SectionInfo *s; for (;(s=sli2.current());++sli2) { - anchors->append(new SectionInfo(*s)); + anchors->append(s); // shallow copy, object are owned by Doxygen::sectionDict } // deep copy type constraint list diff --git a/src/example.h b/src/example.h index cf30827..321982b 100644 --- a/src/example.h +++ b/src/example.h @@ -36,7 +36,7 @@ struct Example class ExampleSDict : public SDict<Example> { public: - ExampleSDict(int size=17) : SDict<Example>(size) {} + ExampleSDict(int size=17) : SDict<Example>(size) { setAutoDelete(TRUE); } ~ExampleSDict() {} private: int compareValues(const Example *item1,const Example *item2) const diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index 73ac775..97bcdcc 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -657,7 +657,7 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList) QCString &projName = Config_getString(PROJECT_NAME); if (projName.isEmpty()) { - if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty()) // Use title of main page as root + if (mainPageHasTitle()) // Use title of main page as root { t << "\"" << convertToJSString(Doxygen::mainPage->title()) << "\", "; } @@ -828,10 +828,13 @@ void FTVHelp::generateTreeViewInline(FTextStream &t) } //printf("preferred depth=%d\n",preferredDepth); - t << "<table class=\"directory\">\n"; - int index=0; - generateTree(t,m_indentNodes[0],0,preferredDepth,index); - t << "</table>\n"; + if (m_indentNodes[0].count()) + { + t << "<table class=\"directory\">\n"; + int index=0; + generateTree(t,m_indentNodes[0],0,preferredDepth,index); + t << "</table>\n"; + } t << "</div><!-- directory -->\n"; } diff --git a/src/groupdef.cpp b/src/groupdef.cpp index e543d16..397b254 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -963,7 +963,7 @@ void GroupDef::writePageDocumentation(OutputList &ol) if (!pd->isReference()) { SectionInfo *si=0; - if (!pd->title().isEmpty() && !pd->name().isEmpty() && + if (pd->hasTitle() && !pd->name().isEmpty() && (si=Doxygen::sectionDict->find(pd->name()))!=0) { ol.startSection(si->label,si->title,SectionInfo::Subsection); diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 74564ca..8c78f85 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -68,7 +68,12 @@ static const char *contexts[10] = static QCString convertIndexWordToAnchor(const QString &word) { static char hex[] = "0123456789abcdef"; + static int cnt = 0; QCString result="a"; + QCString cntStr; + result += cntStr.setNum(cnt); + result += "_"; + cnt++; const char *str = word.data(); unsigned char c; if (str) @@ -121,7 +126,6 @@ static bool mustBeOutsideParagraph(DocNode *n) case DocNode::Kind_Internal: /* <div> */ case DocNode::Kind_Include: - case DocNode::Kind_Image: case DocNode::Kind_SecRefList: /* <hr> */ case DocNode::Kind_HorRuler: @@ -147,6 +151,8 @@ static bool mustBeOutsideParagraph(DocNode *n) ((DocStyleChange*)n)->style()==DocStyleChange::Center; case DocNode::Kind_Formula: return !((DocFormula*)n)->isInline(); + case DocNode::Kind_Image: + return !((DocImage*)n)->isInlineImage(); default: break; } @@ -205,29 +211,31 @@ static bool isInvisibleNode(DocNode *node) ; } -static QString htmlAttribsToString(const HtmlAttribList &attribs, bool img_tag = FALSE) +static QCString htmlAttribsToString(const HtmlAttribList &attribs, QCString *pAltValue = 0) { - QString result; + QCString result; HtmlAttribListIterator li(attribs); HtmlAttrib *att; - bool alt_set = FALSE; - for (li.toFirst();(att=li.current());++li) { if (!att->value.isEmpty()) // ignore attribute without values as they // are not XHTML compliant, with the exception // of the alt attribute with the img tag { - result+=" "; - result+=att->name; - result+="=\""+convertToXML(att->value)+"\""; - if (att->name == "alt") alt_set = TRUE; + if (att->name=="alt" && pAltValue) // optionally return the value of alt separately + // need to convert <img> to <object> for SVG images, + // which do not support the alt attribute + { + *pAltValue = att->value; + } + else + { + result+=" "; + result+=att->name; + result+="=\""+convertToXML(att->value)+"\""; + } } } - if (!alt_set && img_tag) - { - result+=" alt=\"\""; - } return result; } @@ -291,14 +299,14 @@ void HtmlDocVisitor::visit(DocSymbol *s) void HtmlDocVisitor::visit(DocEmoji *s) { if (m_hide) return; - const char *res = EmojiEntityMapper::instance()->html(s->emoji()); + const char *res = EmojiEntityMapper::instance()->unicode(s->index()); if (res) { m_t << res; } else { - err("HTML: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji())); + m_t << s->name(); } } @@ -1200,6 +1208,10 @@ void HtmlDocVisitor::visitPre(DocPara *p) void HtmlDocVisitor::visitPost(DocPara *p) { + + //printf("DocPara::visitPost: parent of kind %d ", + // p->parent() ? p->parent()->kind() : -1); + bool needsTag = FALSE; if (p->parent()) { @@ -1605,17 +1617,9 @@ void HtmlDocVisitor::visitPre(DocImage *img) if (img->type()==DocImage::Html) { bool inlineImage = img->isInlineImage(); - bool typeSVG = FALSE; - + bool typeSVG = img->isSVG(); QCString url = img->url(); - if (url.isEmpty()) - { - typeSVG = (img->name().right(4)==".svg"); - } - else - { - typeSVG = (url.right(4)==".svg"); - } + if (!inlineImage) { forceEndParagraph(img); @@ -1637,41 +1641,48 @@ void HtmlDocVisitor::visitPre(DocImage *img) { sizeAttribs+=" height=\""+img->height()+"\""; } + // 16 cases: url.isEmpty() | typeSVG | inlineImage | img->hasCaption() + QCString alt; + QCString attrs = htmlAttribsToString(img->attribs(),&alt); + QCString src; if (url.isEmpty()) { - if (typeSVG) + src = img->relPath()+img->name(); + } + else + { + src = correctURL(url,img->relPath()); + } + if (typeSVG) + { + m_t << "<object type=\"image/svg+xml\" style=\"pointer-events: none;\" data=\"" << src + << "\"" << sizeAttribs << attrs; + if (inlineImage) { - m_t << "<object type=\"image/svg+xml\" data=\"" << img->relPath() << img->name() - << "\"" << sizeAttribs << htmlAttribsToString(img->attribs()) << ">" << baseName - << "</object>" << endl; + // skip closing tag } else { - m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\"" - << baseName << "\"" << sizeAttribs << htmlAttribsToString(img->attribs()) - << (inlineImage ? " class=\"inline\"" : "/>\n"); + m_t << ">" << alt << "</object>" << endl; } } - else // link to URL + else { - if (typeSVG) + m_t << "<img src=\"" << src << "\" alt=\"" << alt << "\"" << sizeAttribs << attrs; + if (inlineImage) { - m_t << "<object type=\"image/svg+xml\" data=\"" << correctURL(url,img->relPath()) - << "\"" << sizeAttribs << htmlAttribsToString(img->attribs()) - << "></object>" << endl; + m_t << " class=\"inline\""; } else { - m_t << "<img src=\"" << correctURL(url,img->relPath()) << "\"" - << sizeAttribs << htmlAttribsToString(img->attribs(), TRUE) - << (inlineImage ? " class=\"inline\"" : "/>\n"); + m_t << "/>\n"; } } if (img->hasCaption()) { if (inlineImage) { - m_t << " title=\""; + m_t << " title=\""; } else { @@ -1681,7 +1692,14 @@ void HtmlDocVisitor::visitPre(DocImage *img) } else if (inlineImage) { - m_t << "/>" << endl; + if (typeSVG) + { + m_t << ">" << alt << "</object>"; + } + else + { + m_t << "/>"; + } } } else // other format -> skip @@ -1700,11 +1718,24 @@ void HtmlDocVisitor::visitPost(DocImage *img) if (img->hasCaption()) { if (inlineImage) - m_t << "\"/>\n "; - else + { + if (img->isSVG()) + { + QCString alt; + QCString attrs = htmlAttribsToString(img->attribs(),&alt); + m_t << "\">" << alt << "</object>"; + } + else + { + m_t << "\"/>"; + } + } + else // end <div class="caption"> + { m_t << "</div>"; + } } - if (!inlineImage) + if (!inlineImage) // end <div class="image"> { m_t << "</div>" << endl; forceStartParagraph(img); diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp index e95b817..543f86b 100644 --- a/src/htmlentity.cpp +++ b/src/htmlentity.cpp @@ -315,7 +315,8 @@ static struct htmlEntityInfo { SYM(Minus), "-", "-", "-", "-", "-\\/", "-", "-", { "-", DocSymbol::Perl_char }}, { SYM(Plus), "+", "+", "+", "+", "+", "+", "+", { "+", DocSymbol::Perl_char }}, { SYM(Dot), ".", ".", ".", ".", ".", ".", ".", { ".", DocSymbol::Perl_char }}, - { SYM(Colon), ":", ":", ":", ":", ":", ":", ":", { ":", DocSymbol::Perl_char }} + { SYM(Colon), ":", ":", ":", ":", ":", ":", ":", { ":", DocSymbol::Perl_char }}, + { SYM(Equal), "=", "=", "=", "=", "=", "=", "=", { "=", DocSymbol::Perl_char }} }; static const int g_numHtmlEntities = (int)(sizeof(g_htmlEntities)/ sizeof(*g_htmlEntities)); diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index ad56de8..3ed3d64 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -115,7 +115,7 @@ void HtmlHelpIndex::addItem(const char *level1,const char *level2, { return; } - if (dict->find(key)==0) // new key + if (dict->find(key+anchor)==0) // new key { //printf(">>>>>>>>> HtmlHelpIndex::addItem(%s,%s,%s,%s)\n", // level1,level2,url,anchor); @@ -125,7 +125,7 @@ void HtmlHelpIndex::addItem(const char *level1,const char *level2, f->anchor = anchor; f->link = hasLink; f->reversed = reversed; - dict->append(key,f); + dict->append(key+anchor,f); } } @@ -187,7 +187,7 @@ void HtmlHelpIndex::writeFields(FTextStream &t) level1 = f->name.copy(); } - if (level1!=lastLevel1) + //if (level1!=lastLevel1) { // finish old list at level 2 if (level2Started) t << " </UL>" << endl; level2Started=FALSE; diff --git a/src/index.cpp b/src/index.cpp index 5439987..7bb9574 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -2832,7 +2832,7 @@ static void writeMemberList(OutputList &ol,bool useSections,int page, if (!firstSection) ol.endItemList(); QCString cs = letterToLabel(ml->letter()); QCString cl = QString(QChar(ml->letter())).utf8(); - QCString anchor=(QCString)"index_"+cs; + QCString anchor=(QCString)"index_"+convertToId(cs); QCString title=(QCString)"- "+cl+" -"; ol.startSection(anchor,title,SectionInfo::Subsection); ol.docify(title); @@ -3123,7 +3123,7 @@ static void writeQuickMemberIndex(OutputList &ol, anchor=fullName+extension+"#index_"; else anchor=fullName+"_"+letterToLabel(i)+extension+"#index_"; - startQuickIndexItem(ol,anchor+is,i==page,TRUE,first); + startQuickIndexItem(ol,anchor+convertToId(is),i==page,TRUE,first); ol.writeString(ci); endQuickIndexItem(ol); first=FALSE; @@ -5201,7 +5201,7 @@ void renderMemberIndicesAsJs(FTextStream &t, else // other pages of multi page index anchor=fullName+"_"+is+extension+"#index_"; t << "{text:\"" << convertToJSString(ci) << "\",url:\"" - << convertToJSString(anchor+is, false) << "\"}"; + << convertToJSString(anchor+convertToId(is), false) << "\"}"; firstLetter=FALSE; } t << "]"; diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 3bc768b..98324e3 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -243,49 +243,17 @@ void LatexDocVisitor::visit(DocSymbol *s) void LatexDocVisitor::visit(DocEmoji *s) { if (m_hide) return; - const char *res_text = EmojiEntityMapper::instance()->text(s->emoji()); - if (res_text) + QCString emojiName = EmojiEntityMapper::instance()->name(s->index()); + if (!emojiName.isEmpty()) { - const char *res_code = EmojiEntityMapper::instance()->code(s->emoji()); + QCString imageName=emojiName.mid(1,emojiName.length()-2); // strip : at start and end m_t << "\\doxygenemoji{"; - filter(res_text); - m_t << "}{"; - m_t << res_code; - m_t << "}{"; - const char *p = res_code; - char res[10]; - int i = 0; - bool first = TRUE; - while (*p) - { - switch(*p) - { - case '&': case '#': case 'x': - break; - case ';': - res[i] = '\0'; - if (!first) m_t << "-"; - m_t << res; - first = FALSE; - i = 0; - break; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - res[i] = *p; - i++; - break; - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - res[i] = *p -'a' + 'A'; // so it is uppercase - i++; - break; - } - p++; - } - m_t << "}"; + filter(emojiName); + m_t << "}{" << imageName << "}"; } else { - err("LaTeX: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji())); + m_t << s->name(); } } @@ -312,7 +280,7 @@ void LatexDocVisitor::visit(DocLineBreak *) void LatexDocVisitor::visit(DocHorRuler *) { if (m_hide) return; - m_t << "\n\n"; + m_t << "\\DoxyHorRuler\n"; } void LatexDocVisitor::visit(DocStyleChange *s) diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 94c3dd1..b860195 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -568,11 +568,10 @@ static void writeDefaultHeaderPart1(FTextStream &t) emojiDir = substitute(emojiDir,"\\","/"); t << "% Arguments of doxygenemoji:\n" "% 1) ':<text>:' form of the emoji, already \"LaTeX\"-escaped\n" - "% 2) unicode of the emoji inlorm like: 'U+1F603' or 'U+0031U+FE0FU+20E3' depending on the emoji\n" - "% 3) file name in form like: '1F603' or '0031-FE0F-20E3' depending on the emoji\n" + "% 2) file with the name of the emoji without the .png extension\n" "% in case image exist use this otherwise use the ':<text>:' form\n"; - t << "\\newcommand{\\doxygenemoji}[3]{%\n" - " \\IfFileExists{" << emojiDir << "/#3.png}{\\raisebox{-0.1em}{\\includegraphics[height=0.9em]{" << emojiDir << "/#3.png}}}{#1}%\n" + t << "\\newcommand{\\doxygenemoji}[2]{%\n" + " \\IfFileExists{" << emojiDir << "/#2.png}{\\raisebox{-0.1em}{\\includegraphics[height=0.9em]{" << emojiDir << "/#2.png}}}{#1}%\n" "}\n"; // Define page & text layout diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index f60f06b..beef632 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -93,15 +93,14 @@ void ManDocVisitor::visit(DocSymbol *s) void ManDocVisitor::visit(DocEmoji *s) { if (m_hide) return; - const char *res = EmojiEntityMapper::instance()->man(s->emoji()); + const char *res = EmojiEntityMapper::instance()->name(s->index()); if (res) { m_t << res; } else { - // no error or warning to be supplied - // err("man: non supported HTML-entity found: &%s;\n",get_symbol_item(s->emoji())); + m_t << s->name(); } m_firstCol=FALSE; } diff --git a/src/marshal.cpp b/src/marshal.cpp index 57ff44b..c68718a 100644 --- a/src/marshal.cpp +++ b/src/marshal.cpp @@ -10,6 +10,7 @@ #include "groupdef.h" #include "example.h" #include "arguments.h" +#include "doxygen.h" #define HEADER ('D'<<24)+('O'<<16)+('X'<<8)+'!' @@ -142,6 +143,7 @@ void marshalSectionInfoList(StorageIntf *s, QList<SectionInfo> *anchors) marshalInt(s,si->lineNr); marshalInt(s,si->level); } + anchors->clear(); } } @@ -550,11 +552,10 @@ QList<SectionInfo> *unmarshalSectionInfoList(StorageIntf *s) uint i; uint count = unmarshalUInt(s); if (count==NULL_LIST) return 0; // null list - QList<SectionInfo> *result = new QList<SectionInfo>; - result->setAutoDelete(TRUE); + QList<SectionInfo> *anchors = new QList<SectionInfo>; assert(count<1000000); for (i=0;i<count;i++) - { + { QCString label = unmarshalQCString(s); QCString title = unmarshalQCString(s); QCString ref = unmarshalQCString(s); @@ -562,9 +563,20 @@ QList<SectionInfo> *unmarshalSectionInfoList(StorageIntf *s) QCString fileName = unmarshalQCString(s); int lineNr = unmarshalInt(s); int level = unmarshalInt(s); - result->append(new SectionInfo(fileName,lineNr,label,title,type,level,ref)); + SectionInfo *si = Doxygen::sectionDict->find(label); + if (si==0) // This should actually never be true since all anchors should be in sectionDict. + // Could still optimize the marshaling routine by only storing label. + { + SectionInfo *si = new SectionInfo(fileName,lineNr,label,title,type,level,ref); + anchors->append(si); + Doxygen::sectionDict->append(label,si); // this dict owns the anchor objects + } + else + { + anchors->append(si); + } } - return result; + return anchors; } QList<ListItemInfo> *unmarshalItemInfoList(StorageIntf *s) diff --git a/src/memberlist.cpp b/src/memberlist.cpp index a4e5596..abb8aff 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -745,7 +745,7 @@ void MemberList::writeDocumentation(OutputList &ol, } if (memberGroupList) { - printf("MemberList::writeDocumentation() -- member groups %d\n",memberGroupList->count()); + //printf("MemberList::writeDocumentation() -- member groups %d\n",memberGroupList->count()); MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) diff --git a/src/pagedef.cpp b/src/pagedef.cpp index 79a78d3..93d5817 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -190,7 +190,7 @@ void PageDef::writeDocumentation(OutputList &ol) ol.disable(OutputGenerator::Docbook); ol.disable(OutputGenerator::RTF); ol.disable(OutputGenerator::Man); - if (!title().isEmpty() && !name().isEmpty() && si!=0) + if (hasTitle() && !name().isEmpty() && si!=0) { ol.startPageDoc(si->title); //ol.startSection(si->label,si->title,si->type); @@ -342,3 +342,9 @@ bool PageDef::showLineNo() const { return m_showLineNo; } + +bool PageDef::hasTitle() const +{ + return !m_title.isEmpty() && m_title.lower()!="notitle"; +} + diff --git a/src/pagedef.h b/src/pagedef.h index a0c3acb..e958617 100644 --- a/src/pagedef.h +++ b/src/pagedef.h @@ -60,10 +60,12 @@ class PageDef : public Definition bool documentedPage() const; bool hasSubPages() const; bool hasParentPage() const; + bool hasTitle() const; LocalToc localToc() const { return m_localToc; } void setPageScope(Definition *d){ m_pageScope = d; } Definition *getPageScope() const { return m_pageScope; } - QCString displayName(bool=TRUE) const { return !m_title.isEmpty() ? m_title : Definition::name(); } + QCString displayName(bool=TRUE) const + { return hasTitle() ? m_title : Definition::name(); } bool showLineNo() const; void writeDocumentation(OutputList &ol); diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 044efff..fcc7ef5 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -614,7 +614,15 @@ void PerlModDocVisitor::visit(DocSymbol *sy) void PerlModDocVisitor::visit(DocEmoji *sy) { enterText(); - m_output.add(EmojiEntityMapper::instance()->perl(sy->emoji())); + const char *name = EmojiEntityMapper::instance()->name(sy->index()); + if (name) + { + m_output.add(name); + } + else + { + m_output.add(sy->name()); + } } void PerlModDocVisitor::visit(DocURL *u) diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index 4275300..8d375fc 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -72,14 +72,14 @@ class PrintDocVisitor : public DocVisitor void visit(DocEmoji *s) { indent_leaf(); - const char *res = EmojiEntityMapper::instance()->utf8(s->emoji()); + const char *res = EmojiEntityMapper::instance()->name(s->index()); if (res) { printf("%s",res); } else { - printf("print: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji())); + printf("print: non supported emoji found: %s\n",qPrint(s->name())); } } void visit(DocURL *u) diff --git a/src/pycode.l b/src/pycode.l index dfa383f..d9c9f01 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -1091,8 +1091,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT char *s=g_curClassBases.first(); while (s) { - ClassDef *baseDefToAdd; - baseDefToAdd=g_codeClassSDict[s]; + ClassDef *baseDefToAdd=g_codeClassSDict[s]; // Try to find class in global // scope @@ -1517,6 +1516,8 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT void resetPythonCodeParserState() { + g_codeClassSDict.setAutoDelete(TRUE); + g_codeClassSDict.clear(); g_currentDefinition = 0; g_currentMemberDef = 0; g_doubleStringIsDoc = FALSE; @@ -1567,6 +1568,7 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/, //-------------------------------------- if (s.isEmpty()) return; printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL); + g_codeClassSDict.setAutoDelete(TRUE); TooltipManager::instance()->clearTooltips(); g_code = &od; g_inputString = s; diff --git a/src/pyscanner.l b/src/pyscanner.l index aed1ede..1596b9d 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -949,7 +949,6 @@ STARTDOCSYMS "##" {B}":"{B} { // function without arguments g_specialBlock = TRUE; // expecting a docstring bodyEntry = current; - current->bodyLine = yyLineNr; BEGIN(FunctionBody); } @@ -960,6 +959,7 @@ STARTDOCSYMS "##" } {B}"(" { g_funcParamsEnd = FALSE; + current->bodyLine = yyLineNr; BEGIN(FunctionParams); } ")" { // end of parameter list diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 6626086..f2edf8b 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -141,7 +141,7 @@ void RTFDocVisitor::visit(DocEmoji *s) { if (m_hide) return; DBG_RTF("{\\comment RTFDocVisitor::visit(DocEmoji)}\n"); - const char *res = EmojiEntityMapper::instance()->rtf(s->emoji()); + const char *res = EmojiEntityMapper::instance()->unicode(s->index()); if (res) { const char *p = res; @@ -174,7 +174,7 @@ void RTFDocVisitor::visit(DocEmoji *s) } else { - err("RTF: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji())); + m_t << s->name(); } m_lastIsPara=FALSE; } diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 2e67c26..b42780f 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -665,7 +665,7 @@ void RTFGenerator::endIndexSection(IndexSections is) break; case isMainPage: t << "\\par " << rtf_Style_Reset << endl; - if (!Doxygen::mainPage || Doxygen::mainPage->title().isEmpty()) + if (!mainPageHasTitle()) { t << "{\\tc \\v " << theTranslator->trMainPage() << "}"<< endl; } diff --git a/src/rtfstyle.cpp b/src/rtfstyle.cpp index a0f46c3..47a8166 100644 --- a/src/rtfstyle.cpp +++ b/src/rtfstyle.cpp @@ -42,7 +42,7 @@ char rtf_Style_Reset[] = "\\pard\\plain "; #define RTF_LatexToc(lvl,nest,nxt,pos,twps) \ \ - { "Latex"#lvl, \ + { "LatexTOC"#lvl, \ "\\s"#nest"\\li"#pos"\\sa"#twps"\\sb"#twps"\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",\ "\\sbasedon0 \\snext"#nxt" LatexTOC "#lvl \ } diff --git a/src/searchindex.cpp b/src/searchindex.cpp index 5859d67..52378cd 100644 --- a/src/searchindex.cpp +++ b/src/searchindex.cpp @@ -117,7 +117,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource case Definition::TypePage: { PageDef *pd = (PageDef *)ctx; - if (!pd->title().isEmpty()) + if (pd->hasTitle()) { name = theTranslator->trPage(TRUE,TRUE)+" "+pd->title(); } diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp index a7b8dbb..eceea06 100644 --- a/src/sqlite3gen.cpp +++ b/src/sqlite3gen.cpp @@ -2478,7 +2478,7 @@ static void generateSqlite3ForPage(const PageDef *pd,bool isExample) QCString title; if (pd==Doxygen::mainPage) // main page is special { - if (!pd->title().isEmpty() && pd->title().lower()!="notitle") + if (mainPageHasTitle()) { title = filterTitle(convertCharEntitiesToUTF8(Doxygen::mainPage->title())); } diff --git a/src/textdocvisitor.cpp b/src/textdocvisitor.cpp index 691e426..b6c90e3 100644 --- a/src/textdocvisitor.cpp +++ b/src/textdocvisitor.cpp @@ -40,14 +40,14 @@ void TextDocVisitor::visit(DocSymbol *s) void TextDocVisitor::visit(DocEmoji *s) { - const char *res = EmojiEntityMapper::instance()->html(s->emoji()); + const char *res = EmojiEntityMapper::instance()->name(s->index()); if (res) { filter(res); } else { - err("text: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji())); + filter(s->name()); } } diff --git a/src/util.cpp b/src/util.cpp index a1f40af..24e8898 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1847,7 +1847,7 @@ QCString removeRedundantWhiteSpace(const QCString &s) case '*': if (i>0 && pc!=' ' && pc!='\t' && pc!=':' && pc!='*' && pc!='&' && pc!='(' && pc!='/' && - pc!='.' && (osp<9 || (pc=='>' && osp==11))) + pc!='.' && (osp<9 || !(pc=='>' && osp==11))) // avoid splitting &&, **, .*, operator*, operator->* { *dst++=' '; @@ -1895,11 +1895,18 @@ QCString removeRedundantWhiteSpace(const QCString &s) if (g_charAroundSpace.charMap[(uchar)pc].before && g_charAroundSpace.charMap[(uchar)nc].after && !(pc==',' && nc=='.') && - (osp<8 || (osp>=8 && isId(nc))) // e.g. "operator >>" -> "operator>>", but not "operator int" -> operatorint" + (osp<8 || (osp>=8 && pc!='"' && isId(nc)) || (osp>=8 && pc!='"' && nc!='"')) + // e.g. 'operator >>' -> 'operator>>', + // 'operator "" _x' -> 'operator""_x', + // but not 'operator int' -> 'operatorint' ) { // keep space *dst++=' '; } + else if ((pc=='*' || pc=='&' || pc=='.') && nc=='>') + { + *dst++=' '; + } } break; default: @@ -6667,7 +6674,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle, if (gd) gd->addPage(pd); - if (!pd->title().isEmpty()) + if (pd->hasTitle()) { //outputList->writeTitle(pi->name,pi->title); @@ -8912,10 +8919,7 @@ void convertProtectionLevel( bool mainPageHasTitle() { - if (Doxygen::mainPage==0) return FALSE; - if (Doxygen::mainPage->title().isEmpty()) return FALSE; - if (Doxygen::mainPage->title().lower()=="notitle") return FALSE; - return TRUE; + return Doxygen::mainPage!=0 && Doxygen::mainPage->hasTitle(); } QCString getDotImageExtension(void) diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index 24e52cf..e464088 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -70,7 +70,10 @@ static void visitPreStart(FTextStream &t, const char *cmd, bool doCaption, { t << " height=\"" << convertToXML(height) << "\""; } - if (inlineImage) t << " inline=\"yes\">"; + if (inlineImage) + { + t << " inline=\"yes\""; + } if (doCaption) { t << " caption=\""; @@ -138,14 +141,18 @@ void XmlDocVisitor::visit(DocSymbol *s) void XmlDocVisitor::visit(DocEmoji *s) { if (m_hide) return; - const char *res = EmojiEntityMapper::instance()->xml(s->emoji()); + const char *res = EmojiEntityMapper::instance()->name(s->index()); if (res) { - m_t << res; + QCString name=res; + name = name.mid(1,name.length()-2); + m_t << "<emoji name=\"" << name << "\" unicode=\""; + filter(EmojiEntityMapper::instance()->unicode(s->index())); + m_t << "\"/>"; } else { - err("XML: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji())); + m_t << s->name(); } } diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 4b12757..8b8e648 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1015,6 +1015,15 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De t << " </memberdef>" << endl; } +// namespace members are also inserted in the file scope, but +// to prevent this duplication in the XML output, we optionally filter those here. +static bool memberVisible(Definition *d,MemberDef *md) +{ + return Config_getBool(XML_NS_MEMB_FILE_SCOPE) || + d->definitionType()!=Definition::TypeFile || + md->getNamespaceDef()==0; +} + static void generateXMLSection(Definition *d,FTextStream &ti,FTextStream &t, MemberList *ml,const char *kind,const char *header=0, const char *documentation=0) @@ -1025,9 +1034,7 @@ static void generateXMLSection(Definition *d,FTextStream &ti,FTextStream &t, int count=0; for (mli.toFirst();(md=mli.current());++mli) { - // namespace members are also inserted in the file scope, but - // to prevent this duplication in the XML output, we filter those here. - if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) + if (memberVisible(d,md)) { count++; } @@ -1047,9 +1054,7 @@ static void generateXMLSection(Definition *d,FTextStream &ti,FTextStream &t, } for (mli.toFirst();(md=mli.current());++mli) { - // namespace members are also inserted in the file scope, but - // to prevent this duplication in the XML output, we filter those here. - if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) + if (memberVisible(d,md)) { generateXMLForMember(md,ti,t,d); } @@ -1792,11 +1797,11 @@ static void generateXMLForPage(PageDef *pd,FTextStream &ti,bool isExample) if (pd==Doxygen::mainPage) // main page is special { QCString title; - if (!pd->title().isEmpty() && pd->title().lower()!="notitle") + if (mainPageHasTitle()) { title = filterTitle(convertCharEntitiesToUTF8(Doxygen::mainPage->title())); } - else + else { title = Config_getString(PROJECT_NAME); } @@ -1813,10 +1818,10 @@ static void generateXMLForPage(PageDef *pd,FTextStream &ti,bool isExample) } } writeInnerPages(pd->getSubPages(),t); - if (pd->localToc().isXmlEnabled()) + SectionDict *sectionDict = pd->getSectionDict(); + if (pd->localToc().isXmlEnabled() && sectionDict) { t << " <tableofcontents>" << endl; - SectionDict *sectionDict = pd->getSectionDict(); SDict<SectionInfo>::Iterator li(*sectionDict); SectionInfo *si; int level=1,l; diff --git a/templates/html/jquery.js b/templates/html/jquery.js index 2771c74..1ee895c 100644 --- a/templates/html/jquery.js +++ b/templates/html/jquery.js @@ -1,33 +1,5 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ /*! - * jQuery JavaScript Library v1.7.1 + * jQuery JavaScript Library v1.7.2 * http://jquery.com/ * * Copyright 2011, John Resig @@ -39,16 +11,16 @@ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Mon Nov 21 21:11:03 2011 -0500 + * Date: Wed Mar 21 12:46:34 2012 -0700 */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +(function(bd,L){var av=bd.document,bu=bd.navigator,bm=bd.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bd.jQuery,bH=bd.$,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.2",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(bd.$===bF){bd.$=bH}if(b0&&bd.jQuery===bF){bd.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);bd.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bd.attachEvent("onload",bF.ready);var b0=false;try{b0=bd.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!=null&&b0==b0.window},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(bd.JSON&&bd.JSON.parse){return bd.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){if(typeof b2!=="string"||!b2){return null}var b0,b1;try{if(bd.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)){(bd.execScript||function(b1){bd["eval"].call(bd,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,b6,b9,b7,b4,ca,b8){var b2,b5=b9==null,b3=0,b1=b0.length;if(b9&&typeof b9==="object"){for(b3 in b9){bF.access(b0,b6,b3,b9[b3],1,ca,b7)}b4=1}else{if(b7!==L){b2=b8===L&&bF.isFunction(b7);if(b5){if(b2){b2=b6;b6=function(cc,cb,cd){return b2.call(bF(cc),cd)}}else{b6.call(b0,b7);b6=null}}if(b6){for(;b3<b1;b3++){b6(b0[b3],b9,b2?b7.call(b0[b3],b3,b6(b0[b3],b9)):b7,b8)}}b4=1}}return b4?b0:b5?b6.call(b0):b1?b6(b0[0],b9):ca},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 a3={};function X(e){var bv=a3[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(bx){bx=bx?(a3[bx]||X(bx)):{};var bC=[],bD=[],by,e,bz,bw,bA,bB,bF=function(bG){var bH,bK,bJ,bI,bL;for(bH=0,bK=bG.length;bH<bK;bH++){bJ=bG[bH];bI=b.type(bJ);if(bI==="array"){bF(bJ)}else{if(bI==="function"){if(!bx.unique||!bE.has(bJ)){bC.push(bJ)}}}}},bv=function(bH,bG){bG=bG||[];by=!bx.memory||[bH,bG];e=true;bz=true;bB=bw||0;bw=0;bA=bC.length;for(;bC&&bB<bA;bB++){if(bC[bB].apply(bH,bG)===false&&bx.stopOnFalse){by=true;break}}bz=false;if(bC){if(!bx.once){if(bD&&bD.length){by=bD.shift();bE.fireWith(by[0],by[1])}}else{if(by===true){bE.disable()}else{bC=[]}}}},bE={add:function(){if(bC){var bG=bC.length;bF(arguments);if(bz){bA=bC.length}else{if(by&&by!==true){bw=bG;bv(by[0],by[1])}}}return this},remove:function(){if(bC){var bG=arguments,bI=0,bJ=bG.length;for(;bI<bJ;bI++){for(var bH=0;bH<bC.length;bH++){if(bG[bI]===bC[bH]){if(bz){if(bH<=bA){bA--;if(bH<=bB){bB--}}}bC.splice(bH--,1);if(bx.unique){break}}}}}return this},has:function(bH){if(bC){var bG=0,bI=bC.length;for(;bG<bI;bG++){if(bH===bC[bG]){return true}}}return false},empty:function(){bC=[];return this},disable:function(){bC=bD=by=L;return this},disabled:function(){return !bC},lock:function(){bD=L;if(!by||by===true){bE.disable()}return this},locked:function(){return !bD},fireWith:function(bH,bG){if(bD){if(bz){if(!bx.once){bD.push([bH,bG])}}else{if(!(bx.once&&by)){bv(bH,bG)}}}return this},fire:function(){bE.fireWith(this,arguments);return this},fired:function(){return !!e}};return bE};var aK=[].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=aK.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?aK.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aK.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 bI,bH,bE,bF,bx,bD,bC,bz,bJ,bA,by,bw,bv=av.createElement("div"),bG=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'/>";bH=bv.getElementsByTagName("*");bE=bv.getElementsByTagName("a")[0];if(!bH||!bH.length||!bE){return{}}bF=av.createElement("select");bx=bF.appendChild(av.createElement("option"));bD=bv.getElementsByTagName("input")[0];bI={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bE.getAttribute("style")),hrefNormalized:(bE.getAttribute("href")==="/a"),opacity:/^0.55/.test(bE.style.opacity),cssFloat:!!bE.style.cssFloat,checkOn:(bD.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,pixelMargin:true};b.boxModel=bI.boxModel=(av.compatMode==="CSS1Compat");bD.checked=true;bI.noCloneChecked=bD.cloneNode(true).checked;bF.disabled=true;bI.optDisabled=!bx.disabled;try{delete bv.test}catch(bB){bI.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bI.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bD=av.createElement("input");bD.value="t";bD.setAttribute("type","radio");bI.radioValue=bD.value==="t";bD.setAttribute("checked","checked");bD.setAttribute("name","t");bv.appendChild(bD);bC=av.createDocumentFragment();bC.appendChild(bv.lastChild);bI.checkClone=bC.cloneNode(true).cloneNode(true).lastChild.checked;bI.appendChecked=bD.checked;bC.removeChild(bD);bC.appendChild(bv);if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bA="on"+by;bw=(bA in bv);if(!bw){bv.setAttribute(bA,"return;");bw=(typeof bv[bA]==="function")}bI[by+"Bubbles"]=bw}}bC.removeChild(bv);bC=bF=bx=bv=bD=null;b(function(){var bM,bV,bW,bU,bO,bP,bR,bL,bK,bQ,bN,e,bT,bS=av.getElementsByTagName("body")[0];if(!bS){return}bL=1;bT="padding:0;margin:0;border:";bN="position:absolute;top:0;left:0;width:1px;height:1px;";e=bT+"0;visibility:hidden;";bK="style='"+bN+bT+"5px solid #000;";bQ="<div "+bK+"display:block;'><div style='"+bT+"0;display:block;overflow:hidden;'></div></div><table "+bK+"' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=e+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bS.insertBefore(bM,bS.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='"+bT+"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";bI.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);if(bd.getComputedStyle){bv.innerHTML="";bR=av.createElement("div");bR.style.width="0";bR.style.marginRight="0";bv.style.width="2px";bv.appendChild(bR);bI.reliableMarginRight=(parseInt((bd.getComputedStyle(bR,null)||{marginRight:0}).marginRight,10)||0)===0}if(typeof bv.style.zoom!=="undefined"){bv.innerHTML="";bv.style.width=bv.style.padding="1px";bv.style.border=0;bv.style.overflow="hidden";bv.style.display="inline";bv.style.zoom=1;bI.inlineBlockNeedsLayout=(bv.offsetWidth===3);bv.style.display="block";bv.style.overflow="visible";bv.innerHTML="<div style='width:5px;'></div>";bI.shrinkWrapBlocks=(bv.offsetWidth!==3)}bv.style.cssText=bN+e;bv.innerHTML=bQ;bV=bv.firstChild;bW=bV.firstChild;bO=bV.nextSibling.firstChild.firstChild;bP={doesNotAddBorder:(bW.offsetTop!==5),doesAddBorderForTableAndCells:(bO.offsetTop===5)};bW.style.position="fixed";bW.style.top="20px";bP.fixedPosition=(bW.offsetTop===20||bW.offsetTop===15);bW.style.position=bW.style.top="";bV.style.overflow="hidden";bV.style.position="relative";bP.subtractsBorderForOverflowNotVisible=(bW.offsetTop===-5);bP.doesNotIncludeMarginInBodyOffset=(bS.offsetTop!==bL);if(bd.getComputedStyle){bv.style.marginTop="1%";bI.pixelMargin=(bd.getComputedStyle(bv,null)||{marginTop:0}).marginTop!=="1%"}if(typeof bM.style.zoom!=="undefined"){bM.style.zoom=1}bS.removeChild(bM);bR=bv=bM=null;b.extend(bI,bP)});return bI})();var aT=/^(?:\{.*\}|\[.*\])$/,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(bD,bC){var by,bv,bB,e,bx,bw=this[0],bA=0,bz=null;if(bD===L){if(this.length){bz=b.data(bw);if(bw.nodeType===1&&!b._data(bw,"parsedAttrs")){bB=bw.attributes;for(bx=bB.length;bA<bx;bA++){e=bB[bA].name;if(e.indexOf("data-")===0){e=b.camelCase(e.substring(5));a6(bw,e,bz[e])}}b._data(bw,"parsedAttrs",true)}}return bz}if(typeof bD==="object"){return this.each(function(){b.data(this,bD)})}by=bD.split(".",2);by[1]=by[1]?"."+by[1]:"";bv=by[1]+"!";return b.access(this,function(bE){if(bE===L){bz=this.triggerHandler("getData"+bv,[by[0]]);if(bz===L&&bw){bz=b.data(bw,bD);bz=a6(bw,bD,bz)}return bz===L&&by[1]?this.data(by[0]):bz}by[1]=bE;this.each(function(){var bF=b(this);bF.triggerHandler("setData"+bv,by);b.data(this,bD,bE);bF.triggerHandler("changeData"+bv,by)})},null,bC,arguments.length>1,null,false)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a6(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)?+by:aT.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 bj(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);bj(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);bj(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){var bw=2;if(typeof e!=="string"){bv=e;e="fx";bw--}if(arguments.length<bw){return b.queue(this[0],e)}return bv===L?this:this.each(function(){var bx=b.queue(this,e,bv);if(e==="fx"&&bx[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(bw)}});var aQ=/[\n\t\r]/g,ag=/\s+/,aV=/\r/g,g=/^(?:button|input)$/i,C=/^(?: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,E=b.support.getSetAttribute,bf,aZ,aG;b.fn.extend({attr:function(e,bv){return b.access(this,b.attr,e,bv,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,b.prop,e,bv,arguments.length>1)},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(ag);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(ag);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aQ," ");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(ag);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(aQ," ").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.type]||b.valHooks[bw.nodeName.toLowerCase()];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aV,""):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.type]||b.valHooks[this.nodeName.toLowerCase()];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)?aZ:bf)}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(by,bA){var bz,bB,bw,e,bv,bx=0;if(bA&&by.nodeType===1){bB=bA.toLowerCase().split(ag);e=bB.length;for(;bx<e;bx++){bw=bB[bx];if(bw){bz=b.propFix[bw]||bw;bv=ao.test(bw);if(!bv){b.attr(by,bw,"")}by.removeAttribute(E?bw:bz);if(bv&&bz in by){by[bz]=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(bf&&b.nodeName(bv,"button")){return bf.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(bf&&b.nodeName(bv,"button")){return bf.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):C.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aZ={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(!E){aG={name:true,id:true,coords:true};bf=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aG[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=bf.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:bf.get,set:function(bv,bw,e){if(bw===""){bw="false"}bf.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 be=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/(?:^|\s)hover(\.\S+)?\b/,aP=/^key/,bg=/^(?: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;by=bv.selector}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:by&&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||bd,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(bH){bH=b.event.fix(bH||bd.event);var bD=((b._data(this,"events")||{})[bH.type]||[]),bC=bD.delegateCount,bx=[].slice.call(arguments,0),bE=!bH.exclusive&&!bH.namespace,bz=b.event.special[bH.type]||{},bv=[],bJ,bG,by,bA,bK,bI,bB,bw,e,bF,bL;bx[0]=bH;bH.delegateTarget=this;if(bz.preDispatch&&bz.preDispatch.call(this,bH)===false){return}if(bC&&!(bH.button&&bH.type==="click")){bA=b(this);bA.context=this.ownerDocument||this;for(by=bH.target;by!=this;by=by.parentNode||this){if(by.disabled!==true){bI={};bw=[];bA[0]=by;for(bJ=0;bJ<bC;bJ++){e=bD[bJ];bF=e.selector;if(bI[bF]===L){bI[bF]=(e.quick?j(by,e.quick):bA.is(bF))}if(bI[bF]){bw.push(e)}}if(bw.length){bv.push({elem:by,matches:bw})}}}}if(bD.length>bC){bv.push({elem:this,matches:bD.slice(bC)})}for(bJ=0;bJ<bv.length&&!bH.isPropagationStopped();bJ++){bB=bv[bJ];bH.currentTarget=bB.elem;for(bG=0;bG<bB.matches.length&&!bH.isImmediatePropagationStopped();bG++){e=bB.matches[bG];if(bE||(!bH.namespace&&!e.namespace)||bH.namespace_re&&bH.namespace_re.test(e.namespace)){bH.data=e.data;bH.handleObj=e;bK=((b.event.special[e.origType]||{}).handle||e.handler).apply(bB.elem,bx);if(bK!==L){bH.result=bK;if(bK===false){bH.preventDefault();bH.stopPropagation()}}}}}if(bz.postDispatch){bz.postDispatch.call(this,bH)}return bH.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:bl}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bl(){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:bl,isPropagationStopped:bl,isImmediatePropagationStopped:bl};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){e._submit_bubble=true});bv._submit_attached=true}})},postDispatch:function(e){if(e._submit_bubble){delete e._submit_bubble;if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,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(be.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(be.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 be.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=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=bl}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(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.origType+"."+bv.namespace:bv.origType,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=bl}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(aP.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bg.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); /*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! +(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||e===11){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))}bE.match.globalPOS=bD;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)/,bb=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.globalPOS,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(aH(this,e,false),"not",e)},filter:function(e){return this.pushStack(aH(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(B(bx[0])||B(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function B(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||bb.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 aH(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=aS.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aS="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ah=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,v=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ai=new RegExp("<(?:"+aS+")[\\s/>]","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bn=/\/(java|ecma)script/i,aO=/^\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){return b.access(this,function(bv){return bv===L?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(bv))},null,e,arguments.length)},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(e){return b.access(this,function(by){var bx=this[0]||{},bw=0,bv=this.length;if(by===L){return bx.nodeType===1?bx.innerHTML.replace(ah,""):null}if(typeof by==="string"&&!ae.test(by)&&(b.support.leadingWhitespace||!ar.test(by))&&!ax[(d.exec(by)||["",""])[1].toLowerCase()]){by=by.replace(R,"<$1></$2>");try{for(;bw<bv;bw++){bx=this[bw]||{};if(bx.nodeType===1){b.cleanData(bx.getElementsByTagName("*"));bx.innerHTML=by}}bx=0}catch(bz){}}if(bx){this.empty().append(by)}},null,e,arguments.length)},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?bc(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,function(bG,bH){if(bH.src){b.ajax({type:"GET",global:false,url:bH.src,async:false,dataType:"script"})}else{b.globalEval((bH.text||bH.textContent||bH.innerHTML||"").replace(aO,"/*$0*/"))}if(bH.parentNode){bH.parentNode.removeChild(bH)}})}}return this}});function bc(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function s(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])}}}if(bz.data){bz.data=b.extend({},bz.data)}}function aj(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}else{if(bw==="script"&&e.text!==bv.text){e.text=bv.text}}}}}e.removeAttribute(b.expando);e.removeAttribute("_submit_attached");e.removeAttribute("_change_attached")}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||!ai.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 bh(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 D(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 am(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||b.isXMLDoc(by)||!ai.test("<"+by.nodeName+">")?by.cloneNode(true):am(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){aj(by,bz);e=bh(by);bv=bh(bz);for(bx=0;e[bx];++bx){if(bv[bx]){aj(e[bx],bv[bx])}}}if(bA){s(by,bz);if(bw){e=bh(by);bv=bh(bz);for(bx=0;e[bx];++bx){s(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bI,bw,bv,bx){var bA,bH,bD,bJ=[];bw=bw||av;if(typeof bw.createElement==="undefined"){bw=bw.ownerDocument||bw[0]&&bw[0].ownerDocument||av}for(var bE=0,bG;(bG=bI[bE])!=null;bE++){if(typeof bG==="number"){bG+=""}if(!bG){continue}if(typeof bG==="string"){if(!W.test(bG)){bG=bw.createTextNode(bG)}else{bG=bG.replace(R,"<$1></$2>");var bN=(d.exec(bG)||["",""])[1].toLowerCase(),bz=ax[bN]||ax._default,bK=bz[0],bB=bw.createElement("div"),bL=ac.childNodes,bM;if(bw===av){ac.appendChild(bB)}else{a(bw).appendChild(bB)}bB.innerHTML=bz[1]+bG+bz[2];while(bK--){bB=bB.lastChild}if(!b.support.tbody){var by=v.test(bG),e=bN==="table"&&!by?bB.firstChild&&bB.firstChild.childNodes:bz[1]==="<table>"&&!by?bB.childNodes:[];for(bD=e.length-1;bD>=0;--bD){if(b.nodeName(e[bD],"tbody")&&!e[bD].childNodes.length){e[bD].parentNode.removeChild(e[bD])}}}if(!b.support.leadingWhitespace&&ar.test(bG)){bB.insertBefore(bw.createTextNode(ar.exec(bG)[0]),bB.firstChild)}bG=bB.childNodes;if(bB){bB.parentNode.removeChild(bB);if(bL.length>0){bM=bL[bL.length-1];if(bM&&bM.parentNode){bM.parentNode.removeChild(bM)}}}}}var bF;if(!b.support.appendChecked){if(bG[0]&&typeof(bF=bG.length)==="number"){for(bD=0;bD<bF;bD++){D(bG[bD])}}else{D(bG)}}if(bG.nodeType){bJ.push(bG)}else{bJ=b.merge(bJ,bG)}}if(bv){bA=function(bO){return !bO.type||bn.test(bO.type)};for(bE=0;bJ[bE];bE++){bH=bJ[bE];if(bx&&b.nodeName(bH,"script")&&(!bH.type||bn.test(bH.type))){bx.push(bH.parentNode?bH.parentNode.removeChild(bH):bH)}else{if(bH.nodeType===1){var bC=b.grep(bH.getElementsByTagName("script"),bA);bJ.splice.apply(bJ,[bE+1,0].concat(bC))}bv.appendChild(bH)}}}return bJ},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]}}}});var al=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,y=/([A-Z]|^ms)/g,bo=/^[\-+]?(?:\d*\.)?\d+$/i,a1=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,I=/^([\-+])=([\-+.\de]+)/,aE=/^margin/,a9={position:"absolute",visibility:"hidden",display:"block"},G=["Top","Right","Bottom","Left"],Z,aJ,aY;b.fn.css=function(e,bv){return b.access(this,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)},e,bv,arguments.length>1)};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"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(by,bx,bz){var e={},bw,bv;for(bv in bx){e[bv]=by.style[bv];by.style[bv]=bx[bv]}bw=bz.call(by);for(bv in bx){by.style[bv]=e[bv]}return bw}});b.curCSS=b.css;if(av.defaultView&&av.defaultView.getComputedStyle){aJ=function(bA,bw){var bv,bz,e,by,bx=bA.style;bw=bw.replace(y,"-$1").toLowerCase();if((bz=bA.ownerDocument.defaultView)&&(e=bz.getComputedStyle(bA,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(bA.ownerDocument.documentElement,bA)){bv=b.style(bA,bw)}}if(!b.support.pixelMargin&&e&&aE.test(bw)&&a1.test(bv)){by=bx.width;bx.width=bv;bv=e.width;bx.width=by}return bv}}if(av.documentElement.currentStyle){aY=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(a1.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;bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aJ||aY;function af(by,bw,bv){var bz=bw==="width"?by.offsetWidth:by.offsetHeight,bx=bw==="width"?1:0,e=4;if(bz>0){if(bv!=="border"){for(;bx<e;bx+=2){if(!bv){bz-=parseFloat(b.css(by,"padding"+G[bx]))||0}if(bv==="margin"){bz+=parseFloat(b.css(by,bv+G[bx]))||0}else{bz-=parseFloat(b.css(by,"border"+G[bx]+"Width"))||0}}}return bz+"px"}bz=Z(by,bw);if(bz<0||bz==null){bz=by.style[bw]}if(a1.test(bz)){return bz}bz=parseFloat(bz)||0;if(bv){for(;bx<e;bx+=2){bz+=parseFloat(b.css(by,"padding"+G[bx]))||0;if(bv!=="padding"){bz+=parseFloat(b.css(by,"border"+G[bx]+"Width"))||0}if(bv==="margin"){bz+=parseFloat(b.css(by,bv+G[bx]))||0}}}return bz+"px"}b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){if(bx){if(by.offsetWidth!==0){return af(by,e,bw)}else{return b.swap(by,a9,function(){return af(by,e,bw)})}}},set:function(bw,bx){return bo.test(bx)?bx+"px":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(al,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=al.test(bw)?bw.replace(al,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bv,e){return b.swap(bv,{display:"inline-block"},function(){if(e){return Z(bv,"margin-right")}else{return bv.style.marginRight}})}}}});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)}}b.each({margin:"",padding:"",border:"Width"},function(e,bv){b.cssHooks[e+bv]={expand:function(by){var bx,bz=typeof by==="string"?by.split(" "):[by],bw={};for(bx=0;bx<4;bx++){bw[e+G[bx]+bv]=bz[bx]||bz[bx-2]||bz[0]}return bw}}});var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,a0=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aN=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aR=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a7=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,p=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,z=b.fn.load,aa={},q={},aF,r,aW=["*/"]+["*"];try{aF=bm.href}catch(aw){aF=av.createElement("a");aF.href="";aF=aF.href}r=K.exec(aF.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 aX(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=aX(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aX(bv,bE,bz,bD,"*",bx)}return bC}function an(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"&&z){return z.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(a7,"")).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||p.test(this.nodeName)||a0.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){an(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}an(bv,e);return bv},ajaxSettings:{url:aF,isLocal:aN.test(r[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bd.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(q),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?bk(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=F(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,r[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]!=r[1]||bI[2]!=r[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(r[3]||(r[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aX(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aR.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]!=="*"?", "+aW+"; 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=aX(q,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){u(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function u(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{u(bw+"["+(typeof bz==="object"?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&b.type(by)==="object"){for(var e in by){u(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bk(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 F(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(),t=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=(typeof bD.data==="string")&&/^application\/x\-www\-form\-urlencoded/.test(bD.contentType);if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(t.test(bD.url)||bx&&t.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bd[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(t,bv);if(bD.url===e){if(bx){by=by.replace(t,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bd[bw]=function(bE){bB=[bE]};bC.always(function(){bd[bw]=bz;if(bB&&b.isFunction(bz)){bd[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 A=bd.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,x=0,N;function aM(){try{return new bd.XMLHttpRequest()}catch(bv){}}function ak(){try{return new bd.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bd.ActiveXObject?function(){return !this.isLocal&&aM()||ak()}:aM;(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(A){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}try{bI.text=bA.responseText}catch(bK){}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=++x;if(A){if(!N){N={};b(bd).unload(A)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},ba,m,aB=/^(?:toggle|show|hide)$/,aU=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a4,aI=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a5;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a2("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.contains(bw.ownerDocument.documentElement,bw)){b._data(bw,"olddisplay",w(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(a2("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(a2("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),bL=this.nodeType===1,bJ=bL&&b(this).is(":hidden"),bB,bG,bD,bK,bN,bF,bI,bC,bH,bM,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}if((bN=b.cssHooks[bB])&&"expand" in bN){bF=bN.expand(bz[bB]);delete bz[bB];for(bD in bF){if(!(bD in bz)){bz[bD]=bF[bD]}}}}for(bB in bz){bG=bz[bB];if(b.isArray(bG)){bE.animatedProperties[bB]=bG[1];bG=bz[bB]=bG[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bG==="hide"&&bJ||bG==="show"&&!bJ){return bE.complete.call(this)}if(bL&&(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||w(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){bK=new b.fx(this,bE,bD);bG=bz[bD];if(aB.test(bG)){bA=b._data(this,"toggle"+bD)||(bG==="toggle"?bJ?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bK[bA]()}else{bK[bG]()}}else{bI=aU.exec(bG);bC=bK.cur();if(bI){bH=parseFloat(bI[2]);bM=bI[3]||(b.cssNumber[bD]?"":"px");if(bM!=="px"){b.style(this,bD,(bH||1)+bM);bC=((bH||1)/bK.cur())*bC;b.style(this,bD,bC+bM)}if(bI[1]){bH=((bI[1]==="-="?-1:1)*bH)+bC}bK.custom(bC,bH,bM)}else{bK.custom(bC,bG,"")}}}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 bi(){setTimeout(at,0);return(a5=b.now())}function at(){a5=L}function a2(bv,e){var bw={};b.each(aI.concat.apply([],aI.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a2("show",1),slideUp:a2("hide",1),slideToggle:a2("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(e){return e},swing:function(e){return(-Math.cos(e*Math.PI)/2)+0.5}},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=a5||bi();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(b._data(e.elem,"fxshow"+e.prop)===L){if(e.options.hide){b._data(e.elem,"fxshow"+e.prop,e.start)}else{if(e.options.show){b._data(e.elem,"fxshow"+e.prop,e.end)}}}};if(bv()&&b.timers.push(bv)&&!a4){a4=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=a5||bi(),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(a4);a4=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(aI.concat.apply([],aI),function(e,bv){if(bv.indexOf("margin")){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 w(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!ba){ba=av.createElement("iframe");ba.frameBorder=ba.width=ba.height=0}e.appendChild(ba);if(!m||!ba.createElement){m=(ba.contentWindow||ba.contentDocument).document;m.write((b.support.boxModel?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(ba)}Q[bx]=bw}return Q[bx]}var a8,V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){a8=function(by,bH,bw,bB){try{bB=by.getBoundingClientRect()}catch(bF){}if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aL(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{a8=function(bz,bE,bx){var bC,bw=bz.offsetParent,bv=bz,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.fn.offset=function(e){if(arguments.length){return e===L?this:this.each(function(bx){b.offset.setOffset(this,e,bx)})}var bv=this[0],bw=bv&&bv.ownerDocument;if(!bw){return null}if(bv===bw.body){return b.offset.bodyOffset(bv)}return a8(bv,bw,bw.documentElement)};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({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(bw,bv){var e=/Y/.test(bv);b.fn[bw]=function(bx){return b.access(this,function(by,bB,bA){var bz=aL(by);if(bA===L){return bz?(bv in bz)?bz[bv]:b.support.boxModel&&bz.document.documentElement[bB]||bz.document.body[bB]:by[bB]}if(bz){bz.scrollTo(!e?bA:b(bz).scrollLeft(),e?bA:b(bz).scrollTop())}else{by[bB]=bA}},bw,bx,arguments.length,null)}});function aL(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each({Height:"height",Width:"width"},function(bw,bx){var bv="client"+bw,e="scroll"+bw,by="offset"+bw;b.fn["inner"+bw]=function(){var bz=this[0];return bz?bz.style?parseFloat(b.css(bz,bx,"padding")):this[bx]():null};b.fn["outer"+bw]=function(bA){var bz=this[0];return bz?bz.style?parseFloat(b.css(bz,bx,bA?"margin":"border")):this[bx]():null};b.fn[bx]=function(bz){return b.access(this,function(bC,bB,bD){var bF,bE,bG,bA;if(b.isWindow(bC)){bF=bC.document;bE=bF.documentElement[bv];return b.support.boxModel&&bE||bF.body&&bF.body[bv]||bE}if(bC.nodeType===9){bF=bC.documentElement;if(bF[bv]>=bF[e]){return bF[bv]}return Math.max(bC.body[e],bF[e],bC.body[by],bF[by])}if(bD===L){bG=b.css(bC,bB);bA=parseFloat(bG);return b.isNumeric(bA)?bA:bG}b(bC).css(bB,bD)},bx,bz,arguments.length,null)}});bd.jQuery=bd.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! * jQuery UI 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -81,7 +53,7 @@ (function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! * jQuery hashchange event - v1.3 - 7/21/2010 * http://benalman.com/projects/jquery-hashchange-plugin/ - * + * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ @@ -112,4 +84,4 @@ * * Licensed MIT */ -(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a})); +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a}));
\ No newline at end of file diff --git a/templates/html/tabs.css b/templates/html/tabs.css index a28614b..8ea7d54 100644 --- a/templates/html/tabs.css +++ b/templates/html/tabs.css @@ -1 +1 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty index cf92712..e696837 100644 --- a/templates/latex/doxygen.sty +++ b/templates/latex/doxygen.sty @@ -35,6 +35,10 @@ \endgroup% } +\newcommand{\DoxyHorRuler}{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \hrule% +} \newcommand{\DoxyLabelFont}{} \newcommand{\entrylabel}[1]{% {% diff --git a/templates/xml/compound.xsd b/templates/xml/compound.xsd index 61da4a7..2d72d41 100644 --- a/templates/xml/compound.xsd +++ b/templates/xml/compound.xsd @@ -397,11 +397,13 @@ <xsd:element name="xmlonly" type="xsd:string" /> <xsd:element name="rtfonly" type="xsd:string" /> <xsd:element name="latexonly" type="xsd:string" /> + <xsd:element name="image" type="docImageType" /> <xsd:element name="dot" type="xsd:string" /> <xsd:element name="plantuml" type="xsd:string" /> <xsd:element name="anchor" type="docAnchorType" /> <xsd:element name="formula" type="docFormulaType" /> <xsd:element name="ref" type="docRefTextType" /> + <xsd:element name="emoji" type="docEmojiType" /> <!-- Automatically insert here the HTML entities --> </xsd:choice> </xsd:group> @@ -553,6 +555,7 @@ <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="width" type="xsd:string" /> <xsd:attribute name="height" type="xsd:string" /> + <xsd:attribute name="inline" type="DoxBool" /> </xsd:complexType> <xsd:complexType name="docFileType" mixed="true"> @@ -643,6 +646,25 @@ <xsd:complexType name="docEmptyType"/> + <xsd:complexType name="tableofcontentsType"> + <xsd:sequence> + <xsd:element name="tocsect" type="tableofcontentsKindType" minOccurs="1" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="tableofcontentsKindType"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/> + <xsd:element name="reference" type="xsd:string" minOccurs="1" maxOccurs="1"/> + <xsd:element name="tableofcontents" type="tableofcontentsType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docEmojiType"> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="unicode" type="xsd:string"/> + </xsd:complexType> + <!-- Simple types --> <xsd:simpleType name="DoxBool"> @@ -881,19 +903,5 @@ </xsd:restriction> </xsd:simpleType> - <xsd:complexType name="tableofcontentsType"> - <xsd:sequence> - <xsd:element name="tocsect" type="tableofcontentsKindType" minOccurs="1" maxOccurs="unbounded" /> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="tableofcontentsKindType"> - <xsd:sequence> - <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/> - <xsd:element name="reference" type="xsd:string" minOccurs="1" maxOccurs="1"/> - <xsd:element name="tableofcontents" type="tableofcontentsType" minOccurs="0" maxOccurs="unbounded" /> - </xsd:sequence> - </xsd:complexType> - </xsd:schema> diff --git a/testing/031/indexpage.xml b/testing/031/indexpage.xml index 2c1dfd7..b6a7ed0 100644 --- a/testing/031/indexpage.xml +++ b/testing/031/indexpage.xml @@ -9,7 +9,39 @@ <para>Some text. <image type="html" name="sample.png"/> <image type="latex" name="sample.png" width="5cm">Doxygen logo</image> <image type="docbook" name="sample.png"/> - More text. </para> + More text.</para> + <para>SVG image with caption:<linebreak/> +<image type="html" name="license-MIT-brightgreen.svg">A caption</image> +</para> + <para>PNG image with caption:<linebreak/> +<image type="html" name="license-MIT-brightgreen.png">A caption</image> +</para> + <para>SVG image without caption:<linebreak/> +<image type="html" name="license-MIT-brightgreen.svg"/> +</para> + <para>PNG image without caption:<linebreak/> +<image type="html" name="license-MIT-brightgreen.png"/> +</para> + <para>Inline SVG image with caption:<linebreak/> +This image is inline <image type="html" name="license-MIT-brightgreen.svg" inline="yes">MIT license</image> + within the text.</para> + <para>Inline PNG image with caption:<linebreak/> +This image is inline <image type="html" name="license-MIT-brightgreen.png" inline="yes">MIT license</image> + within the text.</para> + <para>Markdown style linked SVG image:<linebreak/> +<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="license-MIT-brightgreen.svg" inline="yes"/></ulink></para> + <para>Markdown style linked PNG image:<linebreak/> +<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="license-MIT-brightgreen.png" inline="yes"/></ulink></para> + <para>HTML style linked SVG image:<linebreak/> +<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="license-MIT-brightgreen.svg" inline="yes"/></ulink></para> + <para>HTML style linked PNG image:<linebreak/> +<ulink url="http://opensource.org/licenses/MIT"><image type="html" name="license-MIT-brightgreen.png" inline="yes"/></ulink></para> + <para>HTML style unlinked SVG image:<linebreak/> +<image type="html" name="license-MIT-brightgreen.svg" inline="yes"/> +</para> + <para>HTML style unlined PNG image:<linebreak/> +<image type="html" name="license-MIT-brightgreen.png" inline="yes"/> + </para> </detaileddescription> </compounddef> </doxygen> diff --git a/testing/031_image.dox b/testing/031_image.dox index 8ba47b7..61f5bba 100644 --- a/testing/031_image.dox +++ b/testing/031_image.dox @@ -2,9 +2,52 @@ // check: indexpage.xml // config: IMAGE_PATH = $INPUTDIR /** \mainpage - * Some text. - * \image html sample.png - * \image latex sample.png "Doxygen logo" width=5cm - * \image docbook sample.png - * More text. - */ +Some text. +\image html sample.png +\image latex sample.png "Doxygen logo" width=5cm +\image docbook sample.png +More text. + +SVG image with caption:\n +\image html http://img.shields.io/badge/license-MIT-brightgreen.svg "A caption" + +PNG image with caption:\n +\image html http://img.shields.io/badge/license-MIT-brightgreen.png "A caption" + +SVG image without caption:\n +\image html http://img.shields.io/badge/license-MIT-brightgreen.svg + +PNG image without caption:\n +\image html http://img.shields.io/badge/license-MIT-brightgreen.png + +Inline SVG image with caption:\n +This image is inline \image{inline} html http://img.shields.io/badge/license-MIT-brightgreen.svg "MIT license" within the text. + +Inline PNG image with caption:\n +This image is inline +\image{inline} html http://img.shields.io/badge/license-MIT-brightgreen.png "MIT license" +within the text. + +Markdown style linked SVG image:\n +[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT) + +Markdown style linked PNG image:\n +[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.png)](http://opensource.org/licenses/MIT) + +HTML style linked SVG image:\n +<a href="http://opensource.org/licenses/MIT"> +<img src="http://img.shields.io/badge/license-MIT-brightgreen.svg" alt="MIT license"> +</a> + +HTML style linked PNG image:\n +<a href="http://opensource.org/licenses/MIT"> +<img src="http://img.shields.io/badge/license-MIT-brightgreen.png" alt="MIT license"> +</a> + +HTML style unlinked SVG image:\n +<img src="http://img.shields.io/badge/license-MIT-brightgreen.svg" alt="MIT license"/> + +HTML style unlined PNG image:\n +<img src="http://img.shields.io/badge/license-MIT-brightgreen.png" alt="MIT license"/> + +*/ diff --git a/testing/074/namespacens.xml b/testing/074/namespacens.xml new file mode 100755 index 0000000..4eccf88 --- /dev/null +++ b/testing/074/namespacens.xml @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
+ <compounddef id="namespacens" kind="namespace" language="C++">
+ <compoundname>ns</compoundname>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="namespacens_1afd2e8a8437eff630f52a452ea6dc6e82" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type>int</type>
+ <definition>int ns::operator""_op</definition>
+ <argsstring>(unsigned long long)</argsstring>
+ <name>operator""_op</name>
+ <param>
+ <type>unsigned long long</type>
+ </param>
+ <briefdescription>
+ <para>An operator. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="67" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="namespacens_1a47f70e51e66b81b8383a4e2da66f1e09" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type>int</type>
+ <definition>int ns::operator""_oq</definition>
+ <argsstring>(unsigned long long)</argsstring>
+ <name>operator""_oq</name>
+ <param>
+ <type>unsigned long long</type>
+ </param>
+ <briefdescription>
+ <para>Another operator. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="70" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="namespacens_1aaa9eb8a7b40d4ed0edbe5e163b4e6e8d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type>void</type>
+ <definition>void ns::foo</definition>
+ <argsstring>(std::initializer_list< int * >)</argsstring>
+ <name>foo</name>
+ <param>
+ <type>std::initializer_list< int * ></type>
+ </param>
+ <briefdescription>
+ <para>Function. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="73" column="1"/>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ <para>A namespace. </para>
+ </briefdescription>
+ <detaileddescription>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>Link to an UDL w/o spaces: <ref refid="namespacens_1afd2e8a8437eff630f52a452ea6dc6e82" kindref="member">operator""_op</ref></para>
+ </listitem>
+ <listitem>
+ <para>Link to an UDL with spaces: <ref refid="namespacens_1a47f70e51e66b81b8383a4e2da66f1e09" kindref="member">operator""_oq</ref></para>
+ </listitem>
+ <listitem>
+ <para>Link to a function with spaces: <ref refid="namespacens_1aaa9eb8a7b40d4ed0edbe5e163b4e6e8d" kindref="member">foo(std::initializer_list< int* >)</ref></para>
+ </listitem>
+ <listitem>
+ <para>Link to a function w/o spaces: <ref refid="namespacens_1aaa9eb8a7b40d4ed0edbe5e163b4e6e8d" kindref="member">foo(std::initializer_list<int*>)</ref> </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </detaileddescription>
+ <location file="074_ref.cpp" line="64" column="1"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/074/struct_foo.xml b/testing/074/struct_foo.xml new file mode 100755 index 0000000..7096238 --- /dev/null +++ b/testing/074/struct_foo.xml @@ -0,0 +1,290 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="">
+ <compounddef id="struct_foo" kind="struct" language="C++" prot="public">
+ <compoundname>Foo</compoundname>
+ <sectiondef kind="public-func">
+ <memberdef kind="function" id="struct_foo_1a5c036d1b3561a0e1beffe8c6799a4276" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Foo::Foo</definition>
+ <argsstring>()</argsstring>
+ <name>Foo</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>Constructor </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="21" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1a279debd94d894223fa8468933e2d6188" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type><ref refid="struct_foo" kindref="compound">Foo</ref> &</type>
+ <definition>Foo& Foo::operator<<</definition>
+ <argsstring>(int i)</argsstring>
+ <name>operator<<</name>
+ <param>
+ <type>int</type>
+ <declname>i</declname>
+ </param>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>overloaded less than operator </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="32" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1a48bcc3de9b2f1ad09a3518a0c9f0da61" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
+ <type>const <ref refid="struct_foo" kindref="compound">Foo</ref> &</type>
+ <definition>const Foo& Foo::operator<<</definition>
+ <argsstring>(int i) const</argsstring>
+ <name>operator<<</name>
+ <param>
+ <type>int</type>
+ <declname>i</declname>
+ </param>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>overloaded const less than operator </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="35" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1a3a41dcf8c53f777d50676ea28400a640" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type>int</type>
+ <definition>int Foo::operator()</definition>
+ <argsstring>(int i)</argsstring>
+ <name>operator()</name>
+ <param>
+ <type>int</type>
+ <declname>i</declname>
+ </param>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>overloaded call operator </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="38" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1ae3c9c1f33cdb8b932c6eb104660a262b" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
+ <type>int</type>
+ <definition>int Foo::operator()</definition>
+ <argsstring>(int i) const</argsstring>
+ <name>operator()</name>
+ <param>
+ <type>int</type>
+ <declname>i</declname>
+ </param>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>overloaded call operator </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="41" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1aa20bd44b1bb87a652ac65170ddfa1a5a" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type><ref refid="struct_foo" kindref="compound">Foo</ref> &</type>
+ <definition>Foo& Foo::operator&=</definition>
+ <argsstring>(const Foo &rhs)</argsstring>
+ <name>operator&=</name>
+ <param>
+ <type>const <ref refid="struct_foo" kindref="compound">Foo</ref> &</type>
+ <declname>rhs</declname>
+ </param>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>and equal operator </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="44" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1ab1a2a53ad5b2a0f97422630330c151fe" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
+ <type>const <ref refid="struct_foo" kindref="compound">Foo</ref> &</type>
+ <definition>const Foo& Foo::operator&=</definition>
+ <argsstring>(const Foo &rhs) const</argsstring>
+ <name>operator&=</name>
+ <param>
+ <type>const <ref refid="struct_foo" kindref="compound">Foo</ref> &</type>
+ <declname>rhs</declname>
+ </param>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>and equal operator </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="47" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1a0514e1f5b30cbf77e1c39d7aba308656" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type>int *</type>
+ <definition>int* Foo::operator->*</definition>
+ <argsstring>(int *p)</argsstring>
+ <name>operator->*</name>
+ <param>
+ <type>int *</type>
+ <declname>p</declname>
+ </param>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>Member pointer operator </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="50" column="1"/>
+ </memberdef>
+ <memberdef kind="function" id="struct_foo_1a978acd73e910ce56cc169ebec8736669" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
+ <type>
+ <ref refid="struct_foo" kindref="compound">Foo</ref>
+ </type>
+ <definition>Foo Foo::fun</definition>
+ <argsstring>() const</argsstring>
+ <name>fun</name>
+ <briefdescription>
+ <para>Fun with itself. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="53" column="1"/>
+ </memberdef>
+ </sectiondef>
+ <sectiondef kind="public-static-func">
+ <memberdef kind="function" id="struct_foo_1abdf64a71706807b0f946265902c530ee" prot="public" static="yes" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type>
+ <ref refid="struct_foo" kindref="compound">Foo</ref>
+ </type>
+ <definition>static Foo Foo::fun</definition>
+ <argsstring>(Foo a, Foo b)</argsstring>
+ <name>fun</name>
+ <param>
+ <type>
+ <ref refid="struct_foo" kindref="compound">Foo</ref>
+ </type>
+ <declname>a</declname>
+ </param>
+ <param>
+ <type>
+ <ref refid="struct_foo" kindref="compound">Foo</ref>
+ </type>
+ <declname>b</declname>
+ </param>
+ <briefdescription>
+ <para>Fun of two. </para>
+ </briefdescription>
+ <detaileddescription>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a978acd73e910ce56cc169ebec8736669" kindref="member">fun() const</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a978acd73e910ce56cc169ebec8736669" kindref="member">fun() const</ref>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ref refid="struct_foo_1a978acd73e910ce56cc169ebec8736669" kindref="member">title</ref>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="074_ref.cpp" line="29" column="1"/>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ <para><ref refid="struct_foo" kindref="compound">Foo</ref> class. </para>
+ </briefdescription>
+ <detaileddescription>
+ <para>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo_1a5c036d1b3561a0e1beffe8c6799a4276" kindref="member">Foo::Foo()</ref> constructor for details. </para>
+ </simplesect>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo" kindref="compound">Foo</ref> constant. </para>
+ </simplesect>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo_1a279debd94d894223fa8468933e2d6188" kindref="member">less than operator</ref>. </para>
+ </simplesect>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo_1a48bcc3de9b2f1ad09a3518a0c9f0da61" kindref="member">const less than operator</ref>. </para>
+ </simplesect>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo_1a3a41dcf8c53f777d50676ea28400a640" kindref="member">call operator</ref>. </para>
+ </simplesect>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo_1ae3c9c1f33cdb8b932c6eb104660a262b" kindref="member">const call operator</ref>. </para>
+ </simplesect>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo_1aa20bd44b1bb87a652ac65170ddfa1a5a" kindref="member">and equal operator</ref>. </para>
+ </simplesect>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo_1ab1a2a53ad5b2a0f97422630330c151fe" kindref="member">const and equal operator</ref>. </para>
+ </simplesect>
+ <simplesect kind="see">
+ <para><ref refid="struct_foo_1a0514e1f5b30cbf77e1c39d7aba308656" kindref="member">member pointer operator</ref>. </para>
+ </simplesect>
+ </para>
+ </detaileddescription>
+ <location file="074_ref.cpp" line="19" column="1" bodyfile="074_ref.cpp" bodystart="19" bodyend="54"/>
+ <listofallmembers>
+ <member refid="struct_foo_1a5c036d1b3561a0e1beffe8c6799a4276" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>Foo</name>
+ </member>
+ <member refid="struct_foo_1abdf64a71706807b0f946265902c530ee" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>fun</name>
+ </member>
+ <member refid="struct_foo_1a978acd73e910ce56cc169ebec8736669" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>fun</name>
+ </member>
+ <member refid="struct_foo_1aa20bd44b1bb87a652ac65170ddfa1a5a" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator&=</name>
+ </member>
+ <member refid="struct_foo_1ab1a2a53ad5b2a0f97422630330c151fe" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator&=</name>
+ </member>
+ <member refid="struct_foo_1a3a41dcf8c53f777d50676ea28400a640" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator()</name>
+ </member>
+ <member refid="struct_foo_1ae3c9c1f33cdb8b932c6eb104660a262b" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator()</name>
+ </member>
+ <member refid="struct_foo_1a0514e1f5b30cbf77e1c39d7aba308656" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator->*</name>
+ </member>
+ <member refid="struct_foo_1a279debd94d894223fa8468933e2d6188" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator<<</name>
+ </member>
+ <member refid="struct_foo_1a48bcc3de9b2f1ad09a3518a0c9f0da61" prot="public" virt="non-virtual">
+ <scope>Foo</scope>
+ <name>operator<<</name>
+ </member>
+ </listofallmembers>
+ </compounddef>
+</doxygen>
diff --git a/testing/074_ref.cpp b/testing/074_ref.cpp new file mode 100644 index 0000000..cc9cf4a --- /dev/null +++ b/testing/074_ref.cpp @@ -0,0 +1,75 @@ +// objective: test \ref command in combination with const +// check: struct_foo.xml +// check: namespacens.xml + +#include <initializer_list> + +/** @brief Foo class. + * + * @see @ref Foo::Foo() constructor for details. + * @see @ref Foo constant. + * @see @ref operator<<(int) "less than operator". + * @see @ref operator<<(int) const "const less than operator". + * @see @ref operator()(int) "call operator". + * @see @ref operator()(int) const "const call operator". + * @see @ref operator&=(const Foo&) "and equal operator". + * @see @ref operator&=(const Foo&) const "const and equal operator". + * @see @ref operator->*(int *) "member pointer operator". + */ +struct Foo { + /** Constructor */ + Foo(); + /** + * @brief Fun of two + * + * - fun() const + * - @ref fun() const + * - @ref fun() const "title" + */ + static Foo fun(Foo a, Foo b); + + /** overloaded less than operator */ + Foo& operator<< (int i); + + /** overloaded const less than operator */ + const Foo& operator<< (int i) const; + + /** overloaded call operator */ + int operator()(int i); + + /** overloaded call operator */ + int operator()(int i) const; + + /** and equal operator */ + Foo& operator&=(const Foo& rhs); + + /** and equal operator */ + const Foo& operator&=(const Foo& rhs) const; + + /** Member pointer operator */ + int* operator->*(int *p); + + /** @brief Fun with itself */ + Foo fun() const; +}; + +/** +@brief A namespace + +- Link to an UDL w/o spaces: @link operator""_op @endlink +- Link to an UDL with spaces: @link operator""_oq @endlink +- Link to a function with spaces: @ref foo(std::initializer_list< int* >) +- Link to a function w/o spaces: @ref foo(std::initializer_list<int*>) +*/ +namespace ns { + +/** @brief An operator */ +int operator""_op(unsigned long long); + +/** @brief Another operator */ +int operator "" _oq(unsigned long long); + +/** @brief Function */ +void foo(std::initializer_list<int*>); + +} diff --git a/testing/075/struct_foo.xml b/testing/075/struct_foo.xml new file mode 100644 index 0000000..eca791b --- /dev/null +++ b/testing/075/struct_foo.xml @@ -0,0 +1,148 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="struct_foo" kind="struct" language="C++" prot="public"> + <compoundname>Foo</compoundname> + <sectiondef kind="public-func"> + <memberdef kind="function" id="struct_foo_1a4f9767677227174b2a9684b92e36cba7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type>void</type> + <definition>void Foo::foo</definition> + <argsstring>(float value)</argsstring> + <name>foo</name> + <param> + <type>float</type> + <declname>value</declname> + </param> + <briefdescription> + <para>Float. </para> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="075_argmatch.cpp" line="5" column="1" bodyfile="075_argmatch.cpp" bodystart="14" bodyend="14"/> + </memberdef> + <memberdef kind="function" id="struct_foo_1a3b1460a8784e5cc8156899a04df08b94" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type>void</type> + <definition>void Foo::foo</definition> + <argsstring>(unsigned value)</argsstring> + <name>foo</name> + <param> + <type>unsigned</type> + <declname>value</declname> + </param> + <briefdescription> + <para>Unsigned int. </para> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="075_argmatch.cpp" line="6" column="1" bodyfile="075_argmatch.cpp" bodystart="17" bodyend="17"/> + </memberdef> + <memberdef kind="function" id="struct_foo_1a87f5be128245c4a16b25500fe6ae2fd1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type>void</type> + <definition>void Foo::foo</definition> + <argsstring>(unsigned long)</argsstring> + <name>foo</name> + <param> + <type>unsigned long</type> + </param> + <briefdescription> + <para>Unnamed unsigned long. </para> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="075_argmatch.cpp" line="7" column="1" bodyfile="075_argmatch.cpp" bodystart="20" bodyend="20"/> + </memberdef> + <memberdef kind="function" id="struct_foo_1adc1cd4494f8a556d5bf6cb78409e3e68" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type>void</type> + <definition>void Foo::foo</definition> + <argsstring>(signed long)</argsstring> + <name>foo</name> + <param> + <type>signed long</type> + </param> + <briefdescription> + <para>Unnamed signed long. </para> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="075_argmatch.cpp" line="8" column="1" bodyfile="075_argmatch.cpp" bodystart="23" bodyend="23"/> + </memberdef> + <memberdef kind="function" id="struct_foo_1a0baba36cdd24740c6e39d5641e30a0fe" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type>void</type> + <definition>void Foo::foo</definition> + <argsstring>(const struct Foo)</argsstring> + <name>foo</name> + <param> + <type>const struct <ref refid="struct_foo" kindref="compound">Foo</ref></type> + </param> + <briefdescription> + <para>Unnamed struct foo. </para> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="075_argmatch.cpp" line="9" column="1" bodyfile="075_argmatch.cpp" bodystart="26" bodyend="26"/> + </memberdef> + <memberdef kind="function" id="struct_foo_1abeaaeb54ad61db26205c06927968845f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type>void</type> + <definition>void Foo::foo</definition> + <argsstring>(const char *const, const double param2)</argsstring> + <name>foo</name> + <param> + <type>const char * const</type> + </param> + <param> + <type>const double</type> + <declname>param2</declname> + </param> + <briefdescription> + <para>Unnamed const pointer. </para> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="075_argmatch.cpp" line="10" column="1"/> + </memberdef> + </sectiondef> + <briefdescription> + <para><ref refid="struct_foo" kindref="compound">Foo</ref>. </para> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="075_argmatch.cpp" line="4" column="1" bodyfile="075_argmatch.cpp" bodystart="4" bodyend="11"/> + <listofallmembers> + <member refid="struct_foo_1a4f9767677227174b2a9684b92e36cba7" prot="public" virt="non-virtual"> + <scope>Foo</scope> + <name>foo</name> + </member> + <member refid="struct_foo_1a3b1460a8784e5cc8156899a04df08b94" prot="public" virt="non-virtual"> + <scope>Foo</scope> + <name>foo</name> + </member> + <member refid="struct_foo_1a87f5be128245c4a16b25500fe6ae2fd1" prot="public" virt="non-virtual"> + <scope>Foo</scope> + <name>foo</name> + </member> + <member refid="struct_foo_1adc1cd4494f8a556d5bf6cb78409e3e68" prot="public" virt="non-virtual"> + <scope>Foo</scope> + <name>foo</name> + </member> + <member refid="struct_foo_1a0baba36cdd24740c6e39d5641e30a0fe" prot="public" virt="non-virtual"> + <scope>Foo</scope> + <name>foo</name> + </member> + <member refid="struct_foo_1abeaaeb54ad61db26205c06927968845f" prot="public" virt="non-virtual"> + <scope>Foo</scope> + <name>foo</name> + </member> + </listofallmembers> + </compounddef> +</doxygen> diff --git a/testing/075_argmatch.cpp b/testing/075_argmatch.cpp new file mode 100644 index 0000000..439cdca --- /dev/null +++ b/testing/075_argmatch.cpp @@ -0,0 +1,30 @@ +// objective: test argument matching in particular for unnamed types +// check: struct_foo.xml +/** @brief Foo */ +struct Foo { + void foo(float value); + void foo(unsigned value); + void foo(unsigned long); + void foo(signed long); + void foo(const struct Foo); + void foo(const char * const, const double param2); +}; + +/** @brief Float */ +void Foo::foo(float) {} + +/** @brief Unsigned int */ +void Foo::foo(unsigned value) {} + +/** @brief Unnamed unsigned long */ +void Foo::foo(unsigned long) {} + +/** @brief Unnamed signed long */ +void Foo::foo(signed long) {} + +/** @brief Unnamed struct foo */ +void Foo::foo(const struct Foo) {} + +/** @brief Unnamed const pointer */ +void Foo::foo(const char * const, const double param2); + diff --git a/testing/076/indexpage.xml b/testing/076/indexpage.xml new file mode 100644 index 0000000..5665d9b --- /dev/null +++ b/testing/076/indexpage.xml @@ -0,0 +1,1500 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="indexpage" kind="page"> + <compoundname>index</compoundname> + <title>Emoji test</title> + <briefdescription> + </briefdescription> + <detaileddescription> + <para><emoji name="+1" unicode="&#x1f44d;"/><emoji name="+1" unicode="&#x1f44d;"/> from "+1"<linebreak/> + <emoji name="-1" unicode="&#x1f44e;"/> <emoji name="-1" unicode="&#x1f44e;"/> from "-1"<linebreak/> + <emoji name="100" unicode="&#x1f4af;"/> <emoji name="100" unicode="&#x1f4af;"/> from "100"<linebreak/> + <emoji name="1234" unicode="&#x1f522;"/> <emoji name="1234" unicode="&#x1f522;"/> from "1234"<linebreak/> + <emoji name="1st_place_medal" unicode="&#x1f947;"/> <emoji name="1st_place_medal" unicode="&#x1f947;"/> from "1st_place_medal"<linebreak/> + <emoji name="2nd_place_medal" unicode="&#x1f948;"/> <emoji name="2nd_place_medal" unicode="&#x1f948;"/> from "2nd_place_medal"<linebreak/> + <emoji name="3rd_place_medal" unicode="&#x1f949;"/> <emoji name="3rd_place_medal" unicode="&#x1f949;"/> from "3rd_place_medal"<linebreak/> + <emoji name="8ball" unicode="&#x1f3b1;"/> <emoji name="8ball" unicode="&#x1f3b1;"/> from "8ball"<linebreak/> + <emoji name="a" unicode="&#x1f170;"/> <emoji name="a" unicode="&#x1f170;"/> from "a"<linebreak/> + <emoji name="ab" unicode="&#x1f18e;"/> <emoji name="ab" unicode="&#x1f18e;"/> from "ab"<linebreak/> + <emoji name="abc" unicode="&#x1f524;"/> <emoji name="abc" unicode="&#x1f524;"/> from "abc"<linebreak/> + <emoji name="abcd" unicode="&#x1f521;"/> <emoji name="abcd" unicode="&#x1f521;"/> from "abcd"<linebreak/> + <emoji name="accept" unicode="&#x1f251;"/> <emoji name="accept" unicode="&#x1f251;"/> from "accept"<linebreak/> + <emoji name="aerial_tramway" unicode="&#x1f6a1;"/> <emoji name="aerial_tramway" unicode="&#x1f6a1;"/> from "aerial_tramway"<linebreak/> + <emoji name="afghanistan" unicode="&#x1f1e6;&#x1f1eb;"/> <emoji name="afghanistan" unicode="&#x1f1e6;&#x1f1eb;"/> from "afghanistan"<linebreak/> + <emoji name="airplane" unicode="&#x2708;"/> <emoji name="airplane" unicode="&#x2708;"/> from "airplane"<linebreak/> + <emoji name="aland_islands" unicode="&#x1f1e6;&#x1f1fd;"/> <emoji name="aland_islands" unicode="&#x1f1e6;&#x1f1fd;"/> from "aland_islands"<linebreak/> + <emoji name="alarm_clock" unicode="&#x23f0;"/> <emoji name="alarm_clock" unicode="&#x23f0;"/> from "alarm_clock"<linebreak/> + <emoji name="albania" unicode="&#x1f1e6;&#x1f1f1;"/> <emoji name="albania" unicode="&#x1f1e6;&#x1f1f1;"/> from "albania"<linebreak/> + <emoji name="alembic" unicode="&#x2697;"/> <emoji name="alembic" unicode="&#x2697;"/> from "alembic"<linebreak/> + <emoji name="algeria" unicode="&#x1f1e9;&#x1f1ff;"/> <emoji name="algeria" unicode="&#x1f1e9;&#x1f1ff;"/> from "algeria"<linebreak/> + <emoji name="alien" unicode="&#x1f47d;"/> <emoji name="alien" unicode="&#x1f47d;"/> from "alien"<linebreak/> + <emoji name="ambulance" unicode="&#x1f691;"/> <emoji name="ambulance" unicode="&#x1f691;"/> from "ambulance"<linebreak/> + <emoji name="american_samoa" unicode="&#x1f1e6;&#x1f1f8;"/> <emoji name="american_samoa" unicode="&#x1f1e6;&#x1f1f8;"/> from "american_samoa"<linebreak/> + <emoji name="amphora" unicode="&#x1f3fa;"/> <emoji name="amphora" unicode="&#x1f3fa;"/> from "amphora"<linebreak/> + <emoji name="anchor" unicode="&#x2693;"/> <emoji name="anchor" unicode="&#x2693;"/> from "anchor"<linebreak/> + <emoji name="andorra" unicode="&#x1f1e6;&#x1f1e9;"/> <emoji name="andorra" unicode="&#x1f1e6;&#x1f1e9;"/> from "andorra"<linebreak/> + <emoji name="angel" unicode="&#x1f47c;"/> <emoji name="angel" unicode="&#x1f47c;"/> from "angel"<linebreak/> + <emoji name="anger" unicode="&#x1f4a2;"/> <emoji name="anger" unicode="&#x1f4a2;"/> from "anger"<linebreak/> + <emoji name="angola" unicode="&#x1f1e6;&#x1f1f4;"/> <emoji name="angola" unicode="&#x1f1e6;&#x1f1f4;"/> from "angola"<linebreak/> + <emoji name="angry" unicode="&#x1f620;"/> <emoji name="angry" unicode="&#x1f620;"/> from "angry"<linebreak/> + <emoji name="anguilla" unicode="&#x1f1e6;&#x1f1ee;"/> <emoji name="anguilla" unicode="&#x1f1e6;&#x1f1ee;"/> from "anguilla"<linebreak/> + <emoji name="anguished" unicode="&#x1f627;"/> <emoji name="anguished" unicode="&#x1f627;"/> from "anguished"<linebreak/> + <emoji name="ant" unicode="&#x1f41c;"/> <emoji name="ant" unicode="&#x1f41c;"/> from "ant"<linebreak/> + <emoji name="antarctica" unicode="&#x1f1e6;&#x1f1f6;"/> <emoji name="antarctica" unicode="&#x1f1e6;&#x1f1f6;"/> from "antarctica"<linebreak/> + <emoji name="antigua_barbuda" unicode="&#x1f1e6;&#x1f1ec;"/> <emoji name="antigua_barbuda" unicode="&#x1f1e6;&#x1f1ec;"/> from "antigua_barbuda"<linebreak/> + <emoji name="apple" unicode="&#x1f34e;"/> <emoji name="apple" unicode="&#x1f34e;"/> from "apple"<linebreak/> + <emoji name="aquarius" unicode="&#x2652;"/> <emoji name="aquarius" unicode="&#x2652;"/> from "aquarius"<linebreak/> + <emoji name="argentina" unicode="&#x1f1e6;&#x1f1f7;"/> <emoji name="argentina" unicode="&#x1f1e6;&#x1f1f7;"/> from "argentina"<linebreak/> + <emoji name="aries" unicode="&#x2648;"/> <emoji name="aries" unicode="&#x2648;"/> from "aries"<linebreak/> + <emoji name="armenia" unicode="&#x1f1e6;&#x1f1f2;"/> <emoji name="armenia" unicode="&#x1f1e6;&#x1f1f2;"/> from "armenia"<linebreak/> + <emoji name="arrow_backward" unicode="&#x25c0;"/> <emoji name="arrow_backward" unicode="&#x25c0;"/> from "arrow_backward"<linebreak/> + <emoji name="arrow_double_down" unicode="&#x23ec;"/> <emoji name="arrow_double_down" unicode="&#x23ec;"/> from "arrow_double_down"<linebreak/> + <emoji name="arrow_double_up" unicode="&#x23eb;"/> <emoji name="arrow_double_up" unicode="&#x23eb;"/> from "arrow_double_up"<linebreak/> + <emoji name="arrow_down" unicode="&#x2b07;"/> <emoji name="arrow_down" unicode="&#x2b07;"/> from "arrow_down"<linebreak/> + <emoji name="arrow_down_small" unicode="&#x1f53d;"/> <emoji name="arrow_down_small" unicode="&#x1f53d;"/> from "arrow_down_small"<linebreak/> + <emoji name="arrow_forward" unicode="&#x25b6;"/> <emoji name="arrow_forward" unicode="&#x25b6;"/> from "arrow_forward"<linebreak/> + <emoji name="arrow_heading_down" unicode="&#x2935;"/> <emoji name="arrow_heading_down" unicode="&#x2935;"/> from "arrow_heading_down"<linebreak/> + <emoji name="arrow_heading_up" unicode="&#x2934;"/> <emoji name="arrow_heading_up" unicode="&#x2934;"/> from "arrow_heading_up"<linebreak/> + <emoji name="arrow_left" unicode="&#x2b05;"/> <emoji name="arrow_left" unicode="&#x2b05;"/> from "arrow_left"<linebreak/> + <emoji name="arrow_lower_left" unicode="&#x2199;"/> <emoji name="arrow_lower_left" unicode="&#x2199;"/> from "arrow_lower_left"<linebreak/> + <emoji name="arrow_lower_right" unicode="&#x2198;"/> <emoji name="arrow_lower_right" unicode="&#x2198;"/> from "arrow_lower_right"<linebreak/> + <emoji name="arrow_right" unicode="&#x27a1;"/> <emoji name="arrow_right" unicode="&#x27a1;"/> from "arrow_right"<linebreak/> + <emoji name="arrow_right_hook" unicode="&#x21aa;"/> <emoji name="arrow_right_hook" unicode="&#x21aa;"/> from "arrow_right_hook"<linebreak/> + <emoji name="arrow_up" unicode="&#x2b06;"/> <emoji name="arrow_up" unicode="&#x2b06;"/> from "arrow_up"<linebreak/> + <emoji name="arrow_up_down" unicode="&#x2195;"/> <emoji name="arrow_up_down" unicode="&#x2195;"/> from "arrow_up_down"<linebreak/> + <emoji name="arrow_up_small" unicode="&#x1f53c;"/> <emoji name="arrow_up_small" unicode="&#x1f53c;"/> from "arrow_up_small"<linebreak/> + <emoji name="arrow_upper_left" unicode="&#x2196;"/> <emoji name="arrow_upper_left" unicode="&#x2196;"/> from "arrow_upper_left"<linebreak/> + <emoji name="arrow_upper_right" unicode="&#x2197;"/> <emoji name="arrow_upper_right" unicode="&#x2197;"/> from "arrow_upper_right"<linebreak/> + <emoji name="arrows_clockwise" unicode="&#x1f503;"/> <emoji name="arrows_clockwise" unicode="&#x1f503;"/> from "arrows_clockwise"<linebreak/> + <emoji name="arrows_counterclockwise" unicode="&#x1f504;"/> <emoji name="arrows_counterclockwise" unicode="&#x1f504;"/> from "arrows_counterclockwise"<linebreak/> + <emoji name="art" unicode="&#x1f3a8;"/> <emoji name="art" unicode="&#x1f3a8;"/> from "art"<linebreak/> + <emoji name="articulated_lorry" unicode="&#x1f69b;"/> <emoji name="articulated_lorry" unicode="&#x1f69b;"/> from "articulated_lorry"<linebreak/> + <emoji name="artificial_satellite" unicode="&#x1f6f0;"/> <emoji name="artificial_satellite" unicode="&#x1f6f0;"/> from "artificial_satellite"<linebreak/> + <emoji name="aruba" unicode="&#x1f1e6;&#x1f1fc;"/> <emoji name="aruba" unicode="&#x1f1e6;&#x1f1fc;"/> from "aruba"<linebreak/> + <emoji name="asterisk" unicode="&#x002a;&#x20e3;"/> <emoji name="asterisk" unicode="&#x002a;&#x20e3;"/> from "asterisk"<linebreak/> + <emoji name="astonished" unicode="&#x1f632;"/> <emoji name="astonished" unicode="&#x1f632;"/> from "astonished"<linebreak/> + <emoji name="athletic_shoe" unicode="&#x1f45f;"/> <emoji name="athletic_shoe" unicode="&#x1f45f;"/> from "athletic_shoe"<linebreak/> + <emoji name="atm" unicode="&#x1f3e7;"/> <emoji name="atm" unicode="&#x1f3e7;"/> from "atm"<linebreak/> + <emoji name="atom_symbol" unicode="&#x269b;"/> <emoji name="atom_symbol" unicode="&#x269b;"/> from "atom_symbol"<linebreak/> + <emoji name="australia" unicode="&#x1f1e6;&#x1f1fa;"/> <emoji name="australia" unicode="&#x1f1e6;&#x1f1fa;"/> from "australia"<linebreak/> + <emoji name="austria" unicode="&#x1f1e6;&#x1f1f9;"/> <emoji name="austria" unicode="&#x1f1e6;&#x1f1f9;"/> from "austria"<linebreak/> + <emoji name="avocado" unicode="&#x1f951;"/> <emoji name="avocado" unicode="&#x1f951;"/> from "avocado"<linebreak/> + <emoji name="azerbaijan" unicode="&#x1f1e6;&#x1f1ff;"/> <emoji name="azerbaijan" unicode="&#x1f1e6;&#x1f1ff;"/> from "azerbaijan"<linebreak/> + <emoji name="b" unicode="&#x1f171;"/> <emoji name="b" unicode="&#x1f171;"/> from "b"<linebreak/> + <emoji name="baby" unicode="&#x1f476;"/> <emoji name="baby" unicode="&#x1f476;"/> from "baby"<linebreak/> + <emoji name="baby_bottle" unicode="&#x1f37c;"/> <emoji name="baby_bottle" unicode="&#x1f37c;"/> from "baby_bottle"<linebreak/> + <emoji name="baby_chick" unicode="&#x1f424;"/> <emoji name="baby_chick" unicode="&#x1f424;"/> from "baby_chick"<linebreak/> + <emoji name="baby_symbol" unicode="&#x1f6bc;"/> <emoji name="baby_symbol" unicode="&#x1f6bc;"/> from "baby_symbol"<linebreak/> + <emoji name="back" unicode="&#x1f519;"/> <emoji name="back" unicode="&#x1f519;"/> from "back"<linebreak/> + <emoji name="bacon" unicode="&#x1f953;"/> <emoji name="bacon" unicode="&#x1f953;"/> from "bacon"<linebreak/> + <emoji name="badminton" unicode="&#x1f3f8;"/> <emoji name="badminton" unicode="&#x1f3f8;"/> from "badminton"<linebreak/> + <emoji name="baggage_claim" unicode="&#x1f6c4;"/> <emoji name="baggage_claim" unicode="&#x1f6c4;"/> from "baggage_claim"<linebreak/> + <emoji name="baguette_bread" unicode="&#x1f956;"/> <emoji name="baguette_bread" unicode="&#x1f956;"/> from "baguette_bread"<linebreak/> + <emoji name="bahamas" unicode="&#x1f1e7;&#x1f1f8;"/> <emoji name="bahamas" unicode="&#x1f1e7;&#x1f1f8;"/> from "bahamas"<linebreak/> + <emoji name="bahrain" unicode="&#x1f1e7;&#x1f1ed;"/> <emoji name="bahrain" unicode="&#x1f1e7;&#x1f1ed;"/> from "bahrain"<linebreak/> + <emoji name="balance_scale" unicode="&#x2696;"/> <emoji name="balance_scale" unicode="&#x2696;"/> from "balance_scale"<linebreak/> + <emoji name="balloon" unicode="&#x1f388;"/> <emoji name="balloon" unicode="&#x1f388;"/> from "balloon"<linebreak/> + <emoji name="ballot_box" unicode="&#x1f5f3;"/> <emoji name="ballot_box" unicode="&#x1f5f3;"/> from "ballot_box"<linebreak/> + <emoji name="ballot_box_with_check" unicode="&#x2611;"/> <emoji name="ballot_box_with_check" unicode="&#x2611;"/> from "ballot_box_with_check"<linebreak/> + <emoji name="bamboo" unicode="&#x1f38d;"/> <emoji name="bamboo" unicode="&#x1f38d;"/> from "bamboo"<linebreak/> + <emoji name="banana" unicode="&#x1f34c;"/> <emoji name="banana" unicode="&#x1f34c;"/> from "banana"<linebreak/> + <emoji name="bangbang" unicode="&#x203c;"/> <emoji name="bangbang" unicode="&#x203c;"/> from "bangbang"<linebreak/> + <emoji name="bangladesh" unicode="&#x1f1e7;&#x1f1e9;"/> <emoji name="bangladesh" unicode="&#x1f1e7;&#x1f1e9;"/> from "bangladesh"<linebreak/> + <emoji name="bank" unicode="&#x1f3e6;"/> <emoji name="bank" unicode="&#x1f3e6;"/> from "bank"<linebreak/> + <emoji name="bar_chart" unicode="&#x1f4ca;"/> <emoji name="bar_chart" unicode="&#x1f4ca;"/> from "bar_chart"<linebreak/> + <emoji name="barbados" unicode="&#x1f1e7;&#x1f1e7;"/> <emoji name="barbados" unicode="&#x1f1e7;&#x1f1e7;"/> from "barbados"<linebreak/> + <emoji name="barber" unicode="&#x1f488;"/> <emoji name="barber" unicode="&#x1f488;"/> from "barber"<linebreak/> + <emoji name="baseball" unicode="&#x26be;"/> <emoji name="baseball" unicode="&#x26be;"/> from "baseball"<linebreak/> + <emoji name="basketball" unicode="&#x1f3c0;"/> <emoji name="basketball" unicode="&#x1f3c0;"/> from "basketball"<linebreak/> + <emoji name="basketball_man" unicode="&#x26f9;"/> <emoji name="basketball_man" unicode="&#x26f9;"/> from "basketball_man"<linebreak/> + <emoji name="basketball_woman" unicode="&#x26f9;&#x2640;"/> <emoji name="basketball_woman" unicode="&#x26f9;&#x2640;"/> from "basketball_woman"<linebreak/> + <emoji name="bat" unicode="&#x1f987;"/> <emoji name="bat" unicode="&#x1f987;"/> from "bat"<linebreak/> + <emoji name="bath" unicode="&#x1f6c0;"/> <emoji name="bath" unicode="&#x1f6c0;"/> from "bath"<linebreak/> + <emoji name="bathtub" unicode="&#x1f6c1;"/> <emoji name="bathtub" unicode="&#x1f6c1;"/> from "bathtub"<linebreak/> + <emoji name="battery" unicode="&#x1f50b;"/> <emoji name="battery" unicode="&#x1f50b;"/> from "battery"<linebreak/> + <emoji name="beach_umbrella" unicode="&#x1f3d6;"/> <emoji name="beach_umbrella" unicode="&#x1f3d6;"/> from "beach_umbrella"<linebreak/> + <emoji name="bear" unicode="&#x1f43b;"/> <emoji name="bear" unicode="&#x1f43b;"/> from "bear"<linebreak/> + <emoji name="bed" unicode="&#x1f6cf;"/> <emoji name="bed" unicode="&#x1f6cf;"/> from "bed"<linebreak/> + <emoji name="bee" unicode="&#x1f41d;"/> <emoji name="bee" unicode="&#x1f41d;"/> from "bee"<linebreak/> + <emoji name="beer" unicode="&#x1f37a;"/> <emoji name="beer" unicode="&#x1f37a;"/> from "beer"<linebreak/> + <emoji name="beers" unicode="&#x1f37b;"/> <emoji name="beers" unicode="&#x1f37b;"/> from "beers"<linebreak/> + <emoji name="beetle" unicode="&#x1f41e;"/> <emoji name="beetle" unicode="&#x1f41e;"/> from "beetle"<linebreak/> + <emoji name="beginner" unicode="&#x1f530;"/> <emoji name="beginner" unicode="&#x1f530;"/> from "beginner"<linebreak/> + <emoji name="belarus" unicode="&#x1f1e7;&#x1f1fe;"/> <emoji name="belarus" unicode="&#x1f1e7;&#x1f1fe;"/> from "belarus"<linebreak/> + <emoji name="belgium" unicode="&#x1f1e7;&#x1f1ea;"/> <emoji name="belgium" unicode="&#x1f1e7;&#x1f1ea;"/> from "belgium"<linebreak/> + <emoji name="belize" unicode="&#x1f1e7;&#x1f1ff;"/> <emoji name="belize" unicode="&#x1f1e7;&#x1f1ff;"/> from "belize"<linebreak/> + <emoji name="bell" unicode="&#x1f514;"/> <emoji name="bell" unicode="&#x1f514;"/> from "bell"<linebreak/> + <emoji name="bellhop_bell" unicode="&#x1f6ce;"/> <emoji name="bellhop_bell" unicode="&#x1f6ce;"/> from "bellhop_bell"<linebreak/> + <emoji name="benin" unicode="&#x1f1e7;&#x1f1ef;"/> <emoji name="benin" unicode="&#x1f1e7;&#x1f1ef;"/> from "benin"<linebreak/> + <emoji name="bento" unicode="&#x1f371;"/> <emoji name="bento" unicode="&#x1f371;"/> from "bento"<linebreak/> + <emoji name="bermuda" unicode="&#x1f1e7;&#x1f1f2;"/> <emoji name="bermuda" unicode="&#x1f1e7;&#x1f1f2;"/> from "bermuda"<linebreak/> + <emoji name="bhutan" unicode="&#x1f1e7;&#x1f1f9;"/> <emoji name="bhutan" unicode="&#x1f1e7;&#x1f1f9;"/> from "bhutan"<linebreak/> + <emoji name="bicyclist" unicode="&#x1f6b4;"/> <emoji name="bicyclist" unicode="&#x1f6b4;"/> from "bicyclist"<linebreak/> + <emoji name="bike" unicode="&#x1f6b2;"/> <emoji name="bike" unicode="&#x1f6b2;"/> from "bike"<linebreak/> + <emoji name="biking_man" unicode="&#x1f6b4;"/> <emoji name="biking_man" unicode="&#x1f6b4;"/> from "biking_man"<linebreak/> + <emoji name="biking_woman" unicode="&#x1f6b4;&#x2640;"/> <emoji name="biking_woman" unicode="&#x1f6b4;&#x2640;"/> from "biking_woman"<linebreak/> + <emoji name="bikini" unicode="&#x1f459;"/> <emoji name="bikini" unicode="&#x1f459;"/> from "bikini"<linebreak/> + <emoji name="biohazard" unicode="&#x2623;"/> <emoji name="biohazard" unicode="&#x2623;"/> from "biohazard"<linebreak/> + <emoji name="bird" unicode="&#x1f426;"/> <emoji name="bird" unicode="&#x1f426;"/> from "bird"<linebreak/> + <emoji name="birthday" unicode="&#x1f382;"/> <emoji name="birthday" unicode="&#x1f382;"/> from "birthday"<linebreak/> + <emoji name="black_circle" unicode="&#x26ab;"/> <emoji name="black_circle" unicode="&#x26ab;"/> from "black_circle"<linebreak/> + <emoji name="black_flag" unicode="&#x1f3f4;"/> <emoji name="black_flag" unicode="&#x1f3f4;"/> from "black_flag"<linebreak/> + <emoji name="black_heart" unicode="&#x1f5a4;"/> <emoji name="black_heart" unicode="&#x1f5a4;"/> from "black_heart"<linebreak/> + <emoji name="black_joker" unicode="&#x1f0cf;"/> <emoji name="black_joker" unicode="&#x1f0cf;"/> from "black_joker"<linebreak/> + <emoji name="black_large_square" unicode="&#x2b1b;"/> <emoji name="black_large_square" unicode="&#x2b1b;"/> from "black_large_square"<linebreak/> + <emoji name="black_medium_small_square" unicode="&#x25fe;"/> <emoji name="black_medium_small_square" unicode="&#x25fe;"/> from "black_medium_small_square"<linebreak/> + <emoji name="black_medium_square" unicode="&#x25fc;"/> <emoji name="black_medium_square" unicode="&#x25fc;"/> from "black_medium_square"<linebreak/> + <emoji name="black_nib" unicode="&#x2712;"/> <emoji name="black_nib" unicode="&#x2712;"/> from "black_nib"<linebreak/> + <emoji name="black_small_square" unicode="&#x25aa;"/> <emoji name="black_small_square" unicode="&#x25aa;"/> from "black_small_square"<linebreak/> + <emoji name="black_square_button" unicode="&#x1f532;"/> <emoji name="black_square_button" unicode="&#x1f532;"/> from "black_square_button"<linebreak/> + <emoji name="blonde_man" unicode="&#x1f471;"/> <emoji name="blonde_man" unicode="&#x1f471;"/> from "blonde_man"<linebreak/> + <emoji name="blonde_woman" unicode="&#x1f471;&#x2640;"/> <emoji name="blonde_woman" unicode="&#x1f471;&#x2640;"/> from "blonde_woman"<linebreak/> + <emoji name="blossom" unicode="&#x1f33c;"/> <emoji name="blossom" unicode="&#x1f33c;"/> from "blossom"<linebreak/> + <emoji name="blowfish" unicode="&#x1f421;"/> <emoji name="blowfish" unicode="&#x1f421;"/> from "blowfish"<linebreak/> + <emoji name="blue_book" unicode="&#x1f4d8;"/> <emoji name="blue_book" unicode="&#x1f4d8;"/> from "blue_book"<linebreak/> + <emoji name="blue_car" unicode="&#x1f699;"/> <emoji name="blue_car" unicode="&#x1f699;"/> from "blue_car"<linebreak/> + <emoji name="blue_heart" unicode="&#x1f499;"/> <emoji name="blue_heart" unicode="&#x1f499;"/> from "blue_heart"<linebreak/> + <emoji name="blush" unicode="&#x1f60a;"/> <emoji name="blush" unicode="&#x1f60a;"/> from "blush"<linebreak/> + <emoji name="boar" unicode="&#x1f417;"/> <emoji name="boar" unicode="&#x1f417;"/> from "boar"<linebreak/> + <emoji name="boat" unicode="&#x26f5;"/> <emoji name="boat" unicode="&#x26f5;"/> from "boat"<linebreak/> + <emoji name="bolivia" unicode="&#x1f1e7;&#x1f1f4;"/> <emoji name="bolivia" unicode="&#x1f1e7;&#x1f1f4;"/> from "bolivia"<linebreak/> + <emoji name="bomb" unicode="&#x1f4a3;"/> <emoji name="bomb" unicode="&#x1f4a3;"/> from "bomb"<linebreak/> + <emoji name="book" unicode="&#x1f4d6;"/> <emoji name="book" unicode="&#x1f4d6;"/> from "book"<linebreak/> + <emoji name="bookmark" unicode="&#x1f516;"/> <emoji name="bookmark" unicode="&#x1f516;"/> from "bookmark"<linebreak/> + <emoji name="bookmark_tabs" unicode="&#x1f4d1;"/> <emoji name="bookmark_tabs" unicode="&#x1f4d1;"/> from "bookmark_tabs"<linebreak/> + <emoji name="books" unicode="&#x1f4da;"/> <emoji name="books" unicode="&#x1f4da;"/> from "books"<linebreak/> + <emoji name="boom" unicode="&#x1f4a5;"/> <emoji name="boom" unicode="&#x1f4a5;"/> from "boom"<linebreak/> + <emoji name="boot" unicode="&#x1f462;"/> <emoji name="boot" unicode="&#x1f462;"/> from "boot"<linebreak/> + <emoji name="bosnia_herzegovina" unicode="&#x1f1e7;&#x1f1e6;"/> <emoji name="bosnia_herzegovina" unicode="&#x1f1e7;&#x1f1e6;"/> from "bosnia_herzegovina"<linebreak/> + <emoji name="botswana" unicode="&#x1f1e7;&#x1f1fc;"/> <emoji name="botswana" unicode="&#x1f1e7;&#x1f1fc;"/> from "botswana"<linebreak/> + <emoji name="bouquet" unicode="&#x1f490;"/> <emoji name="bouquet" unicode="&#x1f490;"/> from "bouquet"<linebreak/> + <emoji name="bow" unicode="&#x1f647;"/> <emoji name="bow" unicode="&#x1f647;"/> from "bow"<linebreak/> + <emoji name="bow_and_arrow" unicode="&#x1f3f9;"/> <emoji name="bow_and_arrow" unicode="&#x1f3f9;"/> from "bow_and_arrow"<linebreak/> + <emoji name="bowing_man" unicode="&#x1f647;"/> <emoji name="bowing_man" unicode="&#x1f647;"/> from "bowing_man"<linebreak/> + <emoji name="bowing_woman" unicode="&#x1f647;&#x2640;"/> <emoji name="bowing_woman" unicode="&#x1f647;&#x2640;"/> from "bowing_woman"<linebreak/> + <emoji name="bowling" unicode="&#x1f3b3;"/> <emoji name="bowling" unicode="&#x1f3b3;"/> from "bowling"<linebreak/> + <emoji name="boxing_glove" unicode="&#x1f94a;"/> <emoji name="boxing_glove" unicode="&#x1f94a;"/> from "boxing_glove"<linebreak/> + <emoji name="boy" unicode="&#x1f466;"/> <emoji name="boy" unicode="&#x1f466;"/> from "boy"<linebreak/> + <emoji name="brazil" unicode="&#x1f1e7;&#x1f1f7;"/> <emoji name="brazil" unicode="&#x1f1e7;&#x1f1f7;"/> from "brazil"<linebreak/> + <emoji name="bread" unicode="&#x1f35e;"/> <emoji name="bread" unicode="&#x1f35e;"/> from "bread"<linebreak/> + <emoji name="bride_with_veil" unicode="&#x1f470;"/> <emoji name="bride_with_veil" unicode="&#x1f470;"/> from "bride_with_veil"<linebreak/> + <emoji name="bridge_at_night" unicode="&#x1f309;"/> <emoji name="bridge_at_night" unicode="&#x1f309;"/> from "bridge_at_night"<linebreak/> + <emoji name="briefcase" unicode="&#x1f4bc;"/> <emoji name="briefcase" unicode="&#x1f4bc;"/> from "briefcase"<linebreak/> + <emoji name="british_indian_ocean_territory" unicode="&#x1f1ee;&#x1f1f4;"/> <emoji name="british_indian_ocean_territory" unicode="&#x1f1ee;&#x1f1f4;"/> from "british_indian_ocean_territory"<linebreak/> + <emoji name="british_virgin_islands" unicode="&#x1f1fb;&#x1f1ec;"/> <emoji name="british_virgin_islands" unicode="&#x1f1fb;&#x1f1ec;"/> from "british_virgin_islands"<linebreak/> + <emoji name="broken_heart" unicode="&#x1f494;"/> <emoji name="broken_heart" unicode="&#x1f494;"/> from "broken_heart"<linebreak/> + <emoji name="brunei" unicode="&#x1f1e7;&#x1f1f3;"/> <emoji name="brunei" unicode="&#x1f1e7;&#x1f1f3;"/> from "brunei"<linebreak/> + <emoji name="bug" unicode="&#x1f41b;"/> <emoji name="bug" unicode="&#x1f41b;"/> from "bug"<linebreak/> + <emoji name="building_construction" unicode="&#x1f3d7;"/> <emoji name="building_construction" unicode="&#x1f3d7;"/> from "building_construction"<linebreak/> + <emoji name="bulb" unicode="&#x1f4a1;"/> <emoji name="bulb" unicode="&#x1f4a1;"/> from "bulb"<linebreak/> + <emoji name="bulgaria" unicode="&#x1f1e7;&#x1f1ec;"/> <emoji name="bulgaria" unicode="&#x1f1e7;&#x1f1ec;"/> from "bulgaria"<linebreak/> + <emoji name="bullettrain_front" unicode="&#x1f685;"/> <emoji name="bullettrain_front" unicode="&#x1f685;"/> from "bullettrain_front"<linebreak/> + <emoji name="bullettrain_side" unicode="&#x1f684;"/> <emoji name="bullettrain_side" unicode="&#x1f684;"/> from "bullettrain_side"<linebreak/> + <emoji name="burkina_faso" unicode="&#x1f1e7;&#x1f1eb;"/> <emoji name="burkina_faso" unicode="&#x1f1e7;&#x1f1eb;"/> from "burkina_faso"<linebreak/> + <emoji name="burrito" unicode="&#x1f32f;"/> <emoji name="burrito" unicode="&#x1f32f;"/> from "burrito"<linebreak/> + <emoji name="burundi" unicode="&#x1f1e7;&#x1f1ee;"/> <emoji name="burundi" unicode="&#x1f1e7;&#x1f1ee;"/> from "burundi"<linebreak/> + <emoji name="bus" unicode="&#x1f68c;"/> <emoji name="bus" unicode="&#x1f68c;"/> from "bus"<linebreak/> + <emoji name="business_suit_levitating" unicode="&#x1f574;"/> <emoji name="business_suit_levitating" unicode="&#x1f574;"/> from "business_suit_levitating"<linebreak/> + <emoji name="busstop" unicode="&#x1f68f;"/> <emoji name="busstop" unicode="&#x1f68f;"/> from "busstop"<linebreak/> + <emoji name="bust_in_silhouette" unicode="&#x1f464;"/> <emoji name="bust_in_silhouette" unicode="&#x1f464;"/> from "bust_in_silhouette"<linebreak/> + <emoji name="busts_in_silhouette" unicode="&#x1f465;"/> <emoji name="busts_in_silhouette" unicode="&#x1f465;"/> from "busts_in_silhouette"<linebreak/> + <emoji name="butterfly" unicode="&#x1f98b;"/> <emoji name="butterfly" unicode="&#x1f98b;"/> from "butterfly"<linebreak/> + <emoji name="cactus" unicode="&#x1f335;"/> <emoji name="cactus" unicode="&#x1f335;"/> from "cactus"<linebreak/> + <emoji name="cake" unicode="&#x1f370;"/> <emoji name="cake" unicode="&#x1f370;"/> from "cake"<linebreak/> + <emoji name="calendar" unicode="&#x1f4c6;"/> <emoji name="calendar" unicode="&#x1f4c6;"/> from "calendar"<linebreak/> + <emoji name="call_me_hand" unicode="&#x1f919;"/> <emoji name="call_me_hand" unicode="&#x1f919;"/> from "call_me_hand"<linebreak/> + <emoji name="calling" unicode="&#x1f4f2;"/> <emoji name="calling" unicode="&#x1f4f2;"/> from "calling"<linebreak/> + <emoji name="cambodia" unicode="&#x1f1f0;&#x1f1ed;"/> <emoji name="cambodia" unicode="&#x1f1f0;&#x1f1ed;"/> from "cambodia"<linebreak/> + <emoji name="camel" unicode="&#x1f42b;"/> <emoji name="camel" unicode="&#x1f42b;"/> from "camel"<linebreak/> + <emoji name="camera" unicode="&#x1f4f7;"/> <emoji name="camera" unicode="&#x1f4f7;"/> from "camera"<linebreak/> + <emoji name="camera_flash" unicode="&#x1f4f8;"/> <emoji name="camera_flash" unicode="&#x1f4f8;"/> from "camera_flash"<linebreak/> + <emoji name="cameroon" unicode="&#x1f1e8;&#x1f1f2;"/> <emoji name="cameroon" unicode="&#x1f1e8;&#x1f1f2;"/> from "cameroon"<linebreak/> + <emoji name="camping" unicode="&#x1f3d5;"/> <emoji name="camping" unicode="&#x1f3d5;"/> from "camping"<linebreak/> + <emoji name="canada" unicode="&#x1f1e8;&#x1f1e6;"/> <emoji name="canada" unicode="&#x1f1e8;&#x1f1e6;"/> from "canada"<linebreak/> + <emoji name="canary_islands" unicode="&#x1f1ee;&#x1f1e8;"/> <emoji name="canary_islands" unicode="&#x1f1ee;&#x1f1e8;"/> from "canary_islands"<linebreak/> + <emoji name="cancer" unicode="&#x264b;"/> <emoji name="cancer" unicode="&#x264b;"/> from "cancer"<linebreak/> + <emoji name="candle" unicode="&#x1f56f;"/> <emoji name="candle" unicode="&#x1f56f;"/> from "candle"<linebreak/> + <emoji name="candy" unicode="&#x1f36c;"/> <emoji name="candy" unicode="&#x1f36c;"/> from "candy"<linebreak/> + <emoji name="canoe" unicode="&#x1f6f6;"/> <emoji name="canoe" unicode="&#x1f6f6;"/> from "canoe"<linebreak/> + <emoji name="cape_verde" unicode="&#x1f1e8;&#x1f1fb;"/> <emoji name="cape_verde" unicode="&#x1f1e8;&#x1f1fb;"/> from "cape_verde"<linebreak/> + <emoji name="capital_abcd" unicode="&#x1f520;"/> <emoji name="capital_abcd" unicode="&#x1f520;"/> from "capital_abcd"<linebreak/> + <emoji name="capricorn" unicode="&#x2651;"/> <emoji name="capricorn" unicode="&#x2651;"/> from "capricorn"<linebreak/> + <emoji name="car" unicode="&#x1f697;"/> <emoji name="car" unicode="&#x1f697;"/> from "car"<linebreak/> + <emoji name="card_file_box" unicode="&#x1f5c3;"/> <emoji name="card_file_box" unicode="&#x1f5c3;"/> from "card_file_box"<linebreak/> + <emoji name="card_index" unicode="&#x1f4c7;"/> <emoji name="card_index" unicode="&#x1f4c7;"/> from "card_index"<linebreak/> + <emoji name="card_index_dividers" unicode="&#x1f5c2;"/> <emoji name="card_index_dividers" unicode="&#x1f5c2;"/> from "card_index_dividers"<linebreak/> + <emoji name="caribbean_netherlands" unicode="&#x1f1e7;&#x1f1f6;"/> <emoji name="caribbean_netherlands" unicode="&#x1f1e7;&#x1f1f6;"/> from "caribbean_netherlands"<linebreak/> + <emoji name="carousel_horse" unicode="&#x1f3a0;"/> <emoji name="carousel_horse" unicode="&#x1f3a0;"/> from "carousel_horse"<linebreak/> + <emoji name="carrot" unicode="&#x1f955;"/> <emoji name="carrot" unicode="&#x1f955;"/> from "carrot"<linebreak/> + <emoji name="cat" unicode="&#x1f431;"/> <emoji name="cat" unicode="&#x1f431;"/> from "cat"<linebreak/> + <emoji name="cat2" unicode="&#x1f408;"/> <emoji name="cat2" unicode="&#x1f408;"/> from "cat2"<linebreak/> + <emoji name="cayman_islands" unicode="&#x1f1f0;&#x1f1fe;"/> <emoji name="cayman_islands" unicode="&#x1f1f0;&#x1f1fe;"/> from "cayman_islands"<linebreak/> + <emoji name="cd" unicode="&#x1f4bf;"/> <emoji name="cd" unicode="&#x1f4bf;"/> from "cd"<linebreak/> + <emoji name="central_african_republic" unicode="&#x1f1e8;&#x1f1eb;"/> <emoji name="central_african_republic" unicode="&#x1f1e8;&#x1f1eb;"/> from "central_african_republic"<linebreak/> + <emoji name="chad" unicode="&#x1f1f9;&#x1f1e9;"/> <emoji name="chad" unicode="&#x1f1f9;&#x1f1e9;"/> from "chad"<linebreak/> + <emoji name="chains" unicode="&#x26d3;"/> <emoji name="chains" unicode="&#x26d3;"/> from "chains"<linebreak/> + <emoji name="champagne" unicode="&#x1f37e;"/> <emoji name="champagne" unicode="&#x1f37e;"/> from "champagne"<linebreak/> + <emoji name="chart" unicode="&#x1f4b9;"/> <emoji name="chart" unicode="&#x1f4b9;"/> from "chart"<linebreak/> + <emoji name="chart_with_downwards_trend" unicode="&#x1f4c9;"/> <emoji name="chart_with_downwards_trend" unicode="&#x1f4c9;"/> from "chart_with_downwards_trend"<linebreak/> + <emoji name="chart_with_upwards_trend" unicode="&#x1f4c8;"/> <emoji name="chart_with_upwards_trend" unicode="&#x1f4c8;"/> from "chart_with_upwards_trend"<linebreak/> + <emoji name="checkered_flag" unicode="&#x1f3c1;"/> <emoji name="checkered_flag" unicode="&#x1f3c1;"/> from "checkered_flag"<linebreak/> + <emoji name="cheese" unicode="&#x1f9c0;"/> <emoji name="cheese" unicode="&#x1f9c0;"/> from "cheese"<linebreak/> + <emoji name="cherries" unicode="&#x1f352;"/> <emoji name="cherries" unicode="&#x1f352;"/> from "cherries"<linebreak/> + <emoji name="cherry_blossom" unicode="&#x1f338;"/> <emoji name="cherry_blossom" unicode="&#x1f338;"/> from "cherry_blossom"<linebreak/> + <emoji name="chestnut" unicode="&#x1f330;"/> <emoji name="chestnut" unicode="&#x1f330;"/> from "chestnut"<linebreak/> + <emoji name="chicken" unicode="&#x1f414;"/> <emoji name="chicken" unicode="&#x1f414;"/> from "chicken"<linebreak/> + <emoji name="children_crossing" unicode="&#x1f6b8;"/> <emoji name="children_crossing" unicode="&#x1f6b8;"/> from "children_crossing"<linebreak/> + <emoji name="chile" unicode="&#x1f1e8;&#x1f1f1;"/> <emoji name="chile" unicode="&#x1f1e8;&#x1f1f1;"/> from "chile"<linebreak/> + <emoji name="chipmunk" unicode="&#x1f43f;"/> <emoji name="chipmunk" unicode="&#x1f43f;"/> from "chipmunk"<linebreak/> + <emoji name="chocolate_bar" unicode="&#x1f36b;"/> <emoji name="chocolate_bar" unicode="&#x1f36b;"/> from "chocolate_bar"<linebreak/> + <emoji name="christmas_island" unicode="&#x1f1e8;&#x1f1fd;"/> <emoji name="christmas_island" unicode="&#x1f1e8;&#x1f1fd;"/> from "christmas_island"<linebreak/> + <emoji name="christmas_tree" unicode="&#x1f384;"/> <emoji name="christmas_tree" unicode="&#x1f384;"/> from "christmas_tree"<linebreak/> + <emoji name="church" unicode="&#x26ea;"/> <emoji name="church" unicode="&#x26ea;"/> from "church"<linebreak/> + <emoji name="cinema" unicode="&#x1f3a6;"/> <emoji name="cinema" unicode="&#x1f3a6;"/> from "cinema"<linebreak/> + <emoji name="circus_tent" unicode="&#x1f3aa;"/> <emoji name="circus_tent" unicode="&#x1f3aa;"/> from "circus_tent"<linebreak/> + <emoji name="city_sunrise" unicode="&#x1f307;"/> <emoji name="city_sunrise" unicode="&#x1f307;"/> from "city_sunrise"<linebreak/> + <emoji name="city_sunset" unicode="&#x1f306;"/> <emoji name="city_sunset" unicode="&#x1f306;"/> from "city_sunset"<linebreak/> + <emoji name="cityscape" unicode="&#x1f3d9;"/> <emoji name="cityscape" unicode="&#x1f3d9;"/> from "cityscape"<linebreak/> + <emoji name="cl" unicode="&#x1f191;"/> <emoji name="cl" unicode="&#x1f191;"/> from "cl"<linebreak/> + <emoji name="clamp" unicode="&#x1f5dc;"/> <emoji name="clamp" unicode="&#x1f5dc;"/> from "clamp"<linebreak/> + <emoji name="clap" unicode="&#x1f44f;"/> <emoji name="clap" unicode="&#x1f44f;"/> from "clap"<linebreak/> + <emoji name="clapper" unicode="&#x1f3ac;"/> <emoji name="clapper" unicode="&#x1f3ac;"/> from "clapper"<linebreak/> + <emoji name="classical_building" unicode="&#x1f3db;"/> <emoji name="classical_building" unicode="&#x1f3db;"/> from "classical_building"<linebreak/> + <emoji name="clinking_glasses" unicode="&#x1f942;"/> <emoji name="clinking_glasses" unicode="&#x1f942;"/> from "clinking_glasses"<linebreak/> + <emoji name="clipboard" unicode="&#x1f4cb;"/> <emoji name="clipboard" unicode="&#x1f4cb;"/> from "clipboard"<linebreak/> + <emoji name="clock1" unicode="&#x1f550;"/> <emoji name="clock1" unicode="&#x1f550;"/> from "clock1"<linebreak/> + <emoji name="clock10" unicode="&#x1f559;"/> <emoji name="clock10" unicode="&#x1f559;"/> from "clock10"<linebreak/> + <emoji name="clock1030" unicode="&#x1f565;"/> <emoji name="clock1030" unicode="&#x1f565;"/> from "clock1030"<linebreak/> + <emoji name="clock11" unicode="&#x1f55a;"/> <emoji name="clock11" unicode="&#x1f55a;"/> from "clock11"<linebreak/> + <emoji name="clock1130" unicode="&#x1f566;"/> <emoji name="clock1130" unicode="&#x1f566;"/> from "clock1130"<linebreak/> + <emoji name="clock12" unicode="&#x1f55b;"/> <emoji name="clock12" unicode="&#x1f55b;"/> from "clock12"<linebreak/> + <emoji name="clock1230" unicode="&#x1f567;"/> <emoji name="clock1230" unicode="&#x1f567;"/> from "clock1230"<linebreak/> + <emoji name="clock130" unicode="&#x1f55c;"/> <emoji name="clock130" unicode="&#x1f55c;"/> from "clock130"<linebreak/> + <emoji name="clock2" unicode="&#x1f551;"/> <emoji name="clock2" unicode="&#x1f551;"/> from "clock2"<linebreak/> + <emoji name="clock230" unicode="&#x1f55d;"/> <emoji name="clock230" unicode="&#x1f55d;"/> from "clock230"<linebreak/> + <emoji name="clock3" unicode="&#x1f552;"/> <emoji name="clock3" unicode="&#x1f552;"/> from "clock3"<linebreak/> + <emoji name="clock330" unicode="&#x1f55e;"/> <emoji name="clock330" unicode="&#x1f55e;"/> from "clock330"<linebreak/> + <emoji name="clock4" unicode="&#x1f553;"/> <emoji name="clock4" unicode="&#x1f553;"/> from "clock4"<linebreak/> + <emoji name="clock430" unicode="&#x1f55f;"/> <emoji name="clock430" unicode="&#x1f55f;"/> from "clock430"<linebreak/> + <emoji name="clock5" unicode="&#x1f554;"/> <emoji name="clock5" unicode="&#x1f554;"/> from "clock5"<linebreak/> + <emoji name="clock530" unicode="&#x1f560;"/> <emoji name="clock530" unicode="&#x1f560;"/> from "clock530"<linebreak/> + <emoji name="clock6" unicode="&#x1f555;"/> <emoji name="clock6" unicode="&#x1f555;"/> from "clock6"<linebreak/> + <emoji name="clock630" unicode="&#x1f561;"/> <emoji name="clock630" unicode="&#x1f561;"/> from "clock630"<linebreak/> + <emoji name="clock7" unicode="&#x1f556;"/> <emoji name="clock7" unicode="&#x1f556;"/> from "clock7"<linebreak/> + <emoji name="clock730" unicode="&#x1f562;"/> <emoji name="clock730" unicode="&#x1f562;"/> from "clock730"<linebreak/> + <emoji name="clock8" unicode="&#x1f557;"/> <emoji name="clock8" unicode="&#x1f557;"/> from "clock8"<linebreak/> + <emoji name="clock830" unicode="&#x1f563;"/> <emoji name="clock830" unicode="&#x1f563;"/> from "clock830"<linebreak/> + <emoji name="clock9" unicode="&#x1f558;"/> <emoji name="clock9" unicode="&#x1f558;"/> from "clock9"<linebreak/> + <emoji name="clock930" unicode="&#x1f564;"/> <emoji name="clock930" unicode="&#x1f564;"/> from "clock930"<linebreak/> + <emoji name="closed_book" unicode="&#x1f4d5;"/> <emoji name="closed_book" unicode="&#x1f4d5;"/> from "closed_book"<linebreak/> + <emoji name="closed_lock_with_key" unicode="&#x1f510;"/> <emoji name="closed_lock_with_key" unicode="&#x1f510;"/> from "closed_lock_with_key"<linebreak/> + <emoji name="closed_umbrella" unicode="&#x1f302;"/> <emoji name="closed_umbrella" unicode="&#x1f302;"/> from "closed_umbrella"<linebreak/> + <emoji name="cloud" unicode="&#x2601;"/> <emoji name="cloud" unicode="&#x2601;"/> from "cloud"<linebreak/> + <emoji name="cloud_with_lightning" unicode="&#x1f329;"/> <emoji name="cloud_with_lightning" unicode="&#x1f329;"/> from "cloud_with_lightning"<linebreak/> + <emoji name="cloud_with_lightning_and_rain" unicode="&#x26c8;"/> <emoji name="cloud_with_lightning_and_rain" unicode="&#x26c8;"/> from "cloud_with_lightning_and_rain"<linebreak/> + <emoji name="cloud_with_rain" unicode="&#x1f327;"/> <emoji name="cloud_with_rain" unicode="&#x1f327;"/> from "cloud_with_rain"<linebreak/> + <emoji name="cloud_with_snow" unicode="&#x1f328;"/> <emoji name="cloud_with_snow" unicode="&#x1f328;"/> from "cloud_with_snow"<linebreak/> + <emoji name="clown_face" unicode="&#x1f921;"/> <emoji name="clown_face" unicode="&#x1f921;"/> from "clown_face"<linebreak/> + <emoji name="clubs" unicode="&#x2663;"/> <emoji name="clubs" unicode="&#x2663;"/> from "clubs"<linebreak/> + <emoji name="cn" unicode="&#x1f1e8;&#x1f1f3;"/> <emoji name="cn" unicode="&#x1f1e8;&#x1f1f3;"/> from "cn"<linebreak/> + <emoji name="cocktail" unicode="&#x1f378;"/> <emoji name="cocktail" unicode="&#x1f378;"/> from "cocktail"<linebreak/> + <emoji name="cocos_islands" unicode="&#x1f1e8;&#x1f1e8;"/> <emoji name="cocos_islands" unicode="&#x1f1e8;&#x1f1e8;"/> from "cocos_islands"<linebreak/> + <emoji name="coffee" unicode="&#x2615;"/> <emoji name="coffee" unicode="&#x2615;"/> from "coffee"<linebreak/> + <emoji name="coffin" unicode="&#x26b0;"/> <emoji name="coffin" unicode="&#x26b0;"/> from "coffin"<linebreak/> + <emoji name="cold_sweat" unicode="&#x1f630;"/> <emoji name="cold_sweat" unicode="&#x1f630;"/> from "cold_sweat"<linebreak/> + <emoji name="collision" unicode="&#x1f4a5;"/> <emoji name="collision" unicode="&#x1f4a5;"/> from "collision"<linebreak/> + <emoji name="colombia" unicode="&#x1f1e8;&#x1f1f4;"/> <emoji name="colombia" unicode="&#x1f1e8;&#x1f1f4;"/> from "colombia"<linebreak/> + <emoji name="comet" unicode="&#x2604;"/> <emoji name="comet" unicode="&#x2604;"/> from "comet"<linebreak/> + <emoji name="comoros" unicode="&#x1f1f0;&#x1f1f2;"/> <emoji name="comoros" unicode="&#x1f1f0;&#x1f1f2;"/> from "comoros"<linebreak/> + <emoji name="computer" unicode="&#x1f4bb;"/> <emoji name="computer" unicode="&#x1f4bb;"/> from "computer"<linebreak/> + <emoji name="computer_mouse" unicode="&#x1f5b1;"/> <emoji name="computer_mouse" unicode="&#x1f5b1;"/> from "computer_mouse"<linebreak/> + <emoji name="confetti_ball" unicode="&#x1f38a;"/> <emoji name="confetti_ball" unicode="&#x1f38a;"/> from "confetti_ball"<linebreak/> + <emoji name="confounded" unicode="&#x1f616;"/> <emoji name="confounded" unicode="&#x1f616;"/> from "confounded"<linebreak/> + <emoji name="confused" unicode="&#x1f615;"/> <emoji name="confused" unicode="&#x1f615;"/> from "confused"<linebreak/> + <emoji name="congo_brazzaville" unicode="&#x1f1e8;&#x1f1ec;"/> <emoji name="congo_brazzaville" unicode="&#x1f1e8;&#x1f1ec;"/> from "congo_brazzaville"<linebreak/> + <emoji name="congo_kinshasa" unicode="&#x1f1e8;&#x1f1e9;"/> <emoji name="congo_kinshasa" unicode="&#x1f1e8;&#x1f1e9;"/> from "congo_kinshasa"<linebreak/> + <emoji name="congratulations" unicode="&#x3297;"/> <emoji name="congratulations" unicode="&#x3297;"/> from "congratulations"<linebreak/> + <emoji name="construction" unicode="&#x1f6a7;"/> <emoji name="construction" unicode="&#x1f6a7;"/> from "construction"<linebreak/> + <emoji name="construction_worker" unicode="&#x1f477;"/> <emoji name="construction_worker" unicode="&#x1f477;"/> from "construction_worker"<linebreak/> + <emoji name="construction_worker_man" unicode="&#x1f477;"/> <emoji name="construction_worker_man" unicode="&#x1f477;"/> from "construction_worker_man"<linebreak/> + <emoji name="construction_worker_woman" unicode="&#x1f477;&#x2640;"/> <emoji name="construction_worker_woman" unicode="&#x1f477;&#x2640;"/> from "construction_worker_woman"<linebreak/> + <emoji name="control_knobs" unicode="&#x1f39b;"/> <emoji name="control_knobs" unicode="&#x1f39b;"/> from "control_knobs"<linebreak/> + <emoji name="convenience_store" unicode="&#x1f3ea;"/> <emoji name="convenience_store" unicode="&#x1f3ea;"/> from "convenience_store"<linebreak/> + <emoji name="cook_islands" unicode="&#x1f1e8;&#x1f1f0;"/> <emoji name="cook_islands" unicode="&#x1f1e8;&#x1f1f0;"/> from "cook_islands"<linebreak/> + <emoji name="cookie" unicode="&#x1f36a;"/> <emoji name="cookie" unicode="&#x1f36a;"/> from "cookie"<linebreak/> + <emoji name="cool" unicode="&#x1f192;"/> <emoji name="cool" unicode="&#x1f192;"/> from "cool"<linebreak/> + <emoji name="cop" unicode="&#x1f46e;"/> <emoji name="cop" unicode="&#x1f46e;"/> from "cop"<linebreak/> + <emoji name="copyright" unicode="&#x00a9;"/> <emoji name="copyright" unicode="&#x00a9;"/> from "copyright"<linebreak/> + <emoji name="corn" unicode="&#x1f33d;"/> <emoji name="corn" unicode="&#x1f33d;"/> from "corn"<linebreak/> + <emoji name="costa_rica" unicode="&#x1f1e8;&#x1f1f7;"/> <emoji name="costa_rica" unicode="&#x1f1e8;&#x1f1f7;"/> from "costa_rica"<linebreak/> + <emoji name="cote_divoire" unicode="&#x1f1e8;&#x1f1ee;"/> <emoji name="cote_divoire" unicode="&#x1f1e8;&#x1f1ee;"/> from "cote_divoire"<linebreak/> + <emoji name="couch_and_lamp" unicode="&#x1f6cb;"/> <emoji name="couch_and_lamp" unicode="&#x1f6cb;"/> from "couch_and_lamp"<linebreak/> + <emoji name="couple" unicode="&#x1f46b;"/> <emoji name="couple" unicode="&#x1f46b;"/> from "couple"<linebreak/> + <emoji name="couple_with_heart" unicode="&#x1f491;"/> <emoji name="couple_with_heart" unicode="&#x1f491;"/> from "couple_with_heart"<linebreak/> + <emoji name="couple_with_heart_man_man" unicode="&#x1f468;&#x2764;&#x1f468;"/> <emoji name="couple_with_heart_man_man" unicode="&#x1f468;&#x2764;&#x1f468;"/> from "couple_with_heart_man_man"<linebreak/> + <emoji name="couple_with_heart_woman_man" unicode="&#x1f491;"/> <emoji name="couple_with_heart_woman_man" unicode="&#x1f491;"/> from "couple_with_heart_woman_man"<linebreak/> + <emoji name="couple_with_heart_woman_woman" unicode="&#x1f469;&#x2764;&#x1f469;"/> <emoji name="couple_with_heart_woman_woman" unicode="&#x1f469;&#x2764;&#x1f469;"/> from "couple_with_heart_woman_woman"<linebreak/> + <emoji name="couplekiss_man_man" unicode="&#x1f468;&#x2764;&#x1f48b;&#x1f468;"/> <emoji name="couplekiss_man_man" unicode="&#x1f468;&#x2764;&#x1f48b;&#x1f468;"/> from "couplekiss_man_man"<linebreak/> + <emoji name="couplekiss_man_woman" unicode="&#x1f48f;"/> <emoji name="couplekiss_man_woman" unicode="&#x1f48f;"/> from "couplekiss_man_woman"<linebreak/> + <emoji name="couplekiss_woman_woman" unicode="&#x1f469;&#x2764;&#x1f48b;&#x1f469;"/> <emoji name="couplekiss_woman_woman" unicode="&#x1f469;&#x2764;&#x1f48b;&#x1f469;"/> from "couplekiss_woman_woman"<linebreak/> + <emoji name="cow" unicode="&#x1f42e;"/> <emoji name="cow" unicode="&#x1f42e;"/> from "cow"<linebreak/> + <emoji name="cow2" unicode="&#x1f404;"/> <emoji name="cow2" unicode="&#x1f404;"/> from "cow2"<linebreak/> + <emoji name="cowboy_hat_face" unicode="&#x1f920;"/> <emoji name="cowboy_hat_face" unicode="&#x1f920;"/> from "cowboy_hat_face"<linebreak/> + <emoji name="crab" unicode="&#x1f980;"/> <emoji name="crab" unicode="&#x1f980;"/> from "crab"<linebreak/> + <emoji name="crayon" unicode="&#x1f58d;"/> <emoji name="crayon" unicode="&#x1f58d;"/> from "crayon"<linebreak/> + <emoji name="credit_card" unicode="&#x1f4b3;"/> <emoji name="credit_card" unicode="&#x1f4b3;"/> from "credit_card"<linebreak/> + <emoji name="crescent_moon" unicode="&#x1f319;"/> <emoji name="crescent_moon" unicode="&#x1f319;"/> from "crescent_moon"<linebreak/> + <emoji name="cricket" unicode="&#x1f3cf;"/> <emoji name="cricket" unicode="&#x1f3cf;"/> from "cricket"<linebreak/> + <emoji name="croatia" unicode="&#x1f1ed;&#x1f1f7;"/> <emoji name="croatia" unicode="&#x1f1ed;&#x1f1f7;"/> from "croatia"<linebreak/> + <emoji name="crocodile" unicode="&#x1f40a;"/> <emoji name="crocodile" unicode="&#x1f40a;"/> from "crocodile"<linebreak/> + <emoji name="croissant" unicode="&#x1f950;"/> <emoji name="croissant" unicode="&#x1f950;"/> from "croissant"<linebreak/> + <emoji name="crossed_fingers" unicode="&#x1f91e;"/> <emoji name="crossed_fingers" unicode="&#x1f91e;"/> from "crossed_fingers"<linebreak/> + <emoji name="crossed_flags" unicode="&#x1f38c;"/> <emoji name="crossed_flags" unicode="&#x1f38c;"/> from "crossed_flags"<linebreak/> + <emoji name="crossed_swords" unicode="&#x2694;"/> <emoji name="crossed_swords" unicode="&#x2694;"/> from "crossed_swords"<linebreak/> + <emoji name="crown" unicode="&#x1f451;"/> <emoji name="crown" unicode="&#x1f451;"/> from "crown"<linebreak/> + <emoji name="cry" unicode="&#x1f622;"/> <emoji name="cry" unicode="&#x1f622;"/> from "cry"<linebreak/> + <emoji name="crying_cat_face" unicode="&#x1f63f;"/> <emoji name="crying_cat_face" unicode="&#x1f63f;"/> from "crying_cat_face"<linebreak/> + <emoji name="crystal_ball" unicode="&#x1f52e;"/> <emoji name="crystal_ball" unicode="&#x1f52e;"/> from "crystal_ball"<linebreak/> + <emoji name="cuba" unicode="&#x1f1e8;&#x1f1fa;"/> <emoji name="cuba" unicode="&#x1f1e8;&#x1f1fa;"/> from "cuba"<linebreak/> + <emoji name="cucumber" unicode="&#x1f952;"/> <emoji name="cucumber" unicode="&#x1f952;"/> from "cucumber"<linebreak/> + <emoji name="cupid" unicode="&#x1f498;"/> <emoji name="cupid" unicode="&#x1f498;"/> from "cupid"<linebreak/> + <emoji name="curacao" unicode="&#x1f1e8;&#x1f1fc;"/> <emoji name="curacao" unicode="&#x1f1e8;&#x1f1fc;"/> from "curacao"<linebreak/> + <emoji name="curly_loop" unicode="&#x27b0;"/> <emoji name="curly_loop" unicode="&#x27b0;"/> from "curly_loop"<linebreak/> + <emoji name="currency_exchange" unicode="&#x1f4b1;"/> <emoji name="currency_exchange" unicode="&#x1f4b1;"/> from "currency_exchange"<linebreak/> + <emoji name="curry" unicode="&#x1f35b;"/> <emoji name="curry" unicode="&#x1f35b;"/> from "curry"<linebreak/> + <emoji name="custard" unicode="&#x1f36e;"/> <emoji name="custard" unicode="&#x1f36e;"/> from "custard"<linebreak/> + <emoji name="customs" unicode="&#x1f6c3;"/> <emoji name="customs" unicode="&#x1f6c3;"/> from "customs"<linebreak/> + <emoji name="cyclone" unicode="&#x1f300;"/> <emoji name="cyclone" unicode="&#x1f300;"/> from "cyclone"<linebreak/> + <emoji name="cyprus" unicode="&#x1f1e8;&#x1f1fe;"/> <emoji name="cyprus" unicode="&#x1f1e8;&#x1f1fe;"/> from "cyprus"<linebreak/> + <emoji name="czech_republic" unicode="&#x1f1e8;&#x1f1ff;"/> <emoji name="czech_republic" unicode="&#x1f1e8;&#x1f1ff;"/> from "czech_republic"<linebreak/> + <emoji name="dagger" unicode="&#x1f5e1;"/> <emoji name="dagger" unicode="&#x1f5e1;"/> from "dagger"<linebreak/> + <emoji name="dancer" unicode="&#x1f483;"/> <emoji name="dancer" unicode="&#x1f483;"/> from "dancer"<linebreak/> + <emoji name="dancers" unicode="&#x1f46f;"/> <emoji name="dancers" unicode="&#x1f46f;"/> from "dancers"<linebreak/> + <emoji name="dancing_men" unicode="&#x1f46f;&#x2642;"/> <emoji name="dancing_men" unicode="&#x1f46f;&#x2642;"/> from "dancing_men"<linebreak/> + <emoji name="dancing_women" unicode="&#x1f46f;"/> <emoji name="dancing_women" unicode="&#x1f46f;"/> from "dancing_women"<linebreak/> + <emoji name="dango" unicode="&#x1f361;"/> <emoji name="dango" unicode="&#x1f361;"/> from "dango"<linebreak/> + <emoji name="dark_sunglasses" unicode="&#x1f576;"/> <emoji name="dark_sunglasses" unicode="&#x1f576;"/> from "dark_sunglasses"<linebreak/> + <emoji name="dart" unicode="&#x1f3af;"/> <emoji name="dart" unicode="&#x1f3af;"/> from "dart"<linebreak/> + <emoji name="dash" unicode="&#x1f4a8;"/> <emoji name="dash" unicode="&#x1f4a8;"/> from "dash"<linebreak/> + <emoji name="date" unicode="&#x1f4c5;"/> <emoji name="date" unicode="&#x1f4c5;"/> from "date"<linebreak/> + <emoji name="de" unicode="&#x1f1e9;&#x1f1ea;"/> <emoji name="de" unicode="&#x1f1e9;&#x1f1ea;"/> from "de"<linebreak/> + <emoji name="deciduous_tree" unicode="&#x1f333;"/> <emoji name="deciduous_tree" unicode="&#x1f333;"/> from "deciduous_tree"<linebreak/> + <emoji name="deer" unicode="&#x1f98c;"/> <emoji name="deer" unicode="&#x1f98c;"/> from "deer"<linebreak/> + <emoji name="denmark" unicode="&#x1f1e9;&#x1f1f0;"/> <emoji name="denmark" unicode="&#x1f1e9;&#x1f1f0;"/> from "denmark"<linebreak/> + <emoji name="department_store" unicode="&#x1f3ec;"/> <emoji name="department_store" unicode="&#x1f3ec;"/> from "department_store"<linebreak/> + <emoji name="derelict_house" unicode="&#x1f3da;"/> <emoji name="derelict_house" unicode="&#x1f3da;"/> from "derelict_house"<linebreak/> + <emoji name="desert" unicode="&#x1f3dc;"/> <emoji name="desert" unicode="&#x1f3dc;"/> from "desert"<linebreak/> + <emoji name="desert_island" unicode="&#x1f3dd;"/> <emoji name="desert_island" unicode="&#x1f3dd;"/> from "desert_island"<linebreak/> + <emoji name="desktop_computer" unicode="&#x1f5a5;"/> <emoji name="desktop_computer" unicode="&#x1f5a5;"/> from "desktop_computer"<linebreak/> + <emoji name="detective" unicode="&#x1f575;"/> <emoji name="detective" unicode="&#x1f575;"/> from "detective"<linebreak/> + <emoji name="diamond_shape_with_a_dot_inside" unicode="&#x1f4a0;"/> <emoji name="diamond_shape_with_a_dot_inside" unicode="&#x1f4a0;"/> from "diamond_shape_with_a_dot_inside"<linebreak/> + <emoji name="diamonds" unicode="&#x2666;"/> <emoji name="diamonds" unicode="&#x2666;"/> from "diamonds"<linebreak/> + <emoji name="disappointed" unicode="&#x1f61e;"/> <emoji name="disappointed" unicode="&#x1f61e;"/> from "disappointed"<linebreak/> + <emoji name="disappointed_relieved" unicode="&#x1f625;"/> <emoji name="disappointed_relieved" unicode="&#x1f625;"/> from "disappointed_relieved"<linebreak/> + <emoji name="dizzy" unicode="&#x1f4ab;"/> <emoji name="dizzy" unicode="&#x1f4ab;"/> from "dizzy"<linebreak/> + <emoji name="dizzy_face" unicode="&#x1f635;"/> <emoji name="dizzy_face" unicode="&#x1f635;"/> from "dizzy_face"<linebreak/> + <emoji name="djibouti" unicode="&#x1f1e9;&#x1f1ef;"/> <emoji name="djibouti" unicode="&#x1f1e9;&#x1f1ef;"/> from "djibouti"<linebreak/> + <emoji name="do_not_litter" unicode="&#x1f6af;"/> <emoji name="do_not_litter" unicode="&#x1f6af;"/> from "do_not_litter"<linebreak/> + <emoji name="dog" unicode="&#x1f436;"/> <emoji name="dog" unicode="&#x1f436;"/> from "dog"<linebreak/> + <emoji name="dog2" unicode="&#x1f415;"/> <emoji name="dog2" unicode="&#x1f415;"/> from "dog2"<linebreak/> + <emoji name="dollar" unicode="&#x1f4b5;"/> <emoji name="dollar" unicode="&#x1f4b5;"/> from "dollar"<linebreak/> + <emoji name="dolls" unicode="&#x1f38e;"/> <emoji name="dolls" unicode="&#x1f38e;"/> from "dolls"<linebreak/> + <emoji name="dolphin" unicode="&#x1f42c;"/> <emoji name="dolphin" unicode="&#x1f42c;"/> from "dolphin"<linebreak/> + <emoji name="dominica" unicode="&#x1f1e9;&#x1f1f2;"/> <emoji name="dominica" unicode="&#x1f1e9;&#x1f1f2;"/> from "dominica"<linebreak/> + <emoji name="dominican_republic" unicode="&#x1f1e9;&#x1f1f4;"/> <emoji name="dominican_republic" unicode="&#x1f1e9;&#x1f1f4;"/> from "dominican_republic"<linebreak/> + <emoji name="door" unicode="&#x1f6aa;"/> <emoji name="door" unicode="&#x1f6aa;"/> from "door"<linebreak/> + <emoji name="doughnut" unicode="&#x1f369;"/> <emoji name="doughnut" unicode="&#x1f369;"/> from "doughnut"<linebreak/> + <emoji name="dove" unicode="&#x1f54a;"/> <emoji name="dove" unicode="&#x1f54a;"/> from "dove"<linebreak/> + <emoji name="dragon" unicode="&#x1f409;"/> <emoji name="dragon" unicode="&#x1f409;"/> from "dragon"<linebreak/> + <emoji name="dragon_face" unicode="&#x1f432;"/> <emoji name="dragon_face" unicode="&#x1f432;"/> from "dragon_face"<linebreak/> + <emoji name="dress" unicode="&#x1f457;"/> <emoji name="dress" unicode="&#x1f457;"/> from "dress"<linebreak/> + <emoji name="dromedary_camel" unicode="&#x1f42a;"/> <emoji name="dromedary_camel" unicode="&#x1f42a;"/> from "dromedary_camel"<linebreak/> + <emoji name="drooling_face" unicode="&#x1f924;"/> <emoji name="drooling_face" unicode="&#x1f924;"/> from "drooling_face"<linebreak/> + <emoji name="droplet" unicode="&#x1f4a7;"/> <emoji name="droplet" unicode="&#x1f4a7;"/> from "droplet"<linebreak/> + <emoji name="drum" unicode="&#x1f941;"/> <emoji name="drum" unicode="&#x1f941;"/> from "drum"<linebreak/> + <emoji name="duck" unicode="&#x1f986;"/> <emoji name="duck" unicode="&#x1f986;"/> from "duck"<linebreak/> + <emoji name="dvd" unicode="&#x1f4c0;"/> <emoji name="dvd" unicode="&#x1f4c0;"/> from "dvd"<linebreak/> + <emoji name="e-mail" unicode="&#x1f4e7;"/> <emoji name="e-mail" unicode="&#x1f4e7;"/> from "e-mail"<linebreak/> + <emoji name="eagle" unicode="&#x1f985;"/> <emoji name="eagle" unicode="&#x1f985;"/> from "eagle"<linebreak/> + <emoji name="ear" unicode="&#x1f442;"/> <emoji name="ear" unicode="&#x1f442;"/> from "ear"<linebreak/> + <emoji name="ear_of_rice" unicode="&#x1f33e;"/> <emoji name="ear_of_rice" unicode="&#x1f33e;"/> from "ear_of_rice"<linebreak/> + <emoji name="earth_africa" unicode="&#x1f30d;"/> <emoji name="earth_africa" unicode="&#x1f30d;"/> from "earth_africa"<linebreak/> + <emoji name="earth_americas" unicode="&#x1f30e;"/> <emoji name="earth_americas" unicode="&#x1f30e;"/> from "earth_americas"<linebreak/> + <emoji name="earth_asia" unicode="&#x1f30f;"/> <emoji name="earth_asia" unicode="&#x1f30f;"/> from "earth_asia"<linebreak/> + <emoji name="ecuador" unicode="&#x1f1ea;&#x1f1e8;"/> <emoji name="ecuador" unicode="&#x1f1ea;&#x1f1e8;"/> from "ecuador"<linebreak/> + <emoji name="egg" unicode="&#x1f95a;"/> <emoji name="egg" unicode="&#x1f95a;"/> from "egg"<linebreak/> + <emoji name="eggplant" unicode="&#x1f346;"/> <emoji name="eggplant" unicode="&#x1f346;"/> from "eggplant"<linebreak/> + <emoji name="egypt" unicode="&#x1f1ea;&#x1f1ec;"/> <emoji name="egypt" unicode="&#x1f1ea;&#x1f1ec;"/> from "egypt"<linebreak/> + <emoji name="eight" unicode="&#x0038;&#x20e3;"/> <emoji name="eight" unicode="&#x0038;&#x20e3;"/> from "eight"<linebreak/> + <emoji name="eight_pointed_black_star" unicode="&#x2734;"/> <emoji name="eight_pointed_black_star" unicode="&#x2734;"/> from "eight_pointed_black_star"<linebreak/> + <emoji name="eight_spoked_asterisk" unicode="&#x2733;"/> <emoji name="eight_spoked_asterisk" unicode="&#x2733;"/> from "eight_spoked_asterisk"<linebreak/> + <emoji name="el_salvador" unicode="&#x1f1f8;&#x1f1fb;"/> <emoji name="el_salvador" unicode="&#x1f1f8;&#x1f1fb;"/> from "el_salvador"<linebreak/> + <emoji name="electric_plug" unicode="&#x1f50c;"/> <emoji name="electric_plug" unicode="&#x1f50c;"/> from "electric_plug"<linebreak/> + <emoji name="elephant" unicode="&#x1f418;"/> <emoji name="elephant" unicode="&#x1f418;"/> from "elephant"<linebreak/> + <emoji name="email" unicode="&#x2709;"/> <emoji name="email" unicode="&#x2709;"/> from "email"<linebreak/> + <emoji name="end" unicode="&#x1f51a;"/> <emoji name="end" unicode="&#x1f51a;"/> from "end"<linebreak/> + <emoji name="envelope" unicode="&#x2709;"/> <emoji name="envelope" unicode="&#x2709;"/> from "envelope"<linebreak/> + <emoji name="envelope_with_arrow" unicode="&#x1f4e9;"/> <emoji name="envelope_with_arrow" unicode="&#x1f4e9;"/> from "envelope_with_arrow"<linebreak/> + <emoji name="equatorial_guinea" unicode="&#x1f1ec;&#x1f1f6;"/> <emoji name="equatorial_guinea" unicode="&#x1f1ec;&#x1f1f6;"/> from "equatorial_guinea"<linebreak/> + <emoji name="eritrea" unicode="&#x1f1ea;&#x1f1f7;"/> <emoji name="eritrea" unicode="&#x1f1ea;&#x1f1f7;"/> from "eritrea"<linebreak/> + <emoji name="es" unicode="&#x1f1ea;&#x1f1f8;"/> <emoji name="es" unicode="&#x1f1ea;&#x1f1f8;"/> from "es"<linebreak/> + <emoji name="estonia" unicode="&#x1f1ea;&#x1f1ea;"/> <emoji name="estonia" unicode="&#x1f1ea;&#x1f1ea;"/> from "estonia"<linebreak/> + <emoji name="ethiopia" unicode="&#x1f1ea;&#x1f1f9;"/> <emoji name="ethiopia" unicode="&#x1f1ea;&#x1f1f9;"/> from "ethiopia"<linebreak/> + <emoji name="eu" unicode="&#x1f1ea;&#x1f1fa;"/> <emoji name="eu" unicode="&#x1f1ea;&#x1f1fa;"/> from "eu"<linebreak/> + <emoji name="euro" unicode="&#x1f4b6;"/> <emoji name="euro" unicode="&#x1f4b6;"/> from "euro"<linebreak/> + <emoji name="european_castle" unicode="&#x1f3f0;"/> <emoji name="european_castle" unicode="&#x1f3f0;"/> from "european_castle"<linebreak/> + <emoji name="european_post_office" unicode="&#x1f3e4;"/> <emoji name="european_post_office" unicode="&#x1f3e4;"/> from "european_post_office"<linebreak/> + <emoji name="european_union" unicode="&#x1f1ea;&#x1f1fa;"/> <emoji name="european_union" unicode="&#x1f1ea;&#x1f1fa;"/> from "european_union"<linebreak/> + <emoji name="evergreen_tree" unicode="&#x1f332;"/> <emoji name="evergreen_tree" unicode="&#x1f332;"/> from "evergreen_tree"<linebreak/> + <emoji name="exclamation" unicode="&#x2757;"/> <emoji name="exclamation" unicode="&#x2757;"/> from "exclamation"<linebreak/> + <emoji name="expressionless" unicode="&#x1f611;"/> <emoji name="expressionless" unicode="&#x1f611;"/> from "expressionless"<linebreak/> + <emoji name="eye" unicode="&#x1f441;"/> <emoji name="eye" unicode="&#x1f441;"/> from "eye"<linebreak/> + <emoji name="eye_speech_bubble" unicode="&#x1f441;&#x1f5e8;"/> <emoji name="eye_speech_bubble" unicode="&#x1f441;&#x1f5e8;"/> from "eye_speech_bubble"<linebreak/> + <emoji name="eyeglasses" unicode="&#x1f453;"/> <emoji name="eyeglasses" unicode="&#x1f453;"/> from "eyeglasses"<linebreak/> + <emoji name="eyes" unicode="&#x1f440;"/> <emoji name="eyes" unicode="&#x1f440;"/> from "eyes"<linebreak/> + <emoji name="face_with_head_bandage" unicode="&#x1f915;"/> <emoji name="face_with_head_bandage" unicode="&#x1f915;"/> from "face_with_head_bandage"<linebreak/> + <emoji name="face_with_thermometer" unicode="&#x1f912;"/> <emoji name="face_with_thermometer" unicode="&#x1f912;"/> from "face_with_thermometer"<linebreak/> + <emoji name="facepunch" unicode="&#x1f44a;"/> <emoji name="facepunch" unicode="&#x1f44a;"/> from "facepunch"<linebreak/> + <emoji name="factory" unicode="&#x1f3ed;"/> <emoji name="factory" unicode="&#x1f3ed;"/> from "factory"<linebreak/> + <emoji name="falkland_islands" unicode="&#x1f1eb;&#x1f1f0;"/> <emoji name="falkland_islands" unicode="&#x1f1eb;&#x1f1f0;"/> from "falkland_islands"<linebreak/> + <emoji name="fallen_leaf" unicode="&#x1f342;"/> <emoji name="fallen_leaf" unicode="&#x1f342;"/> from "fallen_leaf"<linebreak/> + <emoji name="family" unicode="&#x1f46a;"/> <emoji name="family" unicode="&#x1f46a;"/> from "family"<linebreak/> + <emoji name="family_man_boy" unicode="&#x1f468;&#x1f466;"/> <emoji name="family_man_boy" unicode="&#x1f468;&#x1f466;"/> from "family_man_boy"<linebreak/> + <emoji name="family_man_boy_boy" unicode="&#x1f468;&#x1f466;&#x1f466;"/> <emoji name="family_man_boy_boy" unicode="&#x1f468;&#x1f466;&#x1f466;"/> from "family_man_boy_boy"<linebreak/> + <emoji name="family_man_girl" unicode="&#x1f468;&#x1f467;"/> <emoji name="family_man_girl" unicode="&#x1f468;&#x1f467;"/> from "family_man_girl"<linebreak/> + <emoji name="family_man_girl_boy" unicode="&#x1f468;&#x1f467;&#x1f466;"/> <emoji name="family_man_girl_boy" unicode="&#x1f468;&#x1f467;&#x1f466;"/> from "family_man_girl_boy"<linebreak/> + <emoji name="family_man_girl_girl" unicode="&#x1f468;&#x1f467;&#x1f467;"/> <emoji name="family_man_girl_girl" unicode="&#x1f468;&#x1f467;&#x1f467;"/> from "family_man_girl_girl"<linebreak/> + <emoji name="family_man_man_boy" unicode="&#x1f468;&#x1f468;&#x1f466;"/> <emoji name="family_man_man_boy" unicode="&#x1f468;&#x1f468;&#x1f466;"/> from "family_man_man_boy"<linebreak/> + <emoji name="family_man_man_boy_boy" unicode="&#x1f468;&#x1f468;&#x1f466;&#x1f466;"/> <emoji name="family_man_man_boy_boy" unicode="&#x1f468;&#x1f468;&#x1f466;&#x1f466;"/> from "family_man_man_boy_boy"<linebreak/> + <emoji name="family_man_man_girl" unicode="&#x1f468;&#x1f468;&#x1f467;"/> <emoji name="family_man_man_girl" unicode="&#x1f468;&#x1f468;&#x1f467;"/> from "family_man_man_girl"<linebreak/> + <emoji name="family_man_man_girl_boy" unicode="&#x1f468;&#x1f468;&#x1f467;&#x1f466;"/> <emoji name="family_man_man_girl_boy" unicode="&#x1f468;&#x1f468;&#x1f467;&#x1f466;"/> from "family_man_man_girl_boy"<linebreak/> + <emoji name="family_man_man_girl_girl" unicode="&#x1f468;&#x1f468;&#x1f467;&#x1f467;"/> <emoji name="family_man_man_girl_girl" unicode="&#x1f468;&#x1f468;&#x1f467;&#x1f467;"/> from "family_man_man_girl_girl"<linebreak/> + <emoji name="family_man_woman_boy" unicode="&#x1f46a;"/> <emoji name="family_man_woman_boy" unicode="&#x1f46a;"/> from "family_man_woman_boy"<linebreak/> + <emoji name="family_man_woman_boy_boy" unicode="&#x1f468;&#x1f469;&#x1f466;&#x1f466;"/> <emoji name="family_man_woman_boy_boy" unicode="&#x1f468;&#x1f469;&#x1f466;&#x1f466;"/> from "family_man_woman_boy_boy"<linebreak/> + <emoji name="family_man_woman_girl" unicode="&#x1f468;&#x1f469;&#x1f467;"/> <emoji name="family_man_woman_girl" unicode="&#x1f468;&#x1f469;&#x1f467;"/> from "family_man_woman_girl"<linebreak/> + <emoji name="family_man_woman_girl_boy" unicode="&#x1f468;&#x1f469;&#x1f467;&#x1f466;"/> <emoji name="family_man_woman_girl_boy" unicode="&#x1f468;&#x1f469;&#x1f467;&#x1f466;"/> from "family_man_woman_girl_boy"<linebreak/> + <emoji name="family_man_woman_girl_girl" unicode="&#x1f468;&#x1f469;&#x1f467;&#x1f467;"/> <emoji name="family_man_woman_girl_girl" unicode="&#x1f468;&#x1f469;&#x1f467;&#x1f467;"/> from "family_man_woman_girl_girl"<linebreak/> + <emoji name="family_woman_boy" unicode="&#x1f469;&#x1f466;"/> <emoji name="family_woman_boy" unicode="&#x1f469;&#x1f466;"/> from "family_woman_boy"<linebreak/> + <emoji name="family_woman_boy_boy" unicode="&#x1f469;&#x1f466;&#x1f466;"/> <emoji name="family_woman_boy_boy" unicode="&#x1f469;&#x1f466;&#x1f466;"/> from "family_woman_boy_boy"<linebreak/> + <emoji name="family_woman_girl" unicode="&#x1f469;&#x1f467;"/> <emoji name="family_woman_girl" unicode="&#x1f469;&#x1f467;"/> from "family_woman_girl"<linebreak/> + <emoji name="family_woman_girl_boy" unicode="&#x1f469;&#x1f467;&#x1f466;"/> <emoji name="family_woman_girl_boy" unicode="&#x1f469;&#x1f467;&#x1f466;"/> from "family_woman_girl_boy"<linebreak/> + <emoji name="family_woman_girl_girl" unicode="&#x1f469;&#x1f467;&#x1f467;"/> <emoji name="family_woman_girl_girl" unicode="&#x1f469;&#x1f467;&#x1f467;"/> from "family_woman_girl_girl"<linebreak/> + <emoji name="family_woman_woman_boy" unicode="&#x1f469;&#x1f469;&#x1f466;"/> <emoji name="family_woman_woman_boy" unicode="&#x1f469;&#x1f469;&#x1f466;"/> from "family_woman_woman_boy"<linebreak/> + <emoji name="family_woman_woman_boy_boy" unicode="&#x1f469;&#x1f469;&#x1f466;&#x1f466;"/> <emoji name="family_woman_woman_boy_boy" unicode="&#x1f469;&#x1f469;&#x1f466;&#x1f466;"/> from "family_woman_woman_boy_boy"<linebreak/> + <emoji name="family_woman_woman_girl" unicode="&#x1f469;&#x1f469;&#x1f467;"/> <emoji name="family_woman_woman_girl" unicode="&#x1f469;&#x1f469;&#x1f467;"/> from "family_woman_woman_girl"<linebreak/> + <emoji name="family_woman_woman_girl_boy" unicode="&#x1f469;&#x1f469;&#x1f467;&#x1f466;"/> <emoji name="family_woman_woman_girl_boy" unicode="&#x1f469;&#x1f469;&#x1f467;&#x1f466;"/> from "family_woman_woman_girl_boy"<linebreak/> + <emoji name="family_woman_woman_girl_girl" unicode="&#x1f469;&#x1f469;&#x1f467;&#x1f467;"/> <emoji name="family_woman_woman_girl_girl" unicode="&#x1f469;&#x1f469;&#x1f467;&#x1f467;"/> from "family_woman_woman_girl_girl"<linebreak/> + <emoji name="faroe_islands" unicode="&#x1f1eb;&#x1f1f4;"/> <emoji name="faroe_islands" unicode="&#x1f1eb;&#x1f1f4;"/> from "faroe_islands"<linebreak/> + <emoji name="fast_forward" unicode="&#x23e9;"/> <emoji name="fast_forward" unicode="&#x23e9;"/> from "fast_forward"<linebreak/> + <emoji name="fax" unicode="&#x1f4e0;"/> <emoji name="fax" unicode="&#x1f4e0;"/> from "fax"<linebreak/> + <emoji name="fearful" unicode="&#x1f628;"/> <emoji name="fearful" unicode="&#x1f628;"/> from "fearful"<linebreak/> + <emoji name="feet" unicode="&#x1f43e;"/> <emoji name="feet" unicode="&#x1f43e;"/> from "feet"<linebreak/> + <emoji name="female_detective" unicode="&#x1f575;&#x2640;"/> <emoji name="female_detective" unicode="&#x1f575;&#x2640;"/> from "female_detective"<linebreak/> + <emoji name="ferris_wheel" unicode="&#x1f3a1;"/> <emoji name="ferris_wheel" unicode="&#x1f3a1;"/> from "ferris_wheel"<linebreak/> + <emoji name="ferry" unicode="&#x26f4;"/> <emoji name="ferry" unicode="&#x26f4;"/> from "ferry"<linebreak/> + <emoji name="field_hockey" unicode="&#x1f3d1;"/> <emoji name="field_hockey" unicode="&#x1f3d1;"/> from "field_hockey"<linebreak/> + <emoji name="fiji" unicode="&#x1f1eb;&#x1f1ef;"/> <emoji name="fiji" unicode="&#x1f1eb;&#x1f1ef;"/> from "fiji"<linebreak/> + <emoji name="file_cabinet" unicode="&#x1f5c4;"/> <emoji name="file_cabinet" unicode="&#x1f5c4;"/> from "file_cabinet"<linebreak/> + <emoji name="file_folder" unicode="&#x1f4c1;"/> <emoji name="file_folder" unicode="&#x1f4c1;"/> from "file_folder"<linebreak/> + <emoji name="film_projector" unicode="&#x1f4fd;"/> <emoji name="film_projector" unicode="&#x1f4fd;"/> from "film_projector"<linebreak/> + <emoji name="film_strip" unicode="&#x1f39e;"/> <emoji name="film_strip" unicode="&#x1f39e;"/> from "film_strip"<linebreak/> + <emoji name="finland" unicode="&#x1f1eb;&#x1f1ee;"/> <emoji name="finland" unicode="&#x1f1eb;&#x1f1ee;"/> from "finland"<linebreak/> + <emoji name="fire" unicode="&#x1f525;"/> <emoji name="fire" unicode="&#x1f525;"/> from "fire"<linebreak/> + <emoji name="fire_engine" unicode="&#x1f692;"/> <emoji name="fire_engine" unicode="&#x1f692;"/> from "fire_engine"<linebreak/> + <emoji name="fireworks" unicode="&#x1f386;"/> <emoji name="fireworks" unicode="&#x1f386;"/> from "fireworks"<linebreak/> + <emoji name="first_quarter_moon" unicode="&#x1f313;"/> <emoji name="first_quarter_moon" unicode="&#x1f313;"/> from "first_quarter_moon"<linebreak/> + <emoji name="first_quarter_moon_with_face" unicode="&#x1f31b;"/> <emoji name="first_quarter_moon_with_face" unicode="&#x1f31b;"/> from "first_quarter_moon_with_face"<linebreak/> + <emoji name="fish" unicode="&#x1f41f;"/> <emoji name="fish" unicode="&#x1f41f;"/> from "fish"<linebreak/> + <emoji name="fish_cake" unicode="&#x1f365;"/> <emoji name="fish_cake" unicode="&#x1f365;"/> from "fish_cake"<linebreak/> + <emoji name="fishing_pole_and_fish" unicode="&#x1f3a3;"/> <emoji name="fishing_pole_and_fish" unicode="&#x1f3a3;"/> from "fishing_pole_and_fish"<linebreak/> + <emoji name="fist" unicode="&#x270a;"/> <emoji name="fist" unicode="&#x270a;"/> from "fist"<linebreak/> + <emoji name="fist_left" unicode="&#x1f91b;"/> <emoji name="fist_left" unicode="&#x1f91b;"/> from "fist_left"<linebreak/> + <emoji name="fist_oncoming" unicode="&#x1f44a;"/> <emoji name="fist_oncoming" unicode="&#x1f44a;"/> from "fist_oncoming"<linebreak/> + <emoji name="fist_raised" unicode="&#x270a;"/> <emoji name="fist_raised" unicode="&#x270a;"/> from "fist_raised"<linebreak/> + <emoji name="fist_right" unicode="&#x1f91c;"/> <emoji name="fist_right" unicode="&#x1f91c;"/> from "fist_right"<linebreak/> + <emoji name="five" unicode="&#x0035;&#x20e3;"/> <emoji name="five" unicode="&#x0035;&#x20e3;"/> from "five"<linebreak/> + <emoji name="flags" unicode="&#x1f38f;"/> <emoji name="flags" unicode="&#x1f38f;"/> from "flags"<linebreak/> + <emoji name="flashlight" unicode="&#x1f526;"/> <emoji name="flashlight" unicode="&#x1f526;"/> from "flashlight"<linebreak/> + <emoji name="fleur_de_lis" unicode="&#x269c;"/> <emoji name="fleur_de_lis" unicode="&#x269c;"/> from "fleur_de_lis"<linebreak/> + <emoji name="flight_arrival" unicode="&#x1f6ec;"/> <emoji name="flight_arrival" unicode="&#x1f6ec;"/> from "flight_arrival"<linebreak/> + <emoji name="flight_departure" unicode="&#x1f6eb;"/> <emoji name="flight_departure" unicode="&#x1f6eb;"/> from "flight_departure"<linebreak/> + <emoji name="flipper" unicode="&#x1f42c;"/> <emoji name="flipper" unicode="&#x1f42c;"/> from "flipper"<linebreak/> + <emoji name="floppy_disk" unicode="&#x1f4be;"/> <emoji name="floppy_disk" unicode="&#x1f4be;"/> from "floppy_disk"<linebreak/> + <emoji name="flower_playing_cards" unicode="&#x1f3b4;"/> <emoji name="flower_playing_cards" unicode="&#x1f3b4;"/> from "flower_playing_cards"<linebreak/> + <emoji name="flushed" unicode="&#x1f633;"/> <emoji name="flushed" unicode="&#x1f633;"/> from "flushed"<linebreak/> + <emoji name="fog" unicode="&#x1f32b;"/> <emoji name="fog" unicode="&#x1f32b;"/> from "fog"<linebreak/> + <emoji name="foggy" unicode="&#x1f301;"/> <emoji name="foggy" unicode="&#x1f301;"/> from "foggy"<linebreak/> + <emoji name="football" unicode="&#x1f3c8;"/> <emoji name="football" unicode="&#x1f3c8;"/> from "football"<linebreak/> + <emoji name="footprints" unicode="&#x1f463;"/> <emoji name="footprints" unicode="&#x1f463;"/> from "footprints"<linebreak/> + <emoji name="fork_and_knife" unicode="&#x1f374;"/> <emoji name="fork_and_knife" unicode="&#x1f374;"/> from "fork_and_knife"<linebreak/> + <emoji name="fountain" unicode="&#x26f2;"/> <emoji name="fountain" unicode="&#x26f2;"/> from "fountain"<linebreak/> + <emoji name="fountain_pen" unicode="&#x1f58b;"/> <emoji name="fountain_pen" unicode="&#x1f58b;"/> from "fountain_pen"<linebreak/> + <emoji name="four" unicode="&#x0034;&#x20e3;"/> <emoji name="four" unicode="&#x0034;&#x20e3;"/> from "four"<linebreak/> + <emoji name="four_leaf_clover" unicode="&#x1f340;"/> <emoji name="four_leaf_clover" unicode="&#x1f340;"/> from "four_leaf_clover"<linebreak/> + <emoji name="fox_face" unicode="&#x1f98a;"/> <emoji name="fox_face" unicode="&#x1f98a;"/> from "fox_face"<linebreak/> + <emoji name="fr" unicode="&#x1f1eb;&#x1f1f7;"/> <emoji name="fr" unicode="&#x1f1eb;&#x1f1f7;"/> from "fr"<linebreak/> + <emoji name="framed_picture" unicode="&#x1f5bc;"/> <emoji name="framed_picture" unicode="&#x1f5bc;"/> from "framed_picture"<linebreak/> + <emoji name="free" unicode="&#x1f193;"/> <emoji name="free" unicode="&#x1f193;"/> from "free"<linebreak/> + <emoji name="french_guiana" unicode="&#x1f1ec;&#x1f1eb;"/> <emoji name="french_guiana" unicode="&#x1f1ec;&#x1f1eb;"/> from "french_guiana"<linebreak/> + <emoji name="french_polynesia" unicode="&#x1f1f5;&#x1f1eb;"/> <emoji name="french_polynesia" unicode="&#x1f1f5;&#x1f1eb;"/> from "french_polynesia"<linebreak/> + <emoji name="french_southern_territories" unicode="&#x1f1f9;&#x1f1eb;"/> <emoji name="french_southern_territories" unicode="&#x1f1f9;&#x1f1eb;"/> from "french_southern_territories"<linebreak/> + <emoji name="fried_egg" unicode="&#x1f373;"/> <emoji name="fried_egg" unicode="&#x1f373;"/> from "fried_egg"<linebreak/> + <emoji name="fried_shrimp" unicode="&#x1f364;"/> <emoji name="fried_shrimp" unicode="&#x1f364;"/> from "fried_shrimp"<linebreak/> + <emoji name="fries" unicode="&#x1f35f;"/> <emoji name="fries" unicode="&#x1f35f;"/> from "fries"<linebreak/> + <emoji name="frog" unicode="&#x1f438;"/> <emoji name="frog" unicode="&#x1f438;"/> from "frog"<linebreak/> + <emoji name="frowning" unicode="&#x1f626;"/> <emoji name="frowning" unicode="&#x1f626;"/> from "frowning"<linebreak/> + <emoji name="frowning_face" unicode="&#x2639;"/> <emoji name="frowning_face" unicode="&#x2639;"/> from "frowning_face"<linebreak/> + <emoji name="frowning_man" unicode="&#x1f64d;&#x2642;"/> <emoji name="frowning_man" unicode="&#x1f64d;&#x2642;"/> from "frowning_man"<linebreak/> + <emoji name="frowning_woman" unicode="&#x1f64d;"/> <emoji name="frowning_woman" unicode="&#x1f64d;"/> from "frowning_woman"<linebreak/> + <emoji name="fu" unicode="&#x1f595;"/> <emoji name="fu" unicode="&#x1f595;"/> from "fu"<linebreak/> + <emoji name="fuelpump" unicode="&#x26fd;"/> <emoji name="fuelpump" unicode="&#x26fd;"/> from "fuelpump"<linebreak/> + <emoji name="full_moon" unicode="&#x1f315;"/> <emoji name="full_moon" unicode="&#x1f315;"/> from "full_moon"<linebreak/> + <emoji name="full_moon_with_face" unicode="&#x1f31d;"/> <emoji name="full_moon_with_face" unicode="&#x1f31d;"/> from "full_moon_with_face"<linebreak/> + <emoji name="funeral_urn" unicode="&#x26b1;"/> <emoji name="funeral_urn" unicode="&#x26b1;"/> from "funeral_urn"<linebreak/> + <emoji name="gabon" unicode="&#x1f1ec;&#x1f1e6;"/> <emoji name="gabon" unicode="&#x1f1ec;&#x1f1e6;"/> from "gabon"<linebreak/> + <emoji name="gambia" unicode="&#x1f1ec;&#x1f1f2;"/> <emoji name="gambia" unicode="&#x1f1ec;&#x1f1f2;"/> from "gambia"<linebreak/> + <emoji name="game_die" unicode="&#x1f3b2;"/> <emoji name="game_die" unicode="&#x1f3b2;"/> from "game_die"<linebreak/> + <emoji name="gb" unicode="&#x1f1ec;&#x1f1e7;"/> <emoji name="gb" unicode="&#x1f1ec;&#x1f1e7;"/> from "gb"<linebreak/> + <emoji name="gear" unicode="&#x2699;"/> <emoji name="gear" unicode="&#x2699;"/> from "gear"<linebreak/> + <emoji name="gem" unicode="&#x1f48e;"/> <emoji name="gem" unicode="&#x1f48e;"/> from "gem"<linebreak/> + <emoji name="gemini" unicode="&#x264a;"/> <emoji name="gemini" unicode="&#x264a;"/> from "gemini"<linebreak/> + <emoji name="georgia" unicode="&#x1f1ec;&#x1f1ea;"/> <emoji name="georgia" unicode="&#x1f1ec;&#x1f1ea;"/> from "georgia"<linebreak/> + <emoji name="ghana" unicode="&#x1f1ec;&#x1f1ed;"/> <emoji name="ghana" unicode="&#x1f1ec;&#x1f1ed;"/> from "ghana"<linebreak/> + <emoji name="ghost" unicode="&#x1f47b;"/> <emoji name="ghost" unicode="&#x1f47b;"/> from "ghost"<linebreak/> + <emoji name="gibraltar" unicode="&#x1f1ec;&#x1f1ee;"/> <emoji name="gibraltar" unicode="&#x1f1ec;&#x1f1ee;"/> from "gibraltar"<linebreak/> + <emoji name="gift" unicode="&#x1f381;"/> <emoji name="gift" unicode="&#x1f381;"/> from "gift"<linebreak/> + <emoji name="gift_heart" unicode="&#x1f49d;"/> <emoji name="gift_heart" unicode="&#x1f49d;"/> from "gift_heart"<linebreak/> + <emoji name="girl" unicode="&#x1f467;"/> <emoji name="girl" unicode="&#x1f467;"/> from "girl"<linebreak/> + <emoji name="globe_with_meridians" unicode="&#x1f310;"/> <emoji name="globe_with_meridians" unicode="&#x1f310;"/> from "globe_with_meridians"<linebreak/> + <emoji name="goal_net" unicode="&#x1f945;"/> <emoji name="goal_net" unicode="&#x1f945;"/> from "goal_net"<linebreak/> + <emoji name="goat" unicode="&#x1f410;"/> <emoji name="goat" unicode="&#x1f410;"/> from "goat"<linebreak/> + <emoji name="golf" unicode="&#x26f3;"/> <emoji name="golf" unicode="&#x26f3;"/> from "golf"<linebreak/> + <emoji name="golfing_man" unicode="&#x1f3cc;"/> <emoji name="golfing_man" unicode="&#x1f3cc;"/> from "golfing_man"<linebreak/> + <emoji name="golfing_woman" unicode="&#x1f3cc;&#x2640;"/> <emoji name="golfing_woman" unicode="&#x1f3cc;&#x2640;"/> from "golfing_woman"<linebreak/> + <emoji name="gorilla" unicode="&#x1f98d;"/> <emoji name="gorilla" unicode="&#x1f98d;"/> from "gorilla"<linebreak/> + <emoji name="grapes" unicode="&#x1f347;"/> <emoji name="grapes" unicode="&#x1f347;"/> from "grapes"<linebreak/> + <emoji name="greece" unicode="&#x1f1ec;&#x1f1f7;"/> <emoji name="greece" unicode="&#x1f1ec;&#x1f1f7;"/> from "greece"<linebreak/> + <emoji name="green_apple" unicode="&#x1f34f;"/> <emoji name="green_apple" unicode="&#x1f34f;"/> from "green_apple"<linebreak/> + <emoji name="green_book" unicode="&#x1f4d7;"/> <emoji name="green_book" unicode="&#x1f4d7;"/> from "green_book"<linebreak/> + <emoji name="green_heart" unicode="&#x1f49a;"/> <emoji name="green_heart" unicode="&#x1f49a;"/> from "green_heart"<linebreak/> + <emoji name="green_salad" unicode="&#x1f957;"/> <emoji name="green_salad" unicode="&#x1f957;"/> from "green_salad"<linebreak/> + <emoji name="greenland" unicode="&#x1f1ec;&#x1f1f1;"/> <emoji name="greenland" unicode="&#x1f1ec;&#x1f1f1;"/> from "greenland"<linebreak/> + <emoji name="grenada" unicode="&#x1f1ec;&#x1f1e9;"/> <emoji name="grenada" unicode="&#x1f1ec;&#x1f1e9;"/> from "grenada"<linebreak/> + <emoji name="grey_exclamation" unicode="&#x2755;"/> <emoji name="grey_exclamation" unicode="&#x2755;"/> from "grey_exclamation"<linebreak/> + <emoji name="grey_question" unicode="&#x2754;"/> <emoji name="grey_question" unicode="&#x2754;"/> from "grey_question"<linebreak/> + <emoji name="grimacing" unicode="&#x1f62c;"/> <emoji name="grimacing" unicode="&#x1f62c;"/> from "grimacing"<linebreak/> + <emoji name="grin" unicode="&#x1f601;"/> <emoji name="grin" unicode="&#x1f601;"/> from "grin"<linebreak/> + <emoji name="grinning" unicode="&#x1f600;"/> <emoji name="grinning" unicode="&#x1f600;"/> from "grinning"<linebreak/> + <emoji name="guadeloupe" unicode="&#x1f1ec;&#x1f1f5;"/> <emoji name="guadeloupe" unicode="&#x1f1ec;&#x1f1f5;"/> from "guadeloupe"<linebreak/> + <emoji name="guam" unicode="&#x1f1ec;&#x1f1fa;"/> <emoji name="guam" unicode="&#x1f1ec;&#x1f1fa;"/> from "guam"<linebreak/> + <emoji name="guardsman" unicode="&#x1f482;"/> <emoji name="guardsman" unicode="&#x1f482;"/> from "guardsman"<linebreak/> + <emoji name="guardswoman" unicode="&#x1f482;&#x2640;"/> <emoji name="guardswoman" unicode="&#x1f482;&#x2640;"/> from "guardswoman"<linebreak/> + <emoji name="guatemala" unicode="&#x1f1ec;&#x1f1f9;"/> <emoji name="guatemala" unicode="&#x1f1ec;&#x1f1f9;"/> from "guatemala"<linebreak/> + <emoji name="guernsey" unicode="&#x1f1ec;&#x1f1ec;"/> <emoji name="guernsey" unicode="&#x1f1ec;&#x1f1ec;"/> from "guernsey"<linebreak/> + <emoji name="guinea" unicode="&#x1f1ec;&#x1f1f3;"/> <emoji name="guinea" unicode="&#x1f1ec;&#x1f1f3;"/> from "guinea"<linebreak/> + <emoji name="guinea_bissau" unicode="&#x1f1ec;&#x1f1fc;"/> <emoji name="guinea_bissau" unicode="&#x1f1ec;&#x1f1fc;"/> from "guinea_bissau"<linebreak/> + <emoji name="guitar" unicode="&#x1f3b8;"/> <emoji name="guitar" unicode="&#x1f3b8;"/> from "guitar"<linebreak/> + <emoji name="gun" unicode="&#x1f52b;"/> <emoji name="gun" unicode="&#x1f52b;"/> from "gun"<linebreak/> + <emoji name="guyana" unicode="&#x1f1ec;&#x1f1fe;"/> <emoji name="guyana" unicode="&#x1f1ec;&#x1f1fe;"/> from "guyana"<linebreak/> + <emoji name="haircut" unicode="&#x1f487;"/> <emoji name="haircut" unicode="&#x1f487;"/> from "haircut"<linebreak/> + <emoji name="haircut_man" unicode="&#x1f487;&#x2642;"/> <emoji name="haircut_man" unicode="&#x1f487;&#x2642;"/> from "haircut_man"<linebreak/> + <emoji name="haircut_woman" unicode="&#x1f487;"/> <emoji name="haircut_woman" unicode="&#x1f487;"/> from "haircut_woman"<linebreak/> + <emoji name="haiti" unicode="&#x1f1ed;&#x1f1f9;"/> <emoji name="haiti" unicode="&#x1f1ed;&#x1f1f9;"/> from "haiti"<linebreak/> + <emoji name="hamburger" unicode="&#x1f354;"/> <emoji name="hamburger" unicode="&#x1f354;"/> from "hamburger"<linebreak/> + <emoji name="hammer" unicode="&#x1f528;"/> <emoji name="hammer" unicode="&#x1f528;"/> from "hammer"<linebreak/> + <emoji name="hammer_and_pick" unicode="&#x2692;"/> <emoji name="hammer_and_pick" unicode="&#x2692;"/> from "hammer_and_pick"<linebreak/> + <emoji name="hammer_and_wrench" unicode="&#x1f6e0;"/> <emoji name="hammer_and_wrench" unicode="&#x1f6e0;"/> from "hammer_and_wrench"<linebreak/> + <emoji name="hamster" unicode="&#x1f439;"/> <emoji name="hamster" unicode="&#x1f439;"/> from "hamster"<linebreak/> + <emoji name="hand" unicode="&#x270b;"/> <emoji name="hand" unicode="&#x270b;"/> from "hand"<linebreak/> + <emoji name="handbag" unicode="&#x1f45c;"/> <emoji name="handbag" unicode="&#x1f45c;"/> from "handbag"<linebreak/> + <emoji name="handshake" unicode="&#x1f91d;"/> <emoji name="handshake" unicode="&#x1f91d;"/> from "handshake"<linebreak/> + <emoji name="hankey" unicode="&#x1f4a9;"/> <emoji name="hankey" unicode="&#x1f4a9;"/> from "hankey"<linebreak/> + <emoji name="hash" unicode="&#x0023;&#x20e3;"/> <emoji name="hash" unicode="&#x0023;&#x20e3;"/> from "hash"<linebreak/> + <emoji name="hatched_chick" unicode="&#x1f425;"/> <emoji name="hatched_chick" unicode="&#x1f425;"/> from "hatched_chick"<linebreak/> + <emoji name="hatching_chick" unicode="&#x1f423;"/> <emoji name="hatching_chick" unicode="&#x1f423;"/> from "hatching_chick"<linebreak/> + <emoji name="headphones" unicode="&#x1f3a7;"/> <emoji name="headphones" unicode="&#x1f3a7;"/> from "headphones"<linebreak/> + <emoji name="hear_no_evil" unicode="&#x1f649;"/> <emoji name="hear_no_evil" unicode="&#x1f649;"/> from "hear_no_evil"<linebreak/> + <emoji name="heart" unicode="&#x2764;"/> <emoji name="heart" unicode="&#x2764;"/> from "heart"<linebreak/> + <emoji name="heart_decoration" unicode="&#x1f49f;"/> <emoji name="heart_decoration" unicode="&#x1f49f;"/> from "heart_decoration"<linebreak/> + <emoji name="heart_eyes" unicode="&#x1f60d;"/> <emoji name="heart_eyes" unicode="&#x1f60d;"/> from "heart_eyes"<linebreak/> + <emoji name="heart_eyes_cat" unicode="&#x1f63b;"/> <emoji name="heart_eyes_cat" unicode="&#x1f63b;"/> from "heart_eyes_cat"<linebreak/> + <emoji name="heartbeat" unicode="&#x1f493;"/> <emoji name="heartbeat" unicode="&#x1f493;"/> from "heartbeat"<linebreak/> + <emoji name="heartpulse" unicode="&#x1f497;"/> <emoji name="heartpulse" unicode="&#x1f497;"/> from "heartpulse"<linebreak/> + <emoji name="hearts" unicode="&#x2665;"/> <emoji name="hearts" unicode="&#x2665;"/> from "hearts"<linebreak/> + <emoji name="heavy_check_mark" unicode="&#x2714;"/> <emoji name="heavy_check_mark" unicode="&#x2714;"/> from "heavy_check_mark"<linebreak/> + <emoji name="heavy_division_sign" unicode="&#x2797;"/> <emoji name="heavy_division_sign" unicode="&#x2797;"/> from "heavy_division_sign"<linebreak/> + <emoji name="heavy_dollar_sign" unicode="&#x1f4b2;"/> <emoji name="heavy_dollar_sign" unicode="&#x1f4b2;"/> from "heavy_dollar_sign"<linebreak/> + <emoji name="heavy_exclamation_mark" unicode="&#x2757;"/> <emoji name="heavy_exclamation_mark" unicode="&#x2757;"/> from "heavy_exclamation_mark"<linebreak/> + <emoji name="heavy_heart_exclamation" unicode="&#x2763;"/> <emoji name="heavy_heart_exclamation" unicode="&#x2763;"/> from "heavy_heart_exclamation"<linebreak/> + <emoji name="heavy_minus_sign" unicode="&#x2796;"/> <emoji name="heavy_minus_sign" unicode="&#x2796;"/> from "heavy_minus_sign"<linebreak/> + <emoji name="heavy_multiplication_x" unicode="&#x2716;"/> <emoji name="heavy_multiplication_x" unicode="&#x2716;"/> from "heavy_multiplication_x"<linebreak/> + <emoji name="heavy_plus_sign" unicode="&#x2795;"/> <emoji name="heavy_plus_sign" unicode="&#x2795;"/> from "heavy_plus_sign"<linebreak/> + <emoji name="helicopter" unicode="&#x1f681;"/> <emoji name="helicopter" unicode="&#x1f681;"/> from "helicopter"<linebreak/> + <emoji name="herb" unicode="&#x1f33f;"/> <emoji name="herb" unicode="&#x1f33f;"/> from "herb"<linebreak/> + <emoji name="hibiscus" unicode="&#x1f33a;"/> <emoji name="hibiscus" unicode="&#x1f33a;"/> from "hibiscus"<linebreak/> + <emoji name="high_brightness" unicode="&#x1f506;"/> <emoji name="high_brightness" unicode="&#x1f506;"/> from "high_brightness"<linebreak/> + <emoji name="high_heel" unicode="&#x1f460;"/> <emoji name="high_heel" unicode="&#x1f460;"/> from "high_heel"<linebreak/> + <emoji name="hocho" unicode="&#x1f52a;"/> <emoji name="hocho" unicode="&#x1f52a;"/> from "hocho"<linebreak/> + <emoji name="hole" unicode="&#x1f573;"/> <emoji name="hole" unicode="&#x1f573;"/> from "hole"<linebreak/> + <emoji name="honduras" unicode="&#x1f1ed;&#x1f1f3;"/> <emoji name="honduras" unicode="&#x1f1ed;&#x1f1f3;"/> from "honduras"<linebreak/> + <emoji name="honey_pot" unicode="&#x1f36f;"/> <emoji name="honey_pot" unicode="&#x1f36f;"/> from "honey_pot"<linebreak/> + <emoji name="honeybee" unicode="&#x1f41d;"/> <emoji name="honeybee" unicode="&#x1f41d;"/> from "honeybee"<linebreak/> + <emoji name="hong_kong" unicode="&#x1f1ed;&#x1f1f0;"/> <emoji name="hong_kong" unicode="&#x1f1ed;&#x1f1f0;"/> from "hong_kong"<linebreak/> + <emoji name="horse" unicode="&#x1f434;"/> <emoji name="horse" unicode="&#x1f434;"/> from "horse"<linebreak/> + <emoji name="horse_racing" unicode="&#x1f3c7;"/> <emoji name="horse_racing" unicode="&#x1f3c7;"/> from "horse_racing"<linebreak/> + <emoji name="hospital" unicode="&#x1f3e5;"/> <emoji name="hospital" unicode="&#x1f3e5;"/> from "hospital"<linebreak/> + <emoji name="hot_pepper" unicode="&#x1f336;"/> <emoji name="hot_pepper" unicode="&#x1f336;"/> from "hot_pepper"<linebreak/> + <emoji name="hotdog" unicode="&#x1f32d;"/> <emoji name="hotdog" unicode="&#x1f32d;"/> from "hotdog"<linebreak/> + <emoji name="hotel" unicode="&#x1f3e8;"/> <emoji name="hotel" unicode="&#x1f3e8;"/> from "hotel"<linebreak/> + <emoji name="hotsprings" unicode="&#x2668;"/> <emoji name="hotsprings" unicode="&#x2668;"/> from "hotsprings"<linebreak/> + <emoji name="hourglass" unicode="&#x231b;"/> <emoji name="hourglass" unicode="&#x231b;"/> from "hourglass"<linebreak/> + <emoji name="hourglass_flowing_sand" unicode="&#x23f3;"/> <emoji name="hourglass_flowing_sand" unicode="&#x23f3;"/> from "hourglass_flowing_sand"<linebreak/> + <emoji name="house" unicode="&#x1f3e0;"/> <emoji name="house" unicode="&#x1f3e0;"/> from "house"<linebreak/> + <emoji name="house_with_garden" unicode="&#x1f3e1;"/> <emoji name="house_with_garden" unicode="&#x1f3e1;"/> from "house_with_garden"<linebreak/> + <emoji name="houses" unicode="&#x1f3d8;"/> <emoji name="houses" unicode="&#x1f3d8;"/> from "houses"<linebreak/> + <emoji name="hugs" unicode="&#x1f917;"/> <emoji name="hugs" unicode="&#x1f917;"/> from "hugs"<linebreak/> + <emoji name="hungary" unicode="&#x1f1ed;&#x1f1fa;"/> <emoji name="hungary" unicode="&#x1f1ed;&#x1f1fa;"/> from "hungary"<linebreak/> + <emoji name="hushed" unicode="&#x1f62f;"/> <emoji name="hushed" unicode="&#x1f62f;"/> from "hushed"<linebreak/> + <emoji name="ice_cream" unicode="&#x1f368;"/> <emoji name="ice_cream" unicode="&#x1f368;"/> from "ice_cream"<linebreak/> + <emoji name="ice_hockey" unicode="&#x1f3d2;"/> <emoji name="ice_hockey" unicode="&#x1f3d2;"/> from "ice_hockey"<linebreak/> + <emoji name="ice_skate" unicode="&#x26f8;"/> <emoji name="ice_skate" unicode="&#x26f8;"/> from "ice_skate"<linebreak/> + <emoji name="icecream" unicode="&#x1f366;"/> <emoji name="icecream" unicode="&#x1f366;"/> from "icecream"<linebreak/> + <emoji name="iceland" unicode="&#x1f1ee;&#x1f1f8;"/> <emoji name="iceland" unicode="&#x1f1ee;&#x1f1f8;"/> from "iceland"<linebreak/> + <emoji name="id" unicode="&#x1f194;"/> <emoji name="id" unicode="&#x1f194;"/> from "id"<linebreak/> + <emoji name="ideograph_advantage" unicode="&#x1f250;"/> <emoji name="ideograph_advantage" unicode="&#x1f250;"/> from "ideograph_advantage"<linebreak/> + <emoji name="imp" unicode="&#x1f47f;"/> <emoji name="imp" unicode="&#x1f47f;"/> from "imp"<linebreak/> + <emoji name="inbox_tray" unicode="&#x1f4e5;"/> <emoji name="inbox_tray" unicode="&#x1f4e5;"/> from "inbox_tray"<linebreak/> + <emoji name="incoming_envelope" unicode="&#x1f4e8;"/> <emoji name="incoming_envelope" unicode="&#x1f4e8;"/> from "incoming_envelope"<linebreak/> + <emoji name="india" unicode="&#x1f1ee;&#x1f1f3;"/> <emoji name="india" unicode="&#x1f1ee;&#x1f1f3;"/> from "india"<linebreak/> + <emoji name="indonesia" unicode="&#x1f1ee;&#x1f1e9;"/> <emoji name="indonesia" unicode="&#x1f1ee;&#x1f1e9;"/> from "indonesia"<linebreak/> + <emoji name="information_desk_person" unicode="&#x1f481;"/> <emoji name="information_desk_person" unicode="&#x1f481;"/> from "information_desk_person"<linebreak/> + <emoji name="information_source" unicode="&#x2139;"/> <emoji name="information_source" unicode="&#x2139;"/> from "information_source"<linebreak/> + <emoji name="innocent" unicode="&#x1f607;"/> <emoji name="innocent" unicode="&#x1f607;"/> from "innocent"<linebreak/> + <emoji name="interrobang" unicode="&#x2049;"/> <emoji name="interrobang" unicode="&#x2049;"/> from "interrobang"<linebreak/> + <emoji name="iphone" unicode="&#x1f4f1;"/> <emoji name="iphone" unicode="&#x1f4f1;"/> from "iphone"<linebreak/> + <emoji name="iran" unicode="&#x1f1ee;&#x1f1f7;"/> <emoji name="iran" unicode="&#x1f1ee;&#x1f1f7;"/> from "iran"<linebreak/> + <emoji name="iraq" unicode="&#x1f1ee;&#x1f1f6;"/> <emoji name="iraq" unicode="&#x1f1ee;&#x1f1f6;"/> from "iraq"<linebreak/> + <emoji name="ireland" unicode="&#x1f1ee;&#x1f1ea;"/> <emoji name="ireland" unicode="&#x1f1ee;&#x1f1ea;"/> from "ireland"<linebreak/> + <emoji name="isle_of_man" unicode="&#x1f1ee;&#x1f1f2;"/> <emoji name="isle_of_man" unicode="&#x1f1ee;&#x1f1f2;"/> from "isle_of_man"<linebreak/> + <emoji name="israel" unicode="&#x1f1ee;&#x1f1f1;"/> <emoji name="israel" unicode="&#x1f1ee;&#x1f1f1;"/> from "israel"<linebreak/> + <emoji name="it" unicode="&#x1f1ee;&#x1f1f9;"/> <emoji name="it" unicode="&#x1f1ee;&#x1f1f9;"/> from "it"<linebreak/> + <emoji name="izakaya_lantern" unicode="&#x1f3ee;"/> <emoji name="izakaya_lantern" unicode="&#x1f3ee;"/> from "izakaya_lantern"<linebreak/> + <emoji name="jack_o_lantern" unicode="&#x1f383;"/> <emoji name="jack_o_lantern" unicode="&#x1f383;"/> from "jack_o_lantern"<linebreak/> + <emoji name="jamaica" unicode="&#x1f1ef;&#x1f1f2;"/> <emoji name="jamaica" unicode="&#x1f1ef;&#x1f1f2;"/> from "jamaica"<linebreak/> + <emoji name="japan" unicode="&#x1f5fe;"/> <emoji name="japan" unicode="&#x1f5fe;"/> from "japan"<linebreak/> + <emoji name="japanese_castle" unicode="&#x1f3ef;"/> <emoji name="japanese_castle" unicode="&#x1f3ef;"/> from "japanese_castle"<linebreak/> + <emoji name="japanese_goblin" unicode="&#x1f47a;"/> <emoji name="japanese_goblin" unicode="&#x1f47a;"/> from "japanese_goblin"<linebreak/> + <emoji name="japanese_ogre" unicode="&#x1f479;"/> <emoji name="japanese_ogre" unicode="&#x1f479;"/> from "japanese_ogre"<linebreak/> + <emoji name="jeans" unicode="&#x1f456;"/> <emoji name="jeans" unicode="&#x1f456;"/> from "jeans"<linebreak/> + <emoji name="jersey" unicode="&#x1f1ef;&#x1f1ea;"/> <emoji name="jersey" unicode="&#x1f1ef;&#x1f1ea;"/> from "jersey"<linebreak/> + <emoji name="jordan" unicode="&#x1f1ef;&#x1f1f4;"/> <emoji name="jordan" unicode="&#x1f1ef;&#x1f1f4;"/> from "jordan"<linebreak/> + <emoji name="joy" unicode="&#x1f602;"/> <emoji name="joy" unicode="&#x1f602;"/> from "joy"<linebreak/> + <emoji name="joy_cat" unicode="&#x1f639;"/> <emoji name="joy_cat" unicode="&#x1f639;"/> from "joy_cat"<linebreak/> + <emoji name="joystick" unicode="&#x1f579;"/> <emoji name="joystick" unicode="&#x1f579;"/> from "joystick"<linebreak/> + <emoji name="jp" unicode="&#x1f1ef;&#x1f1f5;"/> <emoji name="jp" unicode="&#x1f1ef;&#x1f1f5;"/> from "jp"<linebreak/> + <emoji name="kaaba" unicode="&#x1f54b;"/> <emoji name="kaaba" unicode="&#x1f54b;"/> from "kaaba"<linebreak/> + <emoji name="kazakhstan" unicode="&#x1f1f0;&#x1f1ff;"/> <emoji name="kazakhstan" unicode="&#x1f1f0;&#x1f1ff;"/> from "kazakhstan"<linebreak/> + <emoji name="kenya" unicode="&#x1f1f0;&#x1f1ea;"/> <emoji name="kenya" unicode="&#x1f1f0;&#x1f1ea;"/> from "kenya"<linebreak/> + <emoji name="key" unicode="&#x1f511;"/> <emoji name="key" unicode="&#x1f511;"/> from "key"<linebreak/> + <emoji name="keyboard" unicode="&#x2328;"/> <emoji name="keyboard" unicode="&#x2328;"/> from "keyboard"<linebreak/> + <emoji name="keycap_ten" unicode="&#x1f51f;"/> <emoji name="keycap_ten" unicode="&#x1f51f;"/> from "keycap_ten"<linebreak/> + <emoji name="kick_scooter" unicode="&#x1f6f4;"/> <emoji name="kick_scooter" unicode="&#x1f6f4;"/> from "kick_scooter"<linebreak/> + <emoji name="kimono" unicode="&#x1f458;"/> <emoji name="kimono" unicode="&#x1f458;"/> from "kimono"<linebreak/> + <emoji name="kiribati" unicode="&#x1f1f0;&#x1f1ee;"/> <emoji name="kiribati" unicode="&#x1f1f0;&#x1f1ee;"/> from "kiribati"<linebreak/> + <emoji name="kiss" unicode="&#x1f48b;"/> <emoji name="kiss" unicode="&#x1f48b;"/> from "kiss"<linebreak/> + <emoji name="kissing" unicode="&#x1f617;"/> <emoji name="kissing" unicode="&#x1f617;"/> from "kissing"<linebreak/> + <emoji name="kissing_cat" unicode="&#x1f63d;"/> <emoji name="kissing_cat" unicode="&#x1f63d;"/> from "kissing_cat"<linebreak/> + <emoji name="kissing_closed_eyes" unicode="&#x1f61a;"/> <emoji name="kissing_closed_eyes" unicode="&#x1f61a;"/> from "kissing_closed_eyes"<linebreak/> + <emoji name="kissing_heart" unicode="&#x1f618;"/> <emoji name="kissing_heart" unicode="&#x1f618;"/> from "kissing_heart"<linebreak/> + <emoji name="kissing_smiling_eyes" unicode="&#x1f619;"/> <emoji name="kissing_smiling_eyes" unicode="&#x1f619;"/> from "kissing_smiling_eyes"<linebreak/> + <emoji name="kiwi_fruit" unicode="&#x1f95d;"/> <emoji name="kiwi_fruit" unicode="&#x1f95d;"/> from "kiwi_fruit"<linebreak/> + <emoji name="knife" unicode="&#x1f52a;"/> <emoji name="knife" unicode="&#x1f52a;"/> from "knife"<linebreak/> + <emoji name="koala" unicode="&#x1f428;"/> <emoji name="koala" unicode="&#x1f428;"/> from "koala"<linebreak/> + <emoji name="koko" unicode="&#x1f201;"/> <emoji name="koko" unicode="&#x1f201;"/> from "koko"<linebreak/> + <emoji name="kosovo" unicode="&#x1f1fd;&#x1f1f0;"/> <emoji name="kosovo" unicode="&#x1f1fd;&#x1f1f0;"/> from "kosovo"<linebreak/> + <emoji name="kr" unicode="&#x1f1f0;&#x1f1f7;"/> <emoji name="kr" unicode="&#x1f1f0;&#x1f1f7;"/> from "kr"<linebreak/> + <emoji name="kuwait" unicode="&#x1f1f0;&#x1f1fc;"/> <emoji name="kuwait" unicode="&#x1f1f0;&#x1f1fc;"/> from "kuwait"<linebreak/> + <emoji name="kyrgyzstan" unicode="&#x1f1f0;&#x1f1ec;"/> <emoji name="kyrgyzstan" unicode="&#x1f1f0;&#x1f1ec;"/> from "kyrgyzstan"<linebreak/> + <emoji name="label" unicode="&#x1f3f7;"/> <emoji name="label" unicode="&#x1f3f7;"/> from "label"<linebreak/> + <emoji name="lantern" unicode="&#x1f3ee;"/> <emoji name="lantern" unicode="&#x1f3ee;"/> from "lantern"<linebreak/> + <emoji name="laos" unicode="&#x1f1f1;&#x1f1e6;"/> <emoji name="laos" unicode="&#x1f1f1;&#x1f1e6;"/> from "laos"<linebreak/> + <emoji name="large_blue_circle" unicode="&#x1f535;"/> <emoji name="large_blue_circle" unicode="&#x1f535;"/> from "large_blue_circle"<linebreak/> + <emoji name="large_blue_diamond" unicode="&#x1f537;"/> <emoji name="large_blue_diamond" unicode="&#x1f537;"/> from "large_blue_diamond"<linebreak/> + <emoji name="large_orange_diamond" unicode="&#x1f536;"/> <emoji name="large_orange_diamond" unicode="&#x1f536;"/> from "large_orange_diamond"<linebreak/> + <emoji name="last_quarter_moon" unicode="&#x1f317;"/> <emoji name="last_quarter_moon" unicode="&#x1f317;"/> from "last_quarter_moon"<linebreak/> + <emoji name="last_quarter_moon_with_face" unicode="&#x1f31c;"/> <emoji name="last_quarter_moon_with_face" unicode="&#x1f31c;"/> from "last_quarter_moon_with_face"<linebreak/> + <emoji name="latin_cross" unicode="&#x271d;"/> <emoji name="latin_cross" unicode="&#x271d;"/> from "latin_cross"<linebreak/> + <emoji name="latvia" unicode="&#x1f1f1;&#x1f1fb;"/> <emoji name="latvia" unicode="&#x1f1f1;&#x1f1fb;"/> from "latvia"<linebreak/> + <emoji name="laughing" unicode="&#x1f606;"/> <emoji name="laughing" unicode="&#x1f606;"/> from "laughing"<linebreak/> + <emoji name="leaves" unicode="&#x1f343;"/> <emoji name="leaves" unicode="&#x1f343;"/> from "leaves"<linebreak/> + <emoji name="lebanon" unicode="&#x1f1f1;&#x1f1e7;"/> <emoji name="lebanon" unicode="&#x1f1f1;&#x1f1e7;"/> from "lebanon"<linebreak/> + <emoji name="ledger" unicode="&#x1f4d2;"/> <emoji name="ledger" unicode="&#x1f4d2;"/> from "ledger"<linebreak/> + <emoji name="left_luggage" unicode="&#x1f6c5;"/> <emoji name="left_luggage" unicode="&#x1f6c5;"/> from "left_luggage"<linebreak/> + <emoji name="left_right_arrow" unicode="&#x2194;"/> <emoji name="left_right_arrow" unicode="&#x2194;"/> from "left_right_arrow"<linebreak/> + <emoji name="leftwards_arrow_with_hook" unicode="&#x21a9;"/> <emoji name="leftwards_arrow_with_hook" unicode="&#x21a9;"/> from "leftwards_arrow_with_hook"<linebreak/> + <emoji name="lemon" unicode="&#x1f34b;"/> <emoji name="lemon" unicode="&#x1f34b;"/> from "lemon"<linebreak/> + <emoji name="leo" unicode="&#x264c;"/> <emoji name="leo" unicode="&#x264c;"/> from "leo"<linebreak/> + <emoji name="leopard" unicode="&#x1f406;"/> <emoji name="leopard" unicode="&#x1f406;"/> from "leopard"<linebreak/> + <emoji name="lesotho" unicode="&#x1f1f1;&#x1f1f8;"/> <emoji name="lesotho" unicode="&#x1f1f1;&#x1f1f8;"/> from "lesotho"<linebreak/> + <emoji name="level_slider" unicode="&#x1f39a;"/> <emoji name="level_slider" unicode="&#x1f39a;"/> from "level_slider"<linebreak/> + <emoji name="liberia" unicode="&#x1f1f1;&#x1f1f7;"/> <emoji name="liberia" unicode="&#x1f1f1;&#x1f1f7;"/> from "liberia"<linebreak/> + <emoji name="libra" unicode="&#x264e;"/> <emoji name="libra" unicode="&#x264e;"/> from "libra"<linebreak/> + <emoji name="libya" unicode="&#x1f1f1;&#x1f1fe;"/> <emoji name="libya" unicode="&#x1f1f1;&#x1f1fe;"/> from "libya"<linebreak/> + <emoji name="liechtenstein" unicode="&#x1f1f1;&#x1f1ee;"/> <emoji name="liechtenstein" unicode="&#x1f1f1;&#x1f1ee;"/> from "liechtenstein"<linebreak/> + <emoji name="light_rail" unicode="&#x1f688;"/> <emoji name="light_rail" unicode="&#x1f688;"/> from "light_rail"<linebreak/> + <emoji name="link" unicode="&#x1f517;"/> <emoji name="link" unicode="&#x1f517;"/> from "link"<linebreak/> + <emoji name="lion" unicode="&#x1f981;"/> <emoji name="lion" unicode="&#x1f981;"/> from "lion"<linebreak/> + <emoji name="lips" unicode="&#x1f444;"/> <emoji name="lips" unicode="&#x1f444;"/> from "lips"<linebreak/> + <emoji name="lipstick" unicode="&#x1f484;"/> <emoji name="lipstick" unicode="&#x1f484;"/> from "lipstick"<linebreak/> + <emoji name="lithuania" unicode="&#x1f1f1;&#x1f1f9;"/> <emoji name="lithuania" unicode="&#x1f1f1;&#x1f1f9;"/> from "lithuania"<linebreak/> + <emoji name="lizard" unicode="&#x1f98e;"/> <emoji name="lizard" unicode="&#x1f98e;"/> from "lizard"<linebreak/> + <emoji name="lock" unicode="&#x1f512;"/> <emoji name="lock" unicode="&#x1f512;"/> from "lock"<linebreak/> + <emoji name="lock_with_ink_pen" unicode="&#x1f50f;"/> <emoji name="lock_with_ink_pen" unicode="&#x1f50f;"/> from "lock_with_ink_pen"<linebreak/> + <emoji name="lollipop" unicode="&#x1f36d;"/> <emoji name="lollipop" unicode="&#x1f36d;"/> from "lollipop"<linebreak/> + <emoji name="loop" unicode="&#x27bf;"/> <emoji name="loop" unicode="&#x27bf;"/> from "loop"<linebreak/> + <emoji name="loud_sound" unicode="&#x1f50a;"/> <emoji name="loud_sound" unicode="&#x1f50a;"/> from "loud_sound"<linebreak/> + <emoji name="loudspeaker" unicode="&#x1f4e2;"/> <emoji name="loudspeaker" unicode="&#x1f4e2;"/> from "loudspeaker"<linebreak/> + <emoji name="love_hotel" unicode="&#x1f3e9;"/> <emoji name="love_hotel" unicode="&#x1f3e9;"/> from "love_hotel"<linebreak/> + <emoji name="love_letter" unicode="&#x1f48c;"/> <emoji name="love_letter" unicode="&#x1f48c;"/> from "love_letter"<linebreak/> + <emoji name="low_brightness" unicode="&#x1f505;"/> <emoji name="low_brightness" unicode="&#x1f505;"/> from "low_brightness"<linebreak/> + <emoji name="luxembourg" unicode="&#x1f1f1;&#x1f1fa;"/> <emoji name="luxembourg" unicode="&#x1f1f1;&#x1f1fa;"/> from "luxembourg"<linebreak/> + <emoji name="lying_face" unicode="&#x1f925;"/> <emoji name="lying_face" unicode="&#x1f925;"/> from "lying_face"<linebreak/> + <emoji name="m" unicode="&#x24c2;"/> <emoji name="m" unicode="&#x24c2;"/> from "m"<linebreak/> + <emoji name="macau" unicode="&#x1f1f2;&#x1f1f4;"/> <emoji name="macau" unicode="&#x1f1f2;&#x1f1f4;"/> from "macau"<linebreak/> + <emoji name="macedonia" unicode="&#x1f1f2;&#x1f1f0;"/> <emoji name="macedonia" unicode="&#x1f1f2;&#x1f1f0;"/> from "macedonia"<linebreak/> + <emoji name="madagascar" unicode="&#x1f1f2;&#x1f1ec;"/> <emoji name="madagascar" unicode="&#x1f1f2;&#x1f1ec;"/> from "madagascar"<linebreak/> + <emoji name="mag" unicode="&#x1f50d;"/> <emoji name="mag" unicode="&#x1f50d;"/> from "mag"<linebreak/> + <emoji name="mag_right" unicode="&#x1f50e;"/> <emoji name="mag_right" unicode="&#x1f50e;"/> from "mag_right"<linebreak/> + <emoji name="mahjong" unicode="&#x1f004;"/> <emoji name="mahjong" unicode="&#x1f004;"/> from "mahjong"<linebreak/> + <emoji name="mailbox" unicode="&#x1f4eb;"/> <emoji name="mailbox" unicode="&#x1f4eb;"/> from "mailbox"<linebreak/> + <emoji name="mailbox_closed" unicode="&#x1f4ea;"/> <emoji name="mailbox_closed" unicode="&#x1f4ea;"/> from "mailbox_closed"<linebreak/> + <emoji name="mailbox_with_mail" unicode="&#x1f4ec;"/> <emoji name="mailbox_with_mail" unicode="&#x1f4ec;"/> from "mailbox_with_mail"<linebreak/> + <emoji name="mailbox_with_no_mail" unicode="&#x1f4ed;"/> <emoji name="mailbox_with_no_mail" unicode="&#x1f4ed;"/> from "mailbox_with_no_mail"<linebreak/> + <emoji name="malawi" unicode="&#x1f1f2;&#x1f1fc;"/> <emoji name="malawi" unicode="&#x1f1f2;&#x1f1fc;"/> from "malawi"<linebreak/> + <emoji name="malaysia" unicode="&#x1f1f2;&#x1f1fe;"/> <emoji name="malaysia" unicode="&#x1f1f2;&#x1f1fe;"/> from "malaysia"<linebreak/> + <emoji name="maldives" unicode="&#x1f1f2;&#x1f1fb;"/> <emoji name="maldives" unicode="&#x1f1f2;&#x1f1fb;"/> from "maldives"<linebreak/> + <emoji name="male_detective" unicode="&#x1f575;"/> <emoji name="male_detective" unicode="&#x1f575;"/> from "male_detective"<linebreak/> + <emoji name="mali" unicode="&#x1f1f2;&#x1f1f1;"/> <emoji name="mali" unicode="&#x1f1f2;&#x1f1f1;"/> from "mali"<linebreak/> + <emoji name="malta" unicode="&#x1f1f2;&#x1f1f9;"/> <emoji name="malta" unicode="&#x1f1f2;&#x1f1f9;"/> from "malta"<linebreak/> + <emoji name="man" unicode="&#x1f468;"/> <emoji name="man" unicode="&#x1f468;"/> from "man"<linebreak/> + <emoji name="man_artist" unicode="&#x1f468;&#x1f3a8;"/> <emoji name="man_artist" unicode="&#x1f468;&#x1f3a8;"/> from "man_artist"<linebreak/> + <emoji name="man_astronaut" unicode="&#x1f468;&#x1f680;"/> <emoji name="man_astronaut" unicode="&#x1f468;&#x1f680;"/> from "man_astronaut"<linebreak/> + <emoji name="man_cartwheeling" unicode="&#x1f938;&#x2642;"/> <emoji name="man_cartwheeling" unicode="&#x1f938;&#x2642;"/> from "man_cartwheeling"<linebreak/> + <emoji name="man_cook" unicode="&#x1f468;&#x1f373;"/> <emoji name="man_cook" unicode="&#x1f468;&#x1f373;"/> from "man_cook"<linebreak/> + <emoji name="man_dancing" unicode="&#x1f57a;"/> <emoji name="man_dancing" unicode="&#x1f57a;"/> from "man_dancing"<linebreak/> + <emoji name="man_facepalming" unicode="&#x1f926;&#x2642;"/> <emoji name="man_facepalming" unicode="&#x1f926;&#x2642;"/> from "man_facepalming"<linebreak/> + <emoji name="man_factory_worker" unicode="&#x1f468;&#x1f3ed;"/> <emoji name="man_factory_worker" unicode="&#x1f468;&#x1f3ed;"/> from "man_factory_worker"<linebreak/> + <emoji name="man_farmer" unicode="&#x1f468;&#x1f33e;"/> <emoji name="man_farmer" unicode="&#x1f468;&#x1f33e;"/> from "man_farmer"<linebreak/> + <emoji name="man_firefighter" unicode="&#x1f468;&#x1f692;"/> <emoji name="man_firefighter" unicode="&#x1f468;&#x1f692;"/> from "man_firefighter"<linebreak/> + <emoji name="man_health_worker" unicode="&#x1f468;&#x2695;"/> <emoji name="man_health_worker" unicode="&#x1f468;&#x2695;"/> from "man_health_worker"<linebreak/> + <emoji name="man_in_tuxedo" unicode="&#x1f935;"/> <emoji name="man_in_tuxedo" unicode="&#x1f935;"/> from "man_in_tuxedo"<linebreak/> + <emoji name="man_judge" unicode="&#x1f468;&#x2696;"/> <emoji name="man_judge" unicode="&#x1f468;&#x2696;"/> from "man_judge"<linebreak/> + <emoji name="man_juggling" unicode="&#x1f939;&#x2642;"/> <emoji name="man_juggling" unicode="&#x1f939;&#x2642;"/> from "man_juggling"<linebreak/> + <emoji name="man_mechanic" unicode="&#x1f468;&#x1f527;"/> <emoji name="man_mechanic" unicode="&#x1f468;&#x1f527;"/> from "man_mechanic"<linebreak/> + <emoji name="man_office_worker" unicode="&#x1f468;&#x1f4bc;"/> <emoji name="man_office_worker" unicode="&#x1f468;&#x1f4bc;"/> from "man_office_worker"<linebreak/> + <emoji name="man_pilot" unicode="&#x1f468;&#x2708;"/> <emoji name="man_pilot" unicode="&#x1f468;&#x2708;"/> from "man_pilot"<linebreak/> + <emoji name="man_playing_handball" unicode="&#x1f93e;&#x2642;"/> <emoji name="man_playing_handball" unicode="&#x1f93e;&#x2642;"/> from "man_playing_handball"<linebreak/> + <emoji name="man_playing_water_polo" unicode="&#x1f93d;&#x2642;"/> <emoji name="man_playing_water_polo" unicode="&#x1f93d;&#x2642;"/> from "man_playing_water_polo"<linebreak/> + <emoji name="man_scientist" unicode="&#x1f468;&#x1f52c;"/> <emoji name="man_scientist" unicode="&#x1f468;&#x1f52c;"/> from "man_scientist"<linebreak/> + <emoji name="man_shrugging" unicode="&#x1f937;&#x2642;"/> <emoji name="man_shrugging" unicode="&#x1f937;&#x2642;"/> from "man_shrugging"<linebreak/> + <emoji name="man_singer" unicode="&#x1f468;&#x1f3a4;"/> <emoji name="man_singer" unicode="&#x1f468;&#x1f3a4;"/> from "man_singer"<linebreak/> + <emoji name="man_student" unicode="&#x1f468;&#x1f393;"/> <emoji name="man_student" unicode="&#x1f468;&#x1f393;"/> from "man_student"<linebreak/> + <emoji name="man_teacher" unicode="&#x1f468;&#x1f3eb;"/> <emoji name="man_teacher" unicode="&#x1f468;&#x1f3eb;"/> from "man_teacher"<linebreak/> + <emoji name="man_technologist" unicode="&#x1f468;&#x1f4bb;"/> <emoji name="man_technologist" unicode="&#x1f468;&#x1f4bb;"/> from "man_technologist"<linebreak/> + <emoji name="man_with_gua_pi_mao" unicode="&#x1f472;"/> <emoji name="man_with_gua_pi_mao" unicode="&#x1f472;"/> from "man_with_gua_pi_mao"<linebreak/> + <emoji name="man_with_turban" unicode="&#x1f473;"/> <emoji name="man_with_turban" unicode="&#x1f473;"/> from "man_with_turban"<linebreak/> + <emoji name="mandarin" unicode="&#x1f34a;"/> <emoji name="mandarin" unicode="&#x1f34a;"/> from "mandarin"<linebreak/> + <emoji name="mans_shoe" unicode="&#x1f45e;"/> <emoji name="mans_shoe" unicode="&#x1f45e;"/> from "mans_shoe"<linebreak/> + <emoji name="mantelpiece_clock" unicode="&#x1f570;"/> <emoji name="mantelpiece_clock" unicode="&#x1f570;"/> from "mantelpiece_clock"<linebreak/> + <emoji name="maple_leaf" unicode="&#x1f341;"/> <emoji name="maple_leaf" unicode="&#x1f341;"/> from "maple_leaf"<linebreak/> + <emoji name="marshall_islands" unicode="&#x1f1f2;&#x1f1ed;"/> <emoji name="marshall_islands" unicode="&#x1f1f2;&#x1f1ed;"/> from "marshall_islands"<linebreak/> + <emoji name="martial_arts_uniform" unicode="&#x1f94b;"/> <emoji name="martial_arts_uniform" unicode="&#x1f94b;"/> from "martial_arts_uniform"<linebreak/> + <emoji name="martinique" unicode="&#x1f1f2;&#x1f1f6;"/> <emoji name="martinique" unicode="&#x1f1f2;&#x1f1f6;"/> from "martinique"<linebreak/> + <emoji name="mask" unicode="&#x1f637;"/> <emoji name="mask" unicode="&#x1f637;"/> from "mask"<linebreak/> + <emoji name="massage" unicode="&#x1f486;"/> <emoji name="massage" unicode="&#x1f486;"/> from "massage"<linebreak/> + <emoji name="massage_man" unicode="&#x1f486;&#x2642;"/> <emoji name="massage_man" unicode="&#x1f486;&#x2642;"/> from "massage_man"<linebreak/> + <emoji name="massage_woman" unicode="&#x1f486;"/> <emoji name="massage_woman" unicode="&#x1f486;"/> from "massage_woman"<linebreak/> + <emoji name="mauritania" unicode="&#x1f1f2;&#x1f1f7;"/> <emoji name="mauritania" unicode="&#x1f1f2;&#x1f1f7;"/> from "mauritania"<linebreak/> + <emoji name="mauritius" unicode="&#x1f1f2;&#x1f1fa;"/> <emoji name="mauritius" unicode="&#x1f1f2;&#x1f1fa;"/> from "mauritius"<linebreak/> + <emoji name="mayotte" unicode="&#x1f1fe;&#x1f1f9;"/> <emoji name="mayotte" unicode="&#x1f1fe;&#x1f1f9;"/> from "mayotte"<linebreak/> + <emoji name="meat_on_bone" unicode="&#x1f356;"/> <emoji name="meat_on_bone" unicode="&#x1f356;"/> from "meat_on_bone"<linebreak/> + <emoji name="medal_military" unicode="&#x1f396;"/> <emoji name="medal_military" unicode="&#x1f396;"/> from "medal_military"<linebreak/> + <emoji name="medal_sports" unicode="&#x1f3c5;"/> <emoji name="medal_sports" unicode="&#x1f3c5;"/> from "medal_sports"<linebreak/> + <emoji name="mega" unicode="&#x1f4e3;"/> <emoji name="mega" unicode="&#x1f4e3;"/> from "mega"<linebreak/> + <emoji name="melon" unicode="&#x1f348;"/> <emoji name="melon" unicode="&#x1f348;"/> from "melon"<linebreak/> + <emoji name="memo" unicode="&#x1f4dd;"/> <emoji name="memo" unicode="&#x1f4dd;"/> from "memo"<linebreak/> + <emoji name="men_wrestling" unicode="&#x1f93c;&#x2642;"/> <emoji name="men_wrestling" unicode="&#x1f93c;&#x2642;"/> from "men_wrestling"<linebreak/> + <emoji name="menorah" unicode="&#x1f54e;"/> <emoji name="menorah" unicode="&#x1f54e;"/> from "menorah"<linebreak/> + <emoji name="mens" unicode="&#x1f6b9;"/> <emoji name="mens" unicode="&#x1f6b9;"/> from "mens"<linebreak/> + <emoji name="metal" unicode="&#x1f918;"/> <emoji name="metal" unicode="&#x1f918;"/> from "metal"<linebreak/> + <emoji name="metro" unicode="&#x1f687;"/> <emoji name="metro" unicode="&#x1f687;"/> from "metro"<linebreak/> + <emoji name="mexico" unicode="&#x1f1f2;&#x1f1fd;"/> <emoji name="mexico" unicode="&#x1f1f2;&#x1f1fd;"/> from "mexico"<linebreak/> + <emoji name="micronesia" unicode="&#x1f1eb;&#x1f1f2;"/> <emoji name="micronesia" unicode="&#x1f1eb;&#x1f1f2;"/> from "micronesia"<linebreak/> + <emoji name="microphone" unicode="&#x1f3a4;"/> <emoji name="microphone" unicode="&#x1f3a4;"/> from "microphone"<linebreak/> + <emoji name="microscope" unicode="&#x1f52c;"/> <emoji name="microscope" unicode="&#x1f52c;"/> from "microscope"<linebreak/> + <emoji name="middle_finger" unicode="&#x1f595;"/> <emoji name="middle_finger" unicode="&#x1f595;"/> from "middle_finger"<linebreak/> + <emoji name="milk_glass" unicode="&#x1f95b;"/> <emoji name="milk_glass" unicode="&#x1f95b;"/> from "milk_glass"<linebreak/> + <emoji name="milky_way" unicode="&#x1f30c;"/> <emoji name="milky_way" unicode="&#x1f30c;"/> from "milky_way"<linebreak/> + <emoji name="minibus" unicode="&#x1f690;"/> <emoji name="minibus" unicode="&#x1f690;"/> from "minibus"<linebreak/> + <emoji name="minidisc" unicode="&#x1f4bd;"/> <emoji name="minidisc" unicode="&#x1f4bd;"/> from "minidisc"<linebreak/> + <emoji name="mobile_phone_off" unicode="&#x1f4f4;"/> <emoji name="mobile_phone_off" unicode="&#x1f4f4;"/> from "mobile_phone_off"<linebreak/> + <emoji name="moldova" unicode="&#x1f1f2;&#x1f1e9;"/> <emoji name="moldova" unicode="&#x1f1f2;&#x1f1e9;"/> from "moldova"<linebreak/> + <emoji name="monaco" unicode="&#x1f1f2;&#x1f1e8;"/> <emoji name="monaco" unicode="&#x1f1f2;&#x1f1e8;"/> from "monaco"<linebreak/> + <emoji name="money_mouth_face" unicode="&#x1f911;"/> <emoji name="money_mouth_face" unicode="&#x1f911;"/> from "money_mouth_face"<linebreak/> + <emoji name="money_with_wings" unicode="&#x1f4b8;"/> <emoji name="money_with_wings" unicode="&#x1f4b8;"/> from "money_with_wings"<linebreak/> + <emoji name="moneybag" unicode="&#x1f4b0;"/> <emoji name="moneybag" unicode="&#x1f4b0;"/> from "moneybag"<linebreak/> + <emoji name="mongolia" unicode="&#x1f1f2;&#x1f1f3;"/> <emoji name="mongolia" unicode="&#x1f1f2;&#x1f1f3;"/> from "mongolia"<linebreak/> + <emoji name="monkey" unicode="&#x1f412;"/> <emoji name="monkey" unicode="&#x1f412;"/> from "monkey"<linebreak/> + <emoji name="monkey_face" unicode="&#x1f435;"/> <emoji name="monkey_face" unicode="&#x1f435;"/> from "monkey_face"<linebreak/> + <emoji name="monorail" unicode="&#x1f69d;"/> <emoji name="monorail" unicode="&#x1f69d;"/> from "monorail"<linebreak/> + <emoji name="montenegro" unicode="&#x1f1f2;&#x1f1ea;"/> <emoji name="montenegro" unicode="&#x1f1f2;&#x1f1ea;"/> from "montenegro"<linebreak/> + <emoji name="montserrat" unicode="&#x1f1f2;&#x1f1f8;"/> <emoji name="montserrat" unicode="&#x1f1f2;&#x1f1f8;"/> from "montserrat"<linebreak/> + <emoji name="moon" unicode="&#x1f314;"/> <emoji name="moon" unicode="&#x1f314;"/> from "moon"<linebreak/> + <emoji name="morocco" unicode="&#x1f1f2;&#x1f1e6;"/> <emoji name="morocco" unicode="&#x1f1f2;&#x1f1e6;"/> from "morocco"<linebreak/> + <emoji name="mortar_board" unicode="&#x1f393;"/> <emoji name="mortar_board" unicode="&#x1f393;"/> from "mortar_board"<linebreak/> + <emoji name="mosque" unicode="&#x1f54c;"/> <emoji name="mosque" unicode="&#x1f54c;"/> from "mosque"<linebreak/> + <emoji name="motor_boat" unicode="&#x1f6e5;"/> <emoji name="motor_boat" unicode="&#x1f6e5;"/> from "motor_boat"<linebreak/> + <emoji name="motor_scooter" unicode="&#x1f6f5;"/> <emoji name="motor_scooter" unicode="&#x1f6f5;"/> from "motor_scooter"<linebreak/> + <emoji name="motorcycle" unicode="&#x1f3cd;"/> <emoji name="motorcycle" unicode="&#x1f3cd;"/> from "motorcycle"<linebreak/> + <emoji name="motorway" unicode="&#x1f6e3;"/> <emoji name="motorway" unicode="&#x1f6e3;"/> from "motorway"<linebreak/> + <emoji name="mount_fuji" unicode="&#x1f5fb;"/> <emoji name="mount_fuji" unicode="&#x1f5fb;"/> from "mount_fuji"<linebreak/> + <emoji name="mountain" unicode="&#x26f0;"/> <emoji name="mountain" unicode="&#x26f0;"/> from "mountain"<linebreak/> + <emoji name="mountain_bicyclist" unicode="&#x1f6b5;"/> <emoji name="mountain_bicyclist" unicode="&#x1f6b5;"/> from "mountain_bicyclist"<linebreak/> + <emoji name="mountain_biking_man" unicode="&#x1f6b5;"/> <emoji name="mountain_biking_man" unicode="&#x1f6b5;"/> from "mountain_biking_man"<linebreak/> + <emoji name="mountain_biking_woman" unicode="&#x1f6b5;&#x2640;"/> <emoji name="mountain_biking_woman" unicode="&#x1f6b5;&#x2640;"/> from "mountain_biking_woman"<linebreak/> + <emoji name="mountain_cableway" unicode="&#x1f6a0;"/> <emoji name="mountain_cableway" unicode="&#x1f6a0;"/> from "mountain_cableway"<linebreak/> + <emoji name="mountain_railway" unicode="&#x1f69e;"/> <emoji name="mountain_railway" unicode="&#x1f69e;"/> from "mountain_railway"<linebreak/> + <emoji name="mountain_snow" unicode="&#x1f3d4;"/> <emoji name="mountain_snow" unicode="&#x1f3d4;"/> from "mountain_snow"<linebreak/> + <emoji name="mouse" unicode="&#x1f42d;"/> <emoji name="mouse" unicode="&#x1f42d;"/> from "mouse"<linebreak/> + <emoji name="mouse2" unicode="&#x1f401;"/> <emoji name="mouse2" unicode="&#x1f401;"/> from "mouse2"<linebreak/> + <emoji name="movie_camera" unicode="&#x1f3a5;"/> <emoji name="movie_camera" unicode="&#x1f3a5;"/> from "movie_camera"<linebreak/> + <emoji name="moyai" unicode="&#x1f5ff;"/> <emoji name="moyai" unicode="&#x1f5ff;"/> from "moyai"<linebreak/> + <emoji name="mozambique" unicode="&#x1f1f2;&#x1f1ff;"/> <emoji name="mozambique" unicode="&#x1f1f2;&#x1f1ff;"/> from "mozambique"<linebreak/> + <emoji name="mrs_claus" unicode="&#x1f936;"/> <emoji name="mrs_claus" unicode="&#x1f936;"/> from "mrs_claus"<linebreak/> + <emoji name="muscle" unicode="&#x1f4aa;"/> <emoji name="muscle" unicode="&#x1f4aa;"/> from "muscle"<linebreak/> + <emoji name="mushroom" unicode="&#x1f344;"/> <emoji name="mushroom" unicode="&#x1f344;"/> from "mushroom"<linebreak/> + <emoji name="musical_keyboard" unicode="&#x1f3b9;"/> <emoji name="musical_keyboard" unicode="&#x1f3b9;"/> from "musical_keyboard"<linebreak/> + <emoji name="musical_note" unicode="&#x1f3b5;"/> <emoji name="musical_note" unicode="&#x1f3b5;"/> from "musical_note"<linebreak/> + <emoji name="musical_score" unicode="&#x1f3bc;"/> <emoji name="musical_score" unicode="&#x1f3bc;"/> from "musical_score"<linebreak/> + <emoji name="mute" unicode="&#x1f507;"/> <emoji name="mute" unicode="&#x1f507;"/> from "mute"<linebreak/> + <emoji name="myanmar" unicode="&#x1f1f2;&#x1f1f2;"/> <emoji name="myanmar" unicode="&#x1f1f2;&#x1f1f2;"/> from "myanmar"<linebreak/> + <emoji name="nail_care" unicode="&#x1f485;"/> <emoji name="nail_care" unicode="&#x1f485;"/> from "nail_care"<linebreak/> + <emoji name="name_badge" unicode="&#x1f4db;"/> <emoji name="name_badge" unicode="&#x1f4db;"/> from "name_badge"<linebreak/> + <emoji name="namibia" unicode="&#x1f1f3;&#x1f1e6;"/> <emoji name="namibia" unicode="&#x1f1f3;&#x1f1e6;"/> from "namibia"<linebreak/> + <emoji name="national_park" unicode="&#x1f3de;"/> <emoji name="national_park" unicode="&#x1f3de;"/> from "national_park"<linebreak/> + <emoji name="nauru" unicode="&#x1f1f3;&#x1f1f7;"/> <emoji name="nauru" unicode="&#x1f1f3;&#x1f1f7;"/> from "nauru"<linebreak/> + <emoji name="nauseated_face" unicode="&#x1f922;"/> <emoji name="nauseated_face" unicode="&#x1f922;"/> from "nauseated_face"<linebreak/> + <emoji name="necktie" unicode="&#x1f454;"/> <emoji name="necktie" unicode="&#x1f454;"/> from "necktie"<linebreak/> + <emoji name="negative_squared_cross_mark" unicode="&#x274e;"/> <emoji name="negative_squared_cross_mark" unicode="&#x274e;"/> from "negative_squared_cross_mark"<linebreak/> + <emoji name="nepal" unicode="&#x1f1f3;&#x1f1f5;"/> <emoji name="nepal" unicode="&#x1f1f3;&#x1f1f5;"/> from "nepal"<linebreak/> + <emoji name="nerd_face" unicode="&#x1f913;"/> <emoji name="nerd_face" unicode="&#x1f913;"/> from "nerd_face"<linebreak/> + <emoji name="netherlands" unicode="&#x1f1f3;&#x1f1f1;"/> <emoji name="netherlands" unicode="&#x1f1f3;&#x1f1f1;"/> from "netherlands"<linebreak/> + <emoji name="neutral_face" unicode="&#x1f610;"/> <emoji name="neutral_face" unicode="&#x1f610;"/> from "neutral_face"<linebreak/> + <emoji name="new" unicode="&#x1f195;"/> <emoji name="new" unicode="&#x1f195;"/> from "new"<linebreak/> + <emoji name="new_caledonia" unicode="&#x1f1f3;&#x1f1e8;"/> <emoji name="new_caledonia" unicode="&#x1f1f3;&#x1f1e8;"/> from "new_caledonia"<linebreak/> + <emoji name="new_moon" unicode="&#x1f311;"/> <emoji name="new_moon" unicode="&#x1f311;"/> from "new_moon"<linebreak/> + <emoji name="new_moon_with_face" unicode="&#x1f31a;"/> <emoji name="new_moon_with_face" unicode="&#x1f31a;"/> from "new_moon_with_face"<linebreak/> + <emoji name="new_zealand" unicode="&#x1f1f3;&#x1f1ff;"/> <emoji name="new_zealand" unicode="&#x1f1f3;&#x1f1ff;"/> from "new_zealand"<linebreak/> + <emoji name="newspaper" unicode="&#x1f4f0;"/> <emoji name="newspaper" unicode="&#x1f4f0;"/> from "newspaper"<linebreak/> + <emoji name="newspaper_roll" unicode="&#x1f5de;"/> <emoji name="newspaper_roll" unicode="&#x1f5de;"/> from "newspaper_roll"<linebreak/> + <emoji name="next_track_button" unicode="&#x23ed;"/> <emoji name="next_track_button" unicode="&#x23ed;"/> from "next_track_button"<linebreak/> + <emoji name="ng" unicode="&#x1f196;"/> <emoji name="ng" unicode="&#x1f196;"/> from "ng"<linebreak/> + <emoji name="ng_man" unicode="&#x1f645;&#x2642;"/> <emoji name="ng_man" unicode="&#x1f645;&#x2642;"/> from "ng_man"<linebreak/> + <emoji name="ng_woman" unicode="&#x1f645;"/> <emoji name="ng_woman" unicode="&#x1f645;"/> from "ng_woman"<linebreak/> + <emoji name="nicaragua" unicode="&#x1f1f3;&#x1f1ee;"/> <emoji name="nicaragua" unicode="&#x1f1f3;&#x1f1ee;"/> from "nicaragua"<linebreak/> + <emoji name="niger" unicode="&#x1f1f3;&#x1f1ea;"/> <emoji name="niger" unicode="&#x1f1f3;&#x1f1ea;"/> from "niger"<linebreak/> + <emoji name="nigeria" unicode="&#x1f1f3;&#x1f1ec;"/> <emoji name="nigeria" unicode="&#x1f1f3;&#x1f1ec;"/> from "nigeria"<linebreak/> + <emoji name="night_with_stars" unicode="&#x1f303;"/> <emoji name="night_with_stars" unicode="&#x1f303;"/> from "night_with_stars"<linebreak/> + <emoji name="nine" unicode="&#x0039;&#x20e3;"/> <emoji name="nine" unicode="&#x0039;&#x20e3;"/> from "nine"<linebreak/> + <emoji name="niue" unicode="&#x1f1f3;&#x1f1fa;"/> <emoji name="niue" unicode="&#x1f1f3;&#x1f1fa;"/> from "niue"<linebreak/> + <emoji name="no_bell" unicode="&#x1f515;"/> <emoji name="no_bell" unicode="&#x1f515;"/> from "no_bell"<linebreak/> + <emoji name="no_bicycles" unicode="&#x1f6b3;"/> <emoji name="no_bicycles" unicode="&#x1f6b3;"/> from "no_bicycles"<linebreak/> + <emoji name="no_entry" unicode="&#x26d4;"/> <emoji name="no_entry" unicode="&#x26d4;"/> from "no_entry"<linebreak/> + <emoji name="no_entry_sign" unicode="&#x1f6ab;"/> <emoji name="no_entry_sign" unicode="&#x1f6ab;"/> from "no_entry_sign"<linebreak/> + <emoji name="no_good" unicode="&#x1f645;"/> <emoji name="no_good" unicode="&#x1f645;"/> from "no_good"<linebreak/> + <emoji name="no_good_man" unicode="&#x1f645;&#x2642;"/> <emoji name="no_good_man" unicode="&#x1f645;&#x2642;"/> from "no_good_man"<linebreak/> + <emoji name="no_good_woman" unicode="&#x1f645;"/> <emoji name="no_good_woman" unicode="&#x1f645;"/> from "no_good_woman"<linebreak/> + <emoji name="no_mobile_phones" unicode="&#x1f4f5;"/> <emoji name="no_mobile_phones" unicode="&#x1f4f5;"/> from "no_mobile_phones"<linebreak/> + <emoji name="no_mouth" unicode="&#x1f636;"/> <emoji name="no_mouth" unicode="&#x1f636;"/> from "no_mouth"<linebreak/> + <emoji name="no_pedestrians" unicode="&#x1f6b7;"/> <emoji name="no_pedestrians" unicode="&#x1f6b7;"/> from "no_pedestrians"<linebreak/> + <emoji name="no_smoking" unicode="&#x1f6ad;"/> <emoji name="no_smoking" unicode="&#x1f6ad;"/> from "no_smoking"<linebreak/> + <emoji name="non-potable_water" unicode="&#x1f6b1;"/> <emoji name="non-potable_water" unicode="&#x1f6b1;"/> from "non-potable_water"<linebreak/> + <emoji name="norfolk_island" unicode="&#x1f1f3;&#x1f1eb;"/> <emoji name="norfolk_island" unicode="&#x1f1f3;&#x1f1eb;"/> from "norfolk_island"<linebreak/> + <emoji name="north_korea" unicode="&#x1f1f0;&#x1f1f5;"/> <emoji name="north_korea" unicode="&#x1f1f0;&#x1f1f5;"/> from "north_korea"<linebreak/> + <emoji name="northern_mariana_islands" unicode="&#x1f1f2;&#x1f1f5;"/> <emoji name="northern_mariana_islands" unicode="&#x1f1f2;&#x1f1f5;"/> from "northern_mariana_islands"<linebreak/> + <emoji name="norway" unicode="&#x1f1f3;&#x1f1f4;"/> <emoji name="norway" unicode="&#x1f1f3;&#x1f1f4;"/> from "norway"<linebreak/> + <emoji name="nose" unicode="&#x1f443;"/> <emoji name="nose" unicode="&#x1f443;"/> from "nose"<linebreak/> + <emoji name="notebook" unicode="&#x1f4d3;"/> <emoji name="notebook" unicode="&#x1f4d3;"/> from "notebook"<linebreak/> + <emoji name="notebook_with_decorative_cover" unicode="&#x1f4d4;"/> <emoji name="notebook_with_decorative_cover" unicode="&#x1f4d4;"/> from "notebook_with_decorative_cover"<linebreak/> + <emoji name="notes" unicode="&#x1f3b6;"/> <emoji name="notes" unicode="&#x1f3b6;"/> from "notes"<linebreak/> + <emoji name="nut_and_bolt" unicode="&#x1f529;"/> <emoji name="nut_and_bolt" unicode="&#x1f529;"/> from "nut_and_bolt"<linebreak/> + <emoji name="o" unicode="&#x2b55;"/> <emoji name="o" unicode="&#x2b55;"/> from "o"<linebreak/> + <emoji name="o2" unicode="&#x1f17e;"/> <emoji name="o2" unicode="&#x1f17e;"/> from "o2"<linebreak/> + <emoji name="ocean" unicode="&#x1f30a;"/> <emoji name="ocean" unicode="&#x1f30a;"/> from "ocean"<linebreak/> + <emoji name="octopus" unicode="&#x1f419;"/> <emoji name="octopus" unicode="&#x1f419;"/> from "octopus"<linebreak/> + <emoji name="oden" unicode="&#x1f362;"/> <emoji name="oden" unicode="&#x1f362;"/> from "oden"<linebreak/> + <emoji name="office" unicode="&#x1f3e2;"/> <emoji name="office" unicode="&#x1f3e2;"/> from "office"<linebreak/> + <emoji name="oil_drum" unicode="&#x1f6e2;"/> <emoji name="oil_drum" unicode="&#x1f6e2;"/> from "oil_drum"<linebreak/> + <emoji name="ok" unicode="&#x1f197;"/> <emoji name="ok" unicode="&#x1f197;"/> from "ok"<linebreak/> + <emoji name="ok_hand" unicode="&#x1f44c;"/> <emoji name="ok_hand" unicode="&#x1f44c;"/> from "ok_hand"<linebreak/> + <emoji name="ok_man" unicode="&#x1f646;&#x2642;"/> <emoji name="ok_man" unicode="&#x1f646;&#x2642;"/> from "ok_man"<linebreak/> + <emoji name="ok_woman" unicode="&#x1f646;"/> <emoji name="ok_woman" unicode="&#x1f646;"/> from "ok_woman"<linebreak/> + <emoji name="old_key" unicode="&#x1f5dd;"/> <emoji name="old_key" unicode="&#x1f5dd;"/> from "old_key"<linebreak/> + <emoji name="older_man" unicode="&#x1f474;"/> <emoji name="older_man" unicode="&#x1f474;"/> from "older_man"<linebreak/> + <emoji name="older_woman" unicode="&#x1f475;"/> <emoji name="older_woman" unicode="&#x1f475;"/> from "older_woman"<linebreak/> + <emoji name="om" unicode="&#x1f549;"/> <emoji name="om" unicode="&#x1f549;"/> from "om"<linebreak/> + <emoji name="oman" unicode="&#x1f1f4;&#x1f1f2;"/> <emoji name="oman" unicode="&#x1f1f4;&#x1f1f2;"/> from "oman"<linebreak/> + <emoji name="on" unicode="&#x1f51b;"/> <emoji name="on" unicode="&#x1f51b;"/> from "on"<linebreak/> + <emoji name="oncoming_automobile" unicode="&#x1f698;"/> <emoji name="oncoming_automobile" unicode="&#x1f698;"/> from "oncoming_automobile"<linebreak/> + <emoji name="oncoming_bus" unicode="&#x1f68d;"/> <emoji name="oncoming_bus" unicode="&#x1f68d;"/> from "oncoming_bus"<linebreak/> + <emoji name="oncoming_police_car" unicode="&#x1f694;"/> <emoji name="oncoming_police_car" unicode="&#x1f694;"/> from "oncoming_police_car"<linebreak/> + <emoji name="oncoming_taxi" unicode="&#x1f696;"/> <emoji name="oncoming_taxi" unicode="&#x1f696;"/> from "oncoming_taxi"<linebreak/> + <emoji name="one" unicode="&#x0031;&#x20e3;"/> <emoji name="one" unicode="&#x0031;&#x20e3;"/> from "one"<linebreak/> + <emoji name="open_book" unicode="&#x1f4d6;"/> <emoji name="open_book" unicode="&#x1f4d6;"/> from "open_book"<linebreak/> + <emoji name="open_file_folder" unicode="&#x1f4c2;"/> <emoji name="open_file_folder" unicode="&#x1f4c2;"/> from "open_file_folder"<linebreak/> + <emoji name="open_hands" unicode="&#x1f450;"/> <emoji name="open_hands" unicode="&#x1f450;"/> from "open_hands"<linebreak/> + <emoji name="open_mouth" unicode="&#x1f62e;"/> <emoji name="open_mouth" unicode="&#x1f62e;"/> from "open_mouth"<linebreak/> + <emoji name="open_umbrella" unicode="&#x2602;"/> <emoji name="open_umbrella" unicode="&#x2602;"/> from "open_umbrella"<linebreak/> + <emoji name="ophiuchus" unicode="&#x26ce;"/> <emoji name="ophiuchus" unicode="&#x26ce;"/> from "ophiuchus"<linebreak/> + <emoji name="orange" unicode="&#x1f34a;"/> <emoji name="orange" unicode="&#x1f34a;"/> from "orange"<linebreak/> + <emoji name="orange_book" unicode="&#x1f4d9;"/> <emoji name="orange_book" unicode="&#x1f4d9;"/> from "orange_book"<linebreak/> + <emoji name="orthodox_cross" unicode="&#x2626;"/> <emoji name="orthodox_cross" unicode="&#x2626;"/> from "orthodox_cross"<linebreak/> + <emoji name="outbox_tray" unicode="&#x1f4e4;"/> <emoji name="outbox_tray" unicode="&#x1f4e4;"/> from "outbox_tray"<linebreak/> + <emoji name="owl" unicode="&#x1f989;"/> <emoji name="owl" unicode="&#x1f989;"/> from "owl"<linebreak/> + <emoji name="ox" unicode="&#x1f402;"/> <emoji name="ox" unicode="&#x1f402;"/> from "ox"<linebreak/> + <emoji name="package" unicode="&#x1f4e6;"/> <emoji name="package" unicode="&#x1f4e6;"/> from "package"<linebreak/> + <emoji name="page_facing_up" unicode="&#x1f4c4;"/> <emoji name="page_facing_up" unicode="&#x1f4c4;"/> from "page_facing_up"<linebreak/> + <emoji name="page_with_curl" unicode="&#x1f4c3;"/> <emoji name="page_with_curl" unicode="&#x1f4c3;"/> from "page_with_curl"<linebreak/> + <emoji name="pager" unicode="&#x1f4df;"/> <emoji name="pager" unicode="&#x1f4df;"/> from "pager"<linebreak/> + <emoji name="paintbrush" unicode="&#x1f58c;"/> <emoji name="paintbrush" unicode="&#x1f58c;"/> from "paintbrush"<linebreak/> + <emoji name="pakistan" unicode="&#x1f1f5;&#x1f1f0;"/> <emoji name="pakistan" unicode="&#x1f1f5;&#x1f1f0;"/> from "pakistan"<linebreak/> + <emoji name="palau" unicode="&#x1f1f5;&#x1f1fc;"/> <emoji name="palau" unicode="&#x1f1f5;&#x1f1fc;"/> from "palau"<linebreak/> + <emoji name="palestinian_territories" unicode="&#x1f1f5;&#x1f1f8;"/> <emoji name="palestinian_territories" unicode="&#x1f1f5;&#x1f1f8;"/> from "palestinian_territories"<linebreak/> + <emoji name="palm_tree" unicode="&#x1f334;"/> <emoji name="palm_tree" unicode="&#x1f334;"/> from "palm_tree"<linebreak/> + <emoji name="panama" unicode="&#x1f1f5;&#x1f1e6;"/> <emoji name="panama" unicode="&#x1f1f5;&#x1f1e6;"/> from "panama"<linebreak/> + <emoji name="pancakes" unicode="&#x1f95e;"/> <emoji name="pancakes" unicode="&#x1f95e;"/> from "pancakes"<linebreak/> + <emoji name="panda_face" unicode="&#x1f43c;"/> <emoji name="panda_face" unicode="&#x1f43c;"/> from "panda_face"<linebreak/> + <emoji name="paperclip" unicode="&#x1f4ce;"/> <emoji name="paperclip" unicode="&#x1f4ce;"/> from "paperclip"<linebreak/> + <emoji name="paperclips" unicode="&#x1f587;"/> <emoji name="paperclips" unicode="&#x1f587;"/> from "paperclips"<linebreak/> + <emoji name="papua_new_guinea" unicode="&#x1f1f5;&#x1f1ec;"/> <emoji name="papua_new_guinea" unicode="&#x1f1f5;&#x1f1ec;"/> from "papua_new_guinea"<linebreak/> + <emoji name="paraguay" unicode="&#x1f1f5;&#x1f1fe;"/> <emoji name="paraguay" unicode="&#x1f1f5;&#x1f1fe;"/> from "paraguay"<linebreak/> + <emoji name="parasol_on_ground" unicode="&#x26f1;"/> <emoji name="parasol_on_ground" unicode="&#x26f1;"/> from "parasol_on_ground"<linebreak/> + <emoji name="parking" unicode="&#x1f17f;"/> <emoji name="parking" unicode="&#x1f17f;"/> from "parking"<linebreak/> + <emoji name="part_alternation_mark" unicode="&#x303d;"/> <emoji name="part_alternation_mark" unicode="&#x303d;"/> from "part_alternation_mark"<linebreak/> + <emoji name="partly_sunny" unicode="&#x26c5;"/> <emoji name="partly_sunny" unicode="&#x26c5;"/> from "partly_sunny"<linebreak/> + <emoji name="passenger_ship" unicode="&#x1f6f3;"/> <emoji name="passenger_ship" unicode="&#x1f6f3;"/> from "passenger_ship"<linebreak/> + <emoji name="passport_control" unicode="&#x1f6c2;"/> <emoji name="passport_control" unicode="&#x1f6c2;"/> from "passport_control"<linebreak/> + <emoji name="pause_button" unicode="&#x23f8;"/> <emoji name="pause_button" unicode="&#x23f8;"/> from "pause_button"<linebreak/> + <emoji name="paw_prints" unicode="&#x1f43e;"/> <emoji name="paw_prints" unicode="&#x1f43e;"/> from "paw_prints"<linebreak/> + <emoji name="peace_symbol" unicode="&#x262e;"/> <emoji name="peace_symbol" unicode="&#x262e;"/> from "peace_symbol"<linebreak/> + <emoji name="peach" unicode="&#x1f351;"/> <emoji name="peach" unicode="&#x1f351;"/> from "peach"<linebreak/> + <emoji name="peanuts" unicode="&#x1f95c;"/> <emoji name="peanuts" unicode="&#x1f95c;"/> from "peanuts"<linebreak/> + <emoji name="pear" unicode="&#x1f350;"/> <emoji name="pear" unicode="&#x1f350;"/> from "pear"<linebreak/> + <emoji name="pen" unicode="&#x1f58a;"/> <emoji name="pen" unicode="&#x1f58a;"/> from "pen"<linebreak/> + <emoji name="pencil" unicode="&#x1f4dd;"/> <emoji name="pencil" unicode="&#x1f4dd;"/> from "pencil"<linebreak/> + <emoji name="pencil2" unicode="&#x270f;"/> <emoji name="pencil2" unicode="&#x270f;"/> from "pencil2"<linebreak/> + <emoji name="penguin" unicode="&#x1f427;"/> <emoji name="penguin" unicode="&#x1f427;"/> from "penguin"<linebreak/> + <emoji name="pensive" unicode="&#x1f614;"/> <emoji name="pensive" unicode="&#x1f614;"/> from "pensive"<linebreak/> + <emoji name="performing_arts" unicode="&#x1f3ad;"/> <emoji name="performing_arts" unicode="&#x1f3ad;"/> from "performing_arts"<linebreak/> + <emoji name="persevere" unicode="&#x1f623;"/> <emoji name="persevere" unicode="&#x1f623;"/> from "persevere"<linebreak/> + <emoji name="person_fencing" unicode="&#x1f93a;"/> <emoji name="person_fencing" unicode="&#x1f93a;"/> from "person_fencing"<linebreak/> + <emoji name="person_frowning" unicode="&#x1f64d;"/> <emoji name="person_frowning" unicode="&#x1f64d;"/> from "person_frowning"<linebreak/> + <emoji name="person_with_blond_hair" unicode="&#x1f471;"/> <emoji name="person_with_blond_hair" unicode="&#x1f471;"/> from "person_with_blond_hair"<linebreak/> + <emoji name="person_with_pouting_face" unicode="&#x1f64e;"/> <emoji name="person_with_pouting_face" unicode="&#x1f64e;"/> from "person_with_pouting_face"<linebreak/> + <emoji name="peru" unicode="&#x1f1f5;&#x1f1ea;"/> <emoji name="peru" unicode="&#x1f1f5;&#x1f1ea;"/> from "peru"<linebreak/> + <emoji name="philippines" unicode="&#x1f1f5;&#x1f1ed;"/> <emoji name="philippines" unicode="&#x1f1f5;&#x1f1ed;"/> from "philippines"<linebreak/> + <emoji name="phone" unicode="&#x260e;"/> <emoji name="phone" unicode="&#x260e;"/> from "phone"<linebreak/> + <emoji name="pick" unicode="&#x26cf;"/> <emoji name="pick" unicode="&#x26cf;"/> from "pick"<linebreak/> + <emoji name="pig" unicode="&#x1f437;"/> <emoji name="pig" unicode="&#x1f437;"/> from "pig"<linebreak/> + <emoji name="pig2" unicode="&#x1f416;"/> <emoji name="pig2" unicode="&#x1f416;"/> from "pig2"<linebreak/> + <emoji name="pig_nose" unicode="&#x1f43d;"/> <emoji name="pig_nose" unicode="&#x1f43d;"/> from "pig_nose"<linebreak/> + <emoji name="pill" unicode="&#x1f48a;"/> <emoji name="pill" unicode="&#x1f48a;"/> from "pill"<linebreak/> + <emoji name="pineapple" unicode="&#x1f34d;"/> <emoji name="pineapple" unicode="&#x1f34d;"/> from "pineapple"<linebreak/> + <emoji name="ping_pong" unicode="&#x1f3d3;"/> <emoji name="ping_pong" unicode="&#x1f3d3;"/> from "ping_pong"<linebreak/> + <emoji name="pisces" unicode="&#x2653;"/> <emoji name="pisces" unicode="&#x2653;"/> from "pisces"<linebreak/> + <emoji name="pitcairn_islands" unicode="&#x1f1f5;&#x1f1f3;"/> <emoji name="pitcairn_islands" unicode="&#x1f1f5;&#x1f1f3;"/> from "pitcairn_islands"<linebreak/> + <emoji name="pizza" unicode="&#x1f355;"/> <emoji name="pizza" unicode="&#x1f355;"/> from "pizza"<linebreak/> + <emoji name="place_of_worship" unicode="&#x1f6d0;"/> <emoji name="place_of_worship" unicode="&#x1f6d0;"/> from "place_of_worship"<linebreak/> + <emoji name="plate_with_cutlery" unicode="&#x1f37d;"/> <emoji name="plate_with_cutlery" unicode="&#x1f37d;"/> from "plate_with_cutlery"<linebreak/> + <emoji name="play_or_pause_button" unicode="&#x23ef;"/> <emoji name="play_or_pause_button" unicode="&#x23ef;"/> from "play_or_pause_button"<linebreak/> + <emoji name="point_down" unicode="&#x1f447;"/> <emoji name="point_down" unicode="&#x1f447;"/> from "point_down"<linebreak/> + <emoji name="point_left" unicode="&#x1f448;"/> <emoji name="point_left" unicode="&#x1f448;"/> from "point_left"<linebreak/> + <emoji name="point_right" unicode="&#x1f449;"/> <emoji name="point_right" unicode="&#x1f449;"/> from "point_right"<linebreak/> + <emoji name="point_up" unicode="&#x261d;"/> <emoji name="point_up" unicode="&#x261d;"/> from "point_up"<linebreak/> + <emoji name="point_up_2" unicode="&#x1f446;"/> <emoji name="point_up_2" unicode="&#x1f446;"/> from "point_up_2"<linebreak/> + <emoji name="poland" unicode="&#x1f1f5;&#x1f1f1;"/> <emoji name="poland" unicode="&#x1f1f5;&#x1f1f1;"/> from "poland"<linebreak/> + <emoji name="police_car" unicode="&#x1f693;"/> <emoji name="police_car" unicode="&#x1f693;"/> from "police_car"<linebreak/> + <emoji name="policeman" unicode="&#x1f46e;"/> <emoji name="policeman" unicode="&#x1f46e;"/> from "policeman"<linebreak/> + <emoji name="policewoman" unicode="&#x1f46e;&#x2640;"/> <emoji name="policewoman" unicode="&#x1f46e;&#x2640;"/> from "policewoman"<linebreak/> + <emoji name="poodle" unicode="&#x1f429;"/> <emoji name="poodle" unicode="&#x1f429;"/> from "poodle"<linebreak/> + <emoji name="poop" unicode="&#x1f4a9;"/> <emoji name="poop" unicode="&#x1f4a9;"/> from "poop"<linebreak/> + <emoji name="popcorn" unicode="&#x1f37f;"/> <emoji name="popcorn" unicode="&#x1f37f;"/> from "popcorn"<linebreak/> + <emoji name="portugal" unicode="&#x1f1f5;&#x1f1f9;"/> <emoji name="portugal" unicode="&#x1f1f5;&#x1f1f9;"/> from "portugal"<linebreak/> + <emoji name="post_office" unicode="&#x1f3e3;"/> <emoji name="post_office" unicode="&#x1f3e3;"/> from "post_office"<linebreak/> + <emoji name="postal_horn" unicode="&#x1f4ef;"/> <emoji name="postal_horn" unicode="&#x1f4ef;"/> from "postal_horn"<linebreak/> + <emoji name="postbox" unicode="&#x1f4ee;"/> <emoji name="postbox" unicode="&#x1f4ee;"/> from "postbox"<linebreak/> + <emoji name="potable_water" unicode="&#x1f6b0;"/> <emoji name="potable_water" unicode="&#x1f6b0;"/> from "potable_water"<linebreak/> + <emoji name="potato" unicode="&#x1f954;"/> <emoji name="potato" unicode="&#x1f954;"/> from "potato"<linebreak/> + <emoji name="pouch" unicode="&#x1f45d;"/> <emoji name="pouch" unicode="&#x1f45d;"/> from "pouch"<linebreak/> + <emoji name="poultry_leg" unicode="&#x1f357;"/> <emoji name="poultry_leg" unicode="&#x1f357;"/> from "poultry_leg"<linebreak/> + <emoji name="pound" unicode="&#x1f4b7;"/> <emoji name="pound" unicode="&#x1f4b7;"/> from "pound"<linebreak/> + <emoji name="pout" unicode="&#x1f621;"/> <emoji name="pout" unicode="&#x1f621;"/> from "pout"<linebreak/> + <emoji name="pouting_cat" unicode="&#x1f63e;"/> <emoji name="pouting_cat" unicode="&#x1f63e;"/> from "pouting_cat"<linebreak/> + <emoji name="pouting_man" unicode="&#x1f64e;&#x2642;"/> <emoji name="pouting_man" unicode="&#x1f64e;&#x2642;"/> from "pouting_man"<linebreak/> + <emoji name="pouting_woman" unicode="&#x1f64e;"/> <emoji name="pouting_woman" unicode="&#x1f64e;"/> from "pouting_woman"<linebreak/> + <emoji name="pray" unicode="&#x1f64f;"/> <emoji name="pray" unicode="&#x1f64f;"/> from "pray"<linebreak/> + <emoji name="prayer_beads" unicode="&#x1f4ff;"/> <emoji name="prayer_beads" unicode="&#x1f4ff;"/> from "prayer_beads"<linebreak/> + <emoji name="pregnant_woman" unicode="&#x1f930;"/> <emoji name="pregnant_woman" unicode="&#x1f930;"/> from "pregnant_woman"<linebreak/> + <emoji name="previous_track_button" unicode="&#x23ee;"/> <emoji name="previous_track_button" unicode="&#x23ee;"/> from "previous_track_button"<linebreak/> + <emoji name="prince" unicode="&#x1f934;"/> <emoji name="prince" unicode="&#x1f934;"/> from "prince"<linebreak/> + <emoji name="princess" unicode="&#x1f478;"/> <emoji name="princess" unicode="&#x1f478;"/> from "princess"<linebreak/> + <emoji name="printer" unicode="&#x1f5a8;"/> <emoji name="printer" unicode="&#x1f5a8;"/> from "printer"<linebreak/> + <emoji name="puerto_rico" unicode="&#x1f1f5;&#x1f1f7;"/> <emoji name="puerto_rico" unicode="&#x1f1f5;&#x1f1f7;"/> from "puerto_rico"<linebreak/> + <emoji name="punch" unicode="&#x1f44a;"/> <emoji name="punch" unicode="&#x1f44a;"/> from "punch"<linebreak/> + <emoji name="purple_heart" unicode="&#x1f49c;"/> <emoji name="purple_heart" unicode="&#x1f49c;"/> from "purple_heart"<linebreak/> + <emoji name="purse" unicode="&#x1f45b;"/> <emoji name="purse" unicode="&#x1f45b;"/> from "purse"<linebreak/> + <emoji name="pushpin" unicode="&#x1f4cc;"/> <emoji name="pushpin" unicode="&#x1f4cc;"/> from "pushpin"<linebreak/> + <emoji name="put_litter_in_its_place" unicode="&#x1f6ae;"/> <emoji name="put_litter_in_its_place" unicode="&#x1f6ae;"/> from "put_litter_in_its_place"<linebreak/> + <emoji name="qatar" unicode="&#x1f1f6;&#x1f1e6;"/> <emoji name="qatar" unicode="&#x1f1f6;&#x1f1e6;"/> from "qatar"<linebreak/> + <emoji name="question" unicode="&#x2753;"/> <emoji name="question" unicode="&#x2753;"/> from "question"<linebreak/> + <emoji name="rabbit" unicode="&#x1f430;"/> <emoji name="rabbit" unicode="&#x1f430;"/> from "rabbit"<linebreak/> + <emoji name="rabbit2" unicode="&#x1f407;"/> <emoji name="rabbit2" unicode="&#x1f407;"/> from "rabbit2"<linebreak/> + <emoji name="racehorse" unicode="&#x1f40e;"/> <emoji name="racehorse" unicode="&#x1f40e;"/> from "racehorse"<linebreak/> + <emoji name="racing_car" unicode="&#x1f3ce;"/> <emoji name="racing_car" unicode="&#x1f3ce;"/> from "racing_car"<linebreak/> + <emoji name="radio" unicode="&#x1f4fb;"/> <emoji name="radio" unicode="&#x1f4fb;"/> from "radio"<linebreak/> + <emoji name="radio_button" unicode="&#x1f518;"/> <emoji name="radio_button" unicode="&#x1f518;"/> from "radio_button"<linebreak/> + <emoji name="radioactive" unicode="&#x2622;"/> <emoji name="radioactive" unicode="&#x2622;"/> from "radioactive"<linebreak/> + <emoji name="rage" unicode="&#x1f621;"/> <emoji name="rage" unicode="&#x1f621;"/> from "rage"<linebreak/> + <emoji name="railway_car" unicode="&#x1f683;"/> <emoji name="railway_car" unicode="&#x1f683;"/> from "railway_car"<linebreak/> + <emoji name="railway_track" unicode="&#x1f6e4;"/> <emoji name="railway_track" unicode="&#x1f6e4;"/> from "railway_track"<linebreak/> + <emoji name="rainbow" unicode="&#x1f308;"/> <emoji name="rainbow" unicode="&#x1f308;"/> from "rainbow"<linebreak/> + <emoji name="rainbow_flag" unicode="&#x1f3f3;&#x1f308;"/> <emoji name="rainbow_flag" unicode="&#x1f3f3;&#x1f308;"/> from "rainbow_flag"<linebreak/> + <emoji name="raised_back_of_hand" unicode="&#x1f91a;"/> <emoji name="raised_back_of_hand" unicode="&#x1f91a;"/> from "raised_back_of_hand"<linebreak/> + <emoji name="raised_hand" unicode="&#x270b;"/> <emoji name="raised_hand" unicode="&#x270b;"/> from "raised_hand"<linebreak/> + <emoji name="raised_hand_with_fingers_splayed" unicode="&#x1f590;"/> <emoji name="raised_hand_with_fingers_splayed" unicode="&#x1f590;"/> from "raised_hand_with_fingers_splayed"<linebreak/> + <emoji name="raised_hands" unicode="&#x1f64c;"/> <emoji name="raised_hands" unicode="&#x1f64c;"/> from "raised_hands"<linebreak/> + <emoji name="raising_hand" unicode="&#x1f64b;"/> <emoji name="raising_hand" unicode="&#x1f64b;"/> from "raising_hand"<linebreak/> + <emoji name="raising_hand_man" unicode="&#x1f64b;&#x2642;"/> <emoji name="raising_hand_man" unicode="&#x1f64b;&#x2642;"/> from "raising_hand_man"<linebreak/> + <emoji name="raising_hand_woman" unicode="&#x1f64b;"/> <emoji name="raising_hand_woman" unicode="&#x1f64b;"/> from "raising_hand_woman"<linebreak/> + <emoji name="ram" unicode="&#x1f40f;"/> <emoji name="ram" unicode="&#x1f40f;"/> from "ram"<linebreak/> + <emoji name="ramen" unicode="&#x1f35c;"/> <emoji name="ramen" unicode="&#x1f35c;"/> from "ramen"<linebreak/> + <emoji name="rat" unicode="&#x1f400;"/> <emoji name="rat" unicode="&#x1f400;"/> from "rat"<linebreak/> + <emoji name="record_button" unicode="&#x23fa;"/> <emoji name="record_button" unicode="&#x23fa;"/> from "record_button"<linebreak/> + <emoji name="recycle" unicode="&#x267b;"/> <emoji name="recycle" unicode="&#x267b;"/> from "recycle"<linebreak/> + <emoji name="red_car" unicode="&#x1f697;"/> <emoji name="red_car" unicode="&#x1f697;"/> from "red_car"<linebreak/> + <emoji name="red_circle" unicode="&#x1f534;"/> <emoji name="red_circle" unicode="&#x1f534;"/> from "red_circle"<linebreak/> + <emoji name="registered" unicode="&#x00ae;"/> <emoji name="registered" unicode="&#x00ae;"/> from "registered"<linebreak/> + <emoji name="relaxed" unicode="&#x263a;"/> <emoji name="relaxed" unicode="&#x263a;"/> from "relaxed"<linebreak/> + <emoji name="relieved" unicode="&#x1f60c;"/> <emoji name="relieved" unicode="&#x1f60c;"/> from "relieved"<linebreak/> + <emoji name="reminder_ribbon" unicode="&#x1f397;"/> <emoji name="reminder_ribbon" unicode="&#x1f397;"/> from "reminder_ribbon"<linebreak/> + <emoji name="repeat" unicode="&#x1f501;"/> <emoji name="repeat" unicode="&#x1f501;"/> from "repeat"<linebreak/> + <emoji name="repeat_one" unicode="&#x1f502;"/> <emoji name="repeat_one" unicode="&#x1f502;"/> from "repeat_one"<linebreak/> + <emoji name="rescue_worker_helmet" unicode="&#x26d1;"/> <emoji name="rescue_worker_helmet" unicode="&#x26d1;"/> from "rescue_worker_helmet"<linebreak/> + <emoji name="restroom" unicode="&#x1f6bb;"/> <emoji name="restroom" unicode="&#x1f6bb;"/> from "restroom"<linebreak/> + <emoji name="reunion" unicode="&#x1f1f7;&#x1f1ea;"/> <emoji name="reunion" unicode="&#x1f1f7;&#x1f1ea;"/> from "reunion"<linebreak/> + <emoji name="revolving_hearts" unicode="&#x1f49e;"/> <emoji name="revolving_hearts" unicode="&#x1f49e;"/> from "revolving_hearts"<linebreak/> + <emoji name="rewind" unicode="&#x23ea;"/> <emoji name="rewind" unicode="&#x23ea;"/> from "rewind"<linebreak/> + <emoji name="rhinoceros" unicode="&#x1f98f;"/> <emoji name="rhinoceros" unicode="&#x1f98f;"/> from "rhinoceros"<linebreak/> + <emoji name="ribbon" unicode="&#x1f380;"/> <emoji name="ribbon" unicode="&#x1f380;"/> from "ribbon"<linebreak/> + <emoji name="rice" unicode="&#x1f35a;"/> <emoji name="rice" unicode="&#x1f35a;"/> from "rice"<linebreak/> + <emoji name="rice_ball" unicode="&#x1f359;"/> <emoji name="rice_ball" unicode="&#x1f359;"/> from "rice_ball"<linebreak/> + <emoji name="rice_cracker" unicode="&#x1f358;"/> <emoji name="rice_cracker" unicode="&#x1f358;"/> from "rice_cracker"<linebreak/> + <emoji name="rice_scene" unicode="&#x1f391;"/> <emoji name="rice_scene" unicode="&#x1f391;"/> from "rice_scene"<linebreak/> + <emoji name="right_anger_bubble" unicode="&#x1f5ef;"/> <emoji name="right_anger_bubble" unicode="&#x1f5ef;"/> from "right_anger_bubble"<linebreak/> + <emoji name="ring" unicode="&#x1f48d;"/> <emoji name="ring" unicode="&#x1f48d;"/> from "ring"<linebreak/> + <emoji name="robot" unicode="&#x1f916;"/> <emoji name="robot" unicode="&#x1f916;"/> from "robot"<linebreak/> + <emoji name="rocket" unicode="&#x1f680;"/> <emoji name="rocket" unicode="&#x1f680;"/> from "rocket"<linebreak/> + <emoji name="rofl" unicode="&#x1f923;"/> <emoji name="rofl" unicode="&#x1f923;"/> from "rofl"<linebreak/> + <emoji name="roll_eyes" unicode="&#x1f644;"/> <emoji name="roll_eyes" unicode="&#x1f644;"/> from "roll_eyes"<linebreak/> + <emoji name="roller_coaster" unicode="&#x1f3a2;"/> <emoji name="roller_coaster" unicode="&#x1f3a2;"/> from "roller_coaster"<linebreak/> + <emoji name="romania" unicode="&#x1f1f7;&#x1f1f4;"/> <emoji name="romania" unicode="&#x1f1f7;&#x1f1f4;"/> from "romania"<linebreak/> + <emoji name="rooster" unicode="&#x1f413;"/> <emoji name="rooster" unicode="&#x1f413;"/> from "rooster"<linebreak/> + <emoji name="rose" unicode="&#x1f339;"/> <emoji name="rose" unicode="&#x1f339;"/> from "rose"<linebreak/> + <emoji name="rosette" unicode="&#x1f3f5;"/> <emoji name="rosette" unicode="&#x1f3f5;"/> from "rosette"<linebreak/> + <emoji name="rotating_light" unicode="&#x1f6a8;"/> <emoji name="rotating_light" unicode="&#x1f6a8;"/> from "rotating_light"<linebreak/> + <emoji name="round_pushpin" unicode="&#x1f4cd;"/> <emoji name="round_pushpin" unicode="&#x1f4cd;"/> from "round_pushpin"<linebreak/> + <emoji name="rowboat" unicode="&#x1f6a3;"/> <emoji name="rowboat" unicode="&#x1f6a3;"/> from "rowboat"<linebreak/> + <emoji name="rowing_man" unicode="&#x1f6a3;"/> <emoji name="rowing_man" unicode="&#x1f6a3;"/> from "rowing_man"<linebreak/> + <emoji name="rowing_woman" unicode="&#x1f6a3;&#x2640;"/> <emoji name="rowing_woman" unicode="&#x1f6a3;&#x2640;"/> from "rowing_woman"<linebreak/> + <emoji name="ru" unicode="&#x1f1f7;&#x1f1fa;"/> <emoji name="ru" unicode="&#x1f1f7;&#x1f1fa;"/> from "ru"<linebreak/> + <emoji name="rugby_football" unicode="&#x1f3c9;"/> <emoji name="rugby_football" unicode="&#x1f3c9;"/> from "rugby_football"<linebreak/> + <emoji name="runner" unicode="&#x1f3c3;"/> <emoji name="runner" unicode="&#x1f3c3;"/> from "runner"<linebreak/> + <emoji name="running" unicode="&#x1f3c3;"/> <emoji name="running" unicode="&#x1f3c3;"/> from "running"<linebreak/> + <emoji name="running_man" unicode="&#x1f3c3;"/> <emoji name="running_man" unicode="&#x1f3c3;"/> from "running_man"<linebreak/> + <emoji name="running_shirt_with_sash" unicode="&#x1f3bd;"/> <emoji name="running_shirt_with_sash" unicode="&#x1f3bd;"/> from "running_shirt_with_sash"<linebreak/> + <emoji name="running_woman" unicode="&#x1f3c3;&#x2640;"/> <emoji name="running_woman" unicode="&#x1f3c3;&#x2640;"/> from "running_woman"<linebreak/> + <emoji name="rwanda" unicode="&#x1f1f7;&#x1f1fc;"/> <emoji name="rwanda" unicode="&#x1f1f7;&#x1f1fc;"/> from "rwanda"<linebreak/> + <emoji name="sa" unicode="&#x1f202;"/> <emoji name="sa" unicode="&#x1f202;"/> from "sa"<linebreak/> + <emoji name="sagittarius" unicode="&#x2650;"/> <emoji name="sagittarius" unicode="&#x2650;"/> from "sagittarius"<linebreak/> + <emoji name="sailboat" unicode="&#x26f5;"/> <emoji name="sailboat" unicode="&#x26f5;"/> from "sailboat"<linebreak/> + <emoji name="sake" unicode="&#x1f376;"/> <emoji name="sake" unicode="&#x1f376;"/> from "sake"<linebreak/> + <emoji name="samoa" unicode="&#x1f1fc;&#x1f1f8;"/> <emoji name="samoa" unicode="&#x1f1fc;&#x1f1f8;"/> from "samoa"<linebreak/> + <emoji name="san_marino" unicode="&#x1f1f8;&#x1f1f2;"/> <emoji name="san_marino" unicode="&#x1f1f8;&#x1f1f2;"/> from "san_marino"<linebreak/> + <emoji name="sandal" unicode="&#x1f461;"/> <emoji name="sandal" unicode="&#x1f461;"/> from "sandal"<linebreak/> + <emoji name="santa" unicode="&#x1f385;"/> <emoji name="santa" unicode="&#x1f385;"/> from "santa"<linebreak/> + <emoji name="sao_tome_principe" unicode="&#x1f1f8;&#x1f1f9;"/> <emoji name="sao_tome_principe" unicode="&#x1f1f8;&#x1f1f9;"/> from "sao_tome_principe"<linebreak/> + <emoji name="satellite" unicode="&#x1f4e1;"/> <emoji name="satellite" unicode="&#x1f4e1;"/> from "satellite"<linebreak/> + <emoji name="satisfied" unicode="&#x1f606;"/> <emoji name="satisfied" unicode="&#x1f606;"/> from "satisfied"<linebreak/> + <emoji name="saudi_arabia" unicode="&#x1f1f8;&#x1f1e6;"/> <emoji name="saudi_arabia" unicode="&#x1f1f8;&#x1f1e6;"/> from "saudi_arabia"<linebreak/> + <emoji name="saxophone" unicode="&#x1f3b7;"/> <emoji name="saxophone" unicode="&#x1f3b7;"/> from "saxophone"<linebreak/> + <emoji name="school" unicode="&#x1f3eb;"/> <emoji name="school" unicode="&#x1f3eb;"/> from "school"<linebreak/> + <emoji name="school_satchel" unicode="&#x1f392;"/> <emoji name="school_satchel" unicode="&#x1f392;"/> from "school_satchel"<linebreak/> + <emoji name="scissors" unicode="&#x2702;"/> <emoji name="scissors" unicode="&#x2702;"/> from "scissors"<linebreak/> + <emoji name="scorpion" unicode="&#x1f982;"/> <emoji name="scorpion" unicode="&#x1f982;"/> from "scorpion"<linebreak/> + <emoji name="scorpius" unicode="&#x264f;"/> <emoji name="scorpius" unicode="&#x264f;"/> from "scorpius"<linebreak/> + <emoji name="scream" unicode="&#x1f631;"/> <emoji name="scream" unicode="&#x1f631;"/> from "scream"<linebreak/> + <emoji name="scream_cat" unicode="&#x1f640;"/> <emoji name="scream_cat" unicode="&#x1f640;"/> from "scream_cat"<linebreak/> + <emoji name="scroll" unicode="&#x1f4dc;"/> <emoji name="scroll" unicode="&#x1f4dc;"/> from "scroll"<linebreak/> + <emoji name="seat" unicode="&#x1f4ba;"/> <emoji name="seat" unicode="&#x1f4ba;"/> from "seat"<linebreak/> + <emoji name="secret" unicode="&#x3299;"/> <emoji name="secret" unicode="&#x3299;"/> from "secret"<linebreak/> + <emoji name="see_no_evil" unicode="&#x1f648;"/> <emoji name="see_no_evil" unicode="&#x1f648;"/> from "see_no_evil"<linebreak/> + <emoji name="seedling" unicode="&#x1f331;"/> <emoji name="seedling" unicode="&#x1f331;"/> from "seedling"<linebreak/> + <emoji name="selfie" unicode="&#x1f933;"/> <emoji name="selfie" unicode="&#x1f933;"/> from "selfie"<linebreak/> + <emoji name="senegal" unicode="&#x1f1f8;&#x1f1f3;"/> <emoji name="senegal" unicode="&#x1f1f8;&#x1f1f3;"/> from "senegal"<linebreak/> + <emoji name="serbia" unicode="&#x1f1f7;&#x1f1f8;"/> <emoji name="serbia" unicode="&#x1f1f7;&#x1f1f8;"/> from "serbia"<linebreak/> + <emoji name="seven" unicode="&#x0037;&#x20e3;"/> <emoji name="seven" unicode="&#x0037;&#x20e3;"/> from "seven"<linebreak/> + <emoji name="seychelles" unicode="&#x1f1f8;&#x1f1e8;"/> <emoji name="seychelles" unicode="&#x1f1f8;&#x1f1e8;"/> from "seychelles"<linebreak/> + <emoji name="shallow_pan_of_food" unicode="&#x1f958;"/> <emoji name="shallow_pan_of_food" unicode="&#x1f958;"/> from "shallow_pan_of_food"<linebreak/> + <emoji name="shamrock" unicode="&#x2618;"/> <emoji name="shamrock" unicode="&#x2618;"/> from "shamrock"<linebreak/> + <emoji name="shark" unicode="&#x1f988;"/> <emoji name="shark" unicode="&#x1f988;"/> from "shark"<linebreak/> + <emoji name="shaved_ice" unicode="&#x1f367;"/> <emoji name="shaved_ice" unicode="&#x1f367;"/> from "shaved_ice"<linebreak/> + <emoji name="sheep" unicode="&#x1f411;"/> <emoji name="sheep" unicode="&#x1f411;"/> from "sheep"<linebreak/> + <emoji name="shell" unicode="&#x1f41a;"/> <emoji name="shell" unicode="&#x1f41a;"/> from "shell"<linebreak/> + <emoji name="shield" unicode="&#x1f6e1;"/> <emoji name="shield" unicode="&#x1f6e1;"/> from "shield"<linebreak/> + <emoji name="shinto_shrine" unicode="&#x26e9;"/> <emoji name="shinto_shrine" unicode="&#x26e9;"/> from "shinto_shrine"<linebreak/> + <emoji name="ship" unicode="&#x1f6a2;"/> <emoji name="ship" unicode="&#x1f6a2;"/> from "ship"<linebreak/> + <emoji name="shirt" unicode="&#x1f455;"/> <emoji name="shirt" unicode="&#x1f455;"/> from "shirt"<linebreak/> + <emoji name="shit" unicode="&#x1f4a9;"/> <emoji name="shit" unicode="&#x1f4a9;"/> from "shit"<linebreak/> + <emoji name="shoe" unicode="&#x1f45e;"/> <emoji name="shoe" unicode="&#x1f45e;"/> from "shoe"<linebreak/> + <emoji name="shopping" unicode="&#x1f6cd;"/> <emoji name="shopping" unicode="&#x1f6cd;"/> from "shopping"<linebreak/> + <emoji name="shopping_cart" unicode="&#x1f6d2;"/> <emoji name="shopping_cart" unicode="&#x1f6d2;"/> from "shopping_cart"<linebreak/> + <emoji name="shower" unicode="&#x1f6bf;"/> <emoji name="shower" unicode="&#x1f6bf;"/> from "shower"<linebreak/> + <emoji name="shrimp" unicode="&#x1f990;"/> <emoji name="shrimp" unicode="&#x1f990;"/> from "shrimp"<linebreak/> + <emoji name="sierra_leone" unicode="&#x1f1f8;&#x1f1f1;"/> <emoji name="sierra_leone" unicode="&#x1f1f8;&#x1f1f1;"/> from "sierra_leone"<linebreak/> + <emoji name="signal_strength" unicode="&#x1f4f6;"/> <emoji name="signal_strength" unicode="&#x1f4f6;"/> from "signal_strength"<linebreak/> + <emoji name="singapore" unicode="&#x1f1f8;&#x1f1ec;"/> <emoji name="singapore" unicode="&#x1f1f8;&#x1f1ec;"/> from "singapore"<linebreak/> + <emoji name="sint_maarten" unicode="&#x1f1f8;&#x1f1fd;"/> <emoji name="sint_maarten" unicode="&#x1f1f8;&#x1f1fd;"/> from "sint_maarten"<linebreak/> + <emoji name="six" unicode="&#x0036;&#x20e3;"/> <emoji name="six" unicode="&#x0036;&#x20e3;"/> from "six"<linebreak/> + <emoji name="six_pointed_star" unicode="&#x1f52f;"/> <emoji name="six_pointed_star" unicode="&#x1f52f;"/> from "six_pointed_star"<linebreak/> + <emoji name="ski" unicode="&#x1f3bf;"/> <emoji name="ski" unicode="&#x1f3bf;"/> from "ski"<linebreak/> + <emoji name="skier" unicode="&#x26f7;"/> <emoji name="skier" unicode="&#x26f7;"/> from "skier"<linebreak/> + <emoji name="skull" unicode="&#x1f480;"/> <emoji name="skull" unicode="&#x1f480;"/> from "skull"<linebreak/> + <emoji name="skull_and_crossbones" unicode="&#x2620;"/> <emoji name="skull_and_crossbones" unicode="&#x2620;"/> from "skull_and_crossbones"<linebreak/> + <emoji name="sleeping" unicode="&#x1f634;"/> <emoji name="sleeping" unicode="&#x1f634;"/> from "sleeping"<linebreak/> + <emoji name="sleeping_bed" unicode="&#x1f6cc;"/> <emoji name="sleeping_bed" unicode="&#x1f6cc;"/> from "sleeping_bed"<linebreak/> + <emoji name="sleepy" unicode="&#x1f62a;"/> <emoji name="sleepy" unicode="&#x1f62a;"/> from "sleepy"<linebreak/> + <emoji name="slightly_frowning_face" unicode="&#x1f641;"/> <emoji name="slightly_frowning_face" unicode="&#x1f641;"/> from "slightly_frowning_face"<linebreak/> + <emoji name="slightly_smiling_face" unicode="&#x1f642;"/> <emoji name="slightly_smiling_face" unicode="&#x1f642;"/> from "slightly_smiling_face"<linebreak/> + <emoji name="slot_machine" unicode="&#x1f3b0;"/> <emoji name="slot_machine" unicode="&#x1f3b0;"/> from "slot_machine"<linebreak/> + <emoji name="slovakia" unicode="&#x1f1f8;&#x1f1f0;"/> <emoji name="slovakia" unicode="&#x1f1f8;&#x1f1f0;"/> from "slovakia"<linebreak/> + <emoji name="slovenia" unicode="&#x1f1f8;&#x1f1ee;"/> <emoji name="slovenia" unicode="&#x1f1f8;&#x1f1ee;"/> from "slovenia"<linebreak/> + <emoji name="small_airplane" unicode="&#x1f6e9;"/> <emoji name="small_airplane" unicode="&#x1f6e9;"/> from "small_airplane"<linebreak/> + <emoji name="small_blue_diamond" unicode="&#x1f539;"/> <emoji name="small_blue_diamond" unicode="&#x1f539;"/> from "small_blue_diamond"<linebreak/> + <emoji name="small_orange_diamond" unicode="&#x1f538;"/> <emoji name="small_orange_diamond" unicode="&#x1f538;"/> from "small_orange_diamond"<linebreak/> + <emoji name="small_red_triangle" unicode="&#x1f53a;"/> <emoji name="small_red_triangle" unicode="&#x1f53a;"/> from "small_red_triangle"<linebreak/> + <emoji name="small_red_triangle_down" unicode="&#x1f53b;"/> <emoji name="small_red_triangle_down" unicode="&#x1f53b;"/> from "small_red_triangle_down"<linebreak/> + <emoji name="smile" unicode="&#x1f604;"/> <emoji name="smile" unicode="&#x1f604;"/> from "smile"<linebreak/> + <emoji name="smile_cat" unicode="&#x1f638;"/> <emoji name="smile_cat" unicode="&#x1f638;"/> from "smile_cat"<linebreak/> + <emoji name="smiley" unicode="&#x1f603;"/> <emoji name="smiley" unicode="&#x1f603;"/> from "smiley"<linebreak/> + <emoji name="smiley_cat" unicode="&#x1f63a;"/> <emoji name="smiley_cat" unicode="&#x1f63a;"/> from "smiley_cat"<linebreak/> + <emoji name="smiling_imp" unicode="&#x1f608;"/> <emoji name="smiling_imp" unicode="&#x1f608;"/> from "smiling_imp"<linebreak/> + <emoji name="smirk" unicode="&#x1f60f;"/> <emoji name="smirk" unicode="&#x1f60f;"/> from "smirk"<linebreak/> + <emoji name="smirk_cat" unicode="&#x1f63c;"/> <emoji name="smirk_cat" unicode="&#x1f63c;"/> from "smirk_cat"<linebreak/> + <emoji name="smoking" unicode="&#x1f6ac;"/> <emoji name="smoking" unicode="&#x1f6ac;"/> from "smoking"<linebreak/> + <emoji name="snail" unicode="&#x1f40c;"/> <emoji name="snail" unicode="&#x1f40c;"/> from "snail"<linebreak/> + <emoji name="snake" unicode="&#x1f40d;"/> <emoji name="snake" unicode="&#x1f40d;"/> from "snake"<linebreak/> + <emoji name="sneezing_face" unicode="&#x1f927;"/> <emoji name="sneezing_face" unicode="&#x1f927;"/> from "sneezing_face"<linebreak/> + <emoji name="snowboarder" unicode="&#x1f3c2;"/> <emoji name="snowboarder" unicode="&#x1f3c2;"/> from "snowboarder"<linebreak/> + <emoji name="snowflake" unicode="&#x2744;"/> <emoji name="snowflake" unicode="&#x2744;"/> from "snowflake"<linebreak/> + <emoji name="snowman" unicode="&#x26c4;"/> <emoji name="snowman" unicode="&#x26c4;"/> from "snowman"<linebreak/> + <emoji name="snowman_with_snow" unicode="&#x2603;"/> <emoji name="snowman_with_snow" unicode="&#x2603;"/> from "snowman_with_snow"<linebreak/> + <emoji name="sob" unicode="&#x1f62d;"/> <emoji name="sob" unicode="&#x1f62d;"/> from "sob"<linebreak/> + <emoji name="soccer" unicode="&#x26bd;"/> <emoji name="soccer" unicode="&#x26bd;"/> from "soccer"<linebreak/> + <emoji name="solomon_islands" unicode="&#x1f1f8;&#x1f1e7;"/> <emoji name="solomon_islands" unicode="&#x1f1f8;&#x1f1e7;"/> from "solomon_islands"<linebreak/> + <emoji name="somalia" unicode="&#x1f1f8;&#x1f1f4;"/> <emoji name="somalia" unicode="&#x1f1f8;&#x1f1f4;"/> from "somalia"<linebreak/> + <emoji name="soon" unicode="&#x1f51c;"/> <emoji name="soon" unicode="&#x1f51c;"/> from "soon"<linebreak/> + <emoji name="sos" unicode="&#x1f198;"/> <emoji name="sos" unicode="&#x1f198;"/> from "sos"<linebreak/> + <emoji name="sound" unicode="&#x1f509;"/> <emoji name="sound" unicode="&#x1f509;"/> from "sound"<linebreak/> + <emoji name="south_africa" unicode="&#x1f1ff;&#x1f1e6;"/> <emoji name="south_africa" unicode="&#x1f1ff;&#x1f1e6;"/> from "south_africa"<linebreak/> + <emoji name="south_georgia_south_sandwich_islands" unicode="&#x1f1ec;&#x1f1f8;"/> <emoji name="south_georgia_south_sandwich_islands" unicode="&#x1f1ec;&#x1f1f8;"/> from "south_georgia_south_sandwich_islands"<linebreak/> + <emoji name="south_sudan" unicode="&#x1f1f8;&#x1f1f8;"/> <emoji name="south_sudan" unicode="&#x1f1f8;&#x1f1f8;"/> from "south_sudan"<linebreak/> + <emoji name="space_invader" unicode="&#x1f47e;"/> <emoji name="space_invader" unicode="&#x1f47e;"/> from "space_invader"<linebreak/> + <emoji name="spades" unicode="&#x2660;"/> <emoji name="spades" unicode="&#x2660;"/> from "spades"<linebreak/> + <emoji name="spaghetti" unicode="&#x1f35d;"/> <emoji name="spaghetti" unicode="&#x1f35d;"/> from "spaghetti"<linebreak/> + <emoji name="sparkle" unicode="&#x2747;"/> <emoji name="sparkle" unicode="&#x2747;"/> from "sparkle"<linebreak/> + <emoji name="sparkler" unicode="&#x1f387;"/> <emoji name="sparkler" unicode="&#x1f387;"/> from "sparkler"<linebreak/> + <emoji name="sparkles" unicode="&#x2728;"/> <emoji name="sparkles" unicode="&#x2728;"/> from "sparkles"<linebreak/> + <emoji name="sparkling_heart" unicode="&#x1f496;"/> <emoji name="sparkling_heart" unicode="&#x1f496;"/> from "sparkling_heart"<linebreak/> + <emoji name="speak_no_evil" unicode="&#x1f64a;"/> <emoji name="speak_no_evil" unicode="&#x1f64a;"/> from "speak_no_evil"<linebreak/> + <emoji name="speaker" unicode="&#x1f508;"/> <emoji name="speaker" unicode="&#x1f508;"/> from "speaker"<linebreak/> + <emoji name="speaking_head" unicode="&#x1f5e3;"/> <emoji name="speaking_head" unicode="&#x1f5e3;"/> from "speaking_head"<linebreak/> + <emoji name="speech_balloon" unicode="&#x1f4ac;"/> <emoji name="speech_balloon" unicode="&#x1f4ac;"/> from "speech_balloon"<linebreak/> + <emoji name="speedboat" unicode="&#x1f6a4;"/> <emoji name="speedboat" unicode="&#x1f6a4;"/> from "speedboat"<linebreak/> + <emoji name="spider" unicode="&#x1f577;"/> <emoji name="spider" unicode="&#x1f577;"/> from "spider"<linebreak/> + <emoji name="spider_web" unicode="&#x1f578;"/> <emoji name="spider_web" unicode="&#x1f578;"/> from "spider_web"<linebreak/> + <emoji name="spiral_calendar" unicode="&#x1f5d3;"/> <emoji name="spiral_calendar" unicode="&#x1f5d3;"/> from "spiral_calendar"<linebreak/> + <emoji name="spiral_notepad" unicode="&#x1f5d2;"/> <emoji name="spiral_notepad" unicode="&#x1f5d2;"/> from "spiral_notepad"<linebreak/> + <emoji name="spoon" unicode="&#x1f944;"/> <emoji name="spoon" unicode="&#x1f944;"/> from "spoon"<linebreak/> + <emoji name="squid" unicode="&#x1f991;"/> <emoji name="squid" unicode="&#x1f991;"/> from "squid"<linebreak/> + <emoji name="sri_lanka" unicode="&#x1f1f1;&#x1f1f0;"/> <emoji name="sri_lanka" unicode="&#x1f1f1;&#x1f1f0;"/> from "sri_lanka"<linebreak/> + <emoji name="st_barthelemy" unicode="&#x1f1e7;&#x1f1f1;"/> <emoji name="st_barthelemy" unicode="&#x1f1e7;&#x1f1f1;"/> from "st_barthelemy"<linebreak/> + <emoji name="st_helena" unicode="&#x1f1f8;&#x1f1ed;"/> <emoji name="st_helena" unicode="&#x1f1f8;&#x1f1ed;"/> from "st_helena"<linebreak/> + <emoji name="st_kitts_nevis" unicode="&#x1f1f0;&#x1f1f3;"/> <emoji name="st_kitts_nevis" unicode="&#x1f1f0;&#x1f1f3;"/> from "st_kitts_nevis"<linebreak/> + <emoji name="st_lucia" unicode="&#x1f1f1;&#x1f1e8;"/> <emoji name="st_lucia" unicode="&#x1f1f1;&#x1f1e8;"/> from "st_lucia"<linebreak/> + <emoji name="st_pierre_miquelon" unicode="&#x1f1f5;&#x1f1f2;"/> <emoji name="st_pierre_miquelon" unicode="&#x1f1f5;&#x1f1f2;"/> from "st_pierre_miquelon"<linebreak/> + <emoji name="st_vincent_grenadines" unicode="&#x1f1fb;&#x1f1e8;"/> <emoji name="st_vincent_grenadines" unicode="&#x1f1fb;&#x1f1e8;"/> from "st_vincent_grenadines"<linebreak/> + <emoji name="stadium" unicode="&#x1f3df;"/> <emoji name="stadium" unicode="&#x1f3df;"/> from "stadium"<linebreak/> + <emoji name="star" unicode="&#x2b50;"/> <emoji name="star" unicode="&#x2b50;"/> from "star"<linebreak/> + <emoji name="star2" unicode="&#x1f31f;"/> <emoji name="star2" unicode="&#x1f31f;"/> from "star2"<linebreak/> + <emoji name="star_and_crescent" unicode="&#x262a;"/> <emoji name="star_and_crescent" unicode="&#x262a;"/> from "star_and_crescent"<linebreak/> + <emoji name="star_of_david" unicode="&#x2721;"/> <emoji name="star_of_david" unicode="&#x2721;"/> from "star_of_david"<linebreak/> + <emoji name="stars" unicode="&#x1f320;"/> <emoji name="stars" unicode="&#x1f320;"/> from "stars"<linebreak/> + <emoji name="station" unicode="&#x1f689;"/> <emoji name="station" unicode="&#x1f689;"/> from "station"<linebreak/> + <emoji name="statue_of_liberty" unicode="&#x1f5fd;"/> <emoji name="statue_of_liberty" unicode="&#x1f5fd;"/> from "statue_of_liberty"<linebreak/> + <emoji name="steam_locomotive" unicode="&#x1f682;"/> <emoji name="steam_locomotive" unicode="&#x1f682;"/> from "steam_locomotive"<linebreak/> + <emoji name="stew" unicode="&#x1f372;"/> <emoji name="stew" unicode="&#x1f372;"/> from "stew"<linebreak/> + <emoji name="stop_button" unicode="&#x23f9;"/> <emoji name="stop_button" unicode="&#x23f9;"/> from "stop_button"<linebreak/> + <emoji name="stop_sign" unicode="&#x1f6d1;"/> <emoji name="stop_sign" unicode="&#x1f6d1;"/> from "stop_sign"<linebreak/> + <emoji name="stopwatch" unicode="&#x23f1;"/> <emoji name="stopwatch" unicode="&#x23f1;"/> from "stopwatch"<linebreak/> + <emoji name="straight_ruler" unicode="&#x1f4cf;"/> <emoji name="straight_ruler" unicode="&#x1f4cf;"/> from "straight_ruler"<linebreak/> + <emoji name="strawberry" unicode="&#x1f353;"/> <emoji name="strawberry" unicode="&#x1f353;"/> from "strawberry"<linebreak/> + <emoji name="stuck_out_tongue" unicode="&#x1f61b;"/> <emoji name="stuck_out_tongue" unicode="&#x1f61b;"/> from "stuck_out_tongue"<linebreak/> + <emoji name="stuck_out_tongue_closed_eyes" unicode="&#x1f61d;"/> <emoji name="stuck_out_tongue_closed_eyes" unicode="&#x1f61d;"/> from "stuck_out_tongue_closed_eyes"<linebreak/> + <emoji name="stuck_out_tongue_winking_eye" unicode="&#x1f61c;"/> <emoji name="stuck_out_tongue_winking_eye" unicode="&#x1f61c;"/> from "stuck_out_tongue_winking_eye"<linebreak/> + <emoji name="studio_microphone" unicode="&#x1f399;"/> <emoji name="studio_microphone" unicode="&#x1f399;"/> from "studio_microphone"<linebreak/> + <emoji name="stuffed_flatbread" unicode="&#x1f959;"/> <emoji name="stuffed_flatbread" unicode="&#x1f959;"/> from "stuffed_flatbread"<linebreak/> + <emoji name="sudan" unicode="&#x1f1f8;&#x1f1e9;"/> <emoji name="sudan" unicode="&#x1f1f8;&#x1f1e9;"/> from "sudan"<linebreak/> + <emoji name="sun_behind_large_cloud" unicode="&#x1f325;"/> <emoji name="sun_behind_large_cloud" unicode="&#x1f325;"/> from "sun_behind_large_cloud"<linebreak/> + <emoji name="sun_behind_rain_cloud" unicode="&#x1f326;"/> <emoji name="sun_behind_rain_cloud" unicode="&#x1f326;"/> from "sun_behind_rain_cloud"<linebreak/> + <emoji name="sun_behind_small_cloud" unicode="&#x1f324;"/> <emoji name="sun_behind_small_cloud" unicode="&#x1f324;"/> from "sun_behind_small_cloud"<linebreak/> + <emoji name="sun_with_face" unicode="&#x1f31e;"/> <emoji name="sun_with_face" unicode="&#x1f31e;"/> from "sun_with_face"<linebreak/> + <emoji name="sunflower" unicode="&#x1f33b;"/> <emoji name="sunflower" unicode="&#x1f33b;"/> from "sunflower"<linebreak/> + <emoji name="sunglasses" unicode="&#x1f60e;"/> <emoji name="sunglasses" unicode="&#x1f60e;"/> from "sunglasses"<linebreak/> + <emoji name="sunny" unicode="&#x2600;"/> <emoji name="sunny" unicode="&#x2600;"/> from "sunny"<linebreak/> + <emoji name="sunrise" unicode="&#x1f305;"/> <emoji name="sunrise" unicode="&#x1f305;"/> from "sunrise"<linebreak/> + <emoji name="sunrise_over_mountains" unicode="&#x1f304;"/> <emoji name="sunrise_over_mountains" unicode="&#x1f304;"/> from "sunrise_over_mountains"<linebreak/> + <emoji name="surfer" unicode="&#x1f3c4;"/> <emoji name="surfer" unicode="&#x1f3c4;"/> from "surfer"<linebreak/> + <emoji name="surfing_man" unicode="&#x1f3c4;"/> <emoji name="surfing_man" unicode="&#x1f3c4;"/> from "surfing_man"<linebreak/> + <emoji name="surfing_woman" unicode="&#x1f3c4;&#x2640;"/> <emoji name="surfing_woman" unicode="&#x1f3c4;&#x2640;"/> from "surfing_woman"<linebreak/> + <emoji name="suriname" unicode="&#x1f1f8;&#x1f1f7;"/> <emoji name="suriname" unicode="&#x1f1f8;&#x1f1f7;"/> from "suriname"<linebreak/> + <emoji name="sushi" unicode="&#x1f363;"/> <emoji name="sushi" unicode="&#x1f363;"/> from "sushi"<linebreak/> + <emoji name="suspension_railway" unicode="&#x1f69f;"/> <emoji name="suspension_railway" unicode="&#x1f69f;"/> from "suspension_railway"<linebreak/> + <emoji name="swaziland" unicode="&#x1f1f8;&#x1f1ff;"/> <emoji name="swaziland" unicode="&#x1f1f8;&#x1f1ff;"/> from "swaziland"<linebreak/> + <emoji name="sweat" unicode="&#x1f613;"/> <emoji name="sweat" unicode="&#x1f613;"/> from "sweat"<linebreak/> + <emoji name="sweat_drops" unicode="&#x1f4a6;"/> <emoji name="sweat_drops" unicode="&#x1f4a6;"/> from "sweat_drops"<linebreak/> + <emoji name="sweat_smile" unicode="&#x1f605;"/> <emoji name="sweat_smile" unicode="&#x1f605;"/> from "sweat_smile"<linebreak/> + <emoji name="sweden" unicode="&#x1f1f8;&#x1f1ea;"/> <emoji name="sweden" unicode="&#x1f1f8;&#x1f1ea;"/> from "sweden"<linebreak/> + <emoji name="sweet_potato" unicode="&#x1f360;"/> <emoji name="sweet_potato" unicode="&#x1f360;"/> from "sweet_potato"<linebreak/> + <emoji name="swimmer" unicode="&#x1f3ca;"/> <emoji name="swimmer" unicode="&#x1f3ca;"/> from "swimmer"<linebreak/> + <emoji name="swimming_man" unicode="&#x1f3ca;"/> <emoji name="swimming_man" unicode="&#x1f3ca;"/> from "swimming_man"<linebreak/> + <emoji name="swimming_woman" unicode="&#x1f3ca;&#x2640;"/> <emoji name="swimming_woman" unicode="&#x1f3ca;&#x2640;"/> from "swimming_woman"<linebreak/> + <emoji name="switzerland" unicode="&#x1f1e8;&#x1f1ed;"/> <emoji name="switzerland" unicode="&#x1f1e8;&#x1f1ed;"/> from "switzerland"<linebreak/> + <emoji name="symbols" unicode="&#x1f523;"/> <emoji name="symbols" unicode="&#x1f523;"/> from "symbols"<linebreak/> + <emoji name="synagogue" unicode="&#x1f54d;"/> <emoji name="synagogue" unicode="&#x1f54d;"/> from "synagogue"<linebreak/> + <emoji name="syria" unicode="&#x1f1f8;&#x1f1fe;"/> <emoji name="syria" unicode="&#x1f1f8;&#x1f1fe;"/> from "syria"<linebreak/> + <emoji name="syringe" unicode="&#x1f489;"/> <emoji name="syringe" unicode="&#x1f489;"/> from "syringe"<linebreak/> + <emoji name="taco" unicode="&#x1f32e;"/> <emoji name="taco" unicode="&#x1f32e;"/> from "taco"<linebreak/> + <emoji name="tada" unicode="&#x1f389;"/> <emoji name="tada" unicode="&#x1f389;"/> from "tada"<linebreak/> + <emoji name="taiwan" unicode="&#x1f1f9;&#x1f1fc;"/> <emoji name="taiwan" unicode="&#x1f1f9;&#x1f1fc;"/> from "taiwan"<linebreak/> + <emoji name="tajikistan" unicode="&#x1f1f9;&#x1f1ef;"/> <emoji name="tajikistan" unicode="&#x1f1f9;&#x1f1ef;"/> from "tajikistan"<linebreak/> + <emoji name="tanabata_tree" unicode="&#x1f38b;"/> <emoji name="tanabata_tree" unicode="&#x1f38b;"/> from "tanabata_tree"<linebreak/> + <emoji name="tangerine" unicode="&#x1f34a;"/> <emoji name="tangerine" unicode="&#x1f34a;"/> from "tangerine"<linebreak/> + <emoji name="tanzania" unicode="&#x1f1f9;&#x1f1ff;"/> <emoji name="tanzania" unicode="&#x1f1f9;&#x1f1ff;"/> from "tanzania"<linebreak/> + <emoji name="taurus" unicode="&#x2649;"/> <emoji name="taurus" unicode="&#x2649;"/> from "taurus"<linebreak/> + <emoji name="taxi" unicode="&#x1f695;"/> <emoji name="taxi" unicode="&#x1f695;"/> from "taxi"<linebreak/> + <emoji name="tea" unicode="&#x1f375;"/> <emoji name="tea" unicode="&#x1f375;"/> from "tea"<linebreak/> + <emoji name="telephone" unicode="&#x260e;"/> <emoji name="telephone" unicode="&#x260e;"/> from "telephone"<linebreak/> + <emoji name="telephone_receiver" unicode="&#x1f4de;"/> <emoji name="telephone_receiver" unicode="&#x1f4de;"/> from "telephone_receiver"<linebreak/> + <emoji name="telescope" unicode="&#x1f52d;"/> <emoji name="telescope" unicode="&#x1f52d;"/> from "telescope"<linebreak/> + <emoji name="tennis" unicode="&#x1f3be;"/> <emoji name="tennis" unicode="&#x1f3be;"/> from "tennis"<linebreak/> + <emoji name="tent" unicode="&#x26fa;"/> <emoji name="tent" unicode="&#x26fa;"/> from "tent"<linebreak/> + <emoji name="thailand" unicode="&#x1f1f9;&#x1f1ed;"/> <emoji name="thailand" unicode="&#x1f1f9;&#x1f1ed;"/> from "thailand"<linebreak/> + <emoji name="thermometer" unicode="&#x1f321;"/> <emoji name="thermometer" unicode="&#x1f321;"/> from "thermometer"<linebreak/> + <emoji name="thinking" unicode="&#x1f914;"/> <emoji name="thinking" unicode="&#x1f914;"/> from "thinking"<linebreak/> + <emoji name="thought_balloon" unicode="&#x1f4ad;"/> <emoji name="thought_balloon" unicode="&#x1f4ad;"/> from "thought_balloon"<linebreak/> + <emoji name="three" unicode="&#x0033;&#x20e3;"/> <emoji name="three" unicode="&#x0033;&#x20e3;"/> from "three"<linebreak/> + <emoji name="thumbsdown" unicode="&#x1f44e;"/> <emoji name="thumbsdown" unicode="&#x1f44e;"/> from "thumbsdown"<linebreak/> + <emoji name="thumbsup" unicode="&#x1f44d;"/> <emoji name="thumbsup" unicode="&#x1f44d;"/> from "thumbsup"<linebreak/> + <emoji name="ticket" unicode="&#x1f3ab;"/> <emoji name="ticket" unicode="&#x1f3ab;"/> from "ticket"<linebreak/> + <emoji name="tickets" unicode="&#x1f39f;"/> <emoji name="tickets" unicode="&#x1f39f;"/> from "tickets"<linebreak/> + <emoji name="tiger" unicode="&#x1f42f;"/> <emoji name="tiger" unicode="&#x1f42f;"/> from "tiger"<linebreak/> + <emoji name="tiger2" unicode="&#x1f405;"/> <emoji name="tiger2" unicode="&#x1f405;"/> from "tiger2"<linebreak/> + <emoji name="timer_clock" unicode="&#x23f2;"/> <emoji name="timer_clock" unicode="&#x23f2;"/> from "timer_clock"<linebreak/> + <emoji name="timor_leste" unicode="&#x1f1f9;&#x1f1f1;"/> <emoji name="timor_leste" unicode="&#x1f1f9;&#x1f1f1;"/> from "timor_leste"<linebreak/> + <emoji name="tipping_hand_man" unicode="&#x1f481;&#x2642;"/> <emoji name="tipping_hand_man" unicode="&#x1f481;&#x2642;"/> from "tipping_hand_man"<linebreak/> + <emoji name="tipping_hand_woman" unicode="&#x1f481;"/> <emoji name="tipping_hand_woman" unicode="&#x1f481;"/> from "tipping_hand_woman"<linebreak/> + <emoji name="tired_face" unicode="&#x1f62b;"/> <emoji name="tired_face" unicode="&#x1f62b;"/> from "tired_face"<linebreak/> + <emoji name="tm" unicode="&#x2122;"/> <emoji name="tm" unicode="&#x2122;"/> from "tm"<linebreak/> + <emoji name="togo" unicode="&#x1f1f9;&#x1f1ec;"/> <emoji name="togo" unicode="&#x1f1f9;&#x1f1ec;"/> from "togo"<linebreak/> + <emoji name="toilet" unicode="&#x1f6bd;"/> <emoji name="toilet" unicode="&#x1f6bd;"/> from "toilet"<linebreak/> + <emoji name="tokelau" unicode="&#x1f1f9;&#x1f1f0;"/> <emoji name="tokelau" unicode="&#x1f1f9;&#x1f1f0;"/> from "tokelau"<linebreak/> + <emoji name="tokyo_tower" unicode="&#x1f5fc;"/> <emoji name="tokyo_tower" unicode="&#x1f5fc;"/> from "tokyo_tower"<linebreak/> + <emoji name="tomato" unicode="&#x1f345;"/> <emoji name="tomato" unicode="&#x1f345;"/> from "tomato"<linebreak/> + <emoji name="tonga" unicode="&#x1f1f9;&#x1f1f4;"/> <emoji name="tonga" unicode="&#x1f1f9;&#x1f1f4;"/> from "tonga"<linebreak/> + <emoji name="tongue" unicode="&#x1f445;"/> <emoji name="tongue" unicode="&#x1f445;"/> from "tongue"<linebreak/> + <emoji name="top" unicode="&#x1f51d;"/> <emoji name="top" unicode="&#x1f51d;"/> from "top"<linebreak/> + <emoji name="tophat" unicode="&#x1f3a9;"/> <emoji name="tophat" unicode="&#x1f3a9;"/> from "tophat"<linebreak/> + <emoji name="tornado" unicode="&#x1f32a;"/> <emoji name="tornado" unicode="&#x1f32a;"/> from "tornado"<linebreak/> + <emoji name="tr" unicode="&#x1f1f9;&#x1f1f7;"/> <emoji name="tr" unicode="&#x1f1f9;&#x1f1f7;"/> from "tr"<linebreak/> + <emoji name="trackball" unicode="&#x1f5b2;"/> <emoji name="trackball" unicode="&#x1f5b2;"/> from "trackball"<linebreak/> + <emoji name="tractor" unicode="&#x1f69c;"/> <emoji name="tractor" unicode="&#x1f69c;"/> from "tractor"<linebreak/> + <emoji name="traffic_light" unicode="&#x1f6a5;"/> <emoji name="traffic_light" unicode="&#x1f6a5;"/> from "traffic_light"<linebreak/> + <emoji name="train" unicode="&#x1f68b;"/> <emoji name="train" unicode="&#x1f68b;"/> from "train"<linebreak/> + <emoji name="train2" unicode="&#x1f686;"/> <emoji name="train2" unicode="&#x1f686;"/> from "train2"<linebreak/> + <emoji name="tram" unicode="&#x1f68a;"/> <emoji name="tram" unicode="&#x1f68a;"/> from "tram"<linebreak/> + <emoji name="triangular_flag_on_post" unicode="&#x1f6a9;"/> <emoji name="triangular_flag_on_post" unicode="&#x1f6a9;"/> from "triangular_flag_on_post"<linebreak/> + <emoji name="triangular_ruler" unicode="&#x1f4d0;"/> <emoji name="triangular_ruler" unicode="&#x1f4d0;"/> from "triangular_ruler"<linebreak/> + <emoji name="trident" unicode="&#x1f531;"/> <emoji name="trident" unicode="&#x1f531;"/> from "trident"<linebreak/> + <emoji name="trinidad_tobago" unicode="&#x1f1f9;&#x1f1f9;"/> <emoji name="trinidad_tobago" unicode="&#x1f1f9;&#x1f1f9;"/> from "trinidad_tobago"<linebreak/> + <emoji name="triumph" unicode="&#x1f624;"/> <emoji name="triumph" unicode="&#x1f624;"/> from "triumph"<linebreak/> + <emoji name="trolleybus" unicode="&#x1f68e;"/> <emoji name="trolleybus" unicode="&#x1f68e;"/> from "trolleybus"<linebreak/> + <emoji name="trophy" unicode="&#x1f3c6;"/> <emoji name="trophy" unicode="&#x1f3c6;"/> from "trophy"<linebreak/> + <emoji name="tropical_drink" unicode="&#x1f379;"/> <emoji name="tropical_drink" unicode="&#x1f379;"/> from "tropical_drink"<linebreak/> + <emoji name="tropical_fish" unicode="&#x1f420;"/> <emoji name="tropical_fish" unicode="&#x1f420;"/> from "tropical_fish"<linebreak/> + <emoji name="truck" unicode="&#x1f69a;"/> <emoji name="truck" unicode="&#x1f69a;"/> from "truck"<linebreak/> + <emoji name="trumpet" unicode="&#x1f3ba;"/> <emoji name="trumpet" unicode="&#x1f3ba;"/> from "trumpet"<linebreak/> + <emoji name="tshirt" unicode="&#x1f455;"/> <emoji name="tshirt" unicode="&#x1f455;"/> from "tshirt"<linebreak/> + <emoji name="tulip" unicode="&#x1f337;"/> <emoji name="tulip" unicode="&#x1f337;"/> from "tulip"<linebreak/> + <emoji name="tumbler_glass" unicode="&#x1f943;"/> <emoji name="tumbler_glass" unicode="&#x1f943;"/> from "tumbler_glass"<linebreak/> + <emoji name="tunisia" unicode="&#x1f1f9;&#x1f1f3;"/> <emoji name="tunisia" unicode="&#x1f1f9;&#x1f1f3;"/> from "tunisia"<linebreak/> + <emoji name="turkey" unicode="&#x1f983;"/> <emoji name="turkey" unicode="&#x1f983;"/> from "turkey"<linebreak/> + <emoji name="turkmenistan" unicode="&#x1f1f9;&#x1f1f2;"/> <emoji name="turkmenistan" unicode="&#x1f1f9;&#x1f1f2;"/> from "turkmenistan"<linebreak/> + <emoji name="turks_caicos_islands" unicode="&#x1f1f9;&#x1f1e8;"/> <emoji name="turks_caicos_islands" unicode="&#x1f1f9;&#x1f1e8;"/> from "turks_caicos_islands"<linebreak/> + <emoji name="turtle" unicode="&#x1f422;"/> <emoji name="turtle" unicode="&#x1f422;"/> from "turtle"<linebreak/> + <emoji name="tuvalu" unicode="&#x1f1f9;&#x1f1fb;"/> <emoji name="tuvalu" unicode="&#x1f1f9;&#x1f1fb;"/> from "tuvalu"<linebreak/> + <emoji name="tv" unicode="&#x1f4fa;"/> <emoji name="tv" unicode="&#x1f4fa;"/> from "tv"<linebreak/> + <emoji name="twisted_rightwards_arrows" unicode="&#x1f500;"/> <emoji name="twisted_rightwards_arrows" unicode="&#x1f500;"/> from "twisted_rightwards_arrows"<linebreak/> + <emoji name="two" unicode="&#x0032;&#x20e3;"/> <emoji name="two" unicode="&#x0032;&#x20e3;"/> from "two"<linebreak/> + <emoji name="two_hearts" unicode="&#x1f495;"/> <emoji name="two_hearts" unicode="&#x1f495;"/> from "two_hearts"<linebreak/> + <emoji name="two_men_holding_hands" unicode="&#x1f46c;"/> <emoji name="two_men_holding_hands" unicode="&#x1f46c;"/> from "two_men_holding_hands"<linebreak/> + <emoji name="two_women_holding_hands" unicode="&#x1f46d;"/> <emoji name="two_women_holding_hands" unicode="&#x1f46d;"/> from "two_women_holding_hands"<linebreak/> + <emoji name="u5272" unicode="&#x1f239;"/> <emoji name="u5272" unicode="&#x1f239;"/> from "u5272"<linebreak/> + <emoji name="u5408" unicode="&#x1f234;"/> <emoji name="u5408" unicode="&#x1f234;"/> from "u5408"<linebreak/> + <emoji name="u55b6" unicode="&#x1f23a;"/> <emoji name="u55b6" unicode="&#x1f23a;"/> from "u55b6"<linebreak/> + <emoji name="u6307" unicode="&#x1f22f;"/> <emoji name="u6307" unicode="&#x1f22f;"/> from "u6307"<linebreak/> + <emoji name="u6708" unicode="&#x1f237;"/> <emoji name="u6708" unicode="&#x1f237;"/> from "u6708"<linebreak/> + <emoji name="u6709" unicode="&#x1f236;"/> <emoji name="u6709" unicode="&#x1f236;"/> from "u6709"<linebreak/> + <emoji name="u6e80" unicode="&#x1f235;"/> <emoji name="u6e80" unicode="&#x1f235;"/> from "u6e80"<linebreak/> + <emoji name="u7121" unicode="&#x1f21a;"/> <emoji name="u7121" unicode="&#x1f21a;"/> from "u7121"<linebreak/> + <emoji name="u7533" unicode="&#x1f238;"/> <emoji name="u7533" unicode="&#x1f238;"/> from "u7533"<linebreak/> + <emoji name="u7981" unicode="&#x1f232;"/> <emoji name="u7981" unicode="&#x1f232;"/> from "u7981"<linebreak/> + <emoji name="u7a7a" unicode="&#x1f233;"/> <emoji name="u7a7a" unicode="&#x1f233;"/> from "u7a7a"<linebreak/> + <emoji name="uganda" unicode="&#x1f1fa;&#x1f1ec;"/> <emoji name="uganda" unicode="&#x1f1fa;&#x1f1ec;"/> from "uganda"<linebreak/> + <emoji name="uk" unicode="&#x1f1ec;&#x1f1e7;"/> <emoji name="uk" unicode="&#x1f1ec;&#x1f1e7;"/> from "uk"<linebreak/> + <emoji name="ukraine" unicode="&#x1f1fa;&#x1f1e6;"/> <emoji name="ukraine" unicode="&#x1f1fa;&#x1f1e6;"/> from "ukraine"<linebreak/> + <emoji name="umbrella" unicode="&#x2614;"/> <emoji name="umbrella" unicode="&#x2614;"/> from "umbrella"<linebreak/> + <emoji name="unamused" unicode="&#x1f612;"/> <emoji name="unamused" unicode="&#x1f612;"/> from "unamused"<linebreak/> + <emoji name="underage" unicode="&#x1f51e;"/> <emoji name="underage" unicode="&#x1f51e;"/> from "underage"<linebreak/> + <emoji name="unicorn" unicode="&#x1f984;"/> <emoji name="unicorn" unicode="&#x1f984;"/> from "unicorn"<linebreak/> + <emoji name="united_arab_emirates" unicode="&#x1f1e6;&#x1f1ea;"/> <emoji name="united_arab_emirates" unicode="&#x1f1e6;&#x1f1ea;"/> from "united_arab_emirates"<linebreak/> + <emoji name="unlock" unicode="&#x1f513;"/> <emoji name="unlock" unicode="&#x1f513;"/> from "unlock"<linebreak/> + <emoji name="up" unicode="&#x1f199;"/> <emoji name="up" unicode="&#x1f199;"/> from "up"<linebreak/> + <emoji name="upside_down_face" unicode="&#x1f643;"/> <emoji name="upside_down_face" unicode="&#x1f643;"/> from "upside_down_face"<linebreak/> + <emoji name="uruguay" unicode="&#x1f1fa;&#x1f1fe;"/> <emoji name="uruguay" unicode="&#x1f1fa;&#x1f1fe;"/> from "uruguay"<linebreak/> + <emoji name="us" unicode="&#x1f1fa;&#x1f1f8;"/> <emoji name="us" unicode="&#x1f1fa;&#x1f1f8;"/> from "us"<linebreak/> + <emoji name="us_virgin_islands" unicode="&#x1f1fb;&#x1f1ee;"/> <emoji name="us_virgin_islands" unicode="&#x1f1fb;&#x1f1ee;"/> from "us_virgin_islands"<linebreak/> + <emoji name="uzbekistan" unicode="&#x1f1fa;&#x1f1ff;"/> <emoji name="uzbekistan" unicode="&#x1f1fa;&#x1f1ff;"/> from "uzbekistan"<linebreak/> + <emoji name="v" unicode="&#x270c;"/> <emoji name="v" unicode="&#x270c;"/> from "v"<linebreak/> + <emoji name="vanuatu" unicode="&#x1f1fb;&#x1f1fa;"/> <emoji name="vanuatu" unicode="&#x1f1fb;&#x1f1fa;"/> from "vanuatu"<linebreak/> + <emoji name="vatican_city" unicode="&#x1f1fb;&#x1f1e6;"/> <emoji name="vatican_city" unicode="&#x1f1fb;&#x1f1e6;"/> from "vatican_city"<linebreak/> + <emoji name="venezuela" unicode="&#x1f1fb;&#x1f1ea;"/> <emoji name="venezuela" unicode="&#x1f1fb;&#x1f1ea;"/> from "venezuela"<linebreak/> + <emoji name="vertical_traffic_light" unicode="&#x1f6a6;"/> <emoji name="vertical_traffic_light" unicode="&#x1f6a6;"/> from "vertical_traffic_light"<linebreak/> + <emoji name="vhs" unicode="&#x1f4fc;"/> <emoji name="vhs" unicode="&#x1f4fc;"/> from "vhs"<linebreak/> + <emoji name="vibration_mode" unicode="&#x1f4f3;"/> <emoji name="vibration_mode" unicode="&#x1f4f3;"/> from "vibration_mode"<linebreak/> + <emoji name="video_camera" unicode="&#x1f4f9;"/> <emoji name="video_camera" unicode="&#x1f4f9;"/> from "video_camera"<linebreak/> + <emoji name="video_game" unicode="&#x1f3ae;"/> <emoji name="video_game" unicode="&#x1f3ae;"/> from "video_game"<linebreak/> + <emoji name="vietnam" unicode="&#x1f1fb;&#x1f1f3;"/> <emoji name="vietnam" unicode="&#x1f1fb;&#x1f1f3;"/> from "vietnam"<linebreak/> + <emoji name="violin" unicode="&#x1f3bb;"/> <emoji name="violin" unicode="&#x1f3bb;"/> from "violin"<linebreak/> + <emoji name="virgo" unicode="&#x264d;"/> <emoji name="virgo" unicode="&#x264d;"/> from "virgo"<linebreak/> + <emoji name="volcano" unicode="&#x1f30b;"/> <emoji name="volcano" unicode="&#x1f30b;"/> from "volcano"<linebreak/> + <emoji name="volleyball" unicode="&#x1f3d0;"/> <emoji name="volleyball" unicode="&#x1f3d0;"/> from "volleyball"<linebreak/> + <emoji name="vs" unicode="&#x1f19a;"/> <emoji name="vs" unicode="&#x1f19a;"/> from "vs"<linebreak/> + <emoji name="vulcan_salute" unicode="&#x1f596;"/> <emoji name="vulcan_salute" unicode="&#x1f596;"/> from "vulcan_salute"<linebreak/> + <emoji name="walking" unicode="&#x1f6b6;"/> <emoji name="walking" unicode="&#x1f6b6;"/> from "walking"<linebreak/> + <emoji name="walking_man" unicode="&#x1f6b6;"/> <emoji name="walking_man" unicode="&#x1f6b6;"/> from "walking_man"<linebreak/> + <emoji name="walking_woman" unicode="&#x1f6b6;&#x2640;"/> <emoji name="walking_woman" unicode="&#x1f6b6;&#x2640;"/> from "walking_woman"<linebreak/> + <emoji name="wallis_futuna" unicode="&#x1f1fc;&#x1f1eb;"/> <emoji name="wallis_futuna" unicode="&#x1f1fc;&#x1f1eb;"/> from "wallis_futuna"<linebreak/> + <emoji name="waning_crescent_moon" unicode="&#x1f318;"/> <emoji name="waning_crescent_moon" unicode="&#x1f318;"/> from "waning_crescent_moon"<linebreak/> + <emoji name="waning_gibbous_moon" unicode="&#x1f316;"/> <emoji name="waning_gibbous_moon" unicode="&#x1f316;"/> from "waning_gibbous_moon"<linebreak/> + <emoji name="warning" unicode="&#x26a0;"/> <emoji name="warning" unicode="&#x26a0;"/> from "warning"<linebreak/> + <emoji name="wastebasket" unicode="&#x1f5d1;"/> <emoji name="wastebasket" unicode="&#x1f5d1;"/> from "wastebasket"<linebreak/> + <emoji name="watch" unicode="&#x231a;"/> <emoji name="watch" unicode="&#x231a;"/> from "watch"<linebreak/> + <emoji name="water_buffalo" unicode="&#x1f403;"/> <emoji name="water_buffalo" unicode="&#x1f403;"/> from "water_buffalo"<linebreak/> + <emoji name="watermelon" unicode="&#x1f349;"/> <emoji name="watermelon" unicode="&#x1f349;"/> from "watermelon"<linebreak/> + <emoji name="wave" unicode="&#x1f44b;"/> <emoji name="wave" unicode="&#x1f44b;"/> from "wave"<linebreak/> + <emoji name="wavy_dash" unicode="&#x3030;"/> <emoji name="wavy_dash" unicode="&#x3030;"/> from "wavy_dash"<linebreak/> + <emoji name="waxing_crescent_moon" unicode="&#x1f312;"/> <emoji name="waxing_crescent_moon" unicode="&#x1f312;"/> from "waxing_crescent_moon"<linebreak/> + <emoji name="waxing_gibbous_moon" unicode="&#x1f314;"/> <emoji name="waxing_gibbous_moon" unicode="&#x1f314;"/> from "waxing_gibbous_moon"<linebreak/> + <emoji name="wc" unicode="&#x1f6be;"/> <emoji name="wc" unicode="&#x1f6be;"/> from "wc"<linebreak/> + <emoji name="weary" unicode="&#x1f629;"/> <emoji name="weary" unicode="&#x1f629;"/> from "weary"<linebreak/> + <emoji name="wedding" unicode="&#x1f492;"/> <emoji name="wedding" unicode="&#x1f492;"/> from "wedding"<linebreak/> + <emoji name="weight_lifting_man" unicode="&#x1f3cb;"/> <emoji name="weight_lifting_man" unicode="&#x1f3cb;"/> from "weight_lifting_man"<linebreak/> + <emoji name="weight_lifting_woman" unicode="&#x1f3cb;&#x2640;"/> <emoji name="weight_lifting_woman" unicode="&#x1f3cb;&#x2640;"/> from "weight_lifting_woman"<linebreak/> + <emoji name="western_sahara" unicode="&#x1f1ea;&#x1f1ed;"/> <emoji name="western_sahara" unicode="&#x1f1ea;&#x1f1ed;"/> from "western_sahara"<linebreak/> + <emoji name="whale" unicode="&#x1f433;"/> <emoji name="whale" unicode="&#x1f433;"/> from "whale"<linebreak/> + <emoji name="whale2" unicode="&#x1f40b;"/> <emoji name="whale2" unicode="&#x1f40b;"/> from "whale2"<linebreak/> + <emoji name="wheel_of_dharma" unicode="&#x2638;"/> <emoji name="wheel_of_dharma" unicode="&#x2638;"/> from "wheel_of_dharma"<linebreak/> + <emoji name="wheelchair" unicode="&#x267f;"/> <emoji name="wheelchair" unicode="&#x267f;"/> from "wheelchair"<linebreak/> + <emoji name="white_check_mark" unicode="&#x2705;"/> <emoji name="white_check_mark" unicode="&#x2705;"/> from "white_check_mark"<linebreak/> + <emoji name="white_circle" unicode="&#x26aa;"/> <emoji name="white_circle" unicode="&#x26aa;"/> from "white_circle"<linebreak/> + <emoji name="white_flag" unicode="&#x1f3f3;"/> <emoji name="white_flag" unicode="&#x1f3f3;"/> from "white_flag"<linebreak/> + <emoji name="white_flower" unicode="&#x1f4ae;"/> <emoji name="white_flower" unicode="&#x1f4ae;"/> from "white_flower"<linebreak/> + <emoji name="white_large_square" unicode="&#x2b1c;"/> <emoji name="white_large_square" unicode="&#x2b1c;"/> from "white_large_square"<linebreak/> + <emoji name="white_medium_small_square" unicode="&#x25fd;"/> <emoji name="white_medium_small_square" unicode="&#x25fd;"/> from "white_medium_small_square"<linebreak/> + <emoji name="white_medium_square" unicode="&#x25fb;"/> <emoji name="white_medium_square" unicode="&#x25fb;"/> from "white_medium_square"<linebreak/> + <emoji name="white_small_square" unicode="&#x25ab;"/> <emoji name="white_small_square" unicode="&#x25ab;"/> from "white_small_square"<linebreak/> + <emoji name="white_square_button" unicode="&#x1f533;"/> <emoji name="white_square_button" unicode="&#x1f533;"/> from "white_square_button"<linebreak/> + <emoji name="wilted_flower" unicode="&#x1f940;"/> <emoji name="wilted_flower" unicode="&#x1f940;"/> from "wilted_flower"<linebreak/> + <emoji name="wind_chime" unicode="&#x1f390;"/> <emoji name="wind_chime" unicode="&#x1f390;"/> from "wind_chime"<linebreak/> + <emoji name="wind_face" unicode="&#x1f32c;"/> <emoji name="wind_face" unicode="&#x1f32c;"/> from "wind_face"<linebreak/> + <emoji name="wine_glass" unicode="&#x1f377;"/> <emoji name="wine_glass" unicode="&#x1f377;"/> from "wine_glass"<linebreak/> + <emoji name="wink" unicode="&#x1f609;"/> <emoji name="wink" unicode="&#x1f609;"/> from "wink"<linebreak/> + <emoji name="wolf" unicode="&#x1f43a;"/> <emoji name="wolf" unicode="&#x1f43a;"/> from "wolf"<linebreak/> + <emoji name="woman" unicode="&#x1f469;"/> <emoji name="woman" unicode="&#x1f469;"/> from "woman"<linebreak/> + <emoji name="woman_artist" unicode="&#x1f469;&#x1f3a8;"/> <emoji name="woman_artist" unicode="&#x1f469;&#x1f3a8;"/> from "woman_artist"<linebreak/> + <emoji name="woman_astronaut" unicode="&#x1f469;&#x1f680;"/> <emoji name="woman_astronaut" unicode="&#x1f469;&#x1f680;"/> from "woman_astronaut"<linebreak/> + <emoji name="woman_cartwheeling" unicode="&#x1f938;&#x2640;"/> <emoji name="woman_cartwheeling" unicode="&#x1f938;&#x2640;"/> from "woman_cartwheeling"<linebreak/> + <emoji name="woman_cook" unicode="&#x1f469;&#x1f373;"/> <emoji name="woman_cook" unicode="&#x1f469;&#x1f373;"/> from "woman_cook"<linebreak/> + <emoji name="woman_facepalming" unicode="&#x1f926;&#x2640;"/> <emoji name="woman_facepalming" unicode="&#x1f926;&#x2640;"/> from "woman_facepalming"<linebreak/> + <emoji name="woman_factory_worker" unicode="&#x1f469;&#x1f3ed;"/> <emoji name="woman_factory_worker" unicode="&#x1f469;&#x1f3ed;"/> from "woman_factory_worker"<linebreak/> + <emoji name="woman_farmer" unicode="&#x1f469;&#x1f33e;"/> <emoji name="woman_farmer" unicode="&#x1f469;&#x1f33e;"/> from "woman_farmer"<linebreak/> + <emoji name="woman_firefighter" unicode="&#x1f469;&#x1f692;"/> <emoji name="woman_firefighter" unicode="&#x1f469;&#x1f692;"/> from "woman_firefighter"<linebreak/> + <emoji name="woman_health_worker" unicode="&#x1f469;&#x2695;"/> <emoji name="woman_health_worker" unicode="&#x1f469;&#x2695;"/> from "woman_health_worker"<linebreak/> + <emoji name="woman_judge" unicode="&#x1f469;&#x2696;"/> <emoji name="woman_judge" unicode="&#x1f469;&#x2696;"/> from "woman_judge"<linebreak/> + <emoji name="woman_juggling" unicode="&#x1f939;&#x2640;"/> <emoji name="woman_juggling" unicode="&#x1f939;&#x2640;"/> from "woman_juggling"<linebreak/> + <emoji name="woman_mechanic" unicode="&#x1f469;&#x1f527;"/> <emoji name="woman_mechanic" unicode="&#x1f469;&#x1f527;"/> from "woman_mechanic"<linebreak/> + <emoji name="woman_office_worker" unicode="&#x1f469;&#x1f4bc;"/> <emoji name="woman_office_worker" unicode="&#x1f469;&#x1f4bc;"/> from "woman_office_worker"<linebreak/> + <emoji name="woman_pilot" unicode="&#x1f469;&#x2708;"/> <emoji name="woman_pilot" unicode="&#x1f469;&#x2708;"/> from "woman_pilot"<linebreak/> + <emoji name="woman_playing_handball" unicode="&#x1f93e;&#x2640;"/> <emoji name="woman_playing_handball" unicode="&#x1f93e;&#x2640;"/> from "woman_playing_handball"<linebreak/> + <emoji name="woman_playing_water_polo" unicode="&#x1f93d;&#x2640;"/> <emoji name="woman_playing_water_polo" unicode="&#x1f93d;&#x2640;"/> from "woman_playing_water_polo"<linebreak/> + <emoji name="woman_scientist" unicode="&#x1f469;&#x1f52c;"/> <emoji name="woman_scientist" unicode="&#x1f469;&#x1f52c;"/> from "woman_scientist"<linebreak/> + <emoji name="woman_shrugging" unicode="&#x1f937;&#x2640;"/> <emoji name="woman_shrugging" unicode="&#x1f937;&#x2640;"/> from "woman_shrugging"<linebreak/> + <emoji name="woman_singer" unicode="&#x1f469;&#x1f3a4;"/> <emoji name="woman_singer" unicode="&#x1f469;&#x1f3a4;"/> from "woman_singer"<linebreak/> + <emoji name="woman_student" unicode="&#x1f469;&#x1f393;"/> <emoji name="woman_student" unicode="&#x1f469;&#x1f393;"/> from "woman_student"<linebreak/> + <emoji name="woman_teacher" unicode="&#x1f469;&#x1f3eb;"/> <emoji name="woman_teacher" unicode="&#x1f469;&#x1f3eb;"/> from "woman_teacher"<linebreak/> + <emoji name="woman_technologist" unicode="&#x1f469;&#x1f4bb;"/> <emoji name="woman_technologist" unicode="&#x1f469;&#x1f4bb;"/> from "woman_technologist"<linebreak/> + <emoji name="woman_with_turban" unicode="&#x1f473;&#x2640;"/> <emoji name="woman_with_turban" unicode="&#x1f473;&#x2640;"/> from "woman_with_turban"<linebreak/> + <emoji name="womans_clothes" unicode="&#x1f45a;"/> <emoji name="womans_clothes" unicode="&#x1f45a;"/> from "womans_clothes"<linebreak/> + <emoji name="womans_hat" unicode="&#x1f452;"/> <emoji name="womans_hat" unicode="&#x1f452;"/> from "womans_hat"<linebreak/> + <emoji name="women_wrestling" unicode="&#x1f93c;&#x2640;"/> <emoji name="women_wrestling" unicode="&#x1f93c;&#x2640;"/> from "women_wrestling"<linebreak/> + <emoji name="womens" unicode="&#x1f6ba;"/> <emoji name="womens" unicode="&#x1f6ba;"/> from "womens"<linebreak/> + <emoji name="world_map" unicode="&#x1f5fa;"/> <emoji name="world_map" unicode="&#x1f5fa;"/> from "world_map"<linebreak/> + <emoji name="worried" unicode="&#x1f61f;"/> <emoji name="worried" unicode="&#x1f61f;"/> from "worried"<linebreak/> + <emoji name="wrench" unicode="&#x1f527;"/> <emoji name="wrench" unicode="&#x1f527;"/> from "wrench"<linebreak/> + <emoji name="writing_hand" unicode="&#x270d;"/> <emoji name="writing_hand" unicode="&#x270d;"/> from "writing_hand"<linebreak/> + <emoji name="x" unicode="&#x274c;"/> <emoji name="x" unicode="&#x274c;"/> from "x"<linebreak/> + <emoji name="yellow_heart" unicode="&#x1f49b;"/> <emoji name="yellow_heart" unicode="&#x1f49b;"/> from "yellow_heart"<linebreak/> + <emoji name="yemen" unicode="&#x1f1fe;&#x1f1ea;"/> <emoji name="yemen" unicode="&#x1f1fe;&#x1f1ea;"/> from "yemen"<linebreak/> + <emoji name="yen" unicode="&#x1f4b4;"/> <emoji name="yen" unicode="&#x1f4b4;"/> from "yen"<linebreak/> + <emoji name="yin_yang" unicode="&#x262f;"/> <emoji name="yin_yang" unicode="&#x262f;"/> from "yin_yang"<linebreak/> + <emoji name="yum" unicode="&#x1f60b;"/> <emoji name="yum" unicode="&#x1f60b;"/> from "yum"<linebreak/> + <emoji name="zambia" unicode="&#x1f1ff;&#x1f1f2;"/> <emoji name="zambia" unicode="&#x1f1ff;&#x1f1f2;"/> from "zambia"<linebreak/> + <emoji name="zap" unicode="&#x26a1;"/> <emoji name="zap" unicode="&#x26a1;"/> from "zap"<linebreak/> + <emoji name="zero" unicode="&#x0030;&#x20e3;"/> <emoji name="zero" unicode="&#x0030;&#x20e3;"/> from "zero"<linebreak/> + <emoji name="zimbabwe" unicode="&#x1f1ff;&#x1f1fc;"/> <emoji name="zimbabwe" unicode="&#x1f1ff;&#x1f1fc;"/> from "zimbabwe"<linebreak/> + <emoji name="zipper_mouth_face" unicode="&#x1f910;"/> <emoji name="zipper_mouth_face" unicode="&#x1f910;"/> from "zipper_mouth_face"<linebreak/> + <emoji name="zzz" unicode="&#x1f4a4;"/> <emoji name="zzz" unicode="&#x1f4a4;"/> from "zzz"<linebreak/> + </para> + </detaileddescription> + </compounddef> +</doxygen> diff --git a/testing/076_emojis.cpp b/testing/076_emojis.cpp new file mode 100644 index 0000000..0526ebe --- /dev/null +++ b/testing/076_emojis.cpp @@ -0,0 +1,1493 @@ +// objective: test all supported emoji characters +// check: indexpage.xml +/** \mainpage Emoji test + + @emoji +1 @emoji :+1: from "+1"<br> + @emoji -1 @emoji :-1: from "-1"<br> + @emoji 100 @emoji :100: from "100"<br> + @emoji 1234 @emoji :1234: from "1234"<br> + @emoji 1st_place_medal @emoji :1st_place_medal: from "1st_place_medal"<br> + @emoji 2nd_place_medal @emoji :2nd_place_medal: from "2nd_place_medal"<br> + @emoji 3rd_place_medal @emoji :3rd_place_medal: from "3rd_place_medal"<br> + @emoji 8ball @emoji :8ball: from "8ball"<br> + @emoji a @emoji :a: from "a"<br> + @emoji ab @emoji :ab: from "ab"<br> + @emoji abc @emoji :abc: from "abc"<br> + @emoji abcd @emoji :abcd: from "abcd"<br> + @emoji accept @emoji :accept: from "accept"<br> + @emoji aerial_tramway @emoji :aerial_tramway: from "aerial_tramway"<br> + @emoji afghanistan @emoji :afghanistan: from "afghanistan"<br> + @emoji airplane @emoji :airplane: from "airplane"<br> + @emoji aland_islands @emoji :aland_islands: from "aland_islands"<br> + @emoji alarm_clock @emoji :alarm_clock: from "alarm_clock"<br> + @emoji albania @emoji :albania: from "albania"<br> + @emoji alembic @emoji :alembic: from "alembic"<br> + @emoji algeria @emoji :algeria: from "algeria"<br> + @emoji alien @emoji :alien: from "alien"<br> + @emoji ambulance @emoji :ambulance: from "ambulance"<br> + @emoji american_samoa @emoji :american_samoa: from "american_samoa"<br> + @emoji amphora @emoji :amphora: from "amphora"<br> + @emoji anchor @emoji :anchor: from "anchor"<br> + @emoji andorra @emoji :andorra: from "andorra"<br> + @emoji angel @emoji :angel: from "angel"<br> + @emoji anger @emoji :anger: from "anger"<br> + @emoji angola @emoji :angola: from "angola"<br> + @emoji angry @emoji :angry: from "angry"<br> + @emoji anguilla @emoji :anguilla: from "anguilla"<br> + @emoji anguished @emoji :anguished: from "anguished"<br> + @emoji ant @emoji :ant: from "ant"<br> + @emoji antarctica @emoji :antarctica: from "antarctica"<br> + @emoji antigua_barbuda @emoji :antigua_barbuda: from "antigua_barbuda"<br> + @emoji apple @emoji :apple: from "apple"<br> + @emoji aquarius @emoji :aquarius: from "aquarius"<br> + @emoji argentina @emoji :argentina: from "argentina"<br> + @emoji aries @emoji :aries: from "aries"<br> + @emoji armenia @emoji :armenia: from "armenia"<br> + @emoji arrow_backward @emoji :arrow_backward: from "arrow_backward"<br> + @emoji arrow_double_down @emoji :arrow_double_down: from "arrow_double_down"<br> + @emoji arrow_double_up @emoji :arrow_double_up: from "arrow_double_up"<br> + @emoji arrow_down @emoji :arrow_down: from "arrow_down"<br> + @emoji arrow_down_small @emoji :arrow_down_small: from "arrow_down_small"<br> + @emoji arrow_forward @emoji :arrow_forward: from "arrow_forward"<br> + @emoji arrow_heading_down @emoji :arrow_heading_down: from "arrow_heading_down"<br> + @emoji arrow_heading_up @emoji :arrow_heading_up: from "arrow_heading_up"<br> + @emoji arrow_left @emoji :arrow_left: from "arrow_left"<br> + @emoji arrow_lower_left @emoji :arrow_lower_left: from "arrow_lower_left"<br> + @emoji arrow_lower_right @emoji :arrow_lower_right: from "arrow_lower_right"<br> + @emoji arrow_right @emoji :arrow_right: from "arrow_right"<br> + @emoji arrow_right_hook @emoji :arrow_right_hook: from "arrow_right_hook"<br> + @emoji arrow_up @emoji :arrow_up: from "arrow_up"<br> + @emoji arrow_up_down @emoji :arrow_up_down: from "arrow_up_down"<br> + @emoji arrow_up_small @emoji :arrow_up_small: from "arrow_up_small"<br> + @emoji arrow_upper_left @emoji :arrow_upper_left: from "arrow_upper_left"<br> + @emoji arrow_upper_right @emoji :arrow_upper_right: from "arrow_upper_right"<br> + @emoji arrows_clockwise @emoji :arrows_clockwise: from "arrows_clockwise"<br> + @emoji arrows_counterclockwise @emoji :arrows_counterclockwise: from "arrows_counterclockwise"<br> + @emoji art @emoji :art: from "art"<br> + @emoji articulated_lorry @emoji :articulated_lorry: from "articulated_lorry"<br> + @emoji artificial_satellite @emoji :artificial_satellite: from "artificial_satellite"<br> + @emoji aruba @emoji :aruba: from "aruba"<br> + @emoji asterisk @emoji :asterisk: from "asterisk"<br> + @emoji astonished @emoji :astonished: from "astonished"<br> + @emoji athletic_shoe @emoji :athletic_shoe: from "athletic_shoe"<br> + @emoji atm @emoji :atm: from "atm"<br> + @emoji atom_symbol @emoji :atom_symbol: from "atom_symbol"<br> + @emoji australia @emoji :australia: from "australia"<br> + @emoji austria @emoji :austria: from "austria"<br> + @emoji avocado @emoji :avocado: from "avocado"<br> + @emoji azerbaijan @emoji :azerbaijan: from "azerbaijan"<br> + @emoji b @emoji :b: from "b"<br> + @emoji baby @emoji :baby: from "baby"<br> + @emoji baby_bottle @emoji :baby_bottle: from "baby_bottle"<br> + @emoji baby_chick @emoji :baby_chick: from "baby_chick"<br> + @emoji baby_symbol @emoji :baby_symbol: from "baby_symbol"<br> + @emoji back @emoji :back: from "back"<br> + @emoji bacon @emoji :bacon: from "bacon"<br> + @emoji badminton @emoji :badminton: from "badminton"<br> + @emoji baggage_claim @emoji :baggage_claim: from "baggage_claim"<br> + @emoji baguette_bread @emoji :baguette_bread: from "baguette_bread"<br> + @emoji bahamas @emoji :bahamas: from "bahamas"<br> + @emoji bahrain @emoji :bahrain: from "bahrain"<br> + @emoji balance_scale @emoji :balance_scale: from "balance_scale"<br> + @emoji balloon @emoji :balloon: from "balloon"<br> + @emoji ballot_box @emoji :ballot_box: from "ballot_box"<br> + @emoji ballot_box_with_check @emoji :ballot_box_with_check: from "ballot_box_with_check"<br> + @emoji bamboo @emoji :bamboo: from "bamboo"<br> + @emoji banana @emoji :banana: from "banana"<br> + @emoji bangbang @emoji :bangbang: from "bangbang"<br> + @emoji bangladesh @emoji :bangladesh: from "bangladesh"<br> + @emoji bank @emoji :bank: from "bank"<br> + @emoji bar_chart @emoji :bar_chart: from "bar_chart"<br> + @emoji barbados @emoji :barbados: from "barbados"<br> + @emoji barber @emoji :barber: from "barber"<br> + @emoji baseball @emoji :baseball: from "baseball"<br> + @emoji basketball @emoji :basketball: from "basketball"<br> + @emoji basketball_man @emoji :basketball_man: from "basketball_man"<br> + @emoji basketball_woman @emoji :basketball_woman: from "basketball_woman"<br> + @emoji bat @emoji :bat: from "bat"<br> + @emoji bath @emoji :bath: from "bath"<br> + @emoji bathtub @emoji :bathtub: from "bathtub"<br> + @emoji battery @emoji :battery: from "battery"<br> + @emoji beach_umbrella @emoji :beach_umbrella: from "beach_umbrella"<br> + @emoji bear @emoji :bear: from "bear"<br> + @emoji bed @emoji :bed: from "bed"<br> + @emoji bee @emoji :bee: from "bee"<br> + @emoji beer @emoji :beer: from "beer"<br> + @emoji beers @emoji :beers: from "beers"<br> + @emoji beetle @emoji :beetle: from "beetle"<br> + @emoji beginner @emoji :beginner: from "beginner"<br> + @emoji belarus @emoji :belarus: from "belarus"<br> + @emoji belgium @emoji :belgium: from "belgium"<br> + @emoji belize @emoji :belize: from "belize"<br> + @emoji bell @emoji :bell: from "bell"<br> + @emoji bellhop_bell @emoji :bellhop_bell: from "bellhop_bell"<br> + @emoji benin @emoji :benin: from "benin"<br> + @emoji bento @emoji :bento: from "bento"<br> + @emoji bermuda @emoji :bermuda: from "bermuda"<br> + @emoji bhutan @emoji :bhutan: from "bhutan"<br> + @emoji bicyclist @emoji :bicyclist: from "bicyclist"<br> + @emoji bike @emoji :bike: from "bike"<br> + @emoji biking_man @emoji :biking_man: from "biking_man"<br> + @emoji biking_woman @emoji :biking_woman: from "biking_woman"<br> + @emoji bikini @emoji :bikini: from "bikini"<br> + @emoji biohazard @emoji :biohazard: from "biohazard"<br> + @emoji bird @emoji :bird: from "bird"<br> + @emoji birthday @emoji :birthday: from "birthday"<br> + @emoji black_circle @emoji :black_circle: from "black_circle"<br> + @emoji black_flag @emoji :black_flag: from "black_flag"<br> + @emoji black_heart @emoji :black_heart: from "black_heart"<br> + @emoji black_joker @emoji :black_joker: from "black_joker"<br> + @emoji black_large_square @emoji :black_large_square: from "black_large_square"<br> + @emoji black_medium_small_square @emoji :black_medium_small_square: from "black_medium_small_square"<br> + @emoji black_medium_square @emoji :black_medium_square: from "black_medium_square"<br> + @emoji black_nib @emoji :black_nib: from "black_nib"<br> + @emoji black_small_square @emoji :black_small_square: from "black_small_square"<br> + @emoji black_square_button @emoji :black_square_button: from "black_square_button"<br> + @emoji blonde_man @emoji :blonde_man: from "blonde_man"<br> + @emoji blonde_woman @emoji :blonde_woman: from "blonde_woman"<br> + @emoji blossom @emoji :blossom: from "blossom"<br> + @emoji blowfish @emoji :blowfish: from "blowfish"<br> + @emoji blue_book @emoji :blue_book: from "blue_book"<br> + @emoji blue_car @emoji :blue_car: from "blue_car"<br> + @emoji blue_heart @emoji :blue_heart: from "blue_heart"<br> + @emoji blush @emoji :blush: from "blush"<br> + @emoji boar @emoji :boar: from "boar"<br> + @emoji boat @emoji :boat: from "boat"<br> + @emoji bolivia @emoji :bolivia: from "bolivia"<br> + @emoji bomb @emoji :bomb: from "bomb"<br> + @emoji book @emoji :book: from "book"<br> + @emoji bookmark @emoji :bookmark: from "bookmark"<br> + @emoji bookmark_tabs @emoji :bookmark_tabs: from "bookmark_tabs"<br> + @emoji books @emoji :books: from "books"<br> + @emoji boom @emoji :boom: from "boom"<br> + @emoji boot @emoji :boot: from "boot"<br> + @emoji bosnia_herzegovina @emoji :bosnia_herzegovina: from "bosnia_herzegovina"<br> + @emoji botswana @emoji :botswana: from "botswana"<br> + @emoji bouquet @emoji :bouquet: from "bouquet"<br> + @emoji bow @emoji :bow: from "bow"<br> + @emoji bow_and_arrow @emoji :bow_and_arrow: from "bow_and_arrow"<br> + @emoji bowing_man @emoji :bowing_man: from "bowing_man"<br> + @emoji bowing_woman @emoji :bowing_woman: from "bowing_woman"<br> + @emoji bowling @emoji :bowling: from "bowling"<br> + @emoji boxing_glove @emoji :boxing_glove: from "boxing_glove"<br> + @emoji boy @emoji :boy: from "boy"<br> + @emoji brazil @emoji :brazil: from "brazil"<br> + @emoji bread @emoji :bread: from "bread"<br> + @emoji bride_with_veil @emoji :bride_with_veil: from "bride_with_veil"<br> + @emoji bridge_at_night @emoji :bridge_at_night: from "bridge_at_night"<br> + @emoji briefcase @emoji :briefcase: from "briefcase"<br> + @emoji british_indian_ocean_territory @emoji :british_indian_ocean_territory: from "british_indian_ocean_territory"<br> + @emoji british_virgin_islands @emoji :british_virgin_islands: from "british_virgin_islands"<br> + @emoji broken_heart @emoji :broken_heart: from "broken_heart"<br> + @emoji brunei @emoji :brunei: from "brunei"<br> + @emoji bug @emoji :bug: from "bug"<br> + @emoji building_construction @emoji :building_construction: from "building_construction"<br> + @emoji bulb @emoji :bulb: from "bulb"<br> + @emoji bulgaria @emoji :bulgaria: from "bulgaria"<br> + @emoji bullettrain_front @emoji :bullettrain_front: from "bullettrain_front"<br> + @emoji bullettrain_side @emoji :bullettrain_side: from "bullettrain_side"<br> + @emoji burkina_faso @emoji :burkina_faso: from "burkina_faso"<br> + @emoji burrito @emoji :burrito: from "burrito"<br> + @emoji burundi @emoji :burundi: from "burundi"<br> + @emoji bus @emoji :bus: from "bus"<br> + @emoji business_suit_levitating @emoji :business_suit_levitating: from "business_suit_levitating"<br> + @emoji busstop @emoji :busstop: from "busstop"<br> + @emoji bust_in_silhouette @emoji :bust_in_silhouette: from "bust_in_silhouette"<br> + @emoji busts_in_silhouette @emoji :busts_in_silhouette: from "busts_in_silhouette"<br> + @emoji butterfly @emoji :butterfly: from "butterfly"<br> + @emoji cactus @emoji :cactus: from "cactus"<br> + @emoji cake @emoji :cake: from "cake"<br> + @emoji calendar @emoji :calendar: from "calendar"<br> + @emoji call_me_hand @emoji :call_me_hand: from "call_me_hand"<br> + @emoji calling @emoji :calling: from "calling"<br> + @emoji cambodia @emoji :cambodia: from "cambodia"<br> + @emoji camel @emoji :camel: from "camel"<br> + @emoji camera @emoji :camera: from "camera"<br> + @emoji camera_flash @emoji :camera_flash: from "camera_flash"<br> + @emoji cameroon @emoji :cameroon: from "cameroon"<br> + @emoji camping @emoji :camping: from "camping"<br> + @emoji canada @emoji :canada: from "canada"<br> + @emoji canary_islands @emoji :canary_islands: from "canary_islands"<br> + @emoji cancer @emoji :cancer: from "cancer"<br> + @emoji candle @emoji :candle: from "candle"<br> + @emoji candy @emoji :candy: from "candy"<br> + @emoji canoe @emoji :canoe: from "canoe"<br> + @emoji cape_verde @emoji :cape_verde: from "cape_verde"<br> + @emoji capital_abcd @emoji :capital_abcd: from "capital_abcd"<br> + @emoji capricorn @emoji :capricorn: from "capricorn"<br> + @emoji car @emoji :car: from "car"<br> + @emoji card_file_box @emoji :card_file_box: from "card_file_box"<br> + @emoji card_index @emoji :card_index: from "card_index"<br> + @emoji card_index_dividers @emoji :card_index_dividers: from "card_index_dividers"<br> + @emoji caribbean_netherlands @emoji :caribbean_netherlands: from "caribbean_netherlands"<br> + @emoji carousel_horse @emoji :carousel_horse: from "carousel_horse"<br> + @emoji carrot @emoji :carrot: from "carrot"<br> + @emoji cat @emoji :cat: from "cat"<br> + @emoji cat2 @emoji :cat2: from "cat2"<br> + @emoji cayman_islands @emoji :cayman_islands: from "cayman_islands"<br> + @emoji cd @emoji :cd: from "cd"<br> + @emoji central_african_republic @emoji :central_african_republic: from "central_african_republic"<br> + @emoji chad @emoji :chad: from "chad"<br> + @emoji chains @emoji :chains: from "chains"<br> + @emoji champagne @emoji :champagne: from "champagne"<br> + @emoji chart @emoji :chart: from "chart"<br> + @emoji chart_with_downwards_trend @emoji :chart_with_downwards_trend: from "chart_with_downwards_trend"<br> + @emoji chart_with_upwards_trend @emoji :chart_with_upwards_trend: from "chart_with_upwards_trend"<br> + @emoji checkered_flag @emoji :checkered_flag: from "checkered_flag"<br> + @emoji cheese @emoji :cheese: from "cheese"<br> + @emoji cherries @emoji :cherries: from "cherries"<br> + @emoji cherry_blossom @emoji :cherry_blossom: from "cherry_blossom"<br> + @emoji chestnut @emoji :chestnut: from "chestnut"<br> + @emoji chicken @emoji :chicken: from "chicken"<br> + @emoji children_crossing @emoji :children_crossing: from "children_crossing"<br> + @emoji chile @emoji :chile: from "chile"<br> + @emoji chipmunk @emoji :chipmunk: from "chipmunk"<br> + @emoji chocolate_bar @emoji :chocolate_bar: from "chocolate_bar"<br> + @emoji christmas_island @emoji :christmas_island: from "christmas_island"<br> + @emoji christmas_tree @emoji :christmas_tree: from "christmas_tree"<br> + @emoji church @emoji :church: from "church"<br> + @emoji cinema @emoji :cinema: from "cinema"<br> + @emoji circus_tent @emoji :circus_tent: from "circus_tent"<br> + @emoji city_sunrise @emoji :city_sunrise: from "city_sunrise"<br> + @emoji city_sunset @emoji :city_sunset: from "city_sunset"<br> + @emoji cityscape @emoji :cityscape: from "cityscape"<br> + @emoji cl @emoji :cl: from "cl"<br> + @emoji clamp @emoji :clamp: from "clamp"<br> + @emoji clap @emoji :clap: from "clap"<br> + @emoji clapper @emoji :clapper: from "clapper"<br> + @emoji classical_building @emoji :classical_building: from "classical_building"<br> + @emoji clinking_glasses @emoji :clinking_glasses: from "clinking_glasses"<br> + @emoji clipboard @emoji :clipboard: from "clipboard"<br> + @emoji clock1 @emoji :clock1: from "clock1"<br> + @emoji clock10 @emoji :clock10: from "clock10"<br> + @emoji clock1030 @emoji :clock1030: from "clock1030"<br> + @emoji clock11 @emoji :clock11: from "clock11"<br> + @emoji clock1130 @emoji :clock1130: from "clock1130"<br> + @emoji clock12 @emoji :clock12: from "clock12"<br> + @emoji clock1230 @emoji :clock1230: from "clock1230"<br> + @emoji clock130 @emoji :clock130: from "clock130"<br> + @emoji clock2 @emoji :clock2: from "clock2"<br> + @emoji clock230 @emoji :clock230: from "clock230"<br> + @emoji clock3 @emoji :clock3: from "clock3"<br> + @emoji clock330 @emoji :clock330: from "clock330"<br> + @emoji clock4 @emoji :clock4: from "clock4"<br> + @emoji clock430 @emoji :clock430: from "clock430"<br> + @emoji clock5 @emoji :clock5: from "clock5"<br> + @emoji clock530 @emoji :clock530: from "clock530"<br> + @emoji clock6 @emoji :clock6: from "clock6"<br> + @emoji clock630 @emoji :clock630: from "clock630"<br> + @emoji clock7 @emoji :clock7: from "clock7"<br> + @emoji clock730 @emoji :clock730: from "clock730"<br> + @emoji clock8 @emoji :clock8: from "clock8"<br> + @emoji clock830 @emoji :clock830: from "clock830"<br> + @emoji clock9 @emoji :clock9: from "clock9"<br> + @emoji clock930 @emoji :clock930: from "clock930"<br> + @emoji closed_book @emoji :closed_book: from "closed_book"<br> + @emoji closed_lock_with_key @emoji :closed_lock_with_key: from "closed_lock_with_key"<br> + @emoji closed_umbrella @emoji :closed_umbrella: from "closed_umbrella"<br> + @emoji cloud @emoji :cloud: from "cloud"<br> + @emoji cloud_with_lightning @emoji :cloud_with_lightning: from "cloud_with_lightning"<br> + @emoji cloud_with_lightning_and_rain @emoji :cloud_with_lightning_and_rain: from "cloud_with_lightning_and_rain"<br> + @emoji cloud_with_rain @emoji :cloud_with_rain: from "cloud_with_rain"<br> + @emoji cloud_with_snow @emoji :cloud_with_snow: from "cloud_with_snow"<br> + @emoji clown_face @emoji :clown_face: from "clown_face"<br> + @emoji clubs @emoji :clubs: from "clubs"<br> + @emoji cn @emoji :cn: from "cn"<br> + @emoji cocktail @emoji :cocktail: from "cocktail"<br> + @emoji cocos_islands @emoji :cocos_islands: from "cocos_islands"<br> + @emoji coffee @emoji :coffee: from "coffee"<br> + @emoji coffin @emoji :coffin: from "coffin"<br> + @emoji cold_sweat @emoji :cold_sweat: from "cold_sweat"<br> + @emoji collision @emoji :collision: from "collision"<br> + @emoji colombia @emoji :colombia: from "colombia"<br> + @emoji comet @emoji :comet: from "comet"<br> + @emoji comoros @emoji :comoros: from "comoros"<br> + @emoji computer @emoji :computer: from "computer"<br> + @emoji computer_mouse @emoji :computer_mouse: from "computer_mouse"<br> + @emoji confetti_ball @emoji :confetti_ball: from "confetti_ball"<br> + @emoji confounded @emoji :confounded: from "confounded"<br> + @emoji confused @emoji :confused: from "confused"<br> + @emoji congo_brazzaville @emoji :congo_brazzaville: from "congo_brazzaville"<br> + @emoji congo_kinshasa @emoji :congo_kinshasa: from "congo_kinshasa"<br> + @emoji congratulations @emoji :congratulations: from "congratulations"<br> + @emoji construction @emoji :construction: from "construction"<br> + @emoji construction_worker @emoji :construction_worker: from "construction_worker"<br> + @emoji construction_worker_man @emoji :construction_worker_man: from "construction_worker_man"<br> + @emoji construction_worker_woman @emoji :construction_worker_woman: from "construction_worker_woman"<br> + @emoji control_knobs @emoji :control_knobs: from "control_knobs"<br> + @emoji convenience_store @emoji :convenience_store: from "convenience_store"<br> + @emoji cook_islands @emoji :cook_islands: from "cook_islands"<br> + @emoji cookie @emoji :cookie: from "cookie"<br> + @emoji cool @emoji :cool: from "cool"<br> + @emoji cop @emoji :cop: from "cop"<br> + @emoji copyright @emoji :copyright: from "copyright"<br> + @emoji corn @emoji :corn: from "corn"<br> + @emoji costa_rica @emoji :costa_rica: from "costa_rica"<br> + @emoji cote_divoire @emoji :cote_divoire: from "cote_divoire"<br> + @emoji couch_and_lamp @emoji :couch_and_lamp: from "couch_and_lamp"<br> + @emoji couple @emoji :couple: from "couple"<br> + @emoji couple_with_heart @emoji :couple_with_heart: from "couple_with_heart"<br> + @emoji couple_with_heart_man_man @emoji :couple_with_heart_man_man: from "couple_with_heart_man_man"<br> + @emoji couple_with_heart_woman_man @emoji :couple_with_heart_woman_man: from "couple_with_heart_woman_man"<br> + @emoji couple_with_heart_woman_woman @emoji :couple_with_heart_woman_woman: from "couple_with_heart_woman_woman"<br> + @emoji couplekiss_man_man @emoji :couplekiss_man_man: from "couplekiss_man_man"<br> + @emoji couplekiss_man_woman @emoji :couplekiss_man_woman: from "couplekiss_man_woman"<br> + @emoji couplekiss_woman_woman @emoji :couplekiss_woman_woman: from "couplekiss_woman_woman"<br> + @emoji cow @emoji :cow: from "cow"<br> + @emoji cow2 @emoji :cow2: from "cow2"<br> + @emoji cowboy_hat_face @emoji :cowboy_hat_face: from "cowboy_hat_face"<br> + @emoji crab @emoji :crab: from "crab"<br> + @emoji crayon @emoji :crayon: from "crayon"<br> + @emoji credit_card @emoji :credit_card: from "credit_card"<br> + @emoji crescent_moon @emoji :crescent_moon: from "crescent_moon"<br> + @emoji cricket @emoji :cricket: from "cricket"<br> + @emoji croatia @emoji :croatia: from "croatia"<br> + @emoji crocodile @emoji :crocodile: from "crocodile"<br> + @emoji croissant @emoji :croissant: from "croissant"<br> + @emoji crossed_fingers @emoji :crossed_fingers: from "crossed_fingers"<br> + @emoji crossed_flags @emoji :crossed_flags: from "crossed_flags"<br> + @emoji crossed_swords @emoji :crossed_swords: from "crossed_swords"<br> + @emoji crown @emoji :crown: from "crown"<br> + @emoji cry @emoji :cry: from "cry"<br> + @emoji crying_cat_face @emoji :crying_cat_face: from "crying_cat_face"<br> + @emoji crystal_ball @emoji :crystal_ball: from "crystal_ball"<br> + @emoji cuba @emoji :cuba: from "cuba"<br> + @emoji cucumber @emoji :cucumber: from "cucumber"<br> + @emoji cupid @emoji :cupid: from "cupid"<br> + @emoji curacao @emoji :curacao: from "curacao"<br> + @emoji curly_loop @emoji :curly_loop: from "curly_loop"<br> + @emoji currency_exchange @emoji :currency_exchange: from "currency_exchange"<br> + @emoji curry @emoji :curry: from "curry"<br> + @emoji custard @emoji :custard: from "custard"<br> + @emoji customs @emoji :customs: from "customs"<br> + @emoji cyclone @emoji :cyclone: from "cyclone"<br> + @emoji cyprus @emoji :cyprus: from "cyprus"<br> + @emoji czech_republic @emoji :czech_republic: from "czech_republic"<br> + @emoji dagger @emoji :dagger: from "dagger"<br> + @emoji dancer @emoji :dancer: from "dancer"<br> + @emoji dancers @emoji :dancers: from "dancers"<br> + @emoji dancing_men @emoji :dancing_men: from "dancing_men"<br> + @emoji dancing_women @emoji :dancing_women: from "dancing_women"<br> + @emoji dango @emoji :dango: from "dango"<br> + @emoji dark_sunglasses @emoji :dark_sunglasses: from "dark_sunglasses"<br> + @emoji dart @emoji :dart: from "dart"<br> + @emoji dash @emoji :dash: from "dash"<br> + @emoji date @emoji :date: from "date"<br> + @emoji de @emoji :de: from "de"<br> + @emoji deciduous_tree @emoji :deciduous_tree: from "deciduous_tree"<br> + @emoji deer @emoji :deer: from "deer"<br> + @emoji denmark @emoji :denmark: from "denmark"<br> + @emoji department_store @emoji :department_store: from "department_store"<br> + @emoji derelict_house @emoji :derelict_house: from "derelict_house"<br> + @emoji desert @emoji :desert: from "desert"<br> + @emoji desert_island @emoji :desert_island: from "desert_island"<br> + @emoji desktop_computer @emoji :desktop_computer: from "desktop_computer"<br> + @emoji detective @emoji :detective: from "detective"<br> + @emoji diamond_shape_with_a_dot_inside @emoji :diamond_shape_with_a_dot_inside: from "diamond_shape_with_a_dot_inside"<br> + @emoji diamonds @emoji :diamonds: from "diamonds"<br> + @emoji disappointed @emoji :disappointed: from "disappointed"<br> + @emoji disappointed_relieved @emoji :disappointed_relieved: from "disappointed_relieved"<br> + @emoji dizzy @emoji :dizzy: from "dizzy"<br> + @emoji dizzy_face @emoji :dizzy_face: from "dizzy_face"<br> + @emoji djibouti @emoji :djibouti: from "djibouti"<br> + @emoji do_not_litter @emoji :do_not_litter: from "do_not_litter"<br> + @emoji dog @emoji :dog: from "dog"<br> + @emoji dog2 @emoji :dog2: from "dog2"<br> + @emoji dollar @emoji :dollar: from "dollar"<br> + @emoji dolls @emoji :dolls: from "dolls"<br> + @emoji dolphin @emoji :dolphin: from "dolphin"<br> + @emoji dominica @emoji :dominica: from "dominica"<br> + @emoji dominican_republic @emoji :dominican_republic: from "dominican_republic"<br> + @emoji door @emoji :door: from "door"<br> + @emoji doughnut @emoji :doughnut: from "doughnut"<br> + @emoji dove @emoji :dove: from "dove"<br> + @emoji dragon @emoji :dragon: from "dragon"<br> + @emoji dragon_face @emoji :dragon_face: from "dragon_face"<br> + @emoji dress @emoji :dress: from "dress"<br> + @emoji dromedary_camel @emoji :dromedary_camel: from "dromedary_camel"<br> + @emoji drooling_face @emoji :drooling_face: from "drooling_face"<br> + @emoji droplet @emoji :droplet: from "droplet"<br> + @emoji drum @emoji :drum: from "drum"<br> + @emoji duck @emoji :duck: from "duck"<br> + @emoji dvd @emoji :dvd: from "dvd"<br> + @emoji e-mail @emoji :e-mail: from "e-mail"<br> + @emoji eagle @emoji :eagle: from "eagle"<br> + @emoji ear @emoji :ear: from "ear"<br> + @emoji ear_of_rice @emoji :ear_of_rice: from "ear_of_rice"<br> + @emoji earth_africa @emoji :earth_africa: from "earth_africa"<br> + @emoji earth_americas @emoji :earth_americas: from "earth_americas"<br> + @emoji earth_asia @emoji :earth_asia: from "earth_asia"<br> + @emoji ecuador @emoji :ecuador: from "ecuador"<br> + @emoji egg @emoji :egg: from "egg"<br> + @emoji eggplant @emoji :eggplant: from "eggplant"<br> + @emoji egypt @emoji :egypt: from "egypt"<br> + @emoji eight @emoji :eight: from "eight"<br> + @emoji eight_pointed_black_star @emoji :eight_pointed_black_star: from "eight_pointed_black_star"<br> + @emoji eight_spoked_asterisk @emoji :eight_spoked_asterisk: from "eight_spoked_asterisk"<br> + @emoji el_salvador @emoji :el_salvador: from "el_salvador"<br> + @emoji electric_plug @emoji :electric_plug: from "electric_plug"<br> + @emoji elephant @emoji :elephant: from "elephant"<br> + @emoji email @emoji :email: from "email"<br> + @emoji end @emoji :end: from "end"<br> + @emoji envelope @emoji :envelope: from "envelope"<br> + @emoji envelope_with_arrow @emoji :envelope_with_arrow: from "envelope_with_arrow"<br> + @emoji equatorial_guinea @emoji :equatorial_guinea: from "equatorial_guinea"<br> + @emoji eritrea @emoji :eritrea: from "eritrea"<br> + @emoji es @emoji :es: from "es"<br> + @emoji estonia @emoji :estonia: from "estonia"<br> + @emoji ethiopia @emoji :ethiopia: from "ethiopia"<br> + @emoji eu @emoji :eu: from "eu"<br> + @emoji euro @emoji :euro: from "euro"<br> + @emoji european_castle @emoji :european_castle: from "european_castle"<br> + @emoji european_post_office @emoji :european_post_office: from "european_post_office"<br> + @emoji european_union @emoji :european_union: from "european_union"<br> + @emoji evergreen_tree @emoji :evergreen_tree: from "evergreen_tree"<br> + @emoji exclamation @emoji :exclamation: from "exclamation"<br> + @emoji expressionless @emoji :expressionless: from "expressionless"<br> + @emoji eye @emoji :eye: from "eye"<br> + @emoji eye_speech_bubble @emoji :eye_speech_bubble: from "eye_speech_bubble"<br> + @emoji eyeglasses @emoji :eyeglasses: from "eyeglasses"<br> + @emoji eyes @emoji :eyes: from "eyes"<br> + @emoji face_with_head_bandage @emoji :face_with_head_bandage: from "face_with_head_bandage"<br> + @emoji face_with_thermometer @emoji :face_with_thermometer: from "face_with_thermometer"<br> + @emoji facepunch @emoji :facepunch: from "facepunch"<br> + @emoji factory @emoji :factory: from "factory"<br> + @emoji falkland_islands @emoji :falkland_islands: from "falkland_islands"<br> + @emoji fallen_leaf @emoji :fallen_leaf: from "fallen_leaf"<br> + @emoji family @emoji :family: from "family"<br> + @emoji family_man_boy @emoji :family_man_boy: from "family_man_boy"<br> + @emoji family_man_boy_boy @emoji :family_man_boy_boy: from "family_man_boy_boy"<br> + @emoji family_man_girl @emoji :family_man_girl: from "family_man_girl"<br> + @emoji family_man_girl_boy @emoji :family_man_girl_boy: from "family_man_girl_boy"<br> + @emoji family_man_girl_girl @emoji :family_man_girl_girl: from "family_man_girl_girl"<br> + @emoji family_man_man_boy @emoji :family_man_man_boy: from "family_man_man_boy"<br> + @emoji family_man_man_boy_boy @emoji :family_man_man_boy_boy: from "family_man_man_boy_boy"<br> + @emoji family_man_man_girl @emoji :family_man_man_girl: from "family_man_man_girl"<br> + @emoji family_man_man_girl_boy @emoji :family_man_man_girl_boy: from "family_man_man_girl_boy"<br> + @emoji family_man_man_girl_girl @emoji :family_man_man_girl_girl: from "family_man_man_girl_girl"<br> + @emoji family_man_woman_boy @emoji :family_man_woman_boy: from "family_man_woman_boy"<br> + @emoji family_man_woman_boy_boy @emoji :family_man_woman_boy_boy: from "family_man_woman_boy_boy"<br> + @emoji family_man_woman_girl @emoji :family_man_woman_girl: from "family_man_woman_girl"<br> + @emoji family_man_woman_girl_boy @emoji :family_man_woman_girl_boy: from "family_man_woman_girl_boy"<br> + @emoji family_man_woman_girl_girl @emoji :family_man_woman_girl_girl: from "family_man_woman_girl_girl"<br> + @emoji family_woman_boy @emoji :family_woman_boy: from "family_woman_boy"<br> + @emoji family_woman_boy_boy @emoji :family_woman_boy_boy: from "family_woman_boy_boy"<br> + @emoji family_woman_girl @emoji :family_woman_girl: from "family_woman_girl"<br> + @emoji family_woman_girl_boy @emoji :family_woman_girl_boy: from "family_woman_girl_boy"<br> + @emoji family_woman_girl_girl @emoji :family_woman_girl_girl: from "family_woman_girl_girl"<br> + @emoji family_woman_woman_boy @emoji :family_woman_woman_boy: from "family_woman_woman_boy"<br> + @emoji family_woman_woman_boy_boy @emoji :family_woman_woman_boy_boy: from "family_woman_woman_boy_boy"<br> + @emoji family_woman_woman_girl @emoji :family_woman_woman_girl: from "family_woman_woman_girl"<br> + @emoji family_woman_woman_girl_boy @emoji :family_woman_woman_girl_boy: from "family_woman_woman_girl_boy"<br> + @emoji family_woman_woman_girl_girl @emoji :family_woman_woman_girl_girl: from "family_woman_woman_girl_girl"<br> + @emoji faroe_islands @emoji :faroe_islands: from "faroe_islands"<br> + @emoji fast_forward @emoji :fast_forward: from "fast_forward"<br> + @emoji fax @emoji :fax: from "fax"<br> + @emoji fearful @emoji :fearful: from "fearful"<br> + @emoji feet @emoji :feet: from "feet"<br> + @emoji female_detective @emoji :female_detective: from "female_detective"<br> + @emoji ferris_wheel @emoji :ferris_wheel: from "ferris_wheel"<br> + @emoji ferry @emoji :ferry: from "ferry"<br> + @emoji field_hockey @emoji :field_hockey: from "field_hockey"<br> + @emoji fiji @emoji :fiji: from "fiji"<br> + @emoji file_cabinet @emoji :file_cabinet: from "file_cabinet"<br> + @emoji file_folder @emoji :file_folder: from "file_folder"<br> + @emoji film_projector @emoji :film_projector: from "film_projector"<br> + @emoji film_strip @emoji :film_strip: from "film_strip"<br> + @emoji finland @emoji :finland: from "finland"<br> + @emoji fire @emoji :fire: from "fire"<br> + @emoji fire_engine @emoji :fire_engine: from "fire_engine"<br> + @emoji fireworks @emoji :fireworks: from "fireworks"<br> + @emoji first_quarter_moon @emoji :first_quarter_moon: from "first_quarter_moon"<br> + @emoji first_quarter_moon_with_face @emoji :first_quarter_moon_with_face: from "first_quarter_moon_with_face"<br> + @emoji fish @emoji :fish: from "fish"<br> + @emoji fish_cake @emoji :fish_cake: from "fish_cake"<br> + @emoji fishing_pole_and_fish @emoji :fishing_pole_and_fish: from "fishing_pole_and_fish"<br> + @emoji fist @emoji :fist: from "fist"<br> + @emoji fist_left @emoji :fist_left: from "fist_left"<br> + @emoji fist_oncoming @emoji :fist_oncoming: from "fist_oncoming"<br> + @emoji fist_raised @emoji :fist_raised: from "fist_raised"<br> + @emoji fist_right @emoji :fist_right: from "fist_right"<br> + @emoji five @emoji :five: from "five"<br> + @emoji flags @emoji :flags: from "flags"<br> + @emoji flashlight @emoji :flashlight: from "flashlight"<br> + @emoji fleur_de_lis @emoji :fleur_de_lis: from "fleur_de_lis"<br> + @emoji flight_arrival @emoji :flight_arrival: from "flight_arrival"<br> + @emoji flight_departure @emoji :flight_departure: from "flight_departure"<br> + @emoji flipper @emoji :flipper: from "flipper"<br> + @emoji floppy_disk @emoji :floppy_disk: from "floppy_disk"<br> + @emoji flower_playing_cards @emoji :flower_playing_cards: from "flower_playing_cards"<br> + @emoji flushed @emoji :flushed: from "flushed"<br> + @emoji fog @emoji :fog: from "fog"<br> + @emoji foggy @emoji :foggy: from "foggy"<br> + @emoji football @emoji :football: from "football"<br> + @emoji footprints @emoji :footprints: from "footprints"<br> + @emoji fork_and_knife @emoji :fork_and_knife: from "fork_and_knife"<br> + @emoji fountain @emoji :fountain: from "fountain"<br> + @emoji fountain_pen @emoji :fountain_pen: from "fountain_pen"<br> + @emoji four @emoji :four: from "four"<br> + @emoji four_leaf_clover @emoji :four_leaf_clover: from "four_leaf_clover"<br> + @emoji fox_face @emoji :fox_face: from "fox_face"<br> + @emoji fr @emoji :fr: from "fr"<br> + @emoji framed_picture @emoji :framed_picture: from "framed_picture"<br> + @emoji free @emoji :free: from "free"<br> + @emoji french_guiana @emoji :french_guiana: from "french_guiana"<br> + @emoji french_polynesia @emoji :french_polynesia: from "french_polynesia"<br> + @emoji french_southern_territories @emoji :french_southern_territories: from "french_southern_territories"<br> + @emoji fried_egg @emoji :fried_egg: from "fried_egg"<br> + @emoji fried_shrimp @emoji :fried_shrimp: from "fried_shrimp"<br> + @emoji fries @emoji :fries: from "fries"<br> + @emoji frog @emoji :frog: from "frog"<br> + @emoji frowning @emoji :frowning: from "frowning"<br> + @emoji frowning_face @emoji :frowning_face: from "frowning_face"<br> + @emoji frowning_man @emoji :frowning_man: from "frowning_man"<br> + @emoji frowning_woman @emoji :frowning_woman: from "frowning_woman"<br> + @emoji fu @emoji :fu: from "fu"<br> + @emoji fuelpump @emoji :fuelpump: from "fuelpump"<br> + @emoji full_moon @emoji :full_moon: from "full_moon"<br> + @emoji full_moon_with_face @emoji :full_moon_with_face: from "full_moon_with_face"<br> + @emoji funeral_urn @emoji :funeral_urn: from "funeral_urn"<br> + @emoji gabon @emoji :gabon: from "gabon"<br> + @emoji gambia @emoji :gambia: from "gambia"<br> + @emoji game_die @emoji :game_die: from "game_die"<br> + @emoji gb @emoji :gb: from "gb"<br> + @emoji gear @emoji :gear: from "gear"<br> + @emoji gem @emoji :gem: from "gem"<br> + @emoji gemini @emoji :gemini: from "gemini"<br> + @emoji georgia @emoji :georgia: from "georgia"<br> + @emoji ghana @emoji :ghana: from "ghana"<br> + @emoji ghost @emoji :ghost: from "ghost"<br> + @emoji gibraltar @emoji :gibraltar: from "gibraltar"<br> + @emoji gift @emoji :gift: from "gift"<br> + @emoji gift_heart @emoji :gift_heart: from "gift_heart"<br> + @emoji girl @emoji :girl: from "girl"<br> + @emoji globe_with_meridians @emoji :globe_with_meridians: from "globe_with_meridians"<br> + @emoji goal_net @emoji :goal_net: from "goal_net"<br> + @emoji goat @emoji :goat: from "goat"<br> + @emoji golf @emoji :golf: from "golf"<br> + @emoji golfing_man @emoji :golfing_man: from "golfing_man"<br> + @emoji golfing_woman @emoji :golfing_woman: from "golfing_woman"<br> + @emoji gorilla @emoji :gorilla: from "gorilla"<br> + @emoji grapes @emoji :grapes: from "grapes"<br> + @emoji greece @emoji :greece: from "greece"<br> + @emoji green_apple @emoji :green_apple: from "green_apple"<br> + @emoji green_book @emoji :green_book: from "green_book"<br> + @emoji green_heart @emoji :green_heart: from "green_heart"<br> + @emoji green_salad @emoji :green_salad: from "green_salad"<br> + @emoji greenland @emoji :greenland: from "greenland"<br> + @emoji grenada @emoji :grenada: from "grenada"<br> + @emoji grey_exclamation @emoji :grey_exclamation: from "grey_exclamation"<br> + @emoji grey_question @emoji :grey_question: from "grey_question"<br> + @emoji grimacing @emoji :grimacing: from "grimacing"<br> + @emoji grin @emoji :grin: from "grin"<br> + @emoji grinning @emoji :grinning: from "grinning"<br> + @emoji guadeloupe @emoji :guadeloupe: from "guadeloupe"<br> + @emoji guam @emoji :guam: from "guam"<br> + @emoji guardsman @emoji :guardsman: from "guardsman"<br> + @emoji guardswoman @emoji :guardswoman: from "guardswoman"<br> + @emoji guatemala @emoji :guatemala: from "guatemala"<br> + @emoji guernsey @emoji :guernsey: from "guernsey"<br> + @emoji guinea @emoji :guinea: from "guinea"<br> + @emoji guinea_bissau @emoji :guinea_bissau: from "guinea_bissau"<br> + @emoji guitar @emoji :guitar: from "guitar"<br> + @emoji gun @emoji :gun: from "gun"<br> + @emoji guyana @emoji :guyana: from "guyana"<br> + @emoji haircut @emoji :haircut: from "haircut"<br> + @emoji haircut_man @emoji :haircut_man: from "haircut_man"<br> + @emoji haircut_woman @emoji :haircut_woman: from "haircut_woman"<br> + @emoji haiti @emoji :haiti: from "haiti"<br> + @emoji hamburger @emoji :hamburger: from "hamburger"<br> + @emoji hammer @emoji :hammer: from "hammer"<br> + @emoji hammer_and_pick @emoji :hammer_and_pick: from "hammer_and_pick"<br> + @emoji hammer_and_wrench @emoji :hammer_and_wrench: from "hammer_and_wrench"<br> + @emoji hamster @emoji :hamster: from "hamster"<br> + @emoji hand @emoji :hand: from "hand"<br> + @emoji handbag @emoji :handbag: from "handbag"<br> + @emoji handshake @emoji :handshake: from "handshake"<br> + @emoji hankey @emoji :hankey: from "hankey"<br> + @emoji hash @emoji :hash: from "hash"<br> + @emoji hatched_chick @emoji :hatched_chick: from "hatched_chick"<br> + @emoji hatching_chick @emoji :hatching_chick: from "hatching_chick"<br> + @emoji headphones @emoji :headphones: from "headphones"<br> + @emoji hear_no_evil @emoji :hear_no_evil: from "hear_no_evil"<br> + @emoji heart @emoji :heart: from "heart"<br> + @emoji heart_decoration @emoji :heart_decoration: from "heart_decoration"<br> + @emoji heart_eyes @emoji :heart_eyes: from "heart_eyes"<br> + @emoji heart_eyes_cat @emoji :heart_eyes_cat: from "heart_eyes_cat"<br> + @emoji heartbeat @emoji :heartbeat: from "heartbeat"<br> + @emoji heartpulse @emoji :heartpulse: from "heartpulse"<br> + @emoji hearts @emoji :hearts: from "hearts"<br> + @emoji heavy_check_mark @emoji :heavy_check_mark: from "heavy_check_mark"<br> + @emoji heavy_division_sign @emoji :heavy_division_sign: from "heavy_division_sign"<br> + @emoji heavy_dollar_sign @emoji :heavy_dollar_sign: from "heavy_dollar_sign"<br> + @emoji heavy_exclamation_mark @emoji :heavy_exclamation_mark: from "heavy_exclamation_mark"<br> + @emoji heavy_heart_exclamation @emoji :heavy_heart_exclamation: from "heavy_heart_exclamation"<br> + @emoji heavy_minus_sign @emoji :heavy_minus_sign: from "heavy_minus_sign"<br> + @emoji heavy_multiplication_x @emoji :heavy_multiplication_x: from "heavy_multiplication_x"<br> + @emoji heavy_plus_sign @emoji :heavy_plus_sign: from "heavy_plus_sign"<br> + @emoji helicopter @emoji :helicopter: from "helicopter"<br> + @emoji herb @emoji :herb: from "herb"<br> + @emoji hibiscus @emoji :hibiscus: from "hibiscus"<br> + @emoji high_brightness @emoji :high_brightness: from "high_brightness"<br> + @emoji high_heel @emoji :high_heel: from "high_heel"<br> + @emoji hocho @emoji :hocho: from "hocho"<br> + @emoji hole @emoji :hole: from "hole"<br> + @emoji honduras @emoji :honduras: from "honduras"<br> + @emoji honey_pot @emoji :honey_pot: from "honey_pot"<br> + @emoji honeybee @emoji :honeybee: from "honeybee"<br> + @emoji hong_kong @emoji :hong_kong: from "hong_kong"<br> + @emoji horse @emoji :horse: from "horse"<br> + @emoji horse_racing @emoji :horse_racing: from "horse_racing"<br> + @emoji hospital @emoji :hospital: from "hospital"<br> + @emoji hot_pepper @emoji :hot_pepper: from "hot_pepper"<br> + @emoji hotdog @emoji :hotdog: from "hotdog"<br> + @emoji hotel @emoji :hotel: from "hotel"<br> + @emoji hotsprings @emoji :hotsprings: from "hotsprings"<br> + @emoji hourglass @emoji :hourglass: from "hourglass"<br> + @emoji hourglass_flowing_sand @emoji :hourglass_flowing_sand: from "hourglass_flowing_sand"<br> + @emoji house @emoji :house: from "house"<br> + @emoji house_with_garden @emoji :house_with_garden: from "house_with_garden"<br> + @emoji houses @emoji :houses: from "houses"<br> + @emoji hugs @emoji :hugs: from "hugs"<br> + @emoji hungary @emoji :hungary: from "hungary"<br> + @emoji hushed @emoji :hushed: from "hushed"<br> + @emoji ice_cream @emoji :ice_cream: from "ice_cream"<br> + @emoji ice_hockey @emoji :ice_hockey: from "ice_hockey"<br> + @emoji ice_skate @emoji :ice_skate: from "ice_skate"<br> + @emoji icecream @emoji :icecream: from "icecream"<br> + @emoji iceland @emoji :iceland: from "iceland"<br> + @emoji id @emoji :id: from "id"<br> + @emoji ideograph_advantage @emoji :ideograph_advantage: from "ideograph_advantage"<br> + @emoji imp @emoji :imp: from "imp"<br> + @emoji inbox_tray @emoji :inbox_tray: from "inbox_tray"<br> + @emoji incoming_envelope @emoji :incoming_envelope: from "incoming_envelope"<br> + @emoji india @emoji :india: from "india"<br> + @emoji indonesia @emoji :indonesia: from "indonesia"<br> + @emoji information_desk_person @emoji :information_desk_person: from "information_desk_person"<br> + @emoji information_source @emoji :information_source: from "information_source"<br> + @emoji innocent @emoji :innocent: from "innocent"<br> + @emoji interrobang @emoji :interrobang: from "interrobang"<br> + @emoji iphone @emoji :iphone: from "iphone"<br> + @emoji iran @emoji :iran: from "iran"<br> + @emoji iraq @emoji :iraq: from "iraq"<br> + @emoji ireland @emoji :ireland: from "ireland"<br> + @emoji isle_of_man @emoji :isle_of_man: from "isle_of_man"<br> + @emoji israel @emoji :israel: from "israel"<br> + @emoji it @emoji :it: from "it"<br> + @emoji izakaya_lantern @emoji :izakaya_lantern: from "izakaya_lantern"<br> + @emoji jack_o_lantern @emoji :jack_o_lantern: from "jack_o_lantern"<br> + @emoji jamaica @emoji :jamaica: from "jamaica"<br> + @emoji japan @emoji :japan: from "japan"<br> + @emoji japanese_castle @emoji :japanese_castle: from "japanese_castle"<br> + @emoji japanese_goblin @emoji :japanese_goblin: from "japanese_goblin"<br> + @emoji japanese_ogre @emoji :japanese_ogre: from "japanese_ogre"<br> + @emoji jeans @emoji :jeans: from "jeans"<br> + @emoji jersey @emoji :jersey: from "jersey"<br> + @emoji jordan @emoji :jordan: from "jordan"<br> + @emoji joy @emoji :joy: from "joy"<br> + @emoji joy_cat @emoji :joy_cat: from "joy_cat"<br> + @emoji joystick @emoji :joystick: from "joystick"<br> + @emoji jp @emoji :jp: from "jp"<br> + @emoji kaaba @emoji :kaaba: from "kaaba"<br> + @emoji kazakhstan @emoji :kazakhstan: from "kazakhstan"<br> + @emoji kenya @emoji :kenya: from "kenya"<br> + @emoji key @emoji :key: from "key"<br> + @emoji keyboard @emoji :keyboard: from "keyboard"<br> + @emoji keycap_ten @emoji :keycap_ten: from "keycap_ten"<br> + @emoji kick_scooter @emoji :kick_scooter: from "kick_scooter"<br> + @emoji kimono @emoji :kimono: from "kimono"<br> + @emoji kiribati @emoji :kiribati: from "kiribati"<br> + @emoji kiss @emoji :kiss: from "kiss"<br> + @emoji kissing @emoji :kissing: from "kissing"<br> + @emoji kissing_cat @emoji :kissing_cat: from "kissing_cat"<br> + @emoji kissing_closed_eyes @emoji :kissing_closed_eyes: from "kissing_closed_eyes"<br> + @emoji kissing_heart @emoji :kissing_heart: from "kissing_heart"<br> + @emoji kissing_smiling_eyes @emoji :kissing_smiling_eyes: from "kissing_smiling_eyes"<br> + @emoji kiwi_fruit @emoji :kiwi_fruit: from "kiwi_fruit"<br> + @emoji knife @emoji :knife: from "knife"<br> + @emoji koala @emoji :koala: from "koala"<br> + @emoji koko @emoji :koko: from "koko"<br> + @emoji kosovo @emoji :kosovo: from "kosovo"<br> + @emoji kr @emoji :kr: from "kr"<br> + @emoji kuwait @emoji :kuwait: from "kuwait"<br> + @emoji kyrgyzstan @emoji :kyrgyzstan: from "kyrgyzstan"<br> + @emoji label @emoji :label: from "label"<br> + @emoji lantern @emoji :lantern: from "lantern"<br> + @emoji laos @emoji :laos: from "laos"<br> + @emoji large_blue_circle @emoji :large_blue_circle: from "large_blue_circle"<br> + @emoji large_blue_diamond @emoji :large_blue_diamond: from "large_blue_diamond"<br> + @emoji large_orange_diamond @emoji :large_orange_diamond: from "large_orange_diamond"<br> + @emoji last_quarter_moon @emoji :last_quarter_moon: from "last_quarter_moon"<br> + @emoji last_quarter_moon_with_face @emoji :last_quarter_moon_with_face: from "last_quarter_moon_with_face"<br> + @emoji latin_cross @emoji :latin_cross: from "latin_cross"<br> + @emoji latvia @emoji :latvia: from "latvia"<br> + @emoji laughing @emoji :laughing: from "laughing"<br> + @emoji leaves @emoji :leaves: from "leaves"<br> + @emoji lebanon @emoji :lebanon: from "lebanon"<br> + @emoji ledger @emoji :ledger: from "ledger"<br> + @emoji left_luggage @emoji :left_luggage: from "left_luggage"<br> + @emoji left_right_arrow @emoji :left_right_arrow: from "left_right_arrow"<br> + @emoji leftwards_arrow_with_hook @emoji :leftwards_arrow_with_hook: from "leftwards_arrow_with_hook"<br> + @emoji lemon @emoji :lemon: from "lemon"<br> + @emoji leo @emoji :leo: from "leo"<br> + @emoji leopard @emoji :leopard: from "leopard"<br> + @emoji lesotho @emoji :lesotho: from "lesotho"<br> + @emoji level_slider @emoji :level_slider: from "level_slider"<br> + @emoji liberia @emoji :liberia: from "liberia"<br> + @emoji libra @emoji :libra: from "libra"<br> + @emoji libya @emoji :libya: from "libya"<br> + @emoji liechtenstein @emoji :liechtenstein: from "liechtenstein"<br> + @emoji light_rail @emoji :light_rail: from "light_rail"<br> + @emoji link @emoji :link: from "link"<br> + @emoji lion @emoji :lion: from "lion"<br> + @emoji lips @emoji :lips: from "lips"<br> + @emoji lipstick @emoji :lipstick: from "lipstick"<br> + @emoji lithuania @emoji :lithuania: from "lithuania"<br> + @emoji lizard @emoji :lizard: from "lizard"<br> + @emoji lock @emoji :lock: from "lock"<br> + @emoji lock_with_ink_pen @emoji :lock_with_ink_pen: from "lock_with_ink_pen"<br> + @emoji lollipop @emoji :lollipop: from "lollipop"<br> + @emoji loop @emoji :loop: from "loop"<br> + @emoji loud_sound @emoji :loud_sound: from "loud_sound"<br> + @emoji loudspeaker @emoji :loudspeaker: from "loudspeaker"<br> + @emoji love_hotel @emoji :love_hotel: from "love_hotel"<br> + @emoji love_letter @emoji :love_letter: from "love_letter"<br> + @emoji low_brightness @emoji :low_brightness: from "low_brightness"<br> + @emoji luxembourg @emoji :luxembourg: from "luxembourg"<br> + @emoji lying_face @emoji :lying_face: from "lying_face"<br> + @emoji m @emoji :m: from "m"<br> + @emoji macau @emoji :macau: from "macau"<br> + @emoji macedonia @emoji :macedonia: from "macedonia"<br> + @emoji madagascar @emoji :madagascar: from "madagascar"<br> + @emoji mag @emoji :mag: from "mag"<br> + @emoji mag_right @emoji :mag_right: from "mag_right"<br> + @emoji mahjong @emoji :mahjong: from "mahjong"<br> + @emoji mailbox @emoji :mailbox: from "mailbox"<br> + @emoji mailbox_closed @emoji :mailbox_closed: from "mailbox_closed"<br> + @emoji mailbox_with_mail @emoji :mailbox_with_mail: from "mailbox_with_mail"<br> + @emoji mailbox_with_no_mail @emoji :mailbox_with_no_mail: from "mailbox_with_no_mail"<br> + @emoji malawi @emoji :malawi: from "malawi"<br> + @emoji malaysia @emoji :malaysia: from "malaysia"<br> + @emoji maldives @emoji :maldives: from "maldives"<br> + @emoji male_detective @emoji :male_detective: from "male_detective"<br> + @emoji mali @emoji :mali: from "mali"<br> + @emoji malta @emoji :malta: from "malta"<br> + @emoji man @emoji :man: from "man"<br> + @emoji man_artist @emoji :man_artist: from "man_artist"<br> + @emoji man_astronaut @emoji :man_astronaut: from "man_astronaut"<br> + @emoji man_cartwheeling @emoji :man_cartwheeling: from "man_cartwheeling"<br> + @emoji man_cook @emoji :man_cook: from "man_cook"<br> + @emoji man_dancing @emoji :man_dancing: from "man_dancing"<br> + @emoji man_facepalming @emoji :man_facepalming: from "man_facepalming"<br> + @emoji man_factory_worker @emoji :man_factory_worker: from "man_factory_worker"<br> + @emoji man_farmer @emoji :man_farmer: from "man_farmer"<br> + @emoji man_firefighter @emoji :man_firefighter: from "man_firefighter"<br> + @emoji man_health_worker @emoji :man_health_worker: from "man_health_worker"<br> + @emoji man_in_tuxedo @emoji :man_in_tuxedo: from "man_in_tuxedo"<br> + @emoji man_judge @emoji :man_judge: from "man_judge"<br> + @emoji man_juggling @emoji :man_juggling: from "man_juggling"<br> + @emoji man_mechanic @emoji :man_mechanic: from "man_mechanic"<br> + @emoji man_office_worker @emoji :man_office_worker: from "man_office_worker"<br> + @emoji man_pilot @emoji :man_pilot: from "man_pilot"<br> + @emoji man_playing_handball @emoji :man_playing_handball: from "man_playing_handball"<br> + @emoji man_playing_water_polo @emoji :man_playing_water_polo: from "man_playing_water_polo"<br> + @emoji man_scientist @emoji :man_scientist: from "man_scientist"<br> + @emoji man_shrugging @emoji :man_shrugging: from "man_shrugging"<br> + @emoji man_singer @emoji :man_singer: from "man_singer"<br> + @emoji man_student @emoji :man_student: from "man_student"<br> + @emoji man_teacher @emoji :man_teacher: from "man_teacher"<br> + @emoji man_technologist @emoji :man_technologist: from "man_technologist"<br> + @emoji man_with_gua_pi_mao @emoji :man_with_gua_pi_mao: from "man_with_gua_pi_mao"<br> + @emoji man_with_turban @emoji :man_with_turban: from "man_with_turban"<br> + @emoji mandarin @emoji :mandarin: from "mandarin"<br> + @emoji mans_shoe @emoji :mans_shoe: from "mans_shoe"<br> + @emoji mantelpiece_clock @emoji :mantelpiece_clock: from "mantelpiece_clock"<br> + @emoji maple_leaf @emoji :maple_leaf: from "maple_leaf"<br> + @emoji marshall_islands @emoji :marshall_islands: from "marshall_islands"<br> + @emoji martial_arts_uniform @emoji :martial_arts_uniform: from "martial_arts_uniform"<br> + @emoji martinique @emoji :martinique: from "martinique"<br> + @emoji mask @emoji :mask: from "mask"<br> + @emoji massage @emoji :massage: from "massage"<br> + @emoji massage_man @emoji :massage_man: from "massage_man"<br> + @emoji massage_woman @emoji :massage_woman: from "massage_woman"<br> + @emoji mauritania @emoji :mauritania: from "mauritania"<br> + @emoji mauritius @emoji :mauritius: from "mauritius"<br> + @emoji mayotte @emoji :mayotte: from "mayotte"<br> + @emoji meat_on_bone @emoji :meat_on_bone: from "meat_on_bone"<br> + @emoji medal_military @emoji :medal_military: from "medal_military"<br> + @emoji medal_sports @emoji :medal_sports: from "medal_sports"<br> + @emoji mega @emoji :mega: from "mega"<br> + @emoji melon @emoji :melon: from "melon"<br> + @emoji memo @emoji :memo: from "memo"<br> + @emoji men_wrestling @emoji :men_wrestling: from "men_wrestling"<br> + @emoji menorah @emoji :menorah: from "menorah"<br> + @emoji mens @emoji :mens: from "mens"<br> + @emoji metal @emoji :metal: from "metal"<br> + @emoji metro @emoji :metro: from "metro"<br> + @emoji mexico @emoji :mexico: from "mexico"<br> + @emoji micronesia @emoji :micronesia: from "micronesia"<br> + @emoji microphone @emoji :microphone: from "microphone"<br> + @emoji microscope @emoji :microscope: from "microscope"<br> + @emoji middle_finger @emoji :middle_finger: from "middle_finger"<br> + @emoji milk_glass @emoji :milk_glass: from "milk_glass"<br> + @emoji milky_way @emoji :milky_way: from "milky_way"<br> + @emoji minibus @emoji :minibus: from "minibus"<br> + @emoji minidisc @emoji :minidisc: from "minidisc"<br> + @emoji mobile_phone_off @emoji :mobile_phone_off: from "mobile_phone_off"<br> + @emoji moldova @emoji :moldova: from "moldova"<br> + @emoji monaco @emoji :monaco: from "monaco"<br> + @emoji money_mouth_face @emoji :money_mouth_face: from "money_mouth_face"<br> + @emoji money_with_wings @emoji :money_with_wings: from "money_with_wings"<br> + @emoji moneybag @emoji :moneybag: from "moneybag"<br> + @emoji mongolia @emoji :mongolia: from "mongolia"<br> + @emoji monkey @emoji :monkey: from "monkey"<br> + @emoji monkey_face @emoji :monkey_face: from "monkey_face"<br> + @emoji monorail @emoji :monorail: from "monorail"<br> + @emoji montenegro @emoji :montenegro: from "montenegro"<br> + @emoji montserrat @emoji :montserrat: from "montserrat"<br> + @emoji moon @emoji :moon: from "moon"<br> + @emoji morocco @emoji :morocco: from "morocco"<br> + @emoji mortar_board @emoji :mortar_board: from "mortar_board"<br> + @emoji mosque @emoji :mosque: from "mosque"<br> + @emoji motor_boat @emoji :motor_boat: from "motor_boat"<br> + @emoji motor_scooter @emoji :motor_scooter: from "motor_scooter"<br> + @emoji motorcycle @emoji :motorcycle: from "motorcycle"<br> + @emoji motorway @emoji :motorway: from "motorway"<br> + @emoji mount_fuji @emoji :mount_fuji: from "mount_fuji"<br> + @emoji mountain @emoji :mountain: from "mountain"<br> + @emoji mountain_bicyclist @emoji :mountain_bicyclist: from "mountain_bicyclist"<br> + @emoji mountain_biking_man @emoji :mountain_biking_man: from "mountain_biking_man"<br> + @emoji mountain_biking_woman @emoji :mountain_biking_woman: from "mountain_biking_woman"<br> + @emoji mountain_cableway @emoji :mountain_cableway: from "mountain_cableway"<br> + @emoji mountain_railway @emoji :mountain_railway: from "mountain_railway"<br> + @emoji mountain_snow @emoji :mountain_snow: from "mountain_snow"<br> + @emoji mouse @emoji :mouse: from "mouse"<br> + @emoji mouse2 @emoji :mouse2: from "mouse2"<br> + @emoji movie_camera @emoji :movie_camera: from "movie_camera"<br> + @emoji moyai @emoji :moyai: from "moyai"<br> + @emoji mozambique @emoji :mozambique: from "mozambique"<br> + @emoji mrs_claus @emoji :mrs_claus: from "mrs_claus"<br> + @emoji muscle @emoji :muscle: from "muscle"<br> + @emoji mushroom @emoji :mushroom: from "mushroom"<br> + @emoji musical_keyboard @emoji :musical_keyboard: from "musical_keyboard"<br> + @emoji musical_note @emoji :musical_note: from "musical_note"<br> + @emoji musical_score @emoji :musical_score: from "musical_score"<br> + @emoji mute @emoji :mute: from "mute"<br> + @emoji myanmar @emoji :myanmar: from "myanmar"<br> + @emoji nail_care @emoji :nail_care: from "nail_care"<br> + @emoji name_badge @emoji :name_badge: from "name_badge"<br> + @emoji namibia @emoji :namibia: from "namibia"<br> + @emoji national_park @emoji :national_park: from "national_park"<br> + @emoji nauru @emoji :nauru: from "nauru"<br> + @emoji nauseated_face @emoji :nauseated_face: from "nauseated_face"<br> + @emoji necktie @emoji :necktie: from "necktie"<br> + @emoji negative_squared_cross_mark @emoji :negative_squared_cross_mark: from "negative_squared_cross_mark"<br> + @emoji nepal @emoji :nepal: from "nepal"<br> + @emoji nerd_face @emoji :nerd_face: from "nerd_face"<br> + @emoji netherlands @emoji :netherlands: from "netherlands"<br> + @emoji neutral_face @emoji :neutral_face: from "neutral_face"<br> + @emoji new @emoji :new: from "new"<br> + @emoji new_caledonia @emoji :new_caledonia: from "new_caledonia"<br> + @emoji new_moon @emoji :new_moon: from "new_moon"<br> + @emoji new_moon_with_face @emoji :new_moon_with_face: from "new_moon_with_face"<br> + @emoji new_zealand @emoji :new_zealand: from "new_zealand"<br> + @emoji newspaper @emoji :newspaper: from "newspaper"<br> + @emoji newspaper_roll @emoji :newspaper_roll: from "newspaper_roll"<br> + @emoji next_track_button @emoji :next_track_button: from "next_track_button"<br> + @emoji ng @emoji :ng: from "ng"<br> + @emoji ng_man @emoji :ng_man: from "ng_man"<br> + @emoji ng_woman @emoji :ng_woman: from "ng_woman"<br> + @emoji nicaragua @emoji :nicaragua: from "nicaragua"<br> + @emoji niger @emoji :niger: from "niger"<br> + @emoji nigeria @emoji :nigeria: from "nigeria"<br> + @emoji night_with_stars @emoji :night_with_stars: from "night_with_stars"<br> + @emoji nine @emoji :nine: from "nine"<br> + @emoji niue @emoji :niue: from "niue"<br> + @emoji no_bell @emoji :no_bell: from "no_bell"<br> + @emoji no_bicycles @emoji :no_bicycles: from "no_bicycles"<br> + @emoji no_entry @emoji :no_entry: from "no_entry"<br> + @emoji no_entry_sign @emoji :no_entry_sign: from "no_entry_sign"<br> + @emoji no_good @emoji :no_good: from "no_good"<br> + @emoji no_good_man @emoji :no_good_man: from "no_good_man"<br> + @emoji no_good_woman @emoji :no_good_woman: from "no_good_woman"<br> + @emoji no_mobile_phones @emoji :no_mobile_phones: from "no_mobile_phones"<br> + @emoji no_mouth @emoji :no_mouth: from "no_mouth"<br> + @emoji no_pedestrians @emoji :no_pedestrians: from "no_pedestrians"<br> + @emoji no_smoking @emoji :no_smoking: from "no_smoking"<br> + @emoji non-potable_water @emoji :non-potable_water: from "non-potable_water"<br> + @emoji norfolk_island @emoji :norfolk_island: from "norfolk_island"<br> + @emoji north_korea @emoji :north_korea: from "north_korea"<br> + @emoji northern_mariana_islands @emoji :northern_mariana_islands: from "northern_mariana_islands"<br> + @emoji norway @emoji :norway: from "norway"<br> + @emoji nose @emoji :nose: from "nose"<br> + @emoji notebook @emoji :notebook: from "notebook"<br> + @emoji notebook_with_decorative_cover @emoji :notebook_with_decorative_cover: from "notebook_with_decorative_cover"<br> + @emoji notes @emoji :notes: from "notes"<br> + @emoji nut_and_bolt @emoji :nut_and_bolt: from "nut_and_bolt"<br> + @emoji o @emoji :o: from "o"<br> + @emoji o2 @emoji :o2: from "o2"<br> + @emoji ocean @emoji :ocean: from "ocean"<br> + @emoji octopus @emoji :octopus: from "octopus"<br> + @emoji oden @emoji :oden: from "oden"<br> + @emoji office @emoji :office: from "office"<br> + @emoji oil_drum @emoji :oil_drum: from "oil_drum"<br> + @emoji ok @emoji :ok: from "ok"<br> + @emoji ok_hand @emoji :ok_hand: from "ok_hand"<br> + @emoji ok_man @emoji :ok_man: from "ok_man"<br> + @emoji ok_woman @emoji :ok_woman: from "ok_woman"<br> + @emoji old_key @emoji :old_key: from "old_key"<br> + @emoji older_man @emoji :older_man: from "older_man"<br> + @emoji older_woman @emoji :older_woman: from "older_woman"<br> + @emoji om @emoji :om: from "om"<br> + @emoji oman @emoji :oman: from "oman"<br> + @emoji on @emoji :on: from "on"<br> + @emoji oncoming_automobile @emoji :oncoming_automobile: from "oncoming_automobile"<br> + @emoji oncoming_bus @emoji :oncoming_bus: from "oncoming_bus"<br> + @emoji oncoming_police_car @emoji :oncoming_police_car: from "oncoming_police_car"<br> + @emoji oncoming_taxi @emoji :oncoming_taxi: from "oncoming_taxi"<br> + @emoji one @emoji :one: from "one"<br> + @emoji open_book @emoji :open_book: from "open_book"<br> + @emoji open_file_folder @emoji :open_file_folder: from "open_file_folder"<br> + @emoji open_hands @emoji :open_hands: from "open_hands"<br> + @emoji open_mouth @emoji :open_mouth: from "open_mouth"<br> + @emoji open_umbrella @emoji :open_umbrella: from "open_umbrella"<br> + @emoji ophiuchus @emoji :ophiuchus: from "ophiuchus"<br> + @emoji orange @emoji :orange: from "orange"<br> + @emoji orange_book @emoji :orange_book: from "orange_book"<br> + @emoji orthodox_cross @emoji :orthodox_cross: from "orthodox_cross"<br> + @emoji outbox_tray @emoji :outbox_tray: from "outbox_tray"<br> + @emoji owl @emoji :owl: from "owl"<br> + @emoji ox @emoji :ox: from "ox"<br> + @emoji package @emoji :package: from "package"<br> + @emoji page_facing_up @emoji :page_facing_up: from "page_facing_up"<br> + @emoji page_with_curl @emoji :page_with_curl: from "page_with_curl"<br> + @emoji pager @emoji :pager: from "pager"<br> + @emoji paintbrush @emoji :paintbrush: from "paintbrush"<br> + @emoji pakistan @emoji :pakistan: from "pakistan"<br> + @emoji palau @emoji :palau: from "palau"<br> + @emoji palestinian_territories @emoji :palestinian_territories: from "palestinian_territories"<br> + @emoji palm_tree @emoji :palm_tree: from "palm_tree"<br> + @emoji panama @emoji :panama: from "panama"<br> + @emoji pancakes @emoji :pancakes: from "pancakes"<br> + @emoji panda_face @emoji :panda_face: from "panda_face"<br> + @emoji paperclip @emoji :paperclip: from "paperclip"<br> + @emoji paperclips @emoji :paperclips: from "paperclips"<br> + @emoji papua_new_guinea @emoji :papua_new_guinea: from "papua_new_guinea"<br> + @emoji paraguay @emoji :paraguay: from "paraguay"<br> + @emoji parasol_on_ground @emoji :parasol_on_ground: from "parasol_on_ground"<br> + @emoji parking @emoji :parking: from "parking"<br> + @emoji part_alternation_mark @emoji :part_alternation_mark: from "part_alternation_mark"<br> + @emoji partly_sunny @emoji :partly_sunny: from "partly_sunny"<br> + @emoji passenger_ship @emoji :passenger_ship: from "passenger_ship"<br> + @emoji passport_control @emoji :passport_control: from "passport_control"<br> + @emoji pause_button @emoji :pause_button: from "pause_button"<br> + @emoji paw_prints @emoji :paw_prints: from "paw_prints"<br> + @emoji peace_symbol @emoji :peace_symbol: from "peace_symbol"<br> + @emoji peach @emoji :peach: from "peach"<br> + @emoji peanuts @emoji :peanuts: from "peanuts"<br> + @emoji pear @emoji :pear: from "pear"<br> + @emoji pen @emoji :pen: from "pen"<br> + @emoji pencil @emoji :pencil: from "pencil"<br> + @emoji pencil2 @emoji :pencil2: from "pencil2"<br> + @emoji penguin @emoji :penguin: from "penguin"<br> + @emoji pensive @emoji :pensive: from "pensive"<br> + @emoji performing_arts @emoji :performing_arts: from "performing_arts"<br> + @emoji persevere @emoji :persevere: from "persevere"<br> + @emoji person_fencing @emoji :person_fencing: from "person_fencing"<br> + @emoji person_frowning @emoji :person_frowning: from "person_frowning"<br> + @emoji person_with_blond_hair @emoji :person_with_blond_hair: from "person_with_blond_hair"<br> + @emoji person_with_pouting_face @emoji :person_with_pouting_face: from "person_with_pouting_face"<br> + @emoji peru @emoji :peru: from "peru"<br> + @emoji philippines @emoji :philippines: from "philippines"<br> + @emoji phone @emoji :phone: from "phone"<br> + @emoji pick @emoji :pick: from "pick"<br> + @emoji pig @emoji :pig: from "pig"<br> + @emoji pig2 @emoji :pig2: from "pig2"<br> + @emoji pig_nose @emoji :pig_nose: from "pig_nose"<br> + @emoji pill @emoji :pill: from "pill"<br> + @emoji pineapple @emoji :pineapple: from "pineapple"<br> + @emoji ping_pong @emoji :ping_pong: from "ping_pong"<br> + @emoji pisces @emoji :pisces: from "pisces"<br> + @emoji pitcairn_islands @emoji :pitcairn_islands: from "pitcairn_islands"<br> + @emoji pizza @emoji :pizza: from "pizza"<br> + @emoji place_of_worship @emoji :place_of_worship: from "place_of_worship"<br> + @emoji plate_with_cutlery @emoji :plate_with_cutlery: from "plate_with_cutlery"<br> + @emoji play_or_pause_button @emoji :play_or_pause_button: from "play_or_pause_button"<br> + @emoji point_down @emoji :point_down: from "point_down"<br> + @emoji point_left @emoji :point_left: from "point_left"<br> + @emoji point_right @emoji :point_right: from "point_right"<br> + @emoji point_up @emoji :point_up: from "point_up"<br> + @emoji point_up_2 @emoji :point_up_2: from "point_up_2"<br> + @emoji poland @emoji :poland: from "poland"<br> + @emoji police_car @emoji :police_car: from "police_car"<br> + @emoji policeman @emoji :policeman: from "policeman"<br> + @emoji policewoman @emoji :policewoman: from "policewoman"<br> + @emoji poodle @emoji :poodle: from "poodle"<br> + @emoji poop @emoji :poop: from "poop"<br> + @emoji popcorn @emoji :popcorn: from "popcorn"<br> + @emoji portugal @emoji :portugal: from "portugal"<br> + @emoji post_office @emoji :post_office: from "post_office"<br> + @emoji postal_horn @emoji :postal_horn: from "postal_horn"<br> + @emoji postbox @emoji :postbox: from "postbox"<br> + @emoji potable_water @emoji :potable_water: from "potable_water"<br> + @emoji potato @emoji :potato: from "potato"<br> + @emoji pouch @emoji :pouch: from "pouch"<br> + @emoji poultry_leg @emoji :poultry_leg: from "poultry_leg"<br> + @emoji pound @emoji :pound: from "pound"<br> + @emoji pout @emoji :pout: from "pout"<br> + @emoji pouting_cat @emoji :pouting_cat: from "pouting_cat"<br> + @emoji pouting_man @emoji :pouting_man: from "pouting_man"<br> + @emoji pouting_woman @emoji :pouting_woman: from "pouting_woman"<br> + @emoji pray @emoji :pray: from "pray"<br> + @emoji prayer_beads @emoji :prayer_beads: from "prayer_beads"<br> + @emoji pregnant_woman @emoji :pregnant_woman: from "pregnant_woman"<br> + @emoji previous_track_button @emoji :previous_track_button: from "previous_track_button"<br> + @emoji prince @emoji :prince: from "prince"<br> + @emoji princess @emoji :princess: from "princess"<br> + @emoji printer @emoji :printer: from "printer"<br> + @emoji puerto_rico @emoji :puerto_rico: from "puerto_rico"<br> + @emoji punch @emoji :punch: from "punch"<br> + @emoji purple_heart @emoji :purple_heart: from "purple_heart"<br> + @emoji purse @emoji :purse: from "purse"<br> + @emoji pushpin @emoji :pushpin: from "pushpin"<br> + @emoji put_litter_in_its_place @emoji :put_litter_in_its_place: from "put_litter_in_its_place"<br> + @emoji qatar @emoji :qatar: from "qatar"<br> + @emoji question @emoji :question: from "question"<br> + @emoji rabbit @emoji :rabbit: from "rabbit"<br> + @emoji rabbit2 @emoji :rabbit2: from "rabbit2"<br> + @emoji racehorse @emoji :racehorse: from "racehorse"<br> + @emoji racing_car @emoji :racing_car: from "racing_car"<br> + @emoji radio @emoji :radio: from "radio"<br> + @emoji radio_button @emoji :radio_button: from "radio_button"<br> + @emoji radioactive @emoji :radioactive: from "radioactive"<br> + @emoji rage @emoji :rage: from "rage"<br> + @emoji railway_car @emoji :railway_car: from "railway_car"<br> + @emoji railway_track @emoji :railway_track: from "railway_track"<br> + @emoji rainbow @emoji :rainbow: from "rainbow"<br> + @emoji rainbow_flag @emoji :rainbow_flag: from "rainbow_flag"<br> + @emoji raised_back_of_hand @emoji :raised_back_of_hand: from "raised_back_of_hand"<br> + @emoji raised_hand @emoji :raised_hand: from "raised_hand"<br> + @emoji raised_hand_with_fingers_splayed @emoji :raised_hand_with_fingers_splayed: from "raised_hand_with_fingers_splayed"<br> + @emoji raised_hands @emoji :raised_hands: from "raised_hands"<br> + @emoji raising_hand @emoji :raising_hand: from "raising_hand"<br> + @emoji raising_hand_man @emoji :raising_hand_man: from "raising_hand_man"<br> + @emoji raising_hand_woman @emoji :raising_hand_woman: from "raising_hand_woman"<br> + @emoji ram @emoji :ram: from "ram"<br> + @emoji ramen @emoji :ramen: from "ramen"<br> + @emoji rat @emoji :rat: from "rat"<br> + @emoji record_button @emoji :record_button: from "record_button"<br> + @emoji recycle @emoji :recycle: from "recycle"<br> + @emoji red_car @emoji :red_car: from "red_car"<br> + @emoji red_circle @emoji :red_circle: from "red_circle"<br> + @emoji registered @emoji :registered: from "registered"<br> + @emoji relaxed @emoji :relaxed: from "relaxed"<br> + @emoji relieved @emoji :relieved: from "relieved"<br> + @emoji reminder_ribbon @emoji :reminder_ribbon: from "reminder_ribbon"<br> + @emoji repeat @emoji :repeat: from "repeat"<br> + @emoji repeat_one @emoji :repeat_one: from "repeat_one"<br> + @emoji rescue_worker_helmet @emoji :rescue_worker_helmet: from "rescue_worker_helmet"<br> + @emoji restroom @emoji :restroom: from "restroom"<br> + @emoji reunion @emoji :reunion: from "reunion"<br> + @emoji revolving_hearts @emoji :revolving_hearts: from "revolving_hearts"<br> + @emoji rewind @emoji :rewind: from "rewind"<br> + @emoji rhinoceros @emoji :rhinoceros: from "rhinoceros"<br> + @emoji ribbon @emoji :ribbon: from "ribbon"<br> + @emoji rice @emoji :rice: from "rice"<br> + @emoji rice_ball @emoji :rice_ball: from "rice_ball"<br> + @emoji rice_cracker @emoji :rice_cracker: from "rice_cracker"<br> + @emoji rice_scene @emoji :rice_scene: from "rice_scene"<br> + @emoji right_anger_bubble @emoji :right_anger_bubble: from "right_anger_bubble"<br> + @emoji ring @emoji :ring: from "ring"<br> + @emoji robot @emoji :robot: from "robot"<br> + @emoji rocket @emoji :rocket: from "rocket"<br> + @emoji rofl @emoji :rofl: from "rofl"<br> + @emoji roll_eyes @emoji :roll_eyes: from "roll_eyes"<br> + @emoji roller_coaster @emoji :roller_coaster: from "roller_coaster"<br> + @emoji romania @emoji :romania: from "romania"<br> + @emoji rooster @emoji :rooster: from "rooster"<br> + @emoji rose @emoji :rose: from "rose"<br> + @emoji rosette @emoji :rosette: from "rosette"<br> + @emoji rotating_light @emoji :rotating_light: from "rotating_light"<br> + @emoji round_pushpin @emoji :round_pushpin: from "round_pushpin"<br> + @emoji rowboat @emoji :rowboat: from "rowboat"<br> + @emoji rowing_man @emoji :rowing_man: from "rowing_man"<br> + @emoji rowing_woman @emoji :rowing_woman: from "rowing_woman"<br> + @emoji ru @emoji :ru: from "ru"<br> + @emoji rugby_football @emoji :rugby_football: from "rugby_football"<br> + @emoji runner @emoji :runner: from "runner"<br> + @emoji running @emoji :running: from "running"<br> + @emoji running_man @emoji :running_man: from "running_man"<br> + @emoji running_shirt_with_sash @emoji :running_shirt_with_sash: from "running_shirt_with_sash"<br> + @emoji running_woman @emoji :running_woman: from "running_woman"<br> + @emoji rwanda @emoji :rwanda: from "rwanda"<br> + @emoji sa @emoji :sa: from "sa"<br> + @emoji sagittarius @emoji :sagittarius: from "sagittarius"<br> + @emoji sailboat @emoji :sailboat: from "sailboat"<br> + @emoji sake @emoji :sake: from "sake"<br> + @emoji samoa @emoji :samoa: from "samoa"<br> + @emoji san_marino @emoji :san_marino: from "san_marino"<br> + @emoji sandal @emoji :sandal: from "sandal"<br> + @emoji santa @emoji :santa: from "santa"<br> + @emoji sao_tome_principe @emoji :sao_tome_principe: from "sao_tome_principe"<br> + @emoji satellite @emoji :satellite: from "satellite"<br> + @emoji satisfied @emoji :satisfied: from "satisfied"<br> + @emoji saudi_arabia @emoji :saudi_arabia: from "saudi_arabia"<br> + @emoji saxophone @emoji :saxophone: from "saxophone"<br> + @emoji school @emoji :school: from "school"<br> + @emoji school_satchel @emoji :school_satchel: from "school_satchel"<br> + @emoji scissors @emoji :scissors: from "scissors"<br> + @emoji scorpion @emoji :scorpion: from "scorpion"<br> + @emoji scorpius @emoji :scorpius: from "scorpius"<br> + @emoji scream @emoji :scream: from "scream"<br> + @emoji scream_cat @emoji :scream_cat: from "scream_cat"<br> + @emoji scroll @emoji :scroll: from "scroll"<br> + @emoji seat @emoji :seat: from "seat"<br> + @emoji secret @emoji :secret: from "secret"<br> + @emoji see_no_evil @emoji :see_no_evil: from "see_no_evil"<br> + @emoji seedling @emoji :seedling: from "seedling"<br> + @emoji selfie @emoji :selfie: from "selfie"<br> + @emoji senegal @emoji :senegal: from "senegal"<br> + @emoji serbia @emoji :serbia: from "serbia"<br> + @emoji seven @emoji :seven: from "seven"<br> + @emoji seychelles @emoji :seychelles: from "seychelles"<br> + @emoji shallow_pan_of_food @emoji :shallow_pan_of_food: from "shallow_pan_of_food"<br> + @emoji shamrock @emoji :shamrock: from "shamrock"<br> + @emoji shark @emoji :shark: from "shark"<br> + @emoji shaved_ice @emoji :shaved_ice: from "shaved_ice"<br> + @emoji sheep @emoji :sheep: from "sheep"<br> + @emoji shell @emoji :shell: from "shell"<br> + @emoji shield @emoji :shield: from "shield"<br> + @emoji shinto_shrine @emoji :shinto_shrine: from "shinto_shrine"<br> + @emoji ship @emoji :ship: from "ship"<br> + @emoji shirt @emoji :shirt: from "shirt"<br> + @emoji shit @emoji :shit: from "shit"<br> + @emoji shoe @emoji :shoe: from "shoe"<br> + @emoji shopping @emoji :shopping: from "shopping"<br> + @emoji shopping_cart @emoji :shopping_cart: from "shopping_cart"<br> + @emoji shower @emoji :shower: from "shower"<br> + @emoji shrimp @emoji :shrimp: from "shrimp"<br> + @emoji sierra_leone @emoji :sierra_leone: from "sierra_leone"<br> + @emoji signal_strength @emoji :signal_strength: from "signal_strength"<br> + @emoji singapore @emoji :singapore: from "singapore"<br> + @emoji sint_maarten @emoji :sint_maarten: from "sint_maarten"<br> + @emoji six @emoji :six: from "six"<br> + @emoji six_pointed_star @emoji :six_pointed_star: from "six_pointed_star"<br> + @emoji ski @emoji :ski: from "ski"<br> + @emoji skier @emoji :skier: from "skier"<br> + @emoji skull @emoji :skull: from "skull"<br> + @emoji skull_and_crossbones @emoji :skull_and_crossbones: from "skull_and_crossbones"<br> + @emoji sleeping @emoji :sleeping: from "sleeping"<br> + @emoji sleeping_bed @emoji :sleeping_bed: from "sleeping_bed"<br> + @emoji sleepy @emoji :sleepy: from "sleepy"<br> + @emoji slightly_frowning_face @emoji :slightly_frowning_face: from "slightly_frowning_face"<br> + @emoji slightly_smiling_face @emoji :slightly_smiling_face: from "slightly_smiling_face"<br> + @emoji slot_machine @emoji :slot_machine: from "slot_machine"<br> + @emoji slovakia @emoji :slovakia: from "slovakia"<br> + @emoji slovenia @emoji :slovenia: from "slovenia"<br> + @emoji small_airplane @emoji :small_airplane: from "small_airplane"<br> + @emoji small_blue_diamond @emoji :small_blue_diamond: from "small_blue_diamond"<br> + @emoji small_orange_diamond @emoji :small_orange_diamond: from "small_orange_diamond"<br> + @emoji small_red_triangle @emoji :small_red_triangle: from "small_red_triangle"<br> + @emoji small_red_triangle_down @emoji :small_red_triangle_down: from "small_red_triangle_down"<br> + @emoji smile @emoji :smile: from "smile"<br> + @emoji smile_cat @emoji :smile_cat: from "smile_cat"<br> + @emoji smiley @emoji :smiley: from "smiley"<br> + @emoji smiley_cat @emoji :smiley_cat: from "smiley_cat"<br> + @emoji smiling_imp @emoji :smiling_imp: from "smiling_imp"<br> + @emoji smirk @emoji :smirk: from "smirk"<br> + @emoji smirk_cat @emoji :smirk_cat: from "smirk_cat"<br> + @emoji smoking @emoji :smoking: from "smoking"<br> + @emoji snail @emoji :snail: from "snail"<br> + @emoji snake @emoji :snake: from "snake"<br> + @emoji sneezing_face @emoji :sneezing_face: from "sneezing_face"<br> + @emoji snowboarder @emoji :snowboarder: from "snowboarder"<br> + @emoji snowflake @emoji :snowflake: from "snowflake"<br> + @emoji snowman @emoji :snowman: from "snowman"<br> + @emoji snowman_with_snow @emoji :snowman_with_snow: from "snowman_with_snow"<br> + @emoji sob @emoji :sob: from "sob"<br> + @emoji soccer @emoji :soccer: from "soccer"<br> + @emoji solomon_islands @emoji :solomon_islands: from "solomon_islands"<br> + @emoji somalia @emoji :somalia: from "somalia"<br> + @emoji soon @emoji :soon: from "soon"<br> + @emoji sos @emoji :sos: from "sos"<br> + @emoji sound @emoji :sound: from "sound"<br> + @emoji south_africa @emoji :south_africa: from "south_africa"<br> + @emoji south_georgia_south_sandwich_islands @emoji :south_georgia_south_sandwich_islands: from "south_georgia_south_sandwich_islands"<br> + @emoji south_sudan @emoji :south_sudan: from "south_sudan"<br> + @emoji space_invader @emoji :space_invader: from "space_invader"<br> + @emoji spades @emoji :spades: from "spades"<br> + @emoji spaghetti @emoji :spaghetti: from "spaghetti"<br> + @emoji sparkle @emoji :sparkle: from "sparkle"<br> + @emoji sparkler @emoji :sparkler: from "sparkler"<br> + @emoji sparkles @emoji :sparkles: from "sparkles"<br> + @emoji sparkling_heart @emoji :sparkling_heart: from "sparkling_heart"<br> + @emoji speak_no_evil @emoji :speak_no_evil: from "speak_no_evil"<br> + @emoji speaker @emoji :speaker: from "speaker"<br> + @emoji speaking_head @emoji :speaking_head: from "speaking_head"<br> + @emoji speech_balloon @emoji :speech_balloon: from "speech_balloon"<br> + @emoji speedboat @emoji :speedboat: from "speedboat"<br> + @emoji spider @emoji :spider: from "spider"<br> + @emoji spider_web @emoji :spider_web: from "spider_web"<br> + @emoji spiral_calendar @emoji :spiral_calendar: from "spiral_calendar"<br> + @emoji spiral_notepad @emoji :spiral_notepad: from "spiral_notepad"<br> + @emoji spoon @emoji :spoon: from "spoon"<br> + @emoji squid @emoji :squid: from "squid"<br> + @emoji sri_lanka @emoji :sri_lanka: from "sri_lanka"<br> + @emoji st_barthelemy @emoji :st_barthelemy: from "st_barthelemy"<br> + @emoji st_helena @emoji :st_helena: from "st_helena"<br> + @emoji st_kitts_nevis @emoji :st_kitts_nevis: from "st_kitts_nevis"<br> + @emoji st_lucia @emoji :st_lucia: from "st_lucia"<br> + @emoji st_pierre_miquelon @emoji :st_pierre_miquelon: from "st_pierre_miquelon"<br> + @emoji st_vincent_grenadines @emoji :st_vincent_grenadines: from "st_vincent_grenadines"<br> + @emoji stadium @emoji :stadium: from "stadium"<br> + @emoji star @emoji :star: from "star"<br> + @emoji star2 @emoji :star2: from "star2"<br> + @emoji star_and_crescent @emoji :star_and_crescent: from "star_and_crescent"<br> + @emoji star_of_david @emoji :star_of_david: from "star_of_david"<br> + @emoji stars @emoji :stars: from "stars"<br> + @emoji station @emoji :station: from "station"<br> + @emoji statue_of_liberty @emoji :statue_of_liberty: from "statue_of_liberty"<br> + @emoji steam_locomotive @emoji :steam_locomotive: from "steam_locomotive"<br> + @emoji stew @emoji :stew: from "stew"<br> + @emoji stop_button @emoji :stop_button: from "stop_button"<br> + @emoji stop_sign @emoji :stop_sign: from "stop_sign"<br> + @emoji stopwatch @emoji :stopwatch: from "stopwatch"<br> + @emoji straight_ruler @emoji :straight_ruler: from "straight_ruler"<br> + @emoji strawberry @emoji :strawberry: from "strawberry"<br> + @emoji stuck_out_tongue @emoji :stuck_out_tongue: from "stuck_out_tongue"<br> + @emoji stuck_out_tongue_closed_eyes @emoji :stuck_out_tongue_closed_eyes: from "stuck_out_tongue_closed_eyes"<br> + @emoji stuck_out_tongue_winking_eye @emoji :stuck_out_tongue_winking_eye: from "stuck_out_tongue_winking_eye"<br> + @emoji studio_microphone @emoji :studio_microphone: from "studio_microphone"<br> + @emoji stuffed_flatbread @emoji :stuffed_flatbread: from "stuffed_flatbread"<br> + @emoji sudan @emoji :sudan: from "sudan"<br> + @emoji sun_behind_large_cloud @emoji :sun_behind_large_cloud: from "sun_behind_large_cloud"<br> + @emoji sun_behind_rain_cloud @emoji :sun_behind_rain_cloud: from "sun_behind_rain_cloud"<br> + @emoji sun_behind_small_cloud @emoji :sun_behind_small_cloud: from "sun_behind_small_cloud"<br> + @emoji sun_with_face @emoji :sun_with_face: from "sun_with_face"<br> + @emoji sunflower @emoji :sunflower: from "sunflower"<br> + @emoji sunglasses @emoji :sunglasses: from "sunglasses"<br> + @emoji sunny @emoji :sunny: from "sunny"<br> + @emoji sunrise @emoji :sunrise: from "sunrise"<br> + @emoji sunrise_over_mountains @emoji :sunrise_over_mountains: from "sunrise_over_mountains"<br> + @emoji surfer @emoji :surfer: from "surfer"<br> + @emoji surfing_man @emoji :surfing_man: from "surfing_man"<br> + @emoji surfing_woman @emoji :surfing_woman: from "surfing_woman"<br> + @emoji suriname @emoji :suriname: from "suriname"<br> + @emoji sushi @emoji :sushi: from "sushi"<br> + @emoji suspension_railway @emoji :suspension_railway: from "suspension_railway"<br> + @emoji swaziland @emoji :swaziland: from "swaziland"<br> + @emoji sweat @emoji :sweat: from "sweat"<br> + @emoji sweat_drops @emoji :sweat_drops: from "sweat_drops"<br> + @emoji sweat_smile @emoji :sweat_smile: from "sweat_smile"<br> + @emoji sweden @emoji :sweden: from "sweden"<br> + @emoji sweet_potato @emoji :sweet_potato: from "sweet_potato"<br> + @emoji swimmer @emoji :swimmer: from "swimmer"<br> + @emoji swimming_man @emoji :swimming_man: from "swimming_man"<br> + @emoji swimming_woman @emoji :swimming_woman: from "swimming_woman"<br> + @emoji switzerland @emoji :switzerland: from "switzerland"<br> + @emoji symbols @emoji :symbols: from "symbols"<br> + @emoji synagogue @emoji :synagogue: from "synagogue"<br> + @emoji syria @emoji :syria: from "syria"<br> + @emoji syringe @emoji :syringe: from "syringe"<br> + @emoji taco @emoji :taco: from "taco"<br> + @emoji tada @emoji :tada: from "tada"<br> + @emoji taiwan @emoji :taiwan: from "taiwan"<br> + @emoji tajikistan @emoji :tajikistan: from "tajikistan"<br> + @emoji tanabata_tree @emoji :tanabata_tree: from "tanabata_tree"<br> + @emoji tangerine @emoji :tangerine: from "tangerine"<br> + @emoji tanzania @emoji :tanzania: from "tanzania"<br> + @emoji taurus @emoji :taurus: from "taurus"<br> + @emoji taxi @emoji :taxi: from "taxi"<br> + @emoji tea @emoji :tea: from "tea"<br> + @emoji telephone @emoji :telephone: from "telephone"<br> + @emoji telephone_receiver @emoji :telephone_receiver: from "telephone_receiver"<br> + @emoji telescope @emoji :telescope: from "telescope"<br> + @emoji tennis @emoji :tennis: from "tennis"<br> + @emoji tent @emoji :tent: from "tent"<br> + @emoji thailand @emoji :thailand: from "thailand"<br> + @emoji thermometer @emoji :thermometer: from "thermometer"<br> + @emoji thinking @emoji :thinking: from "thinking"<br> + @emoji thought_balloon @emoji :thought_balloon: from "thought_balloon"<br> + @emoji three @emoji :three: from "three"<br> + @emoji thumbsdown @emoji :thumbsdown: from "thumbsdown"<br> + @emoji thumbsup @emoji :thumbsup: from "thumbsup"<br> + @emoji ticket @emoji :ticket: from "ticket"<br> + @emoji tickets @emoji :tickets: from "tickets"<br> + @emoji tiger @emoji :tiger: from "tiger"<br> + @emoji tiger2 @emoji :tiger2: from "tiger2"<br> + @emoji timer_clock @emoji :timer_clock: from "timer_clock"<br> + @emoji timor_leste @emoji :timor_leste: from "timor_leste"<br> + @emoji tipping_hand_man @emoji :tipping_hand_man: from "tipping_hand_man"<br> + @emoji tipping_hand_woman @emoji :tipping_hand_woman: from "tipping_hand_woman"<br> + @emoji tired_face @emoji :tired_face: from "tired_face"<br> + @emoji tm @emoji :tm: from "tm"<br> + @emoji togo @emoji :togo: from "togo"<br> + @emoji toilet @emoji :toilet: from "toilet"<br> + @emoji tokelau @emoji :tokelau: from "tokelau"<br> + @emoji tokyo_tower @emoji :tokyo_tower: from "tokyo_tower"<br> + @emoji tomato @emoji :tomato: from "tomato"<br> + @emoji tonga @emoji :tonga: from "tonga"<br> + @emoji tongue @emoji :tongue: from "tongue"<br> + @emoji top @emoji :top: from "top"<br> + @emoji tophat @emoji :tophat: from "tophat"<br> + @emoji tornado @emoji :tornado: from "tornado"<br> + @emoji tr @emoji :tr: from "tr"<br> + @emoji trackball @emoji :trackball: from "trackball"<br> + @emoji tractor @emoji :tractor: from "tractor"<br> + @emoji traffic_light @emoji :traffic_light: from "traffic_light"<br> + @emoji train @emoji :train: from "train"<br> + @emoji train2 @emoji :train2: from "train2"<br> + @emoji tram @emoji :tram: from "tram"<br> + @emoji triangular_flag_on_post @emoji :triangular_flag_on_post: from "triangular_flag_on_post"<br> + @emoji triangular_ruler @emoji :triangular_ruler: from "triangular_ruler"<br> + @emoji trident @emoji :trident: from "trident"<br> + @emoji trinidad_tobago @emoji :trinidad_tobago: from "trinidad_tobago"<br> + @emoji triumph @emoji :triumph: from "triumph"<br> + @emoji trolleybus @emoji :trolleybus: from "trolleybus"<br> + @emoji trophy @emoji :trophy: from "trophy"<br> + @emoji tropical_drink @emoji :tropical_drink: from "tropical_drink"<br> + @emoji tropical_fish @emoji :tropical_fish: from "tropical_fish"<br> + @emoji truck @emoji :truck: from "truck"<br> + @emoji trumpet @emoji :trumpet: from "trumpet"<br> + @emoji tshirt @emoji :tshirt: from "tshirt"<br> + @emoji tulip @emoji :tulip: from "tulip"<br> + @emoji tumbler_glass @emoji :tumbler_glass: from "tumbler_glass"<br> + @emoji tunisia @emoji :tunisia: from "tunisia"<br> + @emoji turkey @emoji :turkey: from "turkey"<br> + @emoji turkmenistan @emoji :turkmenistan: from "turkmenistan"<br> + @emoji turks_caicos_islands @emoji :turks_caicos_islands: from "turks_caicos_islands"<br> + @emoji turtle @emoji :turtle: from "turtle"<br> + @emoji tuvalu @emoji :tuvalu: from "tuvalu"<br> + @emoji tv @emoji :tv: from "tv"<br> + @emoji twisted_rightwards_arrows @emoji :twisted_rightwards_arrows: from "twisted_rightwards_arrows"<br> + @emoji two @emoji :two: from "two"<br> + @emoji two_hearts @emoji :two_hearts: from "two_hearts"<br> + @emoji two_men_holding_hands @emoji :two_men_holding_hands: from "two_men_holding_hands"<br> + @emoji two_women_holding_hands @emoji :two_women_holding_hands: from "two_women_holding_hands"<br> + @emoji u5272 @emoji :u5272: from "u5272"<br> + @emoji u5408 @emoji :u5408: from "u5408"<br> + @emoji u55b6 @emoji :u55b6: from "u55b6"<br> + @emoji u6307 @emoji :u6307: from "u6307"<br> + @emoji u6708 @emoji :u6708: from "u6708"<br> + @emoji u6709 @emoji :u6709: from "u6709"<br> + @emoji u6e80 @emoji :u6e80: from "u6e80"<br> + @emoji u7121 @emoji :u7121: from "u7121"<br> + @emoji u7533 @emoji :u7533: from "u7533"<br> + @emoji u7981 @emoji :u7981: from "u7981"<br> + @emoji u7a7a @emoji :u7a7a: from "u7a7a"<br> + @emoji uganda @emoji :uganda: from "uganda"<br> + @emoji uk @emoji :uk: from "uk"<br> + @emoji ukraine @emoji :ukraine: from "ukraine"<br> + @emoji umbrella @emoji :umbrella: from "umbrella"<br> + @emoji unamused @emoji :unamused: from "unamused"<br> + @emoji underage @emoji :underage: from "underage"<br> + @emoji unicorn @emoji :unicorn: from "unicorn"<br> + @emoji united_arab_emirates @emoji :united_arab_emirates: from "united_arab_emirates"<br> + @emoji unlock @emoji :unlock: from "unlock"<br> + @emoji up @emoji :up: from "up"<br> + @emoji upside_down_face @emoji :upside_down_face: from "upside_down_face"<br> + @emoji uruguay @emoji :uruguay: from "uruguay"<br> + @emoji us @emoji :us: from "us"<br> + @emoji us_virgin_islands @emoji :us_virgin_islands: from "us_virgin_islands"<br> + @emoji uzbekistan @emoji :uzbekistan: from "uzbekistan"<br> + @emoji v @emoji :v: from "v"<br> + @emoji vanuatu @emoji :vanuatu: from "vanuatu"<br> + @emoji vatican_city @emoji :vatican_city: from "vatican_city"<br> + @emoji venezuela @emoji :venezuela: from "venezuela"<br> + @emoji vertical_traffic_light @emoji :vertical_traffic_light: from "vertical_traffic_light"<br> + @emoji vhs @emoji :vhs: from "vhs"<br> + @emoji vibration_mode @emoji :vibration_mode: from "vibration_mode"<br> + @emoji video_camera @emoji :video_camera: from "video_camera"<br> + @emoji video_game @emoji :video_game: from "video_game"<br> + @emoji vietnam @emoji :vietnam: from "vietnam"<br> + @emoji violin @emoji :violin: from "violin"<br> + @emoji virgo @emoji :virgo: from "virgo"<br> + @emoji volcano @emoji :volcano: from "volcano"<br> + @emoji volleyball @emoji :volleyball: from "volleyball"<br> + @emoji vs @emoji :vs: from "vs"<br> + @emoji vulcan_salute @emoji :vulcan_salute: from "vulcan_salute"<br> + @emoji walking @emoji :walking: from "walking"<br> + @emoji walking_man @emoji :walking_man: from "walking_man"<br> + @emoji walking_woman @emoji :walking_woman: from "walking_woman"<br> + @emoji wallis_futuna @emoji :wallis_futuna: from "wallis_futuna"<br> + @emoji waning_crescent_moon @emoji :waning_crescent_moon: from "waning_crescent_moon"<br> + @emoji waning_gibbous_moon @emoji :waning_gibbous_moon: from "waning_gibbous_moon"<br> + @emoji warning @emoji :warning: from "warning"<br> + @emoji wastebasket @emoji :wastebasket: from "wastebasket"<br> + @emoji watch @emoji :watch: from "watch"<br> + @emoji water_buffalo @emoji :water_buffalo: from "water_buffalo"<br> + @emoji watermelon @emoji :watermelon: from "watermelon"<br> + @emoji wave @emoji :wave: from "wave"<br> + @emoji wavy_dash @emoji :wavy_dash: from "wavy_dash"<br> + @emoji waxing_crescent_moon @emoji :waxing_crescent_moon: from "waxing_crescent_moon"<br> + @emoji waxing_gibbous_moon @emoji :waxing_gibbous_moon: from "waxing_gibbous_moon"<br> + @emoji wc @emoji :wc: from "wc"<br> + @emoji weary @emoji :weary: from "weary"<br> + @emoji wedding @emoji :wedding: from "wedding"<br> + @emoji weight_lifting_man @emoji :weight_lifting_man: from "weight_lifting_man"<br> + @emoji weight_lifting_woman @emoji :weight_lifting_woman: from "weight_lifting_woman"<br> + @emoji western_sahara @emoji :western_sahara: from "western_sahara"<br> + @emoji whale @emoji :whale: from "whale"<br> + @emoji whale2 @emoji :whale2: from "whale2"<br> + @emoji wheel_of_dharma @emoji :wheel_of_dharma: from "wheel_of_dharma"<br> + @emoji wheelchair @emoji :wheelchair: from "wheelchair"<br> + @emoji white_check_mark @emoji :white_check_mark: from "white_check_mark"<br> + @emoji white_circle @emoji :white_circle: from "white_circle"<br> + @emoji white_flag @emoji :white_flag: from "white_flag"<br> + @emoji white_flower @emoji :white_flower: from "white_flower"<br> + @emoji white_large_square @emoji :white_large_square: from "white_large_square"<br> + @emoji white_medium_small_square @emoji :white_medium_small_square: from "white_medium_small_square"<br> + @emoji white_medium_square @emoji :white_medium_square: from "white_medium_square"<br> + @emoji white_small_square @emoji :white_small_square: from "white_small_square"<br> + @emoji white_square_button @emoji :white_square_button: from "white_square_button"<br> + @emoji wilted_flower @emoji :wilted_flower: from "wilted_flower"<br> + @emoji wind_chime @emoji :wind_chime: from "wind_chime"<br> + @emoji wind_face @emoji :wind_face: from "wind_face"<br> + @emoji wine_glass @emoji :wine_glass: from "wine_glass"<br> + @emoji wink @emoji :wink: from "wink"<br> + @emoji wolf @emoji :wolf: from "wolf"<br> + @emoji woman @emoji :woman: from "woman"<br> + @emoji woman_artist @emoji :woman_artist: from "woman_artist"<br> + @emoji woman_astronaut @emoji :woman_astronaut: from "woman_astronaut"<br> + @emoji woman_cartwheeling @emoji :woman_cartwheeling: from "woman_cartwheeling"<br> + @emoji woman_cook @emoji :woman_cook: from "woman_cook"<br> + @emoji woman_facepalming @emoji :woman_facepalming: from "woman_facepalming"<br> + @emoji woman_factory_worker @emoji :woman_factory_worker: from "woman_factory_worker"<br> + @emoji woman_farmer @emoji :woman_farmer: from "woman_farmer"<br> + @emoji woman_firefighter @emoji :woman_firefighter: from "woman_firefighter"<br> + @emoji woman_health_worker @emoji :woman_health_worker: from "woman_health_worker"<br> + @emoji woman_judge @emoji :woman_judge: from "woman_judge"<br> + @emoji woman_juggling @emoji :woman_juggling: from "woman_juggling"<br> + @emoji woman_mechanic @emoji :woman_mechanic: from "woman_mechanic"<br> + @emoji woman_office_worker @emoji :woman_office_worker: from "woman_office_worker"<br> + @emoji woman_pilot @emoji :woman_pilot: from "woman_pilot"<br> + @emoji woman_playing_handball @emoji :woman_playing_handball: from "woman_playing_handball"<br> + @emoji woman_playing_water_polo @emoji :woman_playing_water_polo: from "woman_playing_water_polo"<br> + @emoji woman_scientist @emoji :woman_scientist: from "woman_scientist"<br> + @emoji woman_shrugging @emoji :woman_shrugging: from "woman_shrugging"<br> + @emoji woman_singer @emoji :woman_singer: from "woman_singer"<br> + @emoji woman_student @emoji :woman_student: from "woman_student"<br> + @emoji woman_teacher @emoji :woman_teacher: from "woman_teacher"<br> + @emoji woman_technologist @emoji :woman_technologist: from "woman_technologist"<br> + @emoji woman_with_turban @emoji :woman_with_turban: from "woman_with_turban"<br> + @emoji womans_clothes @emoji :womans_clothes: from "womans_clothes"<br> + @emoji womans_hat @emoji :womans_hat: from "womans_hat"<br> + @emoji women_wrestling @emoji :women_wrestling: from "women_wrestling"<br> + @emoji womens @emoji :womens: from "womens"<br> + @emoji world_map @emoji :world_map: from "world_map"<br> + @emoji worried @emoji :worried: from "worried"<br> + @emoji wrench @emoji :wrench: from "wrench"<br> + @emoji writing_hand @emoji :writing_hand: from "writing_hand"<br> + @emoji x @emoji :x: from "x"<br> + @emoji yellow_heart @emoji :yellow_heart: from "yellow_heart"<br> + @emoji yemen @emoji :yemen: from "yemen"<br> + @emoji yen @emoji :yen: from "yen"<br> + @emoji yin_yang @emoji :yin_yang: from "yin_yang"<br> + @emoji yum @emoji :yum: from "yum"<br> + @emoji zambia @emoji :zambia: from "zambia"<br> + @emoji zap @emoji :zap: from "zap"<br> + @emoji zero @emoji :zero: from "zero"<br> + @emoji zimbabwe @emoji :zimbabwe: from "zimbabwe"<br> + @emoji zipper_mouth_face @emoji :zipper_mouth_face: from "zipper_mouth_face"<br> + @emoji zzz @emoji :zzz: from "zzz"<br> + */ diff --git a/testing/077/077__no__xml__namespace__members__in__file__scope_8h.xml b/testing/077/077__no__xml__namespace__members__in__file__scope_8h.xml new file mode 100644 index 0000000..9825cc1 --- /dev/null +++ b/testing/077/077__no__xml__namespace__members__in__file__scope_8h.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="077__no__xml__namespace__members__in__file__scope_8h" kind="file" language="C++"> + <compoundname>077_no_xml_namespace_members_in_file_scope.h</compoundname> + <innernamespace refid="namespace_namespace">Namespace</innernamespace> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="077_no_xml_namespace_members_in_file_scope.h"/> + </compounddef> +</doxygen> diff --git a/testing/077_no_xml_namespace_members_in_file_scope.h b/testing/077_no_xml_namespace_members_in_file_scope.h new file mode 100644 index 0000000..bf3dc64 --- /dev/null +++ b/testing/077_no_xml_namespace_members_in_file_scope.h @@ -0,0 +1,16 @@ +// objective: test that namespace members are not put to file docs by default +// check: 077__no__xml__namespace__members__in__file__scope_8h.xml + +namespace Namespace { + +/** +@brief A function + +Detailed documentation. +*/ +void foo(); + +/** @brief An enum */ +enum class Enum {}; + +} diff --git a/testing/078/078__xml__namespace__members__in__file__scope_8h.xml b/testing/078/078__xml__namespace__members__in__file__scope_8h.xml new file mode 100644 index 0000000..e0a0343 --- /dev/null +++ b/testing/078/078__xml__namespace__members__in__file__scope_8h.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="078__xml__namespace__members__in__file__scope_8h" kind="file" language="C++"> + <compoundname>078_xml_namespace_members_in_file_scope.h</compoundname> + <innernamespace refid="namespace_namespace">Namespace</innernamespace> + <sectiondef kind="enum"> + <memberdef kind="enum" id="078__xml__namespace__members__in__file__scope_8h_1add172b93283b1ab7612c3ca6cc5dcfea" prot="public" static="no" strong="yes"> + <type/> + <name>Enum</name> + <briefdescription> + <para>An enum. </para> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="078_xml_namespace_members_in_file_scope.h" line="15" column="1" bodyfile="078_xml_namespace_members_in_file_scope.h" bodystart="15" bodyend="15"/> + </memberdef> + </sectiondef> + <sectiondef kind="func"> + <memberdef kind="function" id="078__xml__namespace__members__in__file__scope_8h_1a0f1fe1a972c7c4196988a1bdde63ec77" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type>void</type> + <definition>void Namespace::foo</definition> + <argsstring>()</argsstring> + <name>foo</name> + <briefdescription> + <para>A function. </para> + </briefdescription> + <detaileddescription> + <para>Detailed documentation. </para> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="078_xml_namespace_members_in_file_scope.h" line="12" column="1"/> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="078_xml_namespace_members_in_file_scope.h"/> + </compounddef> +</doxygen> diff --git a/testing/078_xml_namespace_members_in_file_scope.h b/testing/078_xml_namespace_members_in_file_scope.h new file mode 100644 index 0000000..f456464 --- /dev/null +++ b/testing/078_xml_namespace_members_in_file_scope.h @@ -0,0 +1,17 @@ +// objective: test that namespace members are put to file docs when enabled +// check: 078__xml__namespace__members__in__file__scope_8h.xml +// config: XML_NS_MEMB_FILE_SCOPE = YES + +namespace Namespace { + +/** +@brief A function + +Detailed documentation. +*/ +void foo(); + +/** @brief An enum */ +enum class Enum {}; + +} diff --git a/testing/079/empty.xml b/testing/079/empty.xml new file mode 100644 index 0000000..3e1d691 --- /dev/null +++ b/testing/079/empty.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="empty" kind="page"> + <compoundname>empty</compoundname> + <title>An empty page</title> + <briefdescription> + </briefdescription> + <detaileddescription> +<para>With an empty TOC. </para> + </detaileddescription> + </compounddef> +</doxygen> diff --git a/testing/079/levels.xml b/testing/079/levels.xml new file mode 100644 index 0000000..bbb4232 --- /dev/null +++ b/testing/079/levels.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="levels" kind="page"> + <compoundname>levels</compoundname> + <title>A page with two-level TOC</title> + <tableofcontents> + <tocsect> + <name>A section that's in TOC</name> + <reference>levels_1first</reference> + <tableofcontents> + <tocsect> + <name>A subsection that's in TOC</name> + <reference>levels_1first2</reference> + </tocsect> + </tableofcontents> + </tocsect> + <tocsect> + <name>A section that's in TOC again</name> + <reference>levels_1second</reference> + </tocsect> + </tableofcontents> + <briefdescription> + </briefdescription> + <detaileddescription> + <sect1 id="levels_1first"> + <title>A section that's in TOC</title> + <sect2 id="levels_1first2"> + <title>A subsection that's in TOC</title> + <sect3 id="levels_1first3"> + <title>A subsubsection that's not in TOC</title> + <para>Nay!</para> + </sect3> + </sect2> + </sect1> + <sect1 id="levels_1second"> + <title>A section that's in TOC again</title> + <para>Yay! </para> + </sect1> + </detaileddescription> + </compounddef> +</doxygen> diff --git a/testing/079_tableofcontents.dox b/testing/079_tableofcontents.dox new file mode 100644 index 0000000..7512463 --- /dev/null +++ b/testing/079_tableofcontents.dox @@ -0,0 +1,26 @@ +// objective: test TOC generation for an empty page +// check: empty.xml +// check: levels.xml +/** +@page empty An empty page + +@tableofcontents + +With an empty TOC. +*/ + +/** +@page levels A page with two-level TOC + +@tableofcontents{xml:2} + +@section first A section that's in TOC +@subsection first2 A subsection that's in TOC +@subsubsection first3 A subsubsection that's not in TOC + +Nay! + +@section second A section that's in TOC again + +Yay! +*/ diff --git a/testing/runtests.py b/testing/runtests.py index 452c36e..358fb91 100644..100755 --- a/testing/runtests.py +++ b/testing/runtests.py @@ -331,13 +331,14 @@ class TestManager: tester = Tester(self.args,test) tester.run(self) res=self.result() - if self.args.xhtml and not res and not self.args.keep: + if self.args.xhtml and self.args.inputdir!='.' and not res and not self.args.keep: shutil.rmtree("dtd",ignore_errors=True) return 0 if self.args.updateref else res def prepare_dtd(self): - shutil.rmtree("dtd",ignore_errors=True) - shutil.copytree(self.args.inputdir+"/dtd", "dtd") + if self.args.inputdir!='.': + shutil.rmtree("dtd",ignore_errors=True) + shutil.copytree(self.args.inputdir+"/dtd", "dtd") def main(): # argument handling @@ -411,7 +412,7 @@ def main(): tests.append(glob.glob('0%s_*'%id)) tests.append(glob.glob('00%s_*'%id)) if (not args.ids and not args.start_id): # find all tests - tests = glob.glob('[0-9][0-9][0-9]_*') + tests = sorted(glob.glob('[0-9][0-9][0-9]_*')) else: tests = list(itertools.chain.from_iterable(tests)) os.chdir(starting_directory) |